volcano-sdk 0.28.0 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/volcano/generated_transport.rb +6 -3
- data/lib/volcano/lock_response.rb +48 -0
- data/lib/volcano/locks.rb +57 -33
- data/lib/volcano/version.rb +1 -1
- data/lib/volcano.rb +2 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e946d4476603cf2c234194f51e63aadd8ca1327719bcae02bf098de61049b65b
|
|
4
|
+
data.tar.gz: 38d3aa7dbbc508796620f75285b2a483b70a9e2d49a255aded0dba3fa023334b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 014b16629b5d06e89d39f010b1c8cb550582f3f7f224b6c6911324c6b2b07196eed9729305c2edd623d6fbedb2ba12a9460d4d128bda61202c9c88874823fada
|
|
7
|
+
data.tar.gz: d98691e237fd5cdb277f701701e3549aa6e533179d36c0039e188a66143fe5992a1ac9565f210304704838d2e855a9512e9e2e60de7ec0b2abfa9a8a30ae4cb2
|
|
@@ -52,7 +52,9 @@ module Volcano
|
|
|
52
52
|
invoke do
|
|
53
53
|
apis = @api_factory.call(authorization)
|
|
54
54
|
body = Generated::ProjectLockLeaseRequest.new(ttl_seconds: ttl)
|
|
55
|
-
result = apis.locks.acquire_project_lock_with_http_info(
|
|
55
|
+
result = apis.locks.acquire_project_lock_with_http_info(
|
|
56
|
+
key, token, request_id, body, debug_return_type: 'Object'
|
|
57
|
+
)
|
|
56
58
|
data, status, headers = result
|
|
57
59
|
response(data, status, headers)
|
|
58
60
|
end
|
|
@@ -63,7 +65,8 @@ module Volcano
|
|
|
63
65
|
apis = @api_factory.call(authorization)
|
|
64
66
|
data, status, headers = apis.locks.get_project_lock_with_http_info(
|
|
65
67
|
key,
|
|
66
|
-
request_id
|
|
68
|
+
request_id,
|
|
69
|
+
debug_return_type: 'Object'
|
|
67
70
|
)
|
|
68
71
|
response(data, status, headers)
|
|
69
72
|
end
|
|
@@ -85,7 +88,7 @@ module Volcano
|
|
|
85
88
|
apis = @api_factory.call(authorization)
|
|
86
89
|
body = Generated::ProjectLockLeaseRequest.new(ttl_seconds: ttl)
|
|
87
90
|
result = apis.locks.renew_project_lock_with_http_info(
|
|
88
|
-
key, token, request_id, body
|
|
91
|
+
key, token, request_id, body, debug_return_type: 'Object'
|
|
89
92
|
)
|
|
90
93
|
data, status, headers = result
|
|
91
94
|
response(data, status, headers)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
module Volcano
|
|
6
|
+
# Validates lock response fields before creating public records.
|
|
7
|
+
module LockResponse
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
def parse_time(value)
|
|
11
|
+
return Time.iso8601(value) if value.is_a?(String)
|
|
12
|
+
return value if value.nil? || value.is_a?(Time)
|
|
13
|
+
|
|
14
|
+
raise Error::TransportError, 'invalid lock expiry'
|
|
15
|
+
rescue ArgumentError => e
|
|
16
|
+
raise Error::TransportError, 'invalid lock expiry', cause: e
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def required_time(value)
|
|
20
|
+
parse_time(value) || raise(Error::TransportError, 'invalid lock expiry')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def lock_payload(body)
|
|
24
|
+
raise Error::TransportError, 'invalid lock response' unless body.is_a?(Hash)
|
|
25
|
+
|
|
26
|
+
body
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def lock_held(value)
|
|
30
|
+
return true if value == true
|
|
31
|
+
return false if value == false
|
|
32
|
+
|
|
33
|
+
raise Error::TransportError, 'invalid lock held flag'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def required_fencing_token(value)
|
|
37
|
+
raise Error::TransportError, 'invalid lock fencing token' unless value.is_a?(Integer)
|
|
38
|
+
|
|
39
|
+
value
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def optional_fencing_token(value)
|
|
43
|
+
return if value.nil?
|
|
44
|
+
|
|
45
|
+
required_fencing_token(value)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
data/lib/volcano/locks.rb
CHANGED
|
@@ -7,6 +7,7 @@ module Volcano
|
|
|
7
7
|
# Acquires and releases project-scoped distributed locks.
|
|
8
8
|
class Locks
|
|
9
9
|
include LockAutoRenewal
|
|
10
|
+
include LockResponse
|
|
10
11
|
|
|
11
12
|
def initialize(client, transport)
|
|
12
13
|
@client = client
|
|
@@ -14,80 +15,103 @@ module Volcano
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def get(key, request_id: nil)
|
|
17
|
-
payload =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
)
|
|
18
|
+
payload = lock_payload(perform_request(200) do
|
|
19
|
+
@transport.get_project_lock(
|
|
20
|
+
authorization: @client.service_token, key: key, request_id: request_uuid(request_id, 'request_id')
|
|
21
|
+
)
|
|
22
|
+
end)
|
|
23
|
+
build_state(payload)
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def acquire(key, ttl:, token: nil, request_id: nil)
|
|
26
27
|
validate_ttl(ttl)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
payload = acquire_payload(
|
|
32
|
-
|
|
28
|
+
authorization = @client.service_token.dup.freeze
|
|
29
|
+
owned_key = key.dup.freeze
|
|
30
|
+
owned_token = request_uuid(token, 'token')
|
|
31
|
+
owned_request_id = request_uuid(request_id, 'request_id')
|
|
32
|
+
payload = acquire_payload(
|
|
33
|
+
authorization: authorization, key: owned_key, ttl: ttl, token: owned_token, request_id: owned_request_id
|
|
34
|
+
)
|
|
35
|
+
build_lease(owned_key, owned_token, payload)
|
|
33
36
|
end
|
|
34
37
|
|
|
35
38
|
def renew(key, lease, ttl:, request_id: nil)
|
|
36
39
|
validate_ttl(ttl)
|
|
37
|
-
payload =
|
|
38
|
-
|
|
40
|
+
payload = lock_payload(perform_request(200) do
|
|
41
|
+
@transport.renew_project_lock(
|
|
42
|
+
authorization: @client.service_token, key: key, ttl: ttl,
|
|
43
|
+
token: lease.token, request_id: request_uuid(request_id, 'request_id')
|
|
44
|
+
)
|
|
45
|
+
end)
|
|
39
46
|
build_lease(key, lease.token, payload)
|
|
40
47
|
end
|
|
41
48
|
|
|
42
49
|
def release(key, lease, request_id: nil)
|
|
43
|
-
|
|
50
|
+
perform_request(204) do
|
|
51
|
+
@transport.release_project_lock(
|
|
52
|
+
authorization: @client.service_token, key: key, token: lease.token,
|
|
53
|
+
request_id: request_uuid(request_id, 'request_id')
|
|
54
|
+
)
|
|
55
|
+
end
|
|
44
56
|
nil
|
|
45
57
|
end
|
|
46
58
|
|
|
47
59
|
def force_release(key, request_id: nil)
|
|
48
|
-
|
|
60
|
+
perform_request(204) do
|
|
61
|
+
@transport.force_release_project_lock(
|
|
62
|
+
authorization: @client.service_token, key: key, request_id: request_uuid(request_id, 'request_id')
|
|
63
|
+
)
|
|
64
|
+
end
|
|
49
65
|
nil
|
|
50
66
|
end
|
|
51
67
|
|
|
52
68
|
private
|
|
53
69
|
|
|
54
|
-
def acquire_payload(
|
|
55
|
-
perform_request(
|
|
70
|
+
def acquire_payload(authorization:, key:, ttl:, token:, request_id:)
|
|
71
|
+
lock_payload(perform_request(201) do
|
|
72
|
+
@transport.acquire_project_lock(authorization: authorization, key: key, ttl: ttl,
|
|
73
|
+
token: token, request_id: request_id)
|
|
74
|
+
end)
|
|
56
75
|
rescue Error::TransportError, Error::ServerError => e
|
|
57
76
|
raise unless e.status.nil? || e.status == 503
|
|
58
77
|
|
|
59
|
-
perform_request(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
parameters[:authorization] = @client.service_token
|
|
64
|
-
parameters[:request_id] = request_uuid(parameters[:request_id], 'request_id')
|
|
65
|
-
perform_request(operation, status, parameters)
|
|
78
|
+
lock_payload(perform_request(201) do
|
|
79
|
+
@transport.acquire_project_lock(authorization: authorization, key: key, ttl: ttl,
|
|
80
|
+
token: token, request_id: request_id)
|
|
81
|
+
end)
|
|
66
82
|
end
|
|
67
83
|
|
|
68
|
-
def perform_request(
|
|
69
|
-
response = Transport.invoke
|
|
84
|
+
def perform_request(status, &)
|
|
85
|
+
response = Transport.invoke(&)
|
|
70
86
|
Transport.body(response, status)
|
|
71
87
|
end
|
|
72
88
|
|
|
73
89
|
def request_uuid(value, name)
|
|
74
90
|
return SecureRandom.uuid.freeze if value.nil?
|
|
75
91
|
|
|
76
|
-
|
|
77
|
-
|
|
92
|
+
unless value.is_a?(String) && value.match?(/\A[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}\z/i)
|
|
93
|
+
raise ArgumentError, "#{name} must be a UUID string"
|
|
94
|
+
end
|
|
78
95
|
|
|
79
96
|
value.dup.freeze
|
|
80
97
|
end
|
|
81
98
|
|
|
82
99
|
def build_lease(key, token, payload)
|
|
83
100
|
LockLease.new(
|
|
84
|
-
key: key, token: token, expires_at:
|
|
85
|
-
fencing_token: payload['fencing_token']
|
|
101
|
+
key: key, token: token, expires_at: required_time(payload['expires_at']),
|
|
102
|
+
fencing_token: required_fencing_token(payload['fencing_token'])
|
|
86
103
|
)
|
|
87
104
|
end
|
|
88
105
|
|
|
89
|
-
def
|
|
90
|
-
|
|
106
|
+
def build_state(payload)
|
|
107
|
+
held = lock_held(payload['held'])
|
|
108
|
+
expiry = held ? required_time(payload['expires_at']) : parse_time(payload['expires_at'])
|
|
109
|
+
fencing = if held
|
|
110
|
+
required_fencing_token(payload['fencing_token'])
|
|
111
|
+
else
|
|
112
|
+
optional_fencing_token(payload['fencing_token'])
|
|
113
|
+
end
|
|
114
|
+
LockState.new(held: held, expires_at: expiry, fencing_token: fencing)
|
|
91
115
|
end
|
|
92
116
|
end
|
|
93
117
|
end
|
data/lib/volcano/version.rb
CHANGED
data/lib/volcano.rb
CHANGED
|
@@ -50,6 +50,7 @@ require_relative 'volcano/lock_guard'
|
|
|
50
50
|
require_relative 'volcano/lock_renewer'
|
|
51
51
|
require_relative 'volcano/lock_session'
|
|
52
52
|
require_relative 'volcano/lock_auto_renewal'
|
|
53
|
+
require_relative 'volcano/lock_response'
|
|
53
54
|
require_relative 'volcano/locks'
|
|
54
55
|
require_relative 'volcano/realtime/protocol'
|
|
55
56
|
require_relative 'volcano/realtime'
|
|
@@ -57,7 +58,7 @@ require_relative 'volcano/client'
|
|
|
57
58
|
|
|
58
59
|
# Public namespace for the Volcano Ruby SDK.
|
|
59
60
|
module Volcano
|
|
60
|
-
private_constant :GeneratedTransport, :LockAutoRenewal, :LockLeaseClock, :LockRenewer, :LockSession,
|
|
61
|
+
private_constant :GeneratedTransport, :LockAutoRenewal, :LockLeaseClock, :LockRenewer, :LockSession, :LockResponse,
|
|
61
62
|
:Redaction, :SessionOperations
|
|
62
63
|
|
|
63
64
|
Realtime.private_constant :Protocol, :ProtocolDispatch, :ProtocolPublicationDispatch, :ProtocolRecovery,
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: volcano-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.29.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kong
|
|
@@ -560,6 +560,7 @@ files:
|
|
|
560
560
|
- lib/volcano/lock_guard.rb
|
|
561
561
|
- lib/volcano/lock_lease_clock.rb
|
|
562
562
|
- lib/volcano/lock_renewer.rb
|
|
563
|
+
- lib/volcano/lock_response.rb
|
|
563
564
|
- lib/volcano/lock_session.rb
|
|
564
565
|
- lib/volcano/locks.rb
|
|
565
566
|
- lib/volcano/log_responses.rb
|