MINOR: server: Move loading state of servers in a dedicated function
The loop on the servers of a proxy to load the server states was moved in
the function srv_state_px_update(). This simplify a bit the
apply_server_state() function. It is aslo mandatory to simplify the loading
of local server-state file.
diff --git a/src/server.c b/src/server.c
index 3835603..a87029c 100644
--- a/src/server.c
+++ b/src/server.c
@@ -3042,6 +3042,33 @@
free_trash_chunk(msg);
}
+/*
+ * Loop on the proxy's servers and try to load its state from <st_tree> using
+ * srv_update_state(). The proxy name and the server name are concatenated to
+ * form the key. If found the entry is removed from the tree.
+ */
+static void srv_state_px_update(const struct proxy *px, int vsn, struct eb_root *st_tree)
+{
+ struct server_state_line *st_line;
+ struct eb64_node *node;
+ struct server *srv;
+ unsigned long key;
+
+ for (srv = px->srv; srv; srv = srv->next) {
+ chunk_printf(&trash, "%s %s", px->id, srv->id);
+ key = XXH3(trash.area, trash.data, 0);
+ node = eb64_lookup(st_tree, key);
+ if (!node)
+ continue; /* next server */
+ st_line = eb64_entry(node, typeof(*st_line), node);
+ srv_update_state(srv, vsn, st_line->params+4);
+
+ /* the node may be released now */
+ eb64_delete(node);
+ free(st_line->line);
+ free(st_line);
+ }
+}
/*
* read next line from file <f> and return the server state version if one found.
@@ -3312,28 +3339,8 @@
* Backend name can't be wrong since it's used as a key to retrieve the server state
* line from the tree.
*/
-
- /* there was an error while generating global server state file path */
- if (global_vsn == 0)
- continue; /* next proxy */
-
- for (srv = curproxy->srv; srv; srv = srv->next) {
- unsigned long key;
-
- chunk_printf(&trash, "%s %s", curproxy->id, srv->id);
- key = XXH3(trash.area, trash.data, 0);
- node = eb64_lookup(&global_state_tree, key);
- if (!node)
- continue; /* next server */
- st_line = eb64_entry(node, typeof(*st_line), node);
- srv_update_state(srv, global_vsn, st_line->params+4);
-
- /* the node may be released now */
- eb64_delete(node);
- free(st_line->line);
- free(st_line);
- }
-
+ if (global_vsn)
+ srv_state_px_update(curproxy, global_vsn, &global_state_tree);
continue; /* next proxy */
}