2017-04-22 58 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()..現在都好。謝謝