mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-19 12:16:59 +00:00
Since commit 3a4bedccc ("MEDIUM: vars: replace the global name index with a hash") the names of HAProxy variables are no longer saved, ie their 64-bit hashes are saved instead. This is very convenient for the HAProxy itself, but for the OpenTracing module it is a problem because the names of the variables are important when transferring the OpenTracing context. Namely, this context consists of an unknown amount of data stored in a key-value format. The number of these data (and the name of the variable used for this purpose) is determined with the configuration of the OpenTracing filter, as well as with the tracer used. The two previous sentences seem to be in conflict, but that is only so at first glance. The function in the OpenTracing filter used to read the context does not really know this, neither their number nor its name. The only thing that function actually knows is the prefix of the variable names used for context transfer, and by that it could find all the necessary data. Of course, until the application of the above-mentioned commit. The problem is solved in a very simple way: in a common variable that the filter always knows its name, the names of all variables that are the product of the OpenTracing context are saved. The names of these context variables can only be added to that common variable. When that variable is no longer needed (when we no longer need context), it is deleted. The format for saving data to this common variable is as follows: +-----+---------------+-- .. --+-----+---------------+ | len | variable name | | len | variable name | +-----+---------------+-- .. --+-----+---------------+ The amount of memory space used to store the length of the name is 1 byte, with a sign (the minus sign is provided for inactive records, but this is not currently used). This means that the maximum length of the variable name to be saved is 127 characters, which is quite enough for use in the filter. The buffer size for such data storage is global.tune.bufsize. This patch must be backported in 2.5. |
||
---|---|---|
.. | ||
cli.h | ||
conf.h | ||
config.h | ||
debug.h | ||
define.h | ||
event.h | ||
filter.h | ||
group.h | ||
http.h | ||
include.h | ||
opentracing.h | ||
parser.h | ||
pool.h | ||
scope.h | ||
util.h | ||
vars.h |