expeditor 0.3.0 → 0.4.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 +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/README.md +7 -0
- data/lib/expeditor/command.rb +2 -2
- data/lib/expeditor/service.rb +18 -4
- data/lib/expeditor/services/default.rb +1 -0
- data/lib/expeditor/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2380a72a4938ad53fc206f4e155805d90568477f
|
4
|
+
data.tar.gz: e5ee71ae7e689318b764c47e969e16983330846a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 157aeae73bb32ab82848b7a97f8fa38a7c3a3f56419e59c3b2d71002c5194d5fcd2b7dce86ad7be4cad1406f2844dacf2c8f630ecf3f5e0245b018c6717beb7f
|
7
|
+
data.tar.gz: 575962fba75f61364cf1f998c01c7636d100a10e0e345d68488871c6a9735ee371251e332f33221c3780987719cd8fdf725454bac56d268f1405c562934864dd
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -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
|
data/lib/expeditor/command.rb
CHANGED
@@ -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|
|
data/lib/expeditor/service.rb
CHANGED
@@ -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
|
-
|
17
|
-
@
|
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
|
data/lib/expeditor/version.rb
CHANGED
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.
|
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:
|
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.
|
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:
|