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 /configserver | |
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 'configserver')
2 files changed, 21 insertions, 19 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactory.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactory.java index 8c1cdeb753a..0afab85df12 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactory.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactory.java @@ -50,22 +50,23 @@ public interface ConfigResponseFactory { default PayloadChecksums generatePayloadChecksums(AbstractUtf8Array rawPayload, PayloadChecksums requestsPayloadChecksums) { PayloadChecksum requestChecksumMd5 = requestsPayloadChecksums.getForType(MD5); PayloadChecksum requestChecksumXxhash64 = requestsPayloadChecksums.getForType(XXHASH64); + PayloadChecksum xxhash64 = new PayloadChecksum(ConfigUtils.getXxhash64(rawPayload), XXHASH64); - PayloadChecksum md5 = PayloadChecksum.empty(MD5); - PayloadChecksum xxhash64 = PayloadChecksum.empty(XXHASH64); - // Response contains same checksum type as in request, except when both are empty, - // then use both checksum types in response - if (requestChecksumMd5.isEmpty() && requestChecksumXxhash64.isEmpty() - || ( ! requestChecksumMd5.isEmpty() && ! requestChecksumXxhash64.isEmpty())) { - md5 = new PayloadChecksum(ConfigUtils.getMd5(rawPayload), MD5); - xxhash64 = new PayloadChecksum(ConfigUtils.getXxhash64(rawPayload), XXHASH64); - } else if ( ! requestChecksumMd5.isEmpty()) { + if (requestChecksumMd5 == null) + return PayloadChecksums.from(xxhash64); + + // Return xxhash64 checksum, even if none in request + if (requestChecksumXxhash64 == null) + return PayloadChecksums.from(new PayloadChecksum(ConfigUtils.getMd5(rawPayload), MD5), xxhash64); + + // Response always contains xxhash64 checksum, md5 checksum is included + // when both are present, both are absent or only md5 is present in request + PayloadChecksum md5 = null; + if (( ! requestChecksumMd5.isEmpty() && ! requestChecksumXxhash64.isEmpty()) + || (requestChecksumMd5.isEmpty() && requestChecksumXxhash64.isEmpty())) { md5 = new PayloadChecksum(ConfigUtils.getMd5(rawPayload), MD5); - } else if (requestChecksumMd5.isEmpty() && !requestChecksumXxhash64.isEmpty()) { - xxhash64 = new PayloadChecksum(ConfigUtils.getXxhash64(rawPayload), XXHASH64); - } else { + } else if (! requestChecksumMd5.isEmpty() && requestChecksumXxhash64.isEmpty()) { md5 = new PayloadChecksum(ConfigUtils.getMd5(rawPayload), MD5); - xxhash64 = new PayloadChecksum(ConfigUtils.getXxhash64(rawPayload), XXHASH64); } return PayloadChecksums.from(md5, xxhash64); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactoryTest.java index b164c3e5cd5..47094abb910 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactoryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactoryTest.java @@ -12,6 +12,7 @@ import org.junit.Test; import static com.yahoo.vespa.config.PayloadChecksum.Type.MD5; import static com.yahoo.vespa.config.PayloadChecksum.Type.XXHASH64; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; /** * @author Ulf Lilleengen @@ -39,30 +40,30 @@ public class ConfigResponseFactoryTest { @Test public void testLZ4CompressedFactory() { - // Both checksums in request + // md5 and xxhash64 checksums in request, both md5 and xxhash64 checksums should be in response { ConfigResponse response = createResponse(payloadChecksums); assertEquals(payloadChecksums, response.getPayloadChecksums()); } - // No checksums in request (empty checksums), both checksums should be in response + // Empty md5 and xxhash64 checksums in request, both md5 and xxhash64 checksum should be in response { ConfigResponse response = createResponse(payloadChecksumsEmpty); assertEquals(payloadChecksums.getForType(MD5), response.getPayloadChecksums().getForType(MD5)); assertEquals(payloadChecksums.getForType(XXHASH64), response.getPayloadChecksums().getForType(XXHASH64)); } - // Only md5 checksums in request + // md5 checksum and no xxhash64 checksum in request, md5 and xxhash6 checksum in response { ConfigResponse response = createResponse(payloadChecksumsOnlyMd5); assertEquals(payloadChecksumsOnlyMd5.getForType(MD5), response.getPayloadChecksums().getForType(MD5)); - assertEquals(payloadChecksumsOnlyMd5.getForType(XXHASH64), response.getPayloadChecksums().getForType(XXHASH64)); + assertEquals(payloadChecksums.getForType(XXHASH64), response.getPayloadChecksums().getForType(XXHASH64)); } - // Only xxhash64 checksums in request + // Only xxhash64 checksum in request, only xxhash64 checksums in response { ConfigResponse response = createResponse(payloadChecksumsOnlyXxhash64); - assertEquals(payloadChecksumsOnlyXxhash64.getForType(MD5), response.getPayloadChecksums().getForType(MD5)); + assertNull(response.getPayloadChecksums().getForType(MD5)); assertEquals(payloadChecksumsOnlyXxhash64.getForType(XXHASH64), response.getPayloadChecksums().getForType(XXHASH64)); } } |