docs: public Collection<Lease> acquire(int qty, long time, TimeUnit unit) throws Exception
      {
          long startMs = System.currentTimeMillis();
          boolean hasWait = (unit != null);
          long waitMs = hasWait ? TimeUnit.MILLISECONDS.convert(time, unit) : 0;
  
          Preconditions.checkArgument(qty > 0, "qty cannot be 0");
  
          ImmutableList.Builder<Lease> builder = ImmutableList.builder();
          boolean success = false;
          try
          {
              while ( qty-- > 0 )
              {
                  int retryCount = 0;
                  long startMillis = System.currentTimeMillis();
                  boolean isDone = false;
                  while ( !isDone )
                  {
                      switch ( internalAcquire1Lease(builder, startMs, hasWait, waitMs) )
                      {
                          case CONTINUE:
                          {
                              isDone = true;
                              break;
                          }
  
                          case RETURN_NULL:
                          {
                              return null;
                          }
  
                          case RETRY_DUE_TO_MISSING_NODE:
                          {
                              // gets thrown by internalAcquire1Lease when it can't find the lock node
                              // this can happen when the session expires, etc. So, if the retry allows, just try it all again
                              if ( !client.getZookeeperClient().getRetryPolicy().allowRetry(retryCount++, System.currentTimeMillis() - startMillis, RetryLoop.getDefaultRetrySleeper()) )
                              {
                                  throw new KeeperException.NoNodeException("Sequential path not found - possible session loss");
                              }
                              // try again
                              break;
                          }
                      }
                  }
              }
              success = true;
          }
          finally
          {
              if ( !success )
              {
                  returnAll(builder.build());
              }
          }
  
          return builder.build();
      }