use of com.emc.storageos.db.client.model.StorageSystem in project coprhd-controller by CoprHD.
the class FileDeviceController method updateQuotaDirectory.
@Override
public void updateQuotaDirectory(URI storage, FileShareQuotaDirectory quotaDir, URI fs, String task) throws ControllerException {
ControllerUtils.setThreadLocalLogData(fs, task);
FileShare fsObj = null;
StorageSystem storageObj = null;
QuotaDirectory quotaDirObj = null;
FileDeviceInputOutput args = new FileDeviceInputOutput();
try {
String[] params = { storage.toString(), fs.toString(), quotaDir.toString() };
_log.info("FileDeviceController::updateQtree: storage : {}, fs : {}, quotaDir : {}", params);
fsObj = _dbClient.queryObject(FileShare.class, fs);
storageObj = _dbClient.queryObject(StorageSystem.class, storage);
quotaDirObj = _dbClient.queryObject(QuotaDirectory.class, quotaDir.getId());
if (null != quotaDir.getSize()) {
quotaDirObj.setSize(quotaDir.getSize());
}
quotaDirObj.setSoftLimit(quotaDir.getSoftLimit());
quotaDirObj.setSoftGrace(quotaDir.getSoftGrace());
quotaDirObj.setNotificationLimit(quotaDir.getNotificationLimit());
if (null != quotaDir.getOpLock()) {
quotaDirObj.setOpLock(quotaDir.getOpLock());
}
if (null != quotaDir.getSecurityStyle()) {
quotaDirObj.setSecurityStyle(quotaDir.getSecurityStyle());
}
// Set up args
args.addFileShare(fsObj);
args.addQuotaDirectory(quotaDirObj);
args.setOpId(task);
FileStorageDevice nasDevice = getDevice(storageObj.getSystemType());
BiosCommandResult result = nasDevice.doUpdateQuotaDirectory(storageObj, args, quotaDirObj);
if (result.getCommandPending()) {
return;
}
if (!result.isCommandSuccess() && !result.getCommandPending()) {
_log.error("FileDeviceController::updateQtree: QuotaDirectory update command is not successful");
// The quota object was already modified with changes.
// if it fail to update the quota directory,
// restore the object with the original quota directory!!!
quotaDirObj = _dbClient.queryObject(QuotaDirectory.class, quotaDir.getId());
}
quotaDirObj.setNativeGuid(NativeGUIDGenerator.generateNativeGuid(_dbClient, quotaDirObj, fsObj.getName()));
fsObj.getOpStatus().updateTaskStatus(task, result.toOperation());
quotaDirObj.getOpStatus().updateTaskStatus(task, result.toOperation());
// save the task status into db
_dbClient.updateObject(quotaDirObj);
_dbClient.updateObject(fsObj);
fsObj = _dbClient.queryObject(FileShare.class, fs);
_log.debug("FileDeviceController::updateQtree: After QuotaDirectory updated and fs persisted, Task Stauts {} -- Operation Details : {}", fsObj.getOpStatus().get(task).getStatus(), result.toOperation());
String eventMsg = result.isCommandSuccess() ? "" : result.getMessage();
recordFileDeviceOperation(_dbClient, OperationTypeEnum.UPDATE_FILE_SYSTEM_QUOTA_DIR, result.isCommandSuccess(), eventMsg, "", quotaDirObj, fsObj);
} catch (Exception e) {
String[] params = { storage.toString(), fs.toString(), quotaDir.toString(), e.getMessage() };
_log.error("FileDeviceController::updateQtree: Unable to update file system quotaDir: storage {}, FS {}, snapshot {}: {}", params);
updateTaskStatus(task, fsObj, e);
updateTaskStatus(task, quotaDirObj, e);
if ((fsObj != null) && (quotaDirObj != null)) {
recordFileDeviceOperation(_dbClient, OperationTypeEnum.CREATE_FILE_SYSTEM_QUOTA_DIR, false, e.getMessage(), "", quotaDirObj, fsObj);
}
}
}
use of com.emc.storageos.db.client.model.StorageSystem in project coprhd-controller by CoprHD.
the class FileDeviceController method delete.
@Override
public void delete(URI storage, URI pool, URI uri, boolean forceDelete, String deleteType, String opId) throws ControllerException {
ControllerUtils.setThreadLocalLogData(uri, opId);
StorageSystem storageObj = null;
FileObject fileObject = null;
FileShare fsObj = null;
Snapshot snapshotObj = null;
try {
storageObj = _dbClient.queryObject(StorageSystem.class, storage);
String[] params = { storage.toString(), uri.toString(), String.valueOf(forceDelete), deleteType };
_log.info("Delete : storage : {}, URI : {}, forceDelete : {}, delete_type : {} ", params);
FileDeviceInputOutput args = new FileDeviceInputOutput();
boolean isFile = false;
args.setOpId(opId);
if (URIUtil.isType(uri, FileShare.class)) {
isFile = true;
args.setForceDelete(forceDelete);
fsObj = _dbClient.queryObject(FileShare.class, uri);
setVirtualNASinArgs(fsObj.getVirtualNAS(), args);
fileObject = fsObj;
args.addFileShare(fsObj);
args.setFileOperation(isFile);
BiosCommandResult result;
WorkflowStepCompleter.stepExecuting(opId);
if (FileControllerConstants.DeleteTypeEnum.VIPR_ONLY.toString().equalsIgnoreCase(deleteType) && !fsObj.getInactive()) {
result = BiosCommandResult.createSuccessfulResult();
} else {
if (!fsObj.getInactive()) {
// Acquire lock for VNXFILE Storage System
acquireStepLock(storageObj, opId);
result = getDevice(storageObj.getSystemType()).doDeleteFS(storageObj, args);
} else {
result = BiosCommandResult.createSuccessfulResult();
}
}
// In case of VNXe
if (result.getCommandPending()) {
return;
}
fsObj.getOpStatus().updateTaskStatus(opId, result.toOperation());
if (result.isCommandSuccess() && (FileControllerConstants.DeleteTypeEnum.FULL.toString().equalsIgnoreCase(deleteType))) {
fsObj.setInactive(true);
if (forceDelete) {
// Delete Snapshot and its references from DB
doDeleteSnapshotsFromDB(fsObj, true, null, args);
args.addQuotaDirectory(null);
// Delete Quota Directory from DB
doFSDeleteQuotaDirsFromDB(args);
// Delete CIFS Share ACLs from DB
deleteShareACLsFromDB(args);
// Delete Export Rules from DB
doDeleteExportRulesFromDB(true, null, args);
// Remove FileShare Reference from File Policy
doDeletePolicyReferenceFromDB(fsObj);
}
WorkflowStepCompleter.stepSucceded(opId);
} else if (!result.getCommandPending() && FileControllerConstants.DeleteTypeEnum.FULL.toString().equalsIgnoreCase(deleteType)) {
WorkflowStepCompleter.stepFailed(opId, result.getServiceCoded());
}
if (result.isCommandSuccess() && (FileControllerConstants.DeleteTypeEnum.VIPR_ONLY.toString().equalsIgnoreCase(deleteType))) {
boolean snapshotsExist = snapshotsExistsOnFS(fsObj);
boolean quotaDirsExist = quotaDirectoriesExistsOnFS(fsObj);
boolean policyExists = fileProtectionPoliciesExistsOnFS(fsObj);
boolean fsCheck = getDevice(storageObj.getSystemType()).doCheckFSExists(storageObj, args);
if (fsCheck) {
String errMsg = null;
if (snapshotsExist) {
errMsg = new String("delete file system from ViPR database failed because snapshots exist for file system " + fsObj.getLabel() + " and once deleted the snapshot cannot be ingested into ViPR");
} else if (quotaDirsExist && !quotaDirectoryIngestionSupported(storageObj.getSystemType())) {
errMsg = new String("delete file system from ViPR database failed because quota directories exist for file system " + fsObj.getLabel() + " and once deleted the quota directory cannot be ingested into ViPR");
} else if (policyExists) {
errMsg = new String("delete file system from ViPR database failed because file protection policies exist for file system " + fsObj.getLabel() + " and once deleted the policy cannot be ingested into ViPR");
}
if (errMsg != null) {
_log.error(errMsg);
final ServiceCoded serviceCoded = DeviceControllerException.errors.jobFailedOpMsg(OperationTypeEnum.DELETE_FILE_SYSTEM.toString(), errMsg);
result = BiosCommandResult.createErrorResult(serviceCoded);
fsObj.getOpStatus().updateTaskStatus(opId, result.toOperation());
recordFileDeviceOperation(_dbClient, OperationTypeEnum.DELETE_FILE_SYSTEM, result.isCommandSuccess(), "", "", fsObj, storageObj);
_dbClient.updateObject(fsObj);
WorkflowStepCompleter.stepFailed(opId, result.getServiceCoded());
return;
}
}
// Delete Snapshot and its references from DB
doDeleteSnapshotsFromDB(fsObj, true, null, args);
args.addQuotaDirectory(null);
doFSDeleteQuotaDirsFromDB(args);
deleteShareACLsFromDB(args);
doDeleteExportRulesFromDB(true, null, args);
// Remove FileShare Reference from File Policy
doDeletePolicyReferenceFromDB(fsObj);
SMBShareMap cifsSharesMap = fsObj.getSMBFileShares();
if (cifsSharesMap != null && !cifsSharesMap.isEmpty()) {
cifsSharesMap.clear();
}
fsObj.setInactive(true);
WorkflowStepCompleter.stepSucceded(opId);
} else if (!result.getCommandPending() && FileControllerConstants.DeleteTypeEnum.VIPR_ONLY.toString().equalsIgnoreCase(deleteType)) {
WorkflowStepCompleter.stepFailed(opId, result.getServiceCoded());
}
_dbClient.updateObject(fsObj);
recordFileDeviceOperation(_dbClient, OperationTypeEnum.DELETE_FILE_SYSTEM, result.isCommandSuccess(), "", "", fsObj, storageObj);
} else {
snapshotObj = _dbClient.queryObject(Snapshot.class, uri);
fileObject = snapshotObj;
args.addSnapshot(snapshotObj);
fsObj = _dbClient.queryObject(FileShare.class, snapshotObj.getParent());
setVirtualNASinArgs(fsObj.getVirtualNAS(), args);
args.addFileShare(fsObj);
args.setFileOperation(isFile);
WorkflowStepCompleter.stepExecuting(opId);
// Acquire lock for VNXFILE Storage System
acquireStepLock(storageObj, opId);
BiosCommandResult result = getDevice(storageObj.getSystemType()).doDeleteSnapshot(storageObj, args);
if (result.getCommandPending()) {
return;
}
if (!result.isCommandSuccess() && !result.getCommandPending()) {
WorkflowStepCompleter.stepFailed(opId, result.getServiceCoded());
}
snapshotObj.getOpStatus().updateTaskStatus(opId, result.toOperation());
if (result.isCommandSuccess()) {
WorkflowStepCompleter.stepSucceded(opId);
snapshotObj.setInactive(true);
// delete the corresponding export rules if available.
args.addSnapshot(snapshotObj);
doDeleteExportRulesFromDB(true, null, args);
}
_dbClient.updateObject(snapshotObj);
recordFileDeviceOperation(_dbClient, OperationTypeEnum.DELETE_FILE_SNAPSHOT, result.isCommandSuccess(), "", "", snapshotObj, fsObj, storageObj);
}
} catch (Exception e) {
String[] params = { storage.toString(), uri.toString(), String.valueOf(forceDelete), e.getMessage() };
_log.error("Unable to delete file system or snapshot: storage {}, FS/snapshot {}, forceDelete {}: {}", params);
updateTaskStatus(opId, fileObject, e);
// work flow fail for fileshare delete
if (URIUtil.isType(uri, FileShare.class)) {
ServiceError serviceError = DeviceControllerException.errors.jobFailed(e);
WorkflowStepCompleter.stepFailed(opId, serviceError);
}
if (URIUtil.isType(uri, FileShare.class)) {
if ((fsObj != null) && (storageObj != null)) {
recordFileDeviceOperation(_dbClient, OperationTypeEnum.DELETE_FILE_SYSTEM, false, e.getMessage(), "", fsObj, storageObj);
}
} else {
if ((fsObj != null) && (storageObj != null) && (snapshotObj != null)) {
recordFileDeviceOperation(_dbClient, OperationTypeEnum.DELETE_FILE_SNAPSHOT, false, e.getMessage(), "", snapshotObj, fsObj, storageObj);
}
}
}
}
use of com.emc.storageos.db.client.model.StorageSystem in project coprhd-controller by CoprHD.
the class ManagedCapacityImpl method getManagedCapacity.
public static ManagedResourcesCapacity getManagedCapacity(DbClient dbClient) throws InterruptedException {
ManagedResourcesCapacity resourcesCapacity = new ManagedResourcesCapacity();
ManagedResourcesCapacity.ManagedResourceCapacity manCap;
CustomQueryUtility.AggregatedValue aggr = null;
if (Thread.currentThread().interrupted()) {
throw new InterruptedException();
}
manCap = new ManagedResourcesCapacity.ManagedResourceCapacity();
manCap.setType(ManagedResourcesCapacity.CapacityResourceType.VOLUME);
aggr = CustomQueryUtility.aggregatedPrimitiveField(dbClient, Volume.class, "allocatedCapacity");
manCap.setNumResources(aggr.getCount());
manCap.setResourceCapacity(aggr.getValue());
resourcesCapacity.getResourceCapacityList().add(manCap);
if (Thread.currentThread().interrupted()) {
throw new InterruptedException();
}
manCap = new ManagedResourcesCapacity.ManagedResourceCapacity();
manCap.setType(ManagedResourcesCapacity.CapacityResourceType.FILESHARE);
aggr = CustomQueryUtility.aggregatedPrimitiveField(dbClient, FileShare.class, "usedCapacity");
manCap.setNumResources(aggr.getCount());
manCap.setResourceCapacity(aggr.getValue());
resourcesCapacity.getResourceCapacityList().add(manCap);
if (Thread.currentThread().interrupted()) {
throw new InterruptedException();
}
manCap = new ManagedResourcesCapacity.ManagedResourceCapacity();
manCap.setType(ManagedResourcesCapacity.CapacityResourceType.POOL);
aggr = CustomQueryUtility.aggregatedPrimitiveField(dbClient, StoragePool.class, "freeCapacity");
manCap.setNumResources(aggr.getCount());
double capacity = aggr.getValue();
// We must consider storage systems with sharedStorageCapacity == true (e.g. Ceph),
// because each their pool reports total storage free capacity.
// We get all such systems and subtract its pool size multiplied by (pools count - 1) from total capacity.
// Get all StoragePools where storageDevice is a StorageSystem where sharedStorageCapacity is true
Joiner j = new Joiner(dbClient).join(StorageSystem.class, "ss").match("sharedStorageCapacity", true).join("ss", StoragePool.class, "sp", "storageDevice").go();
Map<StorageSystem, Collection<URI>> ssToPoolMap = j.pushList("ss").pushUris("sp").map();
// From the joiner, get the StorageSystems (which is a small amount of objects) and the SPs (which is large, so get URIs and use query)
for (Entry<StorageSystem, Collection<URI>> ssToPoolEntry : ssToPoolMap.entrySet()) {
Collection<URI> poolURIs = ssToPoolEntry.getValue();
int extraPoolCount = poolURIs.size() - 1;
if (extraPoolCount <= 0) {
// Do nothing if none of the only pool belongs to Storage System
continue;
}
StoragePool pool = dbClient.queryObject(StoragePool.class, poolURIs.iterator().next());
capacity -= extraPoolCount * pool.getFreeCapacity();
}
manCap.setResourceCapacity(capacity * KB);
resourcesCapacity.getResourceCapacityList().add(manCap);
if (Thread.currentThread().interrupted()) {
throw new InterruptedException();
}
manCap = new ManagedResourcesCapacity.ManagedResourceCapacity();
manCap.setType(ManagedResourcesCapacity.CapacityResourceType.BUCKET);
aggr = CustomQueryUtility.aggregatedPrimitiveField(dbClient, Bucket.class, "hardQuota");
manCap.setNumResources(aggr.getCount());
manCap.setResourceCapacity(aggr.getValue());
resourcesCapacity.getResourceCapacityList().add(manCap);
if (Thread.currentThread().interrupted()) {
throw new InterruptedException();
}
return resourcesCapacity;
}
use of com.emc.storageos.db.client.model.StorageSystem in project coprhd-controller by CoprHD.
the class NativeGUIDGenerator method generateNativeGuidForQuotaDir.
public static String generateNativeGuidForQuotaDir(DbClient dbClient, String quotaDirName, URI fsURI) throws IOException {
FileShare fs = dbClient.queryObject(FileShare.class, fsURI);
StorageSystem device = dbClient.queryObject(StorageSystem.class, fs.getStorageDevice());
return String.format("%s+%s+%s+" + QUOTADIRECTORY + "+%s", _deviceTypeMap.get(device.getSystemType()), device.getSerialNumber(), fs.getName(), quotaDirName);
}
use of com.emc.storageos.db.client.model.StorageSystem in project coprhd-controller by CoprHD.
the class ObjectControllerImpl method addUserSecretKey.
@Override
public ObjectUserSecretKey addUserSecretKey(URI storage, String userId, String secretKey) throws InternalException {
_log.debug("ObjectControllerImpl:addUserSecretKey start");
// Synchronous call than queuing
StorageSystem storageSystem = _dbClient.queryObject(StorageSystem.class, storage);
Controller controller = lookupDeviceController(storageSystem);
ObjectController objController = (ObjectController) controller;
return objController.addUserSecretKey(storage, userId, secretKey);
}
Aggregations