[accumulo] branch master updated (0acb7f8 -> 503e030)
This is an automated email from the ASF dual-hosted git repository. kturner pushed a change to branch master in repository https://gitbox.apache.org/repos/asf/accumulo.git. from 0acb7f8 fix #936 store root tablet file list in Zookeeper (#1313) add fa1d893 fix #1309 prevent cloning accumulo.metadata (#1311) add 54b2c32 Examine WALs used by root tablet during GC (#1310) add c573676 Merge branch '1.9' into 2.0 new 503e030 Merge branch '2.0' The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../accumulo/gc/GarbageCollectWriteAheadLogs.java | 5 +++-- .../apache/accumulo/master/FateServiceHandler.java | 3 ++- .../accumulo/master/util/TableValidators.java | 22 ++ .../accumulo/test/functional/CloneTestIT.java | 16 4 files changed, 43 insertions(+), 3 deletions(-)
[accumulo] 01/01: Merge branch '2.0'
This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/accumulo.git commit 503e0301b32b4c390c07dffd6581dfff4bd41eb3 Merge: 0acb7f8 c573676 Author: Keith Turner AuthorDate: Wed Aug 14 17:18:22 2019 -0400 Merge branch '2.0' .../accumulo/gc/GarbageCollectWriteAheadLogs.java | 5 +++-- .../apache/accumulo/master/FateServiceHandler.java | 3 ++- .../accumulo/master/util/TableValidators.java | 22 ++ .../accumulo/test/functional/CloneTestIT.java | 16 4 files changed, 43 insertions(+), 3 deletions(-) diff --cc server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java index 5bb8201,289e69d..5637a8d --- a/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java +++ b/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java @@@ -94,8 -95,8 +95,8 @@@ public class GarbageCollectWriteAheadLo }); liveServers.startListeningForTabletServerChanges(); this.walMarker = new WalStateManager(context); - this.store = () -> Iterators.concat(new RootTabletStateStore(context).iterator(), - new MetaDataStateStore(context).iterator()); -this.store = () -> Iterators.concat(new ZooTabletStateStore(context).iterator(), ++this.store = () -> Iterators.concat(new ZooTabletStateStore(context.getAmple()).iterator(), + new RootTabletStateStore(context).iterator(), new MetaDataStateStore(context).iterator()); } /**
[accumulo] 01/01: Merge branch '1.9' into 2.0
This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch 2.0 in repository https://gitbox.apache.org/repos/asf/accumulo.git commit c5736768d8ff3cb8799b5e254d7df36f1850a648 Merge: 5c58b08 54b2c32 Author: Keith Turner AuthorDate: Wed Aug 14 16:55:06 2019 -0400 Merge branch '1.9' into 2.0 .../accumulo/gc/GarbageCollectWriteAheadLogs.java | 5 +++-- .../apache/accumulo/master/FateServiceHandler.java | 3 ++- .../accumulo/master/util/TableValidators.java | 22 ++ .../accumulo/test/functional/CloneTestIT.java | 16 4 files changed, 43 insertions(+), 3 deletions(-) diff --cc server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java index 5bb8201,23c4932..289e69d --- a/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java +++ b/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java @@@ -53,6 -60,8 +53,7 @@@ import org.apache.accumulo.server.maste import org.apache.accumulo.server.master.state.TServerInstance; import org.apache.accumulo.server.master.state.TabletLocationState; import org.apache.accumulo.server.master.state.TabletState; + import org.apache.accumulo.server.master.state.ZooTabletStateStore; -import org.apache.accumulo.server.zookeeper.ZooReaderWriter; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Text; @@@ -88,14 -97,28 +89,14 @@@ public class GarbageCollectWriteAheadLo this.context = context; this.fs = fs; this.useTrash = useTrash; -this.liveServers = new LiveTServerSet(context, new Listener() { - @Override - public void update(LiveTServerSet current, Set deleted, - Set added) { -log.debug("New tablet servers noticed: " + added); -log.debug("Tablet servers removed: " + deleted); - } +this.liveServers = new LiveTServerSet(context, (current, deleted, added) -> { + log.debug("New tablet servers noticed: {}", added); + log.debug("Tablet servers removed: {}", deleted); }); liveServers.startListeningForTabletServerChanges(); -this.walMarker = new WalStateManager(context.getInstance(), ZooReaderWriter.getInstance()); -this.store = new Iterable() { - @Override - public Iterator iterator() { -try { - return Iterators.concat(new ZooTabletStateStore().iterator(), - new RootTabletStateStore(context).iterator(), - new MetaDataStateStore(context).iterator()); -} catch (DistributedStoreException e) { - throw new RuntimeException(e); -} - } -}; +this.walMarker = new WalStateManager(context); - this.store = () -> Iterators.concat(new RootTabletStateStore(context).iterator(), - new MetaDataStateStore(context).iterator()); ++this.store = () -> Iterators.concat(new ZooTabletStateStore(context).iterator(), ++new RootTabletStateStore(context).iterator(), new MetaDataStateStore(context).iterator()); } /** diff --cc server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java index c19ee7b,7949ac2..0cf7c14 --- a/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java +++ b/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java @@@ -250,12 -225,12 +251,12 @@@ class FateServiceHandler implements Fat case TABLE_CLONE: { TableOperation tableOp = TableOperation.CLONE; validateArgumentCount(arguments, tableOp, 2); - TableId srcTableId = validateTableIdArgument(arguments.get(0), tableOp, NOT_ROOT_ID); -String srcTableId = validateTableIdArgument(arguments.get(0), tableOp, CAN_CLONE); ++TableId srcTableId = validateTableIdArgument(arguments.get(0), tableOp, CAN_CLONE); String tableName = validateTableNameArgument(arguments.get(1), tableOp, NOT_SYSTEM); -String namespaceId; +NamespaceId namespaceId; try { namespaceId = - Namespaces.getNamespaceId(master.getInstance(), Tables.qualify(tableName).getFirst()); + Namespaces.getNamespaceId(master.getContext(), Tables.qualify(tableName).getFirst()); } catch (NamespaceNotFoundException e) { // shouldn't happen, but possible once cloning between namespaces is supported throw new ThriftTableOperationException(null, tableName, tableOp, diff --cc server/master/src/main/java/org/apache/accumulo/master/util/TableValidators.java index ddbce98,a9d3edb..4d44765 --- a/server/master/src/main/java/org/apache/accumulo/master/util/TableValidators.java +++ b/server/master/src/main/java/org/apache/accumulo/master/util/TableValidators.java @@@ -80,6 -79,28 +80,28 @@@ public class TableValidators } }; - public static final Validator CAN_CLONE = new
[accumulo] branch 2.0 updated (5c58b08 -> c573676)
This is an automated email from the ASF dual-hosted git repository. kturner pushed a change to branch 2.0 in repository https://gitbox.apache.org/repos/asf/accumulo.git. from 5c58b08 Update javadoc:aggregate config to match public API add fa1d893 fix #1309 prevent cloning accumulo.metadata (#1311) add 54b2c32 Examine WALs used by root tablet during GC (#1310) new c573676 Merge branch '1.9' into 2.0 The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: .../accumulo/gc/GarbageCollectWriteAheadLogs.java | 5 +++-- .../apache/accumulo/master/FateServiceHandler.java | 3 ++- .../accumulo/master/util/TableValidators.java | 22 ++ .../accumulo/test/functional/CloneTestIT.java | 16 4 files changed, 43 insertions(+), 3 deletions(-)
[accumulo] branch 1.9 updated: Examine WALs used by root tablet during GC (#1310)
This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch 1.9 in repository https://gitbox.apache.org/repos/asf/accumulo.git The following commit(s) were added to refs/heads/1.9 by this push: new 54b2c32 Examine WALs used by root tablet during GC (#1310) 54b2c32 is described below commit 54b2c327d02b9ea30785ba2ae9f5be59264a9713 Author: Keith Turner AuthorDate: Wed Aug 14 16:07:07 2019 -0400 Examine WALs used by root tablet during GC (#1310) --- .../org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java | 11 +-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java b/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java index 405a7a0..23c4932 100644 --- a/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java +++ b/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java @@ -54,11 +54,13 @@ import org.apache.accumulo.server.log.WalStateManager.WalMarkerException; import org.apache.accumulo.server.log.WalStateManager.WalState; import org.apache.accumulo.server.master.LiveTServerSet; import org.apache.accumulo.server.master.LiveTServerSet.Listener; +import org.apache.accumulo.server.master.state.DistributedStoreException; import org.apache.accumulo.server.master.state.MetaDataStateStore; import org.apache.accumulo.server.master.state.RootTabletStateStore; import org.apache.accumulo.server.master.state.TServerInstance; import org.apache.accumulo.server.master.state.TabletLocationState; import org.apache.accumulo.server.master.state.TabletState; +import org.apache.accumulo.server.master.state.ZooTabletStateStore; import org.apache.accumulo.server.zookeeper.ZooReaderWriter; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.Path; @@ -108,8 +110,13 @@ public class GarbageCollectWriteAheadLogs { this.store = new Iterable() { @Override public Iterator iterator() { -return Iterators.concat(new RootTabletStateStore(context).iterator(), -new MetaDataStateStore(context).iterator()); +try { + return Iterators.concat(new ZooTabletStateStore().iterator(), + new RootTabletStateStore(context).iterator(), + new MetaDataStateStore(context).iterator()); +} catch (DistributedStoreException e) { + throw new RuntimeException(e); +} } }; }
[accumulo] branch 1.9 updated: fix #1309 prevent cloning accumulo.metadata (#1311)
This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch 1.9 in repository https://gitbox.apache.org/repos/asf/accumulo.git The following commit(s) were added to refs/heads/1.9 by this push: new fa1d893 fix #1309 prevent cloning accumulo.metadata (#1311) fa1d893 is described below commit fa1d893f26f1f5e7974e02fc5757c5e2ff0a29df Author: Keith Turner AuthorDate: Wed Aug 14 16:06:26 2019 -0400 fix #1309 prevent cloning accumulo.metadata (#1311) --- .../apache/accumulo/master/FateServiceHandler.java | 3 ++- .../accumulo/master/util/TableValidators.java | 22 ++ .../accumulo/test/functional/CloneTestIT.java | 13 + 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java b/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java index c9b20cf..7949ac2 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java +++ b/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java @@ -16,6 +16,7 @@ */ package org.apache.accumulo.master; +import static org.apache.accumulo.master.util.TableValidators.CAN_CLONE; import static org.apache.accumulo.master.util.TableValidators.NOT_METADATA; import static org.apache.accumulo.master.util.TableValidators.NOT_ROOT_ID; import static org.apache.accumulo.master.util.TableValidators.NOT_SYSTEM; @@ -224,7 +225,7 @@ class FateServiceHandler implements FateService.Iface { case TABLE_CLONE: { TableOperation tableOp = TableOperation.CLONE; validateArgumentCount(arguments, tableOp, 2); -String srcTableId = validateTableIdArgument(arguments.get(0), tableOp, NOT_ROOT_ID); +String srcTableId = validateTableIdArgument(arguments.get(0), tableOp, CAN_CLONE); String tableName = validateTableNameArgument(arguments.get(1), tableOp, NOT_SYSTEM); String namespaceId; try { diff --git a/server/master/src/main/java/org/apache/accumulo/master/util/TableValidators.java b/server/master/src/main/java/org/apache/accumulo/master/util/TableValidators.java index c6ef8c5..a9d3edb 100644 --- a/server/master/src/main/java/org/apache/accumulo/master/util/TableValidators.java +++ b/server/master/src/main/java/org/apache/accumulo/master/util/TableValidators.java @@ -79,6 +79,28 @@ public class TableValidators { } }; + public static final Validator CAN_CLONE = new Validator() { + +private List metaIDs = Arrays.asList(RootTable.ID, MetadataTable.ID); + +@Override +public boolean apply(String tableId) { + return !metaIDs.contains(tableId); +} + +@Override +public String invalidMessage(String tableId) { + String msg; + if (tableId.equals(MetadataTable.ID)) { +msg = " Cloning " + MetadataTable.NAME ++ " is dangerous and no longer supported, see https://github.com/apache/accumulo/issues/1309.;; + } else { +msg = "Can not clone " + RootTable.NAME; + } + return msg; +} + }; + public static final Validator NOT_SYSTEM = new Validator() { @Override diff --git a/test/src/main/java/org/apache/accumulo/test/functional/CloneTestIT.java b/test/src/main/java/org/apache/accumulo/test/functional/CloneTestIT.java index 74c6885..d76a28a 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/CloneTestIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/CloneTestIT.java @@ -33,6 +33,7 @@ import java.util.Set; import java.util.TreeSet; import org.apache.accumulo.cluster.AccumuloCluster; +import org.apache.accumulo.core.client.AccumuloException; import org.apache.accumulo.core.client.BatchWriter; import org.apache.accumulo.core.client.BatchWriterConfig; import org.apache.accumulo.core.client.Connector; @@ -46,6 +47,7 @@ import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.metadata.MetadataTable; +import org.apache.accumulo.core.metadata.RootTable; import org.apache.accumulo.core.metadata.schema.MetadataSchema; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.harness.AccumuloClusterHarness; @@ -301,4 +303,15 @@ public class CloneTestIT extends AccumuloClusterHarness { assertEquals(rows, actualRows); } + @Test(expected = AccumuloException.class) + public void testCloneRootTable() throws Exception { +Connector conn = getConnector(); +conn.tableOperations().clone(RootTable.NAME, "rc1", true, null, null); + } + + @Test(expected = AccumuloException.class) + public void testCloneMetadataTable() throws Exception { +Connector conn = getConnector(); +conn.tableOperations().clone(MetadataTable.NAME, "mc1", true, null, null); + } }
[accumulo] branch master updated: fix #936 store root tablet file list in Zookeeper (#1313)
This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/accumulo.git The following commit(s) were added to refs/heads/master by this push: new 0acb7f8 fix #936 store root tablet file list in Zookeeper (#1313) 0acb7f8 is described below commit 0acb7f898460c482612678db9585ba1a4fa8389c Author: Keith Turner AuthorDate: Wed Aug 14 15:18:04 2019 -0400 fix #936 store root tablet file list in Zookeeper (#1313) --- .../apache/accumulo/core/metadata/RootTable.java | 5 + .../accumulo/core/metadata/schema/Ample.java | 34 - .../core/metadata/schema/RootTabletMetadata.java | 13 +- .../core/metadata/schema/TabletsMetadata.java | 39 +++--- server/base/pom.xml| 4 + .../org/apache/accumulo/server/fs/VolumeUtil.java | 81 ++-- .../apache/accumulo/server/init/Initialize.java| 20 ++- .../accumulo/server/metadata/RootGcCandidates.java | 117 + .../accumulo/server/metadata/ServerAmpleImpl.java | 99 ++- .../accumulo/server/util/MasterMetadataUtil.java | 29 - .../accumulo/server/util/MetadataTableUtil.java| 50 ++-- .../apache/accumulo/gc/SimpleGarbageCollector.java | 95 ++ .../accumulo/master/upgrade/Upgrader9to10.java | 132 +++ .../master/state/RootTabletStateStoreTest.java | 3 +- .../master/upgrade/RootFilesUpgradeTest.java} | 48 +-- .../org/apache/accumulo/tserver/TabletServer.java | 7 +- .../accumulo/tserver/tablet/DatafileManager.java | 76 +++ .../apache/accumulo/tserver/tablet/RootFiles.java | 139 - .../org/apache/accumulo/tserver/tablet/Tablet.java | 32 + .../apache/accumulo/tserver/tablet/TabletData.java | 53 20 files changed, 555 insertions(+), 521 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java b/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java index 4e08c46..d943f17 100644 --- a/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java +++ b/core/src/main/java/org/apache/accumulo/core/metadata/RootTable.java @@ -37,6 +37,11 @@ public class RootTable { */ public static final String ZROOT_TABLET = ROOT_TABLET_LOCATION; + /** + * ZK path relative to the zookeeper node where the root tablet gc candidates are stored. + */ + public static final String ZROOT_TABLET_GC_CANDIDATES = ZROOT_TABLET + "/gc_candidates"; + public static final KeyExtent EXTENT = new KeyExtent(ID, null, null); public static final KeyExtent OLD_EXTENT = new KeyExtent(MetadataTable.ID, TabletsSection.getRow(MetadataTable.ID, null), null); 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 88fefa1..9b8a692 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 @@ -18,9 +18,12 @@ package org.apache.accumulo.core.metadata.schema; import java.util.Collection; +import java.util.Iterator; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.dataImpl.KeyExtent; +import org.apache.accumulo.core.metadata.MetadataTable; +import org.apache.accumulo.core.metadata.RootTable; import org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType; import org.apache.accumulo.core.metadata.schema.TabletMetadata.LocationType; import org.apache.accumulo.core.tabletserver.log.LogEntry; @@ -56,6 +59,31 @@ import org.apache.hadoop.io.Text; public interface Ample { /** + * Accumulo is a distributed tree with three levels. This enum is used to communicate to Ample + * that code is interested in operating on the metadata of a data level. Sometimes tables ids or + * key extents are passed to Ample in lieu of a data level, in these cases the data level is + * derived from the table id. + */ + public enum DataLevel { +ROOT(null), METADATA(RootTable.NAME), USER(MetadataTable.NAME); + +private final String table; + +private DataLevel(String table) { + this.table = table; +} + +/** + * @return The name of the Accumulo table in which this data level stores its metadata. + */ +public String metaTable() { + if (table == null) +throw new UnsupportedOperationException(); + return table; +} + } + + /** * Read a single tablets metadata. No checking is done for prev row, so it could differ. * * @param extent @@ -90,7 +118,11 @@ public interface Ample { throw new UnsupportedOperationException(); } - default void deleteGcCandidates(TableId tableId, Collection paths) { + default void deleteGcCandidates(DataLevel level, Collection paths) { +throw new