[accumulo] branch 1451-external-compactions-feature updated: Make compactor sleep time a function of # of compactors

2021-05-03 Thread kturner
This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to 
refs/heads/1451-external-compactions-feature by this push:
 new 022f4b9  Make compactor sleep time a function of # of compactors
022f4b9 is described below

commit 022f4b9e25c34cabeb2562b678cc9f065b4d12ed
Author: Keith Turner 
AuthorDate: Mon May 3 17:09:15 2021 -0400

Make compactor sleep time a function of # of compactors
---
 .../core/util/compaction/ExternalCompactionUtil.java   | 18 ++
 .../java/org/apache/accumulo/compactor/Compactor.java  | 16 ++--
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/org/apache/accumulo/core/util/compaction/ExternalCompactionUtil.java
 
b/core/src/main/java/org/apache/accumulo/core/util/compaction/ExternalCompactionUtil.java
index cdf19e7..56114ef 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/util/compaction/ExternalCompactionUtil.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/util/compaction/ExternalCompactionUtil.java
@@ -250,4 +250,22 @@ public class ExternalCompactionUtil {
 
 return runningIds;
   }
+
+  public static int countCompactors(String queueName, ClientContext context) {
+String queueRoot = context.getZooKeeperRoot() + Constants.ZCOMPACTORS + 
"/" + queueName;
+List children = context.getZooCache().getChildren(queueRoot);
+if (children == null)
+  return 0;
+
+int count = 0;
+
+for (String child : children) {
+  List children2 = context.getZooCache().getChildren(queueRoot + 
"/" + child);
+  if (children2 != null && !children2.isEmpty()) {
+count++;
+  }
+}
+
+return count;
+  }
 }
diff --git 
a/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java 
b/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java
index e1fc0db..17cc08d 100644
--- 
a/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java
+++ 
b/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java
@@ -479,7 +479,7 @@ public class Compactor extends AbstractServer
   getContext().rpcCreds(), queueName,
   
ExternalCompactionUtil.getHostPortString(compactorAddress.getAddress()),
   eci.toString());
-} catch (TException e) {
+} catch (Exception e) {
   currentCompactionId.set(null);
   throw e;
 } finally {
@@ -603,7 +603,19 @@ public class Compactor extends AbstractServer
   }
 
   protected long getWaitTimeBetweenCompactionChecks() {
-return 3000;
+// get the total number of compactors assigned to this queue
+int numCompactors = ExternalCompactionUtil.countCompactors(queueName, 
getContext());
+// Aim for around 3 compactors checking in every second
+long sleepTime = numCompactors * 1000 / 3;
+// Ensure a compactor sleeps at least around a second
+sleepTime = Math.max(1000, sleepTime);
+// Ensure a compactor sleep not too much more than 5 mins
+sleepTime = Math.min(300_000L, sleepTime);
+// Add some random jitter to the sleep time, that averages out to sleep 
time. This will spread
+// compactors out evenly over time.
+sleepTime = (long) (.9 * sleepTime + sleepTime * .2 * Math.random());
+LOG.trace("Sleeping {}ms based on {} compactors", sleepTime, 
numCompactors);
+return sleepTime;
   }
 
   @Override


[accumulo] branch main updated: Fix for Constraint API (#2074)

2021-05-03 Thread mmiller
This is an automated email from the ASF dual-hosted git repository.

mmiller 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 6094a53  Fix for Constraint API (#2074)
6094a53 is described below

commit 6094a537421f7b2d328c8d1d016a2bf830743d4c
Author: Mike Miller 
AuthorDate: Mon May 3 17:13:04 2021 -0400

Fix for Constraint API (#2074)

* Add method to deprecated API to prevent errors
* Add test to DeprecatedConstraintExtendTest
---
 .../accumulo/core/constraints/Constraint.java  | 11 +++
 .../DeprecatedConstraintExtendTest.java| 38 --
 2 files changed, 47 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/org/apache/accumulo/core/constraints/Constraint.java 
b/core/src/main/java/org/apache/accumulo/core/constraints/Constraint.java
index 3414970..b24d613 100644
--- a/core/src/main/java/org/apache/accumulo/core/constraints/Constraint.java
+++ b/core/src/main/java/org/apache/accumulo/core/constraints/Constraint.java
@@ -84,4 +84,15 @@ public interface Constraint extends 
org.apache.accumulo.core.data.constraints.Co
* @return list of violation codes, or null if none
*/
   List check(Environment env, Mutation mutation);
+
+  /**
+   * Implemented for backwards compatibility.
+   *
+   * @since 2.1.0
+   */
+  @Override
+  default List 
check(org.apache.accumulo.core.data.constraints.Constraint.Environment env,
+  Mutation mutation) {
+return check((Environment) env, mutation);
+  }
 }
diff --git 
a/core/src/test/java/org/apache/accumulo/core/constraints/DeprecatedConstraintExtendTest.java
 
b/core/src/test/java/org/apache/accumulo/core/constraints/DeprecatedConstraintExtendTest.java
index aa7ef99..dac943d 100644
--- 
a/core/src/test/java/org/apache/accumulo/core/constraints/DeprecatedConstraintExtendTest.java
+++ 
b/core/src/test/java/org/apache/accumulo/core/constraints/DeprecatedConstraintExtendTest.java
@@ -40,13 +40,12 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 @SuppressWarnings("deprecation")
 public class DeprecatedConstraintExtendTest {
 
-  Constraint constraint = new MinKeySizeConstraint();
-
   byte[] min = new byte[1024];
   byte[] oversized = new byte[1048577];
 
   @Test
   public void testMinKeySizeConstraint() {
+Constraint constraint = new MinKeySizeConstraint();
 
 // pass constraints
 Mutation m = new Mutation(min);
@@ -67,6 +66,20 @@ public class DeprecatedConstraintExtendTest {
 constraint.check(null, m));
   }
 
+  @Test
+  public void testFoo() {
+FooConstraint fc = new FooConstraint();
+// pass constraints
+Mutation m = new Mutation("blah");
+m.put("colf", "colq", new Value(new byte[] {}));
+assertEquals(null, fc.check(null, m));
+
+// test fail constraint
+m = new Mutation("foo");
+m.put("colf", "colq", new Value(new byte[] {}));
+assertEquals(Collections.singletonList(Short.valueOf("1")), fc.check(null, 
m));
+  }
+
   /**
* Limit the size of 1mb but also a minimum of 1KB
*/
@@ -94,4 +107,25 @@ public class DeprecatedConstraintExtendTest {
   return violations;
 }
   }
+
+  /**
+   * Test previously defined constraint.
+   */
+  public class FooConstraint implements Constraint {
+public String getViolationDescription(short violationCode) {
+  switch (violationCode) {
+case 1:
+  return "Contains foo";
+  }
+  throw new IllegalArgumentException();
+}
+
+public List check(Constraint.Environment env, Mutation mutation) {
+  if (new String(mutation.getRow()).contains("foo")) {
+return Collections.singletonList(Short.valueOf("1"));
+  }
+  return null;
+}
+  }
+
 }


[accumulo] branch 1451-external-compactions-feature updated (857231c -> 6daea69)

2021-05-03 Thread dlmarion
This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a change to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git.


from 857231c  Resolved some more CBUG markers
 add 9afab2c  Made private fields in Violations.CVSKey final (#2036)
 add 032bfdc  Fix typo in ConstraintChecker.java (#2037)
 add da2b099  Add bulk import option to ignore empty dirs (#2039)
 add d3b41fc  Migrate Constraints to API (#1985)
 add 35319d4  Move ignoreEmptyDir opt to ImportOptions interface (#2045)
 add 4383b41  Fixed issue #2048 wrong name in CompactableFileImpl method 
(#2050)
 add 2831c29  Fix #2054 typo in ClientOps (conection-> connection)
 add 4213d76  Fix redundant TableId creation in TableLoadBalancer (#2060)
 add 323bbea  #2049 Renamed method in SingletonManager (#2061)
 add c180b34  Fix #2062 - Fix typo in VolumeImpl.java exception message.
 add 747c48a  Fix javadoc for LongCombiner (#2069)
 add 97fe15c  Fix formatting from #2069
 add 17c0174  Fixes #2066 - Declaration of map in MapCounter.java as final 
(#2071)
 add f35ca73  Fix NumUtilTests to set Locale to US (#2072)
 add c74e2ea  #2040: replace immutable HashSet by Set.of() to reduce code * 
adjusted imports * closes #2040
 add 4f35e6a  #2040: replace immutable HashSet by Set.of() to reduce code * 
set locale in NumUtilTest to US * adjusted imports * closes #2040
 add 7778203  Fix #2053 Fix typo -in TabletServerResourceManager
 new 6daea69  Merge branch 'main' into 1451-external-compactions-feature

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:
 core/pom.xml   |  2 +
 .../org/apache/accumulo/core/cli/ClientOpts.java   |  2 +-
 .../core/client/admin/TableOperations.java |  7 ++
 .../core/clientImpl/NamespaceOperationsImpl.java   |  2 +-
 .../core/clientImpl/TableOperationsImpl.java   |  2 +-
 .../accumulo/core/clientImpl/bulk/BulkImport.java  | 18 +++-
 .../apache/accumulo/core/conf/IterConfigUtil.java  |  2 +-
 .../org/apache/accumulo/core/conf/Property.java|  2 +-
 .../accumulo/core/constraints/Constraint.java  | 26 ++
 .../core/constraints/DefaultKeySizeConstraint.java | 13 ++-
 .../core/constraints/NoDeleteConstraint.java   | 12 ++-
 .../accumulo/core/constraints/Violations.java  |  4 +-
 .../core/constraints/VisibilityConstraint.java | 13 ++-
 .../core/{ => data}/constraints/Constraint.java| 19 +++--
 .../constraints/DefaultKeySizeConstraint.java  |  4 +-
 .../{ => data}/constraints/NoDeleteConstraint.java |  4 +-
 .../constraints/VisibilityConstraint.java  |  4 +-
 .../apache/accumulo/core/file/FileOperations.java  | 12 ++-
 .../accumulo/core/iterators/LongCombiner.java  |  4 +-
 .../core/metadata/CompactableFileImpl.java |  2 +-
 .../accumulo/core/singletons/SingletonManager.java |  2 +-
 .../core/singletons/SingletonReservation.java  |  2 +-
 .../core/spi/balancer/TableLoadBalancer.java   |  6 +-
 .../org/apache/accumulo/core/util/MapCounter.java  |  2 +-
 .../apache/accumulo/core/volume/VolumeImpl.java|  2 +-
 .../client/security/tokens/KerberosTokenTest.java  |  4 +-
 .../constraints/DefaultKeySizeConstraintTest.java  |  1 +
 .../DeprecatedConstraintExtendTest.java| 97 ++
 .../core/constraints/NoDeleteConstraintTest.java   |  1 +
 .../VisibilityConstraintTest.java  | 11 +--
 .../constraints/DefaultKeySizeConstraintTest.java  |  7 +-
 .../constraints/NoDeleteConstraintTest.java|  2 +-
 .../constraints}/VisibilityConstraintTest.java |  7 +-
 .../core/iterators/user/RowFilterTest.java | 25 +++---
 .../org/apache/accumulo/core/util/NumUtilTest.java |  3 +
 .../org/apache/accumulo/fate/AgeOffStoreTest.java  | 23 +++--
 .../server/constraints/MetadataConstraints.java| 16 ++--
 .../server/constraints/SystemEnvironment.java  |  2 +-
 .../server/metadata/RootTabletMutatorImpl.java | 15 +++-
 .../security/handler/KerberosAuthenticator.java|  7 +-
 .../accumulo/server/util/FileSystemMonitor.java|  8 +-
 .../tserver/TabletServerResourceManager.java   |  8 +-
 .../accumulo/tserver/TservConstraintEnv.java   | 21 +++--
 .../tserver/constraints/ConstraintChecker.java | 32 +--
 .../tserver/constraints/SystemConstraint.java  |  2 +-
 .../constraints/UnsatisfiableConstraint.java   |  2 +-
 .../accumulo/tserver/tablet/CompactableImpl.java   |  2 +-
 .../tserver/constraints/ConstraintCheckerTest.java | 34 
 .../accumulo/shell/commands/ConstraintCommand.java |  2 +-
 .../shell/commands/CreateTableCommand.java |  2 +-
 .../shell/commands/ImportDirectoryCommand.java | 13 ++-
 .../ap

[accumulo] 01/01: Merge branch 'main' into 1451-external-compactions-feature

2021-05-03 Thread dlmarion
This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a commit to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git

commit 6daea692c0838d769a42657ba432385c0f69c035
Merge: 857231c 7778203
Author: Dave Marion 
AuthorDate: Mon May 3 19:30:51 2021 +

Merge branch 'main' into 1451-external-compactions-feature

Conflicts:

server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java

server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java

 core/pom.xml   |  2 +
 .../org/apache/accumulo/core/cli/ClientOpts.java   |  2 +-
 .../core/client/admin/TableOperations.java |  7 ++
 .../core/clientImpl/NamespaceOperationsImpl.java   |  2 +-
 .../core/clientImpl/TableOperationsImpl.java   |  2 +-
 .../accumulo/core/clientImpl/bulk/BulkImport.java  | 18 +++-
 .../apache/accumulo/core/conf/IterConfigUtil.java  |  2 +-
 .../org/apache/accumulo/core/conf/Property.java|  2 +-
 .../accumulo/core/constraints/Constraint.java  | 26 ++
 .../core/constraints/DefaultKeySizeConstraint.java | 13 ++-
 .../core/constraints/NoDeleteConstraint.java   | 12 ++-
 .../accumulo/core/constraints/Violations.java  |  4 +-
 .../core/constraints/VisibilityConstraint.java | 13 ++-
 .../core/{ => data}/constraints/Constraint.java| 19 +++--
 .../constraints/DefaultKeySizeConstraint.java  |  4 +-
 .../{ => data}/constraints/NoDeleteConstraint.java |  4 +-
 .../constraints/VisibilityConstraint.java  |  4 +-
 .../apache/accumulo/core/file/FileOperations.java  | 12 ++-
 .../accumulo/core/iterators/LongCombiner.java  |  4 +-
 .../core/metadata/CompactableFileImpl.java |  2 +-
 .../accumulo/core/singletons/SingletonManager.java |  2 +-
 .../core/singletons/SingletonReservation.java  |  2 +-
 .../core/spi/balancer/TableLoadBalancer.java   |  6 +-
 .../org/apache/accumulo/core/util/MapCounter.java  |  2 +-
 .../apache/accumulo/core/volume/VolumeImpl.java|  2 +-
 .../client/security/tokens/KerberosTokenTest.java  |  4 +-
 .../constraints/DefaultKeySizeConstraintTest.java  |  1 +
 .../DeprecatedConstraintExtendTest.java| 97 ++
 .../core/constraints/NoDeleteConstraintTest.java   |  1 +
 .../VisibilityConstraintTest.java  | 11 +--
 .../constraints/DefaultKeySizeConstraintTest.java  |  7 +-
 .../constraints/NoDeleteConstraintTest.java|  2 +-
 .../constraints}/VisibilityConstraintTest.java |  7 +-
 .../core/iterators/user/RowFilterTest.java | 25 +++---
 .../org/apache/accumulo/core/util/NumUtilTest.java |  3 +
 .../org/apache/accumulo/fate/AgeOffStoreTest.java  | 23 +++--
 .../server/constraints/MetadataConstraints.java| 16 ++--
 .../server/constraints/SystemEnvironment.java  |  2 +-
 .../server/metadata/RootTabletMutatorImpl.java | 15 +++-
 .../security/handler/KerberosAuthenticator.java|  7 +-
 .../accumulo/server/util/FileSystemMonitor.java|  8 +-
 .../tserver/TabletServerResourceManager.java   |  8 +-
 .../accumulo/tserver/TservConstraintEnv.java   | 21 +++--
 .../tserver/constraints/ConstraintChecker.java | 32 +--
 .../tserver/constraints/SystemConstraint.java  |  2 +-
 .../constraints/UnsatisfiableConstraint.java   |  2 +-
 .../accumulo/tserver/tablet/CompactableImpl.java   |  2 +-
 .../tserver/constraints/ConstraintCheckerTest.java | 34 
 .../accumulo/shell/commands/ConstraintCommand.java |  2 +-
 .../shell/commands/CreateTableCommand.java |  2 +-
 .../shell/commands/ImportDirectoryCommand.java | 13 ++-
 .../apache/accumulo/shell/commands/OptUtil.java| 20 +
 .../shell/commands/DeleteTableCommandTest.java |  9 +-
 .../shell/commands/ImportDirectoryCommandTest.java |  6 ++
 .../org/apache/accumulo/test/OrIteratorIT.java |  3 +-
 .../org/apache/accumulo/test/ShellServerIT.java| 75 ++---
 .../apache/accumulo/test/TableOperationsIT.java|  2 +-
 .../test/constraints/AlphaNumKeyConstraint.java|  2 +-
 .../accumulo/test/constraints/MaxMutationSize.java |  2 +-
 .../test/constraints/NumericValueConstraint.java   |  2 +-
 .../apache/accumulo/test/functional/BulkIT.java| 18 
 .../apache/accumulo/test/functional/BulkNewIT.java | 29 +++
 .../accumulo/test/functional/ManagerMetricsIT.java | 11 +--
 .../accumulo/test/functional/PermissionsIT.java|  3 +-
 .../accumulo/test/functional/SlowConstraint.java   |  2 +-
 65 files changed, 495 insertions(+), 204 deletions(-)

diff --cc 
server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java
index a398a71,fe61b55..0c598d7
--- 
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
@@@ -96,8 -95,7 +96,8

[accumulo] branch 1451-external-compactions-feature updated: Resolved some more CBUG markers

2021-05-03 Thread dlmarion
This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a commit to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to 
refs/heads/1451-external-compactions-feature by this push:
 new 857231c  Resolved some more CBUG markers
857231c is described below

commit 857231cae25f04bbb51ecfdbcb4ab7a4b8ca24d4
Author: Dave Marion 
AuthorDate: Mon May 3 18:56:08 2021 +

Resolved some more CBUG markers
---
 .../accumulo/core/util/compaction/ExternalCompactionUtil.java   | 3 +--
 .../java/org/apache/accumulo/coordinator/CompactionFinalizer.java   | 2 +-
 .../src/main/java/org/apache/accumulo/compactor/Compactor.java  | 6 +++---
 3 files changed, 5 insertions(+), 6 deletions(-)

diff --git 
a/core/src/main/java/org/apache/accumulo/core/util/compaction/ExternalCompactionUtil.java
 
b/core/src/main/java/org/apache/accumulo/core/util/compaction/ExternalCompactionUtil.java
index 0c5d45b..cdf19e7 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/util/compaction/ExternalCompactionUtil.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/util/compaction/ExternalCompactionUtil.java
@@ -110,8 +110,7 @@ public class ExternalCompactionUtil {
 }
   }
 } catch (NoNodeException e) {
-  // CBUG change to trace
-  LOG.debug("Ignoring node that went missing", e);
+  LOG.trace("Ignoring node that went missing", e);
 }
   }
 
diff --git 
a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java
 
b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java
index 573105c..7e673b0 100644
--- 
a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java
+++ 
b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java
@@ -150,7 +150,7 @@ public class CompactionFinalizer {
 List statusesToDelete = new ArrayList<>();
 
 for (ExternalCompactionFinalState ecfs : batch) {
-  // CBUG use #1974 for more efficient metadata reads
+  // TODO: use #1974 for more efficient metadata reads
   TabletMetadata tabletMetadata = context.getAmple().readTablets()
   .forTablet(ecfs.getExtent()).fetch(ColumnType.LOCATION, 
ColumnType.PREV_ROW).build()
   .stream().findFirst().orElse(null);
diff --git 
a/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java 
b/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java
index 6ed7fa4..e1fc0db 100644
--- 
a/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java
+++ 
b/server/compactor/src/main/java/org/apache/accumulo/compactor/Compactor.java
@@ -378,9 +378,6 @@ public class Compactor extends AbstractServer
*/
   protected void updateCompactionState(TExternalCompactionJob job, 
TCompactionState state,
   String message) throws RetriesExceededException {
-// CBUG the return type was changed from Void to String just to make this 
work. When type was
-// Void and returned null, it would retry forever. Could specialize 
RetryableThriftCall for case
-// w/ no return type.
 RetryableThriftCall thriftCall = new RetryableThriftCall<>(1000,
 RetryableThriftCall.MAX_WAIT_TIME, 25, new 
RetryableThriftFunction() {
   @Override
@@ -390,6 +387,9 @@ public class Compactor extends AbstractServer
   
coordinatorClient.get().updateCompactionStatus(TraceUtil.traceInfo(),
   getContext().rpcCreds(), job.getExternalCompactionId(), 
state, message,
   System.currentTimeMillis());
+  // Note: the return type was changed from Void to String just to 
make this work. When
+  // type was
+  // Void and returned null, it would retry forever.
   return "";
 } finally {
   ThriftUtil.returnClient(coordinatorClient.getAndSet(null));


[accumulo] branch 1451-external-compactions-feature updated: Don't do work if no external compaction ids

2021-05-03 Thread dlmarion
This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a commit to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to 
refs/heads/1451-external-compactions-feature by this push:
 new ea0a604  Don't do work if no external compaction ids
ea0a604 is described below

commit ea0a6049f364dfd6ba5cc8e35a65a80eb5f6adc7
Author: Dave Marion 
AuthorDate: Mon May 3 18:30:00 2021 +

Don't do work if no external compaction ids
---
 .../org/apache/accumulo/coordinator/DeadCompactionDetector.java  | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git 
a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/DeadCompactionDetector.java
 
b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/DeadCompactionDetector.java
index 46c6de5..afd2e2d 100644
--- 
a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/DeadCompactionDetector.java
+++ 
b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/DeadCompactionDetector.java
@@ -123,10 +123,11 @@ public class DeadCompactionDetector {
 .stream().flatMap(tm -> tm.getExternalCompactions().keySet().stream())
 .forEach(danglingEcids::remove);
 
-danglingEcids.forEach(
-ecid -> log.debug("Detected dangling external compaction final state 
marker {}", ecid));
-
-context.getAmple().deleteExternalCompactionFinalStates(danglingEcids);
+if (!danglingEcids.isEmpty()) {
+  danglingEcids.forEach(
+  ecid -> log.debug("Detected dangling external compaction final state 
marker {}", ecid));
+  context.getAmple().deleteExternalCompactionFinalStates(danglingEcids);
+}
   }
 
   public void start() {


[accumulo] branch 1451-external-compactions-feature updated: Resolved some CBUG comments in Coordinator

2021-05-03 Thread dlmarion
This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a commit to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to 
refs/heads/1451-external-compactions-feature by this push:
 new 5ddd0cf  Resolved some CBUG comments in Coordinator
5ddd0cf is described below

commit 5ddd0cfad2873ec2b961ba0e5cf8726947fa5d15
Author: Dave Marion 
AuthorDate: Mon May 3 18:04:35 2021 +

Resolved some CBUG comments in Coordinator
---
 .../org/apache/accumulo/core/conf/Property.java| 31 +-
 .../accumulo/server/metadata/ServerAmpleImpl.java  |  2 ++
 .../coordinator/CompactionCoordinator.java | 20 +++---
 .../accumulo/coordinator/CompactionFinalizer.java  | 18 -
 .../coordinator/DeadCompactionDetector.java|  8 +++---
 .../accumulo/coordinator/QueueAndPriority.java |  2 +-
 .../apache/accumulo/test/ExternalCompactionIT.java |  1 +
 7 files changed, 48 insertions(+), 34 deletions(-)

diff --git a/core/src/main/java/org/apache/accumulo/core/conf/Property.java 
b/core/src/main/java/org/apache/accumulo/core/conf/Property.java
index 2cc6b23..d5a605e 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/Property.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/Property.java
@@ -1040,23 +1040,28 @@ public enum Property {
   // CompactionCoordinator properties
   COORDINATOR_PREFIX("coordinator.", null, PropertyType.PREFIX,
   "Properties in this category affect the behavior of the accumulo 
compaction coordinator server."),
-  COORDINATOR_PORTSEARCH("coordinator.port.search", "false", 
PropertyType.BOOLEAN,
+  COORDINATOR_THRIFTCLIENT_PORTSEARCH("coordinator.thrift.port.search", 
"false",
+  PropertyType.BOOLEAN,
   "if the ports above are in use, search higher ports until one is 
available"),
-  COORDINATOR_CLIENTPORT("coordinator.port.client", "9100", PropertyType.PORT,
+  COORDINATOR_THRIFTCLIENT_CLIENTPORT("coordinator.thrift.port.client", 
"9100", PropertyType.PORT,
   "The port used for handling Thrift client connections on the compaction 
coordinator server"),
-  COORDINATOR_MINTHREADS("coordinator.server.threads.minimum", "1", 
PropertyType.COUNT,
-  "The minimum number of threads to use to handle incoming requests."),
-  COORDINATOR_MINTHREADS_TIMEOUT("coordinator.server.threads.timeout", "0s",
+  
COORDINATOR_THRIFTCLIENT_MINTHREADS("coordinator.server.thrift.threads.minimum",
 "1",
+  PropertyType.COUNT, "The minimum number of threads to use to handle 
incoming requests."),
+  
COORDINATOR_THRIFTCLIENT_MINTHREADS_TIMEOUT("coordinator.server.thrift.threads.timeout",
 "0s",
   PropertyType.TIMEDURATION,
   "The time after which incoming request threads terminate with no work 
available.  Zero (0) will keep the threads alive indefinitely."),
-  COORDINATOR_THREADCHECK("coordinator.server.threadcheck.time", "1s", 
PropertyType.TIMEDURATION,
-  "The time between adjustments of the server thread pool."),
-  COORDINATOR_MAX_MESSAGE_SIZE("coordinator.server.message.size.max", "10M", 
PropertyType.BYTES,
-  "The maximum size of a message that can be sent to a tablet server."), 
// deprecated
- 
// properties grouped
- 
// at the end to
- 
// reference property
- 
// that replaces them
+  
COORDINATOR_THRIFTCLIENT_THREADCHECK("coordinator.server.thrift.threadcheck.time",
 "1s",
+  PropertyType.TIMEDURATION, "The time between adjustments of the server 
thread pool."),
+  
COORDINATOR_THRIFTCLIENT_MAX_MESSAGE_SIZE("coordinator.server.thrift.message.size.max",
 "10M",
+  PropertyType.BYTES, "The maximum size of a message that can be sent to a 
tablet server."),
+  
COORDINATOR_DEAD_COMPACTOR_CHECK_INTERVAL("coordinator.server.compactor.dead.check.interval",
+  "5m", PropertyType.TIMEDURATION, "The interval at which to check for 
dead compactors."),
+  
COORDINATOR_FINALIZER_TSERVER_NOTIFIER_MAXTHREADS("coordinator.server.finalizer.threads.maximum",
+  "5", PropertyType.COUNT,
+  "The maximum number of threads to use for notifying tablet servers that 
an external compaction has completed."),
+  
COORDINATOR_FINALIZER_COMPLETION_CHECK_INTERVAL("coordinator.server.finalizer.check.interval",
+  "60s", PropertyType.TIMEDURATION,
+  "The interval at which to check for external compaction final state 
markers in the metadata table."),
   // deprecated properties grouped at the end to reference property that 
replaces them
   @Deprecated(since = "1.6.0")
   @ReplacedBy(property = INSTANCE_VOLUMES)
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/met

[accumulo] branch 1451-external-compactions-feature updated: closes #2059 - add IT for coordinator restart during compaction

2021-05-03 Thread dlmarion
This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a commit to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to 
refs/heads/1451-external-compactions-feature by this push:
 new 10a295d  closes #2059 - add IT for coordinator restart during 
compaction
10a295d is described below

commit 10a295d6f8be22cdf5d015bfab58fd6672594393
Author: Dave Marion 
AuthorDate: Mon May 3 16:53:50 2021 +

closes #2059 - add IT for coordinator restart during compaction
---
 .../apache/accumulo/test/ExternalCompactionIT.java | 55 ++
 1 file changed, 55 insertions(+)

diff --git 
a/test/src/main/java/org/apache/accumulo/test/ExternalCompactionIT.java 
b/test/src/main/java/org/apache/accumulo/test/ExternalCompactionIT.java
index df34c25..9ab5f55 100644
--- a/test/src/main/java/org/apache/accumulo/test/ExternalCompactionIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/ExternalCompactionIT.java
@@ -263,6 +263,61 @@ public class ExternalCompactionIT extends 
ConfigurableMacBase {
   }
 
   @Test
+  public void testCoordinatorRestartsDuringCompaction() throws Exception {
+try (AccumuloClient client = 
Accumulo.newClient().from(getClientProperties()).build()) {
+  String table1 = "ectt9";
+  createTable(client, table1, "cs1", 2);
+  writeData(client, table1);
+  cluster.exec(ExternalDoNothingCompactor.class, "-q", "DCQ1");
+  ProcessInfo process = cluster.exec(CompactionCoordinator.class);
+  compact(client, table1, 2, "DCQ1", false);
+  TableId tid = Tables.getTableId(getCluster().getServerContext(), table1);
+  // Wait for the compaction to start by waiting for 1 external compaction 
column
+  Set ecids = new HashSet<>();
+  do {
+UtilWaitThread.sleep(50);
+try (TabletsMetadata tm = 
getCluster().getServerContext().getAmple().readTablets()
+.forTable(tid).fetch(ColumnType.ECOMP).build()) {
+  tm.stream().flatMap(t -> 
t.getExternalCompactions().keySet().stream())
+  .forEach(ecids::add);
+}
+  } while (ecids.isEmpty());
+
+  // Stop the Coordinator
+  Process coord = process.getProcess();
+  if (coord.supportsNormalTermination()) {
+cluster.stopProcessWithTimeout(coord, 60, TimeUnit.SECONDS);
+  } else {
+LOG.info("Stopping tserver manually");
+new ProcessBuilder("kill", Long.toString(coord.pid())).start();
+coord.waitFor();
+  }
+
+  // Start the TestCompactionCoordinator so that we have
+  // access to the metrics.
+  cluster.exec(TestCompactionCoordinator.class);
+
+  // Wait for coordinator to start
+  ExternalCompactionMetrics metrics = null;
+  while (null == metrics) {
+try {
+  metrics = getCoordinatorMetrics();
+} catch (Exception e) {
+  UtilWaitThread.sleep(250);
+}
+  }
+
+  // wait for failure or test timeout
+  metrics = getCoordinatorMetrics();
+  while (metrics.getRunning() == 0) {
+UtilWaitThread.sleep(250);
+metrics = getCoordinatorMetrics();
+  }
+
+}
+  }
+
+  @Test
   public void testCompactionAndCompactorDies() throws Exception {
 try (AccumuloClient client = 
Accumulo.newClient().from(getClientProperties()).build()) {
   // Stop the TabletServer so that it does not commit the compaction and 
remove


[accumulo] branch 1451-external-compactions-feature updated: closes #2058 - added IT for Compactor dying during external compaction

2021-05-03 Thread dlmarion
This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a commit to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to 
refs/heads/1451-external-compactions-feature by this push:
 new b5214f6  closes #2058 - added IT for Compactor dying during external 
compaction
b5214f6 is described below

commit b5214f6231acfc56480bddb8ccfb24260737a6e3
Author: Dave Marion 
AuthorDate: Mon May 3 16:17:29 2021 +

closes #2058 - added IT for Compactor dying during external compaction
---
 .../apache/accumulo/test/ExternalCompactionIT.java | 55 +-
 1 file changed, 54 insertions(+), 1 deletion(-)

diff --git 
a/test/src/main/java/org/apache/accumulo/test/ExternalCompactionIT.java 
b/test/src/main/java/org/apache/accumulo/test/ExternalCompactionIT.java
index e790f96..df34c25 100644
--- a/test/src/main/java/org/apache/accumulo/test/ExternalCompactionIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/ExternalCompactionIT.java
@@ -79,6 +79,7 @@ import 
org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
 import org.apache.accumulo.core.iterators.SortedKeyValueIterator;
 import org.apache.accumulo.core.metadata.schema.Ample.DataLevel;
 import org.apache.accumulo.core.metadata.schema.ExternalCompactionFinalState;
+import 
org.apache.accumulo.core.metadata.schema.ExternalCompactionFinalState.FinalState;
 import org.apache.accumulo.core.metadata.schema.ExternalCompactionId;
 import org.apache.accumulo.core.metadata.schema.ExternalCompactionMetadata;
 import org.apache.accumulo.core.metadata.schema.TabletMetadata;
@@ -262,6 +263,59 @@ public class ExternalCompactionIT extends 
ConfigurableMacBase {
   }
 
   @Test
+  public void testCompactionAndCompactorDies() throws Exception {
+try (AccumuloClient client = 
Accumulo.newClient().from(getClientProperties()).build()) {
+  // Stop the TabletServer so that it does not commit the compaction and 
remove
+  // the final state from the metadata table.
+  getCluster().getProcesses().get(TABLET_SERVER).forEach(p -> {
+try {
+  getCluster().killProcess(TABLET_SERVER, p);
+} catch (Exception e) {
+  fail("Failed to shutdown tablet server");
+}
+  });
+  // Start our TServer that will not commit the compaction
+  cluster.exec(ExternalCompactionTServer.class);
+
+  String table1 = "ectt8";
+  createTable(client, table1, "cs1", 2);
+  writeData(client, table1);
+  ProcessInfo process = cluster.exec(ExternalDoNothingCompactor.class, 
"-q", "DCQ1");
+  cluster.exec(CompactionCoordinator.class);
+  compact(client, table1, 2, "DCQ1", false);
+  TableId tid = Tables.getTableId(getCluster().getServerContext(), table1);
+  // Wait for the compaction to start by waiting for 1 external compaction 
column
+  Set ecids = new HashSet<>();
+  do {
+UtilWaitThread.sleep(50);
+try (TabletsMetadata tm = 
getCluster().getServerContext().getAmple().readTablets()
+.forTable(tid).fetch(ColumnType.ECOMP).build()) {
+  tm.stream().flatMap(t -> 
t.getExternalCompactions().keySet().stream())
+  .forEach(ecids::add);
+}
+  } while (ecids.isEmpty());
+
+  // Stop the Compactor
+  Process comp = process.getProcess();
+  if (comp.supportsNormalTermination()) {
+cluster.stopProcessWithTimeout(comp, 60, TimeUnit.SECONDS);
+  } else {
+LOG.info("Stopping tserver manually");
+new ProcessBuilder("kill", Long.toString(comp.pid())).start();
+comp.waitFor();
+  }
+}
+
+// DeadCompactionDetector in the CompactionCoordinator should fail the 
compaction.
+long count = 0;
+while (count == 0) {
+  count = 
getCluster().getServerContext().getAmple().getExternalCompactionFinalStates()
+  .filter(state -> 
state.getFinalState().equals(FinalState.FAILED)).count();
+  UtilWaitThread.sleep(250);
+}
+  }
+
+  @Test
   public void testMergeDuringExternalCompaction() throws Exception {
 try (AccumuloClient client = 
Accumulo.newClient().from(getClientProperties()).build()) {
   String table1 = "ectt7";
@@ -291,7 +345,6 @@ public class ExternalCompactionIT extends 
ConfigurableMacBase {
   .forEach(ecids::add);
 }
   } while (ecids.isEmpty());
-  ;
 
   var md = new ArrayList();
   try (TabletsMetadata tm = 
getCluster().getServerContext().getAmple().readTablets()