prefab-cloud-ruby 0.1.0.alpha.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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