[accumulo] 01/01: Merge branch 'main' into elasticity
This is an automated email from the ASF dual-hosted git repository. dlmarion pushed a commit to branch elasticity in repository https://gitbox.apache.org/repos/asf/accumulo.git commit 406552e46df4412cf8f4f52962446773a9eabee5 Merge: 32f5b4cc69 d4846d407e Author: Dave Marion AuthorDate: Mon Jul 10 17:12:36 2023 + Merge branch 'main' into elasticity .../hadoopImpl/mapred/AccumuloRecordWriter.java| 2 +- .../hadoopImpl/mapreduce/AccumuloRecordWriter.java | 2 +- .../manager/state/LoggingTabletStateStore.java | 6 + .../server/manager/state/MetaDataStateStore.java | 15 +- .../server/manager/state/RootTabletStateStore.java | 5 +- .../server/manager/state/TabletStateStore.java | 11 +- .../server/manager/state/ZooTabletStateStore.java | 10 +- .../manager/state/ZooTabletStateStoreTest.java | 3 +- .../accumulo/manager/TabletGroupWatcher.java | 47 ++- .../apache/accumulo/manager/state/TableCounts.java | 9 ++ .../apache/accumulo/manager/state/TableStats.java | 6 + .../manager/tserverOps/ShutdownTServer.java| 3 + .../org/apache/accumulo/tserver/TabletServer.java | 1 + .../accumulo/tserver/UnloadTabletHandler.java | 1 + .../accumulo/tserver/session/ScanSession.java | 4 + .../apache/accumulo/tserver/session/Session.java | 6 + .../accumulo/tserver/session/SessionManager.java | 83 ++- .../org/apache/accumulo/tserver/tablet/Tablet.java | 14 +- .../test/functional/ManagerAssignmentIT.java | 153 + test/src/main/resources/log4j2-test.properties | 3 + 20 files changed, 335 insertions(+), 49 deletions(-) diff --cc server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java index 0189b9294a,acfb363d2b..9f45e36228 --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java @@@ -24,9 -24,9 +24,10 @@@ import java.util.Map import java.util.concurrent.TimeUnit; import org.apache.accumulo.core.logging.TabletLogger; +import org.apache.accumulo.core.manager.state.TabletManagement; import org.apache.accumulo.core.metadata.TServerInstance; -import org.apache.accumulo.core.metadata.TabletLocationState; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; +import org.apache.accumulo.core.metadata.schema.TabletMetadata; import org.apache.hadoop.fs.Path; import com.google.common.net.HostAndPort; diff --cc server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java index 9874928885,8c7bc888eb..dedffefd14 --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java @@@ -19,24 -19,33 +19,28 @@@ package org.apache.accumulo.server.manager.state; import java.util.Collection; -import java.util.List; -import java.util.Map; import org.apache.accumulo.core.clientImpl.ClientContext; +import org.apache.accumulo.core.manager.state.TabletManagement; import org.apache.accumulo.core.metadata.MetadataTable; -import org.apache.accumulo.core.metadata.TServerInstance; -import org.apache.accumulo.core.metadata.TabletLocationState; 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.Ample.DataLevel; -import org.apache.accumulo.core.metadata.schema.Ample.TabletMutator; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; -import org.apache.accumulo.core.metadata.schema.TabletMetadata.Location; -import org.apache.accumulo.core.tabletserver.log.LogEntry; -import org.apache.accumulo.server.util.ManagerMetadataUtil; -import org.apache.hadoop.fs.Path; +import org.apache.accumulo.core.metadata.schema.TabletMetadata; -class MetaDataStateStore implements TabletStateStore { +class MetaDataStateStore extends AbstractTabletStateStore implements TabletStateStore { protected final ClientContext context; protected final CurrentState state; private final String targetTableName; private final Ample ample; + private final DataLevel level; - protected MetaDataStateStore(ClientContext context, CurrentState state, String targetTableName) { + protected MetaDataStateStore(DataLevel level, ClientContext context, CurrentState state, + String targetTableName) { +super(context); + this.level = level; this.context = context; this.state = state; this.ample = context.getAmple(); diff --cc server/base/src/main/java/org/apache/accumulo/server/manager/state/RootTabletStateStore.java index e88acb1946,98123e1c2f..034940fb0b ---
[accumulo] branch elasticity updated (32f5b4cc69 -> 406552e46d)
This is an automated email from the ASF dual-hosted git repository. dlmarion pushed a change to branch elasticity in repository https://gitbox.apache.org/repos/asf/accumulo.git from 32f5b4cc69 Merge branch 'main' into elasticity add de02f025ce ensures sessions are always cleaned up (#3569) add 767d28d99a avoids calling toString on Text for isEmpty (#3572) add 20cecbe8b9 logs info when a tablet consistency check goes from bad to good (#3574) add 9bbf42f4dc Fix TabletGroupWatcher shutdown order (#3571) add d4846d407e Merge branch '2.1' new 406552e46d Merge branch 'main' into elasticity 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: .../hadoopImpl/mapred/AccumuloRecordWriter.java| 2 +- .../hadoopImpl/mapreduce/AccumuloRecordWriter.java | 2 +- .../manager/state/LoggingTabletStateStore.java | 6 + .../server/manager/state/MetaDataStateStore.java | 15 +- .../server/manager/state/RootTabletStateStore.java | 5 +- .../server/manager/state/TabletStateStore.java | 11 +- .../server/manager/state/ZooTabletStateStore.java | 10 +- .../manager/state/ZooTabletStateStoreTest.java | 3 +- .../accumulo/manager/TabletGroupWatcher.java | 47 ++- .../apache/accumulo/manager/state/TableCounts.java | 9 ++ .../apache/accumulo/manager/state/TableStats.java | 6 + .../manager/tserverOps/ShutdownTServer.java| 3 + .../org/apache/accumulo/tserver/TabletServer.java | 1 + .../accumulo/tserver/UnloadTabletHandler.java | 1 + .../accumulo/tserver/session/ScanSession.java | 4 + .../apache/accumulo/tserver/session/Session.java | 6 + .../accumulo/tserver/session/SessionManager.java | 83 ++- .../org/apache/accumulo/tserver/tablet/Tablet.java | 14 +- .../test/functional/ManagerAssignmentIT.java | 153 + test/src/main/resources/log4j2-test.properties | 3 + 20 files changed, 335 insertions(+), 49 deletions(-)
[accumulo] branch main updated (ffe0018b51 -> d4846d407e)
This is an automated email from the ASF dual-hosted git repository. dlmarion pushed a change to branch main in repository https://gitbox.apache.org/repos/asf/accumulo.git from ffe0018b51 fix Wait.waitFor usage errors after merge update add de02f025ce ensures sessions are always cleaned up (#3569) add 767d28d99a avoids calling toString on Text for isEmpty (#3572) add 20cecbe8b9 logs info when a tablet consistency check goes from bad to good (#3574) add 9bbf42f4dc Fix TabletGroupWatcher shutdown order (#3571) new d4846d407e Merge branch '2.1' 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: .../hadoopImpl/mapred/AccumuloRecordWriter.java| 2 +- .../hadoopImpl/mapreduce/AccumuloRecordWriter.java | 2 +- .../manager/state/LoggingTabletStateStore.java | 6 + .../server/manager/state/MetaDataStateStore.java | 15 +- .../server/manager/state/RootTabletStateStore.java | 5 +- .../server/manager/state/TabletStateStore.java | 11 +- .../server/manager/state/ZooTabletStateStore.java | 10 +- .../manager/state/RootTabletStateStoreTest.java| 3 +- .../accumulo/manager/TabletGroupWatcher.java | 49 +- .../apache/accumulo/manager/state/TableCounts.java | 9 ++ .../apache/accumulo/manager/state/TableStats.java | 6 + .../manager/tserverOps/ShutdownTServer.java| 3 + .../org/apache/accumulo/tserver/TabletServer.java | 1 + .../accumulo/tserver/UnloadTabletHandler.java | 1 + .../accumulo/tserver/session/ScanSession.java | 4 + .../apache/accumulo/tserver/session/Session.java | 6 + .../accumulo/tserver/session/SessionManager.java | 83 ++ .../org/apache/accumulo/tserver/tablet/Tablet.java | 14 +- .../test/functional/ManagerAssignmentIT.java | 167 + test/src/main/resources/log4j2-test.properties | 3 + 20 files changed, 351 insertions(+), 49 deletions(-)
[accumulo] 01/01: Merge branch '2.1'
This is an automated email from the ASF dual-hosted git repository. dlmarion pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/accumulo.git commit d4846d407e5b28482394e2c0baa16932ae35e086 Merge: ffe0018b51 9bbf42f4dc Author: Dave Marion AuthorDate: Mon Jul 10 16:13:51 2023 + Merge branch '2.1' .../hadoopImpl/mapred/AccumuloRecordWriter.java| 2 +- .../hadoopImpl/mapreduce/AccumuloRecordWriter.java | 2 +- .../manager/state/LoggingTabletStateStore.java | 6 + .../server/manager/state/MetaDataStateStore.java | 15 +- .../server/manager/state/RootTabletStateStore.java | 5 +- .../server/manager/state/TabletStateStore.java | 11 +- .../server/manager/state/ZooTabletStateStore.java | 10 +- .../manager/state/RootTabletStateStoreTest.java| 3 +- .../accumulo/manager/TabletGroupWatcher.java | 49 +- .../apache/accumulo/manager/state/TableCounts.java | 9 ++ .../apache/accumulo/manager/state/TableStats.java | 6 + .../manager/tserverOps/ShutdownTServer.java| 3 + .../org/apache/accumulo/tserver/TabletServer.java | 1 + .../accumulo/tserver/UnloadTabletHandler.java | 1 + .../accumulo/tserver/session/ScanSession.java | 4 + .../apache/accumulo/tserver/session/Session.java | 6 + .../accumulo/tserver/session/SessionManager.java | 83 ++ .../org/apache/accumulo/tserver/tablet/Tablet.java | 14 +- .../test/functional/ManagerAssignmentIT.java | 167 + test/src/main/resources/log4j2-test.properties | 3 + 20 files changed, 351 insertions(+), 49 deletions(-) diff --cc server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java index b5b16e61d4,84c62254ca..acfb363d2b --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java @@@ -26,10 -26,10 +26,11 @@@ import java.util.concurrent.TimeUnit import org.apache.accumulo.core.logging.TabletLogger; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.TabletLocationState; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; -import org.apache.accumulo.core.util.HostAndPort; import org.apache.hadoop.fs.Path; +import com.google.common.net.HostAndPort; + /** * Wraps a tablet state store and logs important events. */ diff --cc server/base/src/main/java/org/apache/accumulo/server/manager/state/ZooTabletStateStore.java index 6b31568c9e,398e67c112..a2b28e1d71 --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/ZooTabletStateStore.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/ZooTabletStateStore.java @@@ -28,8 -28,8 +28,9 @@@ import org.apache.accumulo.core.clientI import org.apache.accumulo.core.metadata.RootTable; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.TabletLocationState; +import org.apache.accumulo.core.metadata.TabletLocationState.BadLocationStateException; import org.apache.accumulo.core.metadata.schema.Ample; + import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.Ample.ReadConsistency; import org.apache.accumulo.core.metadata.schema.Ample.TabletMutator; import org.apache.accumulo.core.metadata.schema.TabletMetadata; diff --cc server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java index 7f32b7bfda,f0f8a5de2a..75f1c5f99b --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java @@@ -18,8 -18,11 +18,11 @@@ */ package org.apache.accumulo.tserver.session; + import static java.util.concurrent.TimeUnit.MILLISECONDS; + import static java.util.concurrent.TimeUnit.MINUTES; + import static java.util.concurrent.TimeUnit.SECONDS; +import static org.apache.accumulo.core.util.LazySingletons.RANDOM; -import java.security.SecureRandom; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@@ -39,10 -45,11 +45,11 @@@ import org.apache.accumulo.core.conf.Pr import org.apache.accumulo.core.data.Column; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.dataImpl.thrift.MultiScanResult; -import org.apache.accumulo.core.tabletserver.thrift.ActiveScan; -import org.apache.accumulo.core.tabletserver.thrift.ScanState; -import org.apache.accumulo.core.tabletserver.thrift.ScanType; +import org.apache.accumulo.core.tabletscan.thrift.ActiveScan; +import org.apache.accumulo.core.tabletscan.thrift.ScanState; +import org.apache.accumulo.core.tabletscan.thrift.ScanType; import org.apache.accumulo.core.util.MapCounter; + import
[accumulo] branch 2.1 updated: Fix TabletGroupWatcher shutdown order (#3571)
This is an automated email from the ASF dual-hosted git repository. dlmarion pushed a commit to branch 2.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git The following commit(s) were added to refs/heads/2.1 by this push: new 9bbf42f4dc Fix TabletGroupWatcher shutdown order (#3571) 9bbf42f4dc is described below commit 9bbf42f4dc3ebcf21d70c837f577c60708d3d2de Author: Dave Marion AuthorDate: Mon Jul 10 11:40:12 2023 -0400 Fix TabletGroupWatcher shutdown order (#3571) Modified TabletGroupWatcher such that when shutting down all TabletServers it unloads user tables before the metadata table and the metadata table before the root table. --- .../manager/state/LoggingTabletStateStore.java | 6 + .../server/manager/state/MetaDataStateStore.java | 15 +- .../server/manager/state/RootTabletStateStore.java | 5 +- .../server/manager/state/TabletStateStore.java | 11 +- .../server/manager/state/ZooTabletStateStore.java | 10 +- .../manager/state/RootTabletStateStoreTest.java| 3 +- .../accumulo/manager/TabletGroupWatcher.java | 49 +- .../apache/accumulo/manager/state/TableCounts.java | 9 ++ .../apache/accumulo/manager/state/TableStats.java | 6 + .../manager/tserverOps/ShutdownTServer.java| 3 + .../org/apache/accumulo/tserver/TabletServer.java | 1 + .../accumulo/tserver/UnloadTabletHandler.java | 1 + .../org/apache/accumulo/tserver/tablet/Tablet.java | 1 + .../test/functional/ManagerAssignmentIT.java | 166 + test/src/main/resources/log4j2-test.properties | 3 + 15 files changed, 276 insertions(+), 13 deletions(-) diff --git a/server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java b/server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java index 6ef48fdc07..84c62254ca 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/LoggingTabletStateStore.java @@ -26,6 +26,7 @@ import java.util.concurrent.TimeUnit; import org.apache.accumulo.core.logging.TabletLogger; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.TabletLocationState; +import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.util.HostAndPort; import org.apache.hadoop.fs.Path; @@ -40,6 +41,11 @@ class LoggingTabletStateStore implements TabletStateStore { this.wrapped = tss; } + @Override + public DataLevel getLevel() { +return wrapped.getLevel(); + } + @Override public String name() { return wrapped.name(); diff --git a/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java b/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java index bb27b32cda..8c7bc888eb 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java +++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/MetaDataStateStore.java @@ -27,6 +27,7 @@ import org.apache.accumulo.core.metadata.MetadataTable; import org.apache.accumulo.core.metadata.TServerInstance; import org.apache.accumulo.core.metadata.TabletLocationState; import org.apache.accumulo.core.metadata.schema.Ample; +import org.apache.accumulo.core.metadata.schema.Ample.DataLevel; import org.apache.accumulo.core.metadata.schema.Ample.TabletMutator; import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection; import org.apache.accumulo.core.metadata.schema.TabletMetadata.Location; @@ -40,16 +41,24 @@ class MetaDataStateStore implements TabletStateStore { protected final CurrentState state; private final String targetTableName; private final Ample ample; + private final DataLevel level; - protected MetaDataStateStore(ClientContext context, CurrentState state, String targetTableName) { + protected MetaDataStateStore(DataLevel level, ClientContext context, CurrentState state, + String targetTableName) { +this.level = level; this.context = context; this.state = state; this.ample = context.getAmple(); this.targetTableName = targetTableName; } - MetaDataStateStore(ClientContext context, CurrentState state) { -this(context, state, MetadataTable.NAME); + MetaDataStateStore(DataLevel level, ClientContext context, CurrentState state) { +this(level, context, state, MetadataTable.NAME); + } + + @Override + public DataLevel getLevel() { +return level; } @Override diff --git a/server/base/src/main/java/org/apache/accumulo/server/manager/state/RootTabletStateStore.java b/server/base/src/main/java/org/apache/accumulo/server/manager/state/RootTabletStateStore.java index 9acd1cc48a..98123e1c2f 100644 ---
[accumulo] branch 2.1 updated: logs info when a tablet consistency check goes from bad to good (#3574)
This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch 2.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git The following commit(s) were added to refs/heads/2.1 by this push: new 20cecbe8b9 logs info when a tablet consistency check goes from bad to good (#3574) 20cecbe8b9 is described below commit 20cecbe8b9c8b55d17f341dfd64f5b42f7f79705 Author: Keith Turner AuthorDate: Mon Jul 10 11:29:05 2023 -0400 logs info when a tablet consistency check goes from bad to good (#3574) When the tablet server does a periodic consistency check on a tablet it logs an error when there is a mismatch. Later if there is no longer a mismatch, then this commit changes the code to log an info. related to #3537 but does not fix that issue --- .../java/org/apache/accumulo/tserver/tablet/Tablet.java | 13 +++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java index 489dbd0700..1b818d8759 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java @@ -1114,6 +1114,8 @@ public class Tablet extends TabletBase { } } + private boolean loggedErrorForTabletComparison = false; + /** * Checks that tablet metadata from the metadata table matches what this tablet has in memory. The * caller of this method must acquire the updateCounter parameter before acquiring the @@ -1162,10 +1164,17 @@ public class Tablet extends TabletBase { } else { log.error("Data files in {} differ from in-memory data {} {} {} {}", extent, tabletMetadata.getFilesMap(), dataFileSizes, updateCounter, latestCount); +loggedErrorForTabletComparison = true; } } else { - log.trace("AMCC Tablet {} files in memory are same as in metadata table {}", - tabletMetadata.getExtent(), updateCounter); + if (loggedErrorForTabletComparison) { +log.info("AMCC Tablet {} files in memory are now same as in metadata table {}", +tabletMetadata.getExtent(), updateCounter); +loggedErrorForTabletComparison = false; + } else { +log.trace("AMCC Tablet {} files in memory are same as in metadata table {}", +tabletMetadata.getExtent(), updateCounter); + } } }
[accumulo] branch 2.1 updated: avoids calling toString on Text for isEmpty (#3572)
This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch 2.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git The following commit(s) were added to refs/heads/2.1 by this push: new 767d28d99a avoids calling toString on Text for isEmpty (#3572) 767d28d99a is described below commit 767d28d99aee1d460d05f82065346c5451a68b0c Author: Keith Turner AuthorDate: Mon Jul 10 11:28:36 2023 -0400 avoids calling toString on Text for isEmpty (#3572) In profiling of an Accumulo map reduce job it was noticed that a good bit of time was spent calling toString on a Text object to check if it was empty. This commit avoids the toString() call and instead checks the text length. --- .../org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java| 2 +- .../org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java | 2 +- .../org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java | 2 +- .../org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java b/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java index 10d517c361..6dbecaee6b 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java +++ b/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java @@ -425,7 +425,7 @@ public class AccumuloOutputFormat implements OutputFormat { */ @Override public void write(Text table, Mutation mutation) throws IOException { - if (table == null || table.toString().isEmpty()) { + if (table == null || table.getLength() == 0) { table = this.defaultTableName; } diff --git a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java index 3c2193b3d3..c39c1013c1 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java +++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java @@ -426,7 +426,7 @@ public class AccumuloOutputFormat extends OutputFormat { */ @Override public void write(Text table, Mutation mutation) throws IOException { - if (table == null || table.toString().isEmpty()) { + if (table == null || table.getLength() == 0) { table = this.defaultTableName; } diff --git a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java index ac012a1cf0..a29caf9c7f 100644 --- a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java +++ b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapred/AccumuloRecordWriter.java @@ -89,7 +89,7 @@ public class AccumuloRecordWriter implements RecordWriter { */ @Override public void write(Text table, Mutation mutation) throws IOException { -if (table == null || table.toString().isEmpty()) { +if (table == null || table.getLength() == 0) { table = this.defaultTableName; } diff --git a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java index 1399d8d0b7..fb21102ff2 100644 --- a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java +++ b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/AccumuloRecordWriter.java @@ -90,7 +90,7 @@ public class AccumuloRecordWriter extends RecordWriter { */ @Override public void write(Text table, Mutation mutation) throws IOException { -if (table == null || table.toString().isEmpty()) { +if (table == null || table.getLength() == 0) { table = this.defaultTableName; }
[accumulo] branch 2.1 updated: ensures sessions are always cleaned up (#3569)
This is an automated email from the ASF dual-hosted git repository. kturner pushed a commit to branch 2.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git The following commit(s) were added to refs/heads/2.1 by this push: new de02f025ce ensures sessions are always cleaned up (#3569) de02f025ce is described below commit de02f025ce5b25acfb86dbad9e9b96c7115d653f Author: Keith Turner AuthorDate: Mon Jul 10 11:27:46 2023 -0400 ensures sessions are always cleaned up (#3569) This is a potential fix for #3512. It ensures that when a sesssions cleanup method returns false that cleanup will be attempted again later. --- .../accumulo/tserver/session/ScanSession.java | 4 ++ .../apache/accumulo/tserver/session/Session.java | 6 ++ .../accumulo/tserver/session/SessionManager.java | 84 +- 3 files changed, 62 insertions(+), 32 deletions(-) diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/ScanSession.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/ScanSession.java index 3217fe1b8f..0fefcc1327 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/ScanSession.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/ScanSession.java @@ -189,4 +189,8 @@ public abstract class ScanSession extends Session implements ScanInfo { return true; } + @Override + public String toString() { +return super.toString() + " tableId:" + getTableId(); + } } diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/Session.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/Session.java index b1c14ca6e8..6e49833729 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/Session.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/Session.java @@ -49,4 +49,10 @@ public class Session { public boolean cleanup() { return true; } + + @Override + public String toString() { +return getClass().getSimpleName() + " " + state + " startTime:" + startTime + " lastAccessTime:" ++ lastAccessTime + " client:" + client; + } } diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java index b8d605ebd8..f0f8a5de2a 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java @@ -18,15 +18,22 @@ */ package org.apache.accumulo.tserver.session; +import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.util.concurrent.TimeUnit.MINUTES; +import static java.util.concurrent.TimeUnit.SECONDS; + import java.security.SecureRandom; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ScheduledFuture; @@ -42,6 +49,7 @@ import org.apache.accumulo.core.tabletserver.thrift.ActiveScan; import org.apache.accumulo.core.tabletserver.thrift.ScanState; import org.apache.accumulo.core.tabletserver.thrift.ScanType; import org.apache.accumulo.core.util.MapCounter; +import org.apache.accumulo.core.util.Retry; import org.apache.accumulo.core.util.threads.ThreadPools; import org.apache.accumulo.server.ServerContext; import org.apache.accumulo.tserver.scan.ScanRunState; @@ -61,7 +69,7 @@ public class SessionManager { private final ConcurrentMap sessions = new ConcurrentHashMap<>(); private final long maxIdle; private final long maxUpdateIdle; - private final List idleSessions = new ArrayList<>(); + private final BlockingQueue deferredCleanupQueue = new ArrayBlockingQueue<>(5000); private final Long expiredSessionMarker = (long) -1; private final AccumuloConfiguration aconf; private final ServerContext ctx; @@ -209,15 +217,39 @@ public class SessionManager { } if (doCleanup) { -session.cleanup(); +cleanup(session); } } return session; } + private void cleanup(Session session) { +if (!session.cleanup()) { + var retry = Retry.builder().infiniteRetries().retryAfter(25, MILLISECONDS) + .incrementBy(25, MILLISECONDS).maxWait(5, SECONDS).backOffFactor(1.5) + .logInterval(1, MINUTES).createRetry(); + + while (!deferredCleanupQueue.offer(session)) { +if (session.cleanup()) { + break; +} + +try { + retry.waitForNextAttempt(log, "Unable to cleanup session or