diff --git a/src/main/java/org/springframework/data/couchbase/cache/CouchbaseCache.java b/src/main/java/org/springframework/data/couchbase/cache/CouchbaseCache.java index 8df20f754..d31f66674 100644 --- a/src/main/java/org/springframework/data/couchbase/cache/CouchbaseCache.java +++ b/src/main/java/org/springframework/data/couchbase/cache/CouchbaseCache.java @@ -138,12 +138,12 @@ public boolean evictIfPresent(final Object key) { @Override public boolean invalidate() { - return cacheWriter.clear(cacheConfig.getKeyPrefixFor(name)) > 0; + return cacheWriter.clear(cacheConfig.getCollectionName(), cacheConfig.getKeyPrefixFor(name)) > 0; } @Override public void clear() { - cacheWriter.clear(cacheConfig.getKeyPrefixFor(name)); + cacheWriter.clear( cacheConfig.getCollectionName(), cacheConfig.getKeyPrefixFor(name)); } /** diff --git a/src/main/java/org/springframework/data/couchbase/cache/CouchbaseCacheWriter.java b/src/main/java/org/springframework/data/couchbase/cache/CouchbaseCacheWriter.java index 20eb4113e..fb7d18a83 100644 --- a/src/main/java/org/springframework/data/couchbase/cache/CouchbaseCacheWriter.java +++ b/src/main/java/org/springframework/data/couchbase/cache/CouchbaseCacheWriter.java @@ -74,6 +74,6 @@ Object putIfAbsent(String collectionName, String key, Object value, @Nullable Du * @param pattern the pattern to clear. * @return the number of cleared items. */ - long clear(String pattern); + long clear(String collectionName, String pattern); } diff --git a/src/main/java/org/springframework/data/couchbase/cache/DefaultCouchbaseCacheWriter.java b/src/main/java/org/springframework/data/couchbase/cache/DefaultCouchbaseCacheWriter.java index 8e501b7a7..a13041b6b 100644 --- a/src/main/java/org/springframework/data/couchbase/cache/DefaultCouchbaseCacheWriter.java +++ b/src/main/java/org/springframework/data/couchbase/cache/DefaultCouchbaseCacheWriter.java @@ -20,6 +20,7 @@ import static com.couchbase.client.java.kv.InsertOptions.*; import static com.couchbase.client.java.kv.UpsertOptions.*; import static com.couchbase.client.java.query.QueryOptions.*; +import static com.couchbase.client.java.query.QueryScanConsistency.REQUEST_PLUS; import java.time.Duration; @@ -102,10 +103,10 @@ public boolean remove(final String collectionName, final String key) { } @Override - public long clear(final String pattern) { - QueryResult result = clientFactory.getCluster().query( - "DELETE FROM `" + clientFactory.getBucket().name() + "` where meta().id LIKE $pattern", - queryOptions().metrics(true).parameters(JsonObject.create().put("pattern", pattern + "%"))); + public long clear(final String collectionName, final String pattern) { + QueryResult result = clientFactory.getScope().query( + "DELETE FROM `" + collectionName + "` where meta().id LIKE $pattern", + queryOptions().scanConsistency(REQUEST_PLUS).metrics(true).parameters(JsonObject.create().put("pattern", pattern + "%"))); return result.metaData().metrics().map(QueryMetrics::mutationCount).orElse(0L); } diff --git a/src/test/java/org/springframework/data/couchbase/cache/CouchbaseCacheCollectionIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/cache/CouchbaseCacheCollectionIntegrationTests.java index 65aea1e39..ec6026ca7 100644 --- a/src/test/java/org/springframework/data/couchbase/cache/CouchbaseCacheCollectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/cache/CouchbaseCacheCollectionIntegrationTests.java @@ -16,7 +16,6 @@ package org.springframework.data.couchbase.cache; -import com.couchbase.client.java.query.QueryOptions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.data.couchbase.util.Capabilities; @@ -26,7 +25,6 @@ import java.util.UUID; -import static com.couchbase.client.java.query.QueryScanConsistency.REQUEST_PLUS; import static org.junit.Assert.assertNotNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; @@ -47,15 +45,7 @@ public void beforeEach() { super.beforeEach(); cache = CouchbaseCacheManager.create(couchbaseTemplate.getCouchbaseClientFactory()).createCouchbaseCache("myCache", CouchbaseCacheConfiguration.defaultCacheConfig().collection("my_collection")); - clear(cache); - } - - private void clear(CouchbaseCache c) { - couchbaseTemplate.getCouchbaseClientFactory().getCluster().query("SELECT count(*) from `" + bucketName() + "`", - QueryOptions.queryOptions().scanConsistency(REQUEST_PLUS)); - c.clear(); - couchbaseTemplate.getCouchbaseClientFactory().getCluster().query("SELECT count(*) from `" + bucketName() + "`", - QueryOptions.queryOptions().scanConsistency(REQUEST_PLUS)); + cache.clear(); } @Test @@ -76,9 +66,21 @@ void cacheEvict() { cache.put(user1.getId(), user1); // put user1 cache.put(user2.getId(), user2); // put user2 cache.evict(user1.getId()); // evict user1 + assertNull(cache.get(user1.getId())); // get user1 -> not present assertEquals(user2, cache.get(user2.getId()).get()); // get user2 -> present } + @Test + void cacheClear() { + CacheUser user1 = new CacheUser(UUID.randomUUID().toString(), "first1", "last1"); + CacheUser user2 = new CacheUser(UUID.randomUUID().toString(), "first2", "last2"); + cache.put(user1.getId(), user1); // put user1 + cache.put(user2.getId(), user2); // put user2 + cache.clear(); + assertNull(cache.get(user1.getId())); // get user1 -> not present + assertNull(cache.get(user2.getId())); // get user2 -> not present + } + @Test void cacheHitMiss() { CacheUser user1 = new CacheUser(UUID.randomUUID().toString(), "first1", "last1");