Github user kishoreg commented on a diff in the pull request:

    https://github.com/apache/helix/pull/169#discussion_r177523236
  
    --- Diff: 
helix-core/src/main/java/org/apache/helix/common/caches/BasicClusterDataCache.java
 ---
    @@ -104,6 +108,52 @@ public void refresh(HelixDataAccessor accessor) {
         }
       }
     
    +  /**
    +   * Selective update Helix Cache by version
    +   * @param accessor the HelixDataAccessor
    +   * @param reloadKeys keys needs to be reload
    +   * @param cachedKeys keys already exists in the cache
    +   * @param cachedPropertyMap cached map of propertykey -> property object
    +   * @param <T> the type of metadata
    +   * @return
    +   */
    +  public static  <T extends HelixProperty> Map<PropertyKey, T> 
updateReloadProperties(
    +      HelixDataAccessor accessor, List<PropertyKey> reloadKeys, 
List<PropertyKey> cachedKeys,
    +      Map<PropertyKey, T> cachedPropertyMap) {
    +    // All new entries from zk not cached locally yet should be read from 
ZK.
    +    Map<PropertyKey, T> refreshedPropertyMap = Maps.newHashMap();
    +    List<HelixProperty.Stat> stats = accessor.getPropertyStats(cachedKeys);
    +    for (int i = 0; i < cachedKeys.size(); i++) {
    +      PropertyKey key = cachedKeys.get(i);
    +      HelixProperty.Stat stat = stats.get(i);
    +      if (stat != null) {
    +        T property = cachedPropertyMap.get(key);
    +        if (property != null && property.getBucketSize() == 0 && 
property.getStat().equals(stat)) {
    +          refreshedPropertyMap.put(key, property);
    +        } else {
    +          // need update from zk
    +          reloadKeys.add(key);
    +        }
    +      } else {
    +        LOG.warn("stat is null for key: " + key);
    +        reloadKeys.add(key);
    +      }
    +    }
    +
    +    List<T> reloadedProperty = accessor.getProperty(reloadKeys, true);
    +    Iterator<PropertyKey> csKeyIter = reloadKeys.iterator();
    +    for (T property : reloadedProperty) {
    +      PropertyKey key = csKeyIter.next();
    +      if (property != null) {
    +        refreshedPropertyMap.put(key, property);
    +      } else {
    +        LOG.warn("CurrentState null for key: " + key);
    --- End diff --
    
    this is not related to currentstate right


---

Reply via email to