[ 
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)

Reply via email to