summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2021-09-06 13:34:47 +0200
committerHarald Musum <musum@yahooinc.com>2021-09-06 13:34:47 +0200
commit1a3c160d18189a6849cfafe5da39b5c5bd70939e (patch)
tree7562fce315a87361a613cb1ab96fb79f9b1d9f1d /config
parenta1d3c3e20074c6a3487b1043d4d1be57706f6d80 (diff)
Add class for payload checksum
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java27
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java7
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java6
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java18
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/PayloadChecksum.java24
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java6
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java3
-rw-r--r--config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java6
-rw-r--r--config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java5
9 files changed, 65 insertions, 37 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
index 3c7a8e794d3..53a9f3f9f94 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
@@ -40,28 +40,31 @@ public abstract class ConfigSubscription<T extends ConfigInstance> {
private final T config;
private final Long generation;
private final boolean applyOnRestart;
+ private final PayloadChecksum payloadChecksum;
private ConfigState(boolean generationChanged,
Long generation,
boolean applyOnRestart,
boolean configChanged,
- T config) {
+ T config,
+ PayloadChecksum payloadChecksum) {
this.generationChanged = generationChanged;
this.generation = generation;
this.applyOnRestart = applyOnRestart;
this.configChanged = configChanged;
this.config = config;
+ this.payloadChecksum = payloadChecksum;
}
- private ConfigState(Long generation, T config) {
- this(false, generation, false, false, config);
+ private ConfigState(Long generation, T config, PayloadChecksum payloadChecksum) {
+ this(false, generation, false, false, config, payloadChecksum);
}
private ConfigState() {
- this(false, 0L, false, false, null);
+ this(false, 0L, false, false, null, PayloadChecksum.empty());
}
- private ConfigState<T> createUnchanged() { return new ConfigState<>(generation, config); }
+ private ConfigState<T> createUnchanged() { return new ConfigState<>(generation, config, payloadChecksum); }
public boolean isConfigChanged() { return configChanged; }
@@ -73,6 +76,8 @@ public abstract class ConfigSubscription<T extends ConfigInstance> {
public T getConfig() { return config; }
+ public PayloadChecksum getChecksum() { return payloadChecksum; }
+
}
/**
@@ -190,8 +195,8 @@ public abstract class ConfigSubscription<T extends ConfigInstance> {
return !prev.getGeneration().equals(requiredGen) || prev.isConfigChanged();
}
- void setConfig(Long generation, boolean applyOnRestart, T config) {
- this.config.set(new ConfigState<>(true, generation, applyOnRestart, true, config));
+ void setConfig(Long generation, boolean applyOnRestart, T config, PayloadChecksum payloadChecksum) {
+ this.config.set(new ConfigState<>(true, generation, applyOnRestart, true, config, payloadChecksum));
}
/**
@@ -199,22 +204,22 @@ public abstract class ConfigSubscription<T extends ConfigInstance> {
*/
protected void setConfigIncGen(T config) {
ConfigState<T> prev = this.config.get();
- this.config.set(new ConfigState<>(true, prev.getGeneration() + 1, prev.applyOnRestart(), true, config));
+ this.config.set(new ConfigState<>(true, prev.getGeneration() + 1, prev.applyOnRestart(), true, config, prev.payloadChecksum));
}
protected void setConfigIfChanged(T config) {
ConfigState<T> prev = this.config.get();
- this.config.set(new ConfigState<>(true, prev.getGeneration(), prev.applyOnRestart(), !config.equals(prev.getConfig()), config));
+ this.config.set(new ConfigState<>(true, prev.getGeneration(), prev.applyOnRestart(), !config.equals(prev.getConfig()), config, prev.payloadChecksum));
}
void setGeneration(Long generation) {
ConfigState<T> prev = config.get();
- this.config.set(new ConfigState<>(true, generation, prev.applyOnRestart(), prev.isConfigChanged(), prev.getConfig()));
+ this.config.set(new ConfigState<>(true, generation, prev.applyOnRestart(), prev.isConfigChanged(), prev.getConfig(), prev.payloadChecksum));
}
void setApplyOnRestart(boolean applyOnRestart) {
ConfigState<T> prev = config.get();
- this.config.set(new ConfigState<>(prev.isGenerationChanged(), prev.getGeneration(), applyOnRestart, prev.isConfigChanged(), prev.getConfig()));
+ this.config.set(new ConfigState<>(prev.isGenerationChanged(), prev.getGeneration(), applyOnRestart, prev.isConfigChanged(), prev.getConfig(), prev.payloadChecksum));
}
/**
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
index b052c79f429..05d4a33c02a 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
@@ -1,8 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.subscription.impl;
-import java.util.List;
-
import com.yahoo.config.subscription.ConfigSource;
import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.vespa.config.ConfigKey;
@@ -11,6 +9,8 @@ import com.yahoo.vespa.config.TimingValues;
import com.yahoo.vespa.config.protocol.DefContent;
import com.yahoo.vespa.config.protocol.JRTClientConfigRequest;
+import java.util.List;
+
import static java.util.logging.Level.FINE;
/**
@@ -32,7 +32,8 @@ public class GenericJRTConfigSubscription extends JRTConfigSubscription<RawConfi
@Override
protected void setNewConfig(JRTClientConfigRequest jrtReq) {
- setConfig(jrtReq.getNewGeneration(), jrtReq.responseIsApplyOnRestart(), RawConfig.createFromResponseParameters(jrtReq) );
+ RawConfig rawConfig = RawConfig.createFromResponseParameters(jrtReq);
+ setConfig(jrtReq.getNewGeneration(), jrtReq.responseIsApplyOnRestart(), rawConfig, new PayloadChecksum(jrtReq.getNewConfigMd5()));
log.log(FINE, () -> "in setNewConfig, config=" + this.getConfigState().getConfig());
}
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
index b48e5905239..b06f986555c 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.subscription.impl;
import com.yahoo.config.ConfigInstance;
@@ -111,7 +111,7 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
} catch (IllegalArgumentException e) {
badConfigE = e;
}
- setConfig(jrtReq.getNewGeneration(), jrtReq.responseIsApplyOnRestart(), configInstance);
+ setConfig(jrtReq.getNewGeneration(), jrtReq.responseIsApplyOnRestart(), configInstance, new PayloadChecksum(jrtReq.getNewConfigMd5()));
if (badConfigE != null) {
throw new IllegalArgumentException("Bad config from jrt", badConfigE);
}
@@ -129,7 +129,7 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
Payload payload = jrtRequest.getNewPayload();
ConfigPayload configPayload = ConfigPayload.fromUtf8Array(payload.withCompression(CompressionType.UNCOMPRESSED).getData());
T configInstance = configPayload.toInstance(configClass, jrtRequest.getConfigKey().getConfigId());
- configInstance.setConfigMd5(jrtRequest.getNewConfigMd5());
+ configInstance.setConfigMd5(jrtRequest.getNewConfigMd5()); // Note: Sets configmd5 in ConfigInstance
return configInstance;
}
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java
index 992f59bdece..b7198b0c694 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/JarConfigSubscription.java
@@ -1,14 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.subscription.impl;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
-import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
-
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.ConfigurationRuntimeException;
import com.yahoo.config.subscription.CfgConfigPayloadBuilder;
@@ -18,6 +10,14 @@ import com.yahoo.io.IOUtils;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.ConfigPayload;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+
/**
* Subscription to use when config id is jar:.../foo.jar[!/pathInJar/]
*
@@ -63,7 +63,7 @@ public class JarConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
} catch (IOException e) {
throw new ConfigurationRuntimeException(e);
}
- setConfig(0L, false, config);
+ setConfig(0L, false, config, PayloadChecksum.empty());
try {
jarFile.close();
} catch (IOException e) {
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/PayloadChecksum.java b/config/src/main/java/com/yahoo/config/subscription/impl/PayloadChecksum.java
new file mode 100644
index 00000000000..e2af5132d92
--- /dev/null
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/PayloadChecksum.java
@@ -0,0 +1,24 @@
+package com.yahoo.config.subscription.impl;
+
+public class PayloadChecksum {
+
+
+ private final String checksum;
+ private final Type type;
+
+ public PayloadChecksum(String checksum) {
+ this.checksum = checksum;
+ this.type = Type.MD5;
+ }
+
+ public static PayloadChecksum empty() {
+ return new PayloadChecksum("");
+ }
+
+ public String asString() { return checksum; }
+
+ public Type type() { return type; }
+
+ enum Type { MD5, XXHASH64 /* not in use yet */ }
+
+}
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java
index 68ff6bb0135..91b674da3d2 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/RawConfigSubscription.java
@@ -1,8 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.subscription.impl;
-import java.util.Arrays;
-
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.subscription.CfgConfigPayloadBuilder;
import com.yahoo.config.subscription.ConfigInterruptedException;
@@ -10,6 +8,8 @@ import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.ConfigPayload;
+import java.util.Arrays;
+
/**
* Subscription used when config id is raw:...
* <p>
@@ -35,7 +35,7 @@ public class RawConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
if (payload == null) {
payload = inputPayload;
ConfigPayload configPayload = new CfgConfigPayloadBuilder().deserialize(Arrays.asList(payload.split("\n")));
- setConfig(0L, false, configPayload.toInstance(configClass, key.getConfigId()));
+ setConfig(0L, false, configPayload.toInstance(configClass, key.getConfigId()), PayloadChecksum.empty());
return true;
}
try {
diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java
index 87e63399fc3..23e3259ff8b 100644
--- a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java
+++ b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTClientConfigRequestV3.java
@@ -110,11 +110,10 @@ public class JRTClientConfigRequestV3 implements JRTClientConfigRequest {
CompressionType compressionType,
Optional<VespaVersion> vespaVersion) {
ConfigSubscription.ConfigState<T> configState = sub.getConfigState();
- T config = configState.getConfig();
return createWithParams(sub.getKey(),
sub.getDefContent(),
ConfigUtils.getCanonicalHostName(),
- config != null ? config.getConfigMd5() : "",
+ configState.getChecksum().asString(),
configState.getGeneration(),
sub.timingValues().getSubscribeTimeout(),
trace,
diff --git a/config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java b/config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java
index bf516bee8a9..7bdaeb7d367 100644
--- a/config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/impl/JRTConfigRequesterTest.java
@@ -139,7 +139,7 @@ public class JRTConfigRequesterTest {
ConfigSubscriber subscriber = new ConfigSubscriber();
final TimingValues timingValues = getTestTimingValues();
JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
- sub.setConfig(1L, false, config());
+ sub.setConfig(1L, false, config(), PayloadChecksum.empty());
final MockConnection connection = new MockConnection(new ErrorResponseHandler());
JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
@@ -165,7 +165,7 @@ public class JRTConfigRequesterTest {
ConfigSubscriber subscriber = new ConfigSubscriber();
final TimingValues timingValues = getTestTimingValues();
JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
- sub.setConfig(1L, false, config());
+ sub.setConfig(1L, false, config(), PayloadChecksum.empty());
final MockConnection connection = new MockConnection(new ErrorResponseHandler(com.yahoo.jrt.ErrorCode.TIMEOUT));
JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
@@ -179,7 +179,7 @@ public class JRTConfigRequesterTest {
ConfigSubscriber subscriber = new ConfigSubscriber();
final TimingValues timingValues = getTestTimingValues();
JRTConfigSubscription<SimpletypesConfig> sub = createSubscription(subscriber, timingValues);
- sub.setConfig(1L, false, config());
+ sub.setConfig(1L, false, config(), PayloadChecksum.empty());
final MockConnection connection = new MockConnection(new ErrorResponseHandler(ErrorCode.UNKNOWN_DEFINITION));
JRTConfigRequester requester = new JRTConfigRequester(connection, timingValues);
diff --git a/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java b/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java
index 006a6fc6a0a..b67a9ef0fb8 100644
--- a/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java
+++ b/config/src/test/java/com/yahoo/vespa/config/protocol/JRTConfigRequestV3Test.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.protocol;
import com.yahoo.config.subscription.ConfigSet;
@@ -201,8 +201,7 @@ public class JRTConfigRequestV3Test {
assertTrue(sub.nextConfig(120_0000));
sub.close();
JRTClientConfigRequest nextReq = createReq(sub, Trace.createNew());
- SimpletypesConfig config = sub.getConfigState().getConfig();
- assertThat(nextReq.getRequestConfigMd5(), is(config.getConfigMd5()));
+ assertThat(nextReq.getRequestConfigMd5(), is(sub.getConfigState().getChecksum().asString()));
assertThat(nextReq.getRequestGeneration(), is(currentGeneration));
}