# Module lb_psv_split

- Description
- Data Types
- Function Index
- Function Details

Simple passive load balancing sampling k nodes and choosing the one that reduces the standard deviation the most.

Copyright © 2010-2011 Zuse Institute Berlin

Version: $Id$

Behaviours: `lb_psv_beh`.

Authors: Nico Kruber (`kruber@zib.de`).

## Description

Simple passive load balancing sampling k nodes and choosing the one that reduces the standard deviation the most. Splits loads in half, if there is no load address ranges are split according to lb_psv_split_fallback, i.e. in halves or using the selected keys.

## Data Types

### custom_message()

    custom_message() =
        {get_split_key_response,
         SplitKey :: {rt_chord:key(), TakenLoad :: non_neg_integer()}}

## Function Index

check_config/0 | Checks whether config parameters of the passive load balancing algorithm exist and are valid.
create_join/4 | Creates a join operation if a node would join at my node with the given key.
get_number_of_samples/1 | Gets the number of IDs to sample during join.
get_number_of_samples_remote/2 | Sends the number of IDs to sample during join to the joining node.
my_sort_fun/2 | Sort function for two operations and their Sum2Change.
process_join_msg/3 |
sort_candidates/1 | Sorts all provided operations so that the one with the biggest change of the standard deviation is at the front.

## Function Details

### get_number_of_samples/1

    get_number_of_samples(Conn :: dht_node_join:connection()) -> ok

Gets the number of IDs to sample during join. Note: this is executed at the joining node.

### get_number_of_samples_remote/2

    get_number_of_samples_remote(SourcePid :: comm:mypid(),
                                 Conn :: dht_node_join:connection()) ->
                                    ok

Sends the number of IDs to sample during join to the joining node. Note: this is executed at the existing node.

### create_join/4

    create_join(DhtNodeState :: dht_node_state:state(),
                SelectedKey :: rt_chord:key(),
                SourcePid :: comm:mypid(),
                Conn :: dht_node_join:connection()) ->
                   dht_node_state:state()

Creates a join operation if a node would join at my node with the given key. This will simulate the join operation and return a lb_op() with all the data needed in sort_candidates/1. Note: this is executed at an existing node.

### my_sort_fun/2

    my_sort_fun(Op1 :: {lb_op:lb_op(), integer()},
                Op2 :: {lb_op:lb_op(), integer()}) ->
                   boolean()

Sort function for two operations and their Sum2Change. Op1 will be preferred over Op2, i.e. Op1 is smaller than Op2, if its Sum2Change is smaller or if it is equal and its new node's address space is larger.

### sort_candidates/1

    sort_candidates(Ops :: [lb_op:lb_op()]) -> [lb_op:lb_op()]

Sorts all provided operations so that the one with the biggest change of the standard deviation is at the front. In case of no load changes, the operation with the largest address range at the joining node will be at the front. Note: this is executed at the joining node.

### process_join_msg/3

    process_join_msg(Msg :: comm:message(),
                     State :: any(),
                     DhtNodeState :: dht_node_state:state()) ->
                        unknown_event

### check_config/0

    check_config() -> boolean()

Checks whether config parameters of the passive load balancing algorithm exist and are valid.

Generated by EDoc, Feb 29 2016, 16:12:15.