package com.xiaomi.infra.galaxy.fds.client.network;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Random;

import org.apache.http.conn.DnsResolver;

/**
 * Copyright 2015, Xiaomi.
 * All rights reserved.
 * Author: [email protected]
 */
public class RoundRobinDNSResolver implements DnsResolver {

  private final DnsResolver dnsResolver;
  private final Random random;

  public RoundRobinDNSResolver(DnsResolver dnsResolver) {
    this.dnsResolver = dnsResolver;
    this.random = new Random();
  }

  @Override
  public InetAddress[] resolve(String host) throws UnknownHostException {
    InetAddress[] result = this.dnsResolver.resolve(host);
    // do "round robin" by randomize result
    if (result.length > 1) {
      int swapIdx = random.nextInt(result.length);
      if (swapIdx > 0) {
        InetAddress tmp = result[swapIdx];
        result[swapIdx] = result[0];
        result[0] = tmp;
      }
    }
    return result;
  }
}