there is next code:
counters.forEach((key, value) -> {
TaskTicketsCounter outCounter = taskTicketCounterCache.invoke(key,
(entry, args) -> {
TaskTicketsCounter counter = entry.getValue();
if (counter != null) {
System.out.println(counter.getId());
System.out.println(counter.getNotProcessedTicketCount());
counter.setFailTicketCount(counter.getFailTicketCount() +
value.getRight());
counter.setSuccessTicketCount(counter.getSuccessTicketCount() +
value.getMiddle());
counter.setNotProcessedTicketCount(counter.getNotProcessedTicketCount() -
value.getLeft());
}
System.out.println(counter.getNotProcessedTicketCount());
return counter;
}, value);
System.out.println(outCounter.getNotProcessedTicketCount());
if (outCounter != null && outCounter.getNotProcessedTicketCount() ==
0){
Task task = taskCache.get(outCounter.getId());
if (outCounter.getFailTicketCount() > 0){
task.setStatus(TaskStatus.ERROR);
} else {
task.setStatus(TaskStatus.DONE);
}
taskCache.put(task.getId(), task);
}
});
when i run it concurently i never get
outCounter.getNotProcessedTicketCount() == 0
println out :
2
1
1
2
1
1
it look like what every entry proccessor get copy of one entry
--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/