docs: @Override
      public HostConnectionPool<CL> getPoolForOperation(BaseOperation<CL, ?> op, String hashtag) throws NoAvailableHostsException {
  
          String key = op.getStringKey();
          HostConnectionPool<CL> hostPool;
          HostToken hToken;
  
          if (key != null) {
          	  // If a hashtag is provided by Dynomite then we use that to create the key to hash.
              if (hashtag == null || hashtag.isEmpty()) {            
                  hToken = this.getTokenForKey(key);
              } else {  
                  String hashValue = StringUtils.substringBetween(key,Character.toString(hashtag.charAt(0)), Character.toString(hashtag.charAt(1)));
                  hToken = this.getTokenForKey(hashValue);
              }
  
              if (hToken == null) {
                  throw new NoAvailableHostsException("Token not found for key " + key);
              }
  
              hostPool = tokenPools.get(hToken.getToken());;
              if (hostPool == null) {
                  throw new NoAvailableHostsException(
                          "Could not find host connection pool for key: " + key + ", hash: " + tokenMapper.hash(key) + " Token:" + hToken.getToken());
              }
          } else {
          	// the key is binary
              byte[] binaryKey = op.getBinaryKey();
              hToken = this.getTokenForKey(binaryKey);
              if (hToken == null) {
                  throw new NoAvailableHostsException("Token not found for key " + binaryKey.toString());
              }
  
              hostPool = tokenPools.get(hToken.getToken());
              if (hostPool == null) {
                  throw new NoAvailableHostsException(
                          "Could not find host connection pool for key: " + binaryKey.toString() + ", hash: " + tokenMapper.hash(binaryKey) + " Token:" + getTokenForKey(binaryKey));
              }
  
          }
          return hostPool;
  
      }