expeditor 0.3.0 → 0.4.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: e70f2027c7e07b2f647a1a82ff5de88ffb629181
4
- data.tar.gz: 89ab6626708ef36170547b326a83cecb9f421d15
3
+ metadata.gz: 2380a72a4938ad53fc206f4e155805d90568477f
4
+ data.tar.gz: e5ee71ae7e689318b764c47e969e16983330846a
5
5
  SHA512:
6
- metadata.gz: a75a2daa9350817b282523d8454d0072f85519e7c277467ba8201894f0a52165a77cd7b8065f9fadc2d25f1fc7deb6fed539e9798b9636feeba20226f8efe4c4
7
- data.tar.gz: 320feb1dcd572e3f61436bef1ab49732bd8630030a319d1e68d021de8b99a8cf7a19da9cac9bc6f24413b46292946207a03084a9ab46b3de9db0fad2c7a3af43
6
+ metadata.gz: 157aeae73bb32ab82848b7a97f8fa38a7c3a3f56419e59c3b2d71002c5194d5fcd2b7dce86ad7be4cad1406f2844dacf2c8f630ecf3f5e0245b018c6717beb7f
7
+ data.tar.gz: 575962fba75f61364cf1f998c01c7636d100a10e0e345d68488871c6a9735ee371251e332f33221c3780987719cd8fdf725454bac56d268f1405c562934864dd
@@ -5,6 +5,7 @@ rvm:
5
5
  - 2.0.0
6
6
  - 2.1
7
7
  - 2.2
8
+ - 2.3.0
8
9
  - ruby-head
9
10
  matrix:
10
11
  allow_failures:
@@ -1,3 +1,8 @@
1
+ ## 0.4.0
2
+ - Add Expeditor::Service#current\_status [#9](https://github.com/cookpad/expeditor/issues/9)
3
+ - Add Expeditor::Service#reset\_status! [#10](https://github.com/cookpad/expeditor/issues/10)
4
+ - Add Expeditor::Service#fallback\_enabled [#11](https://github.com/cookpad/expeditor/issues/11)
5
+
1
6
  ## 0.3.0
2
7
  - Support concurrent-ruby 1.0.
3
8
 
data/README.md CHANGED
@@ -77,6 +77,8 @@ command.start.get #=> error may be raised
77
77
  command_with_fallback.start.get #=> default_value if command is failed
78
78
  ```
79
79
 
80
+ If you set `false` to `Expeditor::Service#fallback_enabled`, fallbacks do not occur. It is useful in test codes.
81
+
80
82
  ### timeout
81
83
 
82
84
  ```ruby
@@ -121,6 +123,11 @@ service = Expeditor::Service.new(
121
123
  command = Expeditor::Command.new(service: service) do
122
124
  ...
123
125
  end
126
+
127
+ service.current_status
128
+ # => #<Expeditor::Status:0x007fdeeeb18468 @break=0, @dependency=0, @failure=0, @rejection=0, @success=0, @timeout=0>
129
+
130
+ service.reset_status! # reset status in the service
124
131
  ```
125
132
 
126
133
  ### circuit breaker
@@ -43,7 +43,7 @@ module Expeditor
43
43
  def get
44
44
  raise NotStartedError if not started?
45
45
  @normal_future.get_or_else do
46
- if @fallback_var
46
+ if @fallback_var && @service.fallback_enabled?
47
47
  @fallback_var.wait
48
48
  if @fallback_var.rejected?
49
49
  raise @fallback_var.reason
@@ -65,7 +65,7 @@ module Expeditor
65
65
  def wait
66
66
  raise NotStartedError if not started?
67
67
  @normal_future.wait
68
- @fallback_var.wait if @fallback_var
68
+ @fallback_var.wait if @fallback_var && @service.fallback_enabled?
69
69
  end
70
70
 
71
71
  # command.on_complete do |success, value, reason|
@@ -3,19 +3,19 @@ require 'concurrent/executor/thread_pool_executor'
3
3
  module Expeditor
4
4
  class Service
5
5
  attr_reader :executor
6
+ attr_accessor :fallback_enabled
6
7
 
7
8
  def initialize(opts = {})
8
9
  @executor = opts.fetch(:executor) { Concurrent::ThreadPoolExecutor.new }
9
10
  @threshold = opts.fetch(:threshold, 0.5) # is 0.5 ok?
10
11
  @non_break_count = opts.fetch(:non_break_count, 100) # is 100 ok?
11
12
  @sleep = opts.fetch(:sleep, 1)
12
- bucket_opts = {
13
+ @bucket_opts = {
13
14
  size: 10,
14
15
  per: opts.fetch(:period, 10).to_f / 10
15
16
  }
16
- @bucket = Expeditor::Bucket.new(bucket_opts)
17
- @breaking = false
18
- @break_start = nil
17
+ reset_status!
18
+ @fallback_enabled = true
19
19
  end
20
20
 
21
21
  def success
@@ -42,6 +42,10 @@ module Expeditor
42
42
  @bucket.increment :dependency
43
43
  end
44
44
 
45
+ def fallback_enabled?
46
+ !!fallback_enabled
47
+ end
48
+
45
49
  # break circuit?
46
50
  def open?
47
51
  if @breaking
@@ -66,6 +70,16 @@ module Expeditor
66
70
  @executor.shutdown
67
71
  end
68
72
 
73
+ def current_status
74
+ @bucket.current
75
+ end
76
+
77
+ def reset_status!
78
+ @bucket = Expeditor::Bucket.new(@bucket_opts)
79
+ @breaking = false
80
+ @break_start = nil
81
+ end
82
+
69
83
  private
70
84
 
71
85
  def calc_open
@@ -7,6 +7,7 @@ module Expeditor
7
7
  def initialize
8
8
  @executor = Concurrent.global_io_executor
9
9
  @bucket = nil
10
+ @fallback_enabled = true
10
11
  end
11
12
 
12
13
  def success
@@ -1,3 +1,3 @@
1
1
  module Expeditor
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expeditor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shohei-yasutake
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-22 00:00:00.000000000 Z
11
+ date: 2016-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -143,9 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  version: '0'
144
144
  requirements: []
145
145
  rubyforge_project:
146
- rubygems_version: 2.4.5.1
146
+ rubygems_version: 2.5.1
147
147
  signing_key:
148
148
  specification_version: 4
149
149
  summary: Expeditor provides asynchronous execution and fault tolerance for microservices
150
150
  test_files: []
151
- has_rdoc: