prefab-cloud-ruby 0.1.0.alpha.1 → 0.1.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/Gemfile.lock +1 -0
- data/VERSION +1 -1
- data/lib/prefab/config_client.rb +45 -15
- data/lib/prefab_services_pb.rb +1 -0
- data/prefab-cloud-ruby.gemspec +4 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94cbcb0db8e1be133abd5efbc497294d71eec1b4
|
4
|
+
data.tar.gz: e2f60e29eed939c71fc4af3182b71bd6d0142536
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7594ed51141560a0b56cba64a5fe70cf85afd573cf1c2eeb5a313099b95e15fa75dad118e7e48ad269dacb790adb8d8a30419f8cdaf02dfebcf038b7b68ba77f
|
7
|
+
data.tar.gz: 7ad375b5f83327dd58ecd063fe1c094c0e471189cf274165e59936f1ac416c515bbceecd8753f3652d6d2d0a5ebb9dcdf70993ad5804edf5fa4d14214650d2a5
|
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.0
|
1
|
+
0.1.0
|
data/lib/prefab/config_client.rb
CHANGED
@@ -8,7 +8,7 @@ module Prefab
|
|
8
8
|
@timeout = timeout
|
9
9
|
@initialization_lock = Concurrent::ReadWriteLock.new
|
10
10
|
|
11
|
-
@checkpoint_freq_secs =
|
11
|
+
@checkpoint_freq_secs = DEFAULT_CHECKPOINT_FREQ_SEC
|
12
12
|
|
13
13
|
@config_loader = Prefab::ConfigLoader.new(@base_client)
|
14
14
|
@config_resolver = Prefab::ConfigResolver.new(@base_client, @config_loader)
|
@@ -70,24 +70,53 @@ module Prefab
|
|
70
70
|
# Bootstrap out of the cache
|
71
71
|
# returns the high-watermark of what was in the cache
|
72
72
|
def load_checkpoint
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
@base_client.log_internal Logger::INFO, "Found checkpoint with highwater id #{@config_loader.highwater_mark}"
|
80
|
-
@base_client.stats.increment("prefab.config.checkpoint.load")
|
81
|
-
@config_resolver.update
|
82
|
-
finish_init!
|
73
|
+
|
74
|
+
success = load_checkpoint_from_config
|
75
|
+
|
76
|
+
if !success
|
77
|
+
@base_client.log_internal Logger::INFO, "Fallback to S3"
|
78
|
+
load_checkpoint_from_s3
|
83
79
|
end
|
84
80
|
|
85
|
-
rescue Aws::S3::Errors::NoSuchKey
|
86
|
-
@base_client.log_internal Logger::INFO, "No checkpoint"
|
87
81
|
rescue => e
|
88
82
|
@base_client.log_internal Logger::WARN, "Unexpected problem loading checkpoint #{e}"
|
89
83
|
end
|
90
84
|
|
85
|
+
def load_checkpoint_from_config
|
86
|
+
config_req = Prefab::ConfigServicePointer.new(account_id: @base_client.account_id,
|
87
|
+
start_at_id: @config_loader.highwater_mark)
|
88
|
+
resp = stub.get_all_config(config_req)
|
89
|
+
load_deltas(resp, :api)
|
90
|
+
resp.deltas.each do |delta|
|
91
|
+
@config_loader.set(delta)
|
92
|
+
end
|
93
|
+
@config_resolver.update
|
94
|
+
finish_init!(:api)
|
95
|
+
true
|
96
|
+
rescue => e
|
97
|
+
@base_client.log_internal Logger::WARN, "Unexpected problem loading checkpoint #{e}"
|
98
|
+
false
|
99
|
+
end
|
100
|
+
|
101
|
+
def load_checkpoint_from_s3
|
102
|
+
resp = @s3.bucket('prefab-cloud-checkpoints-prod').object(@base_client.api_key.gsub("|", "/")).get
|
103
|
+
deltas = Prefab::ConfigDeltas.decode(resp.body.read)
|
104
|
+
load_deltas(deltas, :s3)
|
105
|
+
rescue Aws::S3::Errors::NoSuchKey
|
106
|
+
@base_client.log_internal Logger::INFO, "No S3 checkpoint. Plan may not support this."
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
def load_deltas(deltas, source)
|
111
|
+
deltas.deltas.each do |delta|
|
112
|
+
@config_loader.set(delta)
|
113
|
+
end
|
114
|
+
@base_client.log_internal Logger::INFO, "Found checkpoint with highwater id #{@config_loader.highwater_mark} from #{source}"
|
115
|
+
@base_client.stats.increment("prefab.config.checkpoint.load")
|
116
|
+
@config_resolver.update
|
117
|
+
finish_init!(source)
|
118
|
+
end
|
119
|
+
|
91
120
|
# A thread that checks for a checkpoint
|
92
121
|
def start_checkpointing_thread
|
93
122
|
Thread.new do
|
@@ -107,8 +136,9 @@ module Prefab
|
|
107
136
|
end
|
108
137
|
end
|
109
138
|
|
110
|
-
def finish_init!
|
139
|
+
def finish_init!(source)
|
111
140
|
if @initialization_lock.write_locked?
|
141
|
+
@base_client.log_internal Logger::DEBUG, "Unlocked Config via #{source}"
|
112
142
|
@initialization_lock.release_write_lock
|
113
143
|
@base_client.log.set_config_client(self)
|
114
144
|
end
|
@@ -130,7 +160,7 @@ module Prefab
|
|
130
160
|
@config_loader.set(delta)
|
131
161
|
end
|
132
162
|
@config_resolver.update
|
133
|
-
finish_init!
|
163
|
+
finish_init!(:streaming)
|
134
164
|
end
|
135
165
|
rescue => e
|
136
166
|
@base_client.log_internal Logger::INFO, ("config client encountered #{e.message} pausing #{RECONNECT_WAIT}")
|
data/lib/prefab_services_pb.rb
CHANGED
data/prefab-cloud-ruby.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: prefab-cloud-ruby 0.1.0
|
5
|
+
# stub: prefab-cloud-ruby 0.1.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "prefab-cloud-ruby".freeze
|
9
|
-
s.version = "0.1.0
|
9
|
+
s.version = "0.1.0"
|
10
10
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Jeff Dwyer".freeze]
|
14
|
-
s.date = "2019-01-
|
14
|
+
s.date = "2019-01-20"
|
15
15
|
s.description = "RateLimits & Config as a service".freeze
|
16
16
|
s.email = "jdwyer@prefab.cloud".freeze
|
17
17
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prefab-cloud-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Dwyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|
@@ -194,9 +194,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
194
|
version: '0'
|
195
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
196
|
requirements:
|
197
|
-
- - "
|
197
|
+
- - ">="
|
198
198
|
- !ruby/object:Gem::Version
|
199
|
-
version:
|
199
|
+
version: '0'
|
200
200
|
requirements: []
|
201
201
|
rubyforge_project:
|
202
202
|
rubygems_version: 2.6.14
|