You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vk...@apache.org on 2021/02/03 04:29:36 UTC
[ignite-3] branch main updated: IGNITE-13816 - Add separate top
level dirs for logs and configs (#26)
This is an automated email from the ASF dual-hosted git repository.
vkulichenko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 7a2e7ad IGNITE-13816 - Add separate top level dirs for logs and configs (#26)
7a2e7ad is described below
commit 7a2e7ade35293eb62f7c79eac6ca04fa13a1b485
Author: Kirill Gusakov <kg...@gmail.com>
AuthorDate: Wed Feb 3 07:29:30 2021 +0300
IGNITE-13816 - Add separate top level dirs for logs and configs (#26)
---
.../apache/ignite/cli/CliPathsConfigLoader.java | 11 +++--
.../java/org/apache/ignite/cli/IgnitePaths.java | 47 ++++++++++++--------
.../cli/builtins/init/InitIgniteCommand.java | 15 ++++++-
.../ignite/cli/builtins/node/NodeManager.java | 19 ++++----
.../apache/ignite/cli/spec/NodeCommandSpec.java | 4 +-
.../apache/ignite/cli/IgniteCliInterfaceTest.java | 50 ++++++++--------------
.../cli/builtins/module/ModuleMangerTest.java | 16 +++++--
7 files changed, 91 insertions(+), 71 deletions(-)
diff --git a/modules/cli/src/main/java/org/apache/ignite/cli/CliPathsConfigLoader.java b/modules/cli/src/main/java/org/apache/ignite/cli/CliPathsConfigLoader.java
index 7b0bf00..f3db1ca 100644
--- a/modules/cli/src/main/java/org/apache/ignite/cli/CliPathsConfigLoader.java
+++ b/modules/cli/src/main/java/org/apache/ignite/cli/CliPathsConfigLoader.java
@@ -56,7 +56,7 @@ public class CliPathsConfigLoader {
CliVersionInfo cliVerInfo
) {
this.pathRslvr = pathRslvr;
- this.ver = cliVerInfo.ver;
+ ver = cliVerInfo.ver;
}
/**
@@ -110,13 +110,18 @@ public class CliPathsConfigLoader {
Properties props = new Properties();
props.load(inputStream);
- if ((props.getProperty("bin") == null) || (props.getProperty("work") == null))
+ if ((props.getProperty("bin") == null) ||
+ (props.getProperty("work") == null) ||
+ (props.getProperty("config") == null) ||
+ (props.getProperty("log") == null) )
throw new IgniteCLIException("Config file has wrong format. " +
- "It must contain correct paths to bin and work dirs");
+ "It must contain correct paths to bin, work, config and log dirs");
return new IgnitePaths(
Path.of(props.getProperty("bin")),
Path.of(props.getProperty("work")),
+ Path.of(props.getProperty("config")),
+ Path.of(props.getProperty("log")),
ver);
}
catch (IOException e) {
diff --git a/modules/cli/src/main/java/org/apache/ignite/cli/IgnitePaths.java b/modules/cli/src/main/java/org/apache/ignite/cli/IgnitePaths.java
index 1f2479c..4ef1862 100644
--- a/modules/cli/src/main/java/org/apache/ignite/cli/IgnitePaths.java
+++ b/modules/cli/src/main/java/org/apache/ignite/cli/IgnitePaths.java
@@ -56,6 +56,12 @@ public class IgnitePaths {
/** Work directory for Ignite server and CLI operation. */
public final Path workDir;
+ /** Directory for storing server node configs. */
+ public final Path configDir;
+
+ /** Directory for server nodes logs */
+ public final Path logDir;
+
/**
* Ignite CLI version.
* Also, the same version will be used for addressing any binaries inside bin dir
@@ -69,9 +75,11 @@ public class IgnitePaths {
* @param workDir Work directory.
* @param ver Ignite CLI version.
*/
- public IgnitePaths(Path binDir, Path workDir, String ver) {
+ public IgnitePaths(Path binDir, Path workDir, Path configDir, Path logDir, String ver) {
this.binDir = binDir;
this.workDir = workDir;
+ this.configDir = configDir;
+ this.logDir = logDir;
this.ver = ver;
}
@@ -114,28 +122,31 @@ public class IgnitePaths {
* Path to default Ignite node config.
*/
public Path serverDefaultConfigFile() {
- return serverConfigDir().resolve("default-config.xml");
+ return configDir.resolve("default-config.xml");
}
/**
* Init or recovers Ignite distributive directories structure.
*/
public void initOrRecover() {
- File igniteWork = workDir.toFile();
- if (!(igniteWork.exists() || igniteWork.mkdirs()))
- throw new IgniteCLIException("Can't create working directory: " + workDir);
-
- File igniteBin = libsDir().toFile();
- if (!(igniteBin.exists() || igniteBin.mkdirs()))
- throw new IgniteCLIException("Can't create a directory for ignite modules: " + libsDir());
-
- File igniteBinCli = cliLibsDir().toFile();
- if (!(igniteBinCli.exists() || igniteBinCli.mkdirs()))
- throw new IgniteCLIException("Can't create a directory for cli modules: " + cliLibsDir());
+ initDirIfNeeded(workDir,"Can't create working directory: " + workDir);
+ initDirIfNeeded(binDir,"Can't create bin directory: " + binDir);
+ initDirIfNeeded(libsDir(),"Can't create a directory for ignite modules: " + libsDir());
+ initDirIfNeeded(cliLibsDir(),"Can't create a directory for cli modules: " + cliLibsDir());
+ initDirIfNeeded(configDir,"Can't create a directory for server configs: " + configDir);
+ initDirIfNeeded(logDir,"Can't create a directory for server logs: " + logDir);
+ }
- File srvCfg = serverConfigDir().toFile();
- if (!(srvCfg.exists() || srvCfg.mkdirs()))
- throw new IgniteCLIException("Can't create a directory for server configs: " + serverConfigDir());
+ /**
+ * Create directory if not exists.
+ *
+ * @param dir Directory
+ * @param exceptionMessage Exception message if directory wasn't created
+ */
+ private void initDirIfNeeded(Path dir, String exceptionMessage) {
+ File dirFile = dir.toFile();
+ if (!(dirFile.exists() || dirFile.mkdirs()))
+ throw new IgniteCLIException(exceptionMessage);
}
/**
@@ -145,8 +156,10 @@ public class IgnitePaths {
*/
public boolean validateDirs() {
return workDir.toFile().exists() &&
+ binDir.toFile().exists() &&
libsDir().toFile().exists() &&
cliLibsDir().toFile().exists() &&
- serverConfigDir().toFile().exists();
+ configDir.toFile().exists() &&
+ logDir.toFile().exists();
}
}
diff --git a/modules/cli/src/main/java/org/apache/ignite/cli/builtins/init/InitIgniteCommand.java b/modules/cli/src/main/java/org/apache/ignite/cli/builtins/init/InitIgniteCommand.java
index 0e3cff9..b9a743d 100644
--- a/modules/cli/src/main/java/org/apache/ignite/cli/builtins/init/InitIgniteCommand.java
+++ b/modules/cli/src/main/java/org/apache/ignite/cli/builtins/init/InitIgniteCommand.java
@@ -104,6 +104,8 @@ public class InitIgniteCommand {
tbl.addRow("@|bold Binaries Directory|@", cfg.binDir);
tbl.addRow("@|bold Work Directory|@", cfg.workDir);
+ tbl.addRow("@|bold Config Directory|@", cfg.configDir);
+ tbl.addRow("@|bold Log Directory|@", cfg.logDir);
out.println(tbl);
out.println();
@@ -159,8 +161,10 @@ public class InitIgniteCommand {
Path binDir = pathRslvr.toolHomeDirectoryPath().resolve("ignite-bin");
Path workDir = pathRslvr.toolHomeDirectoryPath().resolve("ignite-work");
+ Path cfgDir = pathRslvr.toolHomeDirectoryPath().resolve("ignite-config");
+ Path logDir = pathRslvr.toolHomeDirectoryPath().resolve("ignite-log");
- fillNewConfigFile(newCfgFile, binDir, workDir);
+ fillNewConfigFile(newCfgFile, binDir, workDir, cfgDir, logDir);
return newCfgFile;
}
@@ -176,12 +180,19 @@ public class InitIgniteCommand {
* @param binDir Path for bin dir.
* @param workDir Path for work dir.
*/
- private void fillNewConfigFile(File f, @NotNull Path binDir, @NotNull Path workDir) {
+ private void fillNewConfigFile(File f,
+ @NotNull Path binDir,
+ @NotNull Path workDir,
+ @NotNull Path cfgDir,
+ @NotNull Path logDir
+ ) {
try (FileWriter fileWriter = new FileWriter(f)) {
Properties props = new Properties();
props.setProperty("bin", binDir.toString());
props.setProperty("work", workDir.toString());
+ props.setProperty("config", cfgDir.toString());
+ props.setProperty("log", logDir.toString());
props.store(fileWriter, "");
}
catch (IOException e) {
diff --git a/modules/cli/src/main/java/org/apache/ignite/cli/builtins/node/NodeManager.java b/modules/cli/src/main/java/org/apache/ignite/cli/builtins/node/NodeManager.java
index 5748132..4d4d74b 100644
--- a/modules/cli/src/main/java/org/apache/ignite/cli/builtins/node/NodeManager.java
+++ b/modules/cli/src/main/java/org/apache/ignite/cli/builtins/node/NodeManager.java
@@ -75,19 +75,18 @@ public class NodeManager {
* just waiting for appropriate message in the node logs.
*
* @param consistentId Node consistent id.
- * @param workDir Work dir for node operation.
+ * @param logDir Log dir for receiving node state.
* @param pidsDir Dir where pid files of running nodes will be stored.
* @param srvCfg Config for Ignite node
* @param out PrintWriter for user messages.
* @return Information about successfully started node
*/
- public RunningNode start(String consistentId, Path workDir, Path pidsDir, Path srvCfg, PrintWriter out) {
- if (getRunningNodes(workDir, pidsDir).stream().anyMatch(n -> n.consistentId.equals(consistentId)))
+ public RunningNode start(String consistentId, Path logDir, Path pidsDir, Path srvCfg, PrintWriter out) {
+ if (getRunningNodes(logDir, pidsDir).stream().anyMatch(n -> n.consistentId.equals(consistentId)))
throw new IgniteCLIException("Node with consistentId " + consistentId + " is already exist");
try {
- Path logFile = logFile(workDir, consistentId);
-
+ Path logFile = logFile(logDir, consistentId);
if (Files.exists(logFile))
Files.delete(logFile);
@@ -217,7 +216,7 @@ public class NodeManager {
* @param pidsDir Dir with nodes pids.
* @return List of running nodes.
*/
- public List<RunningNode> getRunningNodes(Path worksDir, Path pidsDir) {
+ public List<RunningNode> getRunningNodes(Path logDir, Path pidsDir) {
if (Files.exists(pidsDir)) {
try (Stream<Path> files = Files.find(pidsDir, 1, (f, attrs) -> f.getFileName().toString().endsWith(".pid"))) {
return files
@@ -241,7 +240,7 @@ public class NodeManager {
else {
String consistentId = filename.substring(0, filename.lastIndexOf('_'));
- return Optional.of(new RunningNode(pid, consistentId, logFile(worksDir, consistentId)));
+ return Optional.of(new RunningNode(pid, consistentId, logFile(logDir, consistentId)));
}
})
@@ -311,12 +310,12 @@ public class NodeManager {
}
/**
- * @param workDir Ignite work dir.
+ * @param logDir Ignite log dir.
* @param consistentId Node consistent id.
* @return Path of node log file.
*/
- private static Path logFile(Path workDir, String consistentId) {
- return workDir.resolve(consistentId + ".log");
+ private static Path logFile(Path logDir, String consistentId) {
+ return logDir.resolve(consistentId + ".log");
}
/**
diff --git a/modules/cli/src/main/java/org/apache/ignite/cli/spec/NodeCommandSpec.java b/modules/cli/src/main/java/org/apache/ignite/cli/spec/NodeCommandSpec.java
index a4f9dfe..1ba83fe 100644
--- a/modules/cli/src/main/java/org/apache/ignite/cli/spec/NodeCommandSpec.java
+++ b/modules/cli/src/main/java/org/apache/ignite/cli/spec/NodeCommandSpec.java
@@ -76,7 +76,7 @@ public class NodeCommandSpec extends CategorySpec {
out.println("Starting a new Ignite node...");
- NodeManager.RunningNode node = nodeMgr.start(consistentId, ignitePaths.workDir,
+ NodeManager.RunningNode node = nodeMgr.start(consistentId, ignitePaths.logDir,
ignitePaths.cliPidsDir(),
configPath,
out);
@@ -152,7 +152,7 @@ public class NodeCommandSpec extends CategorySpec {
@Override public void run() {
IgnitePaths paths = cliPathsCfgLdr.loadIgnitePathsOrThrowError();
- List<NodeManager.RunningNode> nodes = nodeMgr.getRunningNodes(paths.workDir, paths.cliPidsDir());
+ List<NodeManager.RunningNode> nodes = nodeMgr.getRunningNodes(paths.logDir, paths.cliPidsDir());
PrintWriter out = spec.commandLine().getOut();
ColorScheme cs = spec.commandLine().getColorScheme();
diff --git a/modules/cli/src/test/java/org/apache/ignite/cli/IgniteCliInterfaceTest.java b/modules/cli/src/test/java/org/apache/ignite/cli/IgniteCliInterfaceTest.java
index 6ad95b3..42d45c0 100644
--- a/modules/cli/src/test/java/org/apache/ignite/cli/IgniteCliInterfaceTest.java
+++ b/modules/cli/src/test/java/org/apache/ignite/cli/IgniteCliInterfaceTest.java
@@ -102,6 +102,13 @@ public class IgniteCliInterfaceTest {
.setOut(new PrintWriter(out, true));
}
+ IgnitePaths ignitePaths = new IgnitePaths(
+ Path.of("bin"),
+ Path.of("work"),
+ Path.of("config"),
+ Path.of("log"),
+ "version");
+
/** */
@DisplayName("init")
@Nested
@@ -144,17 +151,12 @@ public class IgniteCliInterfaceTest {
@Test
@DisplayName("add mvn:groupId:artifact:version")
void add() {
- IgnitePaths paths = new IgnitePaths(
- Path.of("binDir"),
- Path.of("worksDir"),
- "version");
-
- when(cliPathsCfgLdr.loadIgnitePathsOrThrowError()).thenReturn(paths);
+ when(cliPathsCfgLdr.loadIgnitePathsOrThrowError()).thenReturn(ignitePaths);
var exitCode =
commandLine(applicationCtx).execute("module add mvn:groupId:artifactId:version".split(" "));
- verify(moduleMgr).addModule("mvn:groupId:artifactId:version", paths, Arrays.asList());
+ verify(moduleMgr).addModule("mvn:groupId:artifactId:version", ignitePaths, Collections.emptyList());
Assertions.assertEquals(0, exitCode);
}
@@ -164,10 +166,7 @@ public class IgniteCliInterfaceTest {
void addWithCustomRepo() throws MalformedURLException {
doNothing().when(moduleMgr).addModule(any(), any(), any());
- IgnitePaths paths = new IgnitePaths(Path.of("binDir"),
- Path.of("worksDir"), "version");
-
- when(cliPathsCfgLdr.loadIgnitePathsOrThrowError()).thenReturn(paths);
+ when(cliPathsCfgLdr.loadIgnitePathsOrThrowError()).thenReturn(ignitePaths);
var exitCode =
commandLine(applicationCtx)
@@ -175,7 +174,7 @@ public class IgniteCliInterfaceTest {
verify(moduleMgr).addModule(
"mvn:groupId:artifactId:version",
- paths,
+ ignitePaths,
Collections.singletonList(new URL("http://mvnrepo.com/repostiory")));
Assertions.assertEquals(0, exitCode);
}
@@ -186,17 +185,12 @@ public class IgniteCliInterfaceTest {
void addBuiltinModule() {
doNothing().when(moduleMgr).addModule(any(), any(), any());
- IgnitePaths paths = new IgnitePaths(
- Path.of("binDir"),
- Path.of("worksDir"),
- "version");
-
- when(cliPathsCfgLdr.loadIgnitePathsOrThrowError()).thenReturn(paths);
+ when(cliPathsCfgLdr.loadIgnitePathsOrThrowError()).thenReturn(ignitePaths);
var exitCode =
commandLine(applicationCtx).execute("module add test-module".split(" "));
- verify(moduleMgr).addModule("test-module", paths, Collections.emptyList());
+ verify(moduleMgr).addModule("test-module", ignitePaths, Collections.emptyList());
Assertions.assertEquals(0, exitCode);
}
@@ -309,8 +303,6 @@ public class IgniteCliInterfaceTest {
@Test
@DisplayName("start node1 --config conf.json")
void start() {
- var ignitePaths = new IgnitePaths(Path.of(""), Path.of(""), "version");
-
var nodeName = "node1";
var node =
@@ -327,7 +319,7 @@ public class IgniteCliInterfaceTest {
var exitCode = cli.execute(("node start " + nodeName + " --config conf.json").split(" "));
Assertions.assertEquals(0, exitCode);
- verify(nodeMgr).start(nodeName, ignitePaths.workDir, ignitePaths.cliPidsDir(), Path.of("conf.json"), cli.getOut());
+ verify(nodeMgr).start(nodeName, ignitePaths.logDir, ignitePaths.cliPidsDir(), Path.of("conf.json"), cli.getOut());
assertEquals("Starting a new Ignite node...\n\nNode is successfully started. To stop, type ignite node stop " + nodeName + "\n\n" +
"+---------------+---------+\n" +
"| Consistent ID | node1 |\n" +
@@ -343,8 +335,6 @@ public class IgniteCliInterfaceTest {
@Test
@DisplayName("stop node1")
void stopRunning() {
- var ignitePaths = new IgnitePaths(Path.of(""), Path.of(""), "version");
-
var nodeName = "node1";
when(nodeMgr.stopWait(any(), any()))
@@ -367,8 +357,6 @@ public class IgniteCliInterfaceTest {
@Test
@DisplayName("stop unknown-node")
void stopUnknown() {
- var ignitePaths = new IgnitePaths(Path.of(""), Path.of(""), "version");
-
var nodeName = "unknown-node";
when(nodeMgr.stopWait(any(), any()))
@@ -391,8 +379,6 @@ public class IgniteCliInterfaceTest {
@Test
@DisplayName("list")
void list() {
- var ignitePaths = new IgnitePaths(Path.of(""), Path.of(""), "version");
-
when(nodeMgr.getRunningNodes(any(), any()))
.thenReturn(Arrays.asList(
new NodeManager.RunningNode(1, "new1", Path.of("logFile1")),
@@ -406,7 +392,7 @@ public class IgniteCliInterfaceTest {
commandLine(applicationCtx).execute("node list".split(" "));
Assertions.assertEquals(0, exitCode);
- verify(nodeMgr).getRunningNodes(ignitePaths.workDir, ignitePaths.cliPidsDir());
+ verify(nodeMgr).getRunningNodes(ignitePaths.logDir, ignitePaths.cliPidsDir());
assertEquals("Currently, there are 2 locally running nodes.\n\n" +
"+---------------+-----+----------+\n" +
"| Consistent ID | PID | Log File |\n" +
@@ -422,10 +408,8 @@ public class IgniteCliInterfaceTest {
@Test
@DisplayName("list")
void listEmpty() {
- var ignitePaths = new IgnitePaths(Path.of(""), Path.of(""), "version");
-
when(nodeMgr.getRunningNodes(any(), any()))
- .thenReturn(Arrays.asList());
+ .thenReturn(Collections.emptyList());
when(cliPathsCfgLdr.loadIgnitePathsOrThrowError())
.thenReturn(ignitePaths);
@@ -434,7 +418,7 @@ public class IgniteCliInterfaceTest {
commandLine(applicationCtx).execute("node list".split(" "));
Assertions.assertEquals(0, exitCode);
- verify(nodeMgr).getRunningNodes(ignitePaths.workDir, ignitePaths.cliPidsDir());
+ verify(nodeMgr).getRunningNodes(ignitePaths.logDir, ignitePaths.cliPidsDir());
assertEquals("Currently, there are no locally running nodes.\n\n" +
"Use the ignite node start command to start a new node.\n", out.toString());
}
diff --git a/modules/cli/src/test/java/org/apache/ignite/cli/builtins/module/ModuleMangerTest.java b/modules/cli/src/test/java/org/apache/ignite/cli/builtins/module/ModuleMangerTest.java
index 18376e4..58eac91 100644
--- a/modules/cli/src/test/java/org/apache/ignite/cli/builtins/module/ModuleMangerTest.java
+++ b/modules/cli/src/test/java/org/apache/ignite/cli/builtins/module/ModuleMangerTest.java
@@ -77,8 +77,12 @@ public class ModuleMangerTest {
when(mavenArtifactRslvr.resolve(any(), any(), any(), any(), any())).thenReturn(
new ResolveResult(Arrays.asList(rootArtifact, depArtifact)));
- var ignitePaths = new IgnitePaths(homeDir.resolve("bin"), homeDir.resolve("work"), "n/a");
-
+ var ignitePaths = new IgnitePaths(
+ homeDir.resolve("bin"),
+ homeDir.resolve("work"),
+ homeDir.resolve("config"),
+ homeDir.resolve("log"),
+ "n/a");
moduleMgr.setOut(new PrintWriter(System.out));
moduleMgr.setColorScheme(CommandLine.Help.defaultColorScheme(CommandLine.Help.Ansi.AUTO));
moduleMgr.addModule("mvn:any-group:test-module:1.0", ignitePaths, Collections.emptyList());
@@ -97,8 +101,12 @@ public class ModuleMangerTest {
when(mavenArtifactRslvr.resolve(any(), any(), any(), any(), any())).thenReturn(
new ResolveResult(Arrays.asList(rootArtifact, depArtifact)));
- var ignitePaths = new IgnitePaths(homeDir.resolve("bin"), homeDir.resolve("work"), "n/a");
-
+ var ignitePaths = new IgnitePaths(
+ homeDir.resolve("bin"),
+ homeDir.resolve("work"),
+ homeDir.resolve("config"),
+ homeDir.resolve("log"),
+ "n/a");
moduleMgr.setOut(new PrintWriter(System.out));
moduleMgr.setColorScheme(CommandLine.Help.defaultColorScheme(CommandLine.Help.Ansi.AUTO));
moduleMgr.addModule("mvn:any-group:test-module:1.0", ignitePaths, Collections.emptyList());