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
