dalli 2.7.3 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +5 -5
  2. data/{History.md → CHANGELOG.md} +211 -0
  3. data/Gemfile +3 -6
  4. data/LICENSE +1 -1
  5. data/README.md +30 -208
  6. data/lib/dalli/cas/client.rb +2 -57
  7. data/lib/dalli/client.rb +254 -253
  8. data/lib/dalli/compressor.rb +13 -2
  9. data/lib/dalli/key_manager.rb +121 -0
  10. data/lib/dalli/options.rb +7 -7
  11. data/lib/dalli/pipelined_getter.rb +177 -0
  12. data/lib/dalli/protocol/base.rb +241 -0
  13. data/lib/dalli/protocol/binary/request_formatter.rb +117 -0
  14. data/lib/dalli/protocol/binary/response_header.rb +36 -0
  15. data/lib/dalli/protocol/binary/response_processor.rb +239 -0
  16. data/lib/dalli/protocol/binary/sasl_authentication.rb +60 -0
  17. data/lib/dalli/protocol/binary.rb +173 -0
  18. data/lib/dalli/protocol/connection_manager.rb +252 -0
  19. data/lib/dalli/protocol/meta/key_regularizer.rb +31 -0
  20. data/lib/dalli/protocol/meta/request_formatter.rb +121 -0
  21. data/lib/dalli/protocol/meta/response_processor.rb +211 -0
  22. data/lib/dalli/protocol/meta.rb +178 -0
  23. data/lib/dalli/protocol/response_buffer.rb +54 -0
  24. data/lib/dalli/protocol/server_config_parser.rb +86 -0
  25. data/lib/dalli/protocol/ttl_sanitizer.rb +45 -0
  26. data/lib/dalli/protocol/value_compressor.rb +85 -0
  27. data/lib/dalli/protocol/value_marshaller.rb +59 -0
  28. data/lib/dalli/protocol/value_serializer.rb +91 -0
  29. data/lib/dalli/protocol.rb +8 -0
  30. data/lib/dalli/ring.rb +97 -86
  31. data/lib/dalli/server.rb +4 -719
  32. data/lib/dalli/servers_arg_normalizer.rb +54 -0
  33. data/lib/dalli/socket.rb +123 -115
  34. data/lib/dalli/version.rb +5 -1
  35. data/lib/dalli.rb +45 -14
  36. data/lib/rack/session/dalli.rb +162 -42
  37. metadata +136 -63
  38. data/Performance.md +0 -42
  39. data/Rakefile +0 -43
  40. data/dalli.gemspec +0 -29
  41. data/lib/action_dispatch/middleware/session/dalli_store.rb +0 -81
  42. data/lib/active_support/cache/dalli_store.rb +0 -372
  43. data/lib/dalli/railtie.rb +0 -7
  44. data/test/benchmark_test.rb +0 -243
  45. data/test/helper.rb +0 -56
  46. data/test/memcached_mock.rb +0 -201
  47. data/test/sasl/memcached.conf +0 -1
  48. data/test/sasl/sasldb +0 -1
  49. data/test/test_active_support.rb +0 -541
  50. data/test/test_cas_client.rb +0 -107
  51. data/test/test_compressor.rb +0 -52
  52. data/test/test_dalli.rb +0 -682
  53. data/test/test_encoding.rb +0 -32
  54. data/test/test_failover.rb +0 -137
  55. data/test/test_network.rb +0 -64
  56. data/test/test_rack_session.rb +0 -341
  57. data/test/test_ring.rb +0 -85
  58. data/test/test_sasl.rb +0 -105
  59. data/test/test_serializer.rb +0 -29
  60. data/test/test_server.rb +0 -110
@@ -1,201 +0,0 @@
1
- require "socket"
2
- require "tempfile"
3
-
4
- $started = {}
5
-
6
- module MemcachedMock
7
- UNIX_SOCKET_PATH = (f = Tempfile.new('dalli_test'); f.close; f.path)
8
-
9
- def self.start(port=19123)
10
- server = TCPServer.new("localhost", port)
11
- session = server.accept
12
- yield(session)
13
- end
14
-
15
- def self.start_unix(path=UNIX_SOCKET_PATH)
16
- begin
17
- File.delete(path)
18
- rescue Errno::ENOENT
19
- end
20
- server = UNIXServer.new(path)
21
- session = server.accept
22
- yield(session)
23
- end
24
-
25
- def self.delayed_start(port=19123, wait=1)
26
- server = TCPServer.new("localhost", port)
27
- sleep wait
28
- yield(server)
29
- end
30
-
31
- module Helper
32
- # Forks the current process and starts a new mock Memcached server on
33
- # port 22122.
34
- #
35
- # memcached_mock(lambda {|sock| socket.write('123') }) do
36
- # assert_equal "PONG", Dalli::Client.new('localhost:22122').get('abc')
37
- # end
38
- #
39
- def memcached_mock(proc, meth=:start, meth_args=[])
40
- return unless supports_fork?
41
- begin
42
- pid = fork do
43
- trap("TERM") { exit }
44
-
45
- MemcachedMock.send(meth, *meth_args) do |*args|
46
- proc.call(*args)
47
- end
48
- end
49
-
50
- sleep 0.3 # Give time for the socket to start listening.
51
- yield
52
- ensure
53
- if pid
54
- Process.kill("TERM", pid)
55
- Process.wait(pid)
56
- end
57
- end
58
- end
59
-
60
- PATHS = %w(
61
- /usr/local/bin/
62
- /opt/local/bin/
63
- /usr/bin/
64
- )
65
-
66
- def find_memcached
67
- output = `memcached -h | head -1`.strip
68
- if output && output =~ /^memcached (\d.\d.\d+)/ && $1 > '1.4'
69
- return (puts "Found #{output} in PATH"; '')
70
- end
71
- PATHS.each do |path|
72
- output = `memcached -h | head -1`.strip
73
- if output && output =~ /^memcached (\d\.\d\.\d+)/ && $1 > '1.4'
74
- return (puts "Found #{output} in #{path}"; path)
75
- end
76
- end
77
-
78
- raise Errno::ENOENT, "Unable to find memcached 1.4+ locally"
79
- end
80
-
81
- def memcached_persistent(port=21345)
82
- dc = start_and_flush_with_retry(port, '', {})
83
- yield dc, port if block_given?
84
- end
85
-
86
- def sasl_credentials
87
- { :username => 'testuser', :password => 'testtest' }
88
- end
89
-
90
- def sasl_env
91
- {
92
- 'MEMCACHED_SASL_PWDB' => "#{File.dirname(__FILE__)}/sasl/sasldb",
93
- 'SASL_CONF_PATH' => "#{File.dirname(__FILE__)}/sasl/memcached.conf"
94
- }
95
- end
96
-
97
- def memcached_sasl_persistent(port=21397)
98
- dc = start_and_flush_with_retry(port, '-S', sasl_credentials)
99
- yield dc, port if block_given?
100
- end
101
-
102
- def memcached_cas_persistent(port = 25662)
103
- require 'dalli/cas/client'
104
- dc = start_and_flush_with_retry(port)
105
- yield dc, port if block_given?
106
- end
107
-
108
-
109
- def memcached_low_mem_persistent(port = 19128)
110
- dc = start_and_flush_with_retry(port, '-m 1 -M')
111
- yield dc, port if block_given?
112
- end
113
-
114
- def start_and_flush_with_retry(port, args = '', client_options = {})
115
- dc = nil
116
- retry_count = 0
117
- while dc.nil? do
118
- begin
119
- dc = start_and_flush(port, args, client_options, (retry_count == 0))
120
- rescue StandardError => e
121
- $started[port] = nil
122
- retry_count += 1
123
- raise e if retry_count >= 3
124
- end
125
- end
126
- dc
127
- end
128
-
129
- def start_and_flush(port, args = '', client_options = {}, flush = true)
130
- memcached_server(port, args)
131
- if "#{port}" =~ /\A\//
132
- # unix socket
133
- dc = Dalli::Client.new(port, client_options)
134
- else
135
- dc = Dalli::Client.new(["localhost:#{port}", "127.0.0.1:#{port}"], client_options)
136
- end
137
- dc.flush_all if flush
138
- dc
139
- end
140
-
141
- def memcached(port, args='', client_options={})
142
- dc = start_and_flush_with_retry(port, args, client_options)
143
- yield dc, port if block_given?
144
- memcached_kill(port)
145
- end
146
-
147
- def memcached_server(port, args='')
148
- Memcached.path ||= find_memcached
149
- if "#{port}" =~ /\A\//
150
- # unix socket
151
- port_socket_arg = '-s'
152
- begin
153
- File.delete(port)
154
- rescue Errno::ENOENT
155
- end
156
- else
157
- port_socket_arg = '-p'
158
- port = port.to_i
159
- end
160
-
161
- cmd = "#{Memcached.path}memcached #{args} #{port_socket_arg} #{port}"
162
-
163
- $started[port] ||= begin
164
- pid = IO.popen(cmd).pid
165
- at_exit do
166
- begin
167
- Process.kill("TERM", pid)
168
- Process.wait(pid)
169
- rescue Errno::ECHILD, Errno::ESRCH
170
- end
171
- end
172
- wait_time = (args && args =~ /\-S/) ? 0.1 : 0.1
173
- sleep wait_time
174
- pid
175
- end
176
- end
177
-
178
- def supports_fork?
179
- !defined?(RUBY_ENGINE) || RUBY_ENGINE != 'jruby'
180
- end
181
-
182
- def memcached_kill(port)
183
- pid = $started.delete(port)
184
- if pid
185
- begin
186
- Process.kill("TERM", pid)
187
- Process.wait(pid)
188
- rescue Errno::ECHILD, Errno::ESRCH => e
189
- puts e.inspect
190
- end
191
- end
192
- end
193
-
194
- end
195
- end
196
-
197
- module Memcached
198
- class << self
199
- attr_accessor :path
200
- end
201
- end
@@ -1 +0,0 @@
1
- mech_list: plain
data/test/sasl/sasldb DELETED
@@ -1 +0,0 @@
1
- testuser:testtest:::::::