couchbase 2.0.0.pre.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +15 -0
- data/.travis.yml +22 -0
- data/.yardopts +5 -0
- data/CONTRIBUTING.markdown +75 -0
- data/Gemfile +4 -0
- data/LICENSE +201 -0
- data/Makefile +3 -0
- data/README.markdown +83 -0
- data/RELEASE_NOTES.markdown +872 -0
- data/Rakefile +20 -0
- data/couchbase.gemspec +42 -0
- data/lib/couchbase.rb +32 -0
- data/lib/couchbase/version.rb +21 -0
- data/lib/jruby-client-1.0.0-dp1-all.jar +0 -0
- data/tasks/compile.rake +25 -0
- data/tasks/util.rake +21 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZGM3OWI3NzQ3ODBjNWJiYzdhMmVlMjFhYzk5ZGE2ZjQ2ZTRlYjZkZg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MzQ5ZTFhMmNmZjAwMzQzOWM4NDcyMjcxZGYyNzZhMGIyYzNkOWNlMg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGRiNmI0NGVhODBhMTU3ODE4NzJmMzFhZTUyYmNmOTU3N2NmYWJmNjI3NjQ5
|
10
|
+
Yzg3YzY5ZTk1MGU0YTM1YTg4Y2Y4NDJhM2YyYzdhNGUzZTVhYTlhYjI2OThk
|
11
|
+
OWJiN2M0MGIwMzc3Y2M4MzY0ZmM3ZTQyYjNkYjZjMTlhYWFhZjE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZjUxNmJiMjhhMjdhYjM2NWUwNGNiZDIwNjcwMmE0NzZhODA4OGJjNzk0MGRl
|
14
|
+
YTBlYmY3ZDZjNGUwZTllNWY4YzE1MTVjNDI3ZjFlODRlMGIxNDZjN2ZjY2Nl
|
15
|
+
NjYwODRkNDE3MWM2NmM3Njc0MzZmMjMxOGUxOGYzOTU3NWVjYWU=
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
before_install:
|
2
|
+
- sudo rm -rf /etc/apt/sources.list.d/couchdb-ppa-source.list
|
3
|
+
- sudo rm -rf /etc/apt/sources.list.d/mongodb.list
|
4
|
+
- sudo rm -rf /etc/apt/sources.list.d/datastax-source.list
|
5
|
+
- sudo rm -rf /etc/apt/sources.list.d/rabbitmq-source.list
|
6
|
+
- sudo rm -rf /etc/apt/sources.list.d/mapopa-source.list
|
7
|
+
- sudo rm -rf /etc/apt/sources.list.d/webupd8team-java-ppa-source.list
|
8
|
+
- sudo rm -rf /etc/apt/sources.list.d/maven3-ppa-source.list
|
9
|
+
- wget -O- http://packages.couchbase.com/ubuntu/couchbase.key | sudo apt-key add -
|
10
|
+
- echo deb http://packages.couchbase.com/snapshot/ubuntu oneiric oneiric/main | sudo tee /etc/apt/sources.list.d/couchbase.list
|
11
|
+
- sudo apt-get update
|
12
|
+
- sudo apt-get -y install libcouchbase2-dev
|
13
|
+
|
14
|
+
rvm:
|
15
|
+
- 1.8.7
|
16
|
+
- 1.9.2
|
17
|
+
- 1.9.3
|
18
|
+
- ree
|
19
|
+
|
20
|
+
notifications:
|
21
|
+
email:
|
22
|
+
- sergey@couchbase.com
|
data/.yardopts
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
We've decided to use "gerrit" for our code review system, making it
|
2
|
+
easier for all of us to contribute with code and comments.
|
3
|
+
|
4
|
+
1. Visit http://review.couchbase.org and "Register" for an account
|
5
|
+
2. Review http://review.couchbase.org/static/individual_agreement.html
|
6
|
+
3. Agree to agreement by visiting http://review.couchbase.org/#/settings/agreements
|
7
|
+
4. If you do not receive an email, please contact us
|
8
|
+
5. Check out the `couchbase-ruby-client` area http://review.couchbase.org/#/q/status:open+project:couchbase-ruby-client,n,z
|
9
|
+
6. Join us on IRC at #libcouchbase on Freenode :-)
|
10
|
+
|
11
|
+
We normally don't go looking for stuff in gerrit, so you should add at
|
12
|
+
least me `"Sergey Avseyev" <sergey.avseyev@gmail.com>` as a reviewer
|
13
|
+
for your patch (and I'll know who else to add and add them for you).
|
14
|
+
|
15
|
+
## Contributing Using Repo Tool
|
16
|
+
|
17
|
+
Follow ["Uploading Changes" guide][1] on the site if you have some code to contribute.
|
18
|
+
|
19
|
+
All you should need to set up your development environment should be:
|
20
|
+
|
21
|
+
~ % mkdir couchbase-ruby
|
22
|
+
~ % cd couchbase-ruby
|
23
|
+
~/couchbase-ruby % repo init -u git://github.com/trondn/manifests.git -m ruby.xml
|
24
|
+
~/couchbase-ruby % repo sync
|
25
|
+
~/couchbase-ruby % repo start my-branch-name --all
|
26
|
+
~/couchbase-ruby % make
|
27
|
+
|
28
|
+
This will build the latest version of `libcouchbase`,
|
29
|
+
`couchbase-ruby-client` and `couchbase-ruby-client` libraries. You must
|
30
|
+
have a C and C++ compiler installed, automake, autoconf.
|
31
|
+
|
32
|
+
If you have to make any changes just commit them before you upload
|
33
|
+
them to gerrit with the following command:
|
34
|
+
|
35
|
+
~/couchbase-ruby/client % repo upload
|
36
|
+
|
37
|
+
You might experience a problem trying to upload the patches if you've
|
38
|
+
selected a different login name at http://review.couchbase.org than
|
39
|
+
your login name. Don't worry, all you need to do is to add the
|
40
|
+
following to your ~/.gitconfig file:
|
41
|
+
|
42
|
+
[review "review.couchbase.org"]
|
43
|
+
username = YOURNAME
|
44
|
+
|
45
|
+
## Contributing Using Plain Git
|
46
|
+
|
47
|
+
If you not so familiar with repo tool and its workflow there is
|
48
|
+
alternative way to do the same job. Lets assume you have installed
|
49
|
+
couchbase gem and libcouchbase from official packages and would you to
|
50
|
+
contribute to couchbase-client gem only. Then you just need to complete
|
51
|
+
gerrit registration steps above and clone the source repository
|
52
|
+
(remember the repository on github.com is just a mirror):
|
53
|
+
|
54
|
+
~ % git clone ssh://YOURNAME@review.couchbase.org:29418/couchbase-ruby-client.git
|
55
|
+
|
56
|
+
Install [`commit-msg` hook][2]:
|
57
|
+
|
58
|
+
~/couchbase-ruby-client % scp -p -P 29418 YOURNAME@review.couchbase.org:hooks/commit-msg .git/hooks/
|
59
|
+
|
60
|
+
Make your changes and upload them for review:
|
61
|
+
|
62
|
+
~/couchbase-ruby-client % git commit
|
63
|
+
~/couchbase-ruby-client % git push origin HEAD:refs/for/master
|
64
|
+
|
65
|
+
If you need to fix or add something to your patch, do it and re-upload
|
66
|
+
the changes (all you need is to keep `Change-Id:` line the same to
|
67
|
+
allow gerrit to track the patch.
|
68
|
+
|
69
|
+
~/couchbase-ruby-client % git commit --amend
|
70
|
+
~/couchbase-ruby-client % git push origin HEAD:refs/for/master
|
71
|
+
|
72
|
+
Happy hacking!
|
73
|
+
|
74
|
+
[1]: http://review.couchbase.org/Documentation/user-upload.html
|
75
|
+
[2]: http://review.couchbase.org/Documentation/user-changeid.html
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,201 @@
|
|
1
|
+
Apache License
|
2
|
+
Version 2.0, January 2004
|
3
|
+
http://www.apache.org/licenses/
|
4
|
+
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
6
|
+
|
7
|
+
1. Definitions.
|
8
|
+
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
11
|
+
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
13
|
+
the copyright owner that is granting the License.
|
14
|
+
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
16
|
+
other entities that control, are controlled by, or are under common
|
17
|
+
control with that entity. For the purposes of this definition,
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
19
|
+
direction or management of such entity, whether by contract or
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
22
|
+
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
24
|
+
exercising permissions granted by this License.
|
25
|
+
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
27
|
+
including but not limited to software source code, documentation
|
28
|
+
source, and configuration files.
|
29
|
+
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
31
|
+
transformation or translation of a Source form, including but
|
32
|
+
not limited to compiled object code, generated documentation,
|
33
|
+
and conversions to other media types.
|
34
|
+
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
36
|
+
Object form, made available under the License, as indicated by a
|
37
|
+
copyright notice that is included in or attached to the work
|
38
|
+
(an example is provided in the Appendix below).
|
39
|
+
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
46
|
+
the Work and Derivative Works thereof.
|
47
|
+
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
49
|
+
the original version of the Work and any modifications or additions
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
61
|
+
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
64
|
+
subsequently incorporated within the Work.
|
65
|
+
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
72
|
+
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
78
|
+
where such license applies only to those patent claims licensable
|
79
|
+
by such Contributor that are necessarily infringed by their
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
82
|
+
institute patent litigation against any entity (including a
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
85
|
+
or contributory patent infringement, then any patent licenses
|
86
|
+
granted to You under this License for that Work shall terminate
|
87
|
+
as of the date such litigation is filed.
|
88
|
+
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
91
|
+
modifications, and in Source or Object form, provided that You
|
92
|
+
meet the following conditions:
|
93
|
+
|
94
|
+
(a) You must give any other recipients of the Work or
|
95
|
+
Derivative Works a copy of this License; and
|
96
|
+
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
98
|
+
stating that You changed the files; and
|
99
|
+
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
102
|
+
attribution notices from the Source form of the Work,
|
103
|
+
excluding those notices that do not pertain to any part of
|
104
|
+
the Derivative Works; and
|
105
|
+
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
108
|
+
include a readable copy of the attribution notices contained
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
111
|
+
of the following places: within a NOTICE text file distributed
|
112
|
+
as part of the Derivative Works; within the Source form or
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
114
|
+
within a display generated by the Derivative Works, if and
|
115
|
+
wherever such third-party notices normally appear. The contents
|
116
|
+
of the NOTICE file are for informational purposes only and
|
117
|
+
do not modify the License. You may add Your own attribution
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
120
|
+
that such additional attribution notices cannot be construed
|
121
|
+
as modifying the License.
|
122
|
+
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
124
|
+
may provide additional or different license terms and conditions
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
128
|
+
the conditions stated in this License.
|
129
|
+
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
133
|
+
this License, without any additional terms or conditions.
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
135
|
+
the terms of any separate license agreement you may have executed
|
136
|
+
with Licensor regarding such Contributions.
|
137
|
+
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
140
|
+
except as required for reasonable and customary use in describing the
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
142
|
+
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
152
|
+
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
158
|
+
incidental, or consequential damages of any character arising as a
|
159
|
+
result of this License or out of the use or inability to use the
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
162
|
+
other commercial damages or losses), even if such Contributor
|
163
|
+
has been advised of the possibility of such damages.
|
164
|
+
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
168
|
+
or other liability obligations and/or rights consistent with this
|
169
|
+
License. However, in accepting such obligations, You may act only
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
174
|
+
of your accepting any such warranty or additional liability.
|
175
|
+
|
176
|
+
END OF TERMS AND CONDITIONS
|
177
|
+
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
179
|
+
|
180
|
+
To apply the Apache License to your work, attach the following
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
182
|
+
replaced with your own identifying information. (Don't include
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
184
|
+
comment syntax for the file format. We also recommend that a
|
185
|
+
file or class name and description of purpose be included on the
|
186
|
+
same "printed page" as the copyright notice for easier
|
187
|
+
identification within third-party archives.
|
188
|
+
|
189
|
+
Copyright [yyyy] [name of copyright owner]
|
190
|
+
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
192
|
+
you may not use this file except in compliance with the License.
|
193
|
+
You may obtain a copy of the License at
|
194
|
+
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
196
|
+
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
200
|
+
See the License for the specific language governing permissions and
|
201
|
+
limitations under the License.
|
data/Makefile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# Couchbase Ruby Client
|
2
|
+
|
3
|
+
This is the official client library for use with Couchbase Server.
|
4
|
+
|
5
|
+
## SUPPORT
|
6
|
+
|
7
|
+
If you find an issue, please file it in our [JIRA][1]. Also you are
|
8
|
+
always welcome on the `#libcouchbase` channel at [freenode.net IRC
|
9
|
+
servers][2]. Checkout [library overview][overview] and [API
|
10
|
+
documentation][api].
|
11
|
+
|
12
|
+
|
13
|
+
## INSTALL
|
14
|
+
|
15
|
+
At the moment it only support [jruby](http://jruby.org/), so
|
16
|
+
installation is as simple as:
|
17
|
+
|
18
|
+
$ gem install couchbase
|
19
|
+
|
20
|
+
## USAGE
|
21
|
+
|
22
|
+
Since it is 2.0 release, it introduces API changes comparing to 1.x
|
23
|
+
versions.
|
24
|
+
|
25
|
+
require 'couchbase'
|
26
|
+
|
27
|
+
Cluster object accepts list of nodes to connect to:
|
28
|
+
|
29
|
+
c = Couchbase::Cluster.new(['localhost'])
|
30
|
+
|
31
|
+
|
32
|
+
To open bucket, specify name and password (optional):
|
33
|
+
|
34
|
+
b = c.open_bucket('default', '')
|
35
|
+
|
36
|
+
SDK 2.0 operates with documents, so the API expose
|
37
|
+
`Couchbase::Document` to wrap your data:
|
38
|
+
|
39
|
+
doc = Couchbase::Document.new(:id => 'mydoc', :content => {'foo' => 'bar'})
|
40
|
+
|
41
|
+
Now you can put it into the bucket:
|
42
|
+
|
43
|
+
b.upsert(doc)
|
44
|
+
# => #<Couchbase::Document:0x6ada79a9
|
45
|
+
# @cas=247387287270276,
|
46
|
+
# @content={"foo"=>"bar"},
|
47
|
+
# @expiry=0,
|
48
|
+
# @id="mydoc",
|
49
|
+
# @transcode=true>
|
50
|
+
|
51
|
+
And retrieve it later:
|
52
|
+
|
53
|
+
b.get('mydoc')
|
54
|
+
# => #<Couchbase::Document:0x789052f6
|
55
|
+
# @cas=247387287270276,
|
56
|
+
# @content={"foo"=>"bar"},
|
57
|
+
# @expiry=0,
|
58
|
+
# @id="mydoc",
|
59
|
+
# @transcode=true>
|
60
|
+
|
61
|
+
More complex example with `beer-sample` bucket, which comes with the
|
62
|
+
server distribution.
|
63
|
+
|
64
|
+
require 'couchbase'
|
65
|
+
c = Couchbase::Cluster.new(['localhost'])
|
66
|
+
b = c.open_bucket('beer-sample')
|
67
|
+
res = b.query('beer', 'by_location', :group_level => 1)
|
68
|
+
|
69
|
+
puts 'First 4 countries: '
|
70
|
+
res.rows.take(4).each do |row|
|
71
|
+
puts "#{row['key'].first}: #{row['value']}"
|
72
|
+
end
|
73
|
+
|
74
|
+
res.rows.each do |row|
|
75
|
+
b.counter('beer_lovers', +1, initial: 1) if row['value'] > 10
|
76
|
+
end
|
77
|
+
puts "There are #{b.get('beer_lovers').content} countries with more than 10 breweries"
|
78
|
+
# >> First 4 countries:
|
79
|
+
# >> Argentina: 2
|
80
|
+
# >> Aruba: 1
|
81
|
+
# >> Australia: 14
|
82
|
+
# >> Austria: 10
|
83
|
+
# >> There are 18 countries with more than 10 breweries
|
@@ -0,0 +1,872 @@
|
|
1
|
+
# Release Notes
|
2
|
+
|
3
|
+
This document is a list of user visible feature changes and important
|
4
|
+
bugfixes. Do not forget to update this doc in every important patch.
|
5
|
+
|
6
|
+
## 1.3.7 (2014-04-18)
|
7
|
+
|
8
|
+
* [major] Allow the selection of bootstrap providers. Since libcouchbase
|
9
|
+
2.3.0 there is a new bootstrapping transport available: Cluster
|
10
|
+
Configuration Carrier Publication (CCCP). It is more efficient way
|
11
|
+
to keep cluster configuration up to date using Carrier Publication
|
12
|
+
instead of HTTP connection.
|
13
|
+
|
14
|
+
nodes = ["example.com", "example.org"]
|
15
|
+
Couchbase.connect(node_list: nodes, bootstrap_transports: [:cccp, :http])
|
16
|
+
|
17
|
+
Read more about it here:
|
18
|
+
http://www.couchbase.com/wiki/display/couchbase/Cluster+Configuration+Carrier+Publication
|
19
|
+
|
20
|
+
* [major] RCBC-168 An experimental DNS SRV helper for connection
|
21
|
+
constructor. The DNS SRV records need to be configured on a reachable
|
22
|
+
DNS server. An example configuration could look like the following
|
23
|
+
(note that the service ids might change):
|
24
|
+
|
25
|
+
_cbmcd._tcp.example.com. 0 IN SRV 20 0 11210 node2.example.com.
|
26
|
+
_cbmcd._tcp.example.com. 0 IN SRV 10 0 11210 node1.example.com.
|
27
|
+
_cbmcd._tcp.example.com. 0 IN SRV 30 0 11210 node3.example.com.
|
28
|
+
|
29
|
+
_cbhttp._tcp.example.com. 0 IN SRV 20 0 8091 node2.example.com.
|
30
|
+
_cbhttp._tcp.example.com. 0 IN SRV 10 0 8091 node1.example.com.
|
31
|
+
_cbhttp._tcp.example.com. 0 IN SRV 30 0 8091 node3.example.com.
|
32
|
+
|
33
|
+
Now if "example.com" is passed in as the argument, the three nodes
|
34
|
+
configured will be parsed and put in the returned URI list. Note
|
35
|
+
that the priority is respected (in this example, node1 will be the
|
36
|
+
first one in the list, followed by node2 and node3). As of now,
|
37
|
+
weighting is not supported. This is how it could be used to
|
38
|
+
bootstrap the connection:
|
39
|
+
|
40
|
+
transport = :http
|
41
|
+
nodes = Couchbase::DNS.locate('example.com', transport)
|
42
|
+
if nodes.empty?
|
43
|
+
nodes = ["example.com:8091"]
|
44
|
+
end
|
45
|
+
Couchbase.connect(node_list: nodes, bootstrap_transports: [transport])
|
46
|
+
|
47
|
+
NOTE: This is experiemental and subject to change at any time. Watch
|
48
|
+
the release notes for changes in future releases.
|
49
|
+
|
50
|
+
* [major] RCBC-166 Fix a crash with eventmachine. In eventmachine event
|
51
|
+
handlers are separated and run seprately and in the following order:
|
52
|
+
[READ, WRITE]. So it was possible to cancel WRITE event handler from
|
53
|
+
the READ handler which cause crash when the reactor run it in next
|
54
|
+
turn.
|
55
|
+
|
56
|
+
* [minor] Fixed a typo which doesn't allow to use bundler in the project
|
57
|
+
directory.
|
58
|
+
|
59
|
+
## 1.3.6 (2014-02-17)
|
60
|
+
|
61
|
+
* [major] Fix linkage issue which blocks library installation on
|
62
|
+
windows.
|
63
|
+
|
64
|
+
## 1.3.5 (2014-02-05)
|
65
|
+
|
66
|
+
* [major] RCBC-159, RCBC-152 Honor the :environment constructor argument
|
67
|
+
|
68
|
+
* [major] Allow inheritance from `Couchbase::Bucket`. It wasn't
|
69
|
+
possible to create a view with subclass of the `Couchbase::Bucket`.
|
70
|
+
|
71
|
+
* [major] Ensure that an exception raised early will not prevent the
|
72
|
+
finalizer from being called in the underlying client being constructed.
|
73
|
+
One example situation where this could occur:
|
74
|
+
|
75
|
+
class Couchbase::Bucket
|
76
|
+
def initialize(*args)
|
77
|
+
raise "something wrong"
|
78
|
+
super
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
## 1.3.4 (2014-01-08)
|
83
|
+
|
84
|
+
* [major] Build 64-bit versions of the extensions for Windows
|
85
|
+
platform. Also support ruby 2.0 and 2.1.
|
86
|
+
|
87
|
+
* [minor] Update hacking section in README
|
88
|
+
|
89
|
+
* [minor] Fix gemspec warnings regarding versions of the dependencies.
|
90
|
+
Now it honours semantic versioning and doesn't use strict versions.
|
91
|
+
|
92
|
+
* [major] RCBC-151 Return CAS in extended mode for incr/decr
|
93
|
+
|
94
|
+
* [minor] RCBC-150 Update list of options on `Cluster.create_bucket`.
|
95
|
+
Added new options: `:replica_index`, `:flush_enabled`,
|
96
|
+
`:parallel_db_and_view_compaction`.
|
97
|
+
|
98
|
+
* [major] Allow retries on Couchbase::Bucket#cas collisions. Now it
|
99
|
+
takes a `:retry` Fixnum option that specifies the maximum number of
|
100
|
+
times the method should retry the entire get/update/set operation
|
101
|
+
when a `Couchbase::Error::KeyExists` error is encountered due to a
|
102
|
+
concurrent update from another writer between its `#get` and `#set`
|
103
|
+
calls.
|
104
|
+
|
105
|
+
* [major] MD5 and truncate ActiveSupport::Cache keys that are longer
|
106
|
+
than 250 characters.
|
107
|
+
|
108
|
+
## 1.3.3 (2013-09-12)
|
109
|
+
|
110
|
+
* [major] RCBC-134 Allow application to use several connections with
|
111
|
+
thread-local singleton.
|
112
|
+
|
113
|
+
* [major] RCBC-135 Fixed invalid memory access which was detected by
|
114
|
+
using 'GC.stress = true' in tests.
|
115
|
+
|
116
|
+
* [major] RCBC-141 Initialize event indexes correctly. The plugin
|
117
|
+
didn't trace event callbacks, which might lead to invalid memory
|
118
|
+
access during rebalance, where libcouchbase creates/removes a lot of
|
119
|
+
events because of a fast-changing topology.
|
120
|
+
|
121
|
+
* [major] RCBC-137 Add selection options for new IO engines: select
|
122
|
+
and iocp.
|
123
|
+
|
124
|
+
* [major] When setting the username field, check for password
|
125
|
+
presence. Fixes segmentation fault in this code:
|
126
|
+
|
127
|
+
Couchbase.connect(:username => "default", :bucket => "default")
|
128
|
+
|
129
|
+
* [minor] Allow to determine the version of libcouchbase:
|
130
|
+
|
131
|
+
Couchbase.libcouchbase_version
|
132
|
+
|
133
|
+
* [major] RCBC-136 Build shared object for ruby 2.0 on windows. Also
|
134
|
+
fixes build script when using latest rake and rake-compiler.
|
135
|
+
|
136
|
+
* [minor] Fix deprecation warning on ruby 2.x. On newer versions it
|
137
|
+
should use `rb_thread_call_without_gvl()`.
|
138
|
+
|
139
|
+
ext/couchbase_ext/multithread_plugin.c: In function ‘loop_run_poll’:
|
140
|
+
ext/couchbase_ext/multithread_plugin.c:772:5: warning: ‘rb_thread_blocking_region’ is deprecated (declared at .../2.0.0-p247-dbg/include/ruby-2.0.0/ruby/intern.h:839) [-Wdeprecated-declarations]
|
141
|
+
rb_thread_blocking_region(loop_blocking_poll, args, RUBY_UBF_PROCESS, NULL);
|
142
|
+
|
143
|
+
* [major] Do not try to compile with plugins for Windows platform.
|
144
|
+
|
145
|
+
* [major] Force handle to be NULL on `lcb_create()` failure.
|
146
|
+
`lcb_create()` can leave garbage in the pointer even if the call
|
147
|
+
itself failed. This behaviour could lead to illegal memory access
|
148
|
+
on GC.
|
149
|
+
|
150
|
+
* [minor] Remove usage of `RARRAY_PTR` in favor of `rb_ary_entry`.
|
151
|
+
This improves performance significantly on Rubinius and also
|
152
|
+
improves compatibility with future CRuby 2.1 which introduces
|
153
|
+
generational garbage collection. This results in these arrays not
|
154
|
+
having to be rescanned in Rubinius and not marked as shady in
|
155
|
+
RBGCENC in CRuby 2.1.
|
156
|
+
For more discussion, also see: https://bugs.ruby-lang.org/issues/8399
|
157
|
+
|
158
|
+
## 1.3.2 (2013-07-10)
|
159
|
+
|
160
|
+
* [major] RCBC-133 Allow application to select the strategy of reading
|
161
|
+
from replica nodes. **This version requires libcouchbase >= 2.0.7.**
|
162
|
+
Now three strategies are available:
|
163
|
+
|
164
|
+
* `:first` - synonym to `true`, previous behaviour now the
|
165
|
+
default. It means that the library will sequentially iterate
|
166
|
+
over all replicas in the configuration supplied by the cluster
|
167
|
+
and will return as soon as it finds a successful response, or
|
168
|
+
report an error.
|
169
|
+
|
170
|
+
c.get("foo", :replica => true)
|
171
|
+
c.get("foo", :replica => :first)
|
172
|
+
#=> "bar"
|
173
|
+
c.get("foo", :replica => :first, :extended => true)
|
174
|
+
#=> ["bar", 0, 11218368683493556224]
|
175
|
+
|
176
|
+
* `:all` - query all replicas in parallel. In this case the method
|
177
|
+
will return the array of the values on the all replica nodes without
|
178
|
+
a particular order. Also if the key isn't on the node, it will be
|
179
|
+
skipped in the result array.
|
180
|
+
|
181
|
+
c.get("foo", :replica => :all)
|
182
|
+
#=> ["bar", "bar", "bar"]
|
183
|
+
c.get("foo", :replica => :all, :extended => true)
|
184
|
+
#=> [["bar", 0, 11218368683493556224],
|
185
|
+
# ["bar", 0, 11218368683493556224],
|
186
|
+
# ["bar", 0, 11218368683493556224]]
|
187
|
+
|
188
|
+
* `Fixnum` - you can also select specific replica node by its
|
189
|
+
index in the cluster configuration. It should be in interval
|
190
|
+
`0...c.num_replicas`
|
191
|
+
|
192
|
+
0...c.num_replicas
|
193
|
+
#=> 0...3
|
194
|
+
c.get("foo", :replica => 1)
|
195
|
+
#=> "bar"
|
196
|
+
c.get("foo", :replica => 42)
|
197
|
+
#=> ArgumentError: replica index should be in interval 0...3
|
198
|
+
|
199
|
+
Note that applications should not assume the order of the
|
200
|
+
replicas indicates more recent data is at a lower index number.
|
201
|
+
It is up to the application to determine which version of a
|
202
|
+
document/item it may wish to use in the case of retrieving data
|
203
|
+
from a replica.
|
204
|
+
|
205
|
+
|
206
|
+
## 1.3.1 (2013-06-05)
|
207
|
+
|
208
|
+
* [major] RCBC-131 Couchbase::Cluster instance shouldn't require
|
209
|
+
persistent connection.
|
210
|
+
|
211
|
+
* Fix compatibility with multi_json 1.7.5. They removed VERSION
|
212
|
+
constant
|
213
|
+
|
214
|
+
## 1.3.0 (2013-05-07)
|
215
|
+
|
216
|
+
* [major] RCBC-46 implement Couchbase::ConnectionPool to allow
|
217
|
+
applications (and ActiveSupport::Cache::CouchbaseStore) use it in
|
218
|
+
multi-threaded environment
|
219
|
+
|
220
|
+
* [major] Introduce Transcoders. This mechanism is more flexible, and
|
221
|
+
similar to how other clients encode values.
|
222
|
+
|
223
|
+
* [minor] Deprecate numeric argument to 'default_format'. Instead
|
224
|
+
of this style:
|
225
|
+
|
226
|
+
Couchbase.connect(:default_format => Couchbase::Bucket::FMT_MARSHAL)
|
227
|
+
|
228
|
+
Symbol notation or explicit transcoder entity should be used
|
229
|
+
|
230
|
+
Couchbase.connect(:default_format => :marshal)
|
231
|
+
Couchbase.connect(:transcoder => Couchbase::Transcoder::Marshal)
|
232
|
+
|
233
|
+
## 1.2.3 (2013-04-02)
|
234
|
+
|
235
|
+
* [major] Make ActiveSupport::Cache::CouchbaseStore threadsafe
|
236
|
+
|
237
|
+
* [minor] Check for gethrtime. Needed for solaris/smartos
|
238
|
+
|
239
|
+
* [minor] Update documentation bits regarding SET operations
|
240
|
+
|
241
|
+
## 1.2.2 (2013-02-11)
|
242
|
+
|
243
|
+
* [minor] Bucket#design_docs will return a Hash with DesignDoc
|
244
|
+
instances as a values.
|
245
|
+
|
246
|
+
* [critical] RCBC-104 Data corruption on intensive store operations.
|
247
|
+
The issue could also lead to segfaults.
|
248
|
+
|
249
|
+
* [major] RCBC-118 Alias #total_rows as #total_entries on view result
|
250
|
+
set to match documentation.
|
251
|
+
|
252
|
+
* [minor] View#fetch_all - async method for fetching all records
|
253
|
+
|
254
|
+
conn.run do
|
255
|
+
doc.recent_posts.fetch_all do |posts|
|
256
|
+
do_something_with_all_posts(posts)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
* [major] Allow to use Bucket instance in completely asynchronous
|
261
|
+
environment like this, without blocking on connect:
|
262
|
+
|
263
|
+
conn = Couchbase.new(:async => true)
|
264
|
+
conn.run do
|
265
|
+
conn.on_connect do |res|
|
266
|
+
if res.success?
|
267
|
+
#
|
268
|
+
# schedule async requests
|
269
|
+
#
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
* [major] RCBC-27 EventMachine plugin to integrate with EventMachine
|
275
|
+
library. Note that the plugin is experimental at this stage.
|
276
|
+
Example:
|
277
|
+
|
278
|
+
require 'eventmachine'
|
279
|
+
require 'couchbase'
|
280
|
+
|
281
|
+
EM.epoll = true if EM.epoll?
|
282
|
+
EM.kqueue = true if EM.kqueue?
|
283
|
+
EM.run do
|
284
|
+
con = Couchbase.connect(:engine => :eventmachine, :async => true)
|
285
|
+
con.on_connect do |res|
|
286
|
+
puts "connected: #{res.inspect}"
|
287
|
+
if res.success?
|
288
|
+
con.set("emfoo", "bar") do |res|
|
289
|
+
puts "set: #{res.inspect}"
|
290
|
+
con.get("emfoo") do |res|
|
291
|
+
puts "get: #{res.inspect}"
|
292
|
+
EM.stop
|
293
|
+
end
|
294
|
+
end
|
295
|
+
else
|
296
|
+
EM.stop
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
|
302
|
+
## 1.2.1 (2012-12-28)
|
303
|
+
|
304
|
+
* [major] RCBC-101 Persistence constraints wasn't passed to mutation
|
305
|
+
methods, so they haven't been applied properly.
|
306
|
+
|
307
|
+
* [major] RCBC-102 Inconsistent return values in case of storage
|
308
|
+
functions with persistence constraints. It always return a Hash like
|
309
|
+
in case of multi-set, even if there is only one document is being
|
310
|
+
set.
|
311
|
+
|
312
|
+
* [minor] Improve internal structures of multi-threaded IO plugin to
|
313
|
+
protect it from memory leaks when the Fiber object is forgotten.
|
314
|
+
|
315
|
+
## 1.2.0 (2012-12-12)
|
316
|
+
|
317
|
+
30 files changed, 2079 insertions(+), 662 deletions(-)
|
318
|
+
|
319
|
+
* Specialized io plugin for releasing Ruby GVL (thanks to
|
320
|
+
Sokolov Yura aka funny_falcon).
|
321
|
+
|
322
|
+
* Ruby 1.9.x uses global lock for ensuring integrity, and blocking
|
323
|
+
calls should be called inside rb_thread_blocking_region to allow
|
324
|
+
other threads to be runned.
|
325
|
+
|
326
|
+
* Ruby 1.8.7 have only green threads, so that rb_thread_schedule
|
327
|
+
should be called manually.
|
328
|
+
|
329
|
+
* RCBC-42 Catch exceptions from ruby callbacks
|
330
|
+
|
331
|
+
* RCBC-99 read out the StringIO contents in json gem monkey patch
|
332
|
+
|
333
|
+
* Use marshal serializer by default for session store
|
334
|
+
|
335
|
+
* Remove debugger development dependency
|
336
|
+
|
337
|
+
* Fix memory leaks and performance improvements
|
338
|
+
|
339
|
+
## 1.2.0.z.beta5 (2012-11-29)
|
340
|
+
|
341
|
+
25 files changed, 1419 insertions(+), 1230 deletions(-)
|
342
|
+
|
343
|
+
* RCBC-95 Use response body to clarify Couchbase::Error::HTTP
|
344
|
+
|
345
|
+
* Fix memory leaks: in async mode context wasn't freed
|
346
|
+
|
347
|
+
* Allow to setup default initial value for INCR/DECR on per connection
|
348
|
+
level.
|
349
|
+
|
350
|
+
* Make error message about libcouchbase dependency more verbose
|
351
|
+
|
352
|
+
## 1.2.0.z.beta4 (2012-11-21)
|
353
|
+
|
354
|
+
27 files changed, 311 insertions(+), 123 deletions(-)
|
355
|
+
|
356
|
+
* Increase default connection timeout for Views up to 75 seconds
|
357
|
+
|
358
|
+
* RCBC-94 Reset global exception after usage
|
359
|
+
|
360
|
+
* RCBC-89 Do not expose docs embedded in HTTP response. Use binary
|
361
|
+
protocol for it.
|
362
|
+
|
363
|
+
* Remove all_docs mentions. It isn't recommended to use it because of
|
364
|
+
performance issues
|
365
|
+
|
366
|
+
* Protect against non string values in :plain mode. Will raise error
|
367
|
+
if the value given isn't a string.
|
368
|
+
|
369
|
+
* RCBC-90 Update documentation about session store
|
370
|
+
|
371
|
+
* Make rack session store adapter quiet
|
372
|
+
|
373
|
+
* Update to recent libcouchbase API
|
374
|
+
|
375
|
+
* Adjust version check for MultiJson monkeypatch (8098da1)
|
376
|
+
|
377
|
+
* Do not hide ValueFormat reason. It is accessible using
|
378
|
+
Couchbase::Error::Value#inner_exception.
|
379
|
+
|
380
|
+
## 1.2.0.z.beta3 (2012-10-16)
|
381
|
+
|
382
|
+
18 files changed, 241 insertions(+), 57 deletions(-)
|
383
|
+
|
384
|
+
* RCBC-52 Implement bucket create/delete operations. Examples:
|
385
|
+
|
386
|
+
conn = Couchbase::Cluster.new(:hostname => "localhost",
|
387
|
+
:username => "Administrator", :password => "secret")
|
388
|
+
conn.create_bucket("my_protected_bucket",
|
389
|
+
:ram_quota => 500, # megabytes
|
390
|
+
:sasl_password => "s3cr3tBuck3t")
|
391
|
+
|
392
|
+
* Propagate status code for HTTP responses
|
393
|
+
|
394
|
+
* RCBC-87 Fix build error on Mac OS X
|
395
|
+
|
396
|
+
* Use global scope to find Error classes (thanks to @wr0ngway)
|
397
|
+
|
398
|
+
* Fix memory leaks
|
399
|
+
|
400
|
+
* Update to recent libcouchbase API
|
401
|
+
|
402
|
+
## 1.2.0.z.beta2 (2012-09-21)
|
403
|
+
|
404
|
+
3 files changed, 6 insertions(+), 2 deletions(-)
|
405
|
+
|
406
|
+
* RCBC-82 Not all rubies are fat on Mac OS X. Fixes build there
|
407
|
+
|
408
|
+
## 1.2.0.z.beta (2012-09-18)
|
409
|
+
|
410
|
+
2 files changed, 5 insertions(+), 1 deletion(-)
|
411
|
+
|
412
|
+
* Fix version ordering by using ".z" prefix before .beta. The problem
|
413
|
+
is that DP (Developer Preview) should have lower precedence than
|
414
|
+
Beta, but alphabetially ".beta" orders before ".dp". This is why
|
415
|
+
further Beta versions have ".z".
|
416
|
+
|
417
|
+
## 1.2.0.beta (2012-09-18)
|
418
|
+
|
419
|
+
51 files changed, 9301 insertions(+), 3364 deletions(-)
|
420
|
+
|
421
|
+
* RCBC-81 Protect against NoMethodError in extconf.rb. Fixes
|
422
|
+
gem installation
|
423
|
+
|
424
|
+
* RCBC-79 Use RESTful flush
|
425
|
+
|
426
|
+
* Various build fixes
|
427
|
+
|
428
|
+
* Add attribute reader for Error::Base status code
|
429
|
+
|
430
|
+
* CCBC-98 Expose client temporary failure error
|
431
|
+
|
432
|
+
* RCBC-28 Implement Bucket#unlock
|
433
|
+
|
434
|
+
# Unlock the single key
|
435
|
+
val, _, cas = c.get("foo", :lock => true, :extended => true)
|
436
|
+
c.unlock("foo", :cas => cas)
|
437
|
+
|
438
|
+
# Unlock several keys
|
439
|
+
c.unlock("foo" => cas1, :bar => cas2)
|
440
|
+
#=> {"foo" => true, "bar" => true}
|
441
|
+
|
442
|
+
* Fix CAS conversion for Bucket#delete method for 32-bit systems
|
443
|
+
|
444
|
+
## 1.1.5 (2012-09-17)
|
445
|
+
|
446
|
+
3 files changed, 9 insertions(+), 5 deletions(-)
|
447
|
+
|
448
|
+
* RCBC-81 Fixed installing issue on Mac OS X.
|
449
|
+
|
450
|
+
## 1.1.4 (2012-08-30)
|
451
|
+
|
452
|
+
5 files changed, 64 insertions(+), 30 deletions(-)
|
453
|
+
|
454
|
+
* RCBC-37 Allow to pass intial list of nodes which will allow to
|
455
|
+
iterate addresses until alive node will be found.
|
456
|
+
|
457
|
+
Couchbase.connect(:node_list => ['example.com:8091', 'example.org:8091', 'example.net'])
|
458
|
+
|
459
|
+
* RCBC-70 Fixed UTF-8 in the keys. Original discussion
|
460
|
+
https://groups.google.com/d/topic/couchbase/bya0lSf9uGE/discussion
|
461
|
+
|
462
|
+
## 1.2.0.dp6 (2012-06-28)
|
463
|
+
|
464
|
+
21 files changed, 1520 insertions(+), 428 deletions(-)
|
465
|
+
|
466
|
+
* RCBC-47 Allow to skip username for protected buckets. The will use
|
467
|
+
bucket name for credentials.
|
468
|
+
|
469
|
+
* Expose number of replicas to the user
|
470
|
+
|
471
|
+
* RCBC-6 Implement Bucket#observe command to query durable state.
|
472
|
+
Examples:
|
473
|
+
|
474
|
+
# Query state of single key
|
475
|
+
c.observe("foo")
|
476
|
+
#=> [#<Couchbase::Result:0x00000001650df0 ...>, ...]
|
477
|
+
|
478
|
+
# Query state of multiple keys
|
479
|
+
keys = ["foo", "bar"]
|
480
|
+
stats = c.observe(keys)
|
481
|
+
stats.size #=> 2
|
482
|
+
stats["foo"] #=> [#<Couchbase::Result:0x00000001650df0 ...>, ...]
|
483
|
+
|
484
|
+
* RCBC-49 Storage functions with durability requirements
|
485
|
+
|
486
|
+
# Ensure that the key will be persisted at least on the one node
|
487
|
+
c.set("foo", "bar", :observe => {:persisted => 1})
|
488
|
+
|
489
|
+
* RCBC-50 Allow to read keys from replica
|
490
|
+
|
491
|
+
* RCBC-57 Expose timers API from libcouchbase
|
492
|
+
|
493
|
+
* RCBC-59 Replicate flags in Bucket#cas operation
|
494
|
+
|
495
|
+
* Apply timeout value before connection. Currently libcouchbase shares
|
496
|
+
timeouts for connection and IO operations. This patch allows to
|
497
|
+
setup timeout on the instantiating the connection.
|
498
|
+
|
499
|
+
* RCBC-39 Allow to specify delta for incr/decr in options
|
500
|
+
|
501
|
+
* RCBC-40 Fix Bucket#cas operation behaviour in async mode. The
|
502
|
+
callback of the Bucket#cas method is triggered only once, when it
|
503
|
+
fetches old value, and it isn't possible to receive notification if
|
504
|
+
the next store operation was successful. Example, append JSON
|
505
|
+
encoded value asynchronously:
|
506
|
+
|
507
|
+
c.default_format = :document
|
508
|
+
c.set("foo", {"bar" => 1})
|
509
|
+
c.run do
|
510
|
+
c.cas("foo") do |val|
|
511
|
+
case val.operation
|
512
|
+
when :get
|
513
|
+
val["baz"] = 2
|
514
|
+
val
|
515
|
+
when :set
|
516
|
+
# verify all is ok
|
517
|
+
puts "error: #{ret.error.inspect}" unless ret.success?
|
518
|
+
end
|
519
|
+
end
|
520
|
+
end
|
521
|
+
c.get("foo") #=> {"bar" => 1, "baz" => 2}
|
522
|
+
|
523
|
+
* RCBC-43 More docs and examples on views
|
524
|
+
|
525
|
+
* RCBC-37 Bootstrapping using multiple nodes
|
526
|
+
|
527
|
+
Couchbase.connect(:node_list => ['example.com:8091', 'example.org:8091', 'example.net'])
|
528
|
+
|
529
|
+
* Inherit StandardError instead RuntimeError for errors
|
530
|
+
|
531
|
+
## 1.2.0.dp5 (2012-06-15)
|
532
|
+
|
533
|
+
12 files changed, 939 insertions(+), 20 deletions(-)
|
534
|
+
|
535
|
+
* Integrate with Rack and Rails session store
|
536
|
+
|
537
|
+
# rack
|
538
|
+
require 'rack/session/couchbase'
|
539
|
+
use Rack::Session::Couchbase
|
540
|
+
|
541
|
+
# rails
|
542
|
+
require 'action_dispatch/middleware/session/couchbase_store'
|
543
|
+
AppName::Application.config.session_store :couchbase_store
|
544
|
+
|
545
|
+
* Implement cache store adapter for Rails
|
546
|
+
|
547
|
+
cache_options = {
|
548
|
+
:bucket => 'protected',
|
549
|
+
:username => 'protected',
|
550
|
+
:password => 'secret',
|
551
|
+
:expires_in => 30.seconds
|
552
|
+
}
|
553
|
+
config.cache_store = :couchbase_store, cache_options
|
554
|
+
|
555
|
+
* Implement key prefix (simple namespacing)
|
556
|
+
|
557
|
+
Couchbase.connect(:key_prefix => "prefix:")
|
558
|
+
|
559
|
+
* Allow to force assembling result Hash for multi-get
|
560
|
+
|
561
|
+
connection.get("foo", "bar")
|
562
|
+
#=> [1, 2]
|
563
|
+
connection.get("foo", "bar", :assemble_hash => true)
|
564
|
+
#=> {"foo" => 1, "bar" => 2}
|
565
|
+
|
566
|
+
## 1.2.0.dp4 (2012-06-07)
|
567
|
+
|
568
|
+
4 files changed, 34 insertions(+), 19 deletions(-)
|
569
|
+
|
570
|
+
* Update Bucket#replace documentation: it accepts :cas option
|
571
|
+
|
572
|
+
* RCBC-36 Fix segfault. Occasional segfault when accessing the
|
573
|
+
results of a View. https://gist.github.com/2883925
|
574
|
+
|
575
|
+
## 1.2.0.dp3 (2012-06-06)
|
576
|
+
|
577
|
+
4 files changed, 22 insertions(+), 4 deletions(-)
|
578
|
+
|
579
|
+
* Fix for multi_json < 1.3.3
|
580
|
+
|
581
|
+
* Break out from event loop for non-chunked responses. View results
|
582
|
+
are chunked by default, so there no problems, but other requests
|
583
|
+
like Bucket#save_design_doc() were "locking" awaiting forever.
|
584
|
+
|
585
|
+
## 1.2.0.dp2 (2012-06-06)
|
586
|
+
|
587
|
+
22 files changed, 859 insertions(+), 253 deletions(-)
|
588
|
+
|
589
|
+
* RCBC-31 Make Bucket#get more consistent. The pattern of using more
|
590
|
+
than one argument to determine if an array should be returned is not
|
591
|
+
idiomatic. Consider the case of a multi-get in an application where
|
592
|
+
I have n items to return. If there happens to be only one item it
|
593
|
+
will be treated differently than if there happens to be 2 items.
|
594
|
+
|
595
|
+
get(["foo"]) #=> ["bar"]
|
596
|
+
get("foo") #=> "bar"
|
597
|
+
get(["x"], :extended => true) #=> {"x"=>["xval", 0, 18336939621176836096]}
|
598
|
+
|
599
|
+
* Use monotonic high resolution clock
|
600
|
+
|
601
|
+
* Implement threshold for outgoing commands
|
602
|
+
|
603
|
+
* Allow to stop event loop from ruby
|
604
|
+
|
605
|
+
* RCBC-35 Fix the View parameters escaping. More info at
|
606
|
+
https://gist.github.com/2775050
|
607
|
+
|
608
|
+
* RCBC-34 Use multi_json gem. json_gem compatibility (require
|
609
|
+
'yajl/json_gem') is notorious for causing all kinds of issues with
|
610
|
+
various gems. The most compatible way to use yajl is to call
|
611
|
+
Yajl::Parser and Yajl::Encoder directly.
|
612
|
+
|
613
|
+
* Allow to block and wait for part of the requests
|
614
|
+
|
615
|
+
* Fixed view iterator. It doesn't lock event loop anymore This used to
|
616
|
+
cause "locks", memory leaks or even segmentation fault.
|
617
|
+
|
618
|
+
* Define views only if "views" key presented
|
619
|
+
|
620
|
+
* Require yajl as development dependency
|
621
|
+
|
622
|
+
* RCBC-76 Implement get with lock operation. Examples:
|
623
|
+
|
624
|
+
# Get and lock key using default timeout
|
625
|
+
c.get("foo", :lock => true)
|
626
|
+
|
627
|
+
# Determine lock timeout parameters
|
628
|
+
c.stats.values_at("ep_getl_default_timeout", "ep_getl_max_timeout")
|
629
|
+
#=> [{"127.0.0.2:11210"=>"15"}, {"127.0.0.1:11210"=>"30"}]
|
630
|
+
|
631
|
+
# Get and lock key using custom timeout
|
632
|
+
c.get("foo", :lock => 3)
|
633
|
+
|
634
|
+
* Update documentation
|
635
|
+
|
636
|
+
## 1.1.3 (2012-07-27)
|
637
|
+
|
638
|
+
5 files changed, 192 insertions(+), 101 deletions(-)
|
639
|
+
|
640
|
+
* RCBC-64 The Couchbase::Bucket class hasn't implemented the #dup
|
641
|
+
method. So it caused SEGFAULT. The patch is implementing correct
|
642
|
+
function, which copy the internals and initializes new connection.
|
643
|
+
|
644
|
+
* RCBC-59 The flags might be reset if caller will use
|
645
|
+
Couchbase::Bucket#cas operation. Here is IRB session demonstrating
|
646
|
+
the issue:
|
647
|
+
|
648
|
+
irb> Couchbase.bucket.set("foo", "bar", :flags => 0x100)
|
649
|
+
17982951084586893312
|
650
|
+
irb> Couchbase.bucket.cas("foo") { "baz" }
|
651
|
+
1712422461213442048
|
652
|
+
irb> Couchbase.bucket.get("foo", :extended => true)
|
653
|
+
["baz", 0, 1712422461213442048]
|
654
|
+
|
655
|
+
|
656
|
+
* RCBC-60 Make object_space GC protector per-bucket object. Previous
|
657
|
+
version provided not completely thread-safe bucket instance, because
|
658
|
+
it was sharing global hash for protecting objects, created in
|
659
|
+
extension, from garbage collecting.
|
660
|
+
|
661
|
+
## 1.1.2 (2012-06-05)
|
662
|
+
|
663
|
+
5 files changed, 9 insertions(+), 4 deletions(-)
|
664
|
+
|
665
|
+
* Upgrade libcouchbase dependency to 1.0.4. Version 1.0.4 includes
|
666
|
+
important stability fixes.
|
667
|
+
|
668
|
+
* Backport debugger patch. The gem used to require debugger as
|
669
|
+
development dependency. Unfortunately ruby-debug19 isn't supported
|
670
|
+
anymore for ruby 1.9.x. But there is new gem 'debugger'. This patch
|
671
|
+
replaces this dependency.
|
672
|
+
|
673
|
+
## 1.2.0.dp (2012-04-10)
|
674
|
+
|
675
|
+
19 files changed, 1606 insertions(+), 93 deletions(-)
|
676
|
+
|
677
|
+
* Properly handle hashes as Couchbase.connection_options. Fixed a bug
|
678
|
+
when 'Couchbase.connection_options' for "default" connection, when
|
679
|
+
there are several arguments to pass to the connect() function when
|
680
|
+
establishing thread local connection as below:
|
681
|
+
|
682
|
+
Couchbase.connection_options = {:port => 9000, :bucket => 'myapp'}
|
683
|
+
|
684
|
+
* Implement views. Couchbase Server Views are accessible using the
|
685
|
+
view APIs. Please refer to
|
686
|
+
http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views.html
|
687
|
+
for getting started with views.
|
688
|
+
|
689
|
+
* Use verbose mode by default throwing exceptions on NOT_FOUND errors.
|
690
|
+
This means that quiet attribute is false now on new connections.
|
691
|
+
|
692
|
+
* Documentation fixes
|
693
|
+
|
694
|
+
## 1.1.1 (2012-03-19)
|
695
|
+
|
696
|
+
5 files changed, 83 insertions(+), 23 deletions(-)
|
697
|
+
|
698
|
+
* Flags are used differently in different clients for example between
|
699
|
+
Python and Ruby. This fix will force the format to a known value
|
700
|
+
irrespective of the flags.
|
701
|
+
|
702
|
+
* Calls between Ruby and C libraries for Couchbase which involved
|
703
|
+
default arguments had an associated arity of -1 which was not being
|
704
|
+
handled correctly. That is being handled correctly now.
|
705
|
+
|
706
|
+
## 1.1.0 (2012-03-07)
|
707
|
+
|
708
|
+
27 files changed, 2460 insertions(+), 849 deletions(-)
|
709
|
+
|
710
|
+
* With the usage of the URI parser from stdlib it is possible to
|
711
|
+
validate the bucket URI more strictly. Also, it is possible to
|
712
|
+
specify credentials in the URI like:
|
713
|
+
http://username:password@example.com:8091/pools/default/buckets/custom
|
714
|
+
|
715
|
+
* The "default" connection is available in thread local storage. This
|
716
|
+
mean that using the Couchbase.bucket method it is possible to get
|
717
|
+
access to current connection and there is no need to share
|
718
|
+
connections when running in multi-thread environment. Each thread
|
719
|
+
has its own connection reference.
|
720
|
+
|
721
|
+
* The direct dependency on libevent and libsasl has been removed. Now
|
722
|
+
the library doesn't require libevent headers installed.
|
723
|
+
|
724
|
+
* The disconnect and reconnect interfaces are implemented which
|
725
|
+
provide routines for explicit resource management. Connections were
|
726
|
+
freed only when the Garbage Collector found that the connection was
|
727
|
+
not being used. Now it's possible for the client to check if the
|
728
|
+
bucket was connected using 'connected?' or 'disconnect' it manually
|
729
|
+
or 'reconnect' using old settings.
|
730
|
+
|
731
|
+
* There were spurious timeout issues with a compound statement like
|
732
|
+
below. No timeout will occur unless there is a problem with the
|
733
|
+
connection.
|
734
|
+
|
735
|
+
connection.run do
|
736
|
+
connection.get("foo") {|ret| puts "got foo = #{ret.value}"}
|
737
|
+
sleep(5)
|
738
|
+
end
|
739
|
+
|
740
|
+
* It is not required to install libcouchbase or libvbucket on windows.
|
741
|
+
|
742
|
+
* It is possible to store nil as a value. It is possible to
|
743
|
+
distinguish a nil value from a missing key by looking at at the
|
744
|
+
value returned and the flags and CAS values as well.
|
745
|
+
|
746
|
+
* Based on the time out fix (CCBC-20), clients will be notified when
|
747
|
+
the connection was dropped or host isn't available.
|
748
|
+
|
749
|
+
## 1.0.0 (2012-01-23)
|
750
|
+
|
751
|
+
50 files changed, 4696 insertions(+), 2647 deletions(-)
|
752
|
+
|
753
|
+
* Port library to use libcouchbase instead of memcached gem.
|
754
|
+
Implemented following operations:
|
755
|
+
|
756
|
+
* get, []
|
757
|
+
* set, []=
|
758
|
+
* add
|
759
|
+
* replace
|
760
|
+
* append
|
761
|
+
* prepend
|
762
|
+
* compare-and-swap
|
763
|
+
* arithmetic (incr/decr)
|
764
|
+
* flush
|
765
|
+
* stats
|
766
|
+
* delete
|
767
|
+
* touch
|
768
|
+
|
769
|
+
* Introduce support for three data formats:
|
770
|
+
|
771
|
+
* document
|
772
|
+
* marshal
|
773
|
+
* plain
|
774
|
+
|
775
|
+
* Removed Views support
|
776
|
+
|
777
|
+
* Added benchmarks, couchbase vs. memcached vs. dalli
|
778
|
+
|
779
|
+
* Implement asynchronous protocol
|
780
|
+
|
781
|
+
## 0.9.8 (2011-12-16)
|
782
|
+
|
783
|
+
3 files changed, 8 insertions(+), 3 deletions(-)
|
784
|
+
|
785
|
+
* RCBC-10 Always specify credentials for non-default buckets. It was
|
786
|
+
impossible to store data in non-default buckets
|
787
|
+
|
788
|
+
## 0.9.7 (2011-10-05)
|
789
|
+
|
790
|
+
7 files changed, 31 insertions(+), 19 deletions(-)
|
791
|
+
|
792
|
+
* Fix design doc removing
|
793
|
+
|
794
|
+
* Fix 'set' method signature: add missing options argument
|
795
|
+
|
796
|
+
* Rename gem to 'couchbase' for easy of use. The github project still
|
797
|
+
is 'couchbase-ruby-client'
|
798
|
+
|
799
|
+
## 0.9.6 (2011-10-04)
|
800
|
+
|
801
|
+
13 files changed, 609 insertions(+), 99 deletions(-)
|
802
|
+
|
803
|
+
* Fix bug with decoding multiget result
|
804
|
+
|
805
|
+
* Allow create design documents from IO and String
|
806
|
+
|
807
|
+
* Rename 'json' format to 'document', and describe possible formats
|
808
|
+
|
809
|
+
* Allow to handle errors in view result stream
|
810
|
+
|
811
|
+
* Remove dependency on libyajl library: it bundled with yaji now
|
812
|
+
|
813
|
+
## 0.9.5 (2011-08-24)
|
814
|
+
|
815
|
+
4 files changed, 59 insertions(+), 28 deletions(-)
|
816
|
+
|
817
|
+
* Update README. Make it more human-friendly
|
818
|
+
|
819
|
+
* Removed dependency on will_paginate in development mode
|
820
|
+
|
821
|
+
## 0.9.4 (2011-08-01)
|
822
|
+
|
823
|
+
24 files changed, 1240 insertions(+), 78 deletions(-)
|
824
|
+
|
825
|
+
* Use streaming json parser to iterate over view results
|
826
|
+
|
827
|
+
* Update memcached gem dependency to v1.3
|
828
|
+
|
829
|
+
* Proxy TOUCH command to memcached client
|
830
|
+
|
831
|
+
* Fix minor bugs in RestClient and Document classes
|
832
|
+
|
833
|
+
* Disable CouchDB API for nodes without 'couchApiBase' key provided.
|
834
|
+
|
835
|
+
* Fix bug with unicode parsing in config listener
|
836
|
+
|
837
|
+
* 61f394e RCBC-5 Add Dave's test case: ensure memcached client
|
838
|
+
initialized. Fixes Timeout error on connecting to membase with
|
839
|
+
Couchbase.new on Ruby 1.8.7
|
840
|
+
|
841
|
+
## 0.9.3 (2011-07-29)
|
842
|
+
|
843
|
+
6 files changed, 167 insertions(+), 9 deletions(-)
|
844
|
+
|
845
|
+
* Use Latch (via Mutex and ConditionVariable) to wait until initial
|
846
|
+
setup will be finished.
|
847
|
+
|
848
|
+
* Update prefix for development views (from '$dev_' to 'dev_')
|
849
|
+
|
850
|
+
## 0.9.2 (2011-07-28)
|
851
|
+
|
852
|
+
5 files changed, 31 insertions(+), 20 deletions(-)
|
853
|
+
|
854
|
+
* Use zero TTL by default to store records forever
|
855
|
+
|
856
|
+
* Update documentation
|
857
|
+
|
858
|
+
* Wait until configuration is done
|
859
|
+
|
860
|
+
## 0.9.1 (2011-07-25)
|
861
|
+
|
862
|
+
3 files changed, 5 insertions(+), 2 deletions(-)
|
863
|
+
|
864
|
+
* Minor bugfix for RestClient initialization
|
865
|
+
|
866
|
+
## 0.9.0 (2011-07-25)
|
867
|
+
|
868
|
+
19 files changed, 1174 insertions(+)
|
869
|
+
|
870
|
+
* Initial public release. It supports most of the binary protocol
|
871
|
+
commands through memcached gem and also is able to listen to bucket
|
872
|
+
configuration and make View requests.
|