Giter Site home page Giter Site logo

libvmod-memcached's People

Contributors

daghf avatar dmatetelki avatar dridi avatar fgsch avatar gquintard avatar kristianlyng avatar mbgrydeland avatar philipseidel-disney avatar rezan avatar sodabrew avatar xcir avatar zipleen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

libvmod-memcached's Issues

Support for consistent hashing when initialising memcached servers

In large pools of memcached instances, using consistent hashing is highly preferable to avoid lookup misses when instances are removed or added.

Having the option to specify serverlist like below would be very helpful in such scenarios:

memcached.servers("--SERVER=localhost --SERVER=anotherhost:12345 --DISTRIBUTION=consistent");

Build fail Varnish7.4.1

$ make
make  all-recursive
make[1]: Entering directory '/home/ubuntu/tmp/libvmod-memcached'
Making all in src
make[2]: Entering directory '/home/ubuntu/tmp/libvmod-memcached/src'
/usr/share/varnish/vmodtool.py ../src/vmod_memcached.vcc

NOTICE: Please put $Module description in quotes.

/bin/bash ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..  -I/usr/include/varnish -Wall -Werror  -I/usr/include/varnish  -g -O2 -MT libvmod_memcached_la-vmod_memcached.lo -MD -MP -MF .deps/libvmod_memcached_la-vmod_memcached.Tpo -c -o libvmod_memcached_la-vmod_memcached.lo `test -f 'vmod_memcached.c' || echo './'`vmod_memcached.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I/usr/include/varnish -Wall -Werror -I/usr/include/varnish -g -O2 -MT libvmod_memcached_la-vmod_memcached.lo -MD -MP -MF .deps/libvmod_memcached_la-vmod_memcached.Tpo -c vmod_memcached.c  -fPIC -DPIC -o .libs/libvmod_memcached_la-vmod_memcached.o
vmod_memcached.c: In function 'vmod_event':
vmod_memcached.c:65:21: error: 'struct vmod_priv' has no member named 'free'
   65 |                 priv->free = free_mc_vcl_settings;
      |                     ^~
vmod_memcached.c: In function 'vmod_servers':
vmod_memcached.c:118:32: error: incompatible type for argument 2 of 'VSL'
  118 |                 VSL(SLT_Debug, 0, "memcached pool config '%s'", config);
      |                                ^
      |                                |
      |                                int
In file included from vmod_memcached.c:10:
/usr/include/varnish/cache/cache.h:775:37: note: expected 'vxid_t' {aka 'struct vxids'} but argument is of type 'int'
  775 | void VSL(enum VSL_tag_e tag, vxid_t vxid, const char *fmt, ...)
      |                              ~~~~~~~^~~~
vmod_memcached.c:128:32: error: incompatible type for argument 2 of 'VSL'
  128 |                 VSL(SLT_Debug, 0, "memcached pool config '%s'", pool_str);
      |                                ^
      |                                |
      |                                int
In file included from vmod_memcached.c:10:
/usr/include/varnish/cache/cache.h:775:37: note: expected 'vxid_t' {aka 'struct vxids'} but argument is of type 'int'
  775 | void VSL(enum VSL_tag_e tag, vxid_t vxid, const char *fmt, ...)
      |                              ~~~~~~~^~~~
vmod_memcached.c:136:32: error: incompatible type for argument 2 of 'VSL'
  136 |                 VSL(SLT_Error, 0, "memcached servers() error");
      |                                ^
      |                                |
      |                                int
In file included from vmod_memcached.c:10:
/usr/include/varnish/cache/cache.h:775:37: note: expected 'vxid_t' {aka 'struct vxids'} but argument is of type 'int'
  775 | void VSL(enum VSL_tag_e tag, vxid_t vxid, const char *fmt, ...)
      |                              ~~~~~~~^~~~
vmod_memcached.c:137:32: error: incompatible type for argument 2 of 'VSL'
  137 |                 VSL(SLT_Error, 0, "%s", error_buf);
      |                                ^
      |                                |
      |                                int
In file included from vmod_memcached.c:10:
/usr/include/varnish/cache/cache.h:775:37: note: expected 'vxid_t' {aka 'struct vxids'} but argument is of type 'int'
  775 | void VSL(enum VSL_tag_e tag, vxid_t vxid, const char *fmt, ...)
      |                              ~~~~~~~^~~~
make[2]: *** [Makefile:479: libvmod_memcached_la-vmod_memcached.lo] Error 1
make[2]: Leaving directory '/home/ubuntu/tmp/libvmod-memcached/src'
make[1]: *** [Makefile:517: all-recursive] Error 1
make[1]: Leaving directory '/home/ubuntu/tmp/libvmod-memcached'
make: *** [Makefile:385: all] Error 2

It is not compatible with some Varnish changes.

Enviroment

varnishd (varnish-7.4.1 revision d5a5aa9cc879320840ca467ddbb7df0f99c9ba0f)
libvmod-memcached 3163da9894e5656b0b47b1d7610e5ee4fbf7efd3

Add connection pooling

Currently the VMOD sets up a separate memcached context per worker thread, and keeps it around until the thread is removed by Varnish.

Not necessarily all Varnish worker threads will use it, but the state is kept around anyway.

A possible optimization here is to do connection pooling, to use less resources both inside Varnish and on the memcached server.

rename of event function not supported on varnish-6.0

On branch 6.0-LTS, while compiling against varnish-6.0.5, make check reports
libvmod_memcached.so: undefined symbol: event

This is probably because the renaming of the event function in commit 35b731c is not supported before varnish-6.1.x.

Ingvar

make distcheck fails

Making check in src
make[2]: Entering directory '/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build/src'
tests/runner /usr/bin/varnishtest -Dvarnishd=/usr/sbin/varnishd -Dvmod_topbuild=/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build ../../src/tests/test05.vtc
tests/runner /usr/bin/varnishtest -Dvarnishd=/usr/sbin/varnishd -Dvmod_topbuild=/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build ../../src/tests/test02.vtc
tests/runner /usr/bin/varnishtest -Dvarnishd=/usr/sbin/varnishd -Dvmod_topbuild=/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build ../../src/tests/test04.vtc
tests/runner /usr/bin/varnishtest -Dvarnishd=/usr/sbin/varnishd -Dvmod_topbuild=/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build ../../src/tests/test06.vtc
tests/runner /usr/bin/varnishtest -Dvarnishd=/usr/sbin/varnishd -Dvmod_topbuild=/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build ../../src/tests/test03.vtc
tests/runner /usr/bin/varnishtest -Dvarnishd=/usr/sbin/varnishd -Dvmod_topbuild=/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build ../../src/tests/test01.vtc
tests/runner /usr/bin/varnishtest -Dvarnishd=/usr/sbin/varnishd -Dvmod_topbuild=/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build ../../src/tests/test07.vtc
/bin/bash: tests/runner: No such file or directory
/bin/bash: tests/runner: No such file or directory
Makefile:694: recipe for target '../../src/tests/test02.vtc' failed
make[2]: *** [../../src/tests/test02.vtc] Error 127
make[2]: *** Waiting for unfinished jobs....
Makefile:694: recipe for target '../../src/tests/test05.vtc' failed
make[2]: *** [../../src/tests/test05.vtc] Error 127
/bin/bash: tests/runner: No such file or directory
Makefile:694: recipe for target '../../src/tests/test06.vtc' failed
make[2]: *** [../../src/tests/test06.vtc] Error 127
/bin/bash: tests/runner: No such file or directory
Makefile:694: recipe for target '../../src/tests/test04.vtc' failed
make[2]: *** [../../src/tests/test04.vtc] Error 127
/bin/bash: tests/runner: No such file or directory
/bin/bash: tests/runner: No such file or directory
Makefile:694: recipe for target '../../src/tests/test07.vtc' failed
make[2]: *** [../../src/tests/test07.vtc] Error 127
Makefile:694: recipe for target '../../src/tests/test01.vtc' failed
make[2]: *** [../../src/tests/test01.vtc] Error 127
/bin/bash: tests/runner: No such file or directory
Makefile:694: recipe for target '../../src/tests/test03.vtc' failed
make[2]: *** [../../src/tests/test03.vtc] Error 127
make[2]: Leaving directory '/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build/src'
Makefile:503: recipe for target 'check-recursive' failed
make[1]: *** [check-recursive] Error 1
make[1]: Leaving directory '/home/lkarsten/work/libvmod-memcached/libvmod-memcached-1.0.0/_build'
Makefile:709: recipe for target 'distcheck' failed
make: *** [distcheck] Error 1

Tests fail with Varnish 6.0.8

**** top   0.0 extmacro def pwd=/rpmbuild/BUILD/libvmod-memcached-libvmod-memcached-1.0.1/src
**** top   0.0 extmacro def varnishd=/usr/sbin/varnishd
**** top   0.0 extmacro def vmod_topsrc=/root/rpmbuild/BUILD/libvmod-memcached-libvmod-memcached-1.0.1
**** top   0.0 extmacro def vmod_topbuild=/root/rpmbuild/BUILD/libvmod-memcached-libvmod-memcached-1.0.1
**** top   0.0 extmacro def localhost=127.0.0.1
**** top   0.0 extmacro def bad_backend=127.0.0.1 40015
**** top   0.0 extmacro def bad_ip=192.0.2.255
**** top   0.0 macro def testdir=/rpmbuild/BUILD/libvmod-memcached-libvmod-memcached-1.0.1/src/../src/tests
**** top   0.0 macro def tmpdir=/tmp/vtc.2988.673d96d6
*    top   0.0 TEST ../src/tests/test02.vtc starting
**   top   0.0 === varnishtest "Test incr and decr"
*    top   0.0 TEST Test incr and decr
**   top   0.0 === feature cmd "command -v memcached >/dev/null"
**   top   0.0 === process p1 "exec memcached -u nobody -p -1 -U 0" -start
**** p1    0.0 CMD: exec memcached -u nobody -p -1 -U 0
***  p1    0.0 PID: 2995
**** p1    0.1 macro def p1_pid=2995
**** p1    0.1 macro def p1_dir=/tmp/vtc.2988.673d96d6/p1
**** p1    0.1 macro def p1_out=/tmp/vtc.2988.673d96d6/p1/term
**** p1    0.1 macro def p1_err=/tmp/vtc.2988.673d96d6/p1/stderr
**   top   0.1 === shell {${vmod_topsrc}/src/tests/gen-vcl.sh ${p1_pid} "--SERV...
**** top   0.1 shell_cmd|exec 2>&1 ; /root/rpmbuild/BUILD/libvmod-memcached-libvmod-memcached-1.0.1/src/tests/gen-vcl.sh 2995 "--SERVER=@SERVER@"
**** top   0.2 shell_status = 0x0000
**   top   0.2 === server s1 {
**   s1    0.2 Starting server
**** s1    0.2 macro def s1_addr=127.0.0.1
**** s1    0.2 macro def s1_port=35259
**** s1    0.2 macro def s1_sock=127.0.0.1 35259
*    s1    0.2 Listen on 127.0.0.1 35259
**   top   0.2 === varnish v1 -vcl+backend {
**   s1    0.2 Started on 127.0.0.1 35259 (1 iterations)
**   v1    0.2 Launch
***  v1    0.2 CMD: cd ${pwd} && exec varnishd  -d -n /tmp/vtc.2988.673d96d6/v1 -l 2m -p auto_restart=off -p syslog_cli_traffic=off -p sigsegv_handler=on -p thread_pool_min=10 -p debug=+vtc_mode -a '127.0.0.1:0' -M '127.0.0.1 41861' -P /tmp/vtc.2988.673d96d6/v1/varnishd.pid 
***  v1    0.2 CMD: cd /rpmbuild/BUILD/libvmod-memcached-libvmod-memcached-1.0.1/src && exec varnishd  -d -n /tmp/vtc.2988.673d96d6/v1 -l 2m -p auto_restart=off -p syslog_cli_traffic=off -p sigsegv_handler=on -p thread_pool_min=10 -p debug=+vtc_mode -a '127.0.0.1:0' -M '127.0.0.1 41861' -P /tmp/vtc.2988.673d96d6/v1/varnishd.pid 
***  v1    0.2 PID: 3014
**** v1    0.2 macro def v1_pid=3014
**** v1    0.2 macro def v1_name=/tmp/vtc.2988.673d96d6/v1
***  v1    0.3 debug|Debug: Version: varnish-6.0.7 revision 525d371e3ea0e0c38edd7baf0f80dc226560f26e
***  v1    0.3 debug|Debug: Platform: Linux,4.15.0-1106-aws,x86_64,-junix,-sdefault,-sdefault,-hcritbit
***  v1    0.3 debug|200 316     
***  v1    0.3 debug|-----------------------------
***  v1    0.3 debug|Varnish Cache CLI 1.0
***  v1    0.3 debug|-----------------------------
***  v1    0.3 debug|Linux,4.15.0-1106-aws,x86_64,-junix,-sdefault,-sdefault,-hcritbit
***  v1    0.3 debug|varnish-6.0.7 revision 525d371e3ea0e0c38edd7baf0f80dc226560f26e
***  v1    0.3 debug|
***  v1    0.3 debug|Type 'help' for command list.
***  v1    0.3 debug|Type 'quit' to close CLI session.
***  v1    0.3 debug|Type 'start' to launch worker process.
***  v1    0.3 debug|
**** v1    0.4 CLIPOLL 1 0x1 0x0
***  v1    0.4 CLI connection fd = 11
***  v1    0.4 CLI RX  107
**** v1    0.4 CLI RX|fhgbnuqzghhyfbxewewrwolpniflyhga
**** v1    0.4 CLI RX|
**** v1    0.4 CLI RX|Authentication required.
**** v1    0.4 CLI TX|auth 208035d6c19e03b04c7f9103da53e0f8f3850a3701cd7c92ed497c3478f13493
***  v1    0.4 CLI RX  200
**** v1    0.4 CLI RX|-----------------------------
**** v1    0.4 CLI RX|Varnish Cache CLI 1.0
**** v1    0.4 CLI RX|-----------------------------
**** v1    0.4 CLI RX|Linux,4.15.0-1106-aws,x86_64,-junix,-sdefault,-sdefault,-hcritbit
**** v1    0.4 CLI RX|varnish-6.0.7 revision 525d371e3ea0e0c38edd7baf0f80dc226560f26e
**** v1    0.4 CLI RX|
**** v1    0.4 CLI RX|Type 'help' for command list.
**** v1    0.4 CLI RX|Type 'quit' to close CLI session.
**** v1    0.4 CLI RX|Type 'start' to launch worker process.
**** v1    0.4 CLI TX|vcl.inline vcl1 << %XJEIFLH|)Xspa8P
**** v1    0.4 CLI TX|vcl 4.1;
**** v1    0.4 CLI TX|backend s1 { .host = "127.0.0.1"; .port = "35259"; }
**** v1    0.4 CLI TX|
**** v1    0.4 CLI TX|
**** v1    0.4 CLI TX|\timport memcached from "/root/rpmbuild/BUILD/libvmod-memcached-libvmod-memcached-1.0.1/src/.libs/libvmod_memcached.so";
**** v1    0.4 CLI TX|
**** v1    0.4 CLI TX|\tsub vcl_init {
**** v1    0.4 CLI TX|\t\tinclude "/tmp/vtc.2988.673d96d6/memcached.servers.vcl";
**** v1    0.4 CLI TX|\t}
**** v1    0.4 CLI TX|
**** v1    0.4 CLI TX|\tsub vcl_deliver {
**** v1    0.4 CLI TX|\t\tmemcached.set("test02", "1", 0, 0);
**** v1    0.4 CLI TX|\t\tset resp.http.high = memcached.incr("test02", 3);
**** v1    0.4 CLI TX|\t\tset resp.http.low = memcached.decr("test02", 2);
**** v1    0.4 CLI TX|\t}
**** v1    0.4 CLI TX|
**** v1    0.4 CLI TX|%XJEIFLH|)Xspa8P
***  v1    0.5 vsl|No VSL chunk found (child not started ?)
***  v1    0.6 vsl|No VSL chunk found (child not started ?)
***  v1    0.7 vsl|No VSL chunk found (child not started ?)
***  v1    0.7 CLI RX  200
**** v1    0.7 CLI RX|VCL compiled.
**** v1    0.7 CLI TX|vcl.use vcl1
***  v1    0.7 CLI RX  200
**   v1    0.7 Start
**** v1    0.7 CLI TX|start
***  v1    0.8 debug|Debug: Child (3026) Started
***  v1    0.8 CLI RX  200
***  v1    0.8 wait-running
**** v1    0.8 CLI TX|status
***  v1    0.8 debug|Info: Child (3026) said Child starts
***  v1    0.9 CLI RX  200
**** v1    0.9 CLI RX|Child in state running
**** v1    0.9 CLI TX|debug.listen_address
***  v1    0.9 CLI RX  200
**** v1    0.9 CLI RX|127.0.0.1 45769
**** v1    0.9 CLI TX|debug.xid 999
**** v1    0.9 vsl|          0 CLI             - Rd vcl.load "vcl1" vcl_vcl1.1626611859.399491/vgc.so 1auto
**** v1    0.9 vsl|          0 Debug           - memcached pool config '--SERVER=localhost: --POOL-MAX=40'
**** v1    0.9 vsl|          0 Error           - memcached servers() error
**** v1    0.9 vsl|          0 Error           - ERROR OCCURED WHILE PARSING
**** v1    0.9 vsl|          0 CLI             - Wr 200 52 Loaded "vcl_vcl1.1626611859.399491/vgc.so" as "vcl1"
**** v1    0.9 vsl|          0 CLI             - Rd vcl.use "vcl1"
**** v1    0.9 vsl|          0 CLI             - Wr 200 0 
**** v1    0.9 vsl|          0 CLI             - Rd start
**** v1    0.9 vsl|          0 CLI             - Wr 200 0 
**** v1    0.9 vsl|          0 CLI             - Rd debug.listen_address 
**** v1    0.9 vsl|          0 CLI             - Wr 200 16 127.0.0.1 45769

***  v1    0.9 CLI RX  200
**** v1    0.9 CLI RX|XID is 999
**** v1    0.9 CLI TX|debug.listen_address
***  v1    1.0 CLI RX  200
**** v1    1.0 CLI RX|127.0.0.1 45769
**   v1    1.0 Listen on 127.0.0.1 45769
**** v1    1.0 macro def v1_addr=127.0.0.1
**** v1    1.0 macro def v1_port=45769
**** v1    1.0 macro def v1_sock=127.0.0.1 45769
**   top   1.0 === client c1 {
**   c1    1.0 Starting client
**   c1    1.0 Waiting for client
***  c1    1.0 Connect to 127.0.0.1 45769
***  c1    1.0 connected fd 21 from 127.0.0.1 59608 to 127.0.0.1 45769
**   c1    1.0 === txreq -url "/"
**** c1    1.0 txreq|GET / HTTP/1.1\r
**** c1    1.0 txreq|Host: 127.0.0.1\r
**** c1    1.0 txreq|\r
**   c1    1.0 === rxresp
***  s1    1.0 accepted fd 9 127.0.0.1 41264
**   s1    1.0 === rxreq
**** s1    1.0 rxhdr|GET / HTTP/1.1\r
**** s1    1.0 rxhdr|Host: 127.0.0.1\r
**** s1    1.0 rxhdr|X-Forwarded-For: 127.0.0.1\r
**** s1    1.0 rxhdr|Accept-Encoding: gzip\r
**** s1    1.0 rxhdr|X-Varnish: 1002\r
**** s1    1.0 rxhdr|\r
**** s1    1.0 rxhdrlen = 103
**** s1    1.0 http[ 0] |GET
**** s1    1.0 http[ 1] |/
**** s1    1.0 http[ 2] |HTTP/1.1
**** s1    1.0 http[ 3] |Host: 127.0.0.1
**** s1    1.0 http[ 4] |X-Forwarded-For: 127.0.0.1
**** s1    1.0 http[ 5] |Accept-Encoding: gzip
**** s1    1.0 http[ 6] |X-Varnish: 1002
**** s1    1.0 bodylen = 0
**   s1    1.0 === txresp
**** s1    1.0 txresp|HTTP/1.1 200 OK\r
**** s1    1.0 txresp|Content-Length: 0\r
**** s1    1.0 txresp|\r
***  s1    1.0 shutting fd 9
**   s1    1.0 Ending
**** c1    1.0 rxhdr|HTTP/1.1 503 VCL failed\r
**** c1    1.0 rxhdr|Date: Sun, 18 Jul 2021 12:37:39 GMT\r
**** c1    1.0 rxhdr|Server: Varnish\r
**** c1    1.0 rxhdr|X-Varnish: 1001\r
**** c1    1.0 rxhdr|Content-Type: text/html; charset=utf-8\r
**** c1    1.0 rxhdr|Retry-After: 5\r
**** c1    1.0 rxhdr|Content-Length: 251\r
**** c1    1.0 rxhdr|Connection: close\r
**** c1    1.0 rxhdr|\r
**** c1    1.0 rxhdrlen = 194
**** c1    1.0 http[ 0] |HTTP/1.1
**** c1    1.0 http[ 1] |503
**** c1    1.0 http[ 2] |VCL failed
**** c1    1.0 http[ 3] |Date: Sun, 18 Jul 2021 12:37:39 GMT
**** c1    1.0 http[ 4] |Server: Varnish
**** c1    1.0 http[ 5] |X-Varnish: 1001
**** c1    1.0 http[ 6] |Content-Type: text/html; charset=utf-8
**** c1    1.0 http[ 7] |Retry-After: 5
**** c1    1.0 http[ 8] |Content-Length: 251
**** c1    1.0 http[ 9] |Connection: close
**** c1    1.0 body|<!DOCTYPE html>
**** c1    1.0 body|<html>
**** c1    1.0 body|  <head>
**** c1    1.0 body|    <title>503 VCL failed</title>
**** c1    1.0 body|  </head>
**** c1    1.0 body|  <body>
**** c1    1.0 body|    <h1>Error 503 VCL failed</h1>
**** c1    1.0 body|    <p>VCL failed</p>
**** c1    1.0 body|    <h3>Guru Meditation:</h3>
**** c1    1.0 body|    <p>XID: 1001</p>
**** c1    1.0 body|    <hr>
**** c1    1.0 body|    <p>Varnish cache server</p>
**** c1    1.0 body|  </body>
**** c1    1.0 body|</html>
**** c1    1.0 bodylen = 251
**   c1    1.0 === expect resp.http.high == "4"
---- c1    1.0 EXPECT resp.http.high (<undef>) == "4" failed
*    top   1.0 RESETTING after ../src/tests/test02.vtc
**** p1    1.0 Sent signal 15
**** p1    1.0 stdout read -1
**** p1    1.0 stderr read 0
**   p1    1.0 WAIT4 pid=2995 status=0x000f (user 0.033436 sys 0.008359)
**** v1    1.0 vsl|          0 CLI             - Rd debug.xid 999 
**** v1    1.0 vsl|          0 CLI             - Wr 200 10 XID is 999
**** v1    1.0 vsl|          0 CLI             - Rd debug.listen_address 
**** v1    1.0 vsl|          0 CLI             - Wr 200 16 127.0.0.1 45769

**** v1    1.0 vsl|       1000 Begin           c sess 0 HTTP/1
**** v1    1.0 vsl|       1000 SessOpen        c 127.0.0.1 59608 a0 127.0.0.1 45769 1626611859.986269 20
**** v1    1.0 vsl|       1000 Link            c req 1001 rxreq
**** v1    1.0 vsl|       1002 Begin           b bereq 1001 fetch
**** v1    1.0 vsl|       1002 VCL_use         b vcl1
**** v1    1.0 vsl|       1002 Timestamp       b Start: 1626611859.986442 0.000000 0.000000
**** v1    1.0 vsl|       1002 BereqMethod     b GET
**** v1    1.0 vsl|       1002 BereqURL        b /
**** v1    1.0 vsl|       1002 BereqProtocol   b HTTP/1.1
**** v1    1.0 vsl|       1002 BereqHeader     b Host: 127.0.0.1
**** v1    1.0 vsl|       1002 BereqHeader     b X-Forwarded-For: 127.0.0.1
**** v1    1.0 vsl|       1002 BereqHeader     b Accept-Encoding: gzip
**** v1    1.0 vsl|       1002 BereqHeader     b X-Varnish: 1002
**** v1    1.0 vsl|       1002 VCL_call        b BACKEND_FETCH
**** v1    1.0 vsl|       1002 VCL_return      b fetch
**** v1    1.0 vsl|       1002 BackendOpen     b 26 vcl1.s1 127.0.0.1 35259 127.0.0.1 41264
**** v1    1.0 vsl|       1002 BackendStart    b 127.0.0.1 35259
**** v1    1.0 vsl|       1002 Timestamp       b Bereq: 1626611859.986599 0.000157 0.000157
**** v1    1.0 vsl|       1002 Timestamp       b Beresp: 1626611859.986961 0.000520 0.000363
**** v1    1.0 vsl|       1002 BerespProtocol  b HTTP/1.1
**** v1    1.0 vsl|       1002 BerespStatus    b 200
**** v1    1.0 vsl|       1002 BerespReason    b OK
**** v1    1.0 vsl|       1002 BerespHeader    b Content-Length: 0
**** v1    1.0 vsl|       1002 BerespHeader    b Date: Sun, 18 Jul 2021 12:37:39 GMT
**** v1    1.0 vsl|       1002 TTL             b RFC 120 10 0 1626611860 1626611860 1626611859 0 0 cacheable
**** v1    1.0 vsl|       1002 VCL_call        b BACKEND_RESPONSE
**** v1    1.0 vsl|       1002 VCL_return      b deliver
**** v1    1.0 vsl|       1002 Storage         b malloc s0
**** v1    1.0 vsl|       1002 Fetch_Body      b 0 none -
**** v1    1.0 vsl|       1002 BackendReuse    b 26 vcl1.s1
**** v1    1.0 vsl|       1002 Timestamp       b BerespBody: 1626611859.997328 0.010886 0.010366
**** v1    1.0 vsl|       1002 Length          b 0
**** v1    1.0 vsl|       1002 BereqAcct       b 103 0 103 38 0 38
**** v1    1.0 vsl|       1002 End             b 
**** v1    1.0 vsl|          0 ExpKill         - EXP_Inbox flg=1e p=0x7f04988110c0 e=0.000000 f=0x0
**** v1    1.0 vsl|          0 ExpKill         - EXP_When p=0x7f04988110c0 e=1626611989.986961 f=0x1e
**** v1    1.0 vsl|          0 ExpKill         - EXP_expire p=0x7f04988110c0 e=129.989542 f=0x0
**** v1    1.0 vsl|       1001 Begin           c req 1000 rxreq
**** v1    1.0 vsl|       1001 Timestamp       c Start: 1626611859.986339 0.000000 0.000000
**** v1    1.0 vsl|       1001 Timestamp       c Req: 1626611859.986339 0.000000 0.000000
**** v1    1.0 vsl|       1001 ReqStart        c 127.0.0.1 59608 a0
**** v1    1.0 vsl|       1001 ReqMethod       c GET
**** v1    1.0 vsl|       1001 ReqURL          c /
**** v1    1.0 vsl|       1001 ReqProtocol     c HTTP/1.1
**** v1    1.0 vsl|       1001 ReqHeader       c Host: 127.0.0.1
**** v1    1.0 vsl|       1001 ReqHeader       c X-Forwarded-For: 127.0.0.1
**** v1    1.0 vsl|       1001 VCL_call        c RECV
**** v1    1.0 vsl|       1001 VCL_return      c hash
**** v1    1.0 vsl|       1001 VCL_call        c HASH
**** v1    1.0 vsl|       1001 VCL_return      c lookup
**** v1    1.0 vsl|       1001 VCL_call        c MISS
**** v1    1.0 vsl|       1001 VCL_return      c fetch
**** v1    1.0 vsl|       1001 Link            c bereq 1002 fetch
**** v1    1.0 vsl|       1001 Timestamp       c Fetch: 1626611859.997380 0.011041 0.011041
**** v1    1.0 vsl|       1001 RespProtocol    c HTTP/1.1
**** v1    1.0 vsl|       1001 RespStatus      c 200
**** v1    1.0 vsl|       1001 RespReason      c OK
**** v1    1.0 vsl|       1001 RespHeader      c Content-Length: 0
**** v1    1.0 vsl|       1001 RespHeader      c Date: Sun, 18 Jul 2021 12:37:39 GMT
**** v1    1.0 vsl|       1001 RespHeader      c X-Varnish: 1001
**** v1    1.0 vsl|       1001 RespHeader      c Age: 0
**** v1    1.0 vsl|       1001 RespHeader      c Via: 1.1 varnish (Varnish/6.0)
**** v1    1.0 vsl|       1001 VCL_call        c DELIVER
**** v1    1.0 vsl|       1001 Error           c Could not connect to memcached.
**** v1    1.0 vsl|       1001 VCL_return      c fail
**** v1    1.0 vsl|       1001 Timestamp       c Process: 1626611859.997409 0.011070 0.000029
**** v1    1.0 vsl|       1001 Timestamp       c Process: 1626611859.997413 0.011073 0.000004
**** v1    1.0 vsl|       1001 RespProtocol    c HTTP/1.1
**** v1    1.0 vsl|       1001 RespStatus      c 503
**** v1    1.0 vsl|       1001 RespReason      c Service Unavailable
**** v1    1.0 vsl|       1001 RespReason      c VCL failed
**** v1    1.0 vsl|       1001 RespHeader      c Date: Sun, 18 Jul 2021 12:37:39 GMT
**** v1    1.0 vsl|       1001 RespHeader      c Server: Varnish
**** v1    1.0 vsl|       1001 RespHeader      c X-Varnish: 1001
**** v1    1.0 vsl|       1001 VCL_call        c SYNTH
**** v1    1.0 vsl|       1001 RespHeader      c Content-Type: text/html; charset=utf-8
**** v1    1.0 vsl|       1001 RespHeader      c Retry-After: 5
**** v1    1.0 vsl|       1001 VCL_return      c deliver
**** v1    1.0 vsl|       1001 RespHeader      c Content-Length: 251
**** v1    1.0 vsl|       1001 Storage         c malloc Transient
**** v1    1.0 vsl|       1001 RespHeader      c Connection: close
**** v1    1.0 vsl|       1001 Timestamp       c Resp: 1626611859.997540 0.011201 0.000128
**** v1    1.0 vsl|       1001 ReqAcct         c 35 0 35 194 251 445
**** v1    1.0 vsl|       1001 End             c 
**** v1    1.0 vsl|       1000 SessClose       c VCL_FAILURE 0.011
**** v1    1.0 vsl|       1000 End             c 
**** p1    2.0 stdout 0 bytes, stderr 0 bytes
**   s1    2.0 Waiting for server (8/-1)
**   v1    2.0 Wait
**** v1    2.0 CLI TX|panic.clear
***  v1    2.0 CLI RX  300
**** v1    2.0 CLI RX|No panic to clear
***  v1    2.0 debug|Info: manager stopping child
***  v1    2.0 debug|Debug: Stopping Child
**** v1    2.1 vsl|          0 CLI             - EOF on CLI connection, worker stops
***  v1    3.0 debug|Info: Child (3026) ended
***  v1    3.0 debug|Info: Child (3026) said Child dies
***  v1    3.0 debug|Debug: Child cleanup complete
***  v1    3.0 debug|Info: manager dies
**** v1    3.0 STDOUT poll 0x10
**   v1    3.1 WAIT4 pid=3014 status=0x0000 (user 0.274507 sys 0.151369)
*    top   3.1 TEST ../src/tests/test02.vtc FAILED
#    top  TEST ../src/tests/test02.vtc FAILED (3.134) exit=2
make[1]: *** [../src/tests/test02.vtc] Error 1

Error logging

Failures interacting with MC servers are completely hidden when using the VMOD. It would be really nice to have some error logging using memcached_strerror() and WSP(). This will highly simplify debugging problems.

(Internal reference to feature request, RT#4939)

libvmod-memcached in production

We planning to add a proxy layer in front of memcached nodes and make it easily scalable.
Our team is fan of Varnish and using it successfully from many years.
While searching I found out libvmod-memcached vmod and just want to know about anyone using it production and if you have any comparison metrics against other proxies like twemproxy, Mcrouter that would be great help.

Doesn't build against V4.1

Via ingvar:

[ingvar@netcat ~/src/vmods/vmod-memcached]$ git clone https://github.com/varnish/libvmod-memcached.git
Cloning into 'libvmod-memcached'...
remote: Counting objects: 640, done.
remote: Total 640 (delta 0), reused 0 (delta 0), pack-reused 640
Receiving objects: 100% (640/640), 96.58 KiB | 0 bytes/s, done.
Resolving deltas: 100% (350/350), done.
Checking connectivity... done.

[ingvar@netcat ~/src/vmods/vmod-memcached]$ cd libvmod-memcached/

[ingvar@netcat ~/src/vmods/vmod-memcached/libvmod-memcached]$ ./autogen.sh && ./configure
(...)

[ingvar@netcat ~/src/vmods/vmod-memcached/libvmod-memcached]$ make

make all-recursive
make[1]: Entering directory '/rpl/home/ingvar/src/vmods/vmod-memcached/libvmod-memcached'
Making all in src
make[2]: Entering directory '/rpl/home/ingvar/src/vmods/vmod-memcached/libvmod-memcached/src'
/usr/share/varnish/vmodtool.py ../src/vmod_memcached.vcc
ERROR: Format error reading "../src/vmod_memcached.vcc": 'Unknown keyword: $Init'

Makefile:700: recipe for target 'vcc_if.h' failed
make[2]: *** [vcc_if.h] Error 254
make[2]: Leaving directory '/rpl/home/ingvar/src/vmods/vmod-memcached/libvmod-memcached/src'
Makefile:513: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/rpl/home/ingvar/src/vmods/vmod-memcached/libvmod-memcached'
Makefile:381: recipe for target 'all' failed
make: *** [all] Error 2

[ingvar@netcat ~/src/vmods/vmod-memcached/libvmod-memcached]$ rpm -q libmemcached-devel varnish-libs-devel
libmemcached-devel-1.0.18-4.fc22.x86_64
varnish-libs-devel-4.1.0-1.fc24.x86_64

Problem importing -> 'libvmod_memcached.so: undefined symbol: memcached_free'

I'm with branch 3.0, I made it to install varnish module, but when I import it and use it I get this error:

Message from VCC-compiler:
Could not load module memcached
    /usr/lib/varnish/vmods/libvmod_memcached.so
    /usr/lib/varnish/vmods/libvmod_memcached.so: undefined symbol: memcached_free
('input' Line 7 Pos 8)
import memcached;

I also get this error executing make check.
Does anybody have had the same issue or could get me a clue?

1.0.0 does not build on el6 because of too old libmemcached

libvmod-memcached-1.0.0 does not build on rhel6 (and clones), as the available version of libmemcached in el6 is too old.

As el6 is a supported platform for varnish, support also for libvmod-memcached should be considered.

checking for LIBMEMCACHED... no
configure: error: Package requirements (libmemcached > 0.53) were not met:
Requested 'libmemcached > 0.53' but version of libmemcached is 0.31

Ingvar

Varnish needs to be restarted whenever the memcached pool changes and VCL is updated to reflect it

Memcached connections (memcached_st) are created and binded to the current thread using pthread_setspecific(). If at some point you change in VCL the location of the Memcached server, you are forced to execute a restart of Varnish in order to refresh the already created connections. It would be nice to be able to do that just reloading the VCL. The suggestion here is using some kind of versioning increased every time init_function() is called. This approach is used in the Redis vmod (https://github.com/carlosabald e/libvmod-redis).

(Internal reference to feature request, RT#4939)

cannot run make check with custom varnish path

i've installed varnish with prefix=/opt/vc_419

compiling is ok with:
PKG_CONFIG_PATH=/opt/vc_419/lib/pkgconfig/ ./autogen.sh && PKG_CONFIG_PATH=/opt/vc_419/lib/pkgconfig/ ./configure && make -j 20

but make check fails:

dmatetelki@denesx1c\:~/p/libvmod-memcached[autotools_fix*]$ make check
Making check in src
make[1]: Entering directory '/home/dmatetelki/p/libvmod-memcached/src'
Dvarnishd=/home/dmatetelki/bin/varnishd -Dvmod_topbuild=/home/dmatetelki/p/libvmod-memcached ../src/tests/test05.vtc
/bin/bash: -Dvmod_topbuild=/home/dmatetelki/p/libvmod-memcached: No such file or directory
Makefile:708: recipe for target '../src/tests/test05.vtc' failed
make[1]: [../src/tests/test05.vtc] Error 127 (ignored)
...

Build issues on EL6

Input from @ingvarha:

  • Autoconf in EL6 is too old. It is possible to do make dist in EL7 for example, and then copy the result back to EL6.
  • lsof is missing in BuildRequires in the spec file. It is used in the tests.
  • src/tests/gen-vcl.sh needs to be part of the tarball produced by make dist.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.