Class: Couchbase::Management::QueryIndexManager

Inherits:
Object
  • Object
show all
Defined in:
lib/couchbase/management/query_index_manager.rb,
/Users/sergey.auseyau/code/couchbase-ruby-client/lib/couchbase/management/query_index_manager.rb
more...

Instance Method Summary collapse

Constructor Details

#initialize(backend) ⇒ QueryIndexManager

Returns a new instance of QueryIndexManager.

Parameters:

  • backend (Couchbase::Backend)
[View source]

333
334
335
# File 'lib/couchbase/management/query_index_manager.rb', line 333

def initialize(backend)
  @backend = backend
end

Instance Method Details

#build_deferred_indexes(bucket_name, options = Options::Query::BuildDeferredIndexes.new) ⇒ Object

Build all indexes which are currently in deferred state

Parameters:

Returns:

  • void

Raises:

  • (ArgumentError)
[View source]

442
443
444
# File 'lib/couchbase/management/query_index_manager.rb', line 442

def build_deferred_indexes(bucket_name, options = Options::Query::BuildDeferredIndexes.new)
  @backend.query_index_build_deferred(bucket_name, options.to_backend)
end

#create_index(bucket_name, index_name, fields, options = Options::Query::CreateIndex.new) ⇒ Object

Creates a new index

Parameters:

  • bucket_name (String)

    name of the bucket

  • index_name (String)

    name of the index

  • fields (Array<String>)

    the lists of fields to create th index over

  • options (Options::Query::CreateIndex) (defaults to: Options::Query::CreateIndex.new)

Returns:

  • void

Raises:

[View source]

374
375
376
377
378
379
380
# File 'lib/couchbase/management/query_index_manager.rb', line 374

def create_index(bucket_name, index_name, fields, options = Options::Query::CreateIndex.new)
  unless options.scope_name.nil? && options.collection_name.nil?
    warn "The attributes 'scope_name' and 'collection_name' have been deprecated. Use 'collection.query_indexes' instead"
  end

  @backend.query_index_create(bucket_name, index_name, fields, options.to_backend)
end

#create_primary_index(bucket_name, options = Options::Query::CreatePrimaryIndex.new) ⇒ Object

Creates new primary index

Parameters:

Returns:

  • void

Raises:

[View source]

391
392
393
394
395
396
397
# File 'lib/couchbase/management/query_index_manager.rb', line 391

def create_primary_index(bucket_name, options = Options::Query::CreatePrimaryIndex.new)
  unless options.scope_name.nil? && options.collection_name.nil?
    warn "The attributes 'scope_name' and 'collection_name' have been deprecated. Use 'collection.query_indexes' instead"
  end

  @backend.query_index_create_primary(bucket_name, options.to_backend)
end

#drop_index(bucket_name, index_name, options = Options::Query::DropIndex.new) ⇒ Object

Drops the index

Parameters:

  • bucket_name (String)

    name of the bucket

  • index_name (String)

    name of the index

  • options (Options::Query::DropIndex) (defaults to: Options::Query::DropIndex.new)

Returns:

  • void

Raises:

[View source]

409
410
411
412
413
414
415
# File 'lib/couchbase/management/query_index_manager.rb', line 409

def drop_index(bucket_name, index_name, options = Options::Query::DropIndex.new)
  unless options.scope_name.nil? && options.collection_name.nil?
    warn "The attributes 'scope_name' and 'collection_name' have been deprecated. Use 'collection.query_indexes' instead"
  end

  @backend.query_index_drop(bucket_name, index_name, options.to_backend)
end

#drop_primary_index(bucket_name, options = Options::Query::DropPrimaryIndex.new) ⇒ Object

Drops the primary index

Parameters:

Returns:

  • void

Raises:

[View source]

426
427
428
429
430
431
432
# File 'lib/couchbase/management/query_index_manager.rb', line 426

def drop_primary_index(bucket_name, options = Options::Query::DropPrimaryIndex.new)
  unless options.scope_name.nil? && options.collection_name.nil?
    warn "The attributes 'scope_name' and 'collection_name' have been deprecated. Use 'collection.query_indexes' instead"
  end

  @backend.query_index_drop_primary(bucket_name, options.to_backend)
end

#get_all_indexes(bucket_name, options = GetAllIndexOptions.new) ⇒ Array<QueryIndex>

Fetches all indexes from the server

Parameters:

Returns:

Raises:

  • (ArgumentError)
[View source]

345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
# File 'lib/couchbase/management/query_index_manager.rb', line 345

def get_all_indexes(bucket_name, options = GetAllIndexOptions.new)
  res = @backend.query_index_get_all(bucket_name, options.to_backend)
  res[:indexes].map do |idx|
    QueryIndex.new do |index|
      index.name = idx[:name]
      index.is_primary = idx[:is_primary]
      index.type = idx[:type]
      index.state = idx[:state]
      index.bucket = idx[:bucket_name]
      index.scope = idx[:scope_name]
      index.collection = idx[:collection_name]
      index.index_key = idx[:index_key]
      index.condition = idx[:condition]
      index.partition = idx[:partition]
    end
  end
end

#watch_indexes(bucket_name, index_names, timeout, options = Options::Query::WatchIndexes.new) ⇒ Object

Polls indexes until they are online

Parameters:

  • bucket_name (String)

    name of the bucket

  • index_names (Array<String>)

    names of the indexes to watch

  • timeout (Integer, #in_milliseconds)

    the time in milliseconds allowed for the operation to complete

  • options (Options::Query::WatchIndexes) (defaults to: Options::Query::WatchIndexes.new)

Raises:

[View source]

455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
# File 'lib/couchbase/management/query_index_manager.rb', line 455

def watch_indexes(bucket_name, index_names, timeout, options = Options::Query::WatchIndexes.new)
  index_names.append("#primary") if options.watch_primary

  interval_millis = 50
  deadline = Time.now + (Utils::Time.extract_duration(timeout) * 0.001)
  while Time.now <= deadline
    get_all_opts = Options::Query::GetAllIndexes.new(timeout: ((deadline - Time.now) * 1000).round)
    indexes = get_all_indexes(bucket_name, get_all_opts).select { |idx| index_names.include? idx.name }
    indexes_not_found = index_names - indexes.map(&:name)
    raise Error::IndexNotFound, "Failed to find the indexes: #{indexes_not_found.join(', ')}" unless indexes_not_found.empty?

    all_online = indexes.all? { |idx| idx.state == :online }
    return if all_online

    sleep(interval_millis / 1000)
    interval_millis += 500
    interval_millis = 1000 if interval_millis > 1000
  end
  raise Error::UnambiguousTimeout, "Failed to find all indexes online within the allotted time"
end