default void closeDeviceManagementOperation(KapuaId scopeId, KapuaId operationId, Date updateOn, OperationStatus finalStatus) throws KapuaException {
DeviceManagementOperation deviceManagementOperation = null;
short attempts = 0;
short limit = 3;
boolean failed = false;
do {
try {
deviceManagementOperation = getDeviceManagementOperation(scopeId, operationId);
deviceManagementOperation.setEndedOn(updateOn);
deviceManagementOperation.setStatus(finalStatus);
DEVICE_MANAGEMENT_OPERATION_REGISTRY_SERVICE.update(deviceManagementOperation);
LOG.info("Update DeviceManagementOperation {} with status {}... SUCCEEDED!", operationId, finalStatus);
break;
} catch (Exception e) {
failed = true;
attempts++;
if (attempts >= limit) {
throw e;
} else {
LOG.warn("Update DeviceManagementOperation {} with status {}... FAILED! Retrying...", operationId, finalStatus);
}
}
} while (failed);
ManagementOperationNotificationQuery query = MANAGEMENT_OPERATION_NOTIFICATION_FACTORY.newQuery(scopeId);
query.setPredicate(new AttributePredicateImpl<>(ManagementOperationNotificationAttributes.OPERATION_ID, deviceManagementOperation.getId()));
ManagementOperationNotificationListResult notifications = MANAGEMENT_OPERATION_NOTIFICATION_REGISTRY_SERVICE.query(query);
for (ManagementOperationNotification mon : notifications.getItems()) {
MANAGEMENT_OPERATION_NOTIFICATION_REGISTRY_SERVICE.delete(mon.getScopeId(), mon.getId());
}
}