docs: public EVCacheLatch add(String canonicalKey, CachedData cd, int timeToLive, Policy policy) throws Exception {
          if (cd == null) return null; 
          addDataSizeSummary.record(cd.getData().length);
          addTTLSummary.record(timeToLive);
          
          final EVCacheClient[] clients = _pool.getEVCacheClientForWrite();
          final EVCacheLatchImpl latch = new EVCacheLatchImpl(policy, clients.length - _pool.getWriteOnlyEVCacheClients().length, _appName);
  
          Boolean firstStatus = null;
          for (EVCacheClient client : clients) {
              final Future<Boolean> f = client.add(canonicalKey, timeToLive, cd, latch);
              if(log.isDebugEnabled()) log.debug("ADD : Op Submitted : APP " + _appName + ", key " + canonicalKey + "; future : " + f + "; client : " + client);
              boolean status = f.get().booleanValue();
              if(!status) { // most common case
                  if(firstStatus == null) {
                      for(int i = 0; i < clients.length; i++) {
                          latch.countDown();
                      }
                      return latch;
                  } else {
                      return fixup(client, clients, canonicalKey, timeToLive, policy);
                  }
              }
              if(firstStatus == null) firstStatus = Boolean.valueOf(status);
          }
          return latch;
      }