Search in sources :

Example 1 with StorageDriversInfo

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;
}
Also used : Service(com.emc.storageos.coordinator.common.Service) ExecutorService(java.util.concurrent.ExecutorService) PropertyInfoMapper.decodeFromString(com.emc.storageos.coordinator.mapper.PropertyInfoMapper.decodeFromString) StorageDriversInfo(com.emc.storageos.coordinator.client.model.StorageDriversInfo) HashSet(java.util.HashSet)

Example 2 with StorageDriversInfo

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()));
        }
    }
}
Also used : StorageDriverMetaData(com.emc.storageos.coordinator.client.model.StorageDriverMetaData) InterProcessLock(org.apache.curator.framework.recipes.locks.InterProcessLock) StorageDriversInfo(com.emc.storageos.coordinator.client.model.StorageDriversInfo) StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType) ZipFile(java.util.zip.ZipFile) File(java.io.File) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) CheckPermission(com.emc.storageos.security.authorization.CheckPermission)

Example 3 with StorageDriversInfo

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));
        }
    }
}
Also used : InterProcessLock(org.apache.curator.framework.recipes.locks.InterProcessLock) StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType) StorageDriversInfo(com.emc.storageos.coordinator.client.model.StorageDriversInfo) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) Path(javax.ws.rs.Path) DELETE(javax.ws.rs.DELETE) CheckPermission(com.emc.storageos.security.authorization.CheckPermission)

Example 4 with StorageDriversInfo

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()));
        }
    }
}
Also used : StorageDriverMetaData(com.emc.storageos.coordinator.client.model.StorageDriverMetaData) InterProcessLock(org.apache.curator.framework.recipes.locks.InterProcessLock) StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType) StorageDriversInfo(com.emc.storageos.coordinator.client.model.StorageDriversInfo) ZipFile(java.util.zip.ZipFile) File(java.io.File) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) CheckPermission(com.emc.storageos.security.authorization.CheckPermission)

Example 5 with StorageDriversInfo

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;
}
Also used : ArrayList(java.util.ArrayList) StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType) StorageDriversInfo(com.emc.storageos.coordinator.client.model.StorageDriversInfo)

Aggregations

StorageDriversInfo (com.emc.storageos.coordinator.client.model.StorageDriversInfo)14 StorageSystemType (com.emc.storageos.db.client.model.StorageSystemType)8 StorageDriverMetaData (com.emc.storageos.coordinator.client.model.StorageDriverMetaData)4 IOException (java.io.IOException)4 ArrayList (java.util.ArrayList)4 InterProcessLock (org.apache.curator.framework.recipes.locks.InterProcessLock)4 CheckPermission (com.emc.storageos.security.authorization.CheckPermission)3 APIException (com.emc.storageos.svcs.errorhandling.resources.APIException)3 File (java.io.File)3 FileNotFoundException (java.io.FileNotFoundException)3 Site (com.emc.storageos.coordinator.client.model.Site)2 Service (com.emc.storageos.coordinator.common.Service)2 HashSet (java.util.HashSet)2 ExecutorService (java.util.concurrent.ExecutorService)2 ZipFile (java.util.zip.ZipFile)2 Consumes (javax.ws.rs.Consumes)2 POST (javax.ws.rs.POST)2 Path (javax.ws.rs.Path)2 ConfigVersion (com.emc.storageos.coordinator.client.model.ConfigVersion)1 PowerOffState (com.emc.storageos.coordinator.client.model.PowerOffState)1