Class: Prefab::ConfigClient
- Inherits:
-
Object
- Object
- Prefab::ConfigClient
- Defined in:
- lib/prefab/config_client.rb
Constant Summary collapse
- RECONNECT_WAIT =
5- DEFAULT_CHECKPOINT_FREQ_SEC =
60- DEFAULT_S3CF_BUCKET =
'http://d2j4ed6ti5snnd.cloudfront.net'
Class Method Summary collapse
Instance Method Summary collapse
- #get(prop) ⇒ Object
-
#initialize(base_client, timeout) ⇒ ConfigClient
constructor
A new instance of ConfigClient.
- #reset ⇒ Object
- #start_streaming ⇒ Object
- #to_s ⇒ Object
- #upsert(key, config_value, namespace = nil, previous_key = nil) ⇒ Object
Constructor Details
#initialize(base_client, timeout) ⇒ ConfigClient
Returns a new instance of ConfigClient.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/prefab/config_client.rb', line 7 def initialize(base_client, timeout) @base_client = base_client @timeout = timeout @initialization_lock = Concurrent::ReadWriteLock.new @checkpoint_freq_secs = DEFAULT_CHECKPOINT_FREQ_SEC @config_loader = Prefab::ConfigLoader.new(@base_client) @config_resolver = Prefab::ConfigResolver.new(@base_client, @config_loader) @initialization_lock.acquire_write_lock @cancellable_interceptor = Prefab::CancellableInterceptor.new @s3_cloud_front = ENV["PREFAB_S3CF_BUCKET"] || DEFAULT_S3CF_BUCKET load_checkpoint start_checkpointing_thread end |
Class Method Details
.value_to_delta(key, config_value, namespace = nil) ⇒ Object
63 64 65 66 |
# File 'lib/prefab/config_client.rb', line 63 def self.value_to_delta(key, config_value, namespace = nil) Prefab::ConfigDelta.new(key: [namespace, key].compact.join(":"), value: config_value) end |
Instance Method Details
#get(prop) ⇒ Object
34 35 36 37 38 |
# File 'lib/prefab/config_client.rb', line 34 def get(prop) @initialization_lock.with_read_lock do @config_resolver.get(prop) end end |
#reset ⇒ Object
54 55 56 57 |
# File 'lib/prefab/config_client.rb', line 54 def reset @base_client.reset! @_stub = nil end |
#start_streaming ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/prefab/config_client.rb', line 26 def start_streaming at_exit do @cancellable_interceptor.cancel end start_api_connection_thread(@config_loader.highwater_mark) end |
#to_s ⇒ Object
59 60 61 |
# File 'lib/prefab/config_client.rb', line 59 def to_s @config_resolver.to_s end |
#upsert(key, config_value, namespace = nil, previous_key = nil) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/prefab/config_client.rb', line 40 def upsert(key, config_value, namespace = nil, previous_key = nil) raise "Key must not contain ':' set namespaces separately" if key.include? ":" raise "Namespace must not contain ':'" if namespace&.include?(":") config_delta = Prefab::ConfigClient.value_to_delta(key, config_value, namespace) upsert_req = Prefab::UpsertRequest.new(config_delta: config_delta) upsert_req.previous_key = previous_key if previous_key&.present? @base_client.request Prefab::ConfigService, :upsert, req_options: { timeout: @timeout }, params: upsert_req @base_client.stats.increment("prefab.config.upsert") @config_loader.set(config_delta) @config_loader.rm(previous_key) if previous_key&.present? @config_resolver.update end |