diff --git a/server/base/src/main/java/org/apache/accumulo/server/metadata/RootConditionalWriter.java b/server/base/src/main/java/org/apache/accumulo/server/metadata/RootConditionalWriter.java index fcc8b300f88..f214ee8090e 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/metadata/RootConditionalWriter.java +++ b/server/base/src/main/java/org/apache/accumulo/server/metadata/RootConditionalWriter.java @@ -89,8 +89,6 @@ public Result write(ConditionalMutation mutation) { ServerConditionalMutation scm = new ServerConditionalMutation(tcm); - context.getZooCache().clear(RootTable.ZROOT_TABLET); - List okMutations = new ArrayList<>(); List results = new ArrayList<>(); @@ -129,10 +127,7 @@ public Result write(ConditionalMutation mutation) { } catch (Exception e) { throw new RuntimeException(e); } - - // TODO this is racy... context.getZooCache().clear(RootTable.ZROOT_TABLET); - return getResult(okMutations, results, mutation); } diff --git a/server/base/src/main/java/org/apache/accumulo/server/metadata/RootTabletMutatorImpl.java b/server/base/src/main/java/org/apache/accumulo/server/metadata/RootTabletMutatorImpl.java index 5d65ed33dce..986f5d75f35 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/metadata/RootTabletMutatorImpl.java +++ b/server/base/src/main/java/org/apache/accumulo/server/metadata/RootTabletMutatorImpl.java @@ -97,24 +97,17 @@ public void mutate() { } try { + context.getZooSession().asReaderWriter().mutateExisting(RootTable.ZROOT_TABLET, currVal -> { + String currJson = new String(currVal, UTF_8); + var rtm = new RootTabletMetadata(currJson); + rtm.update(mutation); + String newJson = rtm.toJson(); + log.debug("mutation: from:[{}] to: [{}]", currJson, newJson); + return newJson.getBytes(UTF_8); + }); context.getZooCache().clear(RootTable.ZROOT_TABLET); - // TODO examine implementation of getZooReaderWriter().mutate() - // TODO for efficiency this should maybe call mutateExisting - context.getZooSession().asReaderWriter().mutateOrCreate(RootTable.ZROOT_TABLET, new byte[0], - currVal -> { - String currJson = new String(currVal, UTF_8); - var rtm = new RootTabletMetadata(currJson); - rtm.update(mutation); - String newJson = rtm.toJson(); - log.debug("mutation: from:[{}] to: [{}]", currJson, newJson); - return newJson.getBytes(UTF_8); - }); - - // TODO this is racy... - context.getZooCache().clear(RootTable.ZROOT_TABLET); - if (closeAfterMutate != null) { closeAfterMutate.close(); }