annotate t/memcached-keepalive.t @ 21:9a4ee6fe1c6d

Keepalive: avoid closing upstream connection on stale events. Under some conditions it's possible that stale events occur, i.e. read event handler called for just saved upstream connection without any data available for read. We shouldn't close upstream connection in such situation. Reported by: Martin Fjordvald
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 14 Sep 2010 04:01:14 +0400
parents 8d8eaaf07663
children 2ee28064a04a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Test for memcached with keepalive.
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use Test::Nginx;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 ###############################################################################
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 select STDERR; $| = 1;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18 select STDOUT; $| = 1;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 eval { require Cache::Memcached; };
13
181a487581b7 Keepalive: fix typo in tests.
Maxim Dounin <mdounin@mdounin.ru>
parents: 12
diff changeset
21 plan(skip_all => 'Cache::Memcached not installed') if $@;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22
11
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
23 my $t = Test::Nginx->new()->has('rewrite')->has_daemon('memcached')->plan(16)
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 ->write_file_expand('nginx.conf', <<'EOF');
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
20
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 19
diff changeset
26 %%TEST_GLOBALS%%
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 19
diff changeset
27
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 master_process off;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 daemon off;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 events {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 http {
20
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 19
diff changeset
35 %%TEST_GLOBALS_HTTP%%
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 upstream memd {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 server 127.0.0.1:8081;
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
39 keepalive 1;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
40 }
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
41
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
42 upstream memd2 {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
43 server 127.0.0.1:8081;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
44 server 127.0.0.1:8082;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
45 keepalive 1 single;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
46 }
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
47
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
48 upstream memd3 {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
49 server 127.0.0.1:8081;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
50 server 127.0.0.1:8082;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
51 keepalive 1;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
52 }
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
53
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
54 upstream memd4 {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
55 server 127.0.0.1:8081;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
56 server 127.0.0.1:8082;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
57 keepalive 10;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 server {
20
8d8eaaf07663 Keepalive: tests cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 19
diff changeset
61 listen 127.0.0.1:8080;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 server_name localhost;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 location / {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 set $memcached_key $uri;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 memcached_pass memd;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 location /next {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 set $memcached_key $uri;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 memcached_next_upstream not_found;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 memcached_pass memd;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 }
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
74
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
75 location /memd2 {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
76 set $memcached_key "/";
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
77 memcached_pass memd2;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
78 }
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
79
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
80 location /memd3 {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
81 set $memcached_key "/";
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
82 memcached_pass memd3;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
83 }
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
84
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
85 location /memd4 {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
86 set $memcached_key "/";
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
87 memcached_pass memd4;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
88 }
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 EOF
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93
19
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
94 my $memhelp = `memcached -h`;
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
95 my @memopts1 = ();
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
96 my @memopts2 = ();
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
97
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
98 if ($memhelp =~ /repcached/) {
12
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
99 # repcached patches adds additional listen socket memcached
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
100 # that should be different too
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
101
19
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
102 push @memopts1, '-X', '8091';
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
103 push @memopts2, '-X', '8092';
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
104 }
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
105 if ($memhelp =~ /-U/) {
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
106 # UDP ports no longer off by default in memcached 1.2.7+
12
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
107
19
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
108 push @memopts1, '-U', '0';
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
109 push @memopts2, '-U', '0';
12
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
110 }
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
111
19
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
112 $t->run_daemon('memcached', '-l', '127.0.0.1', '-p', '8081', @memopts1);
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
113 $t->run_daemon('memcached', '-l', '127.0.0.1', '-p', '8082', @memopts2);
2ce9d8a1ca93 Keepalive: fix tests for memcached 1.2.7+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 13
diff changeset
114
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 $t->run();
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116
12
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
117 $t->waitforsocket('127.0.0.1:8081')
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
118 or die "Unable to start memcached";
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
119 $t->waitforsocket('127.0.0.1:8082')
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
120 or die "Unable to start second memcached";
067ddc059ee0 Keepalive: fix tests to be compatible with repcached patches.
Maxim Dounin <mdounin@mdounin.ru>
parents: 11
diff changeset
121
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 ###############################################################################
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
124 my $memd1 = Cache::Memcached->new(servers => [ '127.0.0.1:8081' ]);
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
125 my $memd2 = Cache::Memcached->new(servers => [ '127.0.0.1:8082' ]);
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
127 $memd1->set('/', 'SEE-THIS');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
128 $memd2->set('/', 'SEE-THIS');
11
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
129 $memd1->set('/big', 'X' x 1000000);
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
130
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
131 my $total = $memd1->stats()->{total}->{total_connections};
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 like(http_get('/'), qr/SEE-THIS/, 'keepalive memcached request');
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 like(http_get('/notfound'), qr/404/, 'keepalive memcached not found');
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 like(http_get('/next'), qr/404/,
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 'keepalive not found with memcached_next_upstream');
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 like(http_get('/'), qr/SEE-THIS/, 'keepalive memcached request again');
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 like(http_get('/'), qr/SEE-THIS/, 'keepalive memcached request again');
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 like(http_get('/'), qr/SEE-THIS/, 'keepalive memcached request again');
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
141 is($memd1->stats()->{total}->{total_connections}, $total + 1,
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
142 'only one connection used');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
143
11
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
144 # Since nginx doesn't read all data from connection in some situations (head
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
145 # requests, post_action, errors writing to client) we have to close such
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
146 # connections. Check if we really do close them.
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
147
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
148 $total = $memd1->stats()->{total}->{total_connections};
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
149
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
150 unlike(http_head('/'), qr/SEE-THIS/, 'head request');
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
151 like(http_get('/'), qr/SEE-THIS/, 'get after head');
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
152
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
153 is($memd1->stats()->{total}->{total_connections}, $total + 1,
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
154 'head request closes connection');
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
155
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
156 $total = $memd1->stats()->{total}->{total_connections};
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
157
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
158 unlike(http_head('/big'), qr/XXX/, 'big head');
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
159 like(http_get('/'), qr/SEE-THIS/, 'get after big head');
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
160
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
161 is($memd1->stats()->{total}->{total_connections}, $total + 1,
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
162 'big head request closes connection');
15530a464dba Keepalive: don't cache invalid connections.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
163
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
164 # two backends with 'single' option - should establish only one connection
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
165
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
166 $total = $memd1->stats()->{total}->{total_connections} +
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
167 $memd2->stats()->{total}->{total_connections};
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
168
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
169 http_get('/memd2');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
170 http_get('/memd2');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
171 http_get('/memd2');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
172
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
173 is($memd1->stats()->{total}->{total_connections} +
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
174 $memd2->stats()->{total}->{total_connections}, $total + 1,
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
175 'only one connection with two backends and single');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
176
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
177 $total = $memd1->stats()->{total}->{total_connections} +
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
178 $memd2->stats()->{total}->{total_connections};
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
179
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
180 # two backends without 'single' option and maximum number of cached
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
181 # connections set to 1 - should establish new connection on each request
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
182
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
183 http_get('/memd3');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
184 http_get('/memd3');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
185 http_get('/memd3');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
186
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
187 is($memd1->stats()->{total}->{total_connections} +
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
188 $memd2->stats()->{total}->{total_connections}, $total + 3,
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
189 '3 connections should be established');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
190
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
191 # two backends without 'single' option and maximum number of cached
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
192 # connections set to 10 - should establish only two connections (1 per backend)
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
193
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
194 $total = $memd1->stats()->{total}->{total_connections} +
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
195 $memd2->stats()->{total}->{total_connections};
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
196
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
197 http_get('/memd4');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
198 http_get('/memd4');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
199 http_get('/memd4');
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
200
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
201 is($memd1->stats()->{total}->{total_connections} +
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
202 $memd2->stats()->{total}->{total_connections}, $total + 2,
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
203 'connection per backend');
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 ###############################################################################