Skip to content

Commit b361654

Browse files
committed
routes_mask: migrate API to use router context instead of config
Update all routing mask functions to accept router context. Fix mask size calculation and add helper getter functions. Signed-off-by: Eduardo Silva <eduardo@chronosphere.io>
1 parent 0fc19d1 commit b361654

2 files changed

Lines changed: 92 additions & 40 deletions

File tree

include/fluent-bit/flb_routes_mask.h

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,23 +46,26 @@ typedef uint64_t flb_route_mask_element;
4646
/* forward declaration */
4747
struct flb_input_instance;
4848
struct flb_config;
49+
struct flb_router;
4950

5051
int flb_routes_mask_set_by_tag(flb_route_mask_element *routes_mask,
5152
const char *tag,
5253
int tag_len,
5354
struct flb_input_instance *in);
54-
int flb_routes_mask_get_bit(flb_route_mask_element *routes_mask, int value,
55-
struct flb_config *config);
56-
void flb_routes_mask_set_bit(flb_route_mask_element *routes_mask, int value,
57-
struct flb_config *config);
58-
void flb_routes_mask_clear_bit(flb_route_mask_element *routes_mask, int value,
59-
struct flb_config *config);
60-
int flb_routes_mask_is_empty(flb_route_mask_element *routes_mask,
61-
struct flb_config *config);
55+
int flb_routes_mask_get_bit(flb_route_mask_element *routes_mask, int value,
56+
struct flb_router *router);
57+
void flb_routes_mask_set_bit(flb_route_mask_element *routes_mask, int value,
58+
struct flb_router *router);
59+
void flb_routes_mask_clear_bit(flb_route_mask_element *routes_mask, int value,
60+
struct flb_router *router);
61+
int flb_routes_mask_is_empty(flb_route_mask_element *routes_mask,
62+
struct flb_router *router);
6263

63-
int flb_routes_empty_mask_create(struct flb_config *config);
64-
void flb_routes_empty_mask_destroy(struct flb_config *config);
64+
int flb_routes_empty_mask_create(struct flb_router *router);
65+
void flb_routes_empty_mask_destroy(struct flb_router *router);
6566

66-
int flb_routes_mask_set_size(size_t mask_size, struct flb_config *config);
67+
int flb_routes_mask_set_size(size_t mask_size, struct flb_router *router);
68+
size_t flb_routes_mask_get_size(struct flb_router *router);
69+
size_t flb_routes_mask_get_slots(struct flb_router *router);
6770

6871
#endif

src/flb_routes_mask.c

Lines changed: 78 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,24 @@
2424
#include <fluent-bit/flb_routes_mask.h>
2525

2626

27+
size_t flb_routes_mask_get_size(struct flb_router *router)
28+
{
29+
if (router == NULL) {
30+
return 0;
31+
}
32+
33+
return router->route_mask_size;
34+
}
35+
36+
size_t flb_routes_mask_get_slots(struct flb_router *router)
37+
{
38+
if (router == NULL) {
39+
return 0;
40+
}
41+
42+
return router->route_mask_slots;
43+
}
44+
2745
/*
2846
* Set the routes_mask for input chunk with a router_match on tag, return a
2947
* non-zero value if any routes matched
@@ -34,17 +52,20 @@ int flb_routes_mask_set_by_tag(flb_route_mask_element *routes_mask,
3452
struct flb_input_instance *in)
3553
{
3654
int has_routes = 0;
55+
size_t size;
3756
struct mk_list *o_head;
3857
struct flb_output_instance *o_ins;
3958
if (!in) {
4059
return 0;
4160
}
4261

62+
if (in->config == NULL || in->config->router == NULL) {
63+
return 0;
64+
}
65+
4366
/* Clear the bit field */
44-
memset(routes_mask,
45-
0,
46-
sizeof(flb_route_mask_element) *
47-
in->config->route_mask_size);
67+
size = flb_routes_mask_get_size(in->config->router);
68+
memset(routes_mask, 0, sizeof(flb_route_mask_element) * size);
4869

4970
/* Find all matching routes for the given tag */
5071
mk_list_foreach(o_head, &in->config->outputs) {
@@ -58,7 +79,7 @@ int flb_routes_mask_set_by_tag(flb_route_mask_element *routes_mask,
5879
, NULL
5980
#endif
6081
)) {
61-
flb_routes_mask_set_bit(routes_mask, o_ins->id, o_ins->config);
82+
flb_routes_mask_set_bit(routes_mask, o_ins->id, o_ins->config->router);
6283
has_routes = 1;
6384
}
6485
}
@@ -74,13 +95,17 @@ int flb_routes_mask_set_by_tag(flb_route_mask_element *routes_mask,
7495
*
7596
*/
7697
void flb_routes_mask_set_bit(flb_route_mask_element *routes_mask, int value,
77-
struct flb_config *config)
98+
struct flb_router *router)
7899
{
79100
int index;
80101
uint64_t bit;
81102

82-
if (value < 0 || value >= config->route_mask_slots) {
83-
flb_warn("[routes_mask] Can't set bit (%d) past limits of bitfield",
103+
if (router == NULL) {
104+
return;
105+
}
106+
107+
if (value < 0 || value >= router->route_mask_slots) {
108+
flb_warn("[routes_mask] Can't clear bit (%d) past limits of bitfield",
84109
value);
85110
return;
86111
}
@@ -98,12 +123,16 @@ void flb_routes_mask_set_bit(flb_route_mask_element *routes_mask, int value,
98123
*
99124
*/
100125
void flb_routes_mask_clear_bit(flb_route_mask_element *routes_mask, int value,
101-
struct flb_config *config)
126+
struct flb_router *router)
102127
{
103128
int index;
104129
uint64_t bit;
105130

106-
if (value < 0 || value >= config->route_mask_slots) {
131+
if (router == NULL) {
132+
return;
133+
}
134+
135+
if (value < 0 || value >= router->route_mask_slots) {
107136
flb_warn("[routes_mask] Can't set bit (%d) past limits of bitfield",
108137
value);
109138
return;
@@ -123,12 +152,16 @@ void flb_routes_mask_clear_bit(flb_route_mask_element *routes_mask, int value,
123152
*
124153
*/
125154
int flb_routes_mask_get_bit(flb_route_mask_element *routes_mask, int value,
126-
struct flb_config *config)
155+
struct flb_router *router)
127156
{
128157
int index;
129158
uint64_t bit;
130159

131-
if (value < 0 || value >= config->route_mask_slots) {
160+
if (router == NULL) {
161+
return 0;
162+
}
163+
164+
if (value < 0 || value >= router->route_mask_slots) {
132165
flb_warn("[routes_mask] Can't get bit (%d) past limits of bitfield",
133166
value);
134167
return 0;
@@ -140,47 +173,63 @@ int flb_routes_mask_get_bit(flb_route_mask_element *routes_mask, int value,
140173
}
141174

142175
int flb_routes_mask_is_empty(flb_route_mask_element *routes_mask,
143-
struct flb_config *config)
176+
struct flb_router *router)
144177
{
178+
if (router == NULL || router->route_empty_mask == NULL) {
179+
return 0;
180+
}
181+
145182
return memcmp(routes_mask,
146-
config->route_empty_mask,
147-
config->route_mask_size * sizeof(flb_route_mask_element)) == 0;
183+
router->route_empty_mask,
184+
router->route_mask_size * sizeof(flb_route_mask_element)) == 0;
148185
}
149186

150-
int flb_routes_empty_mask_create(struct flb_config *config)
187+
int flb_routes_empty_mask_create(struct flb_router *router)
151188
{
152-
flb_routes_empty_mask_destroy(config);
189+
if (router == NULL) {
190+
return -1;
191+
}
192+
193+
flb_routes_empty_mask_destroy(router);
153194

154-
config->route_empty_mask = flb_calloc(config->route_mask_size,
195+
router->route_empty_mask = flb_calloc(router->route_mask_size,
155196
sizeof(flb_route_mask_element));
156197

157-
if (config->route_empty_mask == NULL) {
198+
if (router->route_empty_mask == NULL) {
158199
return -1;
159200
}
160201

161202
return 0;
162203
}
163204

164-
void flb_routes_empty_mask_destroy(struct flb_config *config)
205+
void flb_routes_empty_mask_destroy(struct flb_router *router)
165206
{
166-
if (config->route_empty_mask != NULL) {
167-
flb_free(config->route_empty_mask);
207+
if (router == NULL) {
208+
return;
209+
}
168210

169-
config->route_empty_mask = NULL;
211+
if (router->route_empty_mask != NULL) {
212+
flb_free(router->route_empty_mask);
213+
214+
router->route_empty_mask = NULL;
170215
}
171216
}
172217

173-
int flb_routes_mask_set_size(size_t mask_size, struct flb_config *config)
218+
int flb_routes_mask_set_size(size_t mask_size, struct flb_router *router)
174219
{
220+
if (router == NULL) {
221+
return -1;
222+
}
223+
175224
if (mask_size < 1) {
176225
mask_size = 1;
177226
}
178227

179-
mask_size = (mask_size / FLB_ROUTES_MASK_ELEMENT_BITS) +
180-
(mask_size % FLB_ROUTES_MASK_ELEMENT_BITS);
228+
mask_size = (mask_size + FLB_ROUTES_MASK_ELEMENT_BITS - 1) /
229+
FLB_ROUTES_MASK_ELEMENT_BITS;
181230

182-
config->route_mask_size = mask_size;
183-
config->route_mask_slots = mask_size * FLB_ROUTES_MASK_ELEMENT_BITS;
231+
router->route_mask_size = mask_size;
232+
router->route_mask_slots = mask_size * FLB_ROUTES_MASK_ELEMENT_BITS;
184233

185-
return flb_routes_empty_mask_create(config);
234+
return flb_routes_empty_mask_create(router);
186235
}

0 commit comments

Comments
 (0)