From 9be5bc2b6f7094cd54366aeea659be899cf0122b Mon Sep 17 00:00:00 2001 From: Mike Larson Date: Fri, 29 Aug 2008 13:21:22 -0700 Subject: modified failover algorithm to provide deterministic control over which interface is selected. The interface with the highest weight will be preferred. --- src/lbdecision.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/lbdecision.cc b/src/lbdecision.cc index e6cafac..b265acb 100644 --- a/src/lbdecision.cc +++ b/src/lbdecision.cc @@ -336,14 +336,20 @@ LBDecision::get_new_weights(LBData &data, LBRule &rule) } if (rule._failover == true) { //add single entry if active - if (weights.empty() == false) { - weights.insert(pair(ct,0.)); + if (data.is_active(iter->first)) { + //select the active interface that has the highest weight + if (iter->second > group) { + map::iterator w_iter = weights.begin(); + while (w_iter != weights.end()) { + w_iter->second = 0.; //zero out previous weight + ++w_iter; + } + } + weights.insert(pair(ct,iter->second)); + group = iter->second; } else { - if (data.is_active(iter->first)) { - weights.insert(pair(ct,1.)); - group = 1; - } + weights.insert(pair(ct,0.)); } } else { -- cgit v1.2.3