tootsie 0.9.17 → 0.9.18

Sign up to get free protection for your applications and to get access to all the features.
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