diff options
author | Harald Musum <musum@yahooinc.com> | 2021-09-14 17:08:12 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2021-09-14 17:08:12 +0200 |
commit | 1a9d569bce5db4669033bee1963f89f2e2677e83 (patch) | |
tree | af076794b959e46d66aa30cf7b2bb8fea22bc247 /config/src | |
parent | 23087af2efb26eebe0ad2fbd383b1a3bd6ee9bfc (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/src')
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); |