tarantool16 0.0.8 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +9 -0
- data/lib/tarantool16/connection/common.rb +14 -2
- data/lib/tarantool16/connection/dumb.rb +32 -10
- data/lib/tarantool16/consts.rb +2 -0
- data/lib/tarantool16/db.rb +4 -13
- data/lib/tarantool16/version.rb +1 -1
- data/lib/tarantool16.rb +13 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 023336b8ef9383c64a2f05157b93a4184f22bcc1
|
4
|
+
data.tar.gz: e88b102d00165c541d9ff1a433e10ec54af97ada
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fffa01cb78d4571c93271018b724b152cdede06f781145365d09a2792e12c732a451b1a9c663e2fa6e98eb97e1395b4fd720b89821025c6a1501fbbc214f5864
|
7
|
+
data.tar.gz: 845c92f4ccba0b1e81fe2115b578d4d450bd64f4b7b2b113da8626824a0df3d1fbd169cd52db93220e1e922553971e6cdd4f19881418aaa5778f67ba9b40fb3b
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -29,6 +29,9 @@ require 'tarantool16'
|
|
29
29
|
|
30
30
|
db = Tarantool16.new host:'localhost:33013'
|
31
31
|
#db = Tarantool16.new host:'localhost:33013', user:'tester', password:'testpass'
|
32
|
+
#db = Tarantool16.new host:['tcp','localhost:33013']
|
33
|
+
#db = Tarantool16.new host:['unix','path/to.sock']
|
34
|
+
#db = Tarantool16.new unix:'path/to.sock'
|
32
35
|
|
33
36
|
# select from '_space' space info about 'test' table
|
34
37
|
# returns array of tuples as an array
|
@@ -71,6 +74,12 @@ tar.update(:_space, {name: 'test'}, {format: [:=, [{name: :id, type: :num}, {nam
|
|
71
74
|
|
72
75
|
## Changelog
|
73
76
|
|
77
|
+
0.0.11 - change a way of unix socket option.
|
78
|
+
since previos scheme were introduced 12 hours ago,
|
79
|
+
i think it is still safe to change it.
|
80
|
+
0.0.10 - a bit of fixes
|
81
|
+
0.0.9 - Fix detection of update operation shape
|
82
|
+
Add unix socket connection.
|
74
83
|
0.0.8 - Fix schema read from new tarantool versions
|
75
84
|
Implement UPSERT
|
76
85
|
0.0.7 - Implement EVAL, fix REPLACE
|
@@ -144,13 +144,25 @@ module Tarantool16
|
|
144
144
|
Option.error(sync, e, nil)
|
145
145
|
end
|
146
146
|
|
147
|
+
def _unix?
|
148
|
+
@host[0] == 'unix' || @host[0] == :unix
|
149
|
+
end
|
150
|
+
|
151
|
+
def _tcp?
|
152
|
+
@host[0] == 'tcp' || @host[0] == :tcp
|
153
|
+
end
|
154
|
+
|
155
|
+
def _unix_sock_path
|
156
|
+
@host[1]
|
157
|
+
end
|
158
|
+
|
147
159
|
def host_port
|
148
|
-
@host =~ /^(.*):([^:]+)$/
|
160
|
+
@host[1] =~ /^(.*):([^:]+)$/
|
149
161
|
[$1, $2.to_i]
|
150
162
|
end
|
151
163
|
|
152
164
|
def _ipv6?
|
153
|
-
@host.count(':') > 1
|
165
|
+
@host[1].count(':') > 1
|
154
166
|
end
|
155
167
|
|
156
168
|
def _insert(space_no, tuple, cb)
|
@@ -68,16 +68,23 @@ module Tarantool16
|
|
68
68
|
unless could_be_connected?
|
69
69
|
raise Disconnected, "connection is closed"
|
70
70
|
end
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
71
|
+
if _unix?
|
72
|
+
@socket = Socket.unix(_unix_sock_path)
|
73
|
+
elsif _tcp?
|
74
|
+
@socket = Socket.new((_ipv6? ? Socket::AF_INET6 : Socket::AF_INET), Socket::SOCK_STREAM)
|
75
|
+
@socket.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1)
|
76
|
+
@socket.sync = true
|
77
|
+
sockaddr = Socket.pack_sockaddr_in(*host_port.reverse)
|
78
|
+
@retry = @reconnect
|
79
|
+
if @timeout
|
80
|
+
_connect_nonblock(sockaddr)
|
81
|
+
else
|
82
|
+
@socket.connect(sockaddr)
|
83
|
+
end
|
78
84
|
else
|
79
|
-
@
|
85
|
+
raise "unsupported host option: #{@host.inspect}"
|
80
86
|
end
|
87
|
+
|
81
88
|
greeting = _read(IPROTO_GREETING_SIZE)
|
82
89
|
unless greeting && greeting.bytesize == IPROTO_GREETING_SIZE
|
83
90
|
raise Disconnected, "mailformed greeting #{greeting.inspect}"
|
@@ -124,7 +131,13 @@ module Tarantool16
|
|
124
131
|
req = req[n..-1]
|
125
132
|
end
|
126
133
|
rescue IO::WaitWritable
|
127
|
-
|
134
|
+
nf = now_f
|
135
|
+
if expire <= nf
|
136
|
+
raise Timeout, "response timeouted"
|
137
|
+
else
|
138
|
+
_wait_writable(expire - nf)
|
139
|
+
retry
|
140
|
+
end
|
128
141
|
rescue Errno::EINTR
|
129
142
|
retry
|
130
143
|
end
|
@@ -192,7 +205,16 @@ module Tarantool16
|
|
192
205
|
end
|
193
206
|
end
|
194
207
|
|
195
|
-
if
|
208
|
+
if (RUBY_VERSION.split('.').map(&:to_i) <=> [2,1]) >= 0
|
209
|
+
EXCEPTION_FALSE = {exception: false}.freeze
|
210
|
+
def _read_nonblock(n, buf)
|
211
|
+
if buf
|
212
|
+
@socket.read_nonblock(n, buf, EXCEPTION_FALSE)
|
213
|
+
else
|
214
|
+
@socket.read_nonblock(n, EXCEPTION_FALSE)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
elsif defined?(Kgio)
|
196
218
|
def _read_nonblock(n, buf)
|
197
219
|
return buf ? Kgio.tryread(@socket, n, buf) : Kgio.tryread(@socket, n)
|
198
220
|
end
|
data/lib/tarantool16/consts.rb
CHANGED
data/lib/tarantool16/db.rb
CHANGED
@@ -9,7 +9,6 @@ module Tarantool16
|
|
9
9
|
@future = nil
|
10
10
|
@spaces = nil
|
11
11
|
@defined_fields = {}
|
12
|
-
_fill_standard_spaces
|
13
12
|
@conn = self.class::Connection.new(@host, @opts)
|
14
13
|
end
|
15
14
|
|
@@ -28,14 +27,6 @@ module Tarantool16
|
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
31
|
-
def _fill_standard_spaces
|
32
|
-
rf = @defined_fields
|
33
|
-
rf[SPACE_INDEX] =
|
34
|
-
[%w{sid num}, %w{iid num}, %w{name str},
|
35
|
-
%w{type str}, %w{unique num}, %w{part_count num},
|
36
|
-
{name: 'parts', type: [:num, :str], tail: true}]
|
37
|
-
end
|
38
|
-
|
39
30
|
def _synchronized
|
40
31
|
raise "Override #_synchronized"
|
41
32
|
end
|
@@ -78,7 +69,7 @@ module Tarantool16
|
|
78
69
|
_synchronized do
|
79
70
|
_fill_spaces(r.data)
|
80
71
|
spaces = @spaces
|
81
|
-
_select(
|
72
|
+
_select(SPACE_VINDEX, 0, [], 0, 2**30, :all, false, fill_indexes)
|
82
73
|
end
|
83
74
|
end
|
84
75
|
end
|
@@ -96,7 +87,7 @@ module Tarantool16
|
|
96
87
|
end
|
97
88
|
end
|
98
89
|
end
|
99
|
-
_select(
|
90
|
+
_select(SPACE_VSPACE, 0, [], 0, 2**30, :all, false, fill_spaces)
|
100
91
|
return future
|
101
92
|
end
|
102
93
|
end
|
@@ -187,7 +178,7 @@ module Tarantool16
|
|
187
178
|
|
188
179
|
def _update(sno, ino, key, ops, need_hash, cb)
|
189
180
|
ino = 0 if ino.nil? && key.is_a?(Array)
|
190
|
-
ops_good = ops.is_a?(Array) && ops.all?{|a|
|
181
|
+
ops_good = ops.is_a?(Array) && ops.all?{|a| a[1].is_a?(Integer)}
|
191
182
|
if sno.is_a?(Integer) && ino.is_a?(Integer) && key.is_a?(Array) && ops_good
|
192
183
|
return conn._update(sno, ino, key, ops, cb)
|
193
184
|
end
|
@@ -202,7 +193,7 @@ module Tarantool16
|
|
202
193
|
|
203
194
|
def _upsert(sno, ino, tuple_key, ops, need_hash, cb)
|
204
195
|
ino = 0 if ino.nil?
|
205
|
-
ops_good = ops.is_a?(Array) && ops.all?{|a|
|
196
|
+
ops_good = ops.is_a?(Array) && ops.all?{|a| a[1].is_a?(Integer)}
|
206
197
|
if sno.is_a?(Integer) && ino.is_a?(Integer) && tuple_key.is_a?(Array) && ops_good
|
207
198
|
return conn._upsert(sno, ino, tuple_key, ops, cb)
|
208
199
|
end
|
data/lib/tarantool16/version.rb
CHANGED
data/lib/tarantool16.rb
CHANGED
@@ -5,7 +5,19 @@ module Tarantool16
|
|
5
5
|
autoload :DumbDB, 'tarantool16/dumb_db'
|
6
6
|
def self.new(opts = {})
|
7
7
|
opts = opts.dup
|
8
|
-
|
8
|
+
if opts[:unix] && opts[:host]
|
9
|
+
raise "`:host` and `:unix` options are mutually exclusive"
|
10
|
+
elsif opts[:unix]
|
11
|
+
hosts = ["unix", opts[:unix]]
|
12
|
+
elsif opts[:host]
|
13
|
+
host = opts[:host]
|
14
|
+
if Array === host
|
15
|
+
hosts = host
|
16
|
+
else
|
17
|
+
host = [host, opts[:port]].compact.join(':')
|
18
|
+
hosts = ["tcp", host]
|
19
|
+
end
|
20
|
+
end
|
9
21
|
type = opts[:type] && opts[:type].to_s || 'dumb'
|
10
22
|
case type
|
11
23
|
when 'dumb'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tarantool16
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sokolov Yura aka funny_falcon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|