couchbase 2.0.0.pre.1-java
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.
- 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.
|