Shubhendu Tripathi has uploaded a new change for review. Change subject: gluster: Mount the gluster meta volume on the nodes ......................................................................
gluster: Mount the gluster meta volume on the nodes Modified the code to mount the gluster meta volume on the nodes getting added/synced to the engine. Change-Id: I74199eac5c1b7f0f8bec8ad78b2f417a8fc5960a Signed-off-by: Shubhendu Tripathi <shtri...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java M backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/MountGlusterMetaVolumeVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/VdsmErrors.properties 14 files changed, 97 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/88/40688/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java index 3cab44d..c763794 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java @@ -407,7 +407,21 @@ setNonOperational(NonOperationalReason.GLUSTER_HOST_UUID_NOT_FOUND, null); } } - return glusterHostUuidFound && initGlusterPeerProcess(); + return glusterHostUuidFound && initGlusterPeerProcess() && mountGlusterMetaVolume(); + } + + private boolean mountGlusterMetaVolume() { + VDSReturnValue retVal = + runVdsCommand(VDSCommandType.MountGlusterMetaVolume, new VdsIdVDSCommandParametersBase(getVdsId())); + + // If mounting failed, just log error and continue + if (!retVal.getSucceeded()) { + log.error("Failed to mount gluster meta volume on server {}: {}", + getVdsName(), + retVal.getVdsError().getMessage()); + } + + return true; } /** diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java index 1a69956..9471a48f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java @@ -963,6 +963,23 @@ } } } + + for (GlusterVolumeEntity volume : getVolumeDao().getByClusterId(cluster.getId())) { + if (volume.getName().equals(Config.<String> getValue(ConfigValues.GlusterMetaVolumeName))) { + log.debug("Mounting gluster meta volume on nodes of cluster '{}'", cluster.getName()); + acquireLock(cluster.getId()); + try { + mountMetaVolumeOnNodes(volume.getClusterId()); + } catch (Exception e) { + log.error("Error while mounting the gluster meta volume on nodes of cluster '{}': {}", + cluster.getName(), + e.getMessage()); + log.debug("Exception", e); + } finally { + releaseLock(cluster.getId()); + } + } + } } public void refreshVolumeDetails(VDS upServer, GlusterVolumeEntity volume) { @@ -1020,6 +1037,21 @@ } } + protected void mountMetaVolumeOnNodes(Guid clusterId) { + List<VDS> servers = getClusterUtils().getAllUpServers(clusterId); + for (VDS server : servers) { + VDSReturnValue retVal = + runVdsCommand(VDSCommandType.MountGlusterMetaVolume, + new VdsIdVDSCommandParametersBase(server.getId())); + + if (!retVal.getSucceeded()) { + log.error("Failed to mount gluster meta volume on server {}: {}", + server.getName(), + retVal.getVdsError().getMessage()); + } + } + } + private void logBrickStatusChange(GlusterVolumeEntity volume, final GlusterBrickEntity brick, final GlusterStatus fetchedStatus) { log.debug("Detected that status of brick '{}' in volume '{}' changed from '{}' to '{}'", brick.getQualifiedName(), volume.getName(), brick.getStatus(), fetchedStatus); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java index 6545efa..307b7f2 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java @@ -287,6 +287,7 @@ doReturn(mockVdcReturn()).when(backend).runInternalAction(any(VdcActionType.class), any(VdcActionParametersBase.class), any(CommandContext.class)); + doNothing().when(glusterManager).mountMetaVolumeOnNodes(any(Guid.class)); doNothing().when(glusterManager).acquireLock(CLUSTER_ID); doNothing().when(glusterManager).releaseLock(CLUSTER_ID); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java index 769bd65..efa7e80 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java @@ -442,6 +442,8 @@ GlusterSnapshotInfoFailedException(4709), GlusterSnapshotScheduleFlagUpdateFailedException(4575), GlusterDisableSnapshotScheduleFailedException(4576), + GlusterMetaVolumeMountFailedException(4577), + GlusterMetaVolumeFstabUpdateFailedException(4578), UnicodeArgumentException(4900), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index 0714264..f30218e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -184,6 +184,7 @@ GetStorageDeviceList("org.ovirt.engine.core.vdsbroker.gluster"), CreateBrick("org.ovirt.engine.core.vdsbroker.gluster"), OverrideGlusterVolumeSnapshotSchedule("org.ovirt.engine.core.vdsbroker.gluster"), + MountGlusterMetaVolume("org.ovirt.engine.core.vdsbroker.gluster"), SetNumberOfCpus("org.ovirt.engine.core.vdsbroker"), UpdateVmPolicy("org.ovirt.engine.core.vdsbroker"), diff --git a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties index a5bea05..24395b8 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties @@ -406,6 +406,8 @@ GlusterSnapshotScheduleFlagUpdateFailedException=Failed to set the gluster volume snapshot scheduler flag GlusterDisableSnapshotScheduleFailedException=Failed to disable CLI based gluster volume snapshot scheduling GlusterGeoRepConfigFailed=Failed to modify geo-replication config +GlusterMetaVolumeMountFailedException=Failed to mount gluster meta volume +GlusterMetaVolumeFstabUpdateFailedException=Failed to update fstab for gluster meta volume CANT_RECONSTRUCT_WHEN_A_DOMAIN_IN_POOL_IS_LOCKED=Can't reconstruct the Master Domain when the Data Center contains Domains in Locked state.\nPlease wait until the operation for these Domains ends before trying to reconstruct the Master Domain again. NO_IMPLEMENTATION=Not implemented FailedToPlugDisk=Failed to hot-plug disk diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java index bf677d8..529de46 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/AbstractGlusterBrokerCommand.java @@ -106,6 +106,8 @@ case GlusterHostStorageDeviceLVChangeFailedException: case GlusterSnapshotScheduleFlagUpdateFailedException: case GlusterDisableSnapshotScheduleFailedException: + case GlusterMetaVolumeMountFailedException: + case GlusterMetaVolumeFstabUpdateFailedException: // Capture error from gluster command and record failure getVDSReturnValue().setVdsError(new VDSError(returnStatus, getReturnStatus().mMessage)); getVDSReturnValue().setSucceeded(false); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/MountGlusterMetaVolumeVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/MountGlusterMetaVolumeVDSCommand.java new file mode 100644 index 0000000..4d025fc --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/MountGlusterMetaVolumeVDSCommand.java @@ -0,0 +1,15 @@ +package org.ovirt.engine.core.vdsbroker.gluster; + +import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase; + +public class MountGlusterMetaVolumeVDSCommand<P extends VdsIdVDSCommandParametersBase> extends AbstractGlusterBrokerCommand<P> { + public MountGlusterMetaVolumeVDSCommand(P params) { + super(params); + } + + @Override + protected void executeVdsBrokerCommand() { + status = getBroker().glusterMetaVolumeMount(); + proceedProxyReturnValue(); + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java index 11ccfe4..a42ffdb 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java @@ -1889,7 +1889,13 @@ public StatusOnlyReturnForXmlRpc glusterResetSnapshotSchedule() { JsonRpcRequest request = new RequestBuilder("GlusterVolume.resetSnapshotSchedule").build(); + Map<String, Object> response = new FutureMap(this.client, request); + return new StatusOnlyReturnForXmlRpc(response); + } + @Override + public StatusOnlyReturnForXmlRpc glusterMetaVolumeMount() { + JsonRpcRequest request = new RequestBuilder("GlusterVolume.metaVolumeMount").build(); Map<String, Object> response = new FutureMap(this.client, request); return new StatusOnlyReturnForXmlRpc(response); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 7997c18..16630be 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -442,4 +442,6 @@ StatusOnlyReturnForXmlRpc glusterOverrideSnapshotSchedule(boolean force); StatusOnlyReturnForXmlRpc glusterResetSnapshotSchedule(); + + StatusOnlyReturnForXmlRpc glusterMetaVolumeMount(); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index 6a14887..283dc4a 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -410,4 +410,6 @@ public Map<String, Object> glusterOverrideSnapshotSchedule(boolean force); public Map<String, Object> glusterResetSnapshotSchedule(); + + public Map<String, Object> glusterMetaVolumeMount(); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index e8958f8..ca55246 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -1876,4 +1876,13 @@ throw new XmlRpcRunTimeException(ute); } } + + @Override + public StatusOnlyReturnForXmlRpc glusterMetaVolumeMount() { + try { + return new StatusOnlyReturnForXmlRpc(vdsServer.glusterMetaVolumeMount()); + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } } diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java index aed5ae2..12dc600 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/VdsmErrors.java @@ -912,6 +912,12 @@ @DefaultStringValue("Failed to disable CLI based gluster volume snapshot scheduling") String GlusterDisableSnapshotScheduleFailedException(); + @DefaultStringValue("Failed to mount gluster meta volume") + String GlusterMetaVolumeMountFailedException(); + + @DefaultStringValue("Failed to update fstab for gluster meta volume") + String GlusterMetaVolumeFstabUpdateFailedException(); + @DefaultStringValue("Storage device(s) not found") String GlusterHostStorageDeviceNotFoundException(); diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/VdsmErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/VdsmErrors.properties index 49a4c75..cc80186 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/VdsmErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/VdsmErrors.properties @@ -394,4 +394,6 @@ GlusterSnapshotConfigFailedException=Failed to configure gluster volume snapshot GlusterSnapshotConfigSetFailedException=Failed to set the gluster volume snapshot configuration GlusterSnapshotConfigGetFailedException=Failed to get the gluster volume snapshot configuration +GlusterMetaVolumeMountFailedException=Failed to mount gluster meta volume +GlusterMetaVolumeFstabUpdateFailedException=Failed to update fstab for gluster meta volume CINDER_ERROR=An error occurred on Cinder - '${cinderException}' -- To view, visit https://gerrit.ovirt.org/40688 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I74199eac5c1b7f0f8bec8ad78b2f417a8fc5960a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Shubhendu Tripathi <shtri...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches