summaryrefslogtreecommitdiffstats
path: root/node-admin/src/main
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@verizonmedia.com>2019-06-14 20:04:36 +0200
committerHåkon Hallingstad <hakon@verizonmedia.com>2019-06-14 20:04:36 +0200
commitbb109275b0c35f88eed0808f2cbe26daaedc37d3 (patch)
tree1a474f720ee53936ef63d9e4bb0eb4982ca29e1f /node-admin/src/main
parentf7137cf256adcebf6a54d6e3f49a18c2b9c4e436 (diff)
Introduce StoredBoolean
Diffstat (limited to 'node-admin/src/main')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/StoredBoolean.java45
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java16
2 files changed, 61 insertions, 0 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/StoredBoolean.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/StoredBoolean.java
new file mode 100644
index 00000000000..8edf5f7dcbd
--- /dev/null
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/StoredBoolean.java
@@ -0,0 +1,45 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.node.admin.task.util.file;
+
+import com.yahoo.vespa.hosted.node.admin.component.TaskContext;
+
+import java.nio.file.Path;
+import java.util.logging.Logger;
+
+/**
+ * Class wrapping a boolean stored on disk.
+ *
+ * <p>The implementation is compatible with {@link StoredInteger} when absence or 0 means false.
+ *
+ * @author hakonhall
+ */
+public class StoredBoolean {
+ private static Logger logger = Logger.getLogger(StoredBoolean.class.getName());
+
+ private final UnixPath path;
+
+ /** The parent directory must exist. Value is false by default. */
+ public StoredBoolean(Path path) {
+ this.path = new UnixPath(path);
+ }
+
+ public boolean value() {
+ return path.readUtf8FileIfExists().map(String::trim).map(s -> !"0".equals(s)).orElse(false);
+ }
+
+ /** Sets value to true. */
+ public void set(TaskContext context) {
+ if (!value()) {
+ context.log(logger, "Writes " + path);
+ path.writeUtf8File("1");
+ }
+ }
+
+ /** Sets value to false. */
+ public void clear(TaskContext context) {
+ if (value()) {
+ context.log(logger, "Deletes " + path);
+ path.deleteIfExists();
+ }
+ }
+}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java
index 1d0299ae272..cd008c5bdfc 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java
@@ -1,6 +1,8 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.node.admin.task.util.file;
+import org.eclipse.jetty.io.RuntimeIOException;
+
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
@@ -50,10 +52,24 @@ public class UnixPath {
return path;
}
+ public boolean exists() {
+ return Files.exists(path);
+ }
+
public String readUtf8File() {
return new String(readBytes(), StandardCharsets.UTF_8);
}
+ public Optional<String> readUtf8FileIfExists() {
+ try {
+ return Optional.of(new String(Files.readAllBytes(path), StandardCharsets.UTF_8));
+ } catch (NoSuchFileException ignored) {
+ return Optional.empty();
+ } catch (IOException e) {
+ throw new RuntimeIOException(e);
+ }
+ }
+
public byte[] readBytes() {
return uncheck(() -> Files.readAllBytes(path));
}