You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by AlexBor <vs...@yandex.ru> on 2020/04/16 10:26:39 UTC

Unable to run several ContinuousQuery due to: Failed to unmarshal discovery data for component: CONTINUOUS_PROC

Hi guys! 
I'm trying to play with ContinuousQuery in v2.8.0 with the following setup:
one server node + couple of client nodes running in different JVMs on the
same local machine. 

I'm trying to execute same ContinuousQuery on both clients in parallel, but
for some reason first one is able to connect and execute, however last one
is failing with below exception during Ignition.getOrStart():
SEVERE: Failed to unmarshal discovery data for component: CONTINUOUS_PROC
class org.apache.ignite.IgniteCheckedException: Failed to deserialize object
with given class loader: sun.misc.Launcher$AppClassLoader@18b4aac2

All subsequent clients are failing until ContinuousQuery cursor is closed. 
So it looks like I can't run query on more than once client at every moment. 

Full trace:

апр 16, 2020 12:59:51 PM org.apache.ignite.logger.java.JavaLogger error
SEVERE: Failed to unmarshal discovery data for component: CONTINUOUS_PROC
class org.apache.ignite.IgniteCheckedException: Failed to deserialize object
with given class loader: sun.misc.Launcher$AppClassLoader@18b4aac2
	at
org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal0(JdkMarshaller.java:132)
	at
org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:93)
	at
org.apache.ignite.internal.util.IgniteUtils.unmarshalZip(IgniteUtils.java:10248)
	at
org.apache.ignite.spi.discovery.tcp.internal.DiscoveryDataPacket.unmarshalData(DiscoveryDataPacket.java:340)
	at
org.apache.ignite.spi.discovery.tcp.internal.DiscoveryDataPacket.unmarshalGridData(DiscoveryDataPacket.java:155)
	at
org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.onExchange(TcpDiscoverySpi.java:2069)
	at
org.apache.ignite.spi.discovery.tcp.ClientImpl$MessageWorker.processNodeAddFinishedMessage(ClientImpl.java:2219)
	at
org.apache.ignite.spi.discovery.tcp.ClientImpl$MessageWorker.processDiscoveryMessage(ClientImpl.java:2088)
	at
org.apache.ignite.spi.discovery.tcp.ClientImpl$MessageWorker.body(ClientImpl.java:1930)
	at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
	at
org.apache.ignite.spi.discovery.tcp.ClientImpl$1.body(ClientImpl.java:302)
	at org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:61)
Caused by: java.io.InvalidObjectException: Failed to find cache for name:
MY_CACHE
	at
org.apache.ignite.internal.processors.cache.GridCacheContext.readResolve(GridCacheContext.java:2376)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1248)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2076)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
	at
org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.readExternal(IgniteCacheProxyImpl.java:2192)
	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2116)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2065)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
	at
org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.readExternal(GatewayProtectedCacheProxy.java:1706)
	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2116)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2065)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2285)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2209)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2285)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2209)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
	at
org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandlerV2.readExternal(CacheContinuousQueryHandlerV2.java:179)
	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2116)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2065)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2285)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2209)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
	at java.util.HashMap.readObject(HashMap.java:1409)
	at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2176)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2067)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
	at
org.apache.ignite.internal.util.IgniteUtils.readMap(IgniteUtils.java:5409)
	at
org.apache.ignite.internal.processors.continuous.GridContinuousProcessor$DiscoveryData.readExternal(GridContinuousProcessor.java:2446)
	at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2116)
	at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2065)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
	at
org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal0(JdkMarshaller.java:124)
	... 11 more
Caused by: java.lang.IllegalStateException: Failed to find cache for name:
MY_CACHE
	at
org.apache.ignite.internal.processors.cache.GridCacheContext.readResolve(GridCacheContext.java:2371)
	... 62 more



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

Re: Unable to run several ContinuousQuery due to: Failed to unmarshal discovery data for component: CONTINUOUS_PROC

Posted by Evgenii Zhuravlev <e....@gmail.com>.
Why is the client needs to be serializable? Have you tried suggestion from
this answer
https://stackoverflow.com/questions/61293343/failed-to-unmarshal-discovery-data-for-component-continuous-proc-with-more-than/61318360#61318360
 ?

Evgenii

вт, 21 апр. 2020 г. в 00:36, AlexBor <vs...@yandex.ru>:

> Hi Denis,
>
> Both servers are looking to the same server.
> Here are code samples:
>
> Server:
>
> public class IgniteServerCacheBootstrap {
>
>     final static Logger logger =
> LoggerFactory.getLogger(IgniteCacheClient.class);
>
>     public static void main(String[] args) throws IgniteCheckedException,
> InterruptedException {
>
>         IgniteConfiguration serverConfig = new IgniteConfiguration()
>                 .setGridLogger(new Log4J2Logger("log4j2.xml"));
>
>         Ignite server = Ignition.start(serverConfig);
>         Thread.currentThread().join();
>     }
>
> }
>
>
> Client (I run two of such clients in parallel). Code is mostly taken from
> Ignite samples:
>
> public class IgniteCacheClient implements Serializable {
>
>     Logger logger = LoggerFactory.getLogger(IgniteCacheClient.class);
>
>     private IgniteCache igniteCache;
>
>     public IgniteCacheClient() throws IgniteCheckedException {
>         IgniteConfiguration clientConfig = new IgniteConfiguration()
>                 .setGridLogger(new Log4J2Logger("log4j2.xml"))
>                 .setClientMode(true);
>
>         Ignite client = Ignition.getOrStart(clientConfig);
>         igniteCache = client.getOrCreateCache("MY_CACHE");
>     }
>
>     public void run() throws InterruptedException {
>
>         // Create new continuous query.
>         ContinuousQuery<Integer, String> qry = new ContinuousQuery<>();
>
>         qry.setInitialQuery(new ScanQuery<>(new IgniteBiPredicate<Integer,
> String>() {
>             @Override
>             public boolean apply(Integer key, String val) {
>                 return key > 10;
>             }
>         }));
>
>         // Callback that is called locally when update notifications are
> received.
>         qry.setLocalListener(new CacheEntryUpdatedListener<Integer,
> String>() {
>             @Override
>             public void onUpdated(Iterable<CacheEntryEvent&lt;? extends
> Integer, ? extends String>> evts) {
>                 for (CacheEntryEvent<? extends Integer, ? extends String> e
> : evts)
>                     logger.info("Updated entry [key=" + e.getKey() + ",
> val=" + e.getValue() + ']');
>             }
>         });
>
>         // This filter will be evaluated remotely on all nodes.
>         // Entry that pass this filter will be sent to the caller.
>         qry.setRemoteFilterFactory(new
> Factory<CacheEntryEventFilter&lt;Integer, String>>() {
>             @Override
>             public CacheEntryEventFilter<Integer, String> create() {
>                 return new CacheEntryEventFilter<Integer, String>() {
>                     @Override
>                     public boolean evaluate(CacheEntryEvent<? extends
> Integer, ? extends String> e) {
>                         return e.getKey() > 10;
>                     }
>                 };
>             }
>         });
>
>         // Execute query.
>         QueryCursor<Cache.Entry&lt;Integer, String>> cur =
> igniteCache.query(qry);
>
>         // Iterate through existing data.
>         for (Cache.Entry<Integer, String> e : cur)
>             logger.info("Queried existing entry [key=" + e.getKey() + ",
> val=" + e.getValue() + ']');
>
>         Thread.currentThread().join();
>     }
> }
>
>
>
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>

Re: Unable to run several ContinuousQuery due to: Failed to unmarshal discovery data for component: CONTINUOUS_PROC

Posted by AlexBor <vs...@yandex.ru>.
Hi Denis,

Both servers are looking to the same server.
Here are code samples:

Server:

public class IgniteServerCacheBootstrap {

    final static Logger logger =
LoggerFactory.getLogger(IgniteCacheClient.class);

    public static void main(String[] args) throws IgniteCheckedException,
InterruptedException {

        IgniteConfiguration serverConfig = new IgniteConfiguration()
                .setGridLogger(new Log4J2Logger("log4j2.xml"));

        Ignite server = Ignition.start(serverConfig);
        Thread.currentThread().join();
    }

}


Client (I run two of such clients in parallel). Code is mostly taken from
Ignite samples:

public class IgniteCacheClient implements Serializable {

    Logger logger = LoggerFactory.getLogger(IgniteCacheClient.class);

    private IgniteCache igniteCache;

    public IgniteCacheClient() throws IgniteCheckedException {
        IgniteConfiguration clientConfig = new IgniteConfiguration()
                .setGridLogger(new Log4J2Logger("log4j2.xml"))
                .setClientMode(true);

        Ignite client = Ignition.getOrStart(clientConfig);
        igniteCache = client.getOrCreateCache("MY_CACHE");
    }

    public void run() throws InterruptedException {

        // Create new continuous query.
        ContinuousQuery<Integer, String> qry = new ContinuousQuery<>();

        qry.setInitialQuery(new ScanQuery<>(new IgniteBiPredicate<Integer,
String>() {
            @Override
            public boolean apply(Integer key, String val) {
                return key > 10;
            }
        }));

        // Callback that is called locally when update notifications are
received.
        qry.setLocalListener(new CacheEntryUpdatedListener<Integer,
String>() {
            @Override
            public void onUpdated(Iterable<CacheEntryEvent&lt;? extends
Integer, ? extends String>> evts) {
                for (CacheEntryEvent<? extends Integer, ? extends String> e
: evts)
                    logger.info("Updated entry [key=" + e.getKey() + ",
val=" + e.getValue() + ']');
            }
        });

        // This filter will be evaluated remotely on all nodes.
        // Entry that pass this filter will be sent to the caller.
        qry.setRemoteFilterFactory(new
Factory<CacheEntryEventFilter&lt;Integer, String>>() {
            @Override
            public CacheEntryEventFilter<Integer, String> create() {
                return new CacheEntryEventFilter<Integer, String>() {
                    @Override
                    public boolean evaluate(CacheEntryEvent<? extends
Integer, ? extends String> e) {
                        return e.getKey() > 10;
                    }
                };
            }
        });

        // Execute query.
        QueryCursor<Cache.Entry&lt;Integer, String>> cur =
igniteCache.query(qry);

        // Iterate through existing data.
        for (Cache.Entry<Integer, String> e : cur)
            logger.info("Queried existing entry [key=" + e.getKey() + ",
val=" + e.getValue() + ']');

        Thread.currentThread().join();
    }
}






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

Re: Unable to run several ContinuousQuery due to: Failed to unmarshal discovery data for component: CONTINUOUS_PROC

Posted by Denis Magda <dm...@apache.org>.
Hi,

Is it possible that another server node is running (without MY_CACHE
deployed) and the failing client is connected to it? The exception you see
should happen only if a cache is not created in the cluster.

Share an implementation of the client logic including the continuous query
piece for reference.

-
Denis


On Sat, Apr 18, 2020 at 6:08 AM AlexBor <vs...@yandex.ru> wrote:

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

Re: Unable to run several ContinuousQuery due to: Failed to unmarshal discovery data for component: CONTINUOUS_PROC

Posted by AlexBor <vs...@yandex.ru>.
Anyone?



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