diff --git a/core/src/main/java/org/apache/accumulo/core/fate/FateInstanceType.java b/core/src/main/java/org/apache/accumulo/core/fate/FateInstanceType.java index 403ae724640..32523db7136 100644 --- a/core/src/main/java/org/apache/accumulo/core/fate/FateInstanceType.java +++ b/core/src/main/java/org/apache/accumulo/core/fate/FateInstanceType.java @@ -18,20 +18,14 @@ */ package org.apache.accumulo.core.fate; -import java.util.Set; - import org.apache.accumulo.core.clientImpl.Namespace; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.manager.thrift.TFateInstanceType; import org.apache.accumulo.core.metadata.AccumuloTable; -import org.apache.accumulo.core.metadata.FateTable; public enum FateInstanceType { META, USER; - private static final Set META_TABLES = - Set.of(AccumuloTable.ROOT.tableId(), AccumuloTable.METADATA.tableId(), FateTable.ID); - public static FateInstanceType fromNamespaceOrTableName(String tableOrNamespaceName) { return tableOrNamespaceName.startsWith(Namespace.ACCUMULO.name()) ? FateInstanceType.META : FateInstanceType.USER; @@ -60,6 +54,6 @@ public static FateInstanceType fromThrift(TFateInstanceType tfit) { } public static FateInstanceType fromTableId(TableId tableId) { - return META_TABLES.contains(tableId) ? META : USER; + return AccumuloTable.allTableIds().contains(tableId) ? META : USER; } } diff --git a/core/src/main/java/org/apache/accumulo/core/fate/accumulo/AccumuloStore.java b/core/src/main/java/org/apache/accumulo/core/fate/accumulo/AccumuloStore.java index 89c1c316c9b..9b870537faa 100644 --- a/core/src/main/java/org/apache/accumulo/core/fate/accumulo/AccumuloStore.java +++ b/core/src/main/java/org/apache/accumulo/core/fate/accumulo/AccumuloStore.java @@ -40,7 +40,7 @@ import org.apache.accumulo.core.fate.accumulo.schema.FateSchema.RepoColumnFamily; import org.apache.accumulo.core.fate.accumulo.schema.FateSchema.TxColumnFamily; import org.apache.accumulo.core.fate.accumulo.schema.FateSchema.TxInfoColumnFamily; -import org.apache.accumulo.core.metadata.FateTable; +import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.core.util.ColumnFQ; import org.apache.accumulo.core.util.FastFormat; @@ -63,7 +63,7 @@ public AccumuloStore(ClientContext context, String tableName) { } public AccumuloStore(ClientContext context) { - this(context, FateTable.NAME); + this(context, AccumuloTable.FATE.tableName()); } @Override diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/AccumuloTable.java b/core/src/main/java/org/apache/accumulo/core/metadata/AccumuloTable.java index 14b8b0cf30d..5b9b6999220 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/AccumuloTable.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/AccumuloTable.java @@ -18,6 +18,10 @@ */ package org.apache.accumulo.core.metadata; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + import org.apache.accumulo.core.clientImpl.Namespace; import org.apache.accumulo.core.data.TableId; @@ -26,7 +30,7 @@ */ public enum AccumuloTable { - ROOT("root", "+r"), METADATA("metadata", "!0"); + ROOT("root", "+r"), METADATA("metadata", "!0"), FATE("fate", "+fate"); private final String name; private final TableId tableId; @@ -43,4 +47,11 @@ public TableId tableId() { this.name = Namespace.ACCUMULO.name() + "." + name; this.tableId = TableId.of(id); } + + private static final Set ALL_IDS = + Arrays.stream(values()).map(AccumuloTable::tableId).collect(Collectors.toUnmodifiableSet()); + + public static Set allTableIds() { + return ALL_IDS; + } } diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/FateTable.java b/core/src/main/java/org/apache/accumulo/core/metadata/FateTable.java deleted file mode 100644 index 0b6d99d4534..00000000000 --- a/core/src/main/java/org/apache/accumulo/core/metadata/FateTable.java +++ /dev/null @@ -1,27 +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 org.apache.accumulo.core.clientImpl.Namespace; -import org.apache.accumulo.core.data.TableId; - -public class FateTable { - public static final TableId ID = TableId.of("+fate"); - public static final String NAME = Namespace.ACCUMULO.name() + ".fate"; -} 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 f370cc0ca0c..0fc68224ecd 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 @@ -45,7 +45,6 @@ import org.apache.accumulo.core.file.FileOperations; import org.apache.accumulo.core.file.FileSKVWriter; import org.apache.accumulo.core.metadata.AccumuloTable; -import org.apache.accumulo.core.metadata.FateTable; import org.apache.accumulo.core.metadata.ReferencedTabletFile; import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.schema.DataFileValue; @@ -106,13 +105,13 @@ void initialize(VolumeManager fs, String rootTabletDirUri, String rootTabletFile String tableMetadataTabletDirUri = fs.choose(chooserEnv, context.getBaseUris()) + Constants.HDFS_TABLES_DIR + Path.SEPARATOR + AccumuloTable.METADATA.tableId() + Path.SEPARATOR + tableMetadataTabletDirName; - chooserEnv = new VolumeChooserEnvironmentImpl(VolumeChooserEnvironment.Scope.INIT, FateTable.ID, - null, context); + chooserEnv = new VolumeChooserEnvironmentImpl(VolumeChooserEnvironment.Scope.INIT, + AccumuloTable.FATE.tableId(), null, context); String fateTableDefaultTabletDirName = MetadataSchema.TabletsSection.ServerColumnFamily.DEFAULT_TABLET_DIR_NAME; String fateTableDefaultTabletDirUri = fs.choose(chooserEnv, context.getBaseUris()) + Constants.HDFS_TABLES_DIR + Path.SEPARATOR - + FateTable.ID + Path.SEPARATOR + fateTableDefaultTabletDirName; + + AccumuloTable.FATE.tableId() + Path.SEPARATOR + fateTableDefaultTabletDirName; chooserEnv = new VolumeChooserEnvironmentImpl(VolumeChooserEnvironment.Scope.INIT, AccumuloTable.METADATA.tableId(), null, context); String defaultMetadataTabletDirName = @@ -129,7 +128,8 @@ void initialize(VolumeManager fs, String rootTabletDirUri, String rootTabletFile // populate the metadata tablet with info about the fate tablet String metadataFileName = tableMetadataTabletDirUri + Path.SEPARATOR + "0_1." + ext; - Tablet fateTablet = new Tablet(FateTable.ID, fateTableDefaultTabletDirName, null, null); + Tablet fateTablet = + new Tablet(AccumuloTable.FATE.tableId(), fateTableDefaultTabletDirName, null, null); createMetadataFile(fs, metadataFileName, siteConfig, fateTablet); // populate the root tablet with info about the metadata table's two initial tablets @@ -165,7 +165,7 @@ private void initSystemTablesConfig(final ServerContext context) setTableProperties(context, AccumuloTable.ROOT.tableId(), initConfig.getRootMetaConf()); setTableProperties(context, AccumuloTable.METADATA.tableId(), initConfig.getRootMetaConf()); setTableProperties(context, AccumuloTable.METADATA.tableId(), initConfig.getMetaTableConf()); - setTableProperties(context, FateTable.ID, initConfig.getFateTableConf()); + setTableProperties(context, AccumuloTable.FATE.tableId(), initConfig.getFateTableConf()); } private void setTableProperties(final ServerContext context, TableId tableId, diff --git a/server/base/src/main/java/org/apache/accumulo/server/init/ZooKeeperInitializer.java b/server/base/src/main/java/org/apache/accumulo/server/init/ZooKeeperInitializer.java index 084a4f80fa7..49c765eceb8 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/init/ZooKeeperInitializer.java +++ b/server/base/src/main/java/org/apache/accumulo/server/init/ZooKeeperInitializer.java @@ -35,7 +35,6 @@ import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.core.manager.thrift.ManagerGoalState; import org.apache.accumulo.core.metadata.AccumuloTable; -import org.apache.accumulo.core.metadata.FateTable; import org.apache.accumulo.core.metadata.RootTable; import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.schema.DataFileValue; @@ -127,8 +126,9 @@ void initialize(final ServerContext context, final boolean clearInstanceName, TableManager.prepareNewTableState(context, AccumuloTable.METADATA.tableId(), Namespace.ACCUMULO.id(), AccumuloTable.METADATA.tableName(), TableState.ONLINE, ZooUtil.NodeExistsPolicy.FAIL); - TableManager.prepareNewTableState(context, FateTable.ID, Namespace.ACCUMULO.id(), - FateTable.NAME, TableState.ONLINE, ZooUtil.NodeExistsPolicy.FAIL); + TableManager.prepareNewTableState(context, AccumuloTable.FATE.tableId(), + Namespace.ACCUMULO.id(), AccumuloTable.FATE.tableName(), TableState.ONLINE, + ZooUtil.NodeExistsPolicy.FAIL); zoo.putPersistentData(zkInstanceRoot + Constants.ZTSERVERS, EMPTY_BYTE_ARRAY, ZooUtil.NodeExistsPolicy.FAIL); zoo.putPersistentData(zkInstanceRoot + Constants.ZPROBLEMS, EMPTY_BYTE_ARRAY, diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java index c0a296c151c..03aa217ed1a 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java @@ -99,7 +99,6 @@ import org.apache.accumulo.core.manager.thrift.TableInfo; import org.apache.accumulo.core.manager.thrift.TabletServerStatus; import org.apache.accumulo.core.metadata.AccumuloTable; -import org.apache.accumulo.core.metadata.FateTable; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily; @@ -1079,7 +1078,7 @@ boolean canSuspendTablets() { var metaInstance = initializeFateInstance(context, FateInstanceType.META, new ZooStore<>(getZooKeeperRoot() + Constants.ZFATE, context.getZooReaderWriter())); var userInstance = initializeFateInstance(context, FateInstanceType.USER, - new AccumuloStore<>(context, FateTable.NAME)); + new AccumuloStore<>(context, AccumuloTable.FATE.tableName())); if (!fateRefs.compareAndSet(null, Map.of(FateInstanceType.META, metaInstance, FateInstanceType.USER, userInstance))) { diff --git a/test/src/main/java/org/apache/accumulo/test/functional/TabletManagementIteratorIT.java b/test/src/main/java/org/apache/accumulo/test/functional/TabletManagementIteratorIT.java index 5204ee34087..2f8bd15b52b 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/TabletManagementIteratorIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/TabletManagementIteratorIT.java @@ -62,7 +62,6 @@ import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.core.manager.thrift.ManagerState; import org.apache.accumulo.core.metadata.AccumuloTable; -import org.apache.accumulo.core.metadata.FateTable; import org.apache.accumulo.core.metadata.StoredTabletFile; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.schema.Ample; @@ -416,7 +415,8 @@ private void copyTable(AccumuloClient client, String source, String copy) // metadata should be stable with only 9 rows (2 for each table) + 1 for the FateTable log.debug("Gathered {} rows to create copy {}", mutations.size(), copy); assertEquals(9, mutations.size(), - "Metadata should have 8 rows (2 for each table) + one row for " + FateTable.ID.canonical()); + "Metadata should have 8 rows (2 for each table) + one row for " + + AccumuloTable.FATE.tableId().canonical()); client.tableOperations().create(copy); try (BatchWriter writer = client.createBatchWriter(copy)) { diff --git a/test/src/main/java/org/apache/accumulo/test/functional/WALSunnyDayIT.java b/test/src/main/java/org/apache/accumulo/test/functional/WALSunnyDayIT.java index 62870a27ab3..d9317c5c54e 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/WALSunnyDayIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/WALSunnyDayIT.java @@ -50,7 +50,6 @@ 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.FateTable; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.LogColumnFamily; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.TabletColumnFamily; @@ -123,7 +122,7 @@ public void test() throws Exception { // flush the tables for (String table : new String[] {tableName, AccumuloTable.METADATA.tableName(), - AccumuloTable.ROOT.tableName(), FateTable.NAME}) { + AccumuloTable.ROOT.tableName(), AccumuloTable.FATE.tableName()}) { c.tableOperations().flush(table, null, null, true); } Thread.sleep(SECONDS.toMillis(1)); @@ -155,7 +154,8 @@ public void test() throws Exception { markers.keySet().stream().anyMatch(extent -> extent.tableId().canonical().equals("1")), "tableId of the keyExtent should be 1"); assertTrue( - markers.keySet().stream().anyMatch(extent -> extent.tableId().equals(FateTable.ID)), + markers.keySet().stream() + .anyMatch(extent -> extent.tableId().equals(AccumuloTable.FATE.tableId())), "tableId of the FateTable can't be found"); // put some data in the WAL