code: @Override
    public Map<SocketAddress, String> getVersions() {
      final Map<SocketAddress, String> rv =
          new ConcurrentHashMap<SocketAddress, String>();
  
      CountDownLatch blatch = broadcastOp(new BroadcastOpFactory() {
        @Override
        public Operation newOp(final MemcachedNode n,
            final CountDownLatch latch) {
          final SocketAddress sa = n.getSocketAddress();
          return opFact.version(new OperationCallback() {
            @Override
            public void receivedStatus(OperationStatus s) {
              rv.put(sa, s.getMessage());
            }
  
            @Override
            public void complete() {
              latch.countDown();
            }
          });
        }
      });
      try {
        blatch.await(operationTimeout, TimeUnit.MILLISECONDS);
      } catch (InterruptedException e) {
        throw new RuntimeException("Interrupted waiting for versions", e);
      }
      return rv;
    }
docs: Get the versions of all of the connected memcacheds.
  
  @return a Map of SocketAddress to String for connected servers
  @throws IllegalStateException in the rare circumstance where queue is too
  full to accept any more requests