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/