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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a6110ec98aca7e02107488ae5e1e8d3ca54d20a4
4
- data.tar.gz: e2eec0324a91dc71ceb13e16cc757d33afa59d47
3
+ metadata.gz: 94cbcb0db8e1be133abd5efbc497294d71eec1b4
4
+ data.tar.gz: e2f60e29eed939c71fc4af3182b71bd6d0142536
5
5
  SHA512:
6
- metadata.gz: b9c1a27e9505dd06b7d24a8ed82f72b99cd5867707f951ef9f45104c745d8b4560f3b3eae29fcd239a68c3ffec7901107dfb2b8730361c9fba28db72b03d6d8a
7
- data.tar.gz: 49365d95c9fb9d3192d62d303e59c93d7d64e400da530819d91a9fd889283e92da64678709942237cba78c493d279c606204dfd2e044dca67aaf5b1d4c40f1ee
6
+ metadata.gz: 7594ed51141560a0b56cba64a5fe70cf85afd573cf1c2eeb5a313099b95e15fa75dad118e7e48ad269dacb790adb8d8a30419f8cdaf02dfebcf038b7b68ba77f
7
+ data.tar.gz: 7ad375b5f83327dd58ecd063fe1c094c0e471189cf274165e59936f1ac416c515bbceecd8753f3652d6d2d0a5ebb9dcdf70993ad5804edf5fa4d14214650d2a5
data/Gemfile.lock CHANGED
@@ -105,6 +105,7 @@ DEPENDENCIES
105
105
  aws-sdk-s3 (~> 1)
106
106
  bundler (~> 1.0)
107
107
  concurrent-ruby (~> 1.0, >= 1.0.5)
108
+ faraday
108
109
  grpc (~> 1.17.1)
109
110
  grpc-tools (~> 1.17.1)
110
111
  juwelier (~> 2.4.9)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0.alpha.1
1
+ 0.1.0
@@ -8,7 +8,7 @@ module Prefab
8
8
  @timeout = timeout
9
9
  @initialization_lock = Concurrent::ReadWriteLock.new
10
10
 
11
- @checkpoint_freq_secs = (ENV["PREFAB_CHECKPOINT_FREQ_SEC"] || DEFAULT_CHECKPOINT_FREQ_SEC)
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
- obj = @s3.bucket('prefab-cloud-checkpoints-prod').object(@base_client.api_key.gsub("|", "/"))
74
- obj.get do |f|
75
- deltas = Prefab::ConfigDeltas.decode(f)
76
- deltas.deltas.each do |delta|
77
- @config_loader.set(delta)
78
- end
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}")
@@ -29,6 +29,7 @@ module Prefab
29
29
  self.service_name = 'prefab.ConfigService'
30
30
 
31
31
  rpc :GetConfig, ConfigServicePointer, stream(ConfigDeltas)
32
+ rpc :GetAllConfig, ConfigServicePointer, ConfigDeltas
32
33
  rpc :Upsert, UpsertRequest, ConfigServicePointer
33
34
  end
34
35
 
@@ -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.alpha.1 ruby lib
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.alpha.1"
9
+ s.version = "0.1.0"
10
10
 
11
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
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-18"
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.alpha.1
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-18 00:00:00.000000000 Z
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: 1.3.1
199
+ version: '0'
200
200
  requirements: []
201
201
  rubyforge_project:
202
202
  rubygems_version: 2.6.14