Class: Couchbase::Bucket
- Inherits:
-
Object
- Object
- Couchbase::Bucket
- Includes:
- Async, Operations
- Defined in:
- lib/couchbase/bucket.rb
Instance Attribute Summary collapse
-
#bucket ⇒ Object
Returns the value of attribute bucket.
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#default_arithmetic_init ⇒ Object
Returns the value of attribute default_arithmetic_init.
-
#default_format ⇒ Object
readonly
Returns the value of attribute default_format.
-
#default_ttl ⇒ Object
Returns the value of attribute default_ttl.
-
#hostname ⇒ Object
Returns the value of attribute hostname.
-
#key_prefix ⇒ Object
readonly
Returns the value of attribute key_prefix.
-
#password ⇒ Object
Returns the value of attribute password.
-
#pool ⇒ Object
Returns the value of attribute pool.
-
#port ⇒ Object
Returns the value of attribute port.
-
#quiet ⇒ Object
Returns the value of attribute quiet.
-
#timeout ⇒ Object
Returns the value of attribute timeout.
-
#transcoder ⇒ Object
Returns the value of attribute transcoder.
-
#username ⇒ Object
Returns the value of attribute username.
Instance Method Summary collapse
- #authority ⇒ Object
- #base_url ⇒ Object
-
#cas(key, options = {}) {|value| ... } ⇒ Fixnum
(also: #compare_and_swap)
Compare and swap value.
- #connect ⇒ Object (also: #reconnect)
- #connected? ⇒ Boolean
-
#create_periodic_timer(interval, &block) ⇒ Couchbase::Timer
Create and register periodic timer.
-
#create_timer(interval, &block) ⇒ Couchbase::Timer
Create and register one-shot timer.
- #disconnect ⇒ Object
-
#flush {|ret| ... } ⇒ true
Delete contents of the bucket.
- #host ⇒ Object
-
#initialize(url = nil, options = {}) ⇒ Bucket
constructor
Initialize new Bucket.
-
#observe_and_wait(*keys, &block) ⇒ Fixnum, Hash<String, Fixnum>
Wait for persistence condition.
- #on_connect(&block) ⇒ Object
- #on_error(&block) ⇒ Object
- #quiet? ⇒ Boolean
- #url ⇒ Object
- #version ⇒ Object
Methods included from Async
#async, #async=, #async?, #async_queue, #end_async_queue, #run, #run_async, #running, #running=, #running?
Methods included from Operations
Constructor Details
#initialize(url, options = {}) ⇒ Bucket #initialize(options = {}) ⇒ Bucket
Initialize new Bucket.
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/couchbase/bucket.rb', line 119 def initialize(url = nil, = {}) = { type: nil, quiet: false, hostname: 'localhost', port: 8091, pool: 'default', bucket: 'default', password: '', engine: nil, default_ttl: 0, async: false, default_arithmetic_init: 0, default_flags: 0, default_format: :document, default_observe_timeout: 2500000, on_error: nil, on_connect: nil, timeout: 0, environment: nil, key_prefix: nil, node_list: nil, destroying: 0, connected: 0, on_connect_proc: nil, async_disconnect_hook_set: 0, connected: false } = if url.is_a? String fail ArgumentError.new unless url =~ /^http:\/\// uri = URI.new(url) { host: uri.host, port: uri.port, }.merge(path_to_pool_and_bucket(uri.path)) elsif url.nil? {} else url end = .merge().merge() .each_pair do |key, value| instance_variable_set("@#{key}", value) end @transcoders = { document: Transcoder::Document.new, marshal: Transcoder::Marshal.new, plain: Transcoder::Plain.new } @transcoder = @transcoders[@default_format] connect unless async? end |
Instance Attribute Details
#bucket ⇒ Object
Returns the value of attribute bucket.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def bucket @bucket end |
#client ⇒ Object (readonly)
Returns the value of attribute client.
25 26 27 |
# File 'lib/couchbase/bucket.rb', line 25 def client @client end |
#default_arithmetic_init ⇒ Object
Returns the value of attribute default_arithmetic_init.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def default_arithmetic_init @default_arithmetic_init end |
#default_format ⇒ Object (readonly)
Returns the value of attribute default_format.
25 26 27 |
# File 'lib/couchbase/bucket.rb', line 25 def default_format @default_format end |
#default_ttl ⇒ Object
Returns the value of attribute default_ttl.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def default_ttl @default_ttl end |
#hostname ⇒ Object
Returns the value of attribute hostname.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def hostname @hostname end |
#key_prefix ⇒ Object (readonly)
Returns the value of attribute key_prefix.
25 26 27 |
# File 'lib/couchbase/bucket.rb', line 25 def key_prefix @key_prefix end |
#password ⇒ Object
Returns the value of attribute password.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def password @password end |
#pool ⇒ Object
Returns the value of attribute pool.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def pool @pool end |
#port ⇒ Object
Returns the value of attribute port.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def port @port end |
#quiet ⇒ Object
Returns the value of attribute quiet.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def quiet @quiet end |
#timeout ⇒ Object
Returns the value of attribute timeout.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def timeout @timeout end |
#transcoder ⇒ Object
Returns the value of attribute transcoder.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def transcoder @transcoder end |
#username ⇒ Object
Returns the value of attribute username.
21 22 23 |
# File 'lib/couchbase/bucket.rb', line 21 def username @username end |
Instance Method Details
#authority ⇒ Object
211 212 213 |
# File 'lib/couchbase/bucket.rb', line 211 def "#{hostname}:#{port}" end |
#base_url ⇒ Object
215 216 217 |
# File 'lib/couchbase/bucket.rb', line 215 def base_url "http://#{authority}/pools" end |
#cas(key, options = {}) {|value| ... } ⇒ Fixnum Also known as: compare_and_swap
Compare and swap value.
Reads a key’s value from the server and yields it to a block. Replaces the key’s value with the result of the block as long as the key hasn’t been updated in the meantime, otherwise raises Error::KeyExists. CAS stands for “compare and swap”, and avoids the need for manual key mutexing. Read more info here:
In asynchronous mode it will yield result twice, first for Bucket#get with Result#operation equal to :get and second time for Bucket#set with Result#operation equal to :set.
314 315 316 317 318 319 320 321 322 323 324 325 326 |
# File 'lib/couchbase/bucket.rb', line 314 def cas(key, = {}) if async? block = Proc.new get(key) do |ret| val = block.call(ret) # get new value from caller set(ret.key, val, .merge(:cas => ret.cas, &block)) end else val, flags, ver = get(key, :extended => true) val = yield(val) # get new value from caller set(key, val, .merge(:cas => ver)) end end |
#connect ⇒ Object Also known as: reconnect
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/couchbase/bucket.rb', line 188 def connect uris = if @node_list Array(@node_list).map { |n| URI.new(n) } else Array(URI.new(base_url)) end begin builder = CouchbaseConnectionFactoryBuilder.new builder.setTranscoder(@transcoder) connection_factory = builder.buildCouchbaseConnection(uris, bucket.to_java_string, password.to_java_string) @client = CouchbaseClient.new(connection_factory) @connected = true rescue Java::ComCouchbaseClientVbucket::ConfigurationException fail Couchbase::Error::Auth rescue java.net.ConnectException => e fail Couchbase::Error::Connect end self end |
#connected? ⇒ Boolean
223 224 225 |
# File 'lib/couchbase/bucket.rb', line 223 def connected? @connected end |
#create_periodic_timer(interval, &block) ⇒ Couchbase::Timer
Create and register periodic timer
380 381 382 |
# File 'lib/couchbase/bucket.rb', line 380 def create_periodic_timer(interval, &block) Timer.new(self, interval, :periodic => true, &block) end |
#create_timer(interval, &block) ⇒ Couchbase::Timer
Create and register one-shot timer
373 374 375 |
# File 'lib/couchbase/bucket.rb', line 373 def create_timer(interval, &block) Timer.new(self, interval, &block) end |
#disconnect ⇒ Object
227 228 229 230 231 232 233 234 235 236 |
# File 'lib/couchbase/bucket.rb', line 227 def disconnect if connected? @client.shutdown(3, TimeUnit::SECONDS) @client = nil @connection_factory = nil @connected = false else fail Couchbase::Error::Connect end end |
#flush {|ret| ... } ⇒ true
Delete contents of the bucket
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 |
# File 'lib/couchbase/bucket.rb', line 354 def flush if !async? && block_given? sync_block_error end req = make_http_request("/pools/default/buckets/#{bucket}/controller/doFlush", :type => :management, :method => :post, :extended => true) res = nil req.on_body do |r| res = r res.instance_variable_set("@operation", :flush) yield(res) if block_given? end req.continue true end |
#host ⇒ Object
184 185 186 |
# File 'lib/couchbase/bucket.rb', line 184 def host hostname end |
#observe_and_wait(*keys, &block) ⇒ Fixnum, Hash<String, Fixnum>
Wait for persistence condition
This operation is useful when some confidence needed regarding the state of the keys. With two parameters :replicated and :persisted it allows to set up the waiting rule.
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 |
# File 'lib/couchbase/bucket.rb', line 408 def observe_and_wait(*keys, &block) = {:timeout => default_observe_timeout} .update(keys.pop) if keys.size > 1 && keys.last.is_a?(Hash) () if block && !async? raise ArgumentError, "synchronous mode doesn't support callbacks" end if keys.size == 0 raise ArgumentError, "at least one key is required" end if keys.size == 1 && keys[0].is_a?(Hash) key_cas = keys[0] else key_cas = keys.flatten.reduce({}) do |h, kk| h[kk] = nil # set CAS to nil h end end if async? do_observe_and_wait(key_cas, , &block) else res = do_observe_and_wait(key_cas, , &block) while res.nil? unless async? if keys.size == 1 && (keys[0].is_a?(String) || keys[0].is_a?(Symbol)) return res.values.first else return res end end end end |
#on_connect(&block) ⇒ Object
238 239 240 |
# File 'lib/couchbase/bucket.rb', line 238 def on_connect(&block) @on_connect = block end |
#on_error(&block) ⇒ Object
242 243 244 |
# File 'lib/couchbase/bucket.rb', line 242 def on_error(&block) @on_error = block end |
#quiet? ⇒ Boolean
180 181 182 |
# File 'lib/couchbase/bucket.rb', line 180 def quiet? !!quiet end |
#url ⇒ Object
219 220 221 |
# File 'lib/couchbase/bucket.rb', line 219 def url "http://#{authority}/pools/#{pool}/buckets/#{bucket}/" end |
#version ⇒ Object
246 247 248 249 250 251 252 |
# File 'lib/couchbase/bucket.rb', line 246 def version {}.tap do |hash| @client.getVersions.to_hash.each_pair do |ip, ver| hash[ip.to_s] = ver end end end |