docs: private void removeForeignHost(final int hostId) {
          ImmutableCollection<ForeignHost> fhs = m_foreignHosts.get(hostId);
          synchronized (m_mapLock) {
              m_foreignHosts = ImmutableMultimap.<Integer, ForeignHost>builder()
                      .putAll(Multimaps.filterKeys(m_foreignHosts, not(equalTo(hostId))))
                      .build();
  
              Predicate<Long> hostIdNotEqual = new Predicate<Long>() {
                  @Override
                  public boolean apply(Long intput) {
                      return CoreUtils.getHostIdFromHSId(intput) != hostId;
                  }
              };
  
              m_fhMapping = ImmutableMap.<Long, ForeignHost>builder()
                      .putAll(Maps.filterKeys(m_fhMapping, hostIdNotEqual))
                      .build();
          }
          assert(Thread.holdsLock(this)); // Make sure m_zombieForeignHosts is protected
          ArrayList<ForeignHost> picoNetworkZombies = m_picoZombieForeignHosts.get(hostId);
          ArrayList<ForeignHost> zookeeperZombies = new ArrayList<>(fhs.size());
          for (ForeignHost fh : fhs) {
              if (picoNetworkZombies != null && picoNetworkZombies.contains(fh)) {
                  picoNetworkZombies.remove(fh);
              }
              else {
                  zookeeperZombies.add(fh);
              }
              fh.close();
          }
          if (picoNetworkZombies != null && picoNetworkZombies.isEmpty()) {
              m_picoZombieForeignHosts.remove(hostId);
          }
          if (!zookeeperZombies.isEmpty()) {
              m_zkZombieForeignHosts.put(hostId, zookeeperZombies);
          }
      }