tigerbeetle 0.0.1 → 0.0.3
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/CHANGELOG.md +12 -0
- data/README.md +25 -0
- data/ext/tb_client/extconf.rb +3 -2
- data/ext/tb_client/pkg.tar.gz +0 -0
- data/lib/tigerbeetle/account.rb +3 -3
- data/lib/tigerbeetle/account_filter.rb +2 -2
- data/lib/tigerbeetle/atomic_counter.rb +14 -0
- data/lib/tigerbeetle/client.rb +10 -9
- data/lib/tigerbeetle/error.rb +4 -0
- data/lib/tigerbeetle/query_filter.rb +1 -1
- data/lib/tigerbeetle/transfer.rb +1 -1
- data/lib/tigerbeetle/version.rb +1 -1
- data/tigerbeetle.gemspec +4 -4
- metadata +20 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fcbf6ee3840a30076501bc9afa231f601b9ffcd3740ba476919014e18a1eaab
|
4
|
+
data.tar.gz: 44825b4988b8c928c6e85a79f6539111036eb07d0a6d92309d398747e288ac5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56c7c962577de854c3c9289450a05ee06ed462e7443c00c96d05c77ac2ba2d1c132931dbb8b5598a84bdca4b6a228b6c2459e3c371f3494eb1ab7536d10c25ef
|
7
|
+
data.tar.gz: a634fb7d8f076208498a75c6dae6946a6961f27d40515d1567ff0537f9d609d6cd317e49573b555be268825a6fb1455329d21dbb8939161570c4a55a60744b96
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.0.3
|
4
|
+
|
5
|
+
- Bug fixes
|
6
|
+
- Based on TigerBeetle 0.16.40
|
7
|
+
|
8
|
+
## 0.0.2
|
9
|
+
|
10
|
+
- Non-optional fields no longer have default values
|
11
|
+
- Client errors are now `TigerBeetle::ClientError`
|
12
|
+
- Dependency versions corrected
|
13
|
+
- Fixed issue with in-flight requests
|
14
|
+
|
3
15
|
## 0.0.1
|
4
16
|
|
5
17
|
- First release
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Ruby Client for TigerBeetle
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/tigerbeetle)
|
3
4
|
[](https://github.com/antstorm/tigerbeetle-ruby/actions/workflows/ci.yml)
|
5
|
+
[](https://opensource.org/licenses/apache-2-0)
|
4
6
|
|
5
7
|
Are you looking to integrate [Tigebeetle](https://tigerbeetle.com/) into your Ruby (or Rails) stack?
|
6
8
|
You've come to the right place!
|
@@ -74,6 +76,29 @@ client.create_accounts(
|
|
74
76
|
*More on how to approach this — https://docs.tigerbeetle.com/coding/data-modeling/#id.*
|
75
77
|
|
76
78
|
|
79
|
+
## Async
|
80
|
+
|
81
|
+
All the lower level calls executed by the client are non-blocking. However, since async calls are
|
82
|
+
much less common in Ruby, these are made blocking by default. In order to use the client
|
83
|
+
asynchronously all you need to do is provide your own callback to any method on the client:
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
# default blocking call
|
87
|
+
result = client.lookup_accounts(100)
|
88
|
+
result # [#<struct TigerBeetle::Account id=100, ... >]
|
89
|
+
|
90
|
+
# async non-blocking call
|
91
|
+
client.lookup_accounts(100) do |result|
|
92
|
+
result # [#<struct TigerBeetle::Account id=100, ... >]
|
93
|
+
end
|
94
|
+
```
|
95
|
+
|
96
|
+
*In the example above the first call will block until TigerBeetle responds and the return value of
|
97
|
+
the call will contain the result. The second call however will return `nil` straight away (and keep
|
98
|
+
executing your code) while calling the provided block only once TigerBeetle has responded, passing
|
99
|
+
in the result as an argument to the block.*
|
100
|
+
|
101
|
+
|
77
102
|
## Contributing
|
78
103
|
|
79
104
|
We'd love your help building the TigerBeetle Ruby gem.
|
data/ext/tb_client/extconf.rb
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
require 'mkmf'
|
3
3
|
|
4
4
|
makefile_path = File.join('Makefile')
|
5
|
-
client_version = '0.16.
|
5
|
+
client_version = '0.16.40'
|
6
|
+
min_client_version = '0.16.37'
|
6
7
|
tar_package = 'pkg.tar.gz'
|
7
8
|
|
8
9
|
makefile = ''
|
@@ -12,7 +13,7 @@ if find_executable('zig') && File.exist?('./tigerbeetle/build.zig')
|
|
12
13
|
all:
|
13
14
|
\techo "Compiling native TB client from the source"
|
14
15
|
\tzig version
|
15
|
-
\tunset -v DESTDIR && cd ./tigerbeetle && zig build clients:c -Dconfig-release=#{client_version} -Dconfig-release-client-min=#{
|
16
|
+
\tunset -v DESTDIR && cd ./tigerbeetle && zig build clients:c -Dconfig-release=#{client_version} -Dconfig-release-client-min=#{min_client_version}
|
16
17
|
\n\n
|
17
18
|
install:
|
18
19
|
\tcp -rf ./tigerbeetle/src/clients/c/lib ./pkg
|
data/ext/tb_client/pkg.tar.gz
CHANGED
Binary file
|
data/lib/tigerbeetle/account.rb
CHANGED
@@ -6,7 +6,7 @@ module TigerBeetle
|
|
6
6
|
|
7
7
|
Account = Struct.new(*ACCOUNT_PARAMS) do
|
8
8
|
def initialize(
|
9
|
-
id
|
9
|
+
id:,
|
10
10
|
debits_pending: 0,
|
11
11
|
debits_posted: 0,
|
12
12
|
credits_pending: 0,
|
@@ -14,8 +14,8 @@ module TigerBeetle
|
|
14
14
|
user_data_128: 0,
|
15
15
|
user_data_64: 0,
|
16
16
|
user_data_32: 0,
|
17
|
-
ledger
|
18
|
-
code
|
17
|
+
ledger:,
|
18
|
+
code:,
|
19
19
|
flags: [],
|
20
20
|
timestamp: nil
|
21
21
|
)
|
@@ -5,14 +5,14 @@ module TigerBeetle
|
|
5
5
|
|
6
6
|
AccountFilter = Struct.new(*ACCOUNT_FILTER_PARAMS) do
|
7
7
|
def initialize(
|
8
|
-
account_id
|
8
|
+
account_id:,
|
9
9
|
user_data_128: 0,
|
10
10
|
user_data_64: 0,
|
11
11
|
user_data_32: 0,
|
12
12
|
code: 0,
|
13
13
|
timestamp_min: 0,
|
14
14
|
timestamp_max: 0,
|
15
|
-
limit
|
15
|
+
limit:,
|
16
16
|
flags: []
|
17
17
|
)
|
18
18
|
super(
|
data/lib/tigerbeetle/client.rb
CHANGED
@@ -4,17 +4,17 @@ require 'tigerbeetle/converters'
|
|
4
4
|
require 'tigerbeetle/account'
|
5
5
|
require 'tigerbeetle/account_balance'
|
6
6
|
require 'tigerbeetle/account_filter'
|
7
|
+
require 'tigerbeetle/atomic_counter'
|
8
|
+
require 'tigerbeetle/error'
|
7
9
|
require 'tigerbeetle/query_filter'
|
8
10
|
require 'tigerbeetle/request'
|
9
11
|
require 'tigerbeetle/transfer'
|
10
12
|
|
11
13
|
module TigerBeetle
|
12
14
|
class Client
|
13
|
-
# TODO: Make this counter atomic
|
14
|
-
@counter = 0
|
15
|
-
|
16
15
|
def self.next_id
|
17
|
-
@counter
|
16
|
+
@counter ||= AtomicCounter.new
|
17
|
+
@counter.increment
|
18
18
|
end
|
19
19
|
|
20
20
|
def initialize(cluster_id = 0, address = '3000')
|
@@ -35,7 +35,7 @@ module TigerBeetle
|
|
35
35
|
@client_id,
|
36
36
|
&@callback
|
37
37
|
)
|
38
|
-
raise "
|
38
|
+
raise ClientError, "Unable to initialize native client: #{status}" unless status == :SUCCESS
|
39
39
|
|
40
40
|
# Make sure to deinitialize all clients when the process terminates
|
41
41
|
at_exit { deinit }
|
@@ -46,7 +46,7 @@ module TigerBeetle
|
|
46
46
|
@log_callback = @logger ? Proc.new { |*args| log_callback(*args) } : nil
|
47
47
|
|
48
48
|
status = TBClient.tb_client_register_log_callback(@log_callback, true)
|
49
|
-
raise "
|
49
|
+
raise ClientError, "Unable to register logger: #{status}" unless status == :SUCCESS
|
50
50
|
end
|
51
51
|
|
52
52
|
def create_accounts(*accounts, &block)
|
@@ -131,6 +131,7 @@ module TigerBeetle
|
|
131
131
|
|
132
132
|
def deinit
|
133
133
|
return unless client
|
134
|
+
return unless inflight_requests.empty?
|
134
135
|
|
135
136
|
TBClient.tb_client_deinit(client)
|
136
137
|
@client = nil
|
@@ -152,13 +153,13 @@ module TigerBeetle
|
|
152
153
|
|
153
154
|
def callback(client_id, packet, timestamp, result_ptr, result_len)
|
154
155
|
request_id = packet[:user_data].read_uint64
|
155
|
-
request = inflight_requests
|
156
|
+
request = inflight_requests.delete(request_id)
|
156
157
|
result = deserialize(result_ptr, request.converter, result_len)
|
157
158
|
request.block.call(result)
|
158
159
|
end
|
159
160
|
|
160
161
|
def submit_request(operation, request, request_converter, response_converter, &block)
|
161
|
-
raise 'Client is not connected' unless client
|
162
|
+
raise ClientError, 'Client is not connected' unless client
|
162
163
|
|
163
164
|
request_id = self.class.next_id
|
164
165
|
user_data_ptr = FFI::MemoryPointer.new(:uint64, 1)
|
@@ -183,7 +184,7 @@ module TigerBeetle
|
|
183
184
|
end
|
184
185
|
|
185
186
|
status = TBClient.tb_client_submit(client, packet)
|
186
|
-
raise "Unable to submit request: #{status}" unless status == :OK
|
187
|
+
raise ClientError, "Unable to submit request: #{status}" unless status == :OK
|
187
188
|
|
188
189
|
# block until the client return a response
|
189
190
|
queue.pop unless block
|
data/lib/tigerbeetle/transfer.rb
CHANGED
data/lib/tigerbeetle/version.rb
CHANGED
data/tigerbeetle.gemspec
CHANGED
@@ -25,9 +25,9 @@ Gem::Specification.new do |spec|
|
|
25
25
|
'tigerbeetle.gemspec'
|
26
26
|
].flatten
|
27
27
|
|
28
|
-
spec.add_dependency 'ffi'
|
28
|
+
spec.add_dependency 'ffi', '~> 1.14'
|
29
29
|
|
30
|
-
spec.add_development_dependency 'rake'
|
31
|
-
spec.add_development_dependency 'rspec'
|
32
|
-
spec.add_development_dependency 'pry'
|
30
|
+
spec.add_development_dependency 'rake', '~> 13.1'
|
31
|
+
spec.add_development_dependency 'rspec', '~> 3.11'
|
32
|
+
spec.add_development_dependency 'pry', '~> 0.15'
|
33
33
|
end
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tigerbeetle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony D
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.14'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1.14'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.1'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.11'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.11'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '0.15'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '0.15'
|
69
69
|
description: A Ruby client for interacting with the high performance TigerBeetle ledger
|
70
70
|
email:
|
71
71
|
- anthony.dmitriyev@gmail.com
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- lib/tigerbeetle/account.rb
|
86
86
|
- lib/tigerbeetle/account_balance.rb
|
87
87
|
- lib/tigerbeetle/account_filter.rb
|
88
|
+
- lib/tigerbeetle/atomic_counter.rb
|
88
89
|
- lib/tigerbeetle/client.rb
|
89
90
|
- lib/tigerbeetle/converters.rb
|
90
91
|
- lib/tigerbeetle/converters/account.rb
|
@@ -97,6 +98,7 @@ files:
|
|
97
98
|
- lib/tigerbeetle/converters/time.rb
|
98
99
|
- lib/tigerbeetle/converters/transfer.rb
|
99
100
|
- lib/tigerbeetle/converters/uint_128.rb
|
101
|
+
- lib/tigerbeetle/error.rb
|
100
102
|
- lib/tigerbeetle/id.rb
|
101
103
|
- lib/tigerbeetle/query_filter.rb
|
102
104
|
- lib/tigerbeetle/request.rb
|