Mercurial > hg > freeDiameter
annotate extensions/rt_load_balance/rt_load_balance.c @ 1390:46656b52ae97
rt_load_balance: improve algorithm
The extension now looks at the candidates with the highest
score. Among those it increases the score for all of them with
the lowest load by +1. Then it randomly gives one of them another
+1 boost.
author | Thomas Klausner <tk@giga.or.at> |
---|---|
date | Fri, 15 Nov 2019 11:21:41 +0100 |
parents | 38e4a7c318ac |
children | 1a9c73262a88 |
rev | line source |
---|---|
1043 | 1 /********************************************************************************************************* |
2 * Software License Agreement (BSD License) * | |
3 * Author: Thomas Klausner <tk@giga.or.at> * | |
4 * * | |
1273
e831cabceab0
Switch to logarithmic scaling.
Thomas Klausner <tk@giga.or.at>
parents:
1270
diff
changeset
|
5 * Copyright (c) 2013, 2014 Thomas Klausner * |
1043 | 6 * All rights reserved. * |
7 * * | |
8 * Written under contract by nfotex IT GmbH, http://nfotex.com/ * | |
9 * * | |
10 * Redistribution and use of this software in source and binary forms, with or without modification, are * | |
11 * permitted provided that the following conditions are met: * | |
12 * * | |
13 * * Redistributions of source code must retain the above * | |
14 * copyright notice, this list of conditions and the * | |
15 * following disclaimer. * | |
16 * * | |
17 * * Redistributions in binary form must reproduce the above * | |
18 * copyright notice, this list of conditions and the * | |
19 * following disclaimer in the documentation and/or other * | |
20 * materials provided with the distribution. * | |
21 * * | |
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * | |
23 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * | |
24 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * | |
25 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * | |
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * | |
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * | |
28 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * | |
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * | |
30 *********************************************************************************************************/ | |
31 | |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
32 #include <freeDiameter/extension.h> |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
33 #include <limits.h> |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
34 #include <time.h> |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
35 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
36 struct best_candidate_entry { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
37 long load; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
38 struct rtd_candidate *cand; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
39 }; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
40 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
41 static unsigned int seed; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
42 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
43 #define MODULE_NAME "rt_load_balance" |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
44 |
1043 | 45 /* |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
46 * Load balancing extension. Send request to least-loaded node: Add a |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
47 * score of 1 to the least loaded candidates among those with highest |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
48 * score. |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
49 */ |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
50 |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
51 /* The callback for load balancing the requests across the peers */ |
1216
581bbd48524a
Change prototype of rt_out callbacks to allow disposal of messages
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1043
diff
changeset
|
52 static int rt_load_balancing(void * cbdata, struct msg ** pmsg, struct fd_list * candidates) |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
53 { |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
54 struct fd_list *lic; |
1216
581bbd48524a
Change prototype of rt_out callbacks to allow disposal of messages
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1043
diff
changeset
|
55 struct msg * msg = *pmsg; |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
56 int max_score = -1; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
57 int max_score_count = 0; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
58 |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
59 TRACE_ENTRY("%p %p %p", cbdata, msg, candidates); |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
60 |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
61 CHECK_PARAMS(msg && candidates); |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
62 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
63 |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
64 /* Check if it is worth processing the message */ |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
65 if (FD_IS_LIST_EMPTY(candidates)) |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
66 return 0; |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
67 |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
68 /* find out maximal score and how many candidates have it */ |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
69 for (lic = candidates->next; lic != candidates; lic = lic->next) { |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
70 struct rtd_candidate * cand = (struct rtd_candidate *) lic; |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
71 if (max_score < cand->score) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
72 max_score = cand->score; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
73 max_score_count = 1; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
74 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
75 else if (cand->score == max_score) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
76 max_score_count++; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
77 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
78 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
79 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
80 if (max_score_count > 0) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
81 /* find out minimum load among those with maximal |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
82 * score, and how many candidates have it */ |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
83 struct best_candidate_entry best_candidates[max_score_count]; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
84 long min_load = LONG_MAX; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
85 int min_load_count = 0; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
86 int j; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
87 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
88 for (j = 0, lic = candidates->next; lic != candidates; lic = lic->next) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
89 struct rtd_candidate * cand = (struct rtd_candidate *) lic; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
90 if (cand->score == max_score) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
91 long to_receive, to_send, load; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
92 struct peer_hdr *peer; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
93 CHECK_FCT(fd_peer_getbyid(cand->diamid, cand->diamidlen, 0, &peer)); |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
94 CHECK_FCT(fd_peer_get_load_pending(peer, &to_receive, &to_send)); |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
95 load = to_receive + to_send; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
96 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
97 best_candidates[j].cand = cand; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
98 best_candidates[j].load = load; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
99 j++; |
1273
e831cabceab0
Switch to logarithmic scaling.
Thomas Klausner <tk@giga.or.at>
parents:
1270
diff
changeset
|
100 |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
101 if (min_load > load) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
102 min_load = load; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
103 min_load_count = 1; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
104 } else if (min_load == load) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
105 min_load_count++; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
106 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
107 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
108 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
109 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
110 /* increase score by 1 for all entries with minimum |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
111 * load, and further increase by 1 for one randomly |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
112 * chosen candidate */ |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
113 if (min_load_count > 0) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
114 int lucky_candidate = rand_r(&seed) % min_load_count; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
115 int i; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
116 for (j = 0, i = 0; j < max_score_count; j++) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
117 struct best_candidate_entry *entry = best_candidates+j; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
118 if (entry->load == min_load) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
119 struct rtd_candidate *cand = entry->cand; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
120 long old_score = cand->score; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
121 cand->score++; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
122 TRACE_DEBUG(FULL, "%s: boosting peer `%.*s', score was %d, now %d; load was %ld", MODULE_NAME, (int)cand->diamidlen, cand->diamid, old_score, cand->score, entry->load); |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
123 |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
124 if (i == lucky_candidate) { |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
125 cand->score++; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
126 TRACE_DEBUG(FULL, "%s: boosting lucky peer `%.*s', score was %d, now %d; load was %ld", MODULE_NAME, (int)cand->diamidlen, cand->diamid, old_score, cand->score, entry->load); |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
127 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
128 i++; |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
129 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
130 } |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
131 } |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
132 } |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
133 |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
134 return 0; |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
135 } |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
136 |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
137 /* handler */ |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
138 static struct fd_rt_out_hdl * rt_load_balancing_hdl = NULL; |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
139 |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
140 /* entry point */ |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
141 static int rt_load_balance_entry(char * conffile) |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
142 { |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
143 /* Register the callback */ |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
144 CHECK_FCT(fd_rt_out_register(rt_load_balancing, NULL, 10, &rt_load_balancing_hdl)); |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
145 |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
146 seed = (unsigned int)time(NULL); |
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
147 |
1042
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
148 TRACE_DEBUG(INFO, "Extension 'Load Balancing' initialized"); |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
149 return 0; |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
150 } |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
151 |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
152 /* Unload */ |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
153 void fd_ext_fini(void) |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
154 { |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
155 /* Unregister the callbacks */ |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
156 CHECK_FCT_DO(fd_rt_out_unregister(rt_load_balancing_hdl, NULL), /* continue */); |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
157 return ; |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
158 } |
dcc0eff204cf
Add extension that balances load over multiple peers based on outstanding requests.
Thomas Klausner <tk@giga.or.at>
parents:
diff
changeset
|
159 |
1390
46656b52ae97
rt_load_balance: improve algorithm
Thomas Klausner <tk@giga.or.at>
parents:
1284
diff
changeset
|
160 EXTENSION_ENTRY(MODULE_NAME, rt_load_balance_entry); |