diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-04-21 16:23:35 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-04-21 16:47:22 +0300 |
commit | b5f2337ad45d26941bf533741d8bff1238d59b5d (patch) | |
tree | 878a65c333272ceb198ec0d8e871e431f8015f7a /src/dbrw.h | |
parent | 5ee1409fc878cd65dd224ec5f709507e37e9ed5d (diff) | |
download | vmod-dbrw-b5f2337ad45d26941bf533741d8bff1238d59b5d.tar.gz vmod-dbrw-b5f2337ad45d26941bf533741d8bff1238d59b5d.tar.bz2 |
Rewrite SQL configuration support.
Multiple configurations can be provided, by calling dbrw.config from
branches of a conditional VCL statement. The only requirement is that
exactly one dbrw.config is executed within a single HTTP session. This
allows the user to select rewrite data from various databases depending
on some conditions.
Open SQL connections are stored in a pool and reused as needed. So far
no limit on the number of connections is imposed. This is a TODO.
Connections remain open during the lifetime of the module (i.e. for as
long as varnish is not restarted).
* src/dbrw.h (dbrw_config): New members: param_str, magic and list.
(dbrw_connection): New members: magic, busy, list.
* src/vmod_dbrw.c (dbrw_connection_get)
(dbrw_connection_release): New functions.
(dbrw_event): Install atexit function.
(vmod_config): Keep a pool of configurations.
(dbrw_sethdr) [VARNISHVERSION]: Remove leftover code.
(vmod_rewrite): Rewrite.
* src/vmod_dbrw.vcc (config, rewrite): Mark as PRIV_TASK.
* doc/vmod-dbrw.3: Update docs.
* doc/vmod-dbrw.texi: Update docs.
* configure.ac: Raise version number
Diffstat (limited to 'src/dbrw.h')
-rw-r--r-- | src/dbrw.h | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -18,12 +18,18 @@ #include <stdlib.h> #include <string.h> #include <errno.h> #include <syslog.h> #include <regex.h> +#include "vcl.h" +#include "vrt.h" +#include "vcc_if.h" +#include "bin/varnishd/cache/cache.h" +#define WSPTR(s) ((s)->ws) + struct dbrw_connection; struct dbrw_backend { char *name; int (*sql_init) (struct dbrw_connection *); @@ -47,27 +53,35 @@ enum { state_disabled }; #define HTTP_STATUS_LEN 3 struct dbrw_config { + unsigned magic; +#define DBRW_CONFIG_MAGIC 0x67636667 int debug_level; struct dbrw_backend *backend; char **param; + char *param_str; char *query; int qdisp; int regflags; char status[HTTP_STATUS_LEN+1]; + VTAILQ_ENTRY(dbrw_config) list; }; struct dbrw_connection { + unsigned magic; +#define DBRW_CONNECTION_MAGIC 0x6773716c int state; /* Connection state */ + int busy:1; struct dbrw_config *conf; /* Pointer to the configuration data */ regmatch_t *matches; /* Match map */ size_t matchsize; /* Total number of entries in match map */ void *data; /* Backend-specific data */ + VTAILQ_ENTRY(dbrw_connection) list; }; void dbrw_debug(const char *fmt, ...); void dbrw_error(const char *fmt, ...); #define debug(c,n,a) do { if ((c)->debug_level>=(n)) dbrw_debug a; } while (0) |