Failed to unmarshal service method arguments

classic Classic list List threaded Threaded
9 messages Options
tcostasouza tcostasouza
Reply | Threaded
Open this post in threaded view
|

Failed to unmarshal service method arguments

Hello,

It seems that, even with peer class loading enabled, Ignite is searching for a Service's method argument classes from it's root classpath. Consider de following example:

/* service interface */
public interface TestService {
    void execute(TestRequest request);
}

/* simple request object */
public class TestRequest implements Serializable {
}

/* simple service implementation */
public class TestServiceImpl implements TestService, Service {

    @Override
    public void execute(TestRequest request) {
        System.out.println(request);
    }
   
    [...]
}

Now, start 2 Ignite nodes with peer class loading enabled. From one node, deploy and invoke service:
System.setProperty("IGNITE_QUIET", "false");

IgniteConfiguration igCfg = new IgniteConfiguration();
igCfg.setPeerClassLoadingEnabled(true);
Ignite ignite = Ignition.start(igCfg);

ServiceConfiguration cfg = new ServiceConfiguration();
cfg.setName("test");
cfg.setMaxPerNodeCount(1);
cfg.setNodeFilter(ignite.cluster().forRemotes().predicate());
cfg.setService(new TestServiceImpl());
ignite.services().deploy(cfg);

TestService svc = ignite.services().serviceProxy("test", TestService.class, false);
svc.execute(new TestRequest());

Invocation will fail with Ignite complaining that it couldn't find TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log here)

Now, if I change from TestService.execute(TestRequest) to something like TestService.execute(int), then it works as expected.

Any clue?

Thanks


yakov yakov
Reply | Threaded
Open this post in threaded view
|

Re: Failed to unmarshal service method arguments

Hi! I reproduced the issue and filed a ticket: https://issues.apache.org/jira/browse/IGNITE-976

In the meantime, turn off peer-loading and make all classes available on all nodes. This configuration is much better from performance standpoint and is recommended in production.

I am also cross-posting this thread to dev list in order to raise a question - should services support peer-deployment? My answer is no. Service may be implemented in the way that missing classes may be required after master node leaves, but service may be configured to stay after master leaves. So, even CONTINUOUS deployment mode does not help.




--Yakov

2015-06-02 2:36 GMT+03:00 tcostasouza <[hidden email]>:
Hello,

It seems that, even with peer class loading enabled, Ignite is searching for
a Service's method argument classes from it's root classpath. Consider de
following example:



Now, start 2 Ignite nodes with peer class loading enabled. From one node,
deploy and invoke service:


Invocation will fail with Ignite complaining that it couldn't find
TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log  here
<http://apache-ignite-users.70518.x6.nabble.com/file/n437/ignite_exception.log>
)

Now, if I change from TestService.execute(TestRequest) to something like
TestService.execute(int), then it works as expected.

Any clue?

Thanks






--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Failed-to-unmarshal-service-method-arguments-tp437.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

yakov yakov
Reply | Threaded
Open this post in threaded view
|

Re: Failed to unmarshal service method arguments


--Yakov

2015-06-02 13:03 GMT+03:00 Yakov Zhdanov <[hidden email]>:
Hi! I reproduced the issue and filed a ticket: https://issues.apache.org/jira/browse/IGNITE-976

In the meantime, turn off peer-loading and make all classes available on all nodes. This configuration is much better from performance standpoint and is recommended in production.

I am also cross-posting this thread to dev list in order to raise a question - should services support peer-deployment? My answer is no. Service may be implemented in the way that missing classes may be required after master node leaves, but service may be configured to stay after master leaves. So, even CONTINUOUS deployment mode does not help.




--Yakov

2015-06-02 2:36 GMT+03:00 tcostasouza <[hidden email]>:
Hello,

It seems that, even with peer class loading enabled, Ignite is searching for
a Service's method argument classes from it's root classpath. Consider de
following example:



Now, start 2 Ignite nodes with peer class loading enabled. From one node,
deploy and invoke service:


Invocation will fail with Ignite complaining that it couldn't find
TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log  here
<http://apache-ignite-users.70518.x6.nabble.com/file/n437/ignite_exception.log>
)

Now, if I change from TestService.execute(TestRequest) to something like
TestService.execute(int), then it works as expected.

Any clue?

Thanks






--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Failed-to-unmarshal-service-method-arguments-tp437.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.


tcostasouza tcostasouza
Reply | Threaded
Open this post in threaded view
|

Re: Failed to unmarshal service method arguments

Hello,

Well, it seems that peer deployment does work with peer class loading. The problem I described is with method invocation with arguments that includes classes from the service classpath.

Regards

On Tue, Jun 2, 2015, 08:04 yakov [via Apache Ignite Users] <[hidden email]> wrote:

--Yakov

2015-06-02 13:03 GMT+03:00 Yakov Zhdanov <[hidden email]>:
Hi! I reproduced the issue and filed a ticket: https://issues.apache.org/jira/browse/IGNITE-976

In the meantime, turn off peer-loading and make all classes available on all nodes. This configuration is much better from performance standpoint and is recommended in production.

I am also cross-posting this thread to dev list in order to raise a question - should services support peer-deployment? My answer is no. Service may be implemented in the way that missing classes may be required after master node leaves, but service may be configured to stay after master leaves. So, even CONTINUOUS deployment mode does not help.




--Yakov

2015-06-02 2:36 GMT+03:00 tcostasouza <[hidden email]>:
Hello,

It seems that, even with peer class loading enabled, Ignite is searching for
a Service's method argument classes from it's root classpath. Consider de
following example:



Now, start 2 Ignite nodes with peer class loading enabled. From one node,
deploy and invoke service:


Invocation will fail with Ignite complaining that it couldn't find
TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log  here
<http://apache-ignite-users.70518.x6.nabble.com/file/n437/ignite_exception.log>
)

Now, if I change from TestService.execute(TestRequest) to something like
TestService.execute(int), then it works as expected.

Any clue?

Thanks






--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Failed-to-unmarshal-service-method-arguments-tp437.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.


If you reply to this email, your message will be added to the discussion below:
To unsubscribe from Failed to unmarshal service method arguments, click here.
NAML
tcostasouza tcostasouza
Reply | Threaded
Open this post in threaded view
|

Re: Failed to unmarshal service method arguments

In reply to this post by yakov

Sorry, I meant "service deployment does work with peer deployment"


On Tue, Jun 2, 2015, 08:21 Thiago Souza <[hidden email]> wrote:

Hello,

Well, it seems that peer deployment does work with peer class loading. The problem I described is with method invocation with arguments that includes classes from the service classpath.

Regards

On Tue, Jun 2, 2015, 08:04 yakov [via Apache Ignite Users] <[hidden email]> wrote:

--Yakov

2015-06-02 13:03 GMT+03:00 Yakov Zhdanov <[hidden email]>:
Hi! I reproduced the issue and filed a ticket: https://issues.apache.org/jira/browse/IGNITE-976

In the meantime, turn off peer-loading and make all classes available on all nodes. This configuration is much better from performance standpoint and is recommended in production.

I am also cross-posting this thread to dev list in order to raise a question - should services support peer-deployment? My answer is no. Service may be implemented in the way that missing classes may be required after master node leaves, but service may be configured to stay after master leaves. So, even CONTINUOUS deployment mode does not help.




--Yakov

2015-06-02 2:36 GMT+03:00 tcostasouza <[hidden email]>:
Hello,

It seems that, even with peer class loading enabled, Ignite is searching for
a Service's method argument classes from it's root classpath. Consider de
following example:



Now, start 2 Ignite nodes with peer class loading enabled. From one node,
deploy and invoke service:


Invocation will fail with Ignite complaining that it couldn't find
TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log  here
<http://apache-ignite-users.70518.x6.nabble.com/file/n437/ignite_exception.log>
)

Now, if I change from TestService.execute(TestRequest) to something like
TestService.execute(int), then it works as expected.

Any clue?

Thanks






--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Failed-to-unmarshal-service-method-arguments-tp437.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.


If you reply to this email, your message will be added to the discussion below:
To unsubscribe from Failed to unmarshal service method arguments, click here.
NAML
yakov yakov
Reply | Threaded
Open this post in threaded view
|

Re: Failed to unmarshal service method arguments

Disagree. I see exceptions described in the ticket, if peer-node class path does not have service implementation class in it.

--Yakov

2015-06-02 14:46 GMT+03:00 tcostasouza <[hidden email]>:

Sorry, I meant "service deployment does work with peer deployment"


On Tue, Jun 2, 2015, 08:21 Thiago Souza <[hidden email]> wrote:

Hello,

Well, it seems that peer deployment does work with peer class loading. The problem I described is with method invocation with arguments that includes classes from the service classpath.

Regards

On Tue, Jun 2, 2015, 08:04 yakov [via Apache Ignite Users] <[hidden email]> wrote:

--Yakov

2015-06-02 13:03 GMT+03:00 Yakov Zhdanov <[hidden email]>:
Hi! I reproduced the issue and filed a ticket: https://issues.apache.org/jira/browse/IGNITE-976

In the meantime, turn off peer-loading and make all classes available on all nodes. This configuration is much better from performance standpoint and is recommended in production.

I am also cross-posting this thread to dev list in order to raise a question - should services support peer-deployment? My answer is no. Service may be implemented in the way that missing classes may be required after master node leaves, but service may be configured to stay after master leaves. So, even CONTINUOUS deployment mode does not help.




--Yakov

2015-06-02 2:36 GMT+03:00 tcostasouza <[hidden email]>:
Hello,

It seems that, even with peer class loading enabled, Ignite is searching for
a Service's method argument classes from it's root classpath. Consider de
following example:



Now, start 2 Ignite nodes with peer class loading enabled. From one node,
deploy and invoke service:


Invocation will fail with Ignite complaining that it couldn't find
TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log  here
<http://apache-ignite-users.70518.x6.nabble.com/file/n437/ignite_exception.log>
)

Now, if I change from TestService.execute(TestRequest) to something like
TestService.execute(int), then it works as expected.

Any clue?

Thanks






--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Failed-to-unmarshal-service-method-arguments-tp437.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.


If you reply to this email, your message will be added to the discussion below:
To unsubscribe from Failed to unmarshal service method arguments, click here.
NAML


View this message in context: Re: Failed to unmarshal service method arguments
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

tcostasouza tcostasouza
Reply | Threaded
Open this post in threaded view
|

Re: Failed to unmarshal service method arguments

Hello,

Well, if you change TestService.execute method to receive an argument that is reachable from ignite's standard classpath (i.e. an int) and also wait a bit (e.g. 1sec) between service deployment and TestService.execute invocation then the method will be properly executed on remote node.

I could successfully run this test with peer class loading enabled and making sure that the remote node does not contains any of the related classes.

I'm also running Ignite v1.0.6 (from GridGain's maven repository). I don't know if this is works with Ignite v1.0.0. Maybe that's the difference.

Regards

On Tue, Jun 2, 2015 at 9:49 AM yakov [via Apache Ignite Users] <[hidden email]> wrote:
Disagree. I see exceptions described in the ticket, if peer-node class path does not have service implementation class in it.

--Yakov

2015-06-02 14:46 GMT+03:00 tcostasouza <[hidden email]>:

Sorry, I meant "service deployment does work with peer deployment"


On Tue, Jun 2, 2015, 08:21 Thiago Souza <[hidden email]> wrote:

Hello,

Well, it seems that peer deployment does work with peer class loading. The problem I described is with method invocation with arguments that includes classes from the service classpath.

Regards

On Tue, Jun 2, 2015, 08:04 yakov [via Apache Ignite Users] <[hidden email]> wrote:

--Yakov

2015-06-02 13:03 GMT+03:00 Yakov Zhdanov <[hidden email]>:
Hi! I reproduced the issue and filed a ticket: https://issues.apache.org/jira/browse/IGNITE-976

In the meantime, turn off peer-loading and make all classes available on all nodes. This configuration is much better from performance standpoint and is recommended in production.

I am also cross-posting this thread to dev list in order to raise a question - should services support peer-deployment? My answer is no. Service may be implemented in the way that missing classes may be required after master node leaves, but service may be configured to stay after master leaves. So, even CONTINUOUS deployment mode does not help.




--Yakov

2015-06-02 2:36 GMT+03:00 tcostasouza <[hidden email]>:
Hello,

It seems that, even with peer class loading enabled, Ignite is searching for
a Service's method argument classes from it's root classpath. Consider de
following example:



Now, start 2 Ignite nodes with peer class loading enabled. From one node,
deploy and invoke service:


Invocation will fail with Ignite complaining that it couldn't find
TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log  here
<http://apache-ignite-users.70518.x6.nabble.com/file/n437/ignite_exception.log>
)

Now, if I change from TestService.execute(TestRequest) to something like
TestService.execute(int), then it works as expected.

Any clue?

Thanks






--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Failed-to-unmarshal-service-method-arguments-tp437.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.


If you reply to this email, your message will be added to the discussion below:
To unsubscribe from Failed to unmarshal service method arguments, click here.
NAML

Sent from the Apache Ignite Users mailing list archive at Nabble.com.
If you reply to this email, your message will be added to the discussion below:
dsetrakyan dsetrakyan
Reply | Threaded
Open this post in threaded view
|

Re: Failed to unmarshal service method arguments

In reply to this post by yakov


On Tue, Jun 2, 2015 at 3:03 AM, Yakov Zhdanov <[hidden email]> wrote:
Hi! I reproduced the issue and filed a ticket:
https://issues.apache.org/jira/browse/IGNITE-976

In the meantime, turn off peer-loading and make all classes available on
all nodes. This configuration is much better from performance standpoint
and is recommended in production.

I am also cross-posting this thread to dev list in order to raise a
question - should services support peer-deployment? My answer is no.
Service may be implemented in the way that missing classes may be required
after master node leaves, but service may be configured to stay after
master leaves. So, even CONTINUOUS deployment mode does not help.

I also don't think that services should support peer-deployment. However, if users get missing class exceptions for service deployments, a proper error message should be given explaining this.
 




--Yakov

2015-06-02 2:36 GMT+03:00 tcostasouza <[hidden email]>:

> Hello,
>
> It seems that, even with peer class loading enabled, Ignite is searching
> for
> a Service's method argument classes from it's root classpath. Consider de
> following example:
>
>
>
> Now, start 2 Ignite nodes with peer class loading enabled. From one node,
> deploy and invoke service:
>
>
> Invocation will fail with Ignite complaining that it couldn't find
> TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log  here
> <
> http://apache-ignite-users.70518.x6.nabble.com/file/n437/ignite_exception.log
> >
> )
>
> Now, if I change from TestService.execute(TestRequest) to something like
> TestService.execute(int), then it works as expected.
>
> Any clue?
>
> Thanks
>
>
>
>
>
>
> --
> View this message in context:
> http://apache-ignite-users.70518.x6.nabble.com/Failed-to-unmarshal-service-method-arguments-tp437.html
> Sent from the Apache Ignite Users mailing list archive at Nabble.com.
>

tcostasouza tcostasouza
Reply | Threaded
Open this post in threaded view
|

Re: Failed to unmarshal service method arguments

Hello,

Ok, in the end I do agree with you, peer deployment with services is a bad idea for production enviroment.

I'm currently building a rest framework on top of Ignite's distributed services. One of the requirements is to update the services with zero downtime. Now, I should consider that ignite node should be restarted for this to work.

Regards

On Tue, Jun 2, 2015 at 11:09 AM dsetrakyan [via Apache Ignite Users] <[hidden email]> wrote:
On Tue, Jun 2, 2015 at 3:03 AM, Yakov Zhdanov <[hidden email]> wrote:
Hi! I reproduced the issue and filed a ticket:
https://issues.apache.org/jira/browse/IGNITE-976

In the meantime, turn off peer-loading and make all classes available on
all nodes. This configuration is much better from performance standpoint
and is recommended in production.

I am also cross-posting this thread to dev list in order to raise a
question - should services support peer-deployment? My answer is no.
Service may be implemented in the way that missing classes may be required
after master node leaves, but service may be configured to stay after
master leaves. So, even CONTINUOUS deployment mode does not help.

I also don't think that services should support peer-deployment. However, if users get missing class exceptions for service deployments, a proper error message should be given explaining this.
 




--Yakov

2015-06-02 2:36 GMT+03:00 tcostasouza <[hidden email]>:

> Hello,
>
> It seems that, even with peer class loading enabled, Ignite is searching
> for
> a Service's method argument classes from it's root classpath. Consider de
> following example:
>
>
>
> Now, start 2 Ignite nodes with peer class loading enabled. From one node,
> deploy and invoke service:
>
>
> Invocation will fail with Ignite complaining that it couldn't find
> TestServiceImpl class in sun.misc.Launcher$AppClassLoader (full log  here
> <
> http://apache-ignite-users.70518.x6.nabble.com/file/n437/ignite_exception.log
> >
> )
>
> Now, if I change from TestService.execute(TestRequest) to something like
> TestService.execute(int), then it works as expected.
>
> Any clue?
>
> Thanks
>
>
>
>
>
>
> --
> View this message in context:
> http://apache-ignite-users.70518.x6.nabble.com/Failed-to-unmarshal-service-method-arguments-tp437.html
> Sent from the Apache Ignite Users mailing list archive at Nabble.com.
>

D.



If you reply to this email, your message will be added to the discussion below:
To unsubscribe from Failed to unmarshal service method arguments, click here.
NAML