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/

Reply via email to