package org.infinispan.hotrod.configuration;

/**
 * ClientIntelligence specifies the level of intelligence used by the client.
 * <ul> <li><b>BASIC</b> means that the
 * client doesn't handle server topology changes and therefore will only used the list of servers supplied at
 * configuration time</li>
 * <li><b>TOPOLOGY_AWARE</b> means that the client wants to receive topology updates from the
 * servers so that it can deal with added / removed servers dynamically. Requests will go to the servers using a
 * round-robin approach</li>
 * <li><b>HASH_DISTRIBUTION_AWARE</b> like <i>TOPOLOGY_AWARE</i> but with the additional
 * advantage that each request involving keys will be routed to the server who is the primary owner which improves
 * performance greatly. This is the default</li>
 * </ul>
 *
 * @since 14.0
 */
public enum ClientIntelligence {
   BASIC(1),
   TOPOLOGY_AWARE(2),
   HASH_DISTRIBUTION_AWARE(3);

   final byte value;

   ClientIntelligence(int value) {
      this.value = (byte) value;
   }

   public byte getValue() {
      return value;
   }

   public static ClientIntelligence getDefault() {
      return HASH_DISTRIBUTION_AWARE;
   }
}
