Alexey Kukushkin created IGNITE-12894:
-----------------------------------------

             Summary: Cannot use IgniteAtomicSequence in Ignite services
                 Key: IGNITE-12894
                 URL: https://issues.apache.org/jira/browse/IGNITE-12894
             Project: Ignite
          Issue Type: Bug
          Components: compute
    Affects Versions: 2.8
            Reporter: Alexey Kukushkin
            Assignee: Alexey Kukushkin


h2. Repro Steps
Execute the below steps in default service deployment mode and in 
discovery-based service deployment mode. 
Use the {{ -DIGNITE_EVENT_DRIVEN_SERVICE_PROCESSOR_ENABLED=true}} JVM option to 
switch to the discovery-based service deployment mode.
 * Create a service initializing an IgniteAtomicService in method 
Service#init() and using the IgniteAtomicService in a business method.
 * Start an Ignite node with the service specified in the IgniteConfiguration
 * Invoke the service's business method on the Ignite node

h3. Actual Result
h4. In Default Service Deployment Mode
Deadlock on the business method invocation
h4. In Discovery-Based Service Deployment Mode
The method invocation fails with {{IgniteException: Failed to find deployed 
service: IgniteTestService}}

h2. Reproducer
h3. Test.java
{code:java}
public interface Test {
    String sayHello(String name);
}
{code}

h3. IgniteTestService.java
{code:java}
public class IgniteTestService implements Test, Service {
    private @IgniteInstanceResource Ignite ignite;
    private IgniteAtomicSequence seq;

    @Override public void cancel(ServiceContext ctx) {
    }

    @Override public void init(ServiceContext ctx) throws InterruptedException {
        seq = ignite.atomicSequence("TestSeq", 0, true);
    }

    @Override public void execute(ServiceContext ctx) {
    }

    @Override public String sayHello(String name) {
        return "Hello, " + name + "! #" + seq.getAndIncrement();
    }
}
{code}

h3. Reproducer.java
{code:java}
public class Reproducer {
    public static void main(String[] args) {
        IgniteConfiguration igniteCfg = new IgniteConfiguration()
            .setServiceConfiguration(
                new ServiceConfiguration()
                    .setName(IgniteTestService.class.getSimpleName())
                    .setMaxPerNodeCount(1)
                    .setTotalCount(0)
                    .setService(new IgniteTestService())
            )
            .setDiscoverySpi(
                new TcpDiscoverySpi()
                    .setIpFinder(new 
TcpDiscoveryVmIpFinder().setAddresses(Collections.singleton("127.0.0.1:47500")))
            );

        try (Ignite ignite = Ignition.start(igniteCfg)) {
            
ignite.services().serviceProxy(IgniteTestService.class.getSimpleName(), 
Test.class, false)
                .sayHello("World");
        }
    }
}
{code}

h2. Workaround
Specifying a service wait timeout solves the problem in the discovery-based 
service deployment mode (but not in the default deployment mode):
{code:java}
            
ignite.services().serviceProxy(IgniteTestService.class.getSimpleName(), 
Test.class, false, 1_000)
                .sayHello("World");
{code}

This workaround cannot be used in Ignite.NET clients since .NET 
{{GetServiceProxy}} API does not support the service wait timeout, which is 
hard-coded to 0 on the server side.

h2. Full Exception in Discovery-Based Service Deployment Mode
{noformat}
[01:08:54,653][SEVERE][services-deployment-worker-#52][IgniteServiceProcessor] 
Failed to initialize service (service will not be deployed): IgniteTestService
class org.apache.ignite.IgniteInterruptedException: Got interrupted while 
waiting for future to complete.
        at 
org.apache.ignite.internal.util.IgniteUtils$3.apply(IgniteUtils.java:888)
        at 
org.apache.ignite.internal.util.IgniteUtils$3.apply(IgniteUtils.java:886)
        at 
org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:1062)
        at 
org.apache.ignite.internal.IgniteKernal.atomicSequence(IgniteKernal.java:3999)
        at 
org.apache.ignite.internal.IgniteKernal.atomicSequence(IgniteKernal.java:3985)
        at Sandbox.Net.IgniteTestService.init(IgniteTestService.java:17)
        at 
org.apache.ignite.internal.processors.service.IgniteServiceProcessor.redeploy(IgniteServiceProcessor.java:1188)
        at 
org.apache.ignite.internal.processors.service.ServiceDeploymentTask.lambda$processDeploymentActions$5(ServiceDeploymentTask.java:318)
        at java.base/java.util.HashMap.forEach(HashMap.java:1336)
        at 
org.apache.ignite.internal.processors.service.ServiceDeploymentTask.processDeploymentActions(ServiceDeploymentTask.java:302)
        at 
org.apache.ignite.internal.processors.service.ServiceDeploymentTask.init(ServiceDeploymentTask.java:262)
        at 
org.apache.ignite.internal.processors.service.ServiceDeploymentManager$ServicesDeploymentWorker.body(ServiceDeploymentManager.java:475)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
        at java.base/java.lang.Thread.run(Thread.java:834)
[01:08:54,712][SEVERE][exchange-worker-#42][GridDhtPartitionsExchangeFuture] 
Failed to reinitialize local partitions (rebalancing will be stopped): 
GridDhtPartitionExchangeId [topVer=AffinityTopologyVersion [topVer=1, 
minorTopVer=1], discoEvt=DiscoveryCustomEvent 
[customMsg=DynamicCacheChangeBatch 
[id=17576957171-7ae549c8-423a-40b4-9865-c28a2f4b9dd9, reqs=ArrayList 
[DynamicCacheChangeRequest [cacheName=ignite-sys-atomic-cache@default-ds-group, 
hasCfg=true, nodeId=5fe32117-84ee-4f1f-9e19-86b85ef8c987, 
clientStartOnly=false, stop=false, destroy=false, disabledAfterStartfalse]], 
exchangeActions=ExchangeActions 
[startCaches=[ignite-sys-atomic-cache@default-ds-group], stopCaches=null, 
startGrps=[default-ds-group], stopGrps=[], resetParts=null, 
stateChangeRequest=null], startCaches=false], affTopVer=AffinityTopologyVersion 
[topVer=1, minorTopVer=1], super=DiscoveryEvent [evtNode=TcpDiscoveryNode 
[id=5fe32117-84ee-4f1f-9e19-86b85ef8c987, 
consistentId=0:0:0:0:0:0:0:1,127.0.0.1,192.168.1.2,192.168.56.1:47500, 
addrs=ArrayList [0:0:0:0:0:0:0:1, 127.0.0.1, 192.168.1.2, 192.168.56.1], 
sockAddrs=HashSet [kukushal-pc/172.22.44.97:47500, /0:0:0:0:0:0:0:1:47500, 
/127.0.0.1:47500, /192.168.56.1:47500, /192.168.1.2:47500], discPort=47500, 
order=1, intOrder=1, lastExchangeTime=1586815734079, loc=true, 
ver=2.8.0#20200226-sha1:341b01df, isClient=false], topVer=1, nodeId8=5fe32117, 
msg=null, type=DISCOVERY_CUSTOM_EVT, tstamp=1586815734517]], nodeId=5fe32117, 
evt=DISCOVERY_CUSTOM_EVT]
class org.apache.ignite.IgniteException: Failed to validate partitions state
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.validatePartitionsState(GridDhtPartitionsExchangeFuture.java:3886)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.finishExchangeOnCoordinator(GridDhtPartitionsExchangeFuture.java:3577)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onAllReceived(GridDhtPartitionsExchangeFuture.java:3485)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.distributedExchange(GridDhtPartitionsExchangeFuture.java:1610)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:891)
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3172)
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3021)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: class org.apache.ignite.internal.IgniteInterruptedCheckedException: 
null
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11189)
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11059)
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11039)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.validatePartitionsState(GridDhtPartitionsExchangeFuture.java:3848)
        ... 8 more
Caused by: java.lang.InterruptedException
        at 
java.base/java.util.concurrent.FutureTask.awaitDone(FutureTask.java:418)
        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:190)
        at 
org.apache.ignite.internal.util.IgniteUtils$Batch.result(IgniteUtils.java:11313)
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11179)
        ... 11 more
[01:08:54,720][SEVERE][exchange-worker-#42][GridCachePartitionExchangeManager] 
Failed to wait for completion of partition map exchange (preloading will not 
start): GridDhtPartitionsExchangeFuture [firstDiscoEvt=DiscoveryCustomEvent 
[customMsg=null, affTopVer=AffinityTopologyVersion [topVer=1, minorTopVer=1], 
super=DiscoveryEvent [evtNode=TcpDiscoveryNode 
[id=5fe32117-84ee-4f1f-9e19-86b85ef8c987, 
consistentId=0:0:0:0:0:0:0:1,127.0.0.1,192.168.1.2,192.168.56.1:47500, 
addrs=ArrayList [0:0:0:0:0:0:0:1, 127.0.0.1, 192.168.1.2, 192.168.56.1], 
sockAddrs=HashSet [kukushal-pc/172.22.44.97:47500, /0:0:0:0:0:0:0:1:47500, 
/127.0.0.1:47500, /192.168.56.1:47500, /192.168.1.2:47500], discPort=47500, 
order=1, intOrder=1, lastExchangeTime=1586815734079, loc=true, 
ver=2.8.0#20200226-sha1:341b01df, isClient=false], topVer=1, nodeId8=5fe32117, 
msg=null, type=DISCOVERY_CUSTOM_EVT, tstamp=1586815734517]], 
crd=TcpDiscoveryNode [id=5fe32117-84ee-4f1f-9e19-86b85ef8c987, 
consistentId=0:0:0:0:0:0:0:1,127.0.0.1,192.168.1.2,192.168.56.1:47500, 
addrs=ArrayList [0:0:0:0:0:0:0:1, 127.0.0.1, 192.168.1.2, 192.168.56.1], 
sockAddrs=HashSet [kukushal-pc/172.22.44.97:47500, /0:0:0:0:0:0:0:1:47500, 
/127.0.0.1:47500, /192.168.56.1:47500, /192.168.1.2:47500], discPort=47500, 
order=1, intOrder=1, lastExchangeTime=1586815734079, loc=true, 
ver=2.8.0#20200226-sha1:341b01df, isClient=false], 
exchId=GridDhtPartitionExchangeId [topVer=AffinityTopologyVersion [topVer=1, 
minorTopVer=1], discoEvt=DiscoveryCustomEvent [customMsg=null, 
affTopVer=AffinityTopologyVersion [topVer=1, minorTopVer=1], 
super=DiscoveryEvent [evtNode=TcpDiscoveryNode 
[id=5fe32117-84ee-4f1f-9e19-86b85ef8c987, 
consistentId=0:0:0:0:0:0:0:1,127.0.0.1,192.168.1.2,192.168.56.1:47500, 
addrs=ArrayList [0:0:0:0:0:0:0:1, 127.0.0.1, 192.168.1.2, 192.168.56.1], 
sockAddrs=HashSet [kukushal-pc/172.22.44.97:47500, /0:0:0:0:0:0:0:1:47500, 
/127.0.0.1:47500, /192.168.56.1:47500, /192.168.1.2:47500], discPort=47500, 
order=1, intOrder=1, lastExchangeTime=1586815734079, loc=true, 
ver=2.8.0#20200226-sha1:341b01df, isClient=false], topVer=1, nodeId8=5fe32117, 
msg=null, type=DISCOVERY_CUSTOM_EVT, tstamp=1586815734517]], nodeId=5fe32117, 
evt=DISCOVERY_CUSTOM_EVT], added=true, exchangeType=ALL, 
initFut=GridFutureAdapter [ignoreInterrupts=false, state=DONE, res=true, 
hash=429760908], init=false, lastVer=null, 
partReleaseFut=PartitionReleaseFuture [topVer=AffinityTopologyVersion 
[topVer=1, minorTopVer=1], futures=[ExplicitLockReleaseFuture 
[topVer=AffinityTopologyVersion [topVer=1, minorTopVer=1], futures=[]], 
AtomicUpdateReleaseFuture [topVer=AffinityTopologyVersion [topVer=1, 
minorTopVer=1], futures=[]], DataStreamerReleaseFuture 
[topVer=AffinityTopologyVersion [topVer=1, minorTopVer=1], futures=[]], 
LocalTxReleaseFuture [topVer=AffinityTopologyVersion [topVer=1, minorTopVer=1], 
futures=[]], AllTxReleaseFuture [topVer=AffinityTopologyVersion [topVer=1, 
minorTopVer=1], futures=[RemoteTxReleaseFuture [topVer=AffinityTopologyVersion 
[topVer=1, minorTopVer=1], futures=[]]]]]], exchActions=ExchangeActions 
[startCaches=[ignite-sys-atomic-cache@default-ds-group], stopCaches=null, 
startGrps=[default-ds-group], stopGrps=[], resetParts=null, 
stateChangeRequest=null], affChangeMsg=null, centralizedAff=false, 
forceAffReassignment=false, exchangeLocE=null, cacheChangeFailureMsgSent=false, 
done=true, state=CRD, registerCachesFuture=GridFinishedFuture [resFlag=2], 
partitionsSent=false, partitionsReceived=false, delayedLatestMsg=null, 
afterLsnrCompleteFut=GridFutureAdapter [ignoreInterrupts=false, state=DONE, 
res=null, hash=583816633], timeBag=o.a.i.i.util.TimeBag@5ac0d023, 
startTime=1087079935840199, initTime=1586815734527, rebalanced=false, 
evtLatch=0, remaining=HashSet [], mergedJoinExchMsgs=null, awaitMergedMsgs=0, 
super=GridFutureAdapter [ignoreInterrupts=false, state=DONE, res=class 
o.a.i.IgniteException: Failed to validate partitions state, hash=1371010775]]
class org.apache.ignite.IgniteCheckedException: Failed to validate partitions 
state
        at 
org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7509)
        at 
org.apache.ignite.internal.util.future.GridFutureAdapter.resolve(GridFutureAdapter.java:260)
        at 
org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:209)
        at 
org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:160)
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3200)
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body(GridCachePartitionExchangeManager.java:3021)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
Caused by: class org.apache.ignite.internal.IgniteInterruptedCheckedException: 
null

        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: class org.apache.ignite.IgniteException: Failed to validate 
partitions state
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.validatePartitionsState(GridDhtPartitionsExchangeFuture.java:3886)
Caused by: java.lang.InterruptedException

        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.finishExchangeOnCoordinator(GridDhtPartitionsExchangeFuture.java:3577)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.onAllReceived(GridDhtPartitionsExchangeFuture.java:3485)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.distributedExchange(GridDhtPartitionsExchangeFuture.java:1610)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.init(GridDhtPartitionsExchangeFuture.java:891)
        at 
org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager$ExchangeWorker.body0(GridCachePartitionExchangeManager.java:3172)
        ... 3 more
Caused by: class org.apache.ignite.internal.IgniteInterruptedCheckedException: 
null
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11189)
Caused by: class org.apache.ignite.IgniteException: Failed to validate 
partitions state

        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11059)
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11039)
        at 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture.validatePartitionsState(GridDhtPartitionsExchangeFuture.java:3848)
        ... 8 more
Caused by: java.lang.InterruptedException
        at 
java.base/java.util.concurrent.FutureTask.awaitDone(FutureTask.java:418)
        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:190)
        at 
org.apache.ignite.internal.util.IgniteUtils$Batch.result(IgniteUtils.java:11313)
        at 
org.apache.ignite.internal.util.IgniteUtils.doInParallel(IgniteUtils.java:11179)
        ... 11 more
Caused by: class org.apache.ignite.internal.IgniteInterruptedCheckedException: 
null

Caused by: java.lang.InterruptedException

[01:08:54] Ignite node stopped OK [uptime=00:00:00.219]
Exception in thread "main" class org.apache.ignite.IgniteException: Failed to 
find deployed service: IgniteTestService
        at 
org.apache.ignite.internal.processors.service.GridServiceProxy.invokeMethod(GridServiceProxy.java:169)
        at 
org.apache.ignite.internal.processors.service.GridServiceProxy$ProxyInvocationHandler.invoke(GridServiceProxy.java:364)
        at com.sun.proxy.$Proxy25.sayHello(Unknown Source)
        at Sandbox.Net.Reproducer.main(Reproducer.java:29)
{noformat}




--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to