etcdv3 0.9.0 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -5
- data/README.md +5 -2
- data/Rakefile +3 -2
- data/lib/etcdv3/version.rb +1 -1
- data/lib/etcdv3/watch.rb +12 -4
- data/lib/etcdv3.rb +2 -2
- data/spec/etcdv3/watch_spec.rb +17 -0
- data/spec/etcdv3_spec.rb +14 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eea828b2c14cfeab2c0f9be8a84ea937131a5dc2
|
4
|
+
data.tar.gz: a2e02f9d0155f35185994c07cd7abc5a6d23d5df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bff96b426657924163a26df9ca1322b5600b33607453d4648affffe2e66bf7c7ef20e5fe2d0443435de71b74d9ceec637f968196315837426294d26dd1b84e78
|
7
|
+
data.tar.gz: 1a10f332e633b1010aba3a355b05ef82e2546e37413222de7553bcdb2461d0d2b368573af75a33e927349c4f461c81564d80adbe149ea7f6e5ac8b478158cc1e
|
data/.travis.yml
CHANGED
@@ -5,11 +5,9 @@ rvm:
|
|
5
5
|
- 2.3.8
|
6
6
|
|
7
7
|
env:
|
8
|
-
-
|
9
|
-
-
|
10
|
-
|
11
|
-
# locally for me)
|
12
|
-
# - ETCD_VERSION=v3.3.10
|
8
|
+
- ETCD_VERSION_TO_TEST=v3.1.20
|
9
|
+
- ETCD_VERSION_TO_TEST=v3.2.25
|
10
|
+
- ETCD_VERSION_TO_TEST=v3.3.10
|
13
11
|
|
14
12
|
install:
|
15
13
|
- bundle install
|
data/README.md
CHANGED
@@ -149,12 +149,15 @@ end
|
|
149
149
|
|
150
150
|
## Watch
|
151
151
|
```ruby
|
152
|
-
# Watch for changes on a specified key and return
|
153
|
-
events = conn.watch('foo')
|
152
|
+
# Watch for changes on a specified key for at most 10 seconds and return
|
153
|
+
events = conn.watch('foo', timeout: 10)
|
154
154
|
|
155
155
|
# Watch for changes on a specified key range and return
|
156
156
|
events = conn.watch('foo', range_end: 'fop')
|
157
157
|
|
158
|
+
# Watch for changes since a given revision
|
159
|
+
events = conn.watch('foo', start_revision: 42)
|
160
|
+
|
158
161
|
# Watches for changes continuously until killed.
|
159
162
|
event_count = 0
|
160
163
|
conn.watch('boom') do |events|
|
data/Rakefile
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
ETCD_VERSION = ENV["
|
4
|
-
ETCD_URL = "https://github.com/coreos/etcd/releases/download
|
3
|
+
ETCD_VERSION = ENV["ETCD_VERSION_TO_TEST"] || "v3.2.0"
|
4
|
+
ETCD_URL = "https://github.com/coreos/etcd/releases/download/" \
|
5
|
+
"#{ETCD_VERSION}/etcd-#{ETCD_VERSION}-linux-amd64.tar.gz"
|
5
6
|
|
6
7
|
require "tmpdir"
|
7
8
|
|
data/lib/etcdv3/version.rb
CHANGED
data/lib/etcdv3/watch.rb
CHANGED
@@ -1,16 +1,20 @@
|
|
1
1
|
class Etcdv3
|
2
2
|
class Watch
|
3
|
+
include GRPC::Core::TimeConsts
|
3
4
|
|
4
|
-
def initialize(hostname, credentials,
|
5
|
+
def initialize(hostname, credentials, timeout, metadata = {})
|
5
6
|
@stub = Etcdserverpb::Watch::Stub.new(hostname, credentials)
|
7
|
+
@timeout = timeout
|
6
8
|
@metadata = metadata
|
7
9
|
end
|
8
10
|
|
9
|
-
def watch(key, range_end, block)
|
10
|
-
create_req = Etcdserverpb::WatchCreateRequest.new(key: key
|
11
|
+
def watch(key, range_end, start_revision, block, timeout: nil)
|
12
|
+
create_req = Etcdserverpb::WatchCreateRequest.new(key: key)
|
13
|
+
create_req.range_end = range_end if range_end
|
14
|
+
create_req.start_revision = start_revision if start_revision
|
11
15
|
watch_req = Etcdserverpb::WatchRequest.new(create_request: create_req)
|
12
16
|
events = nil
|
13
|
-
@stub.watch([watch_req], metadata: @metadata).each do |resp|
|
17
|
+
@stub.watch([watch_req], metadata: @metadata, deadline: deadline(timeout)).each do |resp|
|
14
18
|
next if resp.events.empty?
|
15
19
|
if block
|
16
20
|
block.call(resp.events)
|
@@ -21,5 +25,9 @@ class Etcdv3
|
|
21
25
|
end
|
22
26
|
events
|
23
27
|
end
|
28
|
+
|
29
|
+
def deadline(timeout)
|
30
|
+
from_relative_time(timeout || @timeout)
|
31
|
+
end
|
24
32
|
end
|
25
33
|
end
|
data/lib/etcdv3.rb
CHANGED
@@ -219,8 +219,8 @@ class Etcdv3
|
|
219
219
|
end
|
220
220
|
|
221
221
|
# Watches for changes on a specified key range.
|
222
|
-
def watch(key, range_end:
|
223
|
-
@conn.handle(:watch, 'watch', [key, range_end, block])
|
222
|
+
def watch(key, range_end: nil, start_revision: nil, timeout: nil, &block)
|
223
|
+
@conn.handle(:watch, 'watch', [key, range_end, start_revision, block, timeout: timeout])
|
224
224
|
end
|
225
225
|
|
226
226
|
def transaction(timeout: nil, &block)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'securerandom'
|
3
|
+
|
4
|
+
# Locking is not implemented in etcd v3.1.X
|
5
|
+
unless $instance.version < Gem::Version.new("3.2.0")
|
6
|
+
describe Etcdv3::Watch do
|
7
|
+
let(:stub) { local_stub(Etcdv3::Watch, 1) }
|
8
|
+
let(:kv_stub) { local_stub(Etcdv3::KV, 1) }
|
9
|
+
|
10
|
+
context 'xxx' do
|
11
|
+
before(:each) do
|
12
|
+
kv_stub.put 'foo', 'bar'
|
13
|
+
end
|
14
|
+
it_should_behave_like "a method with a GRPC timeout", described_class, :watch, :watch, 'foo', "\0", 1, nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/etcdv3_spec.rb
CHANGED
@@ -181,6 +181,20 @@ describe Etcdv3 do
|
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|
184
|
+
describe '#watch' do
|
185
|
+
let!(:foo) { conn.put('foo', 'bar') }
|
186
|
+
subject { conn.watch('foo', start_revision: 1) }
|
187
|
+
it { is_expected.to_not be_nil }
|
188
|
+
it "raises a GRPC::DeadlineExceeded exception when it takes too long" do
|
189
|
+
expect do
|
190
|
+
conn.watch('foo', timeout: 0)
|
191
|
+
end.to raise_exception(GRPC::DeadlineExceeded)
|
192
|
+
end
|
193
|
+
it "accepts a timeout" do
|
194
|
+
expect{ conn.watch('foo', start_revision: 1, timeout: 10) }.to_not raise_exception
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
184
198
|
describe '#lease_keep_alive_once' do
|
185
199
|
let!(:lease_id) { conn.lease_grant(2)['ID'] }
|
186
200
|
subject { conn.lease_keep_alive_once(lease_id) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: etcdv3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shaun Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- spec/etcdv3/lease_spec.rb
|
115
115
|
- spec/etcdv3/lock_spec.rb
|
116
116
|
- spec/etcdv3/maintenance_spec.rb
|
117
|
+
- spec/etcdv3/watch_spec.rb
|
117
118
|
- spec/etcdv3_spec.rb
|
118
119
|
- spec/helpers/connections.rb
|
119
120
|
- spec/helpers/shared_examples_for_timeout.rb
|
@@ -151,6 +152,7 @@ test_files:
|
|
151
152
|
- spec/etcdv3/lease_spec.rb
|
152
153
|
- spec/etcdv3/lock_spec.rb
|
153
154
|
- spec/etcdv3/maintenance_spec.rb
|
155
|
+
- spec/etcdv3/watch_spec.rb
|
154
156
|
- spec/etcdv3_spec.rb
|
155
157
|
- spec/helpers/connections.rb
|
156
158
|
- spec/helpers/shared_examples_for_timeout.rb
|