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 6501f755c4 adds IT to verify external compactions can interrupt
threads (#5412)
6501f755c4 is described below
commit 6501f755c4e24edba0d45d06715fbd0e9f0fb189
Author: Keith Turner <[email protected]>
AuthorDate: Wed Mar 19 11:59:27 2025 -0400
adds IT to verify external compactions can interrupt threads (#5412)
fixes #5401
---
.../test/compaction/ExternalCompaction_2_IT.java | 44 ++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git
a/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction_2_IT.java
b/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction_2_IT.java
index 9b0a94efae..117a46bb5a 100644
---
a/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction_2_IT.java
+++
b/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompaction_2_IT.java
@@ -38,6 +38,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import java.util.Collections;
+import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -48,6 +49,8 @@ import org.apache.accumulo.compactor.Compactor;
import org.apache.accumulo.coordinator.CompactionCoordinator;
import org.apache.accumulo.core.client.Accumulo;
import org.apache.accumulo.core.client.AccumuloClient;
+import org.apache.accumulo.core.client.IteratorSetting;
+import org.apache.accumulo.core.client.admin.CompactionConfig;
import org.apache.accumulo.core.compaction.thrift.TCompactionState;
import org.apache.accumulo.core.compaction.thrift.TExternalCompactionList;
import org.apache.accumulo.core.conf.Property;
@@ -60,6 +63,7 @@ import
org.apache.accumulo.harness.MiniClusterConfigurationCallback;
import org.apache.accumulo.harness.SharedMiniClusterBase;
import org.apache.accumulo.minicluster.ServerType;
import org.apache.accumulo.miniclusterImpl.MiniAccumuloConfigImpl;
+import org.apache.accumulo.test.functional.SlowIterator;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.junit.jupiter.api.AfterEach;
@@ -301,6 +305,46 @@ public class ExternalCompaction_2_IT extends
SharedMiniClusterBase {
}
}
+ @Test
+ public void testDeleteTableCancelsSleepingExternalCompaction() throws
Exception {
+
getCluster().getClusterControl().startCoordinator(CompactionCoordinator.class);
+ getCluster().getClusterControl().startCompactors(Compactor.class, 1,
QUEUE4);
+
+ String table1 = this.getUniqueNames(1)[0];
+ try (AccumuloClient client =
+ Accumulo.newClient().from(getCluster().getClientProperties()).build())
{
+
+ createTable(client, table1, "cs4");
+ TableId tid = getCluster().getServerContext().getTableId(table1);
+ writeData(client, table1);
+
+ // The purpose of this test to ensure the sleeping thread is
interrupted. The only way the
+ // compactor can cancel this compaction is if it interrupts the sleeping
thread.
+ IteratorSetting iteratorSetting = new IteratorSetting(100,
SlowIterator.class);
+ // Sleep so long that the test would timeout if the thread is not
interrupted.
+ SlowIterator.setSleepTime(iteratorSetting, 600000);
+ SlowIterator.setSeekSleepTime(iteratorSetting, 600000);
+ SlowIterator.sleepUninterruptibly(iteratorSetting, false);
+
+ client.tableOperations().compact(table1,
+ new
CompactionConfig().setIterators(List.of(iteratorSetting)).setWait(false));
+
+ // Wait for the compaction to start by waiting for 1 external compaction
column
+ Set<ExternalCompactionId> ecids =
+
waitForCompactionStartAndReturnEcids(getCluster().getServerContext(), tid);
+
+ // Confirm that this ECID shows up in RUNNING set
+ int matches = confirmCompactionRunning(getCluster().getServerContext(),
ecids);
+ assertTrue(matches > 0);
+
+ client.tableOperations().delete(table1);
+
+ confirmCompactionCompleted(getCluster().getServerContext(), ecids,
+ TCompactionState.CANCELLED);
+
+ }
+ }
+
@Test
public void testDeleteTableCancelsExternalCompaction() throws Exception {
getCluster().getClusterControl().startCoordinator(CompactionCoordinator.class);