public interface

LatencyScoreStrategy

package com.netflix.astyanax.connectionpool;

import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;

public interface LatencyScoreStrategy {
    public interface Listener {
        void onUpdate();

        void onReset();
    }

    /**
     * Single instance of this strategy associated with an endpoint
     */
    public interface Instance {
        /**
         * Add a single latency sample
         * 
         * @param sample
         * @param now
         */
        void addSample(long sample);

        /**
         * Get the cached score for this endpoint
         * 
         * @return
         */
        double getScore();

        /**
         * Reset the score and any internal stats
         */
        void reset();

        /**
         * Update the score
         */
        void update();

        /**
         * Get the mean for the sample window
         * 
         * @return
         */
        double getMean();
    }

    /**
     * Update all instance scores
     */
    void update();

    /**
     * Reset all instance scores
     */
    void reset();

    /**
     * Create a new instance to associate with an endpoint
     * 
     * @return
     */
    Instance createInstance();

    /**
     * Remove the instance for an endpoint that is no longer being tracked
     * 
     * @param instance
     */
    void removeInstance(Instance instance);

    /**
     * Start updating stats for instances created using createInstance. This
     * usually spawns an update thread as well as a reset thread operating at
     * configurable intervals
     * 
     * @param listener
     */
    void start(Listener listener);

    /**
     * Shutdown the threads created by calling start()
     */
    void shutdown();

    /**
     * Sorts and filters a list of hosts by looking at their up state and score.
     * 
     * @param <CL>
     * @param pools
     * @param prioritized
     *            - Will be set to true if the filtered data is prioritized or
     *            not. If prioritized then the first element should be selected
     *            from by the load balancing strategy. Otherwise round robin
     *            could be used.
     * @return
     */
    <CL> List<HostConnectionPool<CL>> sortAndfilterPartition(List<HostConnectionPool<CL>> pools,
            AtomicBoolean prioritized);

}