use of com.emc.storageos.db.client.model.Task in project coprhd-controller by CoprHD.
the class TaskUtils method findPendingTasksForResource.
/**
* returns pending tasks for a resource
*
* @param dbClient
* @param resourceId
* @return
*/
public static Iterator<Task> findPendingTasksForResource(DbClient dbClient, URI resourceId, URI tenantId) {
Constraint constraint = AggregatedConstraint.Factory.getAggregationConstraint(Task.class, "tenant", tenantId.toString(), "taskStatus");
AggregationQueryResultList queryResults = new AggregationQueryResultList();
dbClient.queryByConstraint(constraint, queryResults);
Iterator<AggregationQueryResultList.AggregatedEntry> it = queryResults.iterator();
List<URI> pendingTasks = new ArrayList<URI>();
while (it.hasNext()) {
AggregationQueryResultList.AggregatedEntry entry = it.next();
if (entry.getValue().equals(Task.Status.pending.name())) {
pendingTasks.add(entry.getId());
}
}
List<Task> pendingTasksForResource = new ArrayList<Task>();
Iterator<Task> pendingItr = dbClient.queryIterativeObjects(Task.class, pendingTasks);
while (pendingItr.hasNext()) {
Task task = pendingItr.next();
if (task.getResource().getURI().equals(resourceId)) {
pendingTasksForResource.add(task);
}
}
return pendingTasksForResource.iterator();
}
use of com.emc.storageos.db.client.model.Task in project coprhd-controller by CoprHD.
the class IsilonFileStorageDevice method listSanpshotByPolicy.
@Override
public BiosCommandResult listSanpshotByPolicy(StorageSystem storageObj, FileDeviceInputOutput args) {
FilePolicy sp = args.getFileProtectionPolicy();
FileShare fs = args.getFs();
String snapshotScheduleName = sp.getFilePolicyName() + "_" + args.getFsName();
if (sp.getPolicyStorageResources() != null && !sp.getPolicyStorageResources().isEmpty()) {
for (String uriResource : sp.getPolicyStorageResources()) {
PolicyStorageResource policyRes = _dbClient.queryObject(PolicyStorageResource.class, URI.create(uriResource));
if (policyRes != null && policyRes.getStorageSystem().equals(storageObj.getId())) {
snapshotScheduleName = policyRes.getPolicyNativeId();
break;
}
}
}
IsilonApi isi = getIsilonDevice(storageObj);
String resumeToken = null;
try {
do {
IsilonList<IsilonSnapshot> snapshots = isi.listSnapshotsCreatedByPolicy(resumeToken, snapshotScheduleName);
if (snapshots != null) {
for (IsilonSnapshot islon_snap : snapshots.getList()) {
_log.info("file policy snapshot is : " + islon_snap.getName());
Snapshot snap = new Snapshot();
snap.setLabel(islon_snap.getName());
snap.setMountPath(islon_snap.getPath());
snap.setName(islon_snap.getName());
snap.setId(URIUtil.createId(Snapshot.class));
snap.setOpStatus(new OpStatusMap());
snap.setProject(new NamedURI(fs.getProject().getURI(), islon_snap.getName()));
snap.setMountPath(getSnapshotPath(islon_snap.getPath(), islon_snap.getName()));
snap.setParent(new NamedURI(fs.getId(), islon_snap.getName()));
StringMap map = new StringMap();
Long createdTime = Long.parseLong(islon_snap.getCreated()) * SEC_IN_MILLI;
String expiresTime = "Never";
if (islon_snap.getExpires() != null && !islon_snap.getExpires().isEmpty()) {
Long expTime = Long.parseLong(islon_snap.getExpires()) * SEC_IN_MILLI;
expiresTime = expTime.toString();
}
map.put("created", createdTime.toString());
map.put("expires", expiresTime);
map.put("schedule", sp.getFilePolicyName());
snap.setExtensions(map);
_dbClient.updateObject(snap);
}
resumeToken = snapshots.getToken();
}
} while (resumeToken != null && !resumeToken.equalsIgnoreCase("null"));
} catch (IsilonException e) {
_log.error("listing snapshot by file policy failed.", e);
return BiosCommandResult.createErrorResult(e);
}
Task task = TaskUtils.findTaskForRequestId(_dbClient, fs.getId(), args.getOpId());
// set task to completed and progress to 100 and store in DB, so waiting thread in apisvc can read it.
task.ready();
task.setProgress(100);
_dbClient.updateObject(task);
return BiosCommandResult.createSuccessfulResult();
}
use of com.emc.storageos.db.client.model.Task in project coprhd-controller by CoprHD.
the class ControlRequestLockQueueListener method updateTasks.
/**
* Updates tasks of a given status with queueing information.
*
* @param tasks List of tasks.
* @param filter Filter to act only on tasks of a specific status.
* @param status New task status to update with.
* @param request ControlRequest instance.
*/
private void updateTasks(List<Task> tasks, Predicate<Task> filter, Task.Status status, ControlRequest request) {
Collection<Task> filteredTasks = Collections2.filter(tasks, filter);
for (Task task : filteredTasks) {
log.info("Found task {} with status {}", task.getId(), task.getStatus());
task.setStatus(status.toString());
if (NullColumnValueGetter.isNotNullValue(request.getLockGroup())) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(request.getTimestamp());
task.setQueuedStartTime(cal);
task.setQueueName(request.getLockGroup());
} else {
task.setQueueName(NullColumnValueGetter.getNullStr());
task.setQueuedStartTime(null);
}
}
dbClient.persistObject(tasks);
}
use of com.emc.storageos.db.client.model.Task in project coprhd-controller by CoprHD.
the class FileService method assignFileReplicationPolicyToFS.
private TaskResourceRep assignFileReplicationPolicyToFS(FileShare fs, FilePolicy filePolicy, FilePolicyFileSystemAssignParam param, String task) {
StringBuffer notSuppReasonBuff = new StringBuffer();
// Verify the fs has replication attributes!!!
if (fs.getPersonality() != null && PersonalityTypes.SOURCE.name().equalsIgnoreCase(fs.getPersonality()) && fs.getMirrorfsTargets() != null && !fs.getMirrorfsTargets().isEmpty()) {
notSuppReasonBuff.append(String.format("File system %s has active target file systems", fs.getLabel()));
_log.error(notSuppReasonBuff.toString());
throw APIException.badRequests.unableToProcessRequest(notSuppReasonBuff.toString());
}
// File system should not be the target file system..
if (fs.getPersonality() != null && fs.getPersonality().equalsIgnoreCase(PersonalityTypes.TARGET.name())) {
notSuppReasonBuff.append(String.format("File system - %s given in request is an active Target file system.", fs.getLabel()));
_log.error(notSuppReasonBuff.toString());
throw APIException.badRequests.unableToProcessRequest(notSuppReasonBuff.toString());
}
ArgValidator.checkFieldNotNull(param.getTargetVArrays(), "target_varrays");
Set<URI> targertVarrayURIs = param.getTargetVArrays();
for (URI targertVarrayURI : targertVarrayURIs) {
ArgValidator.checkFieldUriType(targertVarrayURI, VirtualArray.class, "target_varray");
VirtualArray targetVarray = _permissionsHelper.getObjectById(targertVarrayURI, VirtualArray.class);
ArgValidator.checkEntity(targetVarray, targertVarrayURI, false);
}
VirtualArray sourceVarray = _dbClient.queryObject(VirtualArray.class, fs.getVirtualArray());
// Get the project.
URI projectURI = fs.getProject().getURI();
Project project = _permissionsHelper.getObjectById(projectURI, Project.class);
VirtualPool vpool = _dbClient.queryObject(VirtualPool.class, fs.getVirtualPool());
// New operation
TaskList taskList = new TaskList();
Operation op = _dbClient.createTaskOpStatus(FileShare.class, fs.getId(), task, ResourceOperationTypeEnum.ASSIGN_FILE_POLICY_TO_FILE_SYSTEM);
op.setDescription("assign file policy to file system");
// As the action done by tenant admin
// Set current tenant as task's tenant!!!
Task taskObj = op.getTask(fs.getId());
FilePolicyServiceUtils.updateTaskTenant(_dbClient, filePolicy, "assign", taskObj, fs.getTenant().getURI());
TaskResourceRep fileShareTask = toTask(fs, task, op);
taskList.getTaskList().add(fileShareTask);
StorageSystem device = _dbClient.queryObject(StorageSystem.class, fs.getStorageDevice());
// prepare vpool capability values
VirtualPoolCapabilityValuesWrapper capabilities = new VirtualPoolCapabilityValuesWrapper();
capabilities.put(VirtualPoolCapabilityValuesWrapper.SIZE, fs.getCapacity());
capabilities.put(VirtualPoolCapabilityValuesWrapper.RESOURCE_COUNT, new Integer(1));
if (VirtualPool.ProvisioningType.Thin.toString().equalsIgnoreCase(vpool.getSupportedProvisioningType())) {
capabilities.put(VirtualPoolCapabilityValuesWrapper.THIN_PROVISIONING, Boolean.TRUE);
}
// Set the source file system details
// source fs details used in finding recommendations for target fs!!
capabilities.put(VirtualPoolCapabilityValuesWrapper.FILE_SYSTEM_CREATE_MIRROR_COPY, Boolean.TRUE);
capabilities.put(VirtualPoolCapabilityValuesWrapper.EXISTING_SOURCE_FILE_SYSTEM, fs);
capabilities.put(VirtualPoolCapabilityValuesWrapper.SOURCE_STORAGE_SYSTEM, device);
capabilities.put(VirtualPoolCapabilityValuesWrapper.FILE_REPLICATION_TYPE, filePolicy.getFileReplicationType());
capabilities.put(VirtualPoolCapabilityValuesWrapper.FILE_REPLICATION_COPY_MODE, filePolicy.getFileReplicationCopyMode());
Set<String> targetVArrys = new HashSet<String>();
if (filePolicy.getFileReplicationType().equalsIgnoreCase(FileReplicationType.REMOTE.name())) {
for (URI targertVarrayURI : targertVarrayURIs) {
targetVArrys.add(targertVarrayURI.toString());
}
} else {
targetVArrys.add(sourceVarray.getId().toString());
}
URI targetvPool = null;
// Get the existing topologies for the policy
if (filePolicy.getReplicationTopologies() != null && !filePolicy.getReplicationTopologies().isEmpty()) {
for (String strTopology : filePolicy.getReplicationTopologies()) {
FileReplicationTopology dbTopology = _dbClient.queryObject(FileReplicationTopology.class, URI.create(strTopology));
Set<String> dbTargetVArrys = new HashSet<String>();
if (dbTopology != null && sourceVarray.getId().toString().equalsIgnoreCase(dbTopology.getSourceVArray().toString())) {
dbTargetVArrys.addAll(dbTopology.getTargetVArrays());
if (dbTargetVArrys.containsAll(targetVArrys)) {
// which are created from older release remote replication vpool
for (String targetVarray : targetVArrys) {
if (dbTopology.getTargetVAVPool() != null && !dbTopology.getTargetVAVPool().isEmpty()) {
String[] vavPool = dbTopology.getTargetVAVPool().split(SEPARATOR);
if (vavPool != null && vavPool.length > 1 && targetVarray.equalsIgnoreCase(vavPool[0])) {
String strvPool = vavPool[1];
VirtualPool vPool = _dbClient.queryObject(VirtualPool.class, URI.create(strvPool));
if (vPool != null && !vPool.getInactive()) {
targetvPool = vPool.getId();
}
}
}
}
}
break;
}
}
}
capabilities.put(VirtualPoolCapabilityValuesWrapper.FILE_REPLICATION_TARGET_VARRAYS, targetVArrys);
if (targetvPool != null) {
capabilities.put(VirtualPoolCapabilityValuesWrapper.FILE_REPLICATION_TARGET_VPOOL, targetvPool);
} else {
capabilities.put(VirtualPoolCapabilityValuesWrapper.FILE_REPLICATION_TARGET_VPOOL, vpool.getId());
}
FileServiceApi fileServiceApi = getFileShareServiceImpl(capabilities, _dbClient);
try {
// Call out placementManager to get the recommendation for placement.
List recommendations = _filePlacementManager.getRecommendationsForFileCreateRequest(sourceVarray, project, vpool, capabilities);
fileServiceApi.assignFilePolicyToFileSystem(fs, filePolicy, project, vpool, sourceVarray, taskList, task, recommendations, capabilities);
} catch (BadRequestException e) {
_dbClient.error(FileShare.class, fs.getId(), task, e);
_log.error("Error Assigning Filesystem policy {}, {}", e.getMessage(), e);
throw e;
} catch (Exception e) {
_log.error("Error Assigning Filesystem policy {}, {}", e.getMessage(), e);
throw APIException.badRequests.unableToProcessRequest(e.getMessage());
}
return fileShareTask;
}
use of com.emc.storageos.db.client.model.Task in project coprhd-controller by CoprHD.
the class FileService method assignFilePolicyToFS.
private TaskResourceRep assignFilePolicyToFS(FileShare fs, FilePolicy filePolicy, String task) {
StorageSystem device = _dbClient.queryObject(StorageSystem.class, fs.getStorageDevice());
FileOrchestrationController controller = getController(FileOrchestrationController.class, FileOrchestrationController.FILE_ORCHESTRATION_DEVICE);
Operation op = _dbClient.createTaskOpStatus(FileShare.class, fs.getId(), task, ResourceOperationTypeEnum.ASSIGN_FILE_POLICY_TO_FILE_SYSTEM);
op.setDescription("assign file policy to file system");
// As the action done by tenant admin
// Set current tenant as task's tenant!!!
Task taskObj = op.getTask(fs.getId());
FilePolicyServiceUtils.updateTaskTenant(_dbClient, filePolicy, "assign", taskObj, fs.getTenant().getURI());
try {
_log.info("No Errors found proceeding further {}, {}, {}", new Object[] { _dbClient, fs, filePolicy });
List<FileDescriptor> fileDescriptors = new ArrayList<>();
FileDescriptor desc = new FileDescriptor(Type.FILE_EXISTING_SOURCE, fs.getId());
fileDescriptors.add(desc);
controller.assignFilePolicyToFileSystem(filePolicy, fileDescriptors, task);
auditOp(OperationTypeEnum.ASSIGN_FILE_POLICY, true, AuditLogManager.AUDITOP_BEGIN, fs.getId().toString(), device.getId().toString(), filePolicy.getId());
} catch (BadRequestException e) {
_dbClient.error(FileShare.class, fs.getId(), task, e);
_log.error("Error Assigning Filesystem policy {}, {}", e.getMessage(), e);
throw e;
} catch (Exception e) {
_log.error("Error Assigning Filesystem policy {}, {}", e.getMessage(), e);
throw APIException.badRequests.unableToProcessRequest(e.getMessage());
}
return toTask(fs, task, op);
}
Aggregations