kumonos 0.23.0 → 0.24.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
  SHA256:
3
- metadata.gz: 2581091b45b53fbcacb1b26293b715c524d886c9775b5a5af48b00f953e83f68
4
- data.tar.gz: 68ebcc125e95f89a85fb3c912d9b8bd0fbb6cf744cca347eb49b347be6848006
3
+ metadata.gz: 9e7070e4162b72c093348a198456d59682ad8019d7ab77edb4448e30fd1aee84
4
+ data.tar.gz: b6b3f5464006a2555fb71d3fe1d227455894eb6e7efe71bc14ce5b1f663eb419
5
5
  SHA512:
6
- metadata.gz: a328fbd273b35cd4751c1e1c5854c145b425fb136f94eb7ed65be6f5b2ab2045f424ba71f03fb75c909f1fe684ce6ae0cafe0d34c4f8eda9df254ae6f5f96d58
7
- data.tar.gz: 061a882a9f16ae03b0b6d7510fc5ec07960a0287e04e33bdd5ad0a343aecde06024007f3d5e763560e791a21722899e509b5871ad1def46cb42f329b22ad0074
6
+ metadata.gz: f640d12d6cbd6a96f5bb244eedbbaead132a512523ee5f062999be4ab8b2a59ef23523b8d0fea781a4c296c6be25a2835b14bf19099c136e8fc5dd25262edbc2
7
+ data.tar.gz: 632ffbb8c34d46f08747f21c2ca5122f163ddc567b302dbda47e5e4d475640485cf7c49df6cb878d2d6787b458bbf77918668625d79c7193e02e1413cef8247c
@@ -20,3 +20,7 @@ Metrics/AbcSize:
20
20
  Enabled: false
21
21
  Naming/UncommunicativeMethodParamName:
22
22
  Enabled: false
23
+ Style/EmptyElse:
24
+ Enabled: false
25
+ Metrics/PerceivedComplexity:
26
+ Enabled: false
@@ -2,41 +2,46 @@ local circuit_breaker = import 'circuit_breaker.libsonnet';
2
2
  local routes = import 'routes.libsonnet';
3
3
 
4
4
  {
5
- version: 1,
6
- dependencies: [
5
+ version: 1,
6
+ dependencies: [
7
+ {
8
+ name: 'user',
9
+ cluster_name: 'user-development',
10
+ lb: 'user-app:8080',
11
+ host_header: 'user-service',
12
+ tls: false,
13
+ connect_timeout_ms: 250,
14
+ routes: [
7
15
  {
8
- name: "user",
9
- cluster_name: "user-development",
10
- lb: "user-app:8080",
11
- host_header: "user-service",
12
- tls: false,
13
- connect_timeout_ms: 250,
14
- circuit_breaker: circuit_breaker,
15
- routes: [routes.root],
16
+ path: '/ping',
17
+ timeout_ms: 100,
16
18
  },
19
+ routes.root,
20
+ ],
21
+ },
22
+ {
23
+ name: 'ab-testing',
24
+ cluster_name: 'ab-testing-development',
25
+ sds: true,
26
+ tls: false,
27
+ connect_timeout_ms: 250,
28
+ circuit_breaker: circuit_breaker,
29
+ outlier_detection: {
30
+ consecutive_5xx: 3,
31
+ },
32
+ routes: [
33
+ routes.root,
17
34
  {
18
- name: "ab-testing",
19
- cluster_name: "ab-testing-development",
20
- sds: true,
21
- tls: false,
22
- connect_timeout_ms: 250,
23
- circuit_breaker: circuit_breaker,
24
- outlier_detection: {
25
- consecutive_5xx: 3,
26
- },
27
- routes: [
28
- routes.root,
29
- {
30
- path: '/grpc.health.v1.Health/Check',
31
- method: 'POST',
32
- timeout_ms: 3000,
33
- retry_policy: {
34
- retry_on: '5xx,connect-failure,refused-stream,cancelled,deadline-exceeded,resource-exhausted',
35
- num_retries: 3,
36
- per_try_timeout_ms: 700,
37
- },
38
- },
39
- ],
35
+ path: '/grpc.health.v1.Health/Check',
36
+ method: 'POST',
37
+ timeout_ms: 3000,
38
+ retry_policy: {
39
+ retry_on: '5xx,connect-failure,refused-stream,cancelled,deadline-exceeded,resource-exhausted',
40
+ num_retries: 3,
41
+ per_try_timeout_ms: 700,
42
+ },
40
43
  },
41
- ],
44
+ ],
45
+ },
46
+ ],
42
47
  }
@@ -16,16 +16,21 @@ module Kumonos
16
16
  def build(h)
17
17
  use_sds = h.fetch('sds', false)
18
18
  lb = use_sds ? nil : h.fetch('lb')
19
- if lb && lb.split(':').size != 2
20
- raise "Invalid format in `lb` value. Must be \"${host}:${port}\" format: #{lb}"
21
- end
19
+ raise "Invalid format in `lb` value. Must be \"${host}:${port}\" format: #{lb}" if lb && lb.split(':').size != 2
20
+
21
+ circuit_breaker =
22
+ if h.key?('circuit_breaker')
23
+ CircuitBreaker.build(h.fetch('circuit_breaker'))
24
+ else
25
+ nil
26
+ end
22
27
 
23
28
  new(
24
29
  h.fetch('cluster_name'),
25
30
  h.fetch('connect_timeout_ms'),
26
31
  lb,
27
32
  h.fetch('tls'),
28
- CircuitBreaker.build(h.fetch('circuit_breaker')),
33
+ circuit_breaker,
29
34
  OutlierDetection.build(h['outlier_detection']), # optional
30
35
  use_sds
31
36
  )
@@ -54,7 +59,7 @@ module Kumonos
54
59
  end
55
60
 
56
61
  h.delete(:circuit_breaker)
57
- h[:circuit_breakers] = { default: circuit_breaker.to_h }
62
+ h[:circuit_breakers] = { default: circuit_breaker.to_h } if circuit_breaker
58
63
 
59
64
  if outlier_detection
60
65
  h[:outlier_detection] = outlier_detection.to_h
@@ -26,8 +26,10 @@ module Kumonos
26
26
  def to_h
27
27
  h = super
28
28
  h[:routes] = routes.flat_map do |r|
29
+ if r.retry_policy.nil?
30
+ [r.to_h]
29
31
  # i.e. retry with gRPC request (HTTP POST)
30
- if r.method
32
+ elsif r.method
31
33
  [r.to_h_with_retry]
32
34
  else
33
35
  [r.to_h_with_retry, r.to_h]
@@ -40,8 +42,15 @@ module Kumonos
40
42
  Route = Struct.new(:prefix, :path, :method, :cluster, :timeout_ms, :retry_policy, :host_header) do
41
43
  class << self
42
44
  def build(h, cluster, host_header)
45
+ retry_policy =
46
+ if h.key?('retry_policy')
47
+ RetryPolicy.build(h.fetch('retry_policy'))
48
+ else
49
+ nil
50
+ end
51
+
43
52
  new(h['prefix'], h['path'], h['method'], cluster, h.fetch('timeout_ms'),
44
- RetryPolicy.build(h.fetch('retry_policy')), host_header)
53
+ retry_policy, host_header)
45
54
  end
46
55
  end
47
56
 
@@ -72,13 +81,11 @@ module Kumonos
72
81
  ALLOWED_METHODS = %w[GET HEAD POST PUT DELETE].freeze
73
82
  def to_h_with_retry
74
83
  h = to_h
75
- h[:retry_policy] = retry_policy.to_h
84
+ h[:retry_policy] = retry_policy.to_h if retry_policy
76
85
 
77
86
  if method
78
87
  m = method.upcase
79
- unless ALLOWED_METHODS.include?(m)
80
- raise "method must be one of #{ALLOWED_METHODS.join(',')}: given `#{m}`"
81
- end
88
+ raise "method must be one of #{ALLOWED_METHODS.join(',')}: given `#{m}`" unless ALLOWED_METHODS.include?(m)
82
89
 
83
90
  h[:headers] = [{ name: ':method', value: m, regex: false }]
84
91
  else
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kumonos
4
- VERSION = '0.23.0'
4
+ VERSION = '0.24.0'
5
5
  end
@@ -26,7 +26,6 @@
26
26
  "cluster_name",
27
27
  "tls",
28
28
  "connect_timeout_ms",
29
- "circuit_breaker",
30
29
  "routes"
31
30
  ],
32
31
  "properties": {
@@ -100,8 +99,7 @@
100
99
  "id": "/properties/dependencies/items/properties/routes/items",
101
100
  "additionalProperties": true,
102
101
  "required": [
103
- "timeout_ms",
104
- "retry_policy"
102
+ "timeout_ms"
105
103
  ],
106
104
  "properties": {
107
105
  "prefix": {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kumonos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taiki Ono
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-24 00:00:00.000000000 Z
11
+ date: 2019-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema