2017-04-22 76 views
1

我在IgniteRunnable运行(在igniteCache.put())阿帕奇点燃缓存投放失败,并在IgniteRunnable run方法

我只有2个节点(客户端和服务器)时,提示以下错误。

1)客户端创建缓存

 CacheConfiguration<Integer, LAttribute> cfg = new CacheConfiguration<Integer, LAttribute>(); 
     cfg.setIndexedTypes(Integer.class, LoanAttribute.class); 
     cfg.setCacheMode(CacheMode.PARTITIONED); 
     cfg.setName("inv_result"); 
     cfg.setCopyOnRead(false); 
     cfg.setAtomicityMode(CacheAtomicityMode.ATOMIC); 

2)客户端提交IgniteRunnable任务服务器

3)集群

在服务器客户端的出口(在运行( )方法)

1)获取缓存并输入值

IgniteCache<Integer, LAttribute> iCache = Ignition.localIgnite().cache("inv_result"); 
    System.out.println("Begin .. "+iCache.size(CachePeekMode.ALL));  
    iCache.put(la.getId(), la); 

错误:

[21:41:14,859][SEVERE][pub-#67%null%][GridJobWorker] Failed to execute job due to unexpected runtime exception [jobId=f4606f39b51-21c994a7-6b35-49fa-b696-582fa7825c31, ses=GridJobSessionImpl [ses=GridTaskSessionImpl [taskName=com.test.ignite.compute.AssetRestrictionComputeJob, dep=GridDeployment [ts=1492836063447, depMode=SHARED, [email protected], clsLdrId=438a5f39b51-76a937b0-7831-458b-aee4-cec662f02b0d, userVer=0, loc=true, sampleClsName=o.a.i.i.processors.cache.distributed.dht.preloader.GridDhtPartitionMap2, pendingUndeploy=false, undeployed=false, usage=1], taskClsName=com.bfm.seclending.ignite.compute.AssetRestrictionComputeJob, sesId=c4606f39b51-21c994a7-6b35-49fa-b696-582fa7825c31, startTime=1492836072790, endTime=9223372036854775807, taskNodeId=21c994a7-6b35-49fa-b696-582fa7825c31, [email protected], closed=false, cpSpi=null, failSpi=null, loadSpi=null, usage=1, fullSup=false, internal=false, subjId=21c994a7-6b35-49fa-b696-582fa7825c31, mapFut=IgniteFuture [orig=GridFutureAdapter [resFlag=0, res=null, startTime=1492836072829, endTime=0, ignoreInterrupts=false, state=INIT]]], jobId=f4606f39b51-21c994a7-6b35-49fa-b696-582fa7825c31]] 
javax.cache.CacheException: class org.apache.ignite.IgniteInterruptedException: Failed to wait for asynchronous operation permit (thread got interrupted). 
    at org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1440) 
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.cacheException(IgniteCacheProxy.java:2183) 
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.put(IgniteCacheProxy.java:1383) 
    at co.test.ignite.compute.AssetRestrictionComputeJob.run(AssetRestrictionComputeJob.java:110) 
    at org.apache.ignite.internal.processors.closure.GridClosureProcessor$C4V2.execute(GridClosureProcessor.java:2215) 
    at org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:556) 
    at org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6564) 
    at org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:550) 
    at org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:479) 
    at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) 
    at org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1180) 
    at org.apache.ignite.internal.processors.job.GridJobProcessor$JobExecutionListener.onMessage(GridJobProcessor.java:1894) 
    at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1082) 
    at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:710) 
    at org.apache.ignite.internal.managers.communication.GridIoManager.access$1700(GridIoManager.java:102) 
    at org.apache.ignite.internal.managers.communication.GridIoManager$5.run(GridIoManager.java:673) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: class org.apache.ignite.IgniteInterruptedException: Failed to wait for asynchronous operation permit (thread got interrupted). 
    at org.apache.ignite.internal.util.IgniteUtils$3.apply(IgniteUtils.java:766) 
    at org.apache.ignite.internal.util.IgniteUtils$3.apply(IgniteUtils.java:764) 
    ... 19 more 
Caused by: java.lang.InterruptedException 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1302) 
    at java.util.concurrent.Semaphore.acquire(Semaphore.java:312) 
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.asyncOpAcquire(GridCacheAdapter.java:4597) 
    at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.asyncOp(GridDhtAtomicCache.java:817) 
    at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAsync0(GridDhtAtomicCache.java:1148) 
    at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.putAsync0(GridDhtAtomicCache.java:618) 
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.putAsync(GridCacheAdapter.java:2541) 
    at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.put(GridDhtAtomicCache.java:595) 
    at org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2215) 
    at org.apache.ignite.internal.processors.cache.IgniteCacheProxy.put(IgniteCacheProxy.java:1376) 
    ... 16 more 

回答

0

最有可能的服务器节点停止在执行过程中。这是内部Ignite线程中断的唯一情况。发生这种情况时,作业可以自动故障转移到另一个节点:https://apacheignite.readme.io/docs/fault-tolerance

+0

感谢您的答复,我已连接jvisualvm到服务器节点,并看到它正在运行。以下几点其他观察:1)只有put()失败。 2)get()3没有问题3)put()在服务器的IgniteRunnable上失败,它在客户端上仍然正常工作。 – SKS

+0

无论如何,你应该检查什么中断线程。 'InterruptedException'不是一个问题,它是其他的结果。从你提供的信息中可以看出节点停止是唯一的猜测。 –

0

我找到了InterruptedException的原因,我在客户端使用的执行服务提交作业不等待作业完成。

当我打电话future.get()..现在都好。谢谢