use of com.emc.storageos.coordinator.client.model.StorageDriversInfo in project coprhd-controller by CoprHD.
the class CoordinatorClientImpl method isControlNodesDriversSynced.
private boolean isControlNodesDriversSynced(StorageDriversInfo target, Map<Service, StorageDriversInfo> infos) {
Set<String> targetDrivers = new HashSet<String>();
if (target != null) {
targetDrivers = target.getInstalledDrivers();
}
for (Entry<Service, StorageDriversInfo> info : infos.entrySet()) {
String nodeName = info.getKey().getId();
Set<String> installedDrivers = info.getValue().getInstalledDrivers();
if (!targetDrivers.equals(installedDrivers)) {
log.info("Target driver list: {}", Strings.repr(installedDrivers));
log.info("Node {}'s driver list (not synced): {}", nodeName, Strings.repr(installedDrivers));
return false;
}
}
log.info("Driver lists on all nodes in current site are synced with target");
return true;
}
use of com.emc.storageos.coordinator.client.model.StorageDriversInfo in project coprhd-controller by CoprHD.
the class StorageDriverService method upgrade.
@POST
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN })
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/{driverName}")
public Response upgrade(@PathParam("driverName") String driverName, @FormDataParam("driver") InputStream uploadedInputStream, @FormDataParam("driver") FormDataContentDisposition details, @FormDataParam("force") @DefaultValue("false") Boolean force) {
log.info("Start to upgrade driver for {} ...", driverName);
String fileName = details.getFileName();
precheckForDriverFileName(fileName);
long fileSize = details.getSize();
log.info("Received driver jar file: {}, size: {}", fileName, fileSize);
if (fileSize >= MAX_DRIVER_SIZE) {
throw APIException.badRequests.fileSizeExceedsLimit(MAX_DRIVER_SIZE);
}
precheckForEnv();
File driverFile = saveToTmpDir(fileName, uploadedInputStream);
StorageDriverMetaData metaData = parseDriverMetaData(driverFile);
if (!StringUtils.equals(driverName, metaData.getDriverName())) {
throw APIException.internalServerErrors.upgradeDriverPrecheckFailed(String.format("Driver name specified in jar file is not %s", driverName));
}
precheckForMetaData(metaData, true, force);
InterProcessLock lock = getStorageDriverOperationLock();
try {
moveDriverToDataDir(driverFile);
// save new meta data to ZK
coordinator.persistServiceConfiguration(metaData.toConfiguration());
// update status to UPGRADING in db
StorageDriversInfo targetInfo = coordinator.getTargetInfo(StorageDriversInfo.class);
if (targetInfo == null) {
targetInfo = new StorageDriversInfo();
}
List<StorageSystemType> types = filterTypesByDriver(driverName);
for (StorageSystemType type : types) {
type.setDriverStatus(StorageSystemType.STATUS.UPGRADING.toString());
dbClient.updateObject(type);
// remove old driver file name from target list
targetInfo.getInstalledDrivers().remove(type.getDriverFileName());
}
coordinator.setTargetInfo(targetInfo);
log.info("Successfully triggered upgrade operation for driver", metaData.getDriverName());
auditOperation(OperationTypeEnum.UPGRADE_STORAGE_DRIVER, AuditLogManager.AUDITLOG_SUCCESS, AuditLogManager.AUDITOP_BEGIN, driverName);
return Response.ok().build();
} catch (Exception e) {
log.error("Error happened when upgrading driver file", e);
auditOperation(OperationTypeEnum.UPGRADE_STORAGE_DRIVER, AuditLogManager.AUDITLOG_FAILURE, null, driverName);
throw APIException.internalServerErrors.upgradeDriverFailed(e.getMessage());
} finally {
try {
lock.release();
} catch (Exception ignore) {
log.error(String.format("Lock release failed when upgrading driver %s", metaData.getDriverName()));
}
}
}
use of com.emc.storageos.coordinator.client.model.StorageDriversInfo in project coprhd-controller by CoprHD.
the class StorageDriverService method uninstall.
@DELETE
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN })
@Path("/{driverName}")
public Response uninstall(@PathParam("driverName") String driverName) {
log.info("Start to uninstall driver {} ...", driverName);
Set<String> driverNames = getAllDriverNames();
if (!driverNames.contains(driverName)) {
throw APIException.badRequests.driverNameNotFound(driverName);
}
precheckForEnv();
List<StorageSystemType> toUninstallTypes = filterTypesByDriver(driverName);
precheckForDriverStatus(toUninstallTypes, driverName);
InterProcessLock lock = getStorageDriverOperationLock();
try {
StorageDriversInfo info = coordinator.getTargetInfo(StorageDriversInfo.class);
if (info == null) {
info = new StorageDriversInfo();
}
for (StorageSystemType type : toUninstallTypes) {
type.setDriverStatus(StorageSystemType.STATUS.UNISNTALLING.toString());
dbClient.updateObject(type);
info.getInstalledDrivers().remove(type.getDriverFileName());
}
// update target list in ZK
coordinator.setTargetInfo(info);
log.info("Successfully triggered uninstall operation for driver {}", driverName);
auditOperation(OperationTypeEnum.UNINSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_SUCCESS, AuditLogManager.AUDITOP_BEGIN, driverName);
return Response.ok().build();
} catch (Exception e) {
log.error("Error happened when installing driver file", e);
auditOperation(OperationTypeEnum.UNINSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_FAILURE, null, driverName);
throw APIException.internalServerErrors.uninstallDriverFailed(e.getMessage());
} finally {
try {
lock.release();
} catch (Exception ignore) {
log.error(String.format("Lock release failed when uninstalling driver %s", driverName));
}
}
}
use of com.emc.storageos.coordinator.client.model.StorageDriversInfo in project coprhd-controller by CoprHD.
the class StorageDriverService method install.
@POST
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN })
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response install(@FormDataParam("driver") InputStream uploadedInputStream, @FormDataParam("driver") FormDataContentDisposition details) {
String fileName = details.getFileName();
precheckForDriverFileName(fileName);
long fileSize = details.getSize();
log.info("Received driver jar file: {}, size: {}", fileName, fileSize);
if (fileSize >= MAX_DRIVER_SIZE) {
throw APIException.badRequests.fileSizeExceedsLimit(MAX_DRIVER_SIZE);
}
precheckForEnv();
File driverFile = saveToTmpDir(fileName, uploadedInputStream);
StorageDriverMetaData metaData = parseDriverMetaData(driverFile);
precheckForMetaData(metaData);
InterProcessLock lock = getStorageDriverOperationLock();
try {
// move file from /tmp to /data/drivers
moveDriverToDataDir(driverFile);
// insert meta data int db
List<StorageSystemType> types = StorageDriverMapper.map(metaData);
for (StorageSystemType type : types) {
type.setDriverStatus(StorageSystemType.STATUS.INSTALLING.toString());
type.setIsNative(false);
dbClient.createObject(type);
log.info("Added storage system type {}, set status to INSTALLING", type.getStorageTypeName());
}
// update local list in ZK
Set<String> localDrivers = localRepo.getLocalDrivers();
StorageDriversInfo info = new StorageDriversInfo();
info.setInstalledDrivers(localDrivers);
coordinatorExt.setNodeSessionScopeInfo(info);
log.info("Updated local driver list to syssvc service beacon: {}", Arrays.toString(localDrivers.toArray()));
// update target list in ZK
info = coordinator.getTargetInfo(StorageDriversInfo.class);
if (info == null) {
info = new StorageDriversInfo();
}
info.getInstalledDrivers().add(metaData.getDriverFileName());
coordinator.setTargetInfo(info);
log.info("Successfully triggered install operation for driver", metaData.getDriverName());
auditOperation(OperationTypeEnum.INSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_SUCCESS, AuditLogManager.AUDITOP_BEGIN, metaData.getDriverName());
return Response.ok().build();
} catch (Exception e) {
log.error("Error happened when installing driver file", e);
auditOperation(OperationTypeEnum.INSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_FAILURE, null, metaData.getDriverName());
throw APIException.internalServerErrors.installDriverFailed(e.getMessage());
} finally {
try {
lock.release();
} catch (Exception ignore) {
log.error(String.format("Lock release failed when installing driver %s", metaData.getDriverName()));
}
}
}
use of com.emc.storageos.coordinator.client.model.StorageDriversInfo in project coprhd-controller by CoprHD.
the class StorageDriverManager method updateInstallMetadata.
private boolean updateInstallMetadata(List<StorageDriversInfo> infos) {
List<StorageSystemType> installingTypes = queryDriversByStatus(StorageSystemType.STATUS.INSTALLING);
List<StorageSystemType> finishedTypes = new ArrayList<StorageSystemType>();
boolean needRestart = false;
log.info("Installing storage system types: {}", concatStorageSystemTypeNames(installingTypes));
for (StorageSystemType type : installingTypes) {
boolean finished = true;
for (StorageDriversInfo info : infos) {
if (!info.getInstalledDrivers().contains(type.getDriverFileName())) {
finished = false;
break;
}
}
if (finished) {
type.setDriverStatus(StorageSystemType.STATUS.ACTIVE.toString());
dbClient.updateObject(type);
finishedTypes.add(type);
log.info("update status from installing to active for {}", type.getStorageTypeName());
needRestart = true;
}
}
for (String driver : extractDrivers(finishedTypes)) {
auditCompleteOperation(OperationTypeEnum.INSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_SUCCESS, driver);
}
return needRestart;
}
Aggregations