You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by Valentin Kulichenko <va...@gmail.com> on 2017/11/08 00:02:38 UTC

Re: Deserialization error with Ignite 2.3.0

*cross-posting to dev*

Hi Chris,

This is a regression due to this fix:
https://issues.apache.org/jira/browse/IGNITE-6485. For some reason, since
2.3 it is looking for readResolve/writeReplace methods only in exact class
that is being serialized, but not in the whole hierarchy.

*Andrey G*, since you did this change, can you please clarify it? Why isn't
it looking into parent classes anymore? Generally, readResolve/writeReplace
can reside in parent classes, so previous behavior seems to be the correct
one. Can you create a ticket to fix it back?

-Val

On Mon, Nov 6, 2017 at 7:59 PM, Chris Berry <ch...@gmail.com> wrote:

> Hi Val
>
> I have found that if I switch from
>
>     igniteConfig.setMarshaller(new BinaryMarshaller());
>
> To:
>
>     igniteConfig.setMarshaller(new
> OptimizedMarshaller().setRequireSerializable(false));
>
> Then everything works again.
>
> Although I am worried that this will have a terrible effect on performance
> (I switched to the BinaryMarshaller to get a good performance bump at the
> release of 2.0.0)
>
> I believe that all of this is because the concrete forms of the
> ImmutableList (e.g. RegularImmutableList)
> all use:
>
>   final transient Object[] array;
>
> to keep their data.
> And that the handling of transients changed for the BinaryMarshaller in
> 2.3.0
>
> Thanks for your help!!
> Cheers,
> -- Chris
>
>
>
>
> Thanks,
> -- Chris
>
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>

Re: Deserialization error with Ignite 2.3.0

Posted by Valentin Kulichenko <va...@gmail.com>.
Andrey,

This ticket seems to be about the same issue:
https://issues.apache.org/jira/browse/IGNITE-6944

Can you please take a look and provide your thoughts?

-Val

On Tue, Nov 7, 2017 at 4:02 PM, Valentin Kulichenko <
valentin.kulichenko@gmail.com> wrote:

> *cross-posting to dev*
>
> Hi Chris,
>
> This is a regression due to this fix: https://issues.apache.
> org/jira/browse/IGNITE-6485. For some reason, since 2.3 it is looking for
> readResolve/writeReplace methods only in exact class that is being
> serialized, but not in the whole hierarchy.
>
> *Andrey G*, since you did this change, can you please clarify it? Why
> isn't it looking into parent classes anymore? Generally,
> readResolve/writeReplace can reside in parent classes, so previous behavior
> seems to be the correct one. Can you create a ticket to fix it back?
>
> -Val
>
> On Mon, Nov 6, 2017 at 7:59 PM, Chris Berry <ch...@gmail.com> wrote:
>
>> Hi Val
>>
>> I have found that if I switch from
>>
>>     igniteConfig.setMarshaller(new BinaryMarshaller());
>>
>> To:
>>
>>     igniteConfig.setMarshaller(new
>> OptimizedMarshaller().setRequireSerializable(false));
>>
>> Then everything works again.
>>
>> Although I am worried that this will have a terrible effect on performance
>> (I switched to the BinaryMarshaller to get a good performance bump at the
>> release of 2.0.0)
>>
>> I believe that all of this is because the concrete forms of the
>> ImmutableList (e.g. RegularImmutableList)
>> all use:
>>
>>   final transient Object[] array;
>>
>> to keep their data.
>> And that the handling of transients changed for the BinaryMarshaller in
>> 2.3.0
>>
>> Thanks for your help!!
>> Cheers,
>> -- Chris
>>
>>
>>
>>
>> Thanks,
>> -- Chris
>>
>>
>>
>>
>> --
>> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>>
>
>

Re: Deserialization error with Ignite 2.3.0

Posted by Valentin Kulichenko <va...@gmail.com>.
Andrey,

This ticket seems to be about the same issue:
https://issues.apache.org/jira/browse/IGNITE-6944

Can you please take a look and provide your thoughts?

-Val

On Tue, Nov 7, 2017 at 4:02 PM, Valentin Kulichenko <
valentin.kulichenko@gmail.com> wrote:

> *cross-posting to dev*
>
> Hi Chris,
>
> This is a regression due to this fix: https://issues.apache.
> org/jira/browse/IGNITE-6485. For some reason, since 2.3 it is looking for
> readResolve/writeReplace methods only in exact class that is being
> serialized, but not in the whole hierarchy.
>
> *Andrey G*, since you did this change, can you please clarify it? Why
> isn't it looking into parent classes anymore? Generally,
> readResolve/writeReplace can reside in parent classes, so previous behavior
> seems to be the correct one. Can you create a ticket to fix it back?
>
> -Val
>
> On Mon, Nov 6, 2017 at 7:59 PM, Chris Berry <ch...@gmail.com> wrote:
>
>> Hi Val
>>
>> I have found that if I switch from
>>
>>     igniteConfig.setMarshaller(new BinaryMarshaller());
>>
>> To:
>>
>>     igniteConfig.setMarshaller(new
>> OptimizedMarshaller().setRequireSerializable(false));
>>
>> Then everything works again.
>>
>> Although I am worried that this will have a terrible effect on performance
>> (I switched to the BinaryMarshaller to get a good performance bump at the
>> release of 2.0.0)
>>
>> I believe that all of this is because the concrete forms of the
>> ImmutableList (e.g. RegularImmutableList)
>> all use:
>>
>>   final transient Object[] array;
>>
>> to keep their data.
>> And that the handling of transients changed for the BinaryMarshaller in
>> 2.3.0
>>
>> Thanks for your help!!
>> Cheers,
>> -- Chris
>>
>>
>>
>>
>> Thanks,
>> -- Chris
>>
>>
>>
>>
>> --
>> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>>
>
>

Re: Deserialization error with Ignite 2.3.0

Posted by Chris Berry <ch...@gmail.com>.
Thanks Val.

BTW: It would be pretty easy to write a unit test for this.
1) Create an Instance (A) of a class that contains an ImmutableList<String>
foo;
2) Create a cache of these
3) Using the BinaryMarshaler -- put(A), then get(A)
4) Walk the items in foo. (I will not blow up unless you access elements of
foo)

thanks,
-- Chris 



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/