Class: Tarantool::Client

Inherits:
Object
  • Object
show all
Defined in:
tarantool-client/lib/tarantool/client.rb,
tarantool-client/lib/tarantool/client/row.rb,
tarantool-client/lib/tarantool/client/page.rb,
tarantool-client/lib/tarantool/client/pool.rb,
tarantool-client/lib/tarantool/client/uuid.rb,
tarantool-client/lib/tarantool/client/schema.rb,
tarantool-client/lib/tarantool/client/stream.rb,
tarantool-client/lib/tarantool/client/backoff.rb,
tarantool-client/lib/tarantool/client/version.rb,
tarantool-client/lib/tarantool/client/watcher.rb,
tarantool-client/lib/tarantool/client/interval.rb,
tarantool-client/lib/tarantool/client/watchers.rb,
tarantool-client/lib/tarantool/client/box_error.rb,
tarantool-client/lib/tarantool/client/index_info.rb,
tarantool-client/lib/tarantool/client/operations.rb,
tarantool-client/lib/tarantool/client/space_info.rb,
tarantool-client/lib/tarantool/client/sql_result.rb,
tarantool-client/lib/tarantool/client/diagnostics.rb,
tarantool-client/lib/tarantool/client/fork_safety.rb,
tarantool-client/lib/tarantool/client/pool/member.rb,
tarantool-client/lib/tarantool/client/thread_join.rb,
tarantool-client/lib/tarantool/client/tuple_shape.rb,
tarantool-client/lib/tarantool/client/batch_delete.rb,
tarantool-client/lib/tarantool/client/instrumented.rb,
tarantool-client/lib/tarantool/client/schema_cache.rb,
tarantool-client/lib/tarantool/client/configuration.rb,
tarantool-client/lib/tarantool/client/tuple_mapping.rb,
tarantool-client/lib/tarantool/client/callback_guard.rb,
tarantool-client/lib/tarantool/client/named_requests.rb,
tarantool-client/lib/tarantool/client/protocol/codec.rb,
tarantool-client/lib/tarantool/client/transport/link.rb,
tarantool-client/lib/tarantool/client/instrumentation.rb,
tarantool-client/lib/tarantool/client/pool/member_role.rb,
tarantool-client/lib/tarantool/client/transport/future.rb,
tarantool-client/lib/tarantool/client/protocol/greeting.rb,
tarantool-client/lib/tarantool/client/protocol/response.rb,
tarantool-client/lib/tarantool/client/transaction_scope.rb,
tarantool-client/lib/tarantool/client/prepared_statement.rb,
tarantool-client/lib/tarantool/client/protocol/constants.rb,
tarantool-client/lib/tarantool/client/transaction_schema.rb,
tarantool-client/lib/tarantool/client/transport/deadline.rb,
tarantool-client/lib/tarantool/client/protocol/extensions.rb,
tarantool-client/lib/tarantool/client/transport/handshake.rb,
tarantool-client/lib/tarantool/client/watchers/dispatcher.rb,
tarantool-client/lib/tarantool/client/protocol/requests/id.rb,
tarantool-client/lib/tarantool/client/transport/connection.rb,
tarantool-client/lib/tarantool/client/transport/link_state.rb,
tarantool-client/lib/tarantool/client/transport/stream_ids.rb,
tarantool-client/lib/tarantool/client/transport/timed_lock.rb,
tarantool-client/lib/tarantool/client/transport/timed_read.rb,
tarantool-client/lib/tarantool/client/transport/link_events.rb,
tarantool-client/lib/tarantool/client/protocol/requests/auth.rb,
tarantool-client/lib/tarantool/client/protocol/requests/call.rb,
tarantool-client/lib/tarantool/client/protocol/requests/eval.rb,
tarantool-client/lib/tarantool/client/protocol/requests/ping.rb,
tarantool-client/lib/tarantool/client/transport/frame_writer.rb,
tarantool-client/lib/tarantool/client/pool/member_fork_safety.rb,
tarantool-client/lib/tarantool/client/protocol/auth/chap_sha1.rb,
tarantool-client/lib/tarantool/client/protocol/requests/begin.rb,
tarantool-client/lib/tarantool/client/protocol/requests/watch.rb,
tarantool-client/lib/tarantool/client/transport/link_draining.rb,
tarantool-client/lib/tarantool/client/protocol/extensions/uuid.rb,
tarantool-client/lib/tarantool/client/protocol/requests/commit.rb,
tarantool-client/lib/tarantool/client/protocol/requests/delete.rb,
tarantool-client/lib/tarantool/client/protocol/requests/insert.rb,
tarantool-client/lib/tarantool/client/protocol/requests/select.rb,
tarantool-client/lib/tarantool/client/protocol/requests/update.rb,
tarantool-client/lib/tarantool/client/protocol/requests/upsert.rb,
tarantool-client/lib/tarantool/client/instrumentation/log_lines.rb,
tarantool-client/lib/tarantool/client/protocol/extensions/error.rb,
tarantool-client/lib/tarantool/client/protocol/requests/execute.rb,
tarantool-client/lib/tarantool/client/protocol/requests/prepare.rb,
tarantool-client/lib/tarantool/client/protocol/requests/replace.rb,
tarantool-client/lib/tarantool/client/protocol/requests/unwatch.rb,
tarantool-client/lib/tarantool/client/protocol/requests/rollback.rb,
tarantool-client/lib/tarantool/client/transport/pending_requests.rb,
tarantool-client/lib/tarantool/client/protocol/extensions/decimal.rb,
tarantool-client/lib/tarantool/client/protocol/extensions/datetime.rb,
tarantool-client/lib/tarantool/client/protocol/extensions/interval.rb,
tarantool-client/lib/tarantool/client/instrumentation/request_payload.rb,
tarantool-client/lib/tarantool/client/instrumentation/log_instrumenter.rb

Overview

Connection to one Tarantool instance. Safe to share between threads and fibers.

Defined Under Namespace

Classes: BoxError, Configuration, IndexInfo, Interval, Page, Pool, PreparedStatement, Row, SpaceInfo, SqlResult, Stream, UUID, Watcher

Constant Summary collapse

VERSION =
'0.3.2'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri = nil) ⇒ Client

Returns a new instance of Client.



103
104
105
106
107
108
109
110
111
112
# File 'tarantool-client/lib/tarantool/client.rb', line 103

def initialize(uri = nil, **)
  @config = Configuration.build(uri, **)
  @instrumentation = Instrumentation.build(@config)
  @pid = Process.pid
  @reinit_lock = Mutex.new
  open_link
rescue StandardError
  @link&.close
  raise
end

Instance Attribute Details

#config ⇒ Object (readonly)

Returns the value of attribute config.



96
97
98
# File 'tarantool-client/lib/tarantool/client.rb', line 96

def config
  @config
end

Instance Method Details

#close ⇒ Object



146
147
148
149
150
# File 'tarantool-client/lib/tarantool/client.rb', line 146

def close
  @link.close

  @watchers.close
end

#connected? ⇒ Boolean

Returns:

  • (Boolean)


119
120
121
# File 'tarantool-client/lib/tarantool/client.rb', line 119

def connected?
  @pid == Process.pid && @link.connected?
end

#inspect ⇒ Object



152
153
154
# File 'tarantool-client/lib/tarantool/client.rb', line 152

def inspect
  "#<#{self.class.name} #{@config.address}>"
end

#server_version ⇒ Object



114
115
116
117
# File 'tarantool-client/lib/tarantool/client.rb', line 114

def server_version
  ensure_fork_safe
  @link.greeting.version
end

#transaction(isolation: :default, timeout: nil, &block) ⇒ Object



123
124
125
126
127
128
129
130
131
132
# File 'tarantool-client/lib/tarantool/client.rb', line 123

def transaction(isolation: :default, timeout: nil, &block)
  ensure_fork_safe
  TransactionScope.enter(self) do
    stream = Stream.new(
      connection: @link.connection, schema_cache: @schema_cache, id: @stream_ids.next,
      request_timeout: @config.request_timeout, instrumentation: @instrumentation
    )
    stream.transaction(isolation:, timeout:, &block)
  end
end

#watch(key, &block) ⇒ Object

The block gets the current value first (nil if the key was never broadcast), then every change. It runs on a dispatcher thread shared by all watchers of this client, so a slow block delays the others; exceptions it raises are reported with warn. Calling #unwatch from another thread may still let one in-flight callback run. After a reconnect the block is called again with the current value.

Raises:

  • (ArgumentError)


139
140
141
142
143
144
# File 'tarantool-client/lib/tarantool/client.rb', line 139

def watch(key, &block)
  raise ArgumentError, 'watch requires a block' unless block

  ensure_fork_safe
  @watchers.add(key, block)
end