riak-client 1.2.0 → 1.4.0

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.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/Gemfile +1 -7
  4. data/README.markdown +66 -0
  5. data/RELEASE_NOTES.md +27 -0
  6. data/lib/riak/bucket.rb +24 -5
  7. data/lib/riak/client.rb +42 -7
  8. data/lib/riak/client/beefcake/message_codes.rb +56 -0
  9. data/lib/riak/client/beefcake/messages.rb +190 -18
  10. data/lib/riak/client/beefcake_protobuffs_backend.rb +143 -10
  11. data/lib/riak/client/feature_detection.rb +26 -1
  12. data/lib/riak/client/http_backend.rb +58 -9
  13. data/lib/riak/client/http_backend/bucket_streamer.rb +15 -0
  14. data/lib/riak/client/http_backend/chunked_json_streamer.rb +42 -0
  15. data/lib/riak/client/http_backend/configuration.rb +17 -1
  16. data/lib/riak/client/http_backend/key_streamer.rb +4 -32
  17. data/lib/riak/client/protobuffs_backend.rb +12 -34
  18. data/lib/riak/counter.rb +101 -0
  19. data/lib/riak/index_collection.rb +71 -0
  20. data/lib/riak/list_buckets.rb +28 -0
  21. data/lib/riak/locale/en.yml +14 -0
  22. data/lib/riak/multiget.rb +123 -0
  23. data/lib/riak/node.rb +2 -0
  24. data/lib/riak/node/configuration.rb +32 -21
  25. data/lib/riak/node/defaults.rb +2 -0
  26. data/lib/riak/node/generation.rb +19 -7
  27. data/lib/riak/node/version.rb +2 -16
  28. data/lib/riak/robject.rb +1 -0
  29. data/lib/riak/secondary_index.rb +67 -0
  30. data/lib/riak/version.rb +1 -1
  31. data/riak-client.gemspec +3 -2
  32. data/spec/integration/riak/counters_spec.rb +51 -0
  33. data/spec/integration/riak/http_backends_spec.rb +24 -14
  34. data/spec/integration/riak/node_spec.rb +6 -28
  35. data/spec/riak/beefcake_protobuffs_backend_spec.rb +84 -0
  36. data/spec/riak/bucket_spec.rb +55 -5
  37. data/spec/riak/client_spec.rb +34 -0
  38. data/spec/riak/counter_spec.rb +122 -0
  39. data/spec/riak/index_collection_spec.rb +50 -0
  40. data/spec/riak/list_buckets_spec.rb +41 -0
  41. data/spec/riak/multiget_spec.rb +76 -0
  42. data/spec/riak/robject_spec.rb +4 -1
  43. data/spec/riak/secondary_index_spec.rb +225 -0
  44. data/spec/spec_helper.rb +1 -0
  45. data/spec/support/sometimes.rb +2 -2
  46. data/spec/support/unified_backend_examples.rb +4 -0
  47. metadata +41 -47
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 31c844652f0920188a681f67ae0421582deb39e6
4
+ data.tar.gz: a61519055a317cc9a252bff17903bb08126f5abe
5
+ SHA512:
6
+ metadata.gz: e76e0fe22bedb857baf87de6d99da8529eaccd79fc0fe39b78fe0f850b8d244193e24aa83481793ae5e1b80d09b578f1213efff2e360c6f51cac622e8d921bb1
7
+ data.tar.gz: cff6a9f0e542399e9249eb9ddf0258137c7f52dc33ff5ead84c16781a1c34d0fe49099256c95b134203b51a26d0f46a698596b8d9c958c37226fd0703dfe8c3d
data/.gitignore CHANGED
@@ -37,3 +37,4 @@ Gemfile.lock
37
37
  **/.riaktest
38
38
  vendor/erlang
39
39
  vendor/riak
40
+ .ruby-version
data/Gemfile CHANGED
@@ -12,6 +12,7 @@ end
12
12
 
13
13
  platforms :mri do
14
14
  gem 'yajl-ruby'
15
+ gem 'debugger'
15
16
  end
16
17
 
17
18
  platforms :jruby do
@@ -21,10 +22,3 @@ end
21
22
  platforms :jruby, :rbx do
22
23
  gem 'json'
23
24
  end
24
- # platforms :mri_18, :jruby do
25
- # gem 'ruby-debug'
26
- # end
27
-
28
- # platforms :mri_19 do
29
- # gem 'ruby-debug19'
30
- # end
@@ -136,6 +136,72 @@ client['users'].enable_index!
136
136
  client['users'].disable_index!
137
137
  ```
138
138
 
139
+ ## Secondary Index Examples
140
+
141
+ Riak supports secondary indexes. Secondary indexing, or "2i," gives you the
142
+ ability to tag objects with multiple queryable values at write time, and then
143
+ query them later.
144
+
145
+ * [Using Secondary Indexes](http://docs.basho.com/riak/latest/dev/using/2i/)
146
+ * [Secondary Index implementation notes](http://docs.basho.com/riak/latest/dev/advanced/2i/)
147
+
148
+ ### Tagging Objects
149
+
150
+ Objects are tagged with a hash kept behind the `indexes` method. Secondary index
151
+ storage logic is in `lib/riak/rcontent.rb`.
152
+
153
+ ```ruby
154
+ object = bucket.get_or_new 'cobb.salad'
155
+
156
+ # Indexes end with the "_bin" suffix to indicate they're binary or string
157
+ # indexes. They can have multiple values.
158
+ object.indexes[:ingredients_bin] = %w{lettuce tomato bacon egg chives}
159
+
160
+ # Indexes ending with the "_int" suffix are indexed as integers. They can
161
+ # have multiple values too.
162
+ object.indexes[:calories_int] = [220]
163
+
164
+ # You must re-save the object to store indexes.
165
+ object.store
166
+ ```
167
+
168
+ ### Finding Objects
169
+
170
+ Secondary index queries return a list of keys exactly matching a scalar or
171
+ within a range.
172
+
173
+ ```ruby
174
+ # The Bucket#get_index method allows querying by scalar...
175
+ bucket.get_index 'calories_int', 220 # => ['cobb.salad']
176
+
177
+ # or range.
178
+ bucket.get_index 'calories_int', 100..300 # => ['cobb.salad']
179
+
180
+ # Binary indexes also support both ranges and scalars.
181
+ bucket.get_index 'ingredients_bin', 'tomata'..'tomatz' # => ['cobb.salad']
182
+
183
+ # The collection from #get_index also provides a continuation for pagination:
184
+ c = bucket.get_index 'ingredients_bin', 'lettuce', max_results: 5
185
+ c.length # => 5
186
+ c.continuation # => "g2gCbQAAA="
187
+
188
+ # You can use that continuation to get the next page of results:
189
+ c2 = bucket.get_index 'ingredients_bin', 'lettuce', max_results: 5, continuation: c.continuation
190
+
191
+ # More complicated operations may benefit by using the `SecondaryIndex` object:
192
+ q = Riak::SecondaryIndex.new bucket, 'ingredients_bin', 'lettuce', max_results: 5
193
+
194
+ # SecondaryIndex objects give you access to the keys...
195
+ q.keys # => ['cobb.salad', 'wedge.salad', 'buffalo_chicken.wrap', ...]
196
+
197
+ # but can also fetch values for you in parallel.
198
+ q.values # => [<RObject {recipes,cobb.salad} ...>, <RObject {recipes,wedge...
199
+
200
+ # They also provide simpler pagination:
201
+ q.has_next_page? # => true
202
+ q2 = q.next_page
203
+ ```
204
+
139
205
  ## How to Contribute
140
206
 
141
207
  * Fork the project on [Github](http://github.com/basho/riak-ruby-client). If you have already forked, use `git pull --rebase` to reapply your changes on top of the mainline. Example:
@@ -1,5 +1,32 @@
1
1
  # Riak Ruby Client Release Notes
2
2
 
3
+ ## 1.4.0 Feature Release - 2013-08-16
4
+
5
+ Release 1.4.0 adds support for Riak 1.4 and fixes a few bugs.
6
+
7
+ Features for all Riak versions:
8
+
9
+ * Multi-get parallelizes fetching multiple objects from one or more
10
+ buckets.
11
+
12
+ Features for Riak 1.4 and newer:
13
+
14
+ * Bucket properties are settable and resettable over Protocol Buffers.
15
+ * Distributed counters are implemented by the `Riak::Counter` class.
16
+ * The full set of improvements to Secondary Indexes
17
+ are available, including pagination, streaming, and return_terms.
18
+ These features are available through the existing `Bucket#get_index`
19
+ interface as well as the new `Riak::SecondaryIndex` interface.
20
+ * The new streaming bucket list is available in the Ruby client.
21
+ * Setting timeout values for object CRUD, key listing, and bucket
22
+ listing is now possible.
23
+
24
+ Bugfixes:
25
+
26
+ * Tests pass and don't stall in Ruby 2.0.
27
+ * Zero-length key and bucket names are forbidden in the client.
28
+ * Test server works with Riak 1.4.
29
+
3
30
  ## 1.2.0 Feature Release - 2013-05-15
4
31
 
5
32
  Release 1.2.0 adds support for Riak 1.3 and fixes a number of bugs.
@@ -1,6 +1,7 @@
1
1
  require 'riak/util/translation'
2
2
  require 'riak/client'
3
3
  require 'riak/robject'
4
+ require 'riak/counter'
4
5
  require 'riak/failed_request'
5
6
 
6
7
  module Riak
@@ -24,6 +25,7 @@ module Riak
24
25
  def initialize(client, name)
25
26
  raise ArgumentError, t("client_type", :client => client.inspect) unless Client === client
26
27
  raise ArgumentError, t("string_type", :string => name.inspect) unless String === name
28
+ raise ArgumentError, t('zero_length_bucket') if name == ''
27
29
  @client, @name = client, name
28
30
  end
29
31
 
@@ -35,12 +37,12 @@ module Riak
35
37
  # @return [Array<String>] Keys in this bucket
36
38
  # @note This operation has serious performance implications and
37
39
  # should not be used in production applications.
38
- def keys(&block)
40
+ def keys(options={}, &block)
39
41
  warn(t('list_keys', :backtrace => caller.join("\n "))) unless Riak.disable_list_keys_warnings
40
42
  if block_given?
41
- @client.list_keys(self, &block)
43
+ @client.list_keys(self, options, &block)
42
44
  else
43
- @client.list_keys(self)
45
+ @client.list_keys(self, options)
44
46
  end
45
47
  end
46
48
 
@@ -98,6 +100,15 @@ module Riak
98
100
  end
99
101
  alias :[] :get
100
102
 
103
+ # Retrieve multiple keys from this bucket.
104
+ # @param [Array<String>] array of keys to fetch
105
+ # @return [Hash<String, Riak::RObject>] hash of keys to objects
106
+ def get_many(keys)
107
+ pairs = keys.map{|k| [self, k]}
108
+ results = Multiget.get_all @client, pairs
109
+ results.keys.inject(Hash.new) { |mem, var| mem[var[1]] = results[var]; mem }
110
+ end
111
+
101
112
  # Create a new blank object
102
113
  # @param [String] key the key of the new object
103
114
  # @return [RObject] the new, unsaved object
@@ -122,6 +133,14 @@ module Riak
122
133
  end
123
134
  end
124
135
 
136
+ # Gets a counter object. Counters initially hvae a value of zero, and can be
137
+ # incremented and decremented by integer values.
138
+ # @param [String] key the key of the counter to fetch
139
+ # @return [Counter]
140
+ def counter(key)
141
+ Riak::Counter.new self, key
142
+ end
143
+
125
144
  # Checks whether an object exists in Riak.
126
145
  # @param [String] key the key to check
127
146
  # @param [Hash] options quorum options
@@ -155,8 +174,8 @@ module Riak
155
174
  # Range of values to query
156
175
  # @return [Array<String>] a list of keys that match the index
157
176
  # query
158
- def get_index(index, query)
159
- client.get_index(self, index, query)
177
+ def get_index(index, query, options={})
178
+ client.get_index(self, index, query, options)
160
179
  end
161
180
 
162
181
  # @return [true, false] whether the bucket allows divergent siblings
@@ -14,7 +14,10 @@ require 'riak/client/excon_backend'
14
14
  require 'riak/client/protobuffs_backend'
15
15
  require 'riak/client/beefcake_protobuffs_backend'
16
16
  require 'riak/bucket'
17
+ require 'riak/multiget'
18
+ require 'riak/secondary_index'
17
19
  require 'riak/stamp'
20
+ require 'riak/list_buckets'
18
21
 
19
22
  module Riak
20
23
  # A client connection to Riak.
@@ -70,6 +73,9 @@ module Riak
70
73
  # @return [Client::Pool] A pool of protobuffs connections
71
74
  attr_reader :protobuffs_pool
72
75
 
76
+ # @return [Integer] The number of threads for multiget requests
77
+ attr_reader :multiget_threads
78
+
73
79
  # Creates a client connection to Riak
74
80
  # @param [Hash] options configuration options for the client
75
81
  # @option options [Array] :nodes A list of nodes this client connects to.
@@ -119,6 +125,7 @@ module Riak
119
125
  self.protobuffs_backend = options[:protobuffs_backend] || :Beefcake
120
126
  self.client_id = options[:client_id] if options[:client_id]
121
127
  self.ssl = options[:ssl] if options[:ssl]
128
+ self.multiget_threads = options[:multiget_threads]
122
129
  end
123
130
 
124
131
  # Yields a backend for operations that are protocol-independent.
@@ -148,6 +155,7 @@ module Riak
148
155
  # @option options [Boolean] :props (false) whether to retreive the bucket properties
149
156
  # @return [Bucket] the requested bucket
150
157
  def bucket(name, options={})
158
+ raise ArgumentError, t('zero_length_bucket') if name == ''
151
159
  unless (options.keys - [:props]).empty?
152
160
  raise ArgumentError, "invalid options"
153
161
  end
@@ -162,10 +170,13 @@ module Riak
162
170
  # @note This is an expensive operation and should be used only
163
171
  # in development.
164
172
  # @return [Array<Bucket>] a list of buckets
165
- def buckets
173
+ def buckets(options={}, &block)
166
174
  warn(t('list_buckets', :backtrace => caller.join("\n "))) unless Riak.disable_list_keys_warnings
175
+
176
+ return ListBuckets.new self, options, block if block_given?
177
+
167
178
  backend do |b|
168
- b.list_buckets.map {|name| Bucket.new(self, name) }
179
+ b.list_buckets(options).map {|name| Bucket.new(self, name) }
169
180
  end
170
181
  end
171
182
  alias :list_buckets :buckets
@@ -187,6 +198,24 @@ module Riak
187
198
  end
188
199
  end
189
200
 
201
+ # Set the number of threads to use for multiget operations.
202
+ # If set to nil, defaults to twice the number of nodes.
203
+ # @param [Integer] count The number of threads to use.
204
+ # @raise [ArgumentError] when a non-nil, non-positive-Integer count is given
205
+ def multiget_threads=(count)
206
+ if count.nil?
207
+ @multiget_threads = nodes.length * 2
208
+ return
209
+ end
210
+
211
+ if count.is_a?(Integer) && count > 0
212
+ @multiget_threads = count
213
+ return
214
+ end
215
+
216
+ raise ArgumentError, t("invalid_multiget_thread_count")
217
+ end
218
+
190
219
  # Set the client ID for this client. Must be a string or Fixnum value 0 =<
191
220
  # value < MAX_CLIENT_ID.
192
221
  # @param [String, Fixnum] value The internal client ID used by Riak to route responses
@@ -268,14 +297,20 @@ module Riak
268
297
  end
269
298
 
270
299
  # Queries a secondary index on a bucket. See Bucket#get_index
271
- def get_index(bucket, index, query)
300
+ def get_index(bucket, index, query, options={})
272
301
  backend do |b|
273
- b.get_index bucket, index, query
302
+ b.get_index bucket, index, query, options
274
303
  end
275
304
  end
276
305
 
306
+ # Get multiple objects in parallel.
307
+ def get_many(pairs)
308
+ Multiget.get_all self, pairs
309
+ end
310
+
277
311
  # Get an object. See Bucket#get
278
312
  def get_object(bucket, key, options = {})
313
+ raise ArgumentError, t("zero_length_key") if key == ''
279
314
  backend do |b|
280
315
  b.fetch_object(bucket, key, options)
281
316
  end
@@ -307,14 +342,14 @@ module Riak
307
342
  end
308
343
 
309
344
  # Retrieves a list of keys in the given bucket. See Bucket#keys
310
- def list_keys(bucket, &block)
345
+ def list_keys(bucket, options={}, &block)
311
346
  if block_given?
312
347
  backend do |b|
313
- b.list_keys bucket, &block
348
+ b.list_keys bucket, options, &block
314
349
  end
315
350
  else
316
351
  backend do |b|
317
- b.list_keys bucket
352
+ b.list_keys bucket, options
318
353
  end
319
354
  end
320
355
  end
@@ -0,0 +1,56 @@
1
+ module Riak
2
+ class Client
3
+ module BeefcakeMessageCodes
4
+ MESSAGE_TO_CODE = {
5
+ :ErrorResp => 0,
6
+ :PingReq => 1,
7
+ :PingResp => 2,
8
+ :GetClientIdReq => 3,
9
+ :GetClientIdResp => 4,
10
+ :SetClientIdReq => 5,
11
+ :SetClientIdResp => 6,
12
+ :GetServerInfoReq => 7,
13
+ :GetServerInfoResp => 8,
14
+ :GetReq => 9,
15
+ :GetResp => 10,
16
+ :PutReq => 11,
17
+ :PutResp => 12,
18
+ :DelReq => 13,
19
+ :DelResp => 14,
20
+ :ListBucketsReq => 15,
21
+ :ListBucketsResp => 16,
22
+ :ListKeysReq => 17,
23
+ :ListKeysResp => 18,
24
+ :GetBucketReq => 19,
25
+ :GetBucketResp => 20,
26
+ :SetBucketReq => 21,
27
+ :SetBucketResp => 22,
28
+ :MapRedReq => 23,
29
+ :MapRedResp => 24,
30
+ :IndexReq => 25,
31
+ :IndexResp => 26,
32
+ :SearchQueryReq => 27,
33
+ :SearchQueryResp => 28,
34
+ :ResetBucketReq => 29,
35
+ :ResetBucketResp => 30,
36
+ :CSBucketReq => 40,
37
+ :CSBucketResp => 41,
38
+ :CounterUpdateReq => 50,
39
+ :CounterUpdateResp => 51,
40
+ :CounterGetReq => 52,
41
+ :CounterGetResp => 53,
42
+ }
43
+
44
+ CODE_TO_MESSAGE = MESSAGE_TO_CODE.invert
45
+
46
+ # ugly shims
47
+ def self.index(message_name)
48
+ MESSAGE_TO_CODE[message_name]
49
+ end
50
+
51
+ def self.[](message_code)
52
+ CODE_TO_MESSAGE[message_code]
53
+ end
54
+ end
55
+ end
56
+ end
@@ -11,10 +11,90 @@ module Riak
11
11
  optional :value, :bytes, 2
12
12
  end
13
13
 
14
+ # module-function pair for commit hooks and other properties that take
15
+ # functions
16
+ class RpbModFun
17
+ include Beefcake::Message
18
+
19
+ required :module, :bytes, 1
20
+ required :function, :bytes, 2
21
+ end
22
+
23
+ class RpbCommitHook
24
+ include Beefcake::Message
25
+
26
+ optional :modfun, RpbModFun, 1
27
+ optional :name, :bytes, 2
28
+ end
29
+
14
30
  class RpbBucketProps
15
31
  include Beefcake::Message
16
- optional :n_val, :uint32, 1
17
- optional :allow_mult, :bool, 2
32
+
33
+ # riak_core_app
34
+ optional :n_val, :uint32, 1
35
+ optional :allow_mult, :bool, 2
36
+ optional :last_write_wins, :bool, 3
37
+
38
+ # riak_core values with special handling, see below
39
+ repeated :precommit, RpbCommitHook, 4
40
+ optional :has_precommit, :bool, 5, :default => false
41
+ repeated :postcommit, RpbCommitHook, 6
42
+ optional :has_postcommit, :bool, 7, :default => false
43
+
44
+ optional :chash_keyfun, RpbModFun, 8
45
+
46
+ # riak_kv_app
47
+ optional :linkfun, RpbModFun, 9
48
+ optional :old_vclock, :uint32, 10
49
+ optional :young_vclock, :uint32, 11
50
+ optional :big_vclock, :uint32, 12
51
+ optional :small_vclock, :uint32, 13
52
+ optional :pr, :uint32, 14
53
+ optional :r, :uint32, 15
54
+ optional :w, :uint32, 16
55
+ optional :pw, :uint32, 17
56
+ optional :dw, :uint32, 18
57
+ optional :rw, :uint32, 19
58
+ optional :basic_quorum, :bool, 20
59
+ optional :notfound_ok, :bool, 21
60
+
61
+ # riak_kv_multi_backend
62
+ optional :backend, :bytes, 22
63
+
64
+ # riak_search bucket fixup
65
+ optional :search, :bool, 23
66
+
67
+ module RpbReplMode
68
+ FALSE = 0
69
+ REALTIME = 1
70
+ FULLSYNC = 2
71
+ TRUE = 3
72
+ end
73
+
74
+ optional :repl, RpbReplMode, 24
75
+
76
+ # "repeated" elements with zero items are indistinguishable
77
+ # from a nil, so we have to manage has_precommit/has_postcommit
78
+ # flags.
79
+ def precommit=(newval)
80
+ @precommit = newval
81
+ @has_precommit = !!newval
82
+ end
83
+
84
+ def has_precommit=(newval)
85
+ @has_precommit = newval
86
+ @precommit ||= [] if newval
87
+ end
88
+
89
+ def postcommit=(newval)
90
+ @postcommit = newval
91
+ @has_postcommit = !!newval
92
+ end
93
+
94
+ def has_postcommit=(newval)
95
+ @has_postcommit = newval
96
+ @postcommit ||= [] if newval
97
+ end
18
98
  end
19
99
 
20
100
  class RpbLink
@@ -72,6 +152,9 @@ module Riak
72
152
  optional :if_modified, :bytes, 7
73
153
  optional :head, :bool, 8
74
154
  optional :deletedvclock, :bool, 9
155
+ optional :timeout, :uint32, 10
156
+ optional :sloppy_quorum, :bool, 11
157
+ optional :n_val, :uint32, 12
75
158
  end
76
159
 
77
160
  class RpbGetResp
@@ -94,6 +177,10 @@ module Riak
94
177
  optional :if_not_modified, :bool, 9
95
178
  optional :if_none_match, :bool, 10
96
179
  optional :return_head, :bool, 11
180
+ optional :timeout, :uint32, 12
181
+ optional :asis, :bool, 13
182
+ optional :sloppy_quorum, :bool, 14
183
+ optional :n_val, :uint32, 15
97
184
  end
98
185
 
99
186
  class RpbPutResp
@@ -105,25 +192,36 @@ module Riak
105
192
 
106
193
  class RpbDelReq
107
194
  include Beefcake::Message
108
- required :bucket, :bytes, 1
109
- required :key, :bytes, 2
110
- optional :rw, :uint32, 3
111
- optional :vclock, :bytes, 4
112
- optional :r, :uint32, 5
113
- optional :w, :uint32, 6
114
- optional :pr, :uint32, 7
115
- optional :pw, :uint32, 8
116
- optional :dw, :uint32, 9
195
+ required :bucket, :bytes, 1
196
+ required :key, :bytes, 2
197
+ optional :rw, :uint32, 3
198
+ optional :vclock, :bytes, 4
199
+ optional :r, :uint32, 5
200
+ optional :w, :uint32, 6
201
+ optional :pr, :uint32, 7
202
+ optional :pw, :uint32, 8
203
+ optional :dw, :uint32, 9
204
+ optional :timeout, :uint32, 10
205
+ optional :sloppy_quorum, :bool, 11
206
+ optional :n_val, :uint32, 12
207
+ end
208
+
209
+ class RpbListBucketsReq
210
+ include Beefcake::Message
211
+ optional :timeout, :uint32, 1
212
+ optional :stream, :bool, 2
117
213
  end
118
214
 
119
215
  class RpbListBucketsResp
120
216
  include Beefcake::Message
121
217
  repeated :buckets, :bytes, 1
218
+ optional :done, :bool, 2
122
219
  end
123
220
 
124
221
  class RpbListKeysReq
125
222
  include Beefcake::Message
126
223
  required :bucket, :bytes, 1
224
+ optional :timeout, :uint32, 2
127
225
  end
128
226
 
129
227
  class RpbListKeysResp
@@ -148,6 +246,11 @@ module Riak
148
246
  required :props, RpbBucketProps, 2
149
247
  end
150
248
 
249
+ class RpbResetBucketReq
250
+ include Beefcake::Message
251
+ required :bucket, :bytes, 1
252
+ end
253
+
151
254
  class RpbMapRedReq
152
255
  include Beefcake::Message
153
256
  required :request, :bytes, 1
@@ -168,17 +271,25 @@ module Riak
168
271
  RANGE = 1
169
272
  end
170
273
 
171
- required :bucket, :bytes, 1
172
- required :index, :bytes, 2
173
- required :qtype, IndexQueryType, 3
174
- optional :key, :bytes, 4
175
- optional :range_min, :bytes, 5
176
- optional :range_max, :bytes, 6
274
+ required :bucket, :bytes, 1
275
+ required :index, :bytes, 2
276
+ required :qtype, IndexQueryType, 3
277
+ optional :key, :bytes, 4
278
+ optional :range_min, :bytes, 5
279
+ optional :range_max, :bytes, 6
280
+ optional :return_terms, :bool, 7
281
+ optional :stream, :bool, 8
282
+ optional :max_results, :uint32, 9
283
+ optional :continuation, :bytes, 10
284
+ optional :timeout, :uint32, 11
177
285
  end
178
286
 
179
287
  class RpbIndexResp
180
288
  include Beefcake::Message
181
- repeated :keys, :bytes, 1
289
+ repeated :keys, :bytes, 1
290
+ repeated :results, RpbPair, 2
291
+ optional :continuation, :bytes, 3
292
+ optional :done, :bool, 4
182
293
  end
183
294
 
184
295
  class RpbSearchDoc
@@ -208,6 +319,67 @@ module Riak
208
319
  optional :max_score, :float, 2
209
320
  optional :num_found, :uint32, 3
210
321
  end
322
+
323
+ class RpbResetBucketReq
324
+ include Beefcake::Message
325
+ required :bucket, :bytes, 1
326
+ end
327
+
328
+ class RpbCSBucketReq
329
+ include Beefcake::Message
330
+ required :bucket, :bytes, 1
331
+ required :start_key, :bytes, 2
332
+ optional :end_key, :bytes, 3
333
+ optional :start_incl, :bool, 4, default: true
334
+ optional :end_incl, :bool, 5, default: false
335
+ optional :continuation, :bytes, 6
336
+ optional :max_results, :uint32, 7
337
+ optional :timeout, :uint32, 8
338
+ end
339
+
340
+ class RpbIndexObject
341
+ include Beefcake::Message
342
+ required :key, :bytes, 1
343
+ required :object, RpbGetResp, 2
344
+ end
345
+
346
+ class RpbCSBucketResp
347
+ include Beefcake::Message
348
+ repeated :objects, RpbIndexObject, 1
349
+ optional :continuation, :bytes, 2
350
+ optional :done, :bool, 3
351
+ end
352
+
353
+ class RpbCounterUpdateReq
354
+ include Beefcake::Message
355
+ required :bucket, :bytes, 1
356
+ required :key, :bytes, 2
357
+ required :amount, :sint64, 3
358
+ optional :w, :uint32, 4
359
+ optional :dw, :uint32, 5
360
+ optional :pw, :uint32, 6
361
+ optional :returnvalue, :bool, 7
362
+ end
363
+
364
+ class RpbCounterUpdateResp
365
+ include Beefcake::Message
366
+ optional :value, :sint64, 1
367
+ end
368
+
369
+ class RpbCounterGetReq
370
+ include Beefcake::Message
371
+ required :bucket, :bytes, 1
372
+ required :key, :bytes, 2
373
+ optional :r, :uint32, 3
374
+ optional :pr, :uint32, 4
375
+ optional :basic_quorum, :bool, 5
376
+ optional :notfound_ok, :bool, 6
377
+ end
378
+
379
+ class RpbCounterGetResp
380
+ include Beefcake::Message
381
+ optional :value, :sint64, 1
382
+ end
211
383
  end
212
384
  end
213
385
  end