Sahina Bose has posted comments on this change.

Change subject: gluster: Sync job for gluster volume snapshots
......................................................................


Patch Set 12:

(16 comments)

http://gerrit.ovirt.org/#/c/35904/12/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSnapshotSyncJob.java
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSnapshotSyncJob.java:

Line 68:             return;
Line 69:         }
Line 70: 
Line 71:         final VDS upServer = 
getClusterUtils().getRandomUpServer(cluster.getId());
Line 72:         if (upServer == null) {
log that sync did not run at this time?
Line 73:             return;
Line 74:         }
Line 75: 
Line 76:         try {


Line 74:         }
Line 75: 
Line 76:         try {
Line 77:             List<GlusterVolumeSnapshotEntity> snapshotsList =
Line 78:                     (ArrayList<GlusterVolumeSnapshotEntity>) 
runVdsCommand(VDSCommandType.GetGlusterVolumeSnapshotInfo,
How about a check if the command succeeded? Otherwise returnValue is null, 
possible NPE further down.
Line 79:                             new 
GlusterVolumeSnapshotVDSParameters(upServer.getId(),
Line 80:                                     null,
Line 81:                                     cluster.getId())).getReturnValue();
Line 82:             addOrUpdateSnapshots(cluster.getId(), snapshotsList);


Line 75: 
Line 76:         try {
Line 77:             List<GlusterVolumeSnapshotEntity> snapshotsList =
Line 78:                     (ArrayList<GlusterVolumeSnapshotEntity>) 
runVdsCommand(VDSCommandType.GetGlusterVolumeSnapshotInfo,
Line 79:                             new 
GlusterVolumeSnapshotVDSParameters(upServer.getId(),
Ideally the constructor for GlusterVolumeSnapshotVDSParameters should be 
(serverId, clusterId, volumeId) , no?
Line 80:                                     null,
Line 81:                                     cluster.getId())).getReturnValue();
Line 82:             addOrUpdateSnapshots(cluster.getId(), snapshotsList);
Line 83:         } catch (VdcBLLException e) {


Line 80:                                     null,
Line 81:                                     cluster.getId())).getReturnValue();
Line 82:             addOrUpdateSnapshots(cluster.getId(), snapshotsList);
Line 83:         } catch (VdcBLLException e) {
Line 84:             throw e;
You're throwing an exception from a scheduled method - this will result in a 
JobExecutionException. Is that what's required?
Line 85:         }
Line 86:     }
Line 87: 
Line 88:     private void refreshSnapshotConfigInCluster(VDSGroup cluster) {


Line 95:             return;
Line 96:         }
Line 97: 
Line 98:         try {
Line 99:             GlusterSnapshotConfigInfo configInfo =
same as above
Line 100:                     (GlusterSnapshotConfigInfo) 
runVdsCommand(VDSCommandType.GetGlusterVolumeSnapshotConfigInfo,
Line 101:                             new 
GlusterVolumeSnapshotVDSParameters(upServer.getId(),
Line 102:                                     null,
Line 103:                                     
cluster.getId())).getReturnValue();


Line 109: 
Line 110:     private void addOrUpdateSnapshots(Guid clusterId, 
List<GlusterVolumeSnapshotEntity> fetchedSnapshots) {
Line 111:         // form volume-wise map of snapshots
Line 112:         Map<Guid, List<GlusterVolumeSnapshotEntity>> 
volumeWiseSnapshots =
Line 113:                 new HashMap<Guid, 
List<GlusterVolumeSnapshotEntity>>();
new HashMap<> would do
Line 114:         for (GlusterVolumeSnapshotEntity snapshot : fetchedSnapshots) 
{
Line 115:             if (volumeWiseSnapshots.get(snapshot.getVolumeId()) == 
null) {
Line 116:                 volumeWiseSnapshots.put(snapshot.getVolumeId(), new 
ArrayList<GlusterVolumeSnapshotEntity>());
Line 117:             }


Line 112:         Map<Guid, List<GlusterVolumeSnapshotEntity>> 
volumeWiseSnapshots =
Line 113:                 new HashMap<Guid, 
List<GlusterVolumeSnapshotEntity>>();
Line 114:         for (GlusterVolumeSnapshotEntity snapshot : fetchedSnapshots) 
{
Line 115:             if (volumeWiseSnapshots.get(snapshot.getVolumeId()) == 
null) {
Line 116:                 volumeWiseSnapshots.put(snapshot.getVolumeId(), new 
ArrayList<GlusterVolumeSnapshotEntity>());
same as line 113
Line 117:             }
Line 118:             
volumeWiseSnapshots.get(snapshot.getVolumeId()).add(snapshot);
Line 119:         }
Line 120: 


Line 122:             List<GlusterVolumeSnapshotEntity> updatedSnapshots = new 
ArrayList<>();
Line 123:             List<GlusterVolumeSnapshotEntity> newlyAddedSnapshots = 
new ArrayList<>();
Line 124:             List<GlusterVolumeSnapshotEntity> deletedSnapshots = new 
ArrayList<>();
Line 125: 
Line 126:             for (Map.Entry<Guid, List<GlusterVolumeSnapshotEntity>> 
entry : volumeWiseSnapshots.entrySet()) {
Is there any reason to build a volumeWiseSnapshot map? Can you not do a 
getAllByClusterId to return all stored snapshots in cluster?
Line 127:                 List<GlusterVolumeSnapshotEntity> 
fetchedVolumeSnapshots = entry.getValue();
Line 128:                 Map<Guid, GlusterVolumeSnapshotEntity> 
fetchedSnapshotsMap =
Line 129:                         new HashMap<Guid, 
GlusterVolumeSnapshotEntity>();
Line 130:                 for (final GlusterVolumeSnapshotEntity 
fetchedSnapshot : fetchedVolumeSnapshots) {


Line 159:                 }
Line 160:             }
Line 161: 
Line 162:             // update snapshot details
Line 163:             try (EngineLock lock = acquireEntityLock(clusterId)) {
Why do you need a cluster level lock here?
Line 164:                 saveNewSnapshots(newlyAddedSnapshots);
Line 165:                 updateSnapshots(updatedSnapshots);
Line 166:                 deleteSnapshots(deletedSnapshots);
Line 167:             }


Line 241:                     paramValue);
Line 242:         }
Line 243:     }
Line 244: 
Line 245:     private void saveNewSnapshots(List<GlusterVolumeSnapshotEntity> 
snaphosts) {
typo in argument
Line 246:         for (GlusterVolumeSnapshotEntity snapshot : snaphosts) {
Line 247:             getGlusterVolumeSnapshotDao().save(snapshot);
Line 248:         }
Line 249:     }


Line 243:     }
Line 244: 
Line 245:     private void saveNewSnapshots(List<GlusterVolumeSnapshotEntity> 
snaphosts) {
Line 246:         for (GlusterVolumeSnapshotEntity snapshot : snaphosts) {
Line 247:             getGlusterVolumeSnapshotDao().save(snapshot);
saveAllInBatch?
Line 248:         }
Line 249:     }
Line 250: 
Line 251:     private void updateSnapshots(List<GlusterVolumeSnapshotEntity> 
snapshots) {


Line 249:     }
Line 250: 
Line 251:     private void updateSnapshots(List<GlusterVolumeSnapshotEntity> 
snapshots) {
Line 252:         for (GlusterVolumeSnapshotEntity snapshot : snapshots) {
Line 253:             
getGlusterVolumeSnapshotDao().updateSnapshotStatus(snapshot.getId(), 
snapshot.getStatus());
same as above
Line 254:         }
Line 255:     }
Line 256: 
Line 257:     private void deleteSnapshots(List<GlusterVolumeSnapshotEntity> 
snaphosts) {


Line 276:     protected GlusterVolumeSnapshotConfigDao 
getGlusterVolumeSnapshotConfigDao() {
Line 277:         return 
DbFacade.getInstance().getGlusterVolumeSnapshotConfigDao();
Line 278:     }
Line 279: 
Line 280:     protected EngineLock acquireEntityLock(Guid entityId) {
As Yair commented, why not use super class lock method?
Line 281:         return 
GlusterUtil.getInstance().acquireGlusterLockWait(entityId);
Line 282:     }


http://gerrit.ovirt.org/#/c/35904/12/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterSnapshotConfigInfo.java
File 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterSnapshotConfigInfo.java:

Line 8: public class GlusterSnapshotConfigInfo implements Serializable {
Line 9:     private static final long serialVersionUID = -768822766895441288L;
Line 10: 
Line 11:     private Map<String, String> clusterConfigOptions;
Line 12:     private Map<String, Map<String, String>> volumeConfigOptions;
what's the key here? <volumeId , <configKey, configValue>> ?
Line 13: 
Line 14:     public Map<String, String> getClusterConfigOptions() {
Line 15:         return this.clusterConfigOptions;
Line 16:     }


http://gerrit.ovirt.org/#/c/35904/12/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
File 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java:

Line 1417:     GlusterVolumeSnapshotSupported,
Line 1418: 
Line 1419:     @TypeConverterAttribute(Integer.class)
Line 1420:     @DefaultValueAttribute("3600")
Line 1421:     GlusterRefreshRateGeoRepDiscovery,
is this change required?
Line 1422: 
Line 1423:     @TypeConverterAttribute(Integer.class)
Line 1424:     @DefaultValueAttribute("300")
Line 1425:     GlusterRefreshRateSnapshotDiscovery,


http://gerrit.ovirt.org/#/c/35904/12/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeSnapshotConfigReturnForXmlRpc.java
File 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumeSnapshotConfigReturnForXmlRpc.java:

Line 44:             Map<String, String> volConfig = new HashMap<String, 
String>();
Line 45: 
Line 46:             for (Map.Entry<String, Object> config : 
fetchedVolumeConfig.entrySet()) {
Line 47:                 String value = (String) config.getValue();
Line 48:                 volConfig.put(config.getKey(), value == null ? "" : 
value);
why not null as value?
Line 49:             }
Line 50: 
Line 51:             volumeConfigs.put(entry.getKey(), volConfig);
Line 52:         }


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

Gerrit-MessageType: comment
Gerrit-Change-Id: I7b7bf79b72fc5680dab301b290e7aa860d5c714d
Gerrit-PatchSet: 12
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Shubhendu Tripathi <shtri...@redhat.com>
Gerrit-Reviewer: Kanagaraj M <kmayi...@redhat.com>
Gerrit-Reviewer: Ramesh N <rnach...@redhat.com>
Gerrit-Reviewer: Sahina Bose <sab...@redhat.com>
Gerrit-Reviewer: Shubhendu Tripathi <shtri...@redhat.com>
Gerrit-Reviewer: Yair Zaslavsky <yzasl...@redhat.com>
Gerrit-Reviewer: automat...@ovirt.org
Gerrit-Reviewer: oVirt Jenkins CI Server
Gerrit-HasComments: Yes
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to