Hello!

Does this still happen if you get rid of Serializable, readObject,
writeObject?

Regards,
-- 
Ilya Kasnacheev


ср, 2 дек. 2020 г. в 09:58, Surkov.Aleksandr <ale...@bk.ru>:

> Hi igniters!
>
> We use third party classes and store them objects in key-value cache.
> This class implements the Serializable interface and defines the readObject
> and writeObject methods.
>
> After we decided to switch to a new version of the class and tried to read
> from the cache, we received an error:
>
> Exception in thread "main" javax.cache.CacheException: class
> org.apache.ignite.IgniteCheckedException: Failed to unmarshal object with
> optimized marshaller
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1317)
>                 at
>
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.cacheException(IgniteCacheProxyImpl.java:2066)
>                 at
>
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:1093)
>                 at
>
> org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.get(GatewayProtectedCacheProxy.java:676)
>                 at
> com.client.SerializableTest.main(SerializableTest.java:27)
> Caused by: class org.apache.ignite.IgniteCheckedException: Failed to
> unmarshal object with optimized marshaller
>                 at
> org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7510)
>                 at
>
> org.apache.ignite.internal.util.future.GridFutureAdapter.resolve(GridFutureAdapter.java:260)
>                 at
>
> org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:191)
>                 at
>
> org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:141)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4972)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheAdapter.repairableGet(GridCacheAdapter.java:4931)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1486)
>                 at
>
> org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:1090)
>                 ... 2 more
> Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to
> unmarshal object with optimized marshaller
>                 at
>
> org.apache.ignite.internal.binary.BinaryUtils.doReadOptimized(BinaryUtils.java:1785)
>                 at
>
> org.apache.ignite.internal.binary.BinaryUtils.unmarshal(BinaryUtils.java:1991)
>                 at
>
> org.apache.ignite.internal.binary.BinaryUtils.unmarshal(BinaryUtils.java:1816)
>                 at
>
> org.apache.ignite.internal.binary.BinaryUtils.unmarshal(BinaryUtils.java:1807)
>                 at
>
> org.apache.ignite.internal.binary.GridBinaryMarshaller.unmarshal(GridBinaryMarshaller.java:268)
>                 at
>
> org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl.unmarshal(CacheObjectBinaryProcessorImpl.java:1100)
>                 at
>
> org.apache.ignite.internal.processors.cache.CacheObjectImpl.value(CacheObjectImpl.java:89)
>                 at
>
> org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:176)
>                 at
>
> org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:67)
>                 at
>
> org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:136)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1808)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1796)
>                 at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.setResult(GridPartitionedSingleGetFuture.java:747)
>                 at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.onResult(GridPartitionedSingleGetFuture.java:624)
>                 at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter.processNearSingleGetResponse(GridDhtCacheAdapter.java:374)
>                 at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$1400(GridDhtAtomicCache.java:141)
>                 at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$15.apply(GridDhtAtomicCache.java:429)
>                 at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$15.apply(GridDhtAtomicCache.java:424)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1142)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:591)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:392)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:318)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:109)
>                 at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:308)
>                 at
>
> org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1847)
>                 at
>
> org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1472)
>                 at
>
> org.apache.ignite.internal.managers.communication.GridIoManager.access$5200(GridIoManager.java:229)
>                 at
>
> org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1367)
>                 at
>
> org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:565)
>                 at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
>                 at java.lang.Thread.run(Thread.java:748)
> Caused by: class org.apache.ignite.IgniteCheckedException: Failed to find
> class with given class loader for unmarshalling (make sure same versions of
> all classes are available on all nodes or enable peer-class-loading)
>
> [clsLdr=org.apache.ignite.internal.processors.cache.GridCacheDeploymentManager$CacheClassLoader@32b830a9
> ,
> cls=Optimized stream class checksum mismatch (is same version of marshalled
> class present on all nodes?) [expected=2, actual=1, cls=class
> com.client.SerializableTest$ThirdPartyObj]]
>                 at
>
> org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller.unmarshal0(OptimizedMarshaller.java:232)
>                 at
>
> org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:93)
>                 at
>
> org.apache.ignite.internal.binary.BinaryUtils.doReadOptimized(BinaryUtils.java:1782)
>                 ... 30 more
> Caused by: java.lang.ClassNotFoundException: Optimized stream class
> checksum
> mismatch (is same version of marshalled class present on all nodes?)
> [expected=2, actual=1, cls=class com.client.SerializableTest$ThirdPartyObj]
>                 at
>
> org.apache.ignite.internal.marshaller.optimized.OptimizedClassDescriptor.verifyChecksum(OptimizedClassDescriptor.java:969)
>                 at
>
> org.apache.ignite.internal.marshaller.optimized.OptimizedClassDescriptor.read(OptimizedClassDescriptor.java:951)
>                 at
>
> org.apache.ignite.internal.marshaller.optimized.OptimizedObjectInputStream.readObject0(OptimizedObjectInputStream.java:346)
>                 at
>
> org.apache.ignite.internal.marshaller.optimized.OptimizedObjectInputStream.readObjectOverride(OptimizedObjectInputStream.java:198)
>                 at
> java.io.ObjectInputStream.readObject(ObjectInputStream.java:425)
>                 at
>
> org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller.unmarshal0(OptimizedMarshaller.java:227)
>                 ... 32 more
>
>
> A small reproducer of this situation:
>
> public class SerializableTest {
>
>     public static void main(String[] args) {
>
>         try (IgniteEx client = (IgniteEx)
> Ignition.start(getWithSslConfig())) {
>
>             IgniteCache<String, ThirdPartyObj> cache =
> client.getOrCreateCache("test");
>             // Should be commented out after the first run of the main
> method
>             cache.put("key", new ThirdPartyObj("Timon"));
>
>             System.out.println(cache.get("key"));
>
>         } catch (IgniteCheckedException e) {
>             e.printStackTrace();
>         }
>     }
>
>     public static class ThirdPartyObj implements Serializable {
> // Must be changed after the first run of the main method
>         private static final long serialVersionUID = 1L;
>         private String name;
>
>         public ThirdPartyObj(String name) {
>             this.name = name;
>         }
>
>         private void writeObject(ObjectOutputStream outputStream) throws
> IOException {
>             outputStream.defaultWriteObject();
>
>             outputStream.writeObject(this.name);
>         }
>
>         private void readObject(ObjectInputStream inputStream) throws
> IOException, ClassNotFoundException {
>             inputStream.defaultReadObject();
>
>             this.name = (String) inputStream.readObject();
>         }
>
>         @Override
>         public String toString() {
>             return "ThirdPartyObj{" +
>                     "name='" + name + '\'' +
>                     '}';
>         }
>     }
> }
>
>
> Is it possible to use different versions of objects?
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>

Reply via email to