bosh_common 1.2641.0 → 1.2652.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/lib/common/retryable.rb +32 -10
- data/lib/common/thread_pool.rb +8 -10
- data/lib/common/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a699a5bce247048d9a803c1ab8268b40e787871
|
4
|
+
data.tar.gz: 88d8d7150bc04ec1a18d1b90ebe2fabc2d4c0025
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f52497b5219a4ddfffb91880fd5d533bc5f23a9fdf6db76697e85272c33ad889484c746d65fdfd094c76ff79ae2a086e0fe9b7b96d39d36ca47fcd4985bb302f
|
7
|
+
data.tar.gz: 8871fbec389398907aeda81d0e9a2d7a2bc4d165483d3d2ef3d6917e018ce9722123154c64f3cd5aafec5b755c5658d5ff880e0a8e05640fe216f221d9e564c5
|
data/lib/common/retryable.rb
CHANGED
@@ -7,24 +7,32 @@ module Bosh
|
|
7
7
|
|
8
8
|
@ensure_callback = opts[:ensure]
|
9
9
|
@matching = opts[:matching]
|
10
|
-
@on_exception = [opts[:on]].flatten
|
11
10
|
@try_count = 0
|
12
11
|
@retry_exception = nil
|
13
12
|
@retry_limit = opts[:tries]
|
14
13
|
@sleeper = opts[:sleep]
|
14
|
+
|
15
|
+
@matchers = Array(opts[:on]).map do |klass_or_matcher|
|
16
|
+
if klass_or_matcher.is_a?(Class)
|
17
|
+
ErrorMatcher.by_class(klass_or_matcher)
|
18
|
+
else
|
19
|
+
klass_or_matcher
|
20
|
+
end
|
21
|
+
end
|
15
22
|
end
|
16
23
|
|
17
|
-
#
|
18
|
-
def retryer(&
|
24
|
+
# Loops until the block returns a true value
|
25
|
+
def retryer(&blk)
|
19
26
|
loop do
|
20
27
|
@try_count += 1
|
21
|
-
y =
|
22
|
-
@retry_exception = nil
|
28
|
+
y = blk.call(@try_count, @retry_exception)
|
29
|
+
@retry_exception = nil # no exception was raised in the block
|
23
30
|
return y if y
|
24
31
|
raise Bosh::Common::RetryCountExceeded if @try_count >= @retry_limit
|
25
32
|
wait
|
26
33
|
end
|
27
|
-
rescue
|
34
|
+
rescue Exception => exception
|
35
|
+
raise unless @matchers.any? { |m| m.matches?(exception) }
|
28
36
|
raise unless exception.message =~ @matching
|
29
37
|
raise if @try_count >= @retry_limit
|
30
38
|
|
@@ -41,7 +49,6 @@ module Bosh
|
|
41
49
|
merged_options = default_options.merge(options)
|
42
50
|
invalid_options = merged_options.keys - default_options.keys
|
43
51
|
raise ArgumentError.new("Invalid options: #{invalid_options.join(", ")}") unless invalid_options.empty?
|
44
|
-
|
45
52
|
merged_options
|
46
53
|
end
|
47
54
|
|
@@ -51,13 +58,14 @@ module Bosh
|
|
51
58
|
sleep: exponential_sleeper,
|
52
59
|
on: [],
|
53
60
|
matching: /.*/,
|
54
|
-
ensure: Proc.new {}
|
61
|
+
ensure: Proc.new {},
|
55
62
|
}
|
56
63
|
end
|
57
64
|
|
58
65
|
def wait
|
59
66
|
sleep(@sleeper.respond_to?(:call) ? @sleeper.call(@try_count, @retry_exception) : @sleeper)
|
60
|
-
rescue
|
67
|
+
rescue Exception => exception
|
68
|
+
raise unless @matchers.any? { |m| m.matches?(exception) }
|
61
69
|
# SignalException could be raised while sleeping, so if you want to catch it,
|
62
70
|
# it need to be passed in the list of exceptions to ignore
|
63
71
|
end
|
@@ -69,6 +77,20 @@ module Bosh
|
|
69
77
|
def sleep(*args, &blk)
|
70
78
|
Kernel.sleep(*args, &blk)
|
71
79
|
end
|
80
|
+
|
81
|
+
class ErrorMatcher
|
82
|
+
def self.by_class(klass)
|
83
|
+
new(klass, /.*/)
|
84
|
+
end
|
85
|
+
|
86
|
+
def initialize(klass, message_regex)
|
87
|
+
@klass = klass
|
88
|
+
@message_regex = message_regex
|
89
|
+
end
|
90
|
+
|
91
|
+
def matches?(error)
|
92
|
+
!!(error.kind_of?(@klass) && error.message =~ @message_regex)
|
93
|
+
end
|
94
|
+
end
|
72
95
|
end
|
73
96
|
end
|
74
|
-
|
data/lib/common/thread_pool.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'logger'
|
2
2
|
|
3
3
|
module Bosh
|
4
4
|
class ThreadPool
|
@@ -45,14 +45,14 @@ module Bosh
|
|
45
45
|
@actions << block
|
46
46
|
if @state == :open
|
47
47
|
if @available_threads > 0
|
48
|
-
@logger.debug(
|
48
|
+
@logger.debug('Creating new thread')
|
49
49
|
@available_threads -= 1
|
50
50
|
create_thread
|
51
51
|
else
|
52
|
-
@logger.debug(
|
52
|
+
@logger.debug('All threads are currently busy, queuing action')
|
53
53
|
end
|
54
54
|
elsif @state == :paused
|
55
|
-
@logger.debug(
|
55
|
+
@logger.debug('Pool is paused, queueing action')
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -64,10 +64,8 @@ module Bosh
|
|
64
64
|
action = nil
|
65
65
|
@lock.synchronize do
|
66
66
|
action = @actions.shift unless @boom
|
67
|
-
|
68
|
-
@logger.debug(
|
69
|
-
else
|
70
|
-
@logger.debug("Thread is no longer needed, cleaning up")
|
67
|
+
unless action
|
68
|
+
@logger.debug('Thread is no longer needed, cleaning up')
|
71
69
|
@available_threads += 1
|
72
70
|
@threads.delete(thread) if @state == :open
|
73
71
|
end
|
@@ -103,7 +101,7 @@ module Bosh
|
|
103
101
|
end
|
104
102
|
|
105
103
|
def wait
|
106
|
-
@logger.debug(
|
104
|
+
@logger.debug('Waiting for tasks to complete')
|
107
105
|
@lock.synchronize do
|
108
106
|
@cv.wait(@lock) while working?
|
109
107
|
raise @boom if @boom
|
@@ -112,7 +110,7 @@ module Bosh
|
|
112
110
|
|
113
111
|
def shutdown
|
114
112
|
return if @state == :closed
|
115
|
-
@logger.debug(
|
113
|
+
@logger.debug('Shutting down pool')
|
116
114
|
@lock.synchronize do
|
117
115
|
return if @state == :closed
|
118
116
|
@state = :closed
|
data/lib/common/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh_common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2652.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- VMware
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: semi_semantic
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
version: 1.1.0
|
27
27
|
description: |-
|
28
28
|
BOSH common
|
29
|
-
|
29
|
+
43d2e8
|
30
30
|
email: support@cloudfoundry.com
|
31
31
|
executables: []
|
32
32
|
extensions: []
|