summaryrefslogtreecommitdiffstats
path: root/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplication.java
diff options
context:
space:
mode:
Diffstat (limited to 'configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplication.java')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplication.java20
1 files changed, 18 insertions, 2 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplication.java b/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplication.java
index 4079a355131..04ce5b4f63a 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplication.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplication.java
@@ -31,10 +31,17 @@ public class ZKApplication {
public static final String SESSIONSTATE_ZK_SUBPATH = "/sessionState";
private final Curator curator;
private final Path appPath;
+ /** The maximum size of a ZooKeeper node */
+ private final int maxNodeSize;
- ZKApplication(Curator curator, Path appPath) {
+ ZKApplication(Curator curator, Path appPath, int maxNodeSize) {
this.curator = curator;
this.appPath = appPath;
+ this.maxNodeSize = maxNodeSize;
+ }
+
+ ZKApplication(Curator curator, Path appPath) {
+ this(curator, appPath, 10 * 1024 * 1024);
}
/**
@@ -105,13 +112,22 @@ public class ZKApplication {
}
void putData(Path path, String data) {
+ byte[] bytes = Utf8.toBytes(data);
+ ensureDataIsNotTooLarge(bytes, path);
try {
- curator.set(getFullPath(path), Utf8.toBytes(data));
+ curator.set(getFullPath(path), bytes);
} catch (RuntimeException e) {
throw new IllegalArgumentException("Could not put data to node '" + getFullPath(path) + "' in zookeeper", e);
}
}
+ private void ensureDataIsNotTooLarge(byte[] toPut, Path path) {
+ if (toPut.length >= maxNodeSize) {
+ throw new IllegalArgumentException("Error: too much zookeeper data in node: "
+ + "[" + toPut.length + " bytes] (path " + path + ")");
+ }
+ }
+
/**
* Checks if the given node exists under path under this live app
*