package org.ovirt.engine.core.bll.gluster; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession; import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSessionDetails; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.compat.Guid; public class GetGlusterVolumeGeoRepSessionsQuery<P extends IdQueryParameters> extends GlusterQueriesCommandBase<P>{ public GetGlusterVolumeGeoRepSessionsQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { List<GlusterGeoRepSession> geoRepSessions = glusterGeoRepDao.getGeoRepSessions(getParameters().getId()); /* * If master volume has sessions, update the master server names in accordance with masterBrickId in sessionDetails. */ if (geoRepSessions != null) { for (GlusterGeoRepSession currentSession : geoRepSessions) { // For each session get corresponding session details. List<GlusterGeoRepSessionDetails> geoRepSessionDetails = glusterGeoRepDao.getGeoRepSessionDetails(currentSession.getId()); /* * Session details could be null, if they are not yet synced. possible if session detail command failed for some unexpected reason * such as network failure even though the sessions in the cluster are synced(sessionListCommand) */ if(geoRepSessionDetails == null) { continue; } /* * If non null session detail, set masterBrick servername in accordance with that in brick * as obtained by using masterbrickId */ for (GlusterGeoRepSessionDetails currentDetail : geoRepSessionDetails) { if(currentDetail == null) { continue; } Guid currentMasterBrickId = currentDetail.getMasterBrickId(); if(currentMasterBrickId == null) { continue; } GlusterBrickEntity currentBrick = glusterBrickDao.getById(currentMasterBrickId); if (currentBrick != null) { currentDetail.setMasterBrickHostName(currentBrick.getServerName()); } } /* * Finally set session details to the current session */ currentSession.setSessionDetails((ArrayList<GlusterGeoRepSessionDetails>) geoRepSessionDetails); } } getQueryReturnValue().setReturnValue(geoRepSessions); } }