tootsie 0.9.17 → 0.9.18

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.
data/Rakefile CHANGED
@@ -1 +1,21 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ desc 'Bump version'
4
+ task :bump do
5
+ if `git status -uno -s --porcelain | wc -l`.to_i > 0
6
+ abort "You have uncommitted changed."
7
+ end
8
+ text = File.read('lib/tootsie/version.rb')
9
+ if text =~ /VERSION = '(.*)'/
10
+ old_version = $1
11
+ version_parts = old_version.split('.')
12
+ version_parts[-1] = version_parts[-1].to_i + 1
13
+ new_version = version_parts.join('.')
14
+ text.gsub!(/VERSION = '(.*)'/, "VERSION = '#{new_version}'")
15
+ File.open('lib/tootsie/version.rb', 'w') { |f| f << text }
16
+ (system("git add lib/tootsie/version.rb") and
17
+ system("git commit -m 'Bump to #{new_version}.'")) or abort "Failed to commit."
18
+ else
19
+ abort "Could not find version number"
20
+ end
21
+ end
@@ -5,11 +5,10 @@ module Tootsie
5
5
 
6
6
  def initialize(options = {})
7
7
  options.assert_valid_keys(:host_name, :queue_name, :max_backoff)
8
+ @backoff = Utility::Backoff.new(:max => options[:max_backoff])
8
9
  @logger = Application.get.logger
9
10
  @host_name = options[:host_name] || 'localhost'
10
11
  @queue_name = options[:queue_name] || 'tootsie'
11
- @max_backoff = (options[:max_backoff] || 2).to_f
12
- @backoff = 0.0
13
12
  connect!
14
13
  end
15
14
 
@@ -29,7 +28,7 @@ module Tootsie
29
28
  def pop(options = {})
30
29
  item = nil
31
30
  loop do
32
- with_backoff do
31
+ @backoff.with do
33
32
  message = nil
34
33
  with_retry do
35
34
  with_reconnect do
@@ -48,6 +47,7 @@ module Tootsie
48
47
  true
49
48
  end
50
49
  end
50
+ break unless options[:wait]
51
51
  end
52
52
  break if item
53
53
  end
@@ -56,21 +56,6 @@ module Tootsie
56
56
 
57
57
  private
58
58
 
59
- def with_backoff(&block)
60
- @backoff ||= 0.5
61
- loop do
62
- result = yield
63
- if result
64
- @backoff /= 2.0
65
- return result
66
- else
67
- @backoff = [@backoff * 1.1, @max_backoff].min
68
- @logger.info "Backing off #{@backoff}"
69
- sleep(@backoff)
70
- end
71
- end
72
- end
73
-
74
59
  def with_reconnect(&block)
75
60
  begin
76
61
  result = yield
@@ -11,6 +11,7 @@ module Tootsie
11
11
 
12
12
  def initialize(options)
13
13
  options.assert_valid_keys(:access_key_id, :secret_access_key, :queue_name, :max_backoff)
14
+ @backoff = Utility::Backoff.new(:max => options[:max_backoff])
14
15
  @sqs_service = ::Sqs::Service.new(
15
16
  :access_key_id => options[:access_key_id],
16
17
  :secret_access_key => options[:secret_access_key])
@@ -31,8 +32,6 @@ module Tootsie
31
32
  raise SqsQueueCouldNotFindQueueError
32
33
  end
33
34
  end
34
- @max_backoff = (options[:max_backoff] || 2).to_f
35
- @backoff = 0.0
36
35
  end
37
36
 
38
37
  def count
@@ -60,29 +59,30 @@ module Tootsie
60
59
  def pop(options = {})
61
60
  item = nil
62
61
  loop do
63
- begin
64
- message = @queue.message(5)
65
- rescue Exception => exception
66
- check_exception(exception)
67
- @logger.error("Reading queue failed with exception #{exception.class}: #{exception.message}")
68
- break unless options[:wait]
69
- sleep(0.5)
70
- retry
71
- end
72
- if message
62
+ @backoff.with do
73
63
  begin
74
- item = JSON.parse(message.body)
75
- ensure
76
- # Always destroy, even if parsing fails
77
- message.destroy
64
+ message = @queue.message(5)
65
+ rescue Exception => exception
66
+ check_exception(exception)
67
+ @logger.error("Reading queue failed with exception #{exception.class}: #{exception.message}")
68
+ break unless options[:wait]
69
+ sleep(0.5)
70
+ retry
78
71
  end
79
- @backoff /= 2.0
80
- break
81
- else
82
- @backoff = [@backoff * 0.2, @max_backoff].min
72
+ if message
73
+ begin
74
+ item = JSON.parse(message.body)
75
+ ensure
76
+ # Always destroy, even if parsing fails
77
+ message.destroy
78
+ end
79
+ true
80
+ else
81
+ false
82
+ end
83
+ break unless options[:wait]
83
84
  end
84
- break unless options[:wait]
85
- sleep(@backoff)
85
+ break if item
86
86
  end
87
87
  item
88
88
  end
@@ -0,0 +1,29 @@
1
+ module Tootsie
2
+ module Utility
3
+
4
+ class Backoff
5
+
6
+ def initialize(options = {})
7
+ @min = options[:min] || 0.5
8
+ @max = options[:max] || 2.0
9
+ @current = options[:initial] || @min
10
+ @factor = options[:factor] || 1.5
11
+ end
12
+
13
+ def with(&block)
14
+ loop do
15
+ result = yield
16
+ if result
17
+ @current /= @factor
18
+ return result
19
+ else
20
+ @current = [[@current * @factor, @min].max, @max].min
21
+ sleep(@current) if @current > 0
22
+ end
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module Tootsie
2
- VERSION = '0.9.17'
2
+ VERSION = '0.9.18'
3
3
  end
data/lib/tootsie.rb CHANGED
@@ -29,3 +29,4 @@ require 'tootsie/queues/file_system_queue'
29
29
  require 'tootsie/queues/amqp_queue'
30
30
  require 'tootsie/s3_utilities'
31
31
  require 'tootsie/runner'
32
+ require 'tootsie/utility/backoff'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tootsie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.17
4
+ version: 0.9.18
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &70200327586920 !ruby/object:Gem::Requirement
16
+ requirement: &70250171425860 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.4.6
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70200327586920
24
+ version_requirements: *70250171425860
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sinatra
27
- requirement: &70200327586400 !ruby/object:Gem::Requirement
27
+ requirement: &70250171425340 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70200327586400
35
+ version_requirements: *70250171425340
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activesupport
38
- requirement: &70200327585920 !ruby/object:Gem::Requirement
38
+ requirement: &70250171424860 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.0.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70200327585920
46
+ version_requirements: *70250171424860
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: httpclient
49
- requirement: &70200327585440 !ruby/object:Gem::Requirement
49
+ requirement: &70250171424380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.2.1
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70200327585440
57
+ version_requirements: *70250171424380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: builder
60
- requirement: &70200327584960 !ruby/object:Gem::Requirement
60
+ requirement: &70250171423900 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.1.2
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70200327584960
68
+ version_requirements: *70250171423900
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mime-types
71
- requirement: &70200327584480 !ruby/object:Gem::Requirement
71
+ requirement: &70250171423420 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '1.16'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70200327584480
79
+ version_requirements: *70250171423420
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: xml-simple
82
- requirement: &70200327584000 !ruby/object:Gem::Requirement
82
+ requirement: &70250171422940 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.0.12
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70200327584000
90
+ version_requirements: *70250171422940
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: thin
93
- requirement: &70200327583520 !ruby/object:Gem::Requirement
93
+ requirement: &70250171422460 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.2.7
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70200327583520
101
+ version_requirements: *70250171422460
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: s3
104
- requirement: &70200327583040 !ruby/object:Gem::Requirement
104
+ requirement: &70250171421980 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 0.3.8
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *70200327583040
112
+ version_requirements: *70250171421980
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: bunny
115
- requirement: &70200327582560 !ruby/object:Gem::Requirement
115
+ requirement: &70250171421500 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 0.7.8
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *70200327582560
123
+ version_requirements: *70250171421500
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: sqs
126
- requirement: &70200327582080 !ruby/object:Gem::Requirement
126
+ requirement: &70250171421020 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: 0.1.2
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *70200327582080
134
+ version_requirements: *70250171421020
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: unicorn
137
- requirement: &70200327581600 !ruby/object:Gem::Requirement
137
+ requirement: &70250171420540 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ~>
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: 4.1.1
143
143
  type: :runtime
144
144
  prerelease: false
145
- version_requirements: *70200327581600
145
+ version_requirements: *70250171420540
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: i18n
148
- requirement: &70200327581120 !ruby/object:Gem::Requirement
148
+ requirement: &70250171420060 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: 0.4.2
154
154
  type: :runtime
155
155
  prerelease: false
156
- version_requirements: *70200327581120
156
+ version_requirements: *70250171420060
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: scashin133-syslog_logger
159
- requirement: &70200327580640 !ruby/object:Gem::Requirement
159
+ requirement: &70250171419580 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ~>
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: 1.7.3
165
165
  type: :runtime
166
166
  prerelease: false
167
- version_requirements: *70200327580640
167
+ version_requirements: *70250171419580
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: rspec
170
- requirement: &70200327580260 !ruby/object:Gem::Requirement
170
+ requirement: &70250171419200 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ! '>='
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: '0'
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *70200327580260
178
+ version_requirements: *70250171419200
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: rake
181
- requirement: &70200327579800 !ruby/object:Gem::Requirement
181
+ requirement: &70250171418740 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ! '>='
@@ -186,7 +186,7 @@ dependencies:
186
186
  version: '0'
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *70200327579800
189
+ version_requirements: *70250171418740
190
190
  description: Tootsie is a simple audio/video/image transcoding/modification application.
191
191
  email:
192
192
  - alex@origo.no
@@ -223,6 +223,7 @@ files:
223
223
  - lib/tootsie/task_manager.rb
224
224
  - lib/tootsie/tasks/job_task.rb
225
225
  - lib/tootsie/tasks/notify_task.rb
226
+ - lib/tootsie/utility/backoff.rb
226
227
  - lib/tootsie/version.rb
227
228
  - lib/tootsie/web_service.rb
228
229
  - spec/spec_helper.rb