Skip to content

Commit

Permalink
[fix](test) Fix fe ut BDBJEJournalTest not stable (apache#27192)
Browse files Browse the repository at this point in the history
  • Loading branch information
SWJTU-ZhangLei authored and seawinde committed Nov 28, 2023
1 parent 828373f commit 54728c6
Showing 1 changed file with 42 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,23 @@
import org.apache.doris.common.Pair;
import org.apache.doris.common.io.Text;
import org.apache.doris.common.io.Writable;
import org.apache.doris.journal.Journal;
import org.apache.doris.journal.JournalCursor;
import org.apache.doris.journal.JournalEntity;
import org.apache.doris.persist.OperationType;
import org.apache.doris.system.SystemInfoService.HostInfo;

import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.sleepycat.je.rep.ReplicatedEnvironment;
import mockit.Mock;
import mockit.MockUp;
import org.apache.commons.io.FileUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
// import org.junit.jupiter.api.RepeatedTest; only for debug

import java.io.DataOutput;
import java.io.File;
Expand All @@ -48,34 +48,35 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class BDBJEJournalTest { // CHECKSTYLE IGNORE THIS LINE: BDBJE should use uppercase
private static final Logger LOG = LogManager.getLogger(BDBJEJournalTest.class);
private static File tmpDir;
private static List<File> tmpDirs = new ArrayList<>();

@BeforeAll
public static void setUp() throws Exception {
public static File createTmpDir() throws Exception {
String dorisHome = System.getenv("DORIS_HOME");
if (Strings.isNullOrEmpty(dorisHome)) {
dorisHome = Files.createTempDirectory("DORIS_HOME").toAbsolutePath().toString();
}
Path mockDir = Paths.get(dorisHome, "fe", "mocked");
if (!Files.exists(mockDir)) {
try {
Files.createDirectories(mockDir);
} catch (IOException e) {
e.printStackTrace();
}
Files.createDirectories(mockDir);
}
Preconditions.checkArgument(!Strings.isNullOrEmpty(dorisHome));
tmpDir = Files.createTempDirectory(mockDir, "BDBJEJournalTest").toFile();
LOG.debug("tmpDir path {}", tmpDir.getAbsolutePath());
return;
File dir = Files.createTempDirectory(Paths.get(dorisHome, "fe", "mocked"), "BDBJEJournalTest").toFile();
LOG.debug("createTmpDir path {}", dir.getAbsolutePath());
tmpDirs.add(dir);
return dir;
}

@AfterAll
public static void cleanUp() throws Exception {
FileUtils.deleteDirectory(tmpDir);
for (File dir : tmpDirs) {
LOG.info("deleteTmpDir path {}", dir.getAbsolutePath());
FileUtils.deleteDirectory(dir);
}
}

private int findValidPort() {
Expand All @@ -97,12 +98,14 @@ private int findValidPort() {
return port;
}

// @RepeatedTest(100) only for debug
@Test
public void testNormal() throws Exception {
int port = findValidPort();
Preconditions.checkArgument(((port > 0) && (port < 65535)));
String nodeName = Env.genFeNodeName("127.0.0.1", port, false);
long replayedJournalId = 0;
File tmpDir = createTmpDir();
new MockUp<Env>() {
HostInfo selfNode = new HostInfo("127.0.0.1", port);
@Mock
Expand Down Expand Up @@ -134,8 +137,19 @@ public long getReplayedJournalId() {
LOG.info("BdbDir:{}, selfNode:{}, nodeName:{}", Env.getServingEnv().getBdbDir(),
Env.getServingEnv().getBdbDir(), nodeName);
Assertions.assertEquals(tmpDir.getAbsolutePath(), Env.getServingEnv().getBdbDir());
Journal journal = new BDBJEJournal(nodeName);
BDBJEJournal journal = new BDBJEJournal(nodeName);
journal.open();
// BDBEnvrinment need several seconds election from unknown to master
for (int i = 0; i < 10; i++) {
if (journal.getBDBEnvironment().getReplicatedEnvironment().getState()
.equals(ReplicatedEnvironment.State.MASTER)) {
break;
}
Thread.sleep(1000);
}
Assertions.assertEquals(ReplicatedEnvironment.State.MASTER,
journal.getBDBEnvironment().getReplicatedEnvironment().getState());

journal.rollJournal();
for (int i = 0; i < 10; i++) {
String data = "OperationType.OP_TIMESTAMP";
Expand Down Expand Up @@ -193,8 +207,21 @@ public void write(DataOutput out) throws IOException {
}

journal.close();
Assertions.assertEquals(null, journal.getBDBEnvironment());

journal.open();
Assertions.assertTrue(journal.getBDBEnvironment() != null);
// BDBEnvrinment need several seconds election from unknown to master
for (int i = 0; i < 10; i++) {
if (journal.getBDBEnvironment().getReplicatedEnvironment().getState()
.equals(ReplicatedEnvironment.State.MASTER)) {
break;
}
Thread.sleep(1000);
}

Assertions.assertEquals(ReplicatedEnvironment.State.MASTER,
journal.getBDBEnvironment().getReplicatedEnvironment().getState());
journal.deleteJournals(21);
LOG.info("journal.getDatabaseNames(): {}", journal.getDatabaseNames());
Assertions.assertEquals(3, journal.getDatabaseNames().size());
Expand Down

0 comments on commit 54728c6

Please sign in to comment.