You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2024/02/22 15:24:09 UTC
(accumulo) branch elasticity updated: improves TabletServerGivesUpIT (#4290)
This is an automated email from the ASF dual-hosted git repository.
kturner pushed a commit to branch elasticity
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/elasticity by this push:
new d766696152 improves TabletServerGivesUpIT (#4290)
d766696152 is described below
commit d7666961522c595ac6e8c408377c1c1664e62ee2
Author: Keith Turner <kt...@apache.org>
AuthorDate: Thu Feb 22 10:24:03 2024 -0500
improves TabletServerGivesUpIT (#4290)
TabletServerGivesUpIT tests that a tserver will eventually die when it
can not write to a walog. For walog write failures to occur, there must
be some thread in the tserver trying to write to the tserver. Changes in
elasticity have made it where the activitiy this test was doing did not
always cause a walog write. This change is an attempt to improve the
chance of a tserver thread attempting a walog write after DFS is killed.
---
.../accumulo/test/TabletServerGivesUpIT.java | 30 ++++++++++++++++------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/test/src/main/java/org/apache/accumulo/test/TabletServerGivesUpIT.java b/test/src/main/java/org/apache/accumulo/test/TabletServerGivesUpIT.java
index 2c023859e7..ae4009ee07 100644
--- a/test/src/main/java/org/apache/accumulo/test/TabletServerGivesUpIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/TabletServerGivesUpIT.java
@@ -21,16 +21,15 @@ package org.apache.accumulo.test;
import static java.util.concurrent.TimeUnit.SECONDS;
import java.time.Duration;
-import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.accumulo.core.client.Accumulo;
import org.apache.accumulo.core.client.AccumuloClient;
import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.core.data.Mutation;
import org.apache.accumulo.miniclusterImpl.MiniAccumuloConfigImpl;
import org.apache.accumulo.test.functional.ConfigurableMacBase;
import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.io.Text;
import org.junit.jupiter.api.Test;
// ACCUMULO-2480
@@ -60,25 +59,40 @@ public class TabletServerGivesUpIT extends ConfigurableMacBase {
}
final String tableName = getUniqueNames(1)[0];
client.tableOperations().create(tableName);
+
+ // do an initial write to host the tablet and get its location in cache as we may not be able
+ // to read the metadata table later
+ try (var writer = client.createBatchWriter(tableName)) {
+ Mutation m = new Mutation("001");
+ m.put("a", "b", "c");
+ writer.addMutation(m);
+ }
+
// Kill dfs
cluster.getMiniDfs().shutdown();
// ask the tserver to do something
final AtomicReference<Exception> ex = new AtomicReference<>();
- Thread splitter = new Thread(() -> {
+ Thread backgroundWriter = new Thread(() -> {
try {
- TreeSet<Text> splits = new TreeSet<>();
- splits.add(new Text("X"));
- client.tableOperations().addSplits(tableName, splits);
+ for (int i = 0; i < 100; i++) {
+ // These writes should cause the tserver to attempt to write to walog, which should
+ // repeatedly fail. Relying on the client side cache to have the tablet location so the
+ // writes make it to the tserver where the wal write fails.
+ try (var writer = client.createBatchWriter(tableName)) {
+ Mutation m = new Mutation("001");
+ m.put("a", "b", "c");
+ writer.addMutation(m);
+ }
+ }
} catch (Exception e) {
ex.set(e);
}
});
- splitter.start();
+ backgroundWriter.start();
// wait for the tserver to give up on writing to the WAL
while (client.instanceOperations().getTabletServers().size() == 1) {
Thread.sleep(SECONDS.toMillis(1));
}
}
}
-
}