private void retryFailedPartitions() throws InterruptedException, ExecutionException { List<Integer> failedPartitions = new LinkedList<Integer>(); for (Map.Entry<Integer, Object> partitionResult : partitionResults.entrySet()) { int partitionId = partitionResult.getKey(); Object result = partitionResult.getValue(); if (result instanceof Throwable) { failedPartitions.add(partitionId); } } for (Integer failedPartition : failedPartitions) { Operation operation; PartitionAwareOperationFactory partitionAwareFactory = extractPartitionAware(operationFactory); if (partitionAwareFactory != null) { operation = partitionAwareFactory.createPartitionOperation(failedPartition); } else { operation = operationFactory.createOperation(); } Future future = operationService.createInvocationBuilder(serviceName, operation, failedPartition).invoke(); partitionResults.put(failedPartition, future); } for (Integer failedPartition : failedPartitions) { Future future = (Future) partitionResults.get(failedPartition); Object result = future.get(); partitionResults.put(failedPartition, result); } } }
private void retryPartition(final int partitionId) { Operation operation; PartitionAwareOperationFactory partitionAwareFactory = extractPartitionAware(operationFactory); if (partitionAwareFactory != null) { operation = partitionAwareFactory.createPartitionOperation(partitionId); } else { operation = operationFactory.createOperation(); } operationService.createInvocationBuilder(serviceName, operation, partitionId) .invoke() .andThen(new ExecutionCallback<Object>() { @Override public void onResponse(Object response) { setPartitionResult(partitionId, response); decrementLatchAndHandle(1); } @Override public void onFailure(Throwable t) { setPartitionResult(partitionId, t); decrementLatchAndHandle(1); } }); }
private void retryPartition(final int partitionId) { Operation operation; PartitionAwareOperationFactory partitionAwareFactory = extractPartitionAware(operationFactory); if (partitionAwareFactory != null) { operation = partitionAwareFactory.createPartitionOperation(partitionId); } else { operation = operationFactory.createOperation(); } operationService.createInvocationBuilder(serviceName, operation, partitionId) .invoke() .andThen(new ExecutionCallback<Object>() { @Override public void onResponse(Object response) { setPartitionResult(partitionId, response); decrementLatchAndHandle(1); } @Override public void onFailure(Throwable t) { setPartitionResult(partitionId, t); decrementLatchAndHandle(1); } }); }
@Override public Operation create(int partitionId) { Operation op = factory.createPartitionOperation(partitionId) .setNodeEngine(nodeEngine) .setPartitionId(partitionId) .setReplicaIndex(getReplicaIndex()) .setOperationResponseHandler(responseHandler) .setServiceName(getServiceName()) .setService(service) .setCallerUuid(extractCallerUuid()); OperationAccessor.setCallerAddress(op, getCallerAddress()); return op; } };
@Override public Operation create(int partitionId) { Operation op = factory.createPartitionOperation(partitionId) .setNodeEngine(nodeEngine) .setPartitionId(partitionId) .setReplicaIndex(getReplicaIndex()) .setOperationResponseHandler(responseHandler) .setServiceName(getServiceName()) .setService(service) .setCallerUuid(extractCallerUuid()); OperationAccessor.setCallerAddress(op, getCallerAddress()); return op; } };
partitionAwareOperationFactory = partitionAwareOperationFactory .createFactoryOnRunner(nodeEngine, new int[]{partitionId}); operation = partitionAwareOperationFactory.createPartitionOperation(partitionId); } else { operation = operationFactory.createOperation();