This is an automated email from the ASF dual-hosted git repository. dlmarion 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 2244f01eb0 Use prevEndRow from Extent in ConditionalTabletMutator (#3870) 2244f01eb0 is described below commit 2244f01eb09a5a22d55f51d6bec2fe924603c64b Author: Dave Marion <dlmar...@apache.org> AuthorDate: Thu Oct 19 11:53:17 2023 -0400 Use prevEndRow from Extent in ConditionalTabletMutator (#3870) Fixes #3356 Co-authored-by: Keith Turner <ktur...@apache.org> --- .../accumulo/core/metadata/schema/Ample.java | 5 ----- .../manager/state/AbstractTabletStateStore.java | 9 ++++----- .../server/manager/state/MetaDataStateStore.java | 3 +-- .../metadata/ConditionalTabletMutatorImpl.java | 22 +++++++++------------- .../manager/ManagerClientServiceHandler.java | 3 +-- .../coordinator/CompactionCoordinator.java | 6 +++--- .../manager/tableOps/bulkVer2/LoadFiles.java | 4 ++-- .../accumulo/manager/tableOps/compact/CleanUp.java | 2 +- .../manager/tableOps/compact/CompactionDriver.java | 8 ++++---- .../accumulo/manager/tableOps/split/PreSplit.java | 2 +- .../accumulo/manager/tableOps/split/SplitInfo.java | 2 -- .../manager/tableOps/split/UpdateTablets.java | 2 +- .../test/functional/AmpleConditionalWriterIT.java | 15 +++++++-------- 13 files changed, 34 insertions(+), 49 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 d665ea977e..793e5b5d9b 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 @@ -448,11 +448,6 @@ public interface Ample { */ ConditionalTabletMutator requireLocation(Location location); - /** - * Require that a tablet has the specified previous end row. - */ - ConditionalTabletMutator requirePrevEndRow(Text per); - /** * Requires the tablet to have the specified hosting goal before any changes are made. */ diff --git a/server/base/src/main/java/org/apache/accumulo/server/manager/state/AbstractTabletStateStore.java b/server/base/src/main/java/org/apache/accumulo/server/manager/state/AbstractTabletStateStore.java index e84748f324..f1fa558dd1 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/AbstractTabletStateStore.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/AbstractTabletStateStore.java @@ -51,7 +51,6 @@ public abstract class AbstractTabletStateStore implements TabletStateStore { for (Assignment assignment : assignments) { var conditionalMutator = tabletsMutator.mutateTablet(assignment.tablet) .requireLocation(TabletMetadata.Location.future(assignment.server)) - .requirePrevEndRow(assignment.tablet.prevEndRow()) .putLocation(TabletMetadata.Location.current(assignment.server)) .deleteLocation(TabletMetadata.Location.future(assignment.server)).deleteSuspension(); @@ -81,8 +80,8 @@ public abstract class AbstractTabletStateStore implements TabletStateStore { try (var tabletsMutator = ample.conditionallyMutateTablets()) { for (Assignment assignment : assignments) { tabletsMutator.mutateTablet(assignment.tablet).requireAbsentOperation() - .requireAbsentLocation().requirePrevEndRow(assignment.tablet.prevEndRow()) - .deleteSuspension().putLocation(TabletMetadata.Location.future(assignment.server)) + .requireAbsentLocation().deleteSuspension() + .putLocation(TabletMetadata.Location.future(assignment.server)) .submit(tabletMetadata -> { Preconditions.checkArgument(tabletMetadata.getExtent().equals(assignment.tablet)); return tabletMetadata.getLocation() != null && tabletMetadata.getLocation() @@ -127,8 +126,8 @@ public abstract class AbstractTabletStateStore implements TabletStateStore { continue; } - var tabletMutator = tabletsMutator.mutateTablet(tm.getExtent()) - .requireLocation(tm.getLocation()).requirePrevEndRow(tm.getExtent().prevEndRow()); + var tabletMutator = + tabletsMutator.mutateTablet(tm.getExtent()).requireLocation(tm.getLocation()); if (tm.hasCurrent()) { diff --git a/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java b/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java index d69c114f5b..2a2ee11c09 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java @@ -71,8 +71,7 @@ class MetaDataStateStore extends AbstractTabletStateStore implements TabletState } // ELASTICITY_TODO pending #3314, add conditional mutation check that tls.suspend exists - tabletsMutator.mutateTablet(tm.getExtent()).requireAbsentOperation() - .requirePrevEndRow(tm.getExtent().prevEndRow()).deleteSuspension() + tabletsMutator.mutateTablet(tm.getExtent()).requireAbsentOperation().deleteSuspension() .submit(tabletMetadata -> tabletMetadata.getSuspend() == null); } 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 fb3d1dc9e5..a77a357d1f 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 @@ -57,7 +57,6 @@ import org.apache.accumulo.server.metadata.iterators.LocationExistsIterator; import org.apache.accumulo.server.metadata.iterators.PresentIterator; import org.apache.accumulo.server.metadata.iterators.SetEqualityIterator; import org.apache.accumulo.server.metadata.iterators.TabletExistsIterator; -import org.apache.hadoop.io.Text; import com.google.common.base.Preconditions; @@ -75,6 +74,7 @@ public class ConditionalTabletMutatorImpl extends TabletMutatorBase<Ample.Condit private final KeyExtent extent; private boolean sawOperationRequirement = false; + private boolean checkPrevEndRow = true; protected ConditionalTabletMutatorImpl(Ample.ConditionalTabletsMutator parent, ServerContext context, KeyExtent extent, Consumer<ConditionalMutation> mutationConsumer, @@ -108,16 +108,6 @@ public class ConditionalTabletMutatorImpl extends TabletMutatorBase<Ample.Condit return this; } - @Override - public Ample.ConditionalTabletMutator requirePrevEndRow(Text per) { - Preconditions.checkState(updatesEnabled, "Cannot make updates after calling mutate."); - Condition c = - new Condition(PREV_ROW_COLUMN.getColumnFamily(), PREV_ROW_COLUMN.getColumnQualifier()) - .setValue(encodePrevEndRow(per).get()); - mutation.addCondition(c); - return this; - } - @Override public Ample.ConditionalTabletMutator requireHostingGoal(TabletHostingGoal goal) { Preconditions.checkState(updatesEnabled, "Cannot make updates after calling mutate."); @@ -144,6 +134,7 @@ public class ConditionalTabletMutatorImpl extends TabletMutatorBase<Ample.Condit Condition c = new Condition("", "").setIterators(is); mutation.addCondition(c); sawOperationRequirement = true; + checkPrevEndRow = false; return this; } @@ -169,8 +160,7 @@ public class ConditionalTabletMutatorImpl extends TabletMutatorBase<Ample.Condit private void requireSameSingle(TabletMetadata tabletMetadata, ColumnType type) { switch (type) { case PREV_ROW: - requirePrevEndRow(tabletMetadata.getPrevEndRow()); - break; + throw new IllegalStateException("PREV_ROW already set from Extent"); case COMPACT_ID: { Condition c = new Condition(COMPACT_COLUMN.getColumnFamily(), COMPACT_COLUMN.getColumnQualifier()); @@ -261,6 +251,12 @@ public class ConditionalTabletMutatorImpl extends TabletMutatorBase<Ample.Condit public void submit(Ample.RejectionHandler rejectionCheck) { Preconditions.checkState(updatesEnabled, "Cannot make updates after calling mutate."); Preconditions.checkState(sawOperationRequirement, "No operation requirements were seen"); + if (checkPrevEndRow) { + Condition c = + new Condition(PREV_ROW_COLUMN.getColumnFamily(), PREV_ROW_COLUMN.getColumnQualifier()) + .setValue(encodePrevEndRow(extent.prevEndRow()).get()); + mutation.addCondition(c); + } getMutation(); mutationConsumer.accept(mutation); rejectionHandlerConsumer.accept(extent, rejectionCheck); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java index 81215dbdd6..97b9a07682 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java @@ -630,8 +630,7 @@ public class ManagerClientServiceHandler implements ManagerClientService.Iface { if (recentHostingRequest.getIfPresent(ke) == null) { mutator.mutateTablet(ke).requireAbsentOperation() .requireHostingGoal(TabletHostingGoal.ONDEMAND).requireAbsentLocation() - .requirePrevEndRow(ke.prevEndRow()).setHostingRequested() - .submit(TabletMetadata::getHostingRequested); + .setHostingRequested().submit(TabletMetadata::getHostingRequested); } else { log.trace("Ignoring hosting request because it was recently requested {}", ke); } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/compaction/coordinator/CompactionCoordinator.java b/server/manager/src/main/java/org/apache/accumulo/manager/compaction/coordinator/CompactionCoordinator.java index eb2cf605fd..329f57b24a 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/compaction/coordinator/CompactionCoordinator.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/compaction/coordinator/CompactionCoordinator.java @@ -563,7 +563,7 @@ public class CompactionCoordinator implements CompactionCoordinatorService.Iface // any data that is read from the tablet to make a decision about if it can compact or not // must be included in the requireSame call var tabletMutator = tabletsMutator.mutateTablet(extent).requireAbsentOperation() - .requireSame(tabletMetadata, PREV_ROW, FILES, SELECTED, ECOMP); + .requireSame(tabletMetadata, FILES, SELECTED, ECOMP); var ecid = ExternalCompactionId.of(externalCompactionId); tabletMutator.putExternalCompaction(ecid, ecm); @@ -926,7 +926,7 @@ public class CompactionCoordinator implements CompactionCoordinatorService.Iface try (var tabletsMutator = ctx.getAmple().conditionallyMutateTablets()) { var tabletMutator = tabletsMutator.mutateTablet(extent).requireAbsentOperation() - .requireCompaction(ecid).requireSame(tablet, PREV_ROW, FILES, LOCATION); + .requireCompaction(ecid).requireSame(tablet, FILES, LOCATION); if (ecm.getKind() == CompactionKind.USER || ecm.getKind() == CompactionKind.SELECTOR) { tabletMutator.requireSame(tablet, SELECTED, COMPACTED); @@ -1050,7 +1050,7 @@ public class CompactionCoordinator implements CompactionCoordinatorService.Iface try { ctx.requireNotDeleted(extent.tableId()); tabletsMutator.mutateTablet(extent).requireAbsentOperation().requireCompaction(ecid) - .requirePrevEndRow(extent.prevEndRow()).deleteExternalCompaction(ecid) + .deleteExternalCompaction(ecid) .submit(tabletMetadata -> !tabletMetadata.getExternalCompactions().containsKey(ecid)); } catch (TableDeletedException e) { LOG.warn("Table {} was deleted, unable to update metadata for compaction failure.", diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java index 60738c0475..15109b9a44 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/LoadFiles.java @@ -144,9 +144,9 @@ class LoadFiles extends ManagerRepo { conditionalMutator.mutateTablet(tablet.getExtent()).requireAbsentOperation(); if (setTime) { - tabletMutator.requireSame(tablet, PREV_ROW, LOADED, TIME, LOCATION); + tabletMutator.requireSame(tablet, LOADED, TIME, LOCATION); } else { - tabletMutator.requireSame(tablet, PREV_ROW, LOADED); + tabletMutator.requireSame(tablet, LOADED); } filesToLoad.forEach((f, v) -> { diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CleanUp.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CleanUp.java index cef3b05dca..9b864e3f3f 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CleanUp.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CleanUp.java @@ -68,7 +68,7 @@ public class CleanUp extends ManagerRepo { for (TabletMetadata tablet : tablets) { if (tablet.getCompacted().contains(tid)) { tabletsMutator.mutateTablet(tablet.getExtent()).requireAbsentOperation() - .requireSame(tablet, PREV_ROW, COMPACTED).deleteCompacted(tid) + .requireSame(tablet, COMPACTED).deleteCompacted(tid) .submit(tabletMetadata -> !tabletMetadata.getCompacted().contains(tid)); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java index 7868aee84c..21d0f05902 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactionDriver.java @@ -171,7 +171,7 @@ class CompactionDriver extends ManagerRepo { FateTxId.formatTid(tid), tablet.getExtent()); // this tablet has no files try to mark it as done tabletsMutator.mutateTablet(tablet.getExtent()).requireAbsentOperation() - .requireSame(tablet, PREV_ROW, FILES, COMPACTED).putCompacted(tid) + .requireSame(tablet, FILES, COMPACTED).putCompacted(tid) .submit(tabletMetadata -> tabletMetadata.getCompacted().contains(tid)); } else if (tablet.getSelectedFiles() == null && tablet.getExternalCompactions().isEmpty()) { // there are no selected files @@ -201,11 +201,11 @@ class CompactionDriver extends ManagerRepo { if (filesToCompact.isEmpty()) { // no files were selected so mark the tablet as compacted tabletsMutator.mutateTablet(tablet.getExtent()).requireAbsentOperation() - .requireSame(tablet, PREV_ROW, FILES, SELECTED, ECOMP, COMPACTED).putCompacted(tid) + .requireSame(tablet, FILES, SELECTED, ECOMP, COMPACTED).putCompacted(tid) .submit(tabletMetadata -> tabletMetadata.getCompacted().contains(tid)); } else { var mutator = tabletsMutator.mutateTablet(tablet.getExtent()).requireAbsentOperation() - .requireSame(tablet, PREV_ROW, FILES, SELECTED, ECOMP, COMPACTED); + .requireSame(tablet, FILES, SELECTED, ECOMP, COMPACTED); var selectedFiles = new SelectedFiles(filesToCompact, tablet.getFiles().equals(filesToCompact), tid); @@ -309,7 +309,7 @@ class CompactionDriver extends ManagerRepo { if (needsUpdate.test(tablet)) { var mutator = tabletsMutator.mutateTablet(tablet.getExtent()).requireAbsentOperation() - .requireSame(tablet, PREV_ROW, COMPACTED, SELECTED); + .requireSame(tablet, COMPACTED, SELECTED); if (tablet.getSelectedFiles() != null && tablet.getSelectedFiles().getFateTxId() == tid) { mutator.deleteSelectedFiles(); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/PreSplit.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/PreSplit.java index 5e6505f58d..6704ef6d54 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/PreSplit.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/PreSplit.java @@ -98,7 +98,7 @@ public class PreSplit extends ManagerRepo { try (var tabletsMutator = manager.getContext().getAmple().conditionallyMutateTablets()) { tabletsMutator.mutateTablet(splitInfo.getOriginal()).requireAbsentOperation() - .requireSame(tabletMetadata, LOCATION, PREV_ROW).putOperation(opid) + .requireSame(tabletMetadata, LOCATION).putOperation(opid) .submit(tmeta -> opid.equals(tmeta.getOperationId())); Map<KeyExtent,Ample.ConditionalResult> results = tabletsMutator.process(); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/SplitInfo.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/SplitInfo.java index 52051a0dc0..b8f8c7adff 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/SplitInfo.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/SplitInfo.java @@ -73,8 +73,6 @@ public class SplitInfo implements Serializable { TreeSet<KeyExtent> tablets = new TreeSet<>(); - double sum = 0; - for (var split : getSplits()) { var extent = new KeyExtent(getOriginal().tableId(), split, prev); prev = split; diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/UpdateTablets.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/UpdateTablets.java index 28131f795e..246c73d8ce 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/UpdateTablets.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/UpdateTablets.java @@ -217,7 +217,7 @@ public class UpdateTablets extends ManagerRepo { var newExtent = newTablets.last(); var mutator = tabletsMutator.mutateTablet(splitInfo.getOriginal()).requireOperation(opid) - .requirePrevEndRow(splitInfo.getOriginal().prevEndRow()).requireAbsentLocation(); + .requireAbsentLocation(); mutator.putPrevEndRow(newExtent.prevEndRow()); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/AmpleConditionalWriterIT.java b/test/src/main/java/org/apache/accumulo/test/functional/AmpleConditionalWriterIT.java index 452ee25dcc..3c59eac337 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/AmpleConditionalWriterIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/AmpleConditionalWriterIT.java @@ -26,7 +26,6 @@ import static org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType import static org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType.FLUSH_ID; import static org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType.LOADED; import static org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType.LOCATION; -import static org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType.PREV_ROW; import static org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType.SELECTED; import static org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType.TIME; import static org.apache.accumulo.core.util.LazySingletons.GSON; @@ -203,7 +202,7 @@ public class AmpleConditionalWriterIT extends AccumuloClusterHarness { var tm1 = TabletMetadata.builder(e1).putFile(stf1, dfv).putFile(stf2, dfv).putFile(stf3, dfv) .build(); - ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm1, PREV_ROW, FILES) + ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm1, FILES) .putFile(stf4, new DataFileValue(0, 0)).submit(tm -> false); var results = ctmi.process(); assertEquals(Status.REJECTED, results.get(e1).getStatus()); @@ -339,15 +338,15 @@ public class AmpleConditionalWriterIT extends AccumuloClusterHarness { // simulate a compaction where the tablet location is not set var ctmi = new ConditionalTabletsMutatorImpl(context); var tm1 = TabletMetadata.builder(e1).build(FILES, SELECTED); - ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm1, PREV_ROW, FILES) - .putFile(stf1, dfv).putFile(stf2, dfv).putFile(stf3, dfv).submit(tm -> false); + ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm1, FILES).putFile(stf1, dfv) + .putFile(stf2, dfv).putFile(stf3, dfv).submit(tm -> false); var results = ctmi.process(); assertEquals(Status.ACCEPTED, results.get(e1).getStatus()); assertEquals(Set.of(stf1, stf2, stf3), context.getAmple().readTablet(e1).getFiles()); ctmi = new ConditionalTabletsMutatorImpl(context); - ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm1, PREV_ROW, FILES, SELECTED) + ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm1, FILES, SELECTED) .putSelectedFiles(new SelectedFiles(Set.of(stf1, stf2, stf3), true, 2L)) .submit(tm -> false); results = ctmi.process(); @@ -359,7 +358,7 @@ public class AmpleConditionalWriterIT extends AccumuloClusterHarness { var tm2 = TabletMetadata.builder(e1).putFile(stf1, dfv).putFile(stf2, dfv).putFile(stf3, dfv) .build(SELECTED); ctmi = new ConditionalTabletsMutatorImpl(context); - ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm2, PREV_ROW, FILES, SELECTED) + ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm2, FILES, SELECTED) .putSelectedFiles(new SelectedFiles(Set.of(stf1, stf2, stf3), true, 2L)) .submit(tm -> false); results = ctmi.process(); @@ -382,7 +381,7 @@ public class AmpleConditionalWriterIT extends AccumuloClusterHarness { var tm3 = TabletMetadata.builder(e1).putFile(stf1, dfv).putFile(stf2, dfv).putFile(stf3, dfv) .putSelectedFiles(selectedFiles).build(); ctmi = new ConditionalTabletsMutatorImpl(context); - ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm3, PREV_ROW, FILES, SELECTED) + ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm3, FILES, SELECTED) .deleteSelectedFiles().submit(tm -> false); results = ctmi.process(); assertEquals(Status.REJECTED, results.get(e1).getStatus()); @@ -395,7 +394,7 @@ public class AmpleConditionalWriterIT extends AccumuloClusterHarness { var tm5 = TabletMetadata.builder(e1).putFile(stf1, dfv).putFile(stf2, dfv).putFile(stf3, dfv) .putSelectedFiles(new SelectedFiles(Set.of(stf1, stf2, stf3), true, 2L)).build(); ctmi = new ConditionalTabletsMutatorImpl(context); - ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm5, PREV_ROW, FILES, SELECTED) + ctmi.mutateTablet(e1).requireAbsentOperation().requireSame(tm5, FILES, SELECTED) .deleteSelectedFiles().submit(tm -> false); results = ctmi.process(); assertEquals(Status.ACCEPTED, results.get(e1).getStatus());