This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch elasticity in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/elasticity by this push: new 8f18d29f32 adds toggle for automatically setting lock on mutation (#4584) 8f18d29f32 is described below commit 8f18d29f32e678a76a205e36e3acfc5ead2863ae Author: Keith Turner <ktur...@apache.org> AuthorDate: Tue May 21 18:28:30 2024 -0400 adds toggle for automatically setting lock on mutation (#4584) Merging tables in a table deletes tablets. When tablets were being deleted they were automatically setting a lock, which could leave junk in the metadata table. Added a toggle to turn off setting these on mutations. --- .../main/java/org/apache/accumulo/core/metadata/schema/Ample.java | 6 ++++++ .../accumulo/core/metadata/schema/TabletMetadataBuilder.java | 5 +++++ .../apache/accumulo/core/metadata/schema/TabletMutatorBase.java | 7 +++++++ .../accumulo/server/metadata/ConditionalTabletMutatorImpl.java | 4 +++- .../org/apache/accumulo/server/metadata/RootTabletMutatorImpl.java | 4 +++- .../org/apache/accumulo/server/metadata/TabletMutatorImpl.java | 4 +++- .../org/apache/accumulo/manager/tableOps/merge/DeleteTablets.java | 4 ++++ 7 files changed, 31 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/Ample.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/Ample.java index 7d7086649a..3c00d70f33 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/schema/Ample.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/schema/Ample.java @@ -421,6 +421,12 @@ public interface Ample { T setUnSplittable(UnSplittableMetadata unSplittableMeta); T deleteUnSplittable(); + + /** + * By default the server lock is automatically added to mutations unless this method is set to + * false. + */ + T automaticallyPutServerLock(boolean b); } interface TabletMutator extends TabletUpdates<TabletMutator> { diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadataBuilder.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadataBuilder.java index 4121ad2005..eb924e7833 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadataBuilder.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadataBuilder.java @@ -303,6 +303,11 @@ public class TabletMetadataBuilder implements Ample.TabletUpdates<TabletMetadata throw new UnsupportedOperationException(); } + @Override + public TabletMetadataBuilder automaticallyPutServerLock(boolean b) { + throw new UnsupportedOperationException(); + } + /** * @param extraFetched Anything that was put on the builder will automatically be added to the * fetched set. However, for the case where something was not put and it needs to be diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMutatorBase.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMutatorBase.java index f4ee38e28d..cf0208d497 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMutatorBase.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMutatorBase.java @@ -64,6 +64,7 @@ public abstract class TabletMutatorBase<T extends Ample.TabletUpdates<T>> protected final Mutation mutation; protected AutoCloseable closeAfterMutate; protected boolean updatesEnabled = true; + protected boolean putServerLock = true; @SuppressWarnings("unchecked") private T getThis() { @@ -360,6 +361,12 @@ public abstract class TabletMutatorBase<T extends Ample.TabletUpdates<T>> return getThis(); } + @Override + public T automaticallyPutServerLock(boolean b) { + putServerLock = b; + return getThis(); + } + public void setCloseAfterMutate(AutoCloseable closeable) { this.closeAfterMutate = closeable; } diff --git a/server/base/src/main/java/org/apache/accumulo/server/metadata/ConditionalTabletMutatorImpl.java b/server/base/src/main/java/org/apache/accumulo/server/metadata/ConditionalTabletMutatorImpl.java index 7c3d9a5859..208fe4954c 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/metadata/ConditionalTabletMutatorImpl.java +++ b/server/base/src/main/java/org/apache/accumulo/server/metadata/ConditionalTabletMutatorImpl.java @@ -295,7 +295,9 @@ public class ConditionalTabletMutatorImpl extends TabletMutatorBase<Ample.Condit .setValue(encodePrevEndRow(extent.prevEndRow()).get()); mutation.addCondition(c); } - this.putZooLock(context.getZooKeeperRoot(), lock); + if (putServerLock) { + this.putZooLock(context.getZooKeeperRoot(), lock); + } getMutation(); mutationConsumer.accept(mutation); rejectionHandlerConsumer.accept(extent, rejectionCheck); 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 04711b5607..c970689bed 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 @@ -86,7 +86,9 @@ public class RootTabletMutatorImpl extends TabletMutatorBase<Ample.TabletMutator @Override public void mutate() { - this.putZooLock(this.context.getZooKeeperRoot(), lock); + if (putServerLock) { + this.putZooLock(this.context.getZooKeeperRoot(), lock); + } Mutation mutation = getMutation(); MetadataConstraints metaConstraint = new MetadataConstraints(); diff --git a/server/base/src/main/java/org/apache/accumulo/server/metadata/TabletMutatorImpl.java b/server/base/src/main/java/org/apache/accumulo/server/metadata/TabletMutatorImpl.java index 0a976a82cc..af360a1df6 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/metadata/TabletMutatorImpl.java +++ b/server/base/src/main/java/org/apache/accumulo/server/metadata/TabletMutatorImpl.java @@ -45,7 +45,9 @@ class TabletMutatorImpl extends TabletMutatorBase<Ample.TabletMutator> @Override public void mutate() { try { - this.putZooLock(this.context.getZooKeeperRoot(), lock); + if (putServerLock) { + this.putZooLock(this.context.getZooKeeperRoot(), lock); + } writer.addMutation(getMutation()); if (closeAfterMutate != null) { diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/DeleteTablets.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/DeleteTablets.java index 710b8779ad..3cb48a68b0 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/DeleteTablets.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/DeleteTablets.java @@ -107,6 +107,10 @@ public class DeleteTablets extends ManagerRepo { } tabletMutator.deleteAll(tabletMeta.getKeyValues().keySet()); + + // the entire tablet is being deleted, so do not want to add lock entry to the tablet + tabletMutator.automaticallyPutServerLock(false); + // if the tablet no longer exists, then it was successful tabletMutator.submit(Ample.RejectionHandler.acceptAbsentTablet()); submitted++;