use of org.ovirt.engine.core.common.action.gluster.GlusterVolumeGeoRepSessionParameters in project ovirt-engine by oVirt.
the class RestoreGlusterVolumeSnapshotCommand method resumeGeoRepSessions.
private boolean resumeGeoRepSessions(List<GlusterGeoRepSession> geoRepSessions) {
for (GlusterGeoRepSession session : geoRepSessions) {
GlusterVolumeEntity slaveVolume = glusterVolumeDao.getById(session.getSlaveVolumeId());
if (slaveVolume == null) {
// continue with other sessions and try to pause
continue;
}
try (EngineLock lock = acquireGeoRepSessionLock(session.getId())) {
ActionReturnValue retVal = runInternalAction(ActionType.ResumeGeoRepSession, new GlusterVolumeGeoRepSessionParameters(getGlusterVolumeId(), session.getId()));
if (!retVal.getSucceeded()) {
handleVdsError(AuditLogType.GLUSTER_VOLUME_GEO_REP_RESUME_FAILED, retVal.getExecuteFailedMessages().toString());
setSucceeded(false);
return false;
}
}
}
return true;
}
use of org.ovirt.engine.core.common.action.gluster.GlusterVolumeGeoRepSessionParameters in project ovirt-engine by oVirt.
the class RestoreGlusterVolumeSnapshotCommand method stopGeoReplicationSessions.
private boolean stopGeoReplicationSessions(List<GlusterGeoRepSession> geoRepSessions) {
for (GlusterGeoRepSession session : geoRepSessions) {
if (!(session.getStatus() == GeoRepSessionStatus.STOPPED || session.getStatus() == GeoRepSessionStatus.CREATED)) {
try (EngineLock lock = acquireGeoRepSessionLock(session.getId())) {
ActionReturnValue retVal = runInternalAction(ActionType.StopGeoRepSession, new GlusterVolumeGeoRepSessionParameters(getGlusterVolumeId(), session.getId()));
if (!retVal.getSucceeded()) {
handleVdsError(AuditLogType.GEOREP_SESSION_STOP_FAILED, retVal.getExecuteFailedMessages().toString());
setSucceeded(false);
return false;
}
session.setStatus(GeoRepSessionStatus.STOPPED);
engineStoppedSessions.add(session);
}
}
}
return true;
}
use of org.ovirt.engine.core.common.action.gluster.GlusterVolumeGeoRepSessionParameters in project ovirt-engine by oVirt.
the class RestoreGlusterVolumeSnapshotCommand method startGeoRepSessions.
private boolean startGeoRepSessions(List<GlusterGeoRepSession> geoRepSessions) {
for (GlusterGeoRepSession session : geoRepSessions) {
try (EngineLock lock = acquireGeoRepSessionLock(session.getId())) {
ActionReturnValue retVal = runInternalAction(ActionType.StartGlusterVolumeGeoRep, new GlusterVolumeGeoRepSessionParameters(getGlusterVolumeId(), session.getId()));
if (!retVal.getSucceeded()) {
handleVdsError(AuditLogType.GLUSTER_VOLUME_GEO_REP_START_FAILED_EXCEPTION, retVal.getExecuteFailedMessages().toString());
setSucceeded(false);
return false;
}
}
}
return true;
}
use of org.ovirt.engine.core.common.action.gluster.GlusterVolumeGeoRepSessionParameters in project ovirt-engine by oVirt.
the class VolumeGeoRepListModel method onGeoRepSessionAction.
private void onGeoRepSessionAction(ActionType actionType) {
final GlusterVolumeGeoRepActionConfirmationModel cModel = (GlusterVolumeGeoRepActionConfirmationModel) getWindow();
cModel.startProgress();
boolean force = cModel.getForce().getEntity();
GlusterGeoRepSession selectedSession = getSelectedItem();
GlusterVolumeGeoRepSessionParameters sessionParamters = new GlusterVolumeGeoRepSessionParameters(selectedSession.getMasterVolumeId(), selectedSession.getId());
sessionParamters.setForce(force);
Frontend.getInstance().runAction(actionType, sessionParamters, result -> {
if (cModel == null) {
return;
} else {
cModel.stopProgress();
if (!result.getReturnValue().getSucceeded()) {
// cModel.setActionConfirmationMessage(result.getReturnValue().getFault().getMessage());
setErrorMessage(result.getReturnValue(), cModel);
} else {
setWindow(null);
}
}
}, this, false);
}
use of org.ovirt.engine.core.common.action.gluster.GlusterVolumeGeoRepSessionParameters in project ovirt-engine by oVirt.
the class AddBricksToGlusterVolumeCommand method postAddBrickHandleGeoRepCase.
private void postAddBrickHandleGeoRepCase(final List<GlusterBrickEntity> bricksList, final Set<Guid> newServerIds) {
// newServerIds is the set of ids of the servers that were not part of the volume before this attempt of brick
// addition.
final GlusterVolumeEntity volume = getGlusterVolume();
List<GlusterGeoRepSession> sessions = new ArrayList<>();
// Get all sessions for which the volume is a master
List<GlusterGeoRepSession> geoRepSessionsForVolumeAsMaster = glusterGeoRepDao.getGeoRepSessions(volume.getId());
if (geoRepSessionsForVolumeAsMaster != null && !geoRepSessionsForVolumeAsMaster.isEmpty()) {
sessions.addAll(geoRepSessionsForVolumeAsMaster);
}
// Get session for which the volume is a slave
GlusterGeoRepSession geoRepSessionForVolumeAsSlave = glusterGeoRepDao.getGeoRepSessionBySlaveVolume(volume.getId());
if (geoRepSessionForVolumeAsSlave != null) {
sessions.add(geoRepSessionForVolumeAsSlave);
}
// If this volume is empty, nothing to do.
if (sessions.isEmpty()) {
return;
}
List<Callable<Boolean>> perSessionCallables = new ArrayList<>();
for (final GlusterGeoRepSession currentSession : sessions) {
perSessionCallables.add(() -> {
// Ids of servers on which steps like mount broker setup and/or passwordless ssh need to be done.
Set<Guid> serverIdsToPrep = new HashSet<>(newServerIds);
// Assume current volume as master volume of current session
GlusterVolumeEntity masterVolume = volume;
boolean succeeded = true;
addCustomValue(GlusterConstants.VOLUME_NAME, currentSession.getMasterVolumeName());
addCustomValue(GlusterConstants.GEO_REP_SLAVE_VOLUME_NAME, currentSession.getSlaveVolumeName());
addCustomValue(GlusterConstants.GEO_REP_USER, currentSession.getUserName());
if (currentSession.getMasterVolumeId().equals(volume.getId())) {
/*
* If the volume is master, and there are any new servers, serverIdsToPrep is a set of all slave
* servers. This is bcoz the new server's keys also need to be updated to all slave servers.
*/
serverIdsToPrep = getSlaveNodesSet(currentSession);
} else {
// If its slave and non-root session, do partial mount broker setup
if (!currentSession.getUserName().equalsIgnoreCase("root")) {
succeeded = evaluateReturnValue(errorType, backend.runInternalAction(ActionType.SetupGlusterGeoRepMountBrokerInternal, new SetUpMountBrokerParameters(volume.getClusterId(), serverIdsToPrep, volume.getName(), currentSession.getUserName())));
if (succeeded) {
auditLogDirector.log(this, AuditLogType.GLUSTER_SETUP_GEOREP_MOUNT_BROKER);
}
}
/*
* If the assumption that current volume is master, is invalid, which will be known here, update
* master volume correctly.
*/
masterVolume = glusterVolumeDao.getById(currentSession.getMasterVolumeId());
}
if (succeeded) {
succeeded = evaluateReturnValue(errorType, runInternalAction(ActionType.SetUpPasswordLessSSHInternal, new SetUpPasswordLessSSHParameters(masterVolume.getClusterId(), serverIdsToPrep, currentSession.getUserName())));
}
if (succeeded) {
auditLogDirector.log(this, AuditLogType.SET_UP_PASSWORDLESS_SSH);
succeeded = evaluateReturnValue(errorType, runVdsCommand(VDSCommandType.CreateGlusterVolumeGeoRepSession, new GlusterVolumeGeoRepSessionVDSParameters(glusterUtil.getRandomUpServer(masterVolume.getClusterId()).getId(), currentSession.getMasterVolumeName(), currentSession.getSlaveHostName(), currentSession.getSlaveVolumeName(), currentSession.getUserName(), true)));
}
if (currentSession.getStatus() == GeoRepSessionStatus.ACTIVE || currentSession.getStatus() == GeoRepSessionStatus.INITIALIZING) {
succeeded = evaluateReturnValue(errorType, runInternalAction(ActionType.StartGlusterVolumeGeoRep, new GlusterVolumeGeoRepSessionParameters(currentSession.getMasterVolumeId(), currentSession.getId(), true)));
}
return succeeded;
});
}
ThreadPoolUtil.invokeAll(perSessionCallables);
}
Aggregations