0
der Code in meinem Server:Wie verhindert man eine Dead-Sperre der Transaktion, wenn der Client abstürzt?
TransactionContext txCxt = hz.newTransactionContext(txop);
txCxt.beginTransaction();
TransactionalMap<Object, Object> map = txCxt.getMap(NearCacheTest.MAP);
try {
String tmp = String.valueOf(System.currentTimeMillis());
map.put("1", tmp); // reader1 is blocked
tmp = String.valueOf(System.currentTimeMillis());
map.put("2", tmp); // reader2 is blocked
// evict all client map cache
IList<Object> evictList = hz.getList(NearCacheTest.SEMAPHORE_EVICT);
evictList.add("1");
evictList.add("2");
int size = hz.getClientService().getConnectedClients().size();
hz.getSemaphore(NearCacheTest.SEMAPHORE_EVICT).release(size);
hz.getAtomicLong(NearCacheTest.SEMAPHORE_EVICT).set(size);
logger.info("client count:{}", size);
// wait to response from clients
logger.info("waiting for event:{}", NearCacheTest.SEMAPHORE_ACK);
hz.getSemaphore(NearCacheTest.SEMAPHORE_ACK).acquire();
Meine Frage ist:; wenn einer der Clients abstürzen, semaphore_ack
kann nie freigegeben werden
Was kann ich tun, um das Dead Lock zu verhindern?