teakflake 0.1.4 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dfb7cda8d44ef39be4aa9bea51b96e798f95116a951c26bba0af5d339e64f68e
4
- data.tar.gz: 5feb1b32b9ac97549e221459799faf90f4776c185c126d644e1c179fea115de9
3
+ metadata.gz: 560d11d7fe0fe920474447c525110c05643ca515c71a332cd42af17a752f2027
4
+ data.tar.gz: bfb71079d0bfaaaa1fb1aac85582c21cabeb58980c97a055056cb9432cdefabc
5
5
  SHA512:
6
- metadata.gz: 9e4c5cb314a56823e893f28a23a995f7d9efe6ee2acd3e6fa0cca16d666005c04a2184be8991ce41f01456afe495fdc31bd2f7d7412a0cc5bd391f25fb5149ca
7
- data.tar.gz: '019e1784b55b312ca54edd5d280d0dc39b17e0b25051a334af29488fce78475fc71a71cc8caf6d635e01373fe150da1d9912d698880cf119cdbbb8e9c12e42ff'
6
+ metadata.gz: baa8fb219bf903d62ecefddbcb94cd9f65139013482834236a25b72ced1ae4369493ec6824a20357fa873035ad51ecc607123a8d658cd01ddbfca59618be4ff3
7
+ data.tar.gz: 5637a46c5563314bda23987c3c57c6cefef238d5cb4801934e5e30850f61cc5a1843d99d3109054218d6c16d700ace81b5145b2ba27d35f613206a0fa02134f2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## 0.1.5
2
+
3
+ ENHANCEMENTS:
4
+
5
+ * `TEAKFLAKE_ADVERTISE_ADDR` (a bare host or IP) sets the advertised address. Without it, falls back to the hostname's canonname. (C-2042)
6
+ * Log the claimed worker id, advertised URL and every peer after registering. (C-2045)
7
+
8
+ BUG FIXES:
9
+
10
+ * Declare `logger` and `benchmark`, which zookeeper requires without declaring and Ruby 4.0 dropped from the default gems. Raise the rack floor to 2.2.24. (C-2024)
11
+
1
12
  ## 0.1.4
2
13
 
3
14
  BUG FIXES:
data/Gemfile.lock CHANGED
@@ -1,29 +1,35 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- teakflake (0.1.4)
4
+ teakflake (0.1.5)
5
+ benchmark
6
+ logger
5
7
  logsformyfamily (~> 0.3.0)
6
- rack (~> 2.2, >= 2.2.3.1)
8
+ rack (~> 2.2, >= 2.2.24)
7
9
  zk (~> 1.10)
8
10
 
9
11
  GEM
10
12
  remote: https://rubygems.org/
11
13
  specs:
12
- addressable (2.8.0)
13
- public_suffix (>= 2.0.2, < 5.0)
14
+ addressable (2.9.1)
15
+ public_suffix (>= 2.0.2, < 8.0)
16
+ benchmark (0.5.0)
14
17
  benchmark-ips (2.10.0)
15
- crack (0.4.5)
18
+ bigdecimal (4.1.3)
19
+ crack (1.0.1)
20
+ bigdecimal
16
21
  rexml
17
22
  diff-lcs (1.5.0)
18
23
  docile (1.4.0)
19
- hashdiff (1.0.1)
24
+ hashdiff (1.2.1)
25
+ logger (1.7.0)
20
26
  logsformyfamily (0.3.0)
21
- public_suffix (4.0.7)
22
- rack (2.2.3.1)
27
+ public_suffix (7.0.5)
28
+ rack (2.2.25)
23
29
  rack-test (1.1.0)
24
30
  rack (>= 1.0, < 3)
25
31
  rake (13.0.6)
26
- rexml (3.2.5)
32
+ rexml (3.4.4)
27
33
  rspec (3.11.0)
28
34
  rspec-core (~> 3.11.0)
29
35
  rspec-expectations (~> 3.11.0)
@@ -44,7 +50,7 @@ GEM
44
50
  simplecov-html (0.12.3)
45
51
  simplecov_json_formatter (0.1.4)
46
52
  stackprof (0.2.19)
47
- webmock (3.14.0)
53
+ webmock (3.34.0)
48
54
  addressable (>= 2.8.0)
49
55
  crack (>= 0.3.2)
50
56
  hashdiff (>= 0.4.0, < 2.0.0)
@@ -68,7 +68,7 @@ module Teakflake
68
68
  ZK::Client::Threaded.new(config[:zookeeper_servers].join(',')),
69
69
  config[:datacenter_id],
70
70
  ENV['WORKER_ID'].to_i,
71
- "http://#{Addrinfo.getaddrinfo(@hostname, nil, nil, :STREAM,nil, Socket::AI_CANONNAME).first.canonname}:#{config[:server_port]}",
71
+ advertise_addr,
72
72
  ProcessClock.new
73
73
  )
74
74
  id_assigner.sanity_check_peers
@@ -90,6 +90,16 @@ module Teakflake
90
90
 
91
91
  private
92
92
 
93
+ # TEAKFLAKE_ADVERTISE_ADDR is a bare host or IP. Without it we advertise the hostname's canonname, which
94
+ # only resolves for peers if the host's resolver/hosts file says so.
95
+ def advertise_addr
96
+ host = ENV['TEAKFLAKE_ADVERTISE_ADDR'].to_s.strip
97
+ if host.empty?
98
+ host = Addrinfo.getaddrinfo(@hostname, nil, nil, :STREAM, nil, Socket::AI_CANONNAME).first.canonname
99
+ end
100
+ "http://#{host}:#{config[:server_port]}"
101
+ end
102
+
93
103
  POST_BODY = 'rack.input'.freeze
94
104
  FORM_INPUT = 'rack.request.form_input'.freeze
95
105
  FORM_HASH = 'rack.request.form_hash'.freeze
@@ -15,5 +15,5 @@
15
15
  # limitations under the License.
16
16
 
17
17
  module Teakflake
18
- VERSION = "0.1.4"
18
+ VERSION = "0.1.5"
19
19
  end
@@ -55,6 +55,7 @@ module Teakflake
55
55
  end
56
56
  @id_registered = true
57
57
  logger.info(:claimed_worker_id, id: @worker_id)
58
+ log_registration
58
59
  end
59
60
 
60
61
  def assert(_time)
@@ -102,7 +103,20 @@ module Teakflake
102
103
  JSON.parse(response.body).dig('response', 'ids', 0)
103
104
  end
104
105
 
106
+ # One line with everything needed to see what each node advertised, without reading ZK by hand.
107
+ def log_registration
108
+ logger.info(:registered_worker, id: @worker_id, addr: @addr, peers: read_peers)
109
+ rescue StandardError => e
110
+ logger.warning(:registered_worker_peers_unreadable, id: @worker_id, addr: @addr, message: e.message)
111
+ end
112
+
105
113
  def peers
114
+ found = read_peers
115
+ logger.info(:found_peers, peers: found)
116
+ found
117
+ end
118
+
119
+ def read_peers
106
120
  begin
107
121
  @zookeeper.get(@worker_id_zk_path)
108
122
  rescue ZK::Exceptions::NoNode
@@ -116,8 +130,6 @@ module Teakflake
116
130
  hash[child.to_i] = info[0]
117
131
  end
118
132
 
119
- logger.info(:found_peers, peers: peers)
120
-
121
133
  peers
122
134
  end
123
135
  end
data/teakflake.gemspec CHANGED
@@ -28,5 +28,8 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.add_dependency 'logsformyfamily', '~> 0.3.0'
30
30
  spec.add_dependency 'zk', '~> 1.10'
31
- spec.add_dependency 'rack', '~> 2.2', '>= 2.2.3.1'
31
+ spec.add_dependency 'rack', '~> 2.2', '>= 2.2.24'
32
+ # zookeeper 1.5.5 requires these without declaring them, and Ruby 4.0 dropped both from the default gems.
33
+ spec.add_dependency 'logger'
34
+ spec.add_dependency 'benchmark'
32
35
  end
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teakflake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Scarborough
8
+ autorequire:
8
9
  bindir: exe
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2026-10-31 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: logsformyfamily
@@ -46,7 +47,7 @@ dependencies:
46
47
  version: '2.2'
47
48
  - - ">="
48
49
  - !ruby/object:Gem::Version
49
- version: 2.2.3.1
50
+ version: 2.2.24
50
51
  type: :runtime
51
52
  prerelease: false
52
53
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,7 +57,36 @@ dependencies:
56
57
  version: '2.2'
57
58
  - - ">="
58
59
  - !ruby/object:Gem::Version
59
- version: 2.2.3.1
60
+ version: 2.2.24
61
+ - !ruby/object:Gem::Dependency
62
+ name: logger
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: benchmark
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ description:
60
90
  email:
61
91
  - alex@teak.io
62
92
  executables: []
@@ -90,6 +120,7 @@ metadata:
90
120
  homepage_uri: https://github.com/GoCarrot/teakflake
91
121
  source_code_uri: https://github.com/GoCarrot/teakflake
92
122
  changelog_uri: https://github.com/GoCarrot/teakflake/blob/main/CHANGELOG.md
123
+ post_install_message:
93
124
  rdoc_options: []
94
125
  require_paths:
95
126
  - lib
@@ -104,7 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
135
  - !ruby/object:Gem::Version
105
136
  version: '0'
106
137
  requirements: []
107
- rubygems_version: 3.7.2
138
+ rubygems_version: 3.5.22
139
+ signing_key:
108
140
  specification_version: 4
109
141
  summary: Generate Twitter Snowflake style ids.
110
142
  test_files: []