This is an automated email from the ASF dual-hosted git repository.
domgarguilo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/main by this push:
new 6452727153 Make ZooCache close() and clear() more idempotent (#5338)
6452727153 is described below
commit 645272715326c88bbfa867c3ad859a8524096ea7
Author: Dom G. <[email protected]>
AuthorDate: Fri Feb 14 18:05:41 2025 -0500
Make ZooCache close() and clear() more idempotent (#5338)
* Return early in clear() and close() if this ZooCache has already been
closed. This avoids throwing an exception
---
.../org/apache/accumulo/core/zookeeper/ZooCache.java | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git
a/core/src/main/java/org/apache/accumulo/core/zookeeper/ZooCache.java
b/core/src/main/java/org/apache/accumulo/core/zookeeper/ZooCache.java
index 791e8d85bc..8d35176d2c 100644
--- a/core/src/main/java/org/apache/accumulo/core/zookeeper/ZooCache.java
+++ b/core/src/main/java/org/apache/accumulo/core/zookeeper/ZooCache.java
@@ -349,7 +349,7 @@ public class ZooCache {
* @return children list, or null if node has no children or does not exist
*/
public List<String> getChildren(final String zPath) {
- Preconditions.checkState(!closed);
+ Preconditions.checkState(!closed, "Operation not allowed: ZooCache is
already closed.");
ensureWatched(zPath);
ZooRunnable<List<String>> zr = new ZooRunnable<>() {
@@ -409,7 +409,7 @@ public class ZooCache {
* @return path data, or null if non-existent
*/
public byte[] get(final String zPath, final ZcStat status) {
- Preconditions.checkState(!closed);
+ Preconditions.checkState(!closed, "Operation not allowed: ZooCache is
already closed.");
ensureWatched(zPath);
ZooRunnable<byte[]> zr = new ZooRunnable<>() {
@@ -474,7 +474,7 @@ public class ZooCache {
* @param cachedStat cached statistic, that is or will be cached
*/
protected void copyStats(ZcStat userStat, ZcStat cachedStat) {
- Preconditions.checkState(!closed);
+ Preconditions.checkState(!closed, "Operation not allowed: ZooCache is
already closed.");
if (userStat != null && cachedStat != null) {
userStat.set(cachedStat);
}
@@ -484,13 +484,18 @@ public class ZooCache {
* Clears this cache.
*/
protected void clear() {
- Preconditions.checkState(!closed);
+ if (closed) {
+ return;
+ }
nodeCache.clear();
updateCount.incrementAndGet();
log.trace("{} cleared all from cache", cacheId);
}
public void close() {
+ if (closed) {
+ return;
+ }
clear();
closed = true;
}
@@ -500,7 +505,7 @@ public class ZooCache {
* count is the same, then it means cache did not change.
*/
public long getUpdateCount() {
- Preconditions.checkState(!closed);
+ Preconditions.checkState(!closed, "Operation not allowed: ZooCache is
already closed.");
return updateCount.get();
}
@@ -534,7 +539,7 @@ public class ZooCache {
* Removes all paths in the cache match the predicate.
*/
public void clear(Predicate<String> pathPredicate) {
- Preconditions.checkState(!closed);
+ Preconditions.checkState(!closed, "Operation not allowed: ZooCache is
already closed.");
Predicate<String> pathPredicateWrapper = path -> {
boolean testResult = pathPredicate.test(path);
if (testResult) {