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 f4a857e1fa moves static metadata util methods to only places using them (#4639) f4a857e1fa is described below commit f4a857e1fa46d5de684e81aa5dd4a8a96e5097b2 Author: Keith Turner <ktur...@apache.org> AuthorDate: Wed Jun 5 17:25:40 2024 -0400 moves static metadata util methods to only places using them (#4639) While investigating #3858, noticed these utility metadata utility methods that were not widely used. Moved the static method where they are actually used to clean up the code. --- .../accumulo/server/util/MetadataTableUtil.java | 53 ---------------------- .../manager/upgrade/SplitRecovery12to13.java | 42 +++++++++++++++-- .../accumulo/test/MetaConstraintRetryIT.java | 4 +- .../accumulo/test/functional/SplitRecoveryIT.java | 18 +++++++- 4 files changed, 58 insertions(+), 59 deletions(-) diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java b/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java index e767bca510..4e38572dd3 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java @@ -31,11 +31,9 @@ import static org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import java.util.SortedMap; import java.util.TreeMap; @@ -57,14 +55,11 @@ import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.dataImpl.KeyExtent; -import org.apache.accumulo.core.fate.FateId; import org.apache.accumulo.core.gc.ReferenceFile; import org.apache.accumulo.core.lock.ServiceLock; import org.apache.accumulo.core.metadata.AccumuloTable; -import org.apache.accumulo.core.metadata.ReferencedTabletFile; import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.schema.Ample; -import org.apache.accumulo.core.metadata.schema.Ample.TabletMutator; import org.apache.accumulo.core.metadata.schema.DataFileValue; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ClonedColumnFamily; @@ -72,7 +67,6 @@ import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.Cu import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.DataFileColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.LastLocationColumnFamily; 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.TabletDeletedException; import org.apache.accumulo.core.metadata.schema.TabletMetadata; import org.apache.accumulo.core.metadata.schema.TabletsMetadata; @@ -103,53 +97,6 @@ public class MetadataTableUtil { new Value(zooLock.getLockID().serialize(context.getZooKeeperRoot() + "/"))); } - public static void update(ServerContext context, ServiceLock zooLock, Mutation m, - KeyExtent extent) { - - if (zooLock != null) { - putLockID(context, zooLock, m); - } - - String metaTable = Ample.DataLevel.of(extent.tableId()).metaTable(); - while (true) { - try (BatchWriter writer = context.createBatchWriter(metaTable)) { - writer.addMutation(m); - writer.flush(); - return; - } catch (MutationsRejectedException e) { - - if (!e.getConstraintViolationSummaries().isEmpty()) { - // retrying when a CVE occurs is probably futile and can cause problems, see ACCUMULO-3096 - throw new IllegalArgumentException(e); - } - } catch (TableNotFoundException e) { - logUpdateFailure(m, extent, e); - } - - sleepUninterruptibly(1, TimeUnit.SECONDS); - } - } - - private static void logUpdateFailure(Mutation m, KeyExtent extent, Exception e) { - log.error("Failed to write metadata updates for extent {} {}", extent, m.prettyPrint(), e); - } - - public static Map<StoredTabletFile,DataFileValue> updateTabletDataFile(FateId fateId, - KeyExtent extent, Map<ReferencedTabletFile,DataFileValue> estSizes, MetadataTime time, - ServerContext context, ServiceLock zooLock) { - TabletMutator tablet = context.getAmple().mutateTablet(extent); - tablet.putTime(time); - - Map<StoredTabletFile,DataFileValue> newFiles = new HashMap<>(estSizes.size()); - estSizes.forEach((tf, dfv) -> { - tablet.putFile(tf, dfv); - tablet.putBulkFile(tf, fateId); - newFiles.put(tf.insert(), dfv); - }); - tablet.mutate(); - return newFiles; - } - public static void deleteTable(TableId tableId, boolean insertDeletes, ServerContext context, ServiceLock lock) throws AccumuloException { try ( diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/SplitRecovery12to13.java b/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/SplitRecovery12to13.java index 436f96c5d4..73d2b66bdf 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/SplitRecovery12to13.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/SplitRecovery12to13.java @@ -18,6 +18,7 @@ */ package org.apache.accumulo.manager.upgrade; +import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly; import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.Upgrade12to13.OLD_PREV_ROW_COLUMN; import static org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.Upgrade12to13.SPLIT_RATIO_COLUMN; @@ -29,9 +30,13 @@ import java.util.Map.Entry; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import java.util.concurrent.TimeUnit; import org.apache.accumulo.core.client.AccumuloException; +import org.apache.accumulo.core.client.BatchWriter; +import org.apache.accumulo.core.client.MutationsRejectedException; import org.apache.accumulo.core.client.Scanner; +import org.apache.accumulo.core.client.TableNotFoundException; import org.apache.accumulo.core.clientImpl.ScannerImpl; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; @@ -40,6 +45,7 @@ import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.dataImpl.KeyExtent; +import org.apache.accumulo.core.lock.ServiceLock; import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.schema.Ample; import org.apache.accumulo.core.metadata.schema.DataFileValue; @@ -203,7 +209,7 @@ public class SplitRecovery12to13 { Mutation m = TabletsSection.TabletColumnFamily.createPrevRowMutation(ke); SPLIT_RATIO_COLUMN.putDelete(m); OLD_PREV_ROW_COLUMN.putDelete(m); - MetadataTableUtil.update(context, null, m, KeyExtent.fromMetaRow(metadataEntry)); + update(context, null, m, KeyExtent.fromMetaRow(metadataEntry)); } public static void splitTablet(KeyExtent extent, Text oldPrevEndRow, double splitRatio, @@ -217,7 +223,7 @@ public class SplitRecovery12to13 { ecids.forEach(ecid -> m.putDelete(TabletsSection.ExternalCompactionColumnFamily.STR_NAME, ecid.canonical())); - MetadataTableUtil.update(context, null, m, extent); + update(context, null, m, extent); } public static void finishSplit(Text metadataEntry, @@ -236,7 +242,7 @@ public class SplitRecovery12to13 { m.putDelete(DataFileColumnFamily.NAME, pathToRemove.getMetadataText()); } - MetadataTableUtil.update(context, null, m, KeyExtent.fromMetaRow(metadataEntry)); + update(context, null, m, KeyExtent.fromMetaRow(metadataEntry)); } public static void finishSplit(KeyExtent extent, @@ -245,4 +251,34 @@ public class SplitRecovery12to13 { finishSplit(extent.toMetaRow(), datafileSizes, highDatafilesToRemove, context); } + public static void update(ServerContext context, ServiceLock zooLock, Mutation m, + KeyExtent extent) { + + if (zooLock != null) { + MetadataTableUtil.putLockID(context, zooLock, m); + } + + String metaTable = Ample.DataLevel.of(extent.tableId()).metaTable(); + while (true) { + try (BatchWriter writer = context.createBatchWriter(metaTable)) { + writer.addMutation(m); + writer.flush(); + return; + } catch (MutationsRejectedException e) { + + if (!e.getConstraintViolationSummaries().isEmpty()) { + // retrying when a CVE occurs is probably futile and can cause problems, see ACCUMULO-3096 + throw new IllegalArgumentException(e); + } + } catch (TableNotFoundException e) { + logUpdateFailure(m, extent, e); + } + + sleepUninterruptibly(1, TimeUnit.SECONDS); + } + } + + private static void logUpdateFailure(Mutation m, KeyExtent extent, Exception e) { + log.error("Failed to write metadata updates for extent {} {}", extent, m.prettyPrint(), e); + } } diff --git a/test/src/main/java/org/apache/accumulo/test/MetaConstraintRetryIT.java b/test/src/main/java/org/apache/accumulo/test/MetaConstraintRetryIT.java index 2bf338bde9..6d08a6af49 100644 --- a/test/src/main/java/org/apache/accumulo/test/MetaConstraintRetryIT.java +++ b/test/src/main/java/org/apache/accumulo/test/MetaConstraintRetryIT.java @@ -33,8 +33,8 @@ import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.security.TablePermission; import org.apache.accumulo.harness.AccumuloClusterHarness; +import org.apache.accumulo.manager.upgrade.SplitRecovery12to13; import org.apache.accumulo.server.ServerContext; -import org.apache.accumulo.server.util.MetadataTableUtil; import org.junit.jupiter.api.Test; public class MetaConstraintRetryIT extends AccumuloClusterHarness { @@ -58,7 +58,7 @@ public class MetaConstraintRetryIT extends AccumuloClusterHarness { // unknown columns should cause constraint violation m.put("badcolfam", "badcolqual", "3"); var iae = assertThrows(IllegalArgumentException.class, - () -> MetadataTableUtil.update(context, null, m, extent)); + () -> SplitRecovery12to13.update(context, null, m, extent)); assertEquals(MutationsRejectedException.class, iae.getCause().getClass()); var mre = (MutationsRejectedException) iae.getCause(); assertFalse(mre.getConstraintViolationSummaries().isEmpty()); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/SplitRecoveryIT.java b/test/src/main/java/org/apache/accumulo/test/functional/SplitRecoveryIT.java index 524464d9fa..88c3b2b894 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/SplitRecoveryIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/SplitRecoveryIT.java @@ -74,6 +74,22 @@ import org.junit.jupiter.api.Test; public class SplitRecoveryIT extends ConfigurableMacBase { + public static Map<StoredTabletFile,DataFileValue> updateTabletDataFile(FateId fateId, + KeyExtent extent, Map<ReferencedTabletFile,DataFileValue> estSizes, MetadataTime time, + ServerContext context, ServiceLock zooLock) { + TabletMutator tablet = context.getAmple().mutateTablet(extent); + tablet.putTime(time); + + Map<StoredTabletFile,DataFileValue> newFiles = new HashMap<>(estSizes.size()); + estSizes.forEach((tf, dfv) -> { + tablet.putFile(tf, dfv); + tablet.putBulkFile(tf, fateId); + newFiles.put(tf.insert(), dfv); + }); + tablet.mutate(); + return newFiles; + } + @Override protected Duration defaultTimeout() { return Duration.ofMinutes(1); @@ -140,7 +156,7 @@ public class SplitRecoveryIT extends ConfigurableMacBase { FateId fateId = FateId.from(FateInstanceType.fromTableId(extent.tableId()), UUID.randomUUID()); SortedMap<StoredTabletFile,DataFileValue> storedFiles = - new TreeMap<>(MetadataTableUtil.updateTabletDataFile(fateId, extent, dataFiles, + new TreeMap<>(updateTabletDataFile(fateId, extent, dataFiles, new MetadataTime(0, TimeType.LOGICAL), context, zl)); if (i == extentToSplit) { splitDataFiles = storedFiles;