code: public void initWithHosts(Map<Host, HostConnectionPool<CL>> hPools) {
  
  		// Get the list of tokens for these hosts
  		//tokenSupplier.initWithHosts(hPools.keySet());
  		List<HostToken> allHostTokens = tokenSupplier.getTokens(hPools.keySet());
  		Map<HostToken, HostConnectionPool<CL>> tokenPoolMap = new HashMap<HostToken, HostConnectionPool<CL>>();
  	        
  		// Update inner state with the host tokens.
  		for (HostToken hToken : allHostTokens) {
  			hostTokens.put(hToken.getHost(), hToken);
  			tokenPoolMap.put(hToken, hPools.get(hToken.getHost()));
  		}
  
  		// Initialize Local selector
  		Map<HostToken, HostConnectionPool<CL>> localPools = getHostPoolsForRack(tokenPoolMap, localRack);
  		localSelector.initWithHosts(localPools);
  		if (localSelector.isTokenAware() && localRack != null) {
  		   replicationFactor.set(calculateReplicationFactor(allHostTokens));
  		}
  
  		// Initialize Remote selectors
  		Set<String> remoteRacks = new HashSet<String>();
  		for (Host host : hPools.keySet()) {
  			String rack = host.getRack();
  			if (localRack != null && !localRack.isEmpty() && rack != null && !rack.isEmpty() && !localRack.equals(rack)) {
  				remoteRacks.add(rack);
  			}
  		}
  
  		for (String rack : remoteRacks) {
  			Map<HostToken, HostConnectionPool<CL>> dcPools = getHostPoolsForRack(tokenPoolMap, rack);
  			HostSelectionStrategy<CL> remoteSelector = selectorFactory.vendPoolSelectionStrategy();
  			remoteSelector.initWithHosts(dcPools);
  			remoteRackSelectors.put(rack, remoteSelector);
  		}
  
  		remoteDCNames.swapWithList(remoteRackSelectors.keySet());
  
          topology.set(createTokenPoolTopology(allHostTokens));
  	}
docs: hPools comes from discovery.
  @param hPools