Sahina Bose has uploaded a new change for review.

Change subject: gluster: Check gluster uuid when updating brick status
......................................................................

gluster: Check gluster uuid when updating brick status

If vdsm output for glusterVolumeStatus returns the gluster
host uuid - use this to get the corresponding brick
in the database.
This will solve the issue with brick qualified name using
a different hostname than the one engine is aware of.

Change-Id: Iffea910092f693b83e51f92ea13f1014b8a40faf
Bug-Url: https://bugzilla.redhat.com/1103973
Signed-off-by: Sahina Bose <[email protected]>
(cherry picked from commit 373a729df42d97f326478fa445170a369b6c0920)
---
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeStatusReturnForXmlRpc.java
1 file changed, 32 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/31/33631/1

diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeStatusReturnForXmlRpc.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeStatusReturnForXmlRpc.java
index 5e2a5bb..0952ac5 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeStatusReturnForXmlRpc.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeStatusReturnForXmlRpc.java
@@ -9,6 +9,7 @@
 import org.ovirt.engine.core.common.businessentities.gluster.BrickProperties;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterClientInfo;
+import org.ovirt.engine.core.common.businessentities.gluster.GlusterServer;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterServerService;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterServiceStatus;
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
@@ -22,7 +23,10 @@
 import org.ovirt.engine.core.common.utils.gluster.GlusterCoreUtil;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.gluster.GlusterDBUtils;
 import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
+import org.ovirt.engine.core.utils.log.Log;
+import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.vdsbroker.irsbroker.StatusReturnForXmlRpc;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc;
 
@@ -77,8 +81,9 @@
     private static final String MEMORY_POOLMISSES = "poolMisses";
     private static final String MEMORY_MAXSTDALLOC = "maxStdAlloc";
 
+    private static final Log log = 
LogFactory.getLog(GlusterVolumeStatusReturnForXmlRpc.class);
     private StatusForXmlRpc status;
-    private GlusterVolumeAdvancedDetails volumeAdvancedDetails = new 
GlusterVolumeAdvancedDetails();
+    private final GlusterVolumeAdvancedDetails volumeAdvancedDetails = new 
GlusterVolumeAdvancedDetails();
 
     public GlusterVolumeStatusReturnForXmlRpc(Guid clusterId, Map<String, 
Object> innerMap) {
         super(innerMap);
@@ -184,11 +189,12 @@
 
     private BrickProperties getBrickProperties(GlusterVolumeEntity volume, 
Map<String, Object> brick) {
         BrickProperties brickProperties = new BrickProperties();
+        GlusterBrickEntity brickEntity = getBrickEntity(volume, brick);
 
-        GlusterBrickEntity brickEntity =
-                GlusterCoreUtil.getBrickByQualifiedName(volume.getBricks(), 
(String) brick.get(BRICK));
         if (brickEntity != null) {
             brickProperties.setBrickId(brickEntity.getId());
+        } else {
+            log.warnFormat("Could not update brick {0} as not found in db", 
(String) brick.get(BRICK));
         }
 
         if (brick.containsKey(STATUS)) {
@@ -238,6 +244,29 @@
         return brickProperties;
     }
 
+    private GlusterBrickEntity getBrickEntity(GlusterVolumeEntity volume, 
Map<String, Object> brick) {
+        String brickName = (String) brick.get(BRICK);
+
+        String glusterHostUuid = (String) brick.get(HOST_UUID);
+        if (!StringUtils.isEmpty(glusterHostUuid)) {
+            GlusterServer glusterServer =
+                    
GlusterDBUtils.getInstance().getServerByUuid(Guid.createGuidFromString(glusterHostUuid));
+            if (glusterServer == null) {
+                log.warnFormat("Could not update brick {0} to volume {1} - 
server uuid {2} not found",
+                        brickName, volume.getName(), glusterHostUuid);
+                return null;
+            }
+            String[] brickParts = brickName.split(":", -1);
+            if (brickParts.length != 2) {
+                log.warnFormat("Invalid brick representation [" + brickName + 
"]");
+                return null;
+            }
+            String brickDir = brickParts[1];
+            return 
DbFacade.getInstance().getGlusterBrickDao().getBrickByServerIdAndDirectory(glusterServer.getId(),
 brickDir);
+        }
+        return GlusterCoreUtil.getBrickByQualifiedName(volume.getBricks(), 
brickName);
+    }
+
     private List<Mempool> prepareMemPool(Object[] memoryPool) {
         List<Mempool> memPoolList = new ArrayList<Mempool>();
         for (Object memPoolObj : memoryPool) {


-- 
To view, visit http://gerrit.ovirt.org/33631
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iffea910092f693b83e51f92ea13f1014b8a40faf
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Sahina Bose <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to