memcached-seanl 0.19.5.5 → 0.19.5.6

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v0.19.5.6. Attempt to be compatible with Rails session store
2
+
1
3
  v0.19.5.5. Test version I plan to push
2
4
 
3
5
  v0.19.5.4. Multiget with binary protocol
data/Rakefile CHANGED
@@ -23,7 +23,7 @@ task :exceptions do
23
23
  end
24
24
 
25
25
  task :valgrind do
26
- exec("valgrind --tool=memcheck --leak-check=yes --show-reachable=no --num-callers=15 --track-fds=yes ruby #{File.dirname(__FILE__)}/test/profile/valgrind.rb")
26
+ exec("valgrind --tool=memcheck --leak-check=full --show-reachable=no --num-callers=15 --track-fds=yes --workaround-gcc296-bugs=yes --max-stackframe=7304328 --dsymutil=yes --track-origins=yes ruby #{File.dirname(__FILE__)}/test/profile/valgrind.rb")
27
27
  end
28
28
 
29
29
  task :profile do
data/ext/extconf.rb CHANGED
@@ -5,7 +5,11 @@ HERE = File.expand_path(File.dirname(__FILE__))
5
5
  BUNDLE = Dir.glob("libmemcached-*.tar.gz").first
6
6
  BUNDLE_PATH = BUNDLE.sub(".tar.gz", "")
7
7
 
8
+ SOLARIS_32 = RbConfig::CONFIG['target'] == "i386-pc-solaris2.10"
9
+
8
10
  $CFLAGS = "#{RbConfig::CONFIG['CFLAGS']} #{$CFLAGS}".gsub("$(cflags)", "").gsub("-fno-common", "")
11
+ $CFLAGS << " -std=gnu99" if SOLARIS_32
12
+ $EXTRA_CONF = " --disable-64bit" if SOLARIS_32
9
13
  $LDFLAGS = "#{RbConfig::CONFIG['LDFLAGS']} #{$LDFLAGS}".gsub("$(ldflags)", "").gsub("-fno-common", "")
10
14
  $CXXFLAGS = " -std=gnu++98 #{$CFLAGS}"
11
15
  $CPPFLAGS = $ARCH_FLAG = $DLDFLAGS = ""
@@ -25,12 +29,14 @@ def check_libmemcached
25
29
  $CFLAGS = "#{$includes} #{$libraries} #{$CFLAGS}"
26
30
  $LDFLAGS = "#{$libraries} #{$LDFLAGS}"
27
31
  $LIBPATH = ["#{HERE}/lib"]
28
- $DEFLIBPATH = []
32
+ $DEFLIBPATH = [] unless SOLARIS_32
29
33
 
30
34
  Dir.chdir(HERE) do
31
35
  if File.exist?("lib")
32
36
  puts "Libmemcached already built; run 'rake clean' first if you need to rebuild."
33
37
  else
38
+ tar = SOLARIS_32 ? 'gtar' : 'tar'
39
+ patch = SOLARIS_32 ? 'gpatch' : 'patch'
34
40
 
35
41
  # have_sasl check may fail on OSX, skip it
36
42
  # unless RUBY_PLATFORM =~ /darwin/ or have_library('sasl2')
@@ -38,15 +44,15 @@ def check_libmemcached
38
44
  # end
39
45
 
40
46
  puts "Building libmemcached."
41
- puts(cmd = "tar xzf #{BUNDLE} 2>&1")
47
+ puts(cmd = "#{tar} xzf #{BUNDLE} 2>&1")
42
48
  raise "'#{cmd}' failed" unless system(cmd)
43
49
 
44
50
  puts "Patching libmemcached source."
45
- puts(cmd = "patch -p1 -Z < libmemcached.patch")
51
+ puts(cmd = "#{patch} -p1 -Z < libmemcached.patch")
46
52
  raise "'#{cmd}' failed" unless system(cmd)
47
53
 
48
54
  puts "Patching libmemcached with SASL support."
49
- puts(cmd = "patch -p1 -Z < sasl.patch")
55
+ puts(cmd = "#{patch} -p1 -Z < sasl.patch")
50
56
  raise "'#{cmd}' failed" unless system(cmd)
51
57
 
52
58
  puts "Touching aclocal.m4 in libmemcached."
@@ -160,6 +160,9 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
160
160
  # Set the server list.
161
161
  # FIXME Does not necessarily free any existing server structs.
162
162
  def set_servers(servers)
163
+ server_structs.each do |server|
164
+ Lib.memcached_server_remove(server)
165
+ end
163
166
  Array(servers).each_with_index do |server, index|
164
167
  # Socket
165
168
  check_return_code(
@@ -588,12 +591,14 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
588
591
  message = "Key #{inspect_keys(key, (detect_failure if ret == Lib::MEMCACHED_SERVER_MARKED_DEAD)).inspect}"
589
592
  if key.is_a?(String)
590
593
  if ret == Lib::MEMCACHED_ERRNO
591
- server = Lib.memcached_server_by_key(@struct, key)
592
- errno = server.first.cached_errno
593
- message = "Errno #{errno}: #{ERRNO_HASH[errno].inspect}. #{message}"
594
+ if (server = Lib.memcached_server_by_key(@struct, key)).is_a?(Array)
595
+ errno = server.first.cached_errno
596
+ message = "Errno #{errno}: #{ERRNO_HASH[errno].inspect}. #{message}"
597
+ end
594
598
  elsif ret == Lib::MEMCACHED_SERVER_ERROR
595
- server = Lib.memcached_server_by_key(@struct, key)
596
- message = "\"#{server.first.cached_server_error}\". #{message}."
599
+ if (server = Lib.memcached_server_by_key(@struct, key)).is_a?(Array)
600
+ message = "\"#{server.first.cached_server_error}\". #{message}."
601
+ end
597
602
  end
598
603
  end
599
604
  raise EXCEPTIONS[ret], message
@@ -26,6 +26,12 @@ class Memcached
26
26
  super(servers, opts)
27
27
  end
28
28
 
29
+ def servers
30
+ server_structs.map do |server|
31
+ Server.new server
32
+ end
33
+ end
34
+
29
35
  def logger=(logger)
30
36
  @logger = logger
31
37
  end
@@ -116,4 +122,38 @@ class Memcached
116
122
  alias :"[]=" :set
117
123
 
118
124
  end
119
- end
125
+
126
+ class Server
127
+ def initialize(struct)
128
+ @struct = struct
129
+ end
130
+
131
+ def host
132
+ @struct.hostname
133
+ end
134
+
135
+ def port
136
+ @struct.port
137
+ end
138
+
139
+ def weight
140
+ @struct.weight
141
+ end
142
+
143
+ def multithreaded
144
+ true
145
+ end
146
+
147
+ def status
148
+ alive? ? 'CONNECTED' : 'NOT CONNECTED'
149
+ end
150
+
151
+ def inspect
152
+ "<Memcached::Rails::Server: %s:%d [%d] (%s)>" % [host, port, weight, status]
153
+ end
154
+
155
+ def alive?
156
+ @struct.fd != -1 || @struct.next_retry <= Time.now
157
+ end
158
+ end
159
+ end
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{memcached-seanl}
5
- s.version = "0.19.5.5"
5
+ s.version = "0.19.5.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Sean Lynch"]
9
- s.date = %q{2010-05-24}
9
+ s.date = %q{2010-05-25}
10
10
  s.description = %q{An interface to the libmemcached C client.}
11
11
  s.email = %q{}
12
12
  s.extensions = ["ext/extconf.rb"]
@@ -5,6 +5,8 @@ $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib/"
5
5
  require 'memcached'
6
6
  require 'rubygems'
7
7
 
8
+ GC.copy_on_write_friendly = true if GC.respond_to?("copy_on_write_friendly=")
9
+
8
10
  class Worker
9
11
  def initialize(method_name, iterations)
10
12
  @method = method_name || 'mixed'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memcached-seanl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 201
4
+ hash: 207
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 19
9
9
  - 5
10
- - 5
11
- version: 0.19.5.5
10
+ - 6
11
+ version: 0.19.5.6
12
12
  platform: ruby
13
13
  authors:
14
14
  - Sean Lynch
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-05-24 00:00:00 -07:00
19
+ date: 2010-05-25 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies: []
22
22