couchbase 1.2.0.beta-x86-mingw32 → 1.2.0-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +1 -1
- data/Makefile +3 -0
- data/README.markdown +15 -4
- data/RELEASE_NOTES.markdown +513 -0
- data/couchbase.gemspec +0 -1
- data/ext/couchbase_ext/arguments.c +161 -244
- data/ext/couchbase_ext/arithmetic.c +29 -37
- data/ext/couchbase_ext/bucket.c +252 -219
- data/ext/couchbase_ext/couchbase_ext.c +540 -417
- data/ext/couchbase_ext/couchbase_ext.h +218 -191
- data/ext/couchbase_ext/delete.c +30 -27
- data/ext/couchbase_ext/extconf.rb +15 -3
- data/ext/couchbase_ext/get.c +45 -37
- data/ext/couchbase_ext/http.c +95 -74
- data/ext/couchbase_ext/multithread_plugin.c +1201 -0
- data/ext/couchbase_ext/observe.c +42 -37
- data/ext/couchbase_ext/result.c +17 -20
- data/ext/couchbase_ext/stats.c +30 -28
- data/ext/couchbase_ext/store.c +46 -39
- data/ext/couchbase_ext/timer.c +11 -11
- data/ext/couchbase_ext/touch.c +30 -27
- data/ext/couchbase_ext/unlock.c +30 -27
- data/ext/couchbase_ext/utils.c +166 -89
- data/ext/couchbase_ext/version.c +29 -26
- data/lib/action_dispatch/middleware/session/couchbase_store.rb +2 -2
- data/lib/active_support/cache/couchbase_store.rb +6 -6
- data/lib/couchbase.rb +1 -0
- data/lib/couchbase/bucket.rb +6 -11
- data/lib/couchbase/cluster.rb +105 -0
- data/lib/couchbase/utils.rb +8 -5
- data/lib/couchbase/version.rb +1 -1
- data/lib/couchbase/view.rb +51 -5
- data/lib/couchbase/view_row.rb +1 -1
- data/lib/ext/multi_json_fix.rb +13 -9
- data/lib/rack/session/couchbase.rb +11 -7
- data/tasks/compile.rake +1 -1
- data/tasks/test.rake +40 -34
- data/tasks/util.rake +1 -1
- data/test/setup.rb +9 -2
- data/test/test_arithmetic.rb +37 -0
- data/test/test_async.rb +22 -18
- data/test/test_unlock.rb +0 -1
- data/test/test_utils.rb +32 -0
- metadata +13 -23
- data/HISTORY.markdown +0 -215
data/lib/couchbase/view_row.rb
CHANGED
data/lib/ext/multi_json_fix.rb
CHANGED
@@ -24,10 +24,23 @@ if MultiJson.respond_to?(:engine)
|
|
24
24
|
else
|
25
25
|
multi_json_engine = MultiJson.send(:adapter)
|
26
26
|
end
|
27
|
+
|
28
|
+
# Patch for MultiJson versions < 1.3.3
|
29
|
+
require 'multi_json/version'
|
30
|
+
if Gem::Version.new(MultiJson::VERSION) < Gem::Version.new('1.3.3')
|
31
|
+
class << MultiJson
|
32
|
+
alias :dump :encode
|
33
|
+
alias :load :decode
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
27
37
|
if multi_json_engine.name =~ /JsonGem$/
|
28
38
|
class << multi_json_engine
|
29
39
|
alias _load_object load
|
30
40
|
def load(string, options = {})
|
41
|
+
if string.is_a?(StringIO)
|
42
|
+
string = string.read
|
43
|
+
end
|
31
44
|
if string =~ /\A\s*[{\[]/
|
32
45
|
_load_object(string, options)
|
33
46
|
else
|
@@ -36,12 +49,3 @@ if multi_json_engine.name =~ /JsonGem$/
|
|
36
49
|
end
|
37
50
|
end
|
38
51
|
end
|
39
|
-
|
40
|
-
# Patch for MultiJson versions < 1.3.3
|
41
|
-
if MultiJson.respond_to?(:decode) && MultiJson.respond_to?(:encode) &&
|
42
|
-
!MultiJson.respond_to?(:load) && !MultiJson.respond_to?(:dump)
|
43
|
-
class << MultiJson
|
44
|
-
alias :dump :encode
|
45
|
-
alias :load :decode
|
46
|
-
end
|
47
|
-
end
|
@@ -33,16 +33,20 @@ module Rack
|
|
33
33
|
#
|
34
34
|
# require 'rack/session/couchbase'
|
35
35
|
# use Rack::Session::Couchbase, :expire_after => 5.minutes,
|
36
|
-
# :couchbase => {:bucket => "sessions", :default_format => :
|
36
|
+
# :couchbase => {:bucket => "sessions", :default_format => :document}
|
37
37
|
#
|
38
|
-
# By default sessions will be serialized
|
39
|
-
#
|
38
|
+
# By default sessions will be serialized using Marshal class. But
|
39
|
+
# you can store them as JSON (+:default_format => :document+), to
|
40
|
+
# allow analyse them using Map/Reduce. In this case you should
|
41
|
+
# care about serialization of all custom objects like
|
42
|
+
# ActionDispatch::Flash::FlashHash
|
40
43
|
#
|
41
44
|
class Couchbase < Abstract::ID
|
42
45
|
attr_reader :mutex, :pool
|
43
46
|
|
44
47
|
DEFAULT_OPTIONS = Abstract::ID::DEFAULT_OPTIONS.merge(
|
45
|
-
:couchbase => {:
|
48
|
+
:couchbase => {:quiet => true, :default_format => :marshal,
|
49
|
+
:key_prefix => 'rack:session:'})
|
46
50
|
|
47
51
|
def initialize(app, options = {})
|
48
52
|
# Support old :expires option
|
@@ -57,7 +61,7 @@ module Rack
|
|
57
61
|
end
|
58
62
|
|
59
63
|
def generate_sid
|
60
|
-
|
64
|
+
while true
|
61
65
|
sid = super
|
62
66
|
break sid unless @pool.get(sid)
|
63
67
|
end
|
@@ -75,7 +79,7 @@ module Rack
|
|
75
79
|
|
76
80
|
def set_session(env, session_id, new_session, options)
|
77
81
|
with_lock(env, false) do
|
78
|
-
@pool.set
|
82
|
+
@pool.set(session_id, new_session, options)
|
79
83
|
session_id
|
80
84
|
end
|
81
85
|
end
|
@@ -90,7 +94,7 @@ module Rack
|
|
90
94
|
def with_lock(env, default = nil)
|
91
95
|
@mutex.lock if env['rack.multithread']
|
92
96
|
yield
|
93
|
-
rescue Couchbase::Error::Connect, Couchbase::Error::Timeout
|
97
|
+
rescue ::Couchbase::Error::Connect, ::Couchbase::Error::Timeout
|
94
98
|
if $VERBOSE
|
95
99
|
warn "#{self} is unable to find Couchbase server."
|
96
100
|
warn $!.inspect
|
data/tasks/compile.rake
CHANGED
@@ -84,7 +84,7 @@ namespace :ports do
|
|
84
84
|
directory "ports"
|
85
85
|
|
86
86
|
task :libcouchbase => ["ports"] do
|
87
|
-
recipe = MiniPortile.new "libcouchbase", "2.0.
|
87
|
+
recipe = MiniPortile.new "libcouchbase", "2.0.1"
|
88
88
|
recipe.files << "http://packages.couchbase.com/clients/c/libcouchbase-#{recipe.version}.tar.gz"
|
89
89
|
recipe.configure_options.push("--disable-debug",
|
90
90
|
"--disable-dependency-tracking",
|
data/tasks/test.rake
CHANGED
@@ -41,54 +41,60 @@ end
|
|
41
41
|
|
42
42
|
Rake::TestTask.new do |test|
|
43
43
|
test.libs << "test" << "."
|
44
|
-
test.ruby_opts << "-rruby-debug" if ENV['DEBUG']
|
45
44
|
test.pattern = 'test/test_*.rb'
|
46
45
|
test.options = '--verbose'
|
47
46
|
end
|
48
47
|
|
49
48
|
Rake::Task['test'].prerequisites.unshift('test/CouchbaseMock.jar')
|
50
49
|
|
51
|
-
|
50
|
+
common_flags = %w[
|
51
|
+
--tool=memcheck
|
52
|
+
--error-limit=no
|
53
|
+
--undef-value-errors=no
|
54
|
+
--leak-check=full
|
55
|
+
--show-reachable=yes
|
56
|
+
--num-callers=50
|
57
|
+
--track-fds=yes
|
58
|
+
--workaround-gcc296-bugs=yes
|
59
|
+
--leak-resolution=med
|
60
|
+
--max-stackframe=7304328
|
61
|
+
--partial-loads-ok=yes
|
62
|
+
]
|
63
|
+
|
64
|
+
desc "Run the test suite under Valgrind memcheck."
|
52
65
|
task "test:valgrind" do
|
53
|
-
ENV['RUBY_PREFIX'] =
|
54
|
-
"valgrind",
|
55
|
-
"--num-callers=50",
|
56
|
-
"--error-limit=no",
|
57
|
-
"--partial-loads-ok=yes",
|
58
|
-
"--undef-value-errors=no",
|
59
|
-
"--track-fds=yes",
|
60
|
-
"--leak-check=full",
|
61
|
-
"--leak-resolution=med",
|
62
|
-
].join(' ')
|
66
|
+
ENV['RUBY_PREFIX'] = "valgrind #{common_flags.join(' ')}"
|
63
67
|
Rake::Task['test'].invoke
|
64
68
|
end
|
65
69
|
|
66
|
-
desc "Run the test suite under Valgrind with memory-fill."
|
70
|
+
desc "Run the test suite under Valgrind memcheck with memory-fill."
|
67
71
|
task "test:valgrind:mem_fill" do
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
"--freelist-vol=100000000",
|
75
|
-
"--malloc-fill=6D",
|
76
|
-
"--free-fill=66",
|
77
|
-
].join(' ')
|
72
|
+
local_flags = %w[
|
73
|
+
--malloc-fill=6D
|
74
|
+
--freelist-vol=100000000
|
75
|
+
--free-fill=66
|
76
|
+
]
|
77
|
+
ENV['RUBY_PREFIX'] = "valgrind #{common_flags.join(' ')} #{local_flags.join(' ')}"
|
78
78
|
Rake::Task['test'].invoke
|
79
79
|
end
|
80
80
|
|
81
|
-
desc "Run the test suite under Valgrind with memory-zero."
|
81
|
+
desc "Run the test suite under Valgrind memcheck with memory-zero."
|
82
82
|
task "test:valgrind:mem_zero" do
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
83
|
+
local_flags = %w[
|
84
|
+
--freelist-vol=100000000
|
85
|
+
--malloc-fill=00
|
86
|
+
--free-fill=00
|
87
|
+
]
|
88
|
+
ENV['RUBY_PREFIX'] = "valgrind #{common_flags.join(' ')} #{local_flags.join(' ')}"
|
89
|
+
Rake::Task['test'].invoke
|
90
|
+
end
|
91
|
+
|
92
|
+
desc "Run the test suite under Valgrind massif."
|
93
|
+
task "test:valgrind:massif" do
|
94
|
+
local_flags = %w[
|
95
|
+
--tool=massif
|
96
|
+
--time-unit=B
|
97
|
+
]
|
98
|
+
ENV['RUBY_PREFIX'] = "valgrind #{local_flags.join(' ')}"
|
93
99
|
Rake::Task['test'].invoke
|
94
100
|
end
|
data/tasks/util.rake
CHANGED
data/test/setup.rb
CHANGED
@@ -55,7 +55,7 @@ class CouchbaseServer
|
|
55
55
|
rescue Couchbase::Error::NotSupported
|
56
56
|
# on recent server flush is disabled
|
57
57
|
end
|
58
|
-
end
|
58
|
+
end if ENV['COUCHBASE_FLUSH_BUCKETS']
|
59
59
|
end
|
60
60
|
def stop; end
|
61
61
|
end
|
@@ -166,6 +166,13 @@ class MiniTest::Unit::TestCase
|
|
166
166
|
end
|
167
167
|
|
168
168
|
def uniq_id(*suffixes)
|
169
|
-
[caller.first[/.*[` ](.*)'/, 1], suffixes].join("_")
|
169
|
+
test_id = [caller.first[/.*[` ](.*)'/, 1], suffixes].compact.join("_")
|
170
|
+
@ids ||= {}
|
171
|
+
@ids[test_id] ||= Time.now.to_f
|
172
|
+
[test_id, @ids[test_id]].join("_")
|
173
|
+
end
|
174
|
+
|
175
|
+
def after_teardown
|
176
|
+
GC.start
|
170
177
|
end
|
171
178
|
end
|
data/test/test_arithmetic.rb
CHANGED
@@ -54,6 +54,43 @@ class TestArithmetic < MiniTest::Unit::TestCase
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
def test_it_allows_to_make_increments_less_verbose_by_forcing_create_by_default
|
58
|
+
connection = Couchbase.connect(:hostname => @mock.host, :port => @mock.port,
|
59
|
+
:default_arithmetic_init => true)
|
60
|
+
assert_raises(Couchbase::Error::NotFound) do
|
61
|
+
connection.get(uniq_id)
|
62
|
+
end
|
63
|
+
assert_equal 0, connection.incr(uniq_id), "return value"
|
64
|
+
assert_equal 0, connection.get(uniq_id), "via get command"
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_it_allows_to_setup_initial_value_during_connection
|
68
|
+
connection = Couchbase.connect(:hostname => @mock.host, :port => @mock.port,
|
69
|
+
:default_arithmetic_init => 10)
|
70
|
+
assert_raises(Couchbase::Error::NotFound) do
|
71
|
+
connection.get(uniq_id)
|
72
|
+
end
|
73
|
+
assert_equal 10, connection.incr(uniq_id), "return value"
|
74
|
+
assert_equal 10, connection.get(uniq_id), "via get command"
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_it_allows_to_change_default_initial_value_after_connection
|
78
|
+
connection = Couchbase.connect(:hostname => @mock.host, :port => @mock.port)
|
79
|
+
|
80
|
+
assert_equal 0, connection.default_arithmetic_init
|
81
|
+
assert_raises(Couchbase::Error::NotFound) do
|
82
|
+
connection.incr(uniq_id)
|
83
|
+
end
|
84
|
+
|
85
|
+
connection.default_arithmetic_init = 10
|
86
|
+
assert_equal 10, connection.default_arithmetic_init
|
87
|
+
assert_raises(Couchbase::Error::NotFound) do
|
88
|
+
connection.get(uniq_id)
|
89
|
+
end
|
90
|
+
assert_equal 10, connection.incr(uniq_id), "return value"
|
91
|
+
assert_equal 10, connection.get(uniq_id), "via get command"
|
92
|
+
end
|
93
|
+
|
57
94
|
def test_it_creates_missing_key_when_initial_value_specified
|
58
95
|
connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port)
|
59
96
|
|
data/test/test_async.rb
CHANGED
@@ -124,7 +124,7 @@ class TestAsync < MiniTest::Unit::TestCase
|
|
124
124
|
connection.run do |conn|
|
125
125
|
conn.delete(uniq_id, :cas => cas) do |res1|
|
126
126
|
success = res1.success?
|
127
|
-
conn.get(uniq_id) do |res2|
|
127
|
+
conn.get(uniq_id, :quiet => true) do |res2|
|
128
128
|
val = res2.value
|
129
129
|
end
|
130
130
|
end
|
@@ -154,27 +154,31 @@ class TestAsync < MiniTest::Unit::TestCase
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def test_nested_async_flush_set
|
157
|
-
|
158
|
-
|
159
|
-
|
157
|
+
if @mock.real?
|
158
|
+
connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port)
|
159
|
+
cas = connection.set(uniq_id, "foo")
|
160
|
+
res = {}
|
160
161
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
162
|
+
connection.run do |conn|
|
163
|
+
conn.flush do |res1|
|
164
|
+
assert res1.success?, "Expected: successful status code.\nActual: #{res1.error.inspect}"
|
165
|
+
id = uniq_id(res1.node)
|
166
|
+
res[id] = false
|
167
|
+
conn.set(id, true) do |res2|
|
168
|
+
res[id] = res2.cas
|
169
|
+
end
|
168
170
|
end
|
169
171
|
end
|
170
|
-
end
|
171
172
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
173
|
+
assert_raises(Couchbase::Error::NotFound) do
|
174
|
+
connection.get(uniq_id)
|
175
|
+
end
|
176
|
+
res.keys.each do |key|
|
177
|
+
assert res[key].is_a?(Numeric)
|
178
|
+
assert connection.get(key)
|
179
|
+
end
|
180
|
+
else
|
181
|
+
skip("REST FLUSH isn't implemented in CouchbaseMock.jar yet")
|
178
182
|
end
|
179
183
|
end
|
180
184
|
|
data/test/test_unlock.rb
CHANGED
data/test/test_utils.rb
CHANGED
@@ -19,8 +19,40 @@ require File.join(File.dirname(__FILE__), 'setup')
|
|
19
19
|
|
20
20
|
class TestUtils < MiniTest::Unit::TestCase
|
21
21
|
|
22
|
+
def setup
|
23
|
+
@mock = start_mock
|
24
|
+
end
|
25
|
+
|
26
|
+
def teardown
|
27
|
+
stop_mock(@mock)
|
28
|
+
end
|
29
|
+
|
22
30
|
def test_complex_startkey
|
23
31
|
assert_equal "all_docs?startkey=%5B%22Deadmau5%22%2C%22%22%5D", Couchbase::Utils.build_query("all_docs", :startkey => ["Deadmau5", ""])
|
24
32
|
end
|
25
33
|
|
34
|
+
def test_it_provides_enough_info_with_value_error
|
35
|
+
class << MultiJson
|
36
|
+
alias dump_good dump
|
37
|
+
def dump(obj)
|
38
|
+
raise ArgumentError, "cannot accept your object"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port)
|
42
|
+
assert_raises(Couchbase::Error::ValueFormat) do
|
43
|
+
connection.set(uniq_id, "foo")
|
44
|
+
end
|
45
|
+
begin
|
46
|
+
connection.set(uniq_id, "foo")
|
47
|
+
rescue Couchbase::Error::ValueFormat => ex
|
48
|
+
assert_match /cannot accept your object/, ex.to_s
|
49
|
+
assert_instance_of ArgumentError, ex.inner_exception
|
50
|
+
end
|
51
|
+
ensure
|
52
|
+
class << MultiJson
|
53
|
+
undef dump
|
54
|
+
alias dump dump_good
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
26
58
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couchbase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.2.0
|
5
|
+
prerelease:
|
6
6
|
platform: x86-mingw32
|
7
7
|
authors:
|
8
8
|
- Couchbase
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yaji
|
@@ -171,22 +171,6 @@ dependencies:
|
|
171
171
|
- - ~>
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: 1.1.0
|
174
|
-
- !ruby/object:Gem::Dependency
|
175
|
-
name: debugger
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
|
-
requirements:
|
179
|
-
- - ! '>='
|
180
|
-
- !ruby/object:Gem::Version
|
181
|
-
version: '0'
|
182
|
-
type: :development
|
183
|
-
prerelease: false
|
184
|
-
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ! '>='
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: '0'
|
190
174
|
- !ruby/object:Gem::Dependency
|
191
175
|
name: active_support
|
192
176
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,9 +197,10 @@ files:
|
|
213
197
|
- .travis.yml
|
214
198
|
- .yardopts
|
215
199
|
- Gemfile
|
216
|
-
- HISTORY.markdown
|
217
200
|
- LICENSE
|
201
|
+
- Makefile
|
218
202
|
- README.markdown
|
203
|
+
- RELEASE_NOTES.markdown
|
219
204
|
- Rakefile
|
220
205
|
- couchbase.gemspec
|
221
206
|
- ext/couchbase_ext/.gitignore
|
@@ -229,6 +214,7 @@ files:
|
|
229
214
|
- ext/couchbase_ext/get.c
|
230
215
|
- ext/couchbase_ext/gethrtime.c
|
231
216
|
- ext/couchbase_ext/http.c
|
217
|
+
- ext/couchbase_ext/multithread_plugin.c
|
232
218
|
- ext/couchbase_ext/observe.c
|
233
219
|
- ext/couchbase_ext/result.c
|
234
220
|
- ext/couchbase_ext/stats.c
|
@@ -242,6 +228,7 @@ files:
|
|
242
228
|
- lib/active_support/cache/couchbase_store.rb
|
243
229
|
- lib/couchbase.rb
|
244
230
|
- lib/couchbase/bucket.rb
|
231
|
+
- lib/couchbase/cluster.rb
|
245
232
|
- lib/couchbase/result.rb
|
246
233
|
- lib/couchbase/utils.rb
|
247
234
|
- lib/couchbase/version.rb
|
@@ -293,13 +280,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
293
280
|
version: '0'
|
294
281
|
segments:
|
295
282
|
- 0
|
296
|
-
hash:
|
283
|
+
hash: 4067085231871640584
|
297
284
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
298
285
|
none: false
|
299
286
|
requirements:
|
300
|
-
- - ! '
|
287
|
+
- - ! '>='
|
301
288
|
- !ruby/object:Gem::Version
|
302
|
-
version:
|
289
|
+
version: '0'
|
290
|
+
segments:
|
291
|
+
- 0
|
292
|
+
hash: 4067085231871640584
|
303
293
|
requirements: []
|
304
294
|
rubyforge_project:
|
305
295
|
rubygems_version: 1.8.23
|