Skip to content

Commit 0ff7558

Browse files
committed
Fix cache.clear() to use collection. (#1371)
Closes #1369. Co-authored-by: Michael Reiche <[email protected]>
1 parent 6bd27f4 commit 0ff7558

File tree

4 files changed

+21
-18
lines changed

4 files changed

+21
-18
lines changed

src/main/java/org/springframework/data/couchbase/cache/CouchbaseCache.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,12 @@ public boolean evictIfPresent(final Object key) {
138138

139139
@Override
140140
public boolean invalidate() {
141-
return cacheWriter.clear(cacheConfig.getKeyPrefixFor(name)) > 0;
141+
return cacheWriter.clear(cacheConfig.getCollectionName(), cacheConfig.getKeyPrefixFor(name)) > 0;
142142
}
143143

144144
@Override
145145
public void clear() {
146-
cacheWriter.clear(cacheConfig.getKeyPrefixFor(name));
146+
cacheWriter.clear( cacheConfig.getCollectionName(), cacheConfig.getKeyPrefixFor(name));
147147
}
148148

149149
/**

src/main/java/org/springframework/data/couchbase/cache/CouchbaseCacheWriter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,6 @@ Object putIfAbsent(String collectionName, String key, Object value, @Nullable Du
7474
* @param pattern the pattern to clear.
7575
* @return the number of cleared items.
7676
*/
77-
long clear(String pattern);
77+
long clear(String collectionName, String pattern);
7878

7979
}

src/main/java/org/springframework/data/couchbase/cache/DefaultCouchbaseCacheWriter.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static com.couchbase.client.java.kv.InsertOptions.*;
2121
import static com.couchbase.client.java.kv.UpsertOptions.*;
2222
import static com.couchbase.client.java.query.QueryOptions.*;
23+
import static com.couchbase.client.java.query.QueryScanConsistency.REQUEST_PLUS;
2324

2425
import java.time.Duration;
2526

@@ -102,10 +103,10 @@ public boolean remove(final String collectionName, final String key) {
102103
}
103104

104105
@Override
105-
public long clear(final String pattern) {
106-
QueryResult result = clientFactory.getCluster().query(
107-
"DELETE FROM `" + clientFactory.getBucket().name() + "` where meta().id LIKE $pattern",
108-
queryOptions().metrics(true).parameters(JsonObject.create().put("pattern", pattern + "%")));
106+
public long clear(final String collectionName, final String pattern) {
107+
QueryResult result = clientFactory.getScope().query(
108+
"DELETE FROM `" + collectionName + "` where meta().id LIKE $pattern",
109+
queryOptions().scanConsistency(REQUEST_PLUS).metrics(true).parameters(JsonObject.create().put("pattern", pattern + "%")));
109110
return result.metaData().metrics().map(QueryMetrics::mutationCount).orElse(0L);
110111
}
111112

src/test/java/org/springframework/data/couchbase/cache/CouchbaseCacheCollectionIntegrationTests.java

+13-11
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package org.springframework.data.couchbase.cache;
1818

19-
import com.couchbase.client.java.query.QueryOptions;
2019
import org.junit.jupiter.api.BeforeEach;
2120
import org.junit.jupiter.api.Test;
2221
import org.springframework.data.couchbase.util.Capabilities;
@@ -26,7 +25,6 @@
2625

2726
import java.util.UUID;
2827

29-
import static com.couchbase.client.java.query.QueryScanConsistency.REQUEST_PLUS;
3028
import static org.junit.Assert.assertNotNull;
3129
import static org.junit.jupiter.api.Assertions.assertEquals;
3230
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -47,15 +45,7 @@ public void beforeEach() {
4745
super.beforeEach();
4846
cache = CouchbaseCacheManager.create(couchbaseTemplate.getCouchbaseClientFactory()).createCouchbaseCache("myCache",
4947
CouchbaseCacheConfiguration.defaultCacheConfig().collection("my_collection"));
50-
clear(cache);
51-
}
52-
53-
private void clear(CouchbaseCache c) {
54-
couchbaseTemplate.getCouchbaseClientFactory().getCluster().query("SELECT count(*) from `" + bucketName() + "`",
55-
QueryOptions.queryOptions().scanConsistency(REQUEST_PLUS));
56-
c.clear();
57-
couchbaseTemplate.getCouchbaseClientFactory().getCluster().query("SELECT count(*) from `" + bucketName() + "`",
58-
QueryOptions.queryOptions().scanConsistency(REQUEST_PLUS));
48+
cache.clear();
5949
}
6050

6151
@Test
@@ -76,9 +66,21 @@ void cacheEvict() {
7666
cache.put(user1.getId(), user1); // put user1
7767
cache.put(user2.getId(), user2); // put user2
7868
cache.evict(user1.getId()); // evict user1
69+
assertNull(cache.get(user1.getId())); // get user1 -> not present
7970
assertEquals(user2, cache.get(user2.getId()).get()); // get user2 -> present
8071
}
8172

73+
@Test
74+
void cacheClear() {
75+
CacheUser user1 = new CacheUser(UUID.randomUUID().toString(), "first1", "last1");
76+
CacheUser user2 = new CacheUser(UUID.randomUUID().toString(), "first2", "last2");
77+
cache.put(user1.getId(), user1); // put user1
78+
cache.put(user2.getId(), user2); // put user2
79+
cache.clear();
80+
assertNull(cache.get(user1.getId())); // get user1 -> not present
81+
assertNull(cache.get(user2.getId())); // get user2 -> not present
82+
}
83+
8284
@Test
8385
void cacheHitMiss() {
8486
CacheUser user1 = new CacheUser(UUID.randomUUID().toString(), "first1", "last1");

0 commit comments

Comments
 (0)