From 17a5bfe8a297e8e1066b02004e4266f6f7fa59f7 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 23 Mar 2020 15:45:43 -0400 Subject: [PATCH 1/4] Reenable BWC tests after backport of #53793 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 63c1d15eccbd4..17cd5f6b93cd0 100644 --- a/build.gradle +++ b/build.gradle @@ -222,8 +222,8 @@ task verifyVersions { * after the backport of the backcompat code is complete. */ -boolean bwc_tests_enabled = false -final String bwc_tests_disabled_issue = "https://github.com/elastic/elasticsearch/pull/53793" /* place a PR link here when committing bwc changes */ +boolean bwc_tests_enabled = true +final String bwc_tests_disabled_issue = "" /* place a PR link here when committing bwc changes */ if (bwc_tests_enabled == false) { if (bwc_tests_disabled_issue.isEmpty()) { throw new GradleException("bwc_tests_disabled_issue must be set when bwc_tests_enabled == false") From 41c374bb5033e604ecdc1cf8db0b80c95caf4328 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 23 Mar 2020 16:44:46 -0400 Subject: [PATCH 2/4] WIP --- .../common/io/stream/DelayableWriteable.java | 7 ++--- .../io/stream/DelayableWriteableTests.java | 27 +++++++++++++++++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/org/elasticsearch/common/io/stream/DelayableWriteable.java b/server/src/main/java/org/elasticsearch/common/io/stream/DelayableWriteable.java index e75b81fff4ef4..b27010017e5ee 100644 --- a/server/src/main/java/org/elasticsearch/common/io/stream/DelayableWriteable.java +++ b/server/src/main/java/org/elasticsearch/common/io/stream/DelayableWriteable.java @@ -19,12 +19,12 @@ package org.elasticsearch.common.io.stream; -import org.elasticsearch.Version; -import org.elasticsearch.common.bytes.BytesReference; - import java.io.IOException; import java.util.function.Supplier; +import org.elasticsearch.Version; +import org.elasticsearch.common.bytes.BytesReference; + /** * A holder for {@link Writeable}s that can delays reading the underlying * {@linkplain Writeable} when it is read from a remote node. @@ -60,6 +60,7 @@ private static class Referencing extends DelayableWriteable @Override public void writeTo(StreamOutput out) throws IOException { try (BytesStreamOutput buffer = new BytesStreamOutput()) { + buffer.setVersion(out.getVersion()); reference.writeTo(buffer); out.writeBytesReference(buffer.bytes()); } diff --git a/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java b/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java index fbd8702608ead..9d60ca24b867b 100644 --- a/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java +++ b/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java @@ -30,7 +30,7 @@ public class DelayableWriteableTests extends ESTestCase { // NOTE: we don't use AbstractWireSerializingTestCase because we don't implement equals and hashCode. - public static class Example implements NamedWriteable { + private static class Example implements NamedWriteable { private final String s; public Example(String s) { @@ -66,7 +66,7 @@ public int hashCode() { } } - public static class NamedHolder implements Writeable { + private static class NamedHolder implements Writeable { private final Example e; public NamedHolder(Example e) { @@ -97,6 +97,23 @@ public int hashCode() { } } + private static class SneakOtherSideVersionOnWire implements Writeable { + private final Version version; + + public SneakOtherSideVersionOnWire() { + version = Version.CURRENT; + } + + public SneakOtherSideVersionOnWire(StreamInput in) throws IOException { + version = Version.readVersion(in); + } + + @Override + public void writeTo(StreamOutput out) throws IOException { + Version.writeVersion(out.getVersion(), out); + } + } + public void testRoundTripFromReferencing() throws IOException { Example e = new Example(randomAlphaOfLength(5)); DelayableWriteable original = DelayableWriteable.referencing(e); @@ -139,6 +156,12 @@ public void testRoundTripFromDelayedFromOldVersionWithNamedWriteable() throws IO roundTripTestCase(original, NamedHolder::new); } + public void testSerializesWithRemoteVersion() throws IOException { + Version remoteVersion = VersionUtils.randomCompatibleVersion(random(), Version.CURRENT); + DelayableWriteable original = DelayableWriteable.referencing(new SneakOtherSideVersionOnWire()); + assertThat(roundTrip(original, SneakOtherSideVersionOnWire::new, remoteVersion).get().version, equalTo(remoteVersion)); + } + private void roundTripTestCase(DelayableWriteable original, Writeable.Reader reader) throws IOException { DelayableWriteable roundTripped = roundTrip(original, reader, Version.CURRENT); assertTrue(roundTripped.isDelayed()); From db705c5c46567122a1eca35a1cbe31016272ea47 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 23 Mar 2020 17:59:31 -0400 Subject: [PATCH 3/4] Checkstyl --- .../common/io/stream/DelayableWriteableTests.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java b/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java index 9d60ca24b867b..5b900f746cae5 100644 --- a/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java +++ b/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java @@ -19,14 +19,14 @@ package org.elasticsearch.common.io.stream; -import org.elasticsearch.Version; -import org.elasticsearch.test.ESTestCase; -import org.elasticsearch.test.VersionUtils; +import static java.util.Collections.singletonList; +import static org.hamcrest.Matchers.equalTo; import java.io.IOException; -import static java.util.Collections.singletonList; -import static org.hamcrest.Matchers.equalTo; +import org.elasticsearch.Version; +import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.test.VersionUtils; public class DelayableWriteableTests extends ESTestCase { // NOTE: we don't use AbstractWireSerializingTestCase because we don't implement equals and hashCode. From 2cd3b55893188020dd842f6be90c7f43cc85cca2 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 23 Mar 2020 18:01:11 -0400 Subject: [PATCH 4/4] Checkstyle --- .../common/io/stream/DelayableWriteableTests.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java b/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java index 5b900f746cae5..d12a15c1a7207 100644 --- a/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java +++ b/server/src/test/java/org/elasticsearch/common/io/stream/DelayableWriteableTests.java @@ -33,11 +33,11 @@ public class DelayableWriteableTests extends ESTestCase { private static class Example implements NamedWriteable { private final String s; - public Example(String s) { + Example(String s) { this.s = s; } - public Example(StreamInput in) throws IOException { + Example(StreamInput in) throws IOException { s = in.readString(); } @@ -69,11 +69,11 @@ public int hashCode() { private static class NamedHolder implements Writeable { private final Example e; - public NamedHolder(Example e) { + NamedHolder(Example e) { this.e = e; } - public NamedHolder(StreamInput in) throws IOException { + NamedHolder(StreamInput in) throws IOException { e = in.readNamedWriteable(Example.class); } @@ -100,11 +100,11 @@ public int hashCode() { private static class SneakOtherSideVersionOnWire implements Writeable { private final Version version; - public SneakOtherSideVersionOnWire() { + SneakOtherSideVersionOnWire() { version = Version.CURRENT; } - public SneakOtherSideVersionOnWire(StreamInput in) throws IOException { + SneakOtherSideVersionOnWire(StreamInput in) throws IOException { version = Version.readVersion(in); }