[
https://issues.apache.org/jira/browse/CURATOR-394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15942106#comment-15942106
]
ASF GitHub Bot commented on CURATOR-394:
----------------------------------------
Github user Randgalt commented on a diff in the pull request:
https://github.com/apache/curator/pull/208#discussion_r108050526
--- Diff:
curator-x-discovery/src/main/java/org/apache/curator/x/discovery/details/JsonInstanceSerializer.java
---
@@ -16,30 +16,57 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.curator.x.discovery.details;
+import com.google.common.annotations.VisibleForTesting;
import org.apache.curator.x.discovery.ServiceInstance;
+import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.JavaType;
-import java.io.ByteArrayOutputStream;
/**
* A serializer that uses Jackson to serialize/deserialize as JSON.
IMPORTANT: The instance
* payload must support Jackson
*/
public class JsonInstanceSerializer<T> implements InstanceSerializer<T>
{
- private final ObjectMapper mapper;
- private final Class<T> payloadClass;
- private final JavaType type;
+ private final ObjectMapper mapper;
+ private final Class<T> payloadClass;
+ private final boolean compatibleSerializationMode;
+ private final JavaType type;
/**
* @param payloadClass used to validate payloads when deserializing
*/
public JsonInstanceSerializer(Class<T> payloadClass)
{
+ this(payloadClass, false, false);
--- End diff --
Hmm - that's a good point.
> UnrecognizedPropertyException: "enabled" incompatibility
> --------------------------------------------------------
>
> Key: CURATOR-394
> URL: https://issues.apache.org/jira/browse/CURATOR-394
> Project: Apache Curator
> Issue Type: Bug
> Components: Recipes
> Affects Versions: 2.12.0
> Reporter: Gian Merlino
>
> When doing a rolling upgrade of our services from Curator 2.10.0 to Curator
> 2.12.0 we noticed some of the non-upgraded services started throwing this
> error. The cause seems to the combination of a new field added to
> ServiceInstance in CURATOR-275, and the lack of an "ignore unknown
> properties" setting on the ObjectMapper used by Curator 2.10.0.
> This makes it so clients need to be upgraded before services. But if you have
> a cluster where some services are also clients of other services (or of a
> service they are a part of) then I don't see a way to do a rolling upgrade
> with the way things currently are. Whatever instance you upgrade first will
> start announcing itself in a way that breaks instances running the previous
> version of the code. This doesn't seem to be configurable either, so the new
> "enabled" field can't be omitted from the serialized form.
> One possible solution is to revert CURATOR-275, add an "ignore unknown
> properties" to the ObjectMapper, and then re-introduce CURATOR-275 in a
> future release. That'd create a "you must go through release X first to
> upgrade to release Y" situation, but it would at least make it possible to do
> rolling updates.
> Another possible solution is to accept that clients always need to be
> upgraded before services, and accept that if you can't do this, it's
> impossible to update without downtime. This seems like something that'd be
> good to avoid though.
> {code}
> 2017-03-23 16:22:35,652
> [DruidTaskResolver[com.metamx.tranquility.druid.IndexService@37a0ec3c]] WARN
> c.m.t.finagle.DruidTaskResolver - Poll failed, trying again
> at[2017-03-23T16:23:10.899Z].
> org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized
> field "enabled" (Class org.apache.curator.x.discovery.ServiceInstance), not
> marked as ignorable
> at [Source: [B@e9cde06; line: 1, column: 226] (through reference chain:
> org.apache.curator.x.discovery.ServiceInstance["enabled"])
> at
> org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:659)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1365)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.deser.BeanDeserializer._handleUnknown(BeanDeserializer.java:725)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:703)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1973)
> ~[org.codehaus.jackson.jackson-mapper-asl-1.9.13.jar:1.9.13]
> at
> org.apache.curator.x.discovery.details.JsonInstanceSerializer.deserialize(JsonInstanceSerializer.java:50)
> ~[org.apache.curator.curator-x-discovery-2.10.0.jar:na]
> at
> org.apache.curator.x.discovery.details.ServiceCacheImpl.addInstance(ServiceCacheImpl.java:193)
> ~[org.apache.curator.curator-x-discovery-2.10.0.jar:na]
> at
> org.apache.curator.x.discovery.details.ServiceCacheImpl.start(ServiceCacheImpl.java:96)
> ~[org.apache.curator.curator-x-discovery-2.10.0.jar:na]
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)