mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-20 13:21:29 +02:00
MEDIUM: stktable: index table names using compact trees
Here we're saving 64 bytes per stick-table, from 3392 to 3328, and the change was really straightforward so there's no reason not to do it.
This commit is contained in:
parent
d0d60a007d
commit
f4059ea42f
@ -23,6 +23,7 @@
|
|||||||
#ifndef _HAPROXY_STICK_TABLE_T_H
|
#ifndef _HAPROXY_STICK_TABLE_T_H
|
||||||
#define _HAPROXY_STICK_TABLE_T_H
|
#define _HAPROXY_STICK_TABLE_T_H
|
||||||
|
|
||||||
|
#include <import/cebtree.h>
|
||||||
#include <import/ebtree-t.h>
|
#include <import/ebtree-t.h>
|
||||||
|
|
||||||
#include <haproxy/api-t.h>
|
#include <haproxy/api-t.h>
|
||||||
@ -166,13 +167,13 @@ struct stksess {
|
|||||||
|
|
||||||
/* stick table */
|
/* stick table */
|
||||||
struct stktable {
|
struct stktable {
|
||||||
char *id; /* local table id name. */
|
char *id; /* local table id name, indexed by <id_node> below. */
|
||||||
size_t idlen; /* local table id name length. */
|
size_t idlen; /* local table id name length. */
|
||||||
char *nid; /* table id name sent over the network with peers protocol. */
|
char *nid; /* table id name sent over the network with peers protocol. */
|
||||||
struct stktable *next; /* The stick-table may be linked when belonging to
|
struct stktable *next; /* The stick-table may be linked when belonging to
|
||||||
* the same configuration section.
|
* the same configuration section.
|
||||||
*/
|
*/
|
||||||
struct ebpt_node name; /* Stick-table are lookup by name here. */
|
struct ceb_node id_node; /* Stick-table are lookup by name here, indexes <id> above. */
|
||||||
struct pool_head *pool; /* pool used to allocate sticky sessions */
|
struct pool_head *pool; /* pool used to allocate sticky sessions */
|
||||||
struct task *exp_task; /* expiration task */
|
struct task *exp_task; /* expiration task */
|
||||||
struct task *sync_task; /* sync task */
|
struct task *sync_task; /* sync task */
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <import/cebis_tree.h>
|
||||||
#include <import/ebmbtree.h>
|
#include <import/ebmbtree.h>
|
||||||
#include <import/ebsttree.h>
|
#include <import/ebsttree.h>
|
||||||
#include <import/ebistree.h>
|
|
||||||
|
|
||||||
#include <haproxy/api.h>
|
#include <haproxy/api.h>
|
||||||
#include <haproxy/applet.h>
|
#include <haproxy/applet.h>
|
||||||
@ -64,7 +64,7 @@ static THREAD_LOCAL struct stktable_key static_table_key;
|
|||||||
static int (*smp_fetch_src)(const struct arg *, struct sample *, const char *, void *);
|
static int (*smp_fetch_src)(const struct arg *, struct sample *, const char *, void *);
|
||||||
struct pool_head *pool_head_stk_ctr __read_mostly = NULL;
|
struct pool_head *pool_head_stk_ctr __read_mostly = NULL;
|
||||||
struct stktable *stktables_list;
|
struct stktable *stktables_list;
|
||||||
struct eb_root stktable_by_name = EB_ROOT;
|
struct ceb_root *stktable_by_name = NULL;
|
||||||
|
|
||||||
#define round_ptr_size(i) (((i) + (sizeof(void *) - 1)) &~ (sizeof(void *) - 1))
|
#define round_ptr_size(i) (((i) + (sizeof(void *) - 1)) &~ (sizeof(void *) - 1))
|
||||||
|
|
||||||
@ -74,23 +74,12 @@ struct eb_root stktable_by_name = EB_ROOT;
|
|||||||
*/
|
*/
|
||||||
void stktable_store_name(struct stktable *t)
|
void stktable_store_name(struct stktable *t)
|
||||||
{
|
{
|
||||||
t->name.key = t->id;
|
cebis_item_insert(&stktable_by_name, id_node, id, t);
|
||||||
ebis_insert(&stktable_by_name, &t->name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct stktable *stktable_find_by_name(const char *name)
|
struct stktable *stktable_find_by_name(const char *name)
|
||||||
{
|
{
|
||||||
struct ebpt_node *node;
|
return cebis_item_lookup(&stktable_by_name, id_node, id, name, struct stktable);
|
||||||
struct stktable *t;
|
|
||||||
|
|
||||||
node = ebis_lookup(&stktable_by_name, name);
|
|
||||||
if (node) {
|
|
||||||
t = container_of(node, struct stktable, name);
|
|
||||||
if (strcmp(t->id, name) == 0)
|
|
||||||
return t;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user