anmolbabu has uploaded a new change for review.

Change subject: engine, webadmin: Check volume emptyness for geo-rep
......................................................................

engine, webadmin: Check volume emptyness for geo-rep

This patch adds VDS command to check emptyness
of gluster volume.
And also adds a predicate in the GlusterGeoRepUtil
to check the same while filtering the volumes
list to get list of volumes eligible for geo-rep
session create.
This patch also adds a UIMessage entry corresponding
to the new volume emptyness criteria.
Change-Id: Ia86df17975069d4fe7c1740bf609597fde7b08ac
Signed-off-by: Anmol Babu <anb...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterGeoRepUtil.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepNonEligibilityReason.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/CheckEmptyGlusterVolumeVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/jsonrpc/JsonRpcVdsServer.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BooleanReturnForXmlRpc.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/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
14 files changed, 102 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/53/40153/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterGeoRepUtil.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterGeoRepUtil.java
index c3f03a5..42fe675 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterGeoRepUtil.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/GlusterGeoRepUtil.java
@@ -7,10 +7,14 @@
 
 import javax.inject.Singleton;
 
+import org.ovirt.engine.core.bll.Backend;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepNonEligibilityReason;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import 
org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeVDSParameters;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
@@ -85,6 +89,17 @@
             }
         });
 
+        
eligibilityPredicates.put(GlusterGeoRepNonEligibilityReason.SLAVE_VOLUME_TO_BE_EMPTY,
 new Predicate<GlusterVolumeEntity>() {
+            @Override
+            public boolean eval(GlusterVolumeEntity slaveVolume) {
+                VDSReturnValue returnValue = 
Backend.getInstance().getResourceManager().RunVdsCommand(VDSCommandType.CheckEmptyGlusterVolume,
 new 
GlusterVolumeVDSParameters(ClusterUtils.getInstance().getRandomUpServer(slaveVolume.getClusterId()).getId(),
 slaveVolume.getName()));
+                if(!returnValue.getSucceeded()) {
+                    return false;
+                }
+                return (boolean)returnValue.getReturnValue();
+            }
+            
+        });
 
         return eligibilityPredicates;
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepNonEligibilityReason.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepNonEligibilityReason.java
index b9de0b9..a1b6096 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepNonEligibilityReason.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterGeoRepNonEligibilityReason.java
@@ -7,5 +7,6 @@
         SLAVE_VOLUME_SHOULD_NOT_BE_SLAVE_OF_ANOTHER_GEO_REP_SESSION,
         SLAVE_VOLUME_SHOULD_BE_UP,
         SLAVE_VOLUME_SIZE_TO_BE_AVAILABLE,
+        SLAVE_VOLUME_TO_BE_EMPTY,
         MASTER_VOLUME_SIZE_TO_BE_AVAILABLE;
 }
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 bda1f30..f584cd9 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
@@ -426,6 +426,7 @@
     GlfsStatvfsException(4571),
     GlfsInitException(4572),
     GlfsFiniException(4573),
+    GlusterVolumeEmptyCheckFailed(4574),
     GlusterGeoRepSessionDeleteFailedException(4594),
     GlusterVolumeGeoRepStatusDetailFailed(4600),
     GlusterVolumeGeoRepSyncFailed(4601),
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 0c79414..1eab009 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
@@ -134,6 +134,7 @@
     StartRebalanceGlusterVolume("org.ovirt.engine.core.vdsbroker.gluster"),
     StopRebalanceGlusterVolume("org.ovirt.engine.core.vdsbroker.gluster"),
     SetupGlusterGeoRepMountBroker("org.ovirt.engine.core.vdsbroker.gluster"),
+    CheckEmptyGlusterVolume("org.ovirt.engine.core.vdsbroker.gluster"),
     GetGlusterHostsPubKey("org.ovirt.engine.core.vdsbroker.gluster"),
     UpdateGlusterGeoRepKeys("org.ovirt.engine.core.vdsbroker.gluster"),
     
CreateGlusterVolumeGeoRepSession("org.ovirt.engine.core.vdsbroker.gluster"),
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 8756a47..4cb9976 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
@@ -339,6 +339,7 @@
 GlusterVolumeSetOptionFailed=Gluster Volume Set Option Failed
 GlusterVolumeRebalanceStartFailed=Gluster Volume Rebalance Start Failed
 GlusterVolumeRebalanceStopFailed=Gluster Volume Rebalance Stop Failed
+GlusterVolumeEmptyCheckFailed=Failed to check if gluster volume is empty
 GlusterVolumeGeoRepSessionStartFailed=Failed to start geo-replication session 
for volume
 GlusterVolumeGeoRepSessionResumeFailed=Volume Geo-Replication Resume Failed
 GlusterGeoRepException=Gluster Geo-Replication Exception
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 3635ab8..bcf3cd7 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
@@ -63,6 +63,7 @@
         case GlusterVolumeRebalanceStopFailed:
         case GlusterVolumeStatusAllFailedException:
         case GlusterVolumeRebalanceStatusFailedException:
+        case GlusterVolumeEmptyCheckFailed:
         case GlusterGeoRepPublicKeyFileCreateFailed:
         case GlusterGeoRepPublicKeyFileReadError:
         case GlusterGeoRepUserNotFound:
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/CheckEmptyGlusterVolumeVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/CheckEmptyGlusterVolumeVDSCommand.java
new file mode 100644
index 0000000..6d76d79
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/CheckEmptyGlusterVolumeVDSCommand.java
@@ -0,0 +1,28 @@
+package org.ovirt.engine.core.vdsbroker.gluster;
+
+import 
org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeVDSParameters;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.BooleanReturnForXmlRpc;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc;
+
+public class CheckEmptyGlusterVolumeVDSCommand<P extends 
GlusterVolumeVDSParameters> extends AbstractGlusterBrokerCommand<P> {
+
+    private BooleanReturnForXmlRpc returnValue;
+
+    public CheckEmptyGlusterVolumeVDSCommand(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected StatusForXmlRpc getReturnStatus() {
+        return returnValue.mStatus;
+    }
+
+    @Override
+    protected void executeVdsBrokerCommand() {
+        String volumeName = getParameters().getVolumeName();
+        returnValue = getBroker().glusterVolumeEmptyCheck(volumeName);
+        proceedProxyReturnValue();
+        setReturnValue(returnValue.isVolumeEmpty());
+    }
+
+}
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 c2c08f6..4034bc6 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
@@ -37,6 +37,7 @@
 import org.ovirt.engine.core.vdsbroker.irsbroker.OneUuidReturnForXmlRpc;
 import 
org.ovirt.engine.core.vdsbroker.irsbroker.StoragePoolInfoReturnForXmlRpc;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.AlignmentScanReturnForXmlRpc;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.BooleanReturnForXmlRpc;
 import 
org.ovirt.engine.core.vdsbroker.vdsbroker.DevicesVisibilityMapReturnForXmlRpc;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.FenceStatusReturnForXmlRpc;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.HostDevListReturnForXmlRpc;
@@ -1198,6 +1199,13 @@
     }
 
     @Override
+    public BooleanReturnForXmlRpc glusterVolumeEmptyCheck(String volumeName) {
+        JsonRpcRequest request = new 
RequestBuilder("GlusterVolume.volumeEmptyCheck").build();
+        Map<String, Object> response = new FutureMap(this.client, request);
+        return new BooleanReturnForXmlRpc(response, "volumeEmptyCheck");
+    }
+
+    @Override
     public GlusterHostsPubKeyReturnForXmlRpc glusterGeoRepKeysGet() {
         JsonRpcRequest request = new 
RequestBuilder("GlusterVolume.geoRepKeysGet").build();
         Map<String, Object> response = new FutureMap(this.client, request);
@@ -1827,4 +1835,5 @@
         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/BooleanReturnForXmlRpc.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BooleanReturnForXmlRpc.java
new file mode 100644
index 0000000..f853c78
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/BooleanReturnForXmlRpc.java
@@ -0,0 +1,25 @@
+package org.ovirt.engine.core.vdsbroker.vdsbroker;
+
+import java.util.Map;
+
+import org.ovirt.engine.core.vdsbroker.irsbroker.StatusReturnForXmlRpc;
+
+public class BooleanReturnForXmlRpc extends StatusReturnForXmlRpc {
+
+    private static final String INFO = "info";
+    private boolean isEmpty;
+
+    public BooleanReturnForXmlRpc(Map<String, Object> innerMap, String 
flagName) {
+        super(innerMap);
+        if (innerMap.containsKey(INFO)) {
+            innerMap = (Map<String, Object>) innerMap.get(INFO);
+        }
+        if (innerMap.containsKey(flagName)) {
+            isEmpty = (boolean) innerMap.get(flagName);
+        }
+    }
+
+    public boolean isVolumeEmpty() {
+        return isEmpty;
+    }
+}
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 50686cc..f62dc25 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
@@ -278,6 +278,8 @@
 
     GlusterServersListReturnForXmlRpc glusterServersList();
 
+    BooleanReturnForXmlRpc glusterVolumeEmptyCheck(String volumeName);
+
     GlusterHostsPubKeyReturnForXmlRpc glusterGeoRepKeysGet();
 
     StatusOnlyReturnForXmlRpc glusterGeoRepKeysUpdate(List<String> 
geoRepPubKeys, String remoteUserName);
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 b9ca685..1505e3e 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
@@ -235,6 +235,8 @@
 
     public Map<String, Object> glusterVolumeRebalanceStart(String volumeName, 
Boolean fixLayoutOnly, Boolean force);
 
+    public Map<String, Object> glusterVolumeEmptyCheck(String volumeName);
+
     public Map<String, Object> glusterGeoRepKeysGet();
 
     public Map<String, Object> glusterGeoRepKeysUpdate(String remoteUserName, 
List<String> geoRepPubKeys);
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 c85c5da..9398030 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
@@ -1122,6 +1122,17 @@
     }
 
     @Override
+    public BooleanReturnForXmlRpc glusterVolumeEmptyCheck(String volumeName) {
+        try {
+            Map<String, Object> xmlRpcReturnValue = 
vdsServer.glusterVolumeEmptyCheck(volumeName);
+            BooleanReturnForXmlRpc wrapper = new 
BooleanReturnForXmlRpc(xmlRpcReturnValue, "volumeEmptyCheck");
+            return wrapper;
+        } catch (UndeclaredThrowableException ute) {
+            throw new XmlRpcRunTimeException(ute);
+        }
+    }
+
+    @Override
     public GlusterHostsPubKeyReturnForXmlRpc glusterGeoRepKeysGet() {
         try {
             Map<String, Object> xmlRpcReturnValue = 
vdsServer.glusterGeoRepKeysGet();
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 20f3232..278cb3d 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
@@ -721,6 +721,9 @@
     @DefaultStringValue("Gluster Volume Rebalance Start Failed.")
     String GlusterVolumeRebalanceStartFailed();
 
+    @DefaultStringValue("Failed to check if gluster volume is empty")
+    String GlusterVolumeEmptyCheckFailed();
+
     @DefaultStringValue("Failed to create gluster host public key file.")
     String GlusterGeoRepPublicKeyFileCreateFailed();
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
index e8cdf29..8205ea1 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
@@ -474,7 +474,8 @@
         "SLAVE_VOLUME_SHOULD_NOT_BE_SLAVE_OF_ANOTHER_GEO_REP_SESSION", 
"Destination volume is already a part of another geo replication session.",
         "SLAVE_VOLUME_SHOULD_BE_UP", "Destination volume should be up.",
         "SLAVE_VOLUME_SIZE_TO_BE_AVAILABLE", "Capacity information of the 
destination volume is not available.",
-        "MASTER_VOLUME_SIZE_TO_BE_AVAILABLE", "Capacity information of the 
master volume is not available."
+        "MASTER_VOLUME_SIZE_TO_BE_AVAILABLE", "Capacity information of the 
master volume is not available.",
+        "SLAVE_VOLUME_TO_BE_EMPTY", "Slave volume should be empty."
     })
     String geoRepEligibilityViolations(@Select 
GlusterGeoRepNonEligibilityReason reason);
 


-- 
To view, visit https://gerrit.ovirt.org/40153
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia86df17975069d4fe7c1740bf609597fde7b08ac
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: anmolbabu <anb...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to