This is an automated email from the ASF dual-hosted git repository. ctubbsii pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/main by this push: new a47ee0b77d Polish up some code from recent changes (#3979) a47ee0b77d is described below commit a47ee0b77da47e9115caad28f18a1f190dd30c2e Author: Christopher Tubbs <ctubb...@apache.org> AuthorDate: Wed Nov 29 03:03:29 2023 -0500 Polish up some code from recent changes (#3979) * Use simpler regex pattern for non-digits * Minimize deprecated "chopped" column code * Remove unused logger * Remove unnecessary 'var ignored = ' which caused unused variable warnings in some IDEs; this might cause warnings about unused return values in other IDEs, but I'm not sure the ideal way to address that at this point; for now, this change keeps us at 0 warnings in Eclipse with default settings, except those from thrift and the unavoidable ones from Eclipse's incorrect handling of forRemoval deprecations, and this is also consistent with our current coding style (we don't use ignored variable declarations anywhere else) * Replace some static imports to inner classes with non-static imports, as this results in the same code usage; static is unnecessary there * Fix assertion in DefaultCompactionPlannerTest found by unused variable warning * Make slight improvements to upgrader code to identify and retrieve the oldest upgradable version --- .../apache/accumulo/core/conf/PropertyType.java | 2 +- .../core/metadata/schema/MetadataSchema.java | 10 ++++++ .../core/metadata/schema/RootTabletMetadata.java | 3 -- .../schema/UpgraderDeprecatedConstants.java | 40 ---------------------- .../accumulo/core/tabletserver/log/LogEntry.java | 4 +-- .../compaction/DefaultCompactionPlannerTest.java | 6 ++-- .../accumulo/server/AccumuloDataVersion.java | 12 ++++--- .../server/constraints/MetadataConstraints.java | 7 ++-- .../apache/accumulo/server/ServerContextTest.java | 7 ++-- .../accumulo/manager/upgrade/Upgrader11to12.java | 14 ++++---- .../manager/upgrade/Upgrader11to12Test.java | 7 ++-- 11 files changed, 44 insertions(+), 68 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java b/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java index 8696ae295f..e503b92c36 100644 --- a/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java +++ b/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java @@ -245,7 +245,7 @@ public enum PropertyType { || (suffixCheck.test(x) && new Bounds(lowerBound, upperBound).test(stripUnits.apply(x))); } - private static final Pattern SUFFIX_REGEX = Pattern.compile("[^\\d]*$"); + private static final Pattern SUFFIX_REGEX = Pattern.compile("\\D*$"); // match non-digits at end private static final Function<String,String> stripUnits = x -> x == null ? null : SUFFIX_REGEX.matcher(x.trim()).replaceAll(""); diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/MetadataSchema.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/MetadataSchema.java index 2bc0a6e18e..0fd991296c 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/schema/MetadataSchema.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/schema/MetadataSchema.java @@ -321,6 +321,16 @@ public class MetadataSchema { public static final Text NAME = new Text(STR_NAME); } + /** + * Column family for indicating that the files in a tablet have been trimmed to only include + * data for the current tablet, so that they are safe to merge + */ + public static class ChoppedColumnFamily { + // kept to support upgrades to 3.1; name is used for both col fam and col qual + @Deprecated(since = "3.1.0") + public static final Text NAME = new Text("chopped"); + } + public static class ExternalCompactionColumnFamily { public static final String STR_NAME = "ecomp"; public static final Text NAME = new Text(STR_NAME); diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/RootTabletMetadata.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/RootTabletMetadata.java index 19285bebdb..cc16bb6ff9 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/schema/RootTabletMetadata.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/schema/RootTabletMetadata.java @@ -39,8 +39,6 @@ import org.apache.accumulo.core.metadata.RootTable; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CurrentLocationColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.FutureLocationColumnFamily; import org.apache.hadoop.io.Text; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * This class is used to serialize and deserialize root tablet metadata using GSon. The only data @@ -50,7 +48,6 @@ import org.slf4j.LoggerFactory; */ public class RootTabletMetadata { - private static final Logger log = LoggerFactory.getLogger(RootTabletMetadata.class); private static final CharsetDecoder UTF8_error_detecting_decoder = UTF_8.newDecoder(); private static final Predicate<Entry<String,TreeMap<String,String>>> isLocationCF = e -> { String fam = e.getKey(); diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/schema/UpgraderDeprecatedConstants.java b/core/src/main/java/org/apache/accumulo/core/metadata/schema/UpgraderDeprecatedConstants.java deleted file mode 100644 index 1d9967cc71..0000000000 --- a/core/src/main/java/org/apache/accumulo/core/metadata/schema/UpgraderDeprecatedConstants.java +++ /dev/null @@ -1,40 +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.schema; - -import org.apache.accumulo.core.util.ColumnFQ; -import org.apache.hadoop.io.Text; - -/** - * MetadataSchema constants that are deprecated and should only be used to support removals during - * the upgrade process. - */ -public class UpgraderDeprecatedConstants { - - /** - * ChoppedColumnFamily kept around for cleaning up old entries on upgrade. Currently not used, - * will be used by #3768 - */ - public static class ChoppedColumnFamily { - public static final String STR_NAME = "chopped"; - public static final Text NAME = new Text(STR_NAME); - public static final ColumnFQ CHOPPED_COLUMN = new ColumnFQ(NAME, new Text(STR_NAME)); - } - -} diff --git a/core/src/main/java/org/apache/accumulo/core/tabletserver/log/LogEntry.java b/core/src/main/java/org/apache/accumulo/core/tabletserver/log/LogEntry.java index d3b6f5ac02..9c592b2260 100644 --- a/core/src/main/java/org/apache/accumulo/core/tabletserver/log/LogEntry.java +++ b/core/src/main/java/org/apache/accumulo/core/tabletserver/log/LogEntry.java @@ -61,7 +61,7 @@ public class LogEntry { String uuidPart = parts[parts.length - 1]; try { - var ignored = HostAndPort.fromString(tserverPart); + HostAndPort.fromString(tserverPart); } catch (IllegalArgumentException e) { throw new IllegalArgumentException( "Invalid tserver format in filePath. Expected format: host:port. Found '" + tserverPart @@ -69,7 +69,7 @@ public class LogEntry { } try { - var ignored = UUID.fromString(uuidPart); + UUID.fromString(uuidPart); } catch (IllegalArgumentException e) { throw new IllegalArgumentException("Expected valid UUID. Found '" + uuidPart + "'"); } diff --git a/core/src/test/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlannerTest.java b/core/src/test/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlannerTest.java index 5ae90a4f2d..c043eac841 100644 --- a/core/src/test/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlannerTest.java +++ b/core/src/test/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlannerTest.java @@ -19,7 +19,6 @@ package org.apache.accumulo.core.spi.compaction; import static com.google.common.collect.MoreCollectors.onlyElement; -import static org.apache.accumulo.core.spi.compaction.CompactionPlanner.InitParameters; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -41,6 +40,7 @@ import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.spi.common.ServiceEnvironment; import org.apache.accumulo.core.spi.common.ServiceEnvironment.Configuration; import org.apache.accumulo.core.spi.compaction.CompactionPlan.Builder; +import org.apache.accumulo.core.spi.compaction.CompactionPlanner.InitParameters; import org.apache.accumulo.core.util.compaction.CompactionExecutorIdImpl; import org.apache.accumulo.core.util.compaction.CompactionPlanImpl; import org.easymock.EasyMock; @@ -421,9 +421,9 @@ public class DefaultCompactionPlannerTest { var params = getInitParamQueues(senv, ""); assertNotNull(params); - var err = assertThrows(IllegalStateException.class, () -> planner.init(params), + var e2 = assertThrows(IllegalStateException.class, () -> planner.init(params), "Failed to throw error"); - assertEquals("No defined executors or queues for this planner", e.getMessage(), + assertEquals("No defined executors or queues for this planner", e2.getMessage(), "Error message was not equal"); } diff --git a/server/base/src/main/java/org/apache/accumulo/server/AccumuloDataVersion.java b/server/base/src/main/java/org/apache/accumulo/server/AccumuloDataVersion.java index 4aae44a974..5cbb0e2427 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/AccumuloDataVersion.java +++ b/server/base/src/main/java/org/apache/accumulo/server/AccumuloDataVersion.java @@ -38,7 +38,7 @@ public class AccumuloDataVersion { /** * version (12) reflect changes to support no chop merges including json encoding of the file - * column family stored in root and metadata tables. + * column family stored in root and metadata tables in version 3.1 */ public static final int METADATA_FILE_JSON_ENCODING = 12; @@ -49,12 +49,12 @@ public class AccumuloDataVersion { /** * version (10) reflects changes to how root tablet metadata is serialized in zookeeper starting - * with 2.1. See {@link org.apache.accumulo.core.metadata.schema.RootTabletMetadata}. + * with 2.1. See {@link org.apache.accumulo.core.metadata.schema.RootTabletMetadata} */ public static final int ROOT_TABLET_META_CHANGES = 10; /** - * Historic data versions + * Historic data versions. * * <ul> * <li>version (9) RFiles and wal crypto serialization changes. RFile summary data in 2.0.0</li> @@ -93,8 +93,12 @@ public class AccumuloDataVersion { return cv; } + public static int oldestUpgradeableVersion() { + return CAN_RUN.stream().mapToInt(x -> x).min().orElseThrow(); + } + public static String oldestUpgradeableVersionName() { - return dataVersionToReleaseName(CAN_RUN.stream().mapToInt(x -> x).min().orElseThrow()); + return dataVersionToReleaseName(oldestUpgradeableVersion()); } private static String dataVersionToReleaseName(final int version) { 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 ca45a05e8a..aa9772a159 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 @@ -40,6 +40,7 @@ import org.apache.accumulo.core.metadata.MetadataTable; import org.apache.accumulo.core.metadata.StoredTabletFile; 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; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ClonedColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CurrentLocationColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.DataFileColumnFamily; @@ -52,7 +53,6 @@ import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.Sc import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ServerColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.SuspendLocationColumn; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily; -import org.apache.accumulo.core.metadata.schema.UpgraderDeprecatedConstants; import org.apache.accumulo.core.util.ColumnFQ; import org.apache.accumulo.core.util.cleaner.CleanerUtil; import org.apache.accumulo.server.ServerContext; @@ -89,6 +89,9 @@ public class MetadataConstraints implements Constraint { ServerColumnFamily.FLUSH_COLUMN, ServerColumnFamily.COMPACT_COLUMN); + @SuppressWarnings("deprecation") + private static final Text CHOPPED = ChoppedColumnFamily.NAME; + private static final Set<Text> validColumnFams = Set.of(BulkFileColumnFamily.NAME, LogColumnFamily.NAME, @@ -99,7 +102,7 @@ public class MetadataConstraints implements Constraint { FutureLocationColumnFamily.NAME, ClonedColumnFamily.NAME, ExternalCompactionColumnFamily.NAME, - UpgraderDeprecatedConstants.ChoppedColumnFamily.NAME, + CHOPPED, MergedColumnFamily.NAME ); // @formatter:on diff --git a/server/base/src/test/java/org/apache/accumulo/server/ServerContextTest.java b/server/base/src/test/java/org/apache/accumulo/server/ServerContextTest.java index 5df5668804..fe04b78eb1 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/ServerContextTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/ServerContextTest.java @@ -130,12 +130,11 @@ public class ServerContextTest { }); } + // ensure upgrades fail with older, unsupported versions, but pass with supported versions @Test public void testCanRun() { - // ensure this fails with older versions; the oldest supported version is hard-coded here - // to ensure we don't unintentionally break upgrade support; changing this should be a conscious - // decision and this check will ensure we don't overlook it - final int oldestSupported = 10; // AccumuloDataVersion.ROOT_TABLET_META_CHANGES; + final int oldestSupported = AccumuloDataVersion.oldestUpgradeableVersion(); + assertEquals(10, oldestSupported); // make sure it hasn't changed accidentally final int currentVersion = AccumuloDataVersion.get(); IntConsumer shouldPass = ServerContext::ensureDataVersionCompatible; IntConsumer shouldFail = v -> assertThrows(IllegalStateException.class, diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java b/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java index 90a6eb4b62..c638d45315 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/upgrade/Upgrader11to12.java @@ -40,10 +40,10 @@ import org.apache.accumulo.core.fate.zookeeper.ZooUtil; import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.schema.Ample; import org.apache.accumulo.core.metadata.schema.MetadataSchema; +import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ChoppedColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.DataFileColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ExternalCompactionColumnFamily; import org.apache.accumulo.core.metadata.schema.RootTabletMetadata; -import org.apache.accumulo.core.metadata.schema.UpgraderDeprecatedConstants.ChoppedColumnFamily; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.core.util.TextUtil; import org.apache.accumulo.server.ServerContext; @@ -62,9 +62,12 @@ public class Upgrader11to12 implements Upgrader { private static final Logger log = LoggerFactory.getLogger(Upgrader11to12.class); + @SuppressWarnings("deprecation") + private static final Text CHOPPED = ChoppedColumnFamily.NAME; + @VisibleForTesting - static final Set<Text> UPGRADE_FAMILIES = Set.of(DataFileColumnFamily.NAME, - ChoppedColumnFamily.NAME, ExternalCompactionColumnFamily.NAME); + static final Set<Text> UPGRADE_FAMILIES = + Set.of(DataFileColumnFamily.NAME, CHOPPED, ExternalCompactionColumnFamily.NAME); @Override public void upgradeZookeeper(@NonNull ServerContext context) { @@ -165,12 +168,11 @@ public class Upgrader11to12 implements Upgrader { var family = key.getColumnFamily(); if (family.equals(DataFileColumnFamily.NAME)) { upgradeDataFileCF(key, value, update); - } else if (family.equals(ChoppedColumnFamily.NAME)) { + } else if (family.equals(CHOPPED)) { log.warn( "Deleting chopped reference from:{}. Previous split or delete may not have completed cleanly. Ref: {}", tableName, key.getRow()); - update.at().family(ChoppedColumnFamily.STR_NAME).qualifier(ChoppedColumnFamily.STR_NAME) - .delete(); + update.at().family(CHOPPED).qualifier(CHOPPED).delete(); } else if (family.equals(ExternalCompactionColumnFamily.NAME)) { log.debug( "Deleting external compaction reference from:{}. Previous compaction may not have completed. Ref: {}", diff --git a/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java b/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java index 9fedfe5813..7818164e75 100644 --- a/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java +++ b/server/manager/src/test/java/org/apache/accumulo/manager/upgrade/Upgrader11to12Test.java @@ -51,11 +51,11 @@ import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; import org.apache.accumulo.core.metadata.StoredTabletFile; +import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ChoppedColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.DataFileColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ExternalCompactionColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.LastLocationColumnFamily; import org.apache.accumulo.core.metadata.schema.RootTabletMetadata; -import org.apache.accumulo.core.metadata.schema.UpgraderDeprecatedConstants.ChoppedColumnFamily; import org.apache.accumulo.server.ServerContext; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Text; @@ -123,8 +123,9 @@ public class Upgrader11to12Test { Value value2 = new Value("321,654"); scanData.put(key2, value2); - Key chop1 = Key.builder(false).row(row1).family(ChoppedColumnFamily.NAME) - .qualifier(ChoppedColumnFamily.NAME).build(); + @SuppressWarnings("deprecation") + var chopped = ChoppedColumnFamily.NAME; + Key chop1 = Key.builder(false).row(row1).family(chopped).qualifier(chopped).build(); scanData.put(chop1, null); Key extern1 = Key.builder(false).row(row1).family(ExternalCompactionColumnFamily.NAME)