summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2021-09-14 17:08:12 +0200
committerHarald Musum <musum@yahooinc.com>2021-09-14 17:08:12 +0200
commit1a9d569bce5db4669033bee1963f89f2e2677e83 (patch)
treeaf076794b959e46d66aa30cf7b2bb8fea22bc247 /config
parent23087af2efb26eebe0ad2fbd383b1a3bd6ee9bfc (diff)
Update use of md5 and xxhash64 in more places
Set md5 and xxhash64 only when non-null in request and response. Update hasEqualConfig methods. Always return xxhash64 in response.
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/PayloadChecksums.java12
-rwxr-xr-xconfig/src/main/java/com/yahoo/vespa/config/RawConfig.java10
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java13
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java6
4 files changed, 33 insertions, 8 deletions
diff --git a/config/src/main/java/com/yahoo/vespa/config/PayloadChecksums.java b/config/src/main/java/com/yahoo/vespa/config/PayloadChecksums.java
index d30e5b055bc..be935043dc0 100644
--- a/config/src/main/java/com/yahoo/vespa/config/PayloadChecksums.java
+++ b/config/src/main/java/com/yahoo/vespa/config/PayloadChecksums.java
@@ -24,14 +24,20 @@ public class PayloadChecksums {
private final Map<PayloadChecksum.Type, PayloadChecksum> checksums = new LinkedHashMap<>();
private PayloadChecksums() {
- Arrays.stream(PayloadChecksum.Type.values()).forEach(type -> checksums.put(type, PayloadChecksum.empty(type)));
+ this(false);
}
- public static PayloadChecksums empty() { return new PayloadChecksums(); }
+ private PayloadChecksums(boolean addEmptyChecksumForAllTypes) {
+ if (addEmptyChecksumForAllTypes)
+ Arrays.stream(PayloadChecksum.Type.values())
+ .forEach(type -> checksums.put(type, PayloadChecksum.empty(type)));
+ }
+
+ public static PayloadChecksums empty() { return new PayloadChecksums(true); }
public static PayloadChecksums from(PayloadChecksum... checksums) {
PayloadChecksums payloadChecksums = new PayloadChecksums();
- Arrays.stream(checksums).forEach(payloadChecksums::add);
+ Arrays.stream(checksums).filter(Objects::nonNull).forEach(payloadChecksums::add);
return payloadChecksums;
}
diff --git a/config/src/main/java/com/yahoo/vespa/config/RawConfig.java b/config/src/main/java/com/yahoo/vespa/config/RawConfig.java
index 78c3fefc936..30e169e2597 100755
--- a/config/src/main/java/com/yahoo/vespa/config/RawConfig.java
+++ b/config/src/main/java/com/yahoo/vespa/config/RawConfig.java
@@ -141,7 +141,15 @@ public class RawConfig extends ConfigInstance {
* @return true if this config is equal to the config in the given request.
*/
public boolean hasEqualConfig(JRTServerConfigRequest req) {
- return getConfigMd5().equals(req.getRequestConfigMd5());
+ PayloadChecksums payloadChecksums = getPayloadChecksums();
+ PayloadChecksum xxhash64 = payloadChecksums.getForType(PayloadChecksum.Type.XXHASH64);
+ PayloadChecksum md5 = payloadChecksums.getForType(PayloadChecksum.Type.MD5);
+ if (xxhash64 != null)
+ return xxhash64.equals(req.getRequestConfigChecksums().getForType(PayloadChecksum.Type.XXHASH64));
+ if (md5 != null)
+ return md5.equals(req.getRequestConfigChecksums().getForType(PayloadChecksum.Type.MD5));
+
+ return true;
}
/**
diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java b/config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java
index 98fc7f7a50e..47d3203b32e 100644
--- a/config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java
+++ b/config/src/main/java/com/yahoo/vespa/config/protocol/ConfigResponse.java
@@ -1,6 +1,7 @@
-// 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.vespa.config.PayloadChecksum;
import com.yahoo.vespa.config.PayloadChecksums;
import com.yahoo.text.AbstractUtf8Array;
@@ -28,7 +29,15 @@ public interface ConfigResponse {
void serialize(OutputStream os, CompressionType uncompressed) throws IOException;
default boolean hasEqualConfig(JRTServerConfigRequest request) {
- return (getConfigMd5().equals(request.getRequestConfigMd5()));
+ PayloadChecksums payloadChecksums = getPayloadChecksums();
+ PayloadChecksum xxhash64 = payloadChecksums.getForType(PayloadChecksum.Type.XXHASH64);
+ PayloadChecksum md5 = payloadChecksums.getForType(PayloadChecksum.Type.MD5);
+ if (xxhash64 != null)
+ return xxhash64.equals(request.getRequestConfigChecksums().getForType(PayloadChecksum.Type.XXHASH64));
+ if (md5 != null)
+ return md5.equals(request.getRequestConfigChecksums().getForType(PayloadChecksum.Type.MD5));
+
+ return true;
}
default boolean hasNewerGeneration(JRTServerConfigRequest request) {
diff --git a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java
index 13d0ca1119a..d342e42ec03 100644
--- a/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java
+++ b/config/src/main/java/com/yahoo/vespa/config/protocol/JRTServerConfigRequestV3.java
@@ -82,8 +82,10 @@ public class JRTServerConfigRequestV3 implements JRTServerConfigRequest {
JsonGenerator jsonGenerator = createJsonGenerator(byteArrayOutputStream);
jsonGenerator.writeStartObject();
addCommonReturnValues(jsonGenerator);
- setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIG_MD5, payloadChecksums.getForType(MD5).asString());
- setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIG_XXHASH64, payloadChecksums.getForType(XXHASH64).asString());
+ if (payloadChecksums.getForType(MD5) != null)
+ setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIG_MD5, payloadChecksums.getForType(MD5).asString());
+ if (payloadChecksums.getForType(XXHASH64) != null)
+ setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIG_XXHASH64, payloadChecksums.getForType(XXHASH64).asString());
setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_CONFIG_GENERATION, generation);
setResponseField(jsonGenerator, SlimeResponseData.RESPONSE_APPLY_ON_RESTART, applyOnRestart);
jsonGenerator.writeObjectFieldStart(SlimeResponseData.RESPONSE_COMPRESSION_INFO);