diff --git a/core/src/main/java/org/apache/accumulo/core/client/admin/TabletMergeability.java b/core/src/main/java/org/apache/accumulo/core/client/admin/TabletMergeability.java index 341930ce353..1b4edfc6895 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/admin/TabletMergeability.java +++ b/core/src/main/java/org/apache/accumulo/core/client/admin/TabletMergeability.java @@ -28,7 +28,7 @@ public class TabletMergeability implements Serializable { private static final long serialVersionUID = 1L; public static final TabletMergeability NEVER = new TabletMergeability(Duration.ofNanos(-1)); - public static final TabletMergeability NOW = new TabletMergeability(Duration.ofNanos(0)); + public static final TabletMergeability NOW = new TabletMergeability(Duration.ZERO); private final Duration delay; @@ -44,6 +44,10 @@ public boolean isNow() { return this.delay.isZero(); } + public boolean isFuture() { + return delay.toNanos() > 0; + } + public Duration getDelay() { return delay; } diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/TabletMergeabilityUtil.java b/core/src/main/java/org/apache/accumulo/core/metadata/TabletMergeabilityUtil.java deleted file mode 100644 index ffdad80c3e7..00000000000 --- a/core/src/main/java/org/apache/accumulo/core/metadata/TabletMergeabilityUtil.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.accumulo.core.metadata; - -import java.time.Duration; - -import org.apache.accumulo.core.client.admin.TabletMergeability; -import org.apache.accumulo.core.data.Value; -import org.apache.accumulo.core.util.time.SteadyTime; - -public class TabletMergeabilityUtil { - - public static Value toValue(TabletMergeability tabletMergeability) { - return new Value(Long.toString(tabletMergeability.getDelay().toNanos())); - } - - public static TabletMergeability fromValue(Value value) { - return TabletMergeability.from(Duration.ofNanos(Long.parseLong(value.toString()))); - } - - public boolean isMergeable(TabletMergeability mergeability, SteadyTime currentTime) { - if (mergeability.isNever()) { - return false; - } - return currentTime.getDuration().compareTo(mergeability.getDelay()) >= 0; - } - -} 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 61355131ed0..9dc00378954 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 @@ -27,7 +27,6 @@ import org.apache.accumulo.core.client.ConditionalWriter; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.TableId; @@ -393,7 +392,7 @@ interface TabletUpdates { T putCloned(); - T putTabletMergeability(TabletMergeability tabletMergeability); + T putTabletMergeability(TabletMergeabilityMetadata tabletMergeability); /** * By default the server lock is automatically added to mutations unless this method is set to diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMergeabilityMetadata.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMergeabilityMetadata.java new file mode 100644 index 00000000000..deee2c98398 --- /dev/null +++ b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMergeabilityMetadata.java @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.accumulo.core.metadata.schema; + +import static org.apache.accumulo.core.util.LazySingletons.GSON; + +import java.io.Serializable; +import java.time.Duration; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.TimeUnit; + +import org.apache.accumulo.core.client.admin.TabletMergeability; +import org.apache.accumulo.core.data.Value; +import org.apache.accumulo.core.util.time.SteadyTime; + +import com.google.common.base.Preconditions; + +public class TabletMergeabilityMetadata implements Serializable { + private static final long serialVersionUID = 1L; + + public static final TabletMergeabilityMetadata NEVER = + new TabletMergeabilityMetadata(TabletMergeability.NEVER); + public static final TabletMergeabilityMetadata NOW = + new TabletMergeabilityMetadata(TabletMergeability.NOW); + + private final TabletMergeability tabletMergeability; + private final SteadyTime steadyTime; + + private TabletMergeabilityMetadata(TabletMergeability tabletMergeability, SteadyTime steadyTime) { + this.tabletMergeability = Objects.requireNonNull(tabletMergeability); + this.steadyTime = steadyTime; + Preconditions.checkArgument(tabletMergeability.isFuture() == (steadyTime != null), + "SteadyTime must be set if and only if TabletMergeability delay is greater than 0."); + } + + private TabletMergeabilityMetadata(TabletMergeability tabletMergeability) { + this(tabletMergeability, null); + } + + public TabletMergeability getTabletMergeability() { + return tabletMergeability; + } + + public Optional getSteadyTime() { + return Optional.ofNullable(steadyTime); + } + + public boolean isMergeable(SteadyTime currentTime) { + if (tabletMergeability.isNever()) { + return false; + } + return currentTime.getDuration().compareTo(totalDelay()) >= 0; + } + + private Duration totalDelay() { + return steadyTime != null ? steadyTime.getDuration().plus(tabletMergeability.getDelay()) + : tabletMergeability.getDelay(); + } + + private static class GSonData { + long delay; + Long steadyTime; + } + + String toJson() { + GSonData jData = new GSonData(); + jData.delay = tabletMergeability.getDelay().toNanos(); + jData.steadyTime = steadyTime != null ? steadyTime.getNanos() : null; + return GSON.get().toJson(jData); + } + + static TabletMergeabilityMetadata fromJson(String json) { + GSonData jData = GSON.get().fromJson(json, GSonData.class); + TabletMergeability tabletMergeability = TabletMergeability.from(Duration.ofNanos(jData.delay)); + SteadyTime steadyTime = + jData.steadyTime != null ? SteadyTime.from(jData.steadyTime, TimeUnit.NANOSECONDS) : null; + return new TabletMergeabilityMetadata(tabletMergeability, steadyTime); + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + TabletMergeabilityMetadata that = (TabletMergeabilityMetadata) o; + return Objects.equals(tabletMergeability, that.tabletMergeability) + && Objects.equals(steadyTime, that.steadyTime); + } + + @Override + public int hashCode() { + return Objects.hash(tabletMergeability, steadyTime); + } + + @Override + public String toString() { + return "TabletMergeabilityMetadata{" + tabletMergeability + ", " + steadyTime + '}'; + } + + public static TabletMergeabilityMetadata after(Duration delay, SteadyTime currentTime) { + return from(TabletMergeability.after(delay), currentTime); + } + + public static TabletMergeabilityMetadata from(TabletMergeability tm, SteadyTime currentTime) { + return new TabletMergeabilityMetadata(tm, currentTime); + } + + public static Value toValue(TabletMergeabilityMetadata tmm) { + return new Value(tmm.toJson()); + } + + public static TabletMergeabilityMetadata fromValue(Value value) { + return TabletMergeabilityMetadata.fromJson(value.toString()); + } +} diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java index b5b5774adc9..94e247c734a 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java @@ -42,7 +42,6 @@ import java.util.Set; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.clientImpl.ClientContext; import org.apache.accumulo.core.clientImpl.TabletAvailabilityUtil; import org.apache.accumulo.core.data.ByteSequence; @@ -60,7 +59,6 @@ import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.SuspendingTServer; import org.apache.accumulo.core.metadata.TServerInstance; -import org.apache.accumulo.core.metadata.TabletMergeabilityUtil; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.BulkFileColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ClonedColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CompactedColumnFamily; @@ -126,7 +124,7 @@ public class TabletMetadata { private final Set compacted; private final Set userCompactionsRequested; private final UnSplittableMetadata unSplittableMetadata; - private final TabletMergeability mergeability; + private final TabletMergeabilityMetadata mergeability; private final Supplier fileSize; private TabletMetadata(Builder tmBuilder) { @@ -445,7 +443,7 @@ public UnSplittableMetadata getUnSplittable() { return unSplittableMetadata; } - public TabletMergeability getTabletMergeability() { + public TabletMergeabilityMetadata getTabletMergeability() { ensureFetched(ColumnType.MERGEABILITY); return mergeability; } @@ -540,7 +538,7 @@ public static > TabletMetadata convertRow(Iterator tmBuilder.onDemandHostingRequested(true); break; case MERGEABILITY_QUAL: - tmBuilder.mergeability(TabletMergeabilityUtil.fromValue(kv.getValue())); + tmBuilder.mergeability(TabletMergeabilityMetadata.fromValue(kv.getValue())); break; default: throw new IllegalStateException("Unexpected TabletColumnFamily qualifier: " + qual); @@ -704,7 +702,7 @@ static class Builder { private final ImmutableSet.Builder compacted = ImmutableSet.builder(); private final ImmutableSet.Builder userCompactionsRequested = ImmutableSet.builder(); private UnSplittableMetadata unSplittableMetadata; - private TabletMergeability mergeability = TabletMergeability.NEVER; + private TabletMergeabilityMetadata mergeability = TabletMergeabilityMetadata.NEVER; void table(TableId tableId) { this.tableId = tableId; @@ -814,7 +812,7 @@ void unSplittableMetadata(UnSplittableMetadata unSplittableMetadata) { this.unSplittableMetadata = unSplittableMetadata; } - void mergeability(TabletMergeability mergeability) { + void mergeability(TabletMergeabilityMetadata mergeability) { this.mergeability = mergeability; } 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 047ef7a51f4..8ca33d9eb79 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 @@ -49,7 +49,6 @@ import java.util.TreeMap; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Value; @@ -315,7 +314,8 @@ public TabletMetadataBuilder putCloned() { } @Override - public TabletMetadataBuilder putTabletMergeability(TabletMergeability tabletMergeability) { + public TabletMetadataBuilder + putTabletMergeability(TabletMergeabilityMetadata tabletMergeability) { fetched.add(MERGEABILITY); internalBuilder.putTabletMergeability(tabletMergeability); return this; 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 577120f8435..4f39eda7b7e 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 @@ -22,7 +22,6 @@ import java.util.Map; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.clientImpl.TabletAvailabilityUtil; import org.apache.accumulo.core.data.ArrayByteSequence; import org.apache.accumulo.core.data.ByteSequence; @@ -36,7 +35,6 @@ import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.SuspendingTServer; import org.apache.accumulo.core.metadata.TServerInstance; -import org.apache.accumulo.core.metadata.TabletMergeabilityUtil; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.BulkFileColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ClonedColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CompactedColumnFamily; @@ -393,9 +391,9 @@ public T automaticallyPutServerLock(boolean b) { } @Override - public T putTabletMergeability(TabletMergeability tabletMergeability) { + public T putTabletMergeability(TabletMergeabilityMetadata tabletMergeability) { TabletColumnFamily.MERGEABILITY_COLUMN.put(mutation, - TabletMergeabilityUtil.toValue(tabletMergeability)); + TabletMergeabilityMetadata.toValue(tabletMergeability)); return getThis(); } diff --git a/core/src/main/java/org/apache/accumulo/core/util/time/SteadyTime.java b/core/src/main/java/org/apache/accumulo/core/util/time/SteadyTime.java index d16f15c2019..57b348b23d3 100644 --- a/core/src/main/java/org/apache/accumulo/core/util/time/SteadyTime.java +++ b/core/src/main/java/org/apache/accumulo/core/util/time/SteadyTime.java @@ -18,6 +18,7 @@ */ package org.apache.accumulo.core.util.time; +import java.io.Serializable; import java.time.Duration; import java.util.Objects; import java.util.concurrent.TimeUnit; @@ -30,7 +31,8 @@ * is not expected to represent real world date times, its main use is for computing deltas similar * System.nanoTime but across JVM processes. */ -public class SteadyTime implements Comparable { +public class SteadyTime implements Comparable, Serializable { + private static final long serialVersionUID = 1L; private final Duration time; diff --git a/core/src/test/java/org/apache/accumulo/core/metadata/schema/TabletMetadataTest.java b/core/src/test/java/org/apache/accumulo/core/metadata/schema/TabletMetadataTest.java index 928173190a5..c969f0c5f2a 100644 --- a/core/src/test/java/org/apache/accumulo/core/metadata/schema/TabletMetadataTest.java +++ b/core/src/test/java/org/apache/accumulo/core/metadata/schema/TabletMetadataTest.java @@ -60,7 +60,6 @@ import java.util.stream.Stream; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.client.admin.TimeType; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; @@ -640,13 +639,13 @@ public void testBuilder() { FateId compactFateId1 = FateId.from(type, UUID.randomUUID()); FateId compactFateId2 = FateId.from(type, UUID.randomUUID()); - TabletMetadata tm = - TabletMetadata.builder(extent).putTabletAvailability(TabletAvailability.UNHOSTED) - .putLocation(Location.future(ser1)).putFile(sf1, dfv1).putFile(sf2, dfv2) - .putBulkFile(rf1, loadedFateId1).putBulkFile(rf2, loadedFateId2).putFlushId(27) - .putDirName("dir1").putScan(sf3).putScan(sf4).putCompacted(compactFateId1) - .putCompacted(compactFateId2).putCloned().putTabletMergeability(TabletMergeability.NOW) - .build(ECOMP, HOSTING_REQUESTED, MERGED, USER_COMPACTION_REQUESTED, UNSPLITTABLE); + TabletMetadata tm = TabletMetadata.builder(extent) + .putTabletAvailability(TabletAvailability.UNHOSTED).putLocation(Location.future(ser1)) + .putFile(sf1, dfv1).putFile(sf2, dfv2).putBulkFile(rf1, loadedFateId1) + .putBulkFile(rf2, loadedFateId2).putFlushId(27).putDirName("dir1").putScan(sf3).putScan(sf4) + .putCompacted(compactFateId1).putCompacted(compactFateId2).putCloned() + .putTabletMergeability(TabletMergeabilityMetadata.NOW) + .build(ECOMP, HOSTING_REQUESTED, MERGED, USER_COMPACTION_REQUESTED, UNSPLITTABLE); assertEquals(extent, tm.getExtent()); assertEquals(TabletAvailability.UNHOSTED, tm.getTabletAvailability()); @@ -665,7 +664,7 @@ public void testBuilder() { assertFalse(tm.hasMerged()); assertNull(tm.getUnSplittable()); assertEquals("OK", tm.getCloned()); - assertEquals(TabletMergeability.NOW, tm.getTabletMergeability()); + assertEquals(TabletMergeabilityMetadata.NOW, tm.getTabletMergeability()); assertThrows(IllegalStateException.class, tm::getOperationId); assertThrows(IllegalStateException.class, tm::getSuspend); assertThrows(IllegalStateException.class, tm::getTime); @@ -713,7 +712,9 @@ public void testBuilder() { .putTime(new MetadataTime(479, TimeType.LOGICAL)).putWal(le1).putWal(le2) .setHostingRequested().putSelectedFiles(selFiles).setMerged() .putUserCompactionRequested(selFilesFateId).setUnSplittable(unsplittableMeta) - .putTabletMergeability(TabletMergeability.after(Duration.ofDays(3))).build(); + .putTabletMergeability(TabletMergeabilityMetadata.after(Duration.ofDays(3), + SteadyTime.from(45L, TimeUnit.MILLISECONDS))) + .build(); assertEquals(Set.of(ecid1), tm3.getExternalCompactions().keySet()); assertEquals(Set.of(sf1, sf2), tm3.getExternalCompactions().get(ecid1).getJobFiles()); @@ -730,7 +731,11 @@ public void testBuilder() { assertTrue(tm3.hasMerged()); assertTrue(tm3.getUserCompactionsRequested().contains(selFilesFateId)); assertEquals(unsplittableMeta, tm3.getUnSplittable()); - assertEquals(Duration.ofDays(3), tm3.getTabletMergeability().getDelay()); + var tmm = tm3.getTabletMergeability(); + assertEquals(Duration.ofDays(3), tmm.getTabletMergeability().getDelay()); + assertEquals(SteadyTime.from(45L, TimeUnit.MILLISECONDS), tmm.getSteadyTime().orElseThrow()); + assertTrue(tmm.isMergeable(SteadyTime.from(Duration.ofHours(73)))); + assertFalse(tmm.isMergeable(SteadyTime.from(Duration.ofHours(72)))); } } diff --git a/server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java b/server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java index 50348d47f3c..0d2988423c4 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java +++ b/server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java @@ -39,7 +39,6 @@ import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.SuspendingTServer; -import org.apache.accumulo.core.metadata.TabletMergeabilityUtil; import org.apache.accumulo.core.metadata.schema.DataFileValue; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.BulkFileColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ChoppedColumnFamily; @@ -60,6 +59,7 @@ import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.Upgrade12to13; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.UserCompactionRequestedColumnFamily; import org.apache.accumulo.core.metadata.schema.SelectedFiles; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.TabletOperationId; import org.apache.accumulo.core.metadata.schema.TabletOperationType; import org.apache.accumulo.core.metadata.schema.UnSplittableMetadata; @@ -382,7 +382,7 @@ private void validateTabletFamily(ArrayList violations, ColumnUpdate colu break; case (TabletColumnFamily.MERGEABILITY_QUAL): try { - TabletMergeabilityUtil.fromValue(new Value(columnUpdate.getValue())); + TabletMergeabilityMetadata.fromValue(new Value(columnUpdate.getValue())); } catch (IllegalArgumentException e) { addViolation(violations, 4006); } diff --git a/server/base/src/main/java/org/apache/accumulo/server/init/FileSystemInitializer.java b/server/base/src/main/java/org/apache/accumulo/server/init/FileSystemInitializer.java index 175e6d9c666..6ba0285546d 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/init/FileSystemInitializer.java +++ b/server/base/src/main/java/org/apache/accumulo/server/init/FileSystemInitializer.java @@ -27,7 +27,6 @@ import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.client.admin.TimeType; import org.apache.accumulo.core.conf.AccumuloConfiguration; import org.apache.accumulo.core.conf.DefaultConfiguration; @@ -45,6 +44,7 @@ import org.apache.accumulo.core.metadata.schema.DataFileValue; import org.apache.accumulo.core.metadata.schema.MetadataSchema; import org.apache.accumulo.core.metadata.schema.MetadataTime; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.TabletMetadata; import org.apache.accumulo.core.spi.crypto.CryptoService; import org.apache.accumulo.core.spi.fs.VolumeChooserEnvironment; @@ -95,7 +95,7 @@ private Map createEntries() { var builder = TabletMetadata.builder(keyExtent).putDirName(dirName) .putTime(new MetadataTime(0, TimeType.LOGICAL)) .putTabletAvailability(TabletAvailability.HOSTED) - .putTabletMergeability(TabletMergeability.NEVER).putPrevEndRow(prevEndRow); + .putTabletMergeability(TabletMergeabilityMetadata.NEVER).putPrevEndRow(prevEndRow); for (String file : files) { builder.putFile(new ReferencedTabletFile(new Path(file)).insert(), new DataFileValue(0, 0)); } diff --git a/server/base/src/test/java/org/apache/accumulo/server/constraints/MetadataConstraintsTest.java b/server/base/src/test/java/org/apache/accumulo/server/constraints/MetadataConstraintsTest.java index 5cf74f220ee..33db16efb7f 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/constraints/MetadataConstraintsTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/constraints/MetadataConstraintsTest.java @@ -33,7 +33,6 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Range; @@ -46,7 +45,6 @@ import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.SuspendingTServer; import org.apache.accumulo.core.metadata.TServerInstance; -import org.apache.accumulo.core.metadata.TabletMergeabilityUtil; import org.apache.accumulo.core.metadata.schema.DataFileValue; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.BulkFileColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CompactedColumnFamily; @@ -59,6 +57,7 @@ import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.UserCompactionRequestedColumnFamily; import org.apache.accumulo.core.metadata.schema.SelectedFiles; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.UnSplittableMetadata; import org.apache.accumulo.core.util.time.SteadyTime; import org.apache.accumulo.server.ServerContext; @@ -648,25 +647,37 @@ public void testMergeabilityColumn() { Mutation m; List violations; + // Delay must be >= -1 m = new Mutation(new Text("0;foo")); - TabletColumnFamily.MERGEABILITY_COLUMN.put(m, new Value("-2")); + TabletColumnFamily.MERGEABILITY_COLUMN.put(m, new Value("{\"delay\":-2}")); + assertViolation(mc, m, (short) 4006); + + // SteadyTime must be null if delay is not positive + m = new Mutation(new Text("0;foo")); + TabletColumnFamily.MERGEABILITY_COLUMN.put(m, new Value("{\"delay\":0,\"steadyTime\":1}")); + assertViolation(mc, m, (short) 4006); + + // SteadyTime must be set if delay positive + m = new Mutation(new Text("0;foo")); + TabletColumnFamily.MERGEABILITY_COLUMN.put(m, new Value("{\"delay\":10}")); assertViolation(mc, m, (short) 4006); m = new Mutation(new Text("0;foo")); TabletColumnFamily.MERGEABILITY_COLUMN.put(m, - TabletMergeabilityUtil.toValue(TabletMergeability.NEVER)); + TabletMergeabilityMetadata.toValue(TabletMergeabilityMetadata.NEVER)); violations = mc.check(createEnv(), m); assertTrue(violations.isEmpty()); m = new Mutation(new Text("0;foo")); TabletColumnFamily.MERGEABILITY_COLUMN.put(m, - TabletMergeabilityUtil.toValue(TabletMergeability.NOW)); + TabletMergeabilityMetadata.toValue(TabletMergeabilityMetadata.NOW)); violations = mc.check(createEnv(), m); assertTrue(violations.isEmpty()); m = new Mutation(new Text("0;foo")); TabletColumnFamily.MERGEABILITY_COLUMN.put(m, - TabletMergeabilityUtil.toValue(TabletMergeability.after(Duration.ofDays(3)))); + TabletMergeabilityMetadata.toValue(TabletMergeabilityMetadata.after(Duration.ofDays(3), + SteadyTime.from(Duration.ofHours(1))))); violations = mc.check(createEnv(), m); assertTrue(violations.isEmpty()); } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/FateServiceHandler.java b/server/manager/src/main/java/org/apache/accumulo/manager/FateServiceHandler.java index 897af5a2131..a11e8e500c3 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/FateServiceHandler.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/FateServiceHandler.java @@ -53,7 +53,6 @@ import org.apache.accumulo.core.client.admin.CompactionConfig; import org.apache.accumulo.core.client.admin.InitialTableState; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.client.admin.TimeType; import org.apache.accumulo.core.clientImpl.Namespaces; import org.apache.accumulo.core.clientImpl.TableOperationsImpl; @@ -80,6 +79,7 @@ import org.apache.accumulo.core.manager.thrift.TFateId; import org.apache.accumulo.core.manager.thrift.TFateInstanceType; import org.apache.accumulo.core.manager.thrift.ThriftPropertyException; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.securityImpl.thrift.TCredentials; import org.apache.accumulo.core.util.ByteBufferUtil; import org.apache.accumulo.core.util.TextUtil; @@ -255,7 +255,7 @@ public void executeFateOperation(TInfo tinfo, TCredentials c, TFateId opid, Fate manager.fate(type).seedTransaction(op.toString(), fateId, new TraceRepo<>(new CreateTable(c.getPrincipal(), tableName, timeType, options, splitsPath, splitCount, splitsDirsPath, initialTableState, - initialTabletAvailability, namespaceId, TabletMergeability.NEVER)), + initialTabletAvailability, namespaceId, TabletMergeabilityMetadata.NEVER)), autoCleanup, goalMessage); break; diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/TableInfo.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/TableInfo.java index eb987cb1ce4..8852a41cd94 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/TableInfo.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/TableInfo.java @@ -23,10 +23,10 @@ import org.apache.accumulo.core.client.admin.InitialTableState; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.client.admin.TimeType; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.hadoop.fs.Path; public class TableInfo implements Serializable { @@ -52,7 +52,7 @@ public class TableInfo implements Serializable { private TabletAvailability initialTabletAvailability; - private TabletMergeability initialTabletMergeability; + private TabletMergeabilityMetadata initialTabletMergeability; public TabletAvailability getInitialTabletAvailability() { return initialTabletAvailability; @@ -136,11 +136,11 @@ public void setInitialSplitSize(int initialSplitSize) { this.initialSplitSize = initialSplitSize; } - public TabletMergeability getInitialTabletMergeability() { + public TabletMergeabilityMetadata getInitialTabletMergeability() { return initialTabletMergeability; } - public void setInitialTabletMergeability(TabletMergeability initialTabletMergeability) { + public void setInitialTabletMergeability(TabletMergeabilityMetadata initialTabletMergeability) { this.initialTabletMergeability = initialTabletMergeability; } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/CreateTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/CreateTable.java index 53b0515c856..f0d74597db6 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/CreateTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/CreateTable.java @@ -23,7 +23,6 @@ import org.apache.accumulo.core.client.admin.InitialTableState; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.client.admin.TimeType; import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.data.NamespaceId; @@ -31,6 +30,7 @@ import org.apache.accumulo.core.fate.FateId; import org.apache.accumulo.core.fate.Repo; import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.TableInfo; @@ -49,7 +49,7 @@ public class CreateTable extends ManagerRepo { public CreateTable(String user, String tableName, TimeType timeType, Map props, Path splitPath, int splitCount, Path splitDirsPath, InitialTableState initialTableState, TabletAvailability initialTabletAvailability, NamespaceId namespaceId, - TabletMergeability initialTabletMergeability) { + TabletMergeabilityMetadata initialTabletMergeability) { tableInfo = new TableInfo(); tableInfo.setTableName(tableName); tableInfo.setTimeType(timeType); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/MergeTablets.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/MergeTablets.java index 9295714c6e2..5b490ab567e 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/MergeTablets.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/MergeTablets.java @@ -186,19 +186,6 @@ public Repo call(FateId fateId, Manager manager) throws Exception { tabletMutator.putTabletAvailability( DeleteRows.getMergeTabletAvailability(range, tabletAvailabilities)); tabletMutator.putPrevEndRow(firstTabletMeta.getPrevEndRow()); - - // TODO: How should we determine this value this after merging? - // Do we just keep the value that's already in the last tablet in the range? - // For now the lastTabletMetadata is the simplest to use - // - // All the tablets being merged could have different values - // even if they are all currently mergeable. Right now merging is - // always user generated but eventually will be possible to be - // system generated auto merge because of this column. - // - // Another option could be to track if the user started the merge and if - // they did then treat it like a user split and mark this as NEVER , - // and if the system triggered the merge we set it as SYSTEM tabletMutator.putTabletMergeability(lastTabletMeta.getTabletMergeability()); // scan entries are related to a hosted tablet, this tablet is not hosted so can safely 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 a3c435940c9..146bb726a6a 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 @@ -27,7 +27,6 @@ import java.util.SortedSet; import java.util.TreeMap; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.fate.FateId; @@ -36,6 +35,7 @@ import org.apache.accumulo.core.metadata.schema.Ample; import org.apache.accumulo.core.metadata.schema.Ample.ConditionalResult.Status; import org.apache.accumulo.core.metadata.schema.DataFileValue; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.TabletMetadata; import org.apache.accumulo.core.metadata.schema.TabletOperationId; import org.apache.accumulo.core.metadata.schema.TabletOperationType; @@ -219,8 +219,8 @@ private void addNewTablets(FateId fateId, Manager manager, TabletMetadata tablet .debug("{} copying compacted marker to new child tablet {}", fateId, compactedFateId)); mutator.putTabletAvailability(tabletMetadata.getTabletAvailability()); - mutator.putTabletMergeability( - splitInfo.isSystemCreated() ? TabletMergeability.NOW : TabletMergeability.NEVER); + mutator.putTabletMergeability(splitInfo.isSystemCreated() ? TabletMergeabilityMetadata.NOW + : TabletMergeabilityMetadata.NEVER); tabletMetadata.getLoaded().forEach((k, v) -> mutator.putBulkFile(k.getTabletFile(), v)); newTabletsFiles.get(newExtent).forEach(mutator::putFile); diff --git a/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/merge/MergeTabletsTest.java b/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/merge/MergeTabletsTest.java index b8c7eaed1c6..e6c26aca7b2 100644 --- a/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/merge/MergeTabletsTest.java +++ b/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/merge/MergeTabletsTest.java @@ -57,7 +57,6 @@ import java.util.function.Consumer; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.data.Value; @@ -75,6 +74,7 @@ import org.apache.accumulo.core.metadata.schema.ExternalCompactionId; import org.apache.accumulo.core.metadata.schema.MetadataTime; import org.apache.accumulo.core.metadata.schema.SelectedFiles; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.TabletMetadata; import org.apache.accumulo.core.metadata.schema.TabletMetadataBuilder; import org.apache.accumulo.core.metadata.schema.TabletOperationId; @@ -152,7 +152,7 @@ public void testManyColumns() throws Exception { var availability = TabletAvailability.HOSTED; var lastLocation = TabletMetadata.Location.last("1.2.3.4:1234", "123456789"); var suspendingTServer = SuspendingTServer.fromValue(new Value("1.2.3.4:5|56")); - var mergeability = TabletMergeability.NOW; + var mergeability = TabletMergeabilityMetadata.NOW; var tablet1 = TabletMetadata.builder(ke1).putOperation(opid).putDirName("td1").putFile(file3, dfv3) @@ -234,7 +234,7 @@ public void testManyColumns() throws Exception { EasyMock.expect(tabletMutator.deleteSuspension()).andReturn(tabletMutator); EasyMock.expect(tabletMutator.deleteLocation(lastLocation)).andReturn(tabletMutator); EasyMock.expect(tabletMutator.deleteUnSplittable()).andReturn(tabletMutator); - EasyMock.expect(tabletMutator.putTabletMergeability(TabletMergeability.NOW)) + EasyMock.expect(tabletMutator.putTabletMergeability(TabletMergeabilityMetadata.NOW)) .andReturn(tabletMutator).once(); }); @@ -405,7 +405,7 @@ public void testTime() throws Exception { .once(); EasyMock.expect(tabletMutator.setMerged()).andReturn(tabletMutator).once(); // Current default if not set is NEVER - EasyMock.expect(tabletMutator.putTabletMergeability(TabletMergeability.NEVER)) + EasyMock.expect(tabletMutator.putTabletMergeability(TabletMergeabilityMetadata.NEVER)) .andReturn(tabletMutator).once(); }); } diff --git a/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/split/UpdateTabletsTest.java b/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/split/UpdateTabletsTest.java index 53852a42222..2f46b671e90 100644 --- a/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/split/UpdateTabletsTest.java +++ b/server/manager/src/test/java/org/apache/accumulo/manager/tableOps/split/UpdateTabletsTest.java @@ -33,7 +33,6 @@ import java.util.UUID; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.dataImpl.KeyExtent; @@ -50,6 +49,7 @@ import org.apache.accumulo.core.metadata.schema.ExternalCompactionId; import org.apache.accumulo.core.metadata.schema.MetadataTime; import org.apache.accumulo.core.metadata.schema.SelectedFiles; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.TabletMetadata; import org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType; import org.apache.accumulo.core.metadata.schema.TabletOperationId; @@ -296,7 +296,7 @@ public void testManyColumns() throws Exception { .andReturn(tablet1Mutator); EasyMock.expect(tablet1Mutator.putFile(file2, dfv2)).andReturn(tablet1Mutator); // SplitInfo marked as system generated so should be set to NOW - EasyMock.expect(tablet1Mutator.putTabletMergeability(TabletMergeability.NOW)) + EasyMock.expect(tablet1Mutator.putTabletMergeability(TabletMergeabilityMetadata.NOW)) .andReturn(tablet1Mutator); tablet1Mutator.submit(EasyMock.anyObject()); EasyMock.expectLastCall().once(); @@ -315,7 +315,7 @@ public void testManyColumns() throws Exception { EasyMock.expect(tablet2Mutator.putCompacted(ucfid3)).andReturn(tablet2Mutator); EasyMock.expect(tablet2Mutator.putTabletAvailability(availability)).andReturn(tablet2Mutator); // SplitInfo marked as system generated so should be set to NOW - EasyMock.expect(tablet2Mutator.putTabletMergeability(TabletMergeability.NOW)) + EasyMock.expect(tablet2Mutator.putTabletMergeability(TabletMergeabilityMetadata.NOW)) .andReturn(tablet2Mutator); EasyMock.expect(tablet2Mutator.putBulkFile(loaded1.getTabletFile(), flid1)) .andReturn(tablet2Mutator); diff --git a/test/src/main/java/org/apache/accumulo/test/ample/metadata/TestAmple.java b/test/src/main/java/org/apache/accumulo/test/ample/metadata/TestAmple.java index 7ca024d2020..5113e0772eb 100644 --- a/test/src/main/java/org/apache/accumulo/test/ample/metadata/TestAmple.java +++ b/test/src/main/java/org/apache/accumulo/test/ample/metadata/TestAmple.java @@ -36,7 +36,6 @@ import org.apache.accumulo.core.client.admin.NewTableConfiguration; import org.apache.accumulo.core.client.admin.TabletAvailability; import org.apache.accumulo.core.client.admin.TabletInformation; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.client.admin.TimeType; import org.apache.accumulo.core.clientImpl.ClientContext; import org.apache.accumulo.core.conf.SiteConfiguration; @@ -54,6 +53,7 @@ import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataTime; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.TabletsMetadata; import org.apache.accumulo.core.metadata.schema.TabletsMetadata.TableOptions; import org.apache.accumulo.core.security.Authorizations; @@ -150,7 +150,7 @@ public void createMetadata(TableId tableId) { tabletMutator.putDirName(dirName); tabletMutator.putTime(new MetadataTime(0, TimeType.MILLIS)); tabletMutator.putTabletAvailability(TabletAvailability.HOSTED); - tabletMutator.putTabletMergeability(TabletMergeability.NEVER); + tabletMutator.putTabletMergeability(TabletMergeabilityMetadata.NEVER); tabletMutator.mutate(); } catch (Exception e) { throw new IllegalStateException(e); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/AddSplitIT.java b/test/src/main/java/org/apache/accumulo/test/functional/AddSplitIT.java index b22abcc2a7f..fd2644974e0 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/AddSplitIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/AddSplitIT.java @@ -30,11 +30,11 @@ import org.apache.accumulo.core.client.AccumuloClient; import org.apache.accumulo.core.client.BatchWriter; import org.apache.accumulo.core.client.Scanner; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.data.Value; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.TabletsMetadata; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.harness.AccumuloClusterHarness; @@ -96,8 +96,8 @@ public void addSplitTest() throws Exception { TableId id = TableId.of(c.tableOperations().tableIdMap().get(tableName)); try (TabletsMetadata tm = getServerContext().getAmple().readTablets().forTable(id).build()) { // Default for user created tablets should be mergeability set to NEVER - tm.stream().forEach( - tablet -> assertEquals(TabletMergeability.NEVER, tablet.getTabletMergeability())); + tm.stream().forEach(tablet -> assertEquals(TabletMergeabilityMetadata.NEVER, + tablet.getTabletMergeability())); } } } diff --git a/test/src/main/java/org/apache/accumulo/test/functional/MetadataIT.java b/test/src/main/java/org/apache/accumulo/test/functional/MetadataIT.java index 38094b58762..ffd392e6446 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/MetadataIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/MetadataIT.java @@ -42,7 +42,6 @@ import org.apache.accumulo.core.client.BatchScanner; import org.apache.accumulo.core.client.Scanner; import org.apache.accumulo.core.client.admin.TabletAvailability; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.clientImpl.ClientContext; import org.apache.accumulo.core.conf.Property; import org.apache.accumulo.core.data.Key; @@ -55,6 +54,7 @@ import org.apache.accumulo.core.metadata.schema.MetadataSchema.DeletesSection; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.DataFileColumnFamily; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.metadata.schema.TabletMetadata; import org.apache.accumulo.core.metadata.schema.TabletsMetadata; import org.apache.accumulo.core.security.Authorizations; @@ -290,7 +290,7 @@ private void testCommonSystemTableConfig(ClientContext client, TableId tableId, assertTrue( tablets.stream().allMatch(tm -> tm.getTabletAvailability() == TabletAvailability.HOSTED)); assertTrue(tablets.stream() - .allMatch(tm -> tm.getTabletMergeability().equals(TabletMergeability.NEVER))); + .allMatch(tm -> tm.getTabletMergeability().equals(TabletMergeabilityMetadata.NEVER))); } } } diff --git a/test/src/main/java/org/apache/accumulo/test/functional/SplitIT.java b/test/src/main/java/org/apache/accumulo/test/functional/SplitIT.java index 84076f5f3dc..d5a5e4a4f56 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/SplitIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/SplitIT.java @@ -57,7 +57,6 @@ import org.apache.accumulo.core.client.admin.CompactionConfig; import org.apache.accumulo.core.client.admin.InstanceOperations; import org.apache.accumulo.core.client.admin.NewTableConfiguration; -import org.apache.accumulo.core.client.admin.TabletMergeability; import org.apache.accumulo.core.client.rfile.RFile; import org.apache.accumulo.core.client.rfile.RFileWriter; import org.apache.accumulo.core.conf.Property; @@ -67,9 +66,9 @@ import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.metadata.AccumuloTable; -import org.apache.accumulo.core.metadata.TabletMergeabilityUtil; import org.apache.accumulo.core.metadata.schema.DataFileValue; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily; +import org.apache.accumulo.core.metadata.schema.TabletMergeabilityMetadata; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.core.util.Pair; import org.apache.accumulo.harness.AccumuloClusterHarness; @@ -264,9 +263,9 @@ public void tabletShouldSplit() throws Exception { .equals(entry.getKey().getColumnQualifier())) { // Default tablet should be set to NEVER, all newly generated system splits should be // set to NOW - var mergeability = - extent.endRow() == null ? TabletMergeability.NEVER : TabletMergeability.NOW; - assertEquals(mergeability, TabletMergeabilityUtil.fromValue(entry.getValue())); + var mergeability = extent.endRow() == null ? TabletMergeabilityMetadata.NEVER + : TabletMergeabilityMetadata.NOW; + assertEquals(mergeability, TabletMergeabilityMetadata.fromValue(entry.getValue())); } count++; }