Juan Hernandez has posted comments on this change. Change subject: Trusted Compute Pools - Open Attestation integration with oVirt engine proposal ......................................................................
Patch Set 3: (12 inline comments) Thanks for the change to use commons-httpclient. I have some additional comments about the use of the singletons. See the inline comments. .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/attestationbroker/AttestationCacheManager.java Line 8: public class AttestationCacheManager { Line 9: Line 10: private static final AttestationCacheManager instance = new AttestationCacheManager(); Line 11: //TODO Consider clearing cache when there are no softreference? Line 12: private static ConcurrentHashMap<String, AttestationValue> attestationValues = new ConcurrentHashMap<String, AttestationValue>(); As you are going to use this as a singleton the members and methods shouldn't be static. Line 13: private static long cacheTimeout = Long.valueOf(Config.<String> GetValue(ConfigValues.CacheTimeout)).longValue(); Line 14: Line 15: public AttestationCacheManager getInstance(){ Line 16: return instance; Line 24: return attestationValues.containsKey(key); Line 25: } Line 26: Line 27: public static synchronized void addToCache(AttestationValue value){ Line 28: if (!attestationValues.containsKey(value.getHostName())) This "if" is not needed, the "putIfAbsent" method already performs the check, and it doees it in a atomic way, so the "synchronized" modifier is not required. Line 29: attestationValues.putIfAbsent(value.getHostName(), value); Line 30: } Line 31: Line 32: public static synchronized void removeFromCache(String key){ Line 28: if (!attestationValues.containsKey(value.getHostName())) Line 29: attestationValues.putIfAbsent(value.getHostName(), value); Line 30: } Line 31: Line 32: public static synchronized void removeFromCache(String key){ The remove method of the ConcurrentHashMap already performs its own synchronization, so the "synchronized" modifier is not required. Line 33: if (key != null){ Line 34: attestationValues.remove(key); Line 35: } Line 36: } Line 52: public static Set<String> getAllKeys(){ Line 53: return attestationValues.keySet(); Line 54: } Line 55: Line 56: public static synchronized void updateCache(AttestationValue value){ Instead of using the "synchronzed" modifier you can rely on the synchronization of the ConcurrentHashMap and do something like this: AttestationValue cacheValue = attestationValues.get(value.getHostName()); if (cacheValue != null) { cacheValue.setTrustLeve(...); cacheVaue.setVtime(...); } Line 57: if (exists(value.getHostName())){ Line 58: AttestationValue cacheValue = getValueFromCache(value.getHostName()); Line 59: cacheValue.setTrustLevel(value.getTrustLevel()); Line 60: cacheValue.setVtime(value.getVtime()); .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/attestationbroker/AttestationService.java Line 69: public AttestationResult validateHostIsTrusted(VDS vds) { Line 70: log.debug("begin to validate " + vds.getName()); Line 71: AttestationResult result = AttestationResult.UNKNOWN; Line 72: String key = vds.gethost_name(); Line 73: if (AttestationCacheManager.exists(key)){ If you use the AttestationCacheManager as a singleton this should be: AttestatoinCacheManager.getInstance().exists(key) I would suggest to create a private field, to avoid these long invocations: private AttestationCacheManager cacheManager = AttestationCacheManager.getInstance(); if (cacheManager.exists(key)) { ... if (cacheManager.isExpired()) { ... } } This has the advantage that if one day we start using CDI and annotiations we can convert these singletons into singletons managed by the container, simple adding annotations. Line 74: if (!AttestationCacheManager.isExpired(key)){ Line 75: AttestationValue value = AttestationCacheManager.getValueFromCache(key); Line 76: return value.getTrustLevel(); Line 77: } Line 107: } Line 108: }catch (UnsupportedEncodingException e) { Line 109: log.error(e.getMessage(), e); Line 110: }catch (IOException e) { Line 111: log.error(e.getMessage(), e); I would suggest to include here some message explaining what failed, not just directly the message of the underlying exception: log.error("Failed to attest hosts " + theListOfHosts, e); Line 112: }finally { Line 113: postMethod.releaseConnection(); Line 114: } Line 115: return values; Line 149: } Line 150: break; Line 151: } Line 152: } Line 153: jParser.close(); I would suggest to put this in a "finally" block. Line 154: } catch (JsonParseException e) { Line 155: log.error(e.getMessage(), e); Line 156: } catch (IOException e) { Line 157: log.error(e.getMessage(), e); Line 153: jParser.close(); Line 154: } catch (JsonParseException e) { Line 155: log.error(e.getMessage(), e); Line 156: } catch (IOException e) { Line 157: log.error(e.getMessage(), e); I would suggest a more informative error message, something like: "Failed to parse attestation response \"" + str + "\"." Line 158: } Line 159: return values; Line 160: } Line 161: .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/attestationbroker/AttestationValue.java Line 7: Line 8: private String hostName; Line 9: private AttestationResult trustLevel; Line 10: // Real time of attestation Line 11: private Date vtime; Thanks for the comment! Can't it be in the variable name? Something like "realAttestationTime". I like long variable names, it is just a personal preference, feel free to ignore. Line 12: Line 13: public AttestationValue(){ Line 14: trustLevel = AttestationResult.TIMEOUT; Line 15: } .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsSelector.java Line 30: import org.ovirt.engine.core.dao.network.NetworkDao; Line 31: import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao; Line 32: import org.ovirt.engine.core.utils.log.Log; Line 33: import org.ovirt.engine.core.utils.log.LogFactory; Line 34: import org.ovirt.engine.core.bll.attestationbroker.*; Use explicit class names instead of *, if possible. Line 35: Line 36: public class VdsSelector { Line 37: private final List<Guid> privateRunVdssList = new ArrayList<Guid>(); Line 38: private List<VmNetworkInterface> vmNICs; Line 255: return VdcBllMessages.ACTION_TYPE_FAILED_VDS_VM_CLUSTER; Line 256: } Line 257: return null; Line 258: } Line 259: }); This new validator is exactly the same that the one below, I guess this is a result of automatic merging. Can you remove it? Line 260: add(new HostValidator() { Line 261: Line 262: @Override Line 263: public VdcBllMessages validate(VDS vds, StringBuilder sb, boolean isMigrate) { .................................................... File backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/DateUtils.java Line 8: import java.util.List; Line 9: Line 10: import org.ovirt.engine.core.compat.DateTime; Line 11: Line 12: public class DateUtils { There is an ongoing effort to remove all the classes in the "compat" package. Can you do without this class? Maybe use directly "java.text.DateFormat"? Line 13: Line 14: public static Date parse(String str) { Line 15: for (DateFormat fmt : formats(DateFormat.DEFAULT, DateFormat.FULL, DateFormat.LONG, DateFormat.MEDIUM, DateFormat.SHORT)) { Line 16: try { -- To view, visit http://gerrit.ovirt.org/11237 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I4de780cd46069638433255f3f9c994575f752e55 Gerrit-PatchSet: 3 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Dave Chen <wei.d.c...@intel.com> Gerrit-Reviewer: Dave Chen <wei.d.c...@intel.com> Gerrit-Reviewer: Doron Fediuck <dfedi...@redhat.com> Gerrit-Reviewer: Itamar Heim <ih...@redhat.com> Gerrit-Reviewer: Juan Hernandez <juan.hernan...@redhat.com> Gerrit-Reviewer: Omer Frenkel <ofren...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches