beaneater 0.3.3 → 1.0.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/CHANGELOG.md +6 -1
- data/README.md +37 -19
- data/examples/demo.rb +1 -2
- data/lib/beaneater.rb +56 -3
- data/lib/beaneater/configuration.rb +3 -1
- data/lib/beaneater/connection.rb +123 -26
- data/lib/beaneater/errors.rb +1 -1
- data/lib/beaneater/job/collection.rb +57 -36
- data/lib/beaneater/job/record.rb +27 -27
- data/lib/beaneater/stats.rb +28 -5
- data/lib/beaneater/stats/fast_struct.rb +1 -1
- data/lib/beaneater/stats/stat_struct.rb +8 -2
- data/lib/beaneater/tube/collection.rb +67 -26
- data/lib/beaneater/tube/record.rb +38 -24
- data/lib/beaneater/version.rb +3 -3
- data/test/beaneater_test.rb +1 -7
- data/test/connection_test.rb +37 -1
- data/test/job_test.rb +3 -7
- data/test/jobs_test.rb +12 -40
- data/test/prompt_regexp_test.rb +4 -3
- data/test/stat_struct_test.rb +10 -0
- data/test/stats_test.rb +7 -7
- data/test/test_helper.rb +30 -6
- data/test/tube_test.rb +9 -20
- data/test/tubes_test.rb +59 -54
- metadata +2 -8
- data/lib/beaneater/pool.rb +0 -166
- data/lib/beaneater/pool_command.rb +0 -79
- data/test/pool_command_test.rb +0 -90
- data/test/pool_test.rb +0 -185
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe3f3a885f7fd1d205f508d48e2ce588bb56d2e4
|
4
|
+
data.tar.gz: 0d5578662d16fa1ad5da7f48e85f1ebf2a13d66d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 532de361e18a96f6acbbb152edc7ada7e83c2793fb494e03ea8e9f0064c6d81b20dfd296fbec26731d61a944cbdc43986492ce77f3c5e4fa30a7a3158e27a185
|
7
|
+
data.tar.gz: 1838fcddd8e169470a13dac5305ed0dec7b84a5fdd79289626f05a45862b4b7bce4e45cb82f455ea46ec0ed738e9003e6922b751c8f85f57aaa386e2e5b25c0f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# CHANGELOG for Beaneater
|
2
2
|
|
3
|
+
## 1.0.0 (April 26th 2015)
|
4
|
+
|
5
|
+
* Beginning from version 1.0.0 the support for `Beaneater::Pool` has been dropped (@alup)
|
6
|
+
* `Jobs#find_all` method has been removed, since it is no longer necessary after removing pool (@alup)
|
7
|
+
* `Tubes` is now an enumerable allowing `tubes` to be handled as a collection (@Aethelflaed)
|
8
|
+
|
3
9
|
## 0.3.3 (August 16th 2014)
|
4
10
|
|
5
11
|
* Fix failure when job is not defined and fix exception handling for jobs (@nicholasorenrawlings)
|
@@ -7,7 +13,6 @@
|
|
7
13
|
* Add travis-ci badge (@tdg5)
|
8
14
|
* Fix tests to run more reliably (@tdg5)
|
9
15
|
|
10
|
-
|
11
16
|
## 0.3.2 (Sept 15 2013)
|
12
17
|
|
13
18
|
* Fix #29 ExpectedCrlfError name and invocation (@tdg5)
|
data/README.md
CHANGED
@@ -8,6 +8,7 @@ originally designed for reducing the latency of page views in high-volume web ap
|
|
8
8
|
running time-consuming tasks asynchronously. Read the [yardocs](http://rdoc.info/github/beanstalkd/beaneater) and/or the
|
9
9
|
[beanstalk protocol](https://github.com/kr/beanstalkd/blob/master/doc/protocol.md) for more details.
|
10
10
|
|
11
|
+
**Important Note**: This README is **for branch 1.0.x which is under development**. Please switch to latest `0.x` branch for stable version.
|
11
12
|
|
12
13
|
## Why Beanstalk?
|
13
14
|
|
@@ -83,13 +84,25 @@ gem 'beaneater'
|
|
83
84
|
|
84
85
|
and run `bundle install` to install the dependency.
|
85
86
|
|
87
|
+
## Breaking Changes since 1.0!
|
88
|
+
|
89
|
+
Starting in 1.0, we removed the concept of the `Beaneater::Pool` which introduced considerable complexity into this gem.
|
90
|
+
|
91
|
+
* Beginning from version 1.0.0 the support for `Beaneater::Pool` has been dropped.
|
92
|
+
The specific feature may be supported again in the next versions as separate module
|
93
|
+
or through a separate gem. If you want to use the pool feature you should switch to
|
94
|
+
0.x stable branches instead.
|
95
|
+
* `Jobs#find_all` method has been removed, since it is no longer necessary.
|
96
|
+
|
97
|
+
To manage a pool of beanstalkd instances, we'd prefer to leave the handling to the developer or other higher-level libraries.
|
98
|
+
|
86
99
|
## Quick Overview:
|
87
100
|
|
88
101
|
The concise summary of how to use beaneater:
|
89
102
|
|
90
103
|
```ruby
|
91
104
|
# Connect to pool
|
92
|
-
@beanstalk = Beaneater
|
105
|
+
@beanstalk = Beaneater.new('localhost:11300')
|
93
106
|
# Enqueue jobs to tube
|
94
107
|
@tube = @beanstalk.tubes["my-tube"]
|
95
108
|
@tube.put '{ "key" : "foo" }', :pri => 5
|
@@ -118,7 +131,8 @@ Beaneater.configure do |config|
|
|
118
131
|
# config.default_put_pri = 65536
|
119
132
|
# config.default_put_ttr = 120
|
120
133
|
# config.job_parser = lambda { |body| body }
|
121
|
-
# config.
|
134
|
+
# config.job_serializer = lambda { |body| body }
|
135
|
+
# config.beanstalkd_url = 'localhost:11300'
|
122
136
|
end
|
123
137
|
```
|
124
138
|
|
@@ -126,18 +140,17 @@ The above options are all defaults, so only include a configuration block if you
|
|
126
140
|
|
127
141
|
### Connection
|
128
142
|
|
129
|
-
To interact with a beanstalk queue, first establish a connection by providing
|
143
|
+
To interact with a beanstalk queue, first establish a connection by providing an address:
|
130
144
|
|
131
145
|
```ruby
|
132
|
-
@beanstalk = Beaneater
|
146
|
+
@beanstalk = Beaneater.new('10.0.1.5:11300')
|
133
147
|
|
134
|
-
# Or if ENV['BEANSTALKD_URL] == '
|
135
|
-
@beanstalk = Beaneater
|
136
|
-
@beanstalk.
|
137
|
-
@beanstalk.connections.last # => 127.0.0.1:11300
|
148
|
+
# Or if ENV['BEANSTALKD_URL'] == '127.0.0.1:11300'
|
149
|
+
@beanstalk = Beaneater.new
|
150
|
+
@beanstalk.connectiont # => localhost:11300
|
138
151
|
```
|
139
152
|
|
140
|
-
You can conversely close and dispose of a
|
153
|
+
You can conversely close and dispose of a connection at any time with:
|
141
154
|
|
142
155
|
```ruby
|
143
156
|
@beanstalk.close
|
@@ -248,6 +261,16 @@ Beanstalkd can only stores strings as job bodies, but you can easily encode your
|
|
248
261
|
@tube.put({:foo => 'bar'}.to_json)
|
249
262
|
```
|
250
263
|
|
264
|
+
Moreover, you can provide a default job serializer by setting the corresponding configuration
|
265
|
+
option (`job_serializer`), in order to apply the encoding on each job body which
|
266
|
+
is going to be send using the `put` command. For example, to encode a ruby object to JSON format:
|
267
|
+
|
268
|
+
```ruby
|
269
|
+
Beaneater.configure do |config|
|
270
|
+
config.job_serializer = lambda { |body| JSON.dump(body) }
|
271
|
+
end
|
272
|
+
```
|
273
|
+
|
251
274
|
Each job has various metadata associated such as `priority`, `delay`, and `ttr` which can be
|
252
275
|
specified as part of the `put` command:
|
253
276
|
|
@@ -266,7 +289,7 @@ In order to process jobs, the client should first specify the intended tubes to
|
|
266
289
|
this will default to watching just the `default` tube.
|
267
290
|
|
268
291
|
```ruby
|
269
|
-
@beanstalk = Beaneater
|
292
|
+
@beanstalk = Beaneater.new('10.0.1.5:11300')
|
270
293
|
@beanstalk.tubes.watch!('tube-name', 'other-tube')
|
271
294
|
```
|
272
295
|
|
@@ -330,13 +353,6 @@ inspected using the 'peek' commands. To find and peek at a particular job based
|
|
330
353
|
# => <Beaneater::Job id=123 body="foo">
|
331
354
|
```
|
332
355
|
|
333
|
-
You can also `find_all` jobs across all connections:
|
334
|
-
|
335
|
-
```ruby
|
336
|
-
@beanstalk.jobs.find_all(123)
|
337
|
-
# => [<Beaneater::Job id=123 body="foo">, <Beaneater::Job id=123 body="bar">]
|
338
|
-
```
|
339
|
-
|
340
356
|
or you can peek at jobs within a tube:
|
341
357
|
|
342
358
|
```ruby
|
@@ -424,8 +440,9 @@ beanstalk overall:
|
|
424
440
|
```ruby
|
425
441
|
# Get overall stats about the job processing that has occurred
|
426
442
|
print @beanstalk.stats
|
427
|
-
# =>
|
428
|
-
|
443
|
+
# => #<Beaneater::StatStruct current_jobs_urgent=0, current_jobs_ready=0, current_jobs_reserved=0, current_jobs_delayed=0, current_jobs_buried=0, ...
|
444
|
+
|
445
|
+
print @beanstalk.stats.current_tubes
|
429
446
|
# => 1
|
430
447
|
```
|
431
448
|
|
@@ -466,3 +483,4 @@ There are other resources helpful when learning about beanstalk:
|
|
466
483
|
- [Nathan Esquenazi](https://github.com/nesquena) - Contributor and co-maintainer
|
467
484
|
- [Keith Rarick](https://github.com/kr) - Much code inspired and adapted from beanstalk-client
|
468
485
|
- [Vidar Hokstad](https://github.com/vidarh) - Replaced telnet with correct TCP socket handling
|
486
|
+
- [Andreas Loupasakis](https://github.com/alup) - Improve test coverage, improve job configuration
|
data/examples/demo.rb
CHANGED
@@ -6,8 +6,7 @@ require 'beaneater'
|
|
6
6
|
|
7
7
|
# Establish a pool of beanstalks
|
8
8
|
puts step("Connecting to Beanstalk")
|
9
|
-
bc = Beaneater
|
10
|
-
# bc = Beaneater::Pool.new(['localhost', 'localhost:11301', 'localhost:11302'])
|
9
|
+
bc = Beaneater.new('localhost')
|
11
10
|
puts bc
|
12
11
|
|
13
12
|
# Print out key stats
|
data/lib/beaneater.rb
CHANGED
@@ -1,11 +1,64 @@
|
|
1
1
|
require 'thread' unless defined?(Mutex)
|
2
2
|
|
3
|
-
%w(version configuration errors
|
3
|
+
%w(version configuration errors connection tube job stats).each do |f|
|
4
4
|
require "beaneater/#{f}"
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
class Beaneater
|
8
|
+
|
9
|
+
# @!attribute connection
|
10
|
+
# @return <Beaneater::Connection> returns the associated connection object
|
11
|
+
attr_reader :connection
|
12
|
+
|
13
|
+
# Initialize new instance of Beaneater
|
14
|
+
#
|
15
|
+
# @param [String] address in the form "host:port"
|
16
|
+
# @example
|
17
|
+
# Beaneater.new('127.0.0.1:11300')
|
18
|
+
#
|
19
|
+
# ENV['BEANSTALKD_URL'] = '127.0.0.1:11300'
|
20
|
+
# @b = Beaneater.new
|
21
|
+
# @b.connection.host # => '127.0.0.1'
|
22
|
+
# @b.connection.port # => '11300'
|
23
|
+
#
|
24
|
+
def initialize(address)
|
25
|
+
@connection = Connection.new(address)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns Beaneater::Tubes object for accessing tube related functions.
|
29
|
+
#
|
30
|
+
# @return [Beaneater::Tubes] tubes object
|
31
|
+
# @api public
|
32
|
+
def tubes
|
33
|
+
@tubes ||= Beaneater::Tubes.new(self)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns Beaneater::Jobs object for accessing job related functions.
|
37
|
+
#
|
38
|
+
# @return [Beaneater::Jobs] jobs object
|
39
|
+
# @api public
|
40
|
+
def jobs
|
41
|
+
@jobs ||= Beaneater::Jobs.new(self)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns Beaneater::Stats object for accessing beanstalk stats.
|
45
|
+
#
|
46
|
+
# @return [Beaneater::Stats] stats object
|
47
|
+
# @api public
|
48
|
+
def stats
|
49
|
+
@stats ||= Stats.new(self)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Closes the related connection
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# @beaneater_instance.close
|
56
|
+
#
|
57
|
+
def close
|
58
|
+
connection.close if connection
|
59
|
+
end
|
60
|
+
|
61
|
+
protected
|
9
62
|
|
10
63
|
class << self
|
11
64
|
# Yields a configuration block
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
class Beaneater
|
2
2
|
class Configuration
|
3
3
|
attr_accessor :default_put_delay # default delay value to put a job
|
4
4
|
attr_accessor :default_put_pri # default priority value to put a job
|
5
5
|
attr_accessor :default_put_ttr # default ttr value to put a job
|
6
6
|
attr_accessor :job_parser # default job_parser to parse job body
|
7
|
+
attr_accessor :job_serializer # default serializer for job body
|
7
8
|
attr_accessor :beanstalkd_url # default beanstalkd url
|
8
9
|
|
9
10
|
def initialize
|
@@ -11,6 +12,7 @@ module Beaneater
|
|
11
12
|
@default_put_pri = 65536
|
12
13
|
@default_put_ttr = 120
|
13
14
|
@job_parser = lambda { |body| body }
|
15
|
+
@job_serializer = lambda { |body| body }
|
14
16
|
@beanstalkd_url = nil
|
15
17
|
end
|
16
18
|
end # Configuration
|
data/lib/beaneater/connection.rb
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'socket'
|
3
3
|
|
4
|
-
|
4
|
+
class Beaneater
|
5
5
|
# Represents a connection to a beanstalkd instance.
|
6
6
|
class Connection
|
7
7
|
|
8
|
+
# Default number of retries to send a command to a connection
|
9
|
+
MAX_RETRIES = 3
|
10
|
+
|
11
|
+
# Default retry interval
|
12
|
+
DEFAULT_RETRY_INTERVAL = 1
|
13
|
+
|
8
14
|
# @!attribute address
|
9
15
|
# @return [String] returns Beanstalkd server address
|
10
16
|
# @example
|
@@ -21,6 +27,12 @@ module Beaneater
|
|
21
27
|
# @return [Net::TCPSocket] returns connection object
|
22
28
|
attr_reader :address, :host, :port, :connection
|
23
29
|
|
30
|
+
# @!attribute tubes_watched
|
31
|
+
# @returns [Array<String>] returns currently watched tube names
|
32
|
+
# @!attribute tube_used
|
33
|
+
# @returns [String] returns currently used tube name
|
34
|
+
attr_accessor :tubes_watched, :tube_used
|
35
|
+
|
24
36
|
# Default port value for beanstalk connection
|
25
37
|
DEFAULT_PORT = 11300
|
26
38
|
|
@@ -28,13 +40,23 @@ module Beaneater
|
|
28
40
|
#
|
29
41
|
# @param [String] address beanstalkd instance address.
|
30
42
|
# @example
|
31
|
-
# Beaneater::Connection.new('
|
32
|
-
# Beaneater::Connection.new('
|
43
|
+
# Beaneater::Connection.new('127.0.0.1')
|
44
|
+
# Beaneater::Connection.new('127.0.0.1:11300')
|
45
|
+
#
|
46
|
+
# ENV['BEANSTALKD_URL'] = '127.0.0.1:11300'
|
47
|
+
# @b = Beaneater.new
|
48
|
+
# @b.connection.host # => '127.0.0.1'
|
49
|
+
# @b.connection.port # => '11300'
|
33
50
|
#
|
34
51
|
def initialize(address)
|
35
|
-
@address = address
|
36
|
-
@connection = establish_connection
|
52
|
+
@address = address || _host_from_env || Beaneater.configuration.beanstalkd_url
|
37
53
|
@mutex = Mutex.new
|
54
|
+
@tube_used = 'default'
|
55
|
+
@tubes_watched = ['default']
|
56
|
+
|
57
|
+
establish_connection
|
58
|
+
rescue
|
59
|
+
_raise_not_connected!
|
38
60
|
end
|
39
61
|
|
40
62
|
# Send commands to beanstalkd server via connection.
|
@@ -43,18 +65,19 @@ module Beaneater
|
|
43
65
|
# @param [String] command Beanstalkd command
|
44
66
|
# @return [Array<Hash{String => String, Number}>] Beanstalkd command response
|
45
67
|
# @example
|
68
|
+
# @conn = Beaneater::Connection.new
|
46
69
|
# @conn.transmit('bury 123')
|
70
|
+
# @conn.transmit('stats')
|
47
71
|
#
|
48
72
|
def transmit(command, options={})
|
49
|
-
|
50
|
-
|
73
|
+
_with_retry(options[:retry_interval], options[:init]) do
|
74
|
+
@mutex.synchronize do
|
75
|
+
_raise_not_connected! unless connection
|
76
|
+
|
51
77
|
command = command.force_encoding('ASCII-8BIT') if command.respond_to?(:force_encoding)
|
52
78
|
connection.write(command.to_s + "\r\n")
|
53
|
-
res = connection.
|
54
|
-
raise_not_connected! unless res
|
79
|
+
res = connection.readline
|
55
80
|
parse_response(command, res)
|
56
|
-
else # no connection
|
57
|
-
raise_not_connected!
|
58
81
|
end
|
59
82
|
end
|
60
83
|
end
|
@@ -65,8 +88,10 @@ module Beaneater
|
|
65
88
|
# @conn.close
|
66
89
|
#
|
67
90
|
def close
|
68
|
-
@connection
|
69
|
-
|
91
|
+
if @connection
|
92
|
+
@connection.close
|
93
|
+
@connection = nil
|
94
|
+
end
|
70
95
|
end
|
71
96
|
|
72
97
|
# Returns string representation of job.
|
@@ -79,6 +104,15 @@ module Beaneater
|
|
79
104
|
end
|
80
105
|
alias :inspect :to_s
|
81
106
|
|
107
|
+
def add_to_watched(tube_name)
|
108
|
+
@tubes_watched << tube_name
|
109
|
+
@tubes_watched.uniq
|
110
|
+
end
|
111
|
+
|
112
|
+
def remove_from_watched(tube_name)
|
113
|
+
@tubes_watched.delete(tube_name)
|
114
|
+
end
|
115
|
+
|
82
116
|
protected
|
83
117
|
|
84
118
|
# Establish a connection based on beanstalk address.
|
@@ -89,13 +123,11 @@ module Beaneater
|
|
89
123
|
# establish_connection('localhost:3005')
|
90
124
|
#
|
91
125
|
def establish_connection
|
92
|
-
@
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
rescue Exception => ex
|
98
|
-
raise NotConnected, "#{ex.class}: #{ex}"
|
126
|
+
@address = address.first if address.is_a?(Array)
|
127
|
+
match = address.split(':')
|
128
|
+
@host, @port = match[0], Integer(match[1] || DEFAULT_PORT)
|
129
|
+
|
130
|
+
@connection = TCPSocket.new @host, @port
|
99
131
|
end
|
100
132
|
|
101
133
|
# Parses the response and returns the useful beanstalk response.
|
@@ -103,11 +135,11 @@ module Beaneater
|
|
103
135
|
#
|
104
136
|
# @param [String] cmd Beanstalk command transmitted
|
105
137
|
# @param [String] res Telnet command response
|
106
|
-
# @return [Array<Hash{String => String, Number}>] Beanstalk response with `status`, `id`, `body
|
138
|
+
# @return [Array<Hash{String => String, Number}>] Beanstalk response with `status`, `id`, `body`
|
107
139
|
# @raise [Beaneater::UnexpectedResponse] Response from beanstalk command was an error status
|
108
140
|
# @example
|
109
141
|
# parse_response("delete 56", "DELETED 56\nFOO")
|
110
|
-
# # => { :body => "FOO", :status => "DELETED", :id => 56
|
142
|
+
# # => { :body => "FOO", :status => "DELETED", :id => 56 }
|
111
143
|
#
|
112
144
|
def parse_response(cmd, res)
|
113
145
|
status = res.chomp
|
@@ -123,9 +155,9 @@ module Beaneater
|
|
123
155
|
raise ExpectedCrlfError.new('EXPECTED_CRLF', cmd) if crlf != "\r\n"
|
124
156
|
end
|
125
157
|
id = body_values[1]
|
126
|
-
response = { :status => status
|
158
|
+
response = { :status => status }
|
127
159
|
response[:id] = id if id
|
128
|
-
response[:
|
160
|
+
response[:body] = body if body
|
129
161
|
response
|
130
162
|
end
|
131
163
|
|
@@ -136,10 +168,75 @@ module Beaneater
|
|
136
168
|
Beaneater.configuration
|
137
169
|
end
|
138
170
|
|
171
|
+
private
|
172
|
+
|
173
|
+
def _initialize_tubes
|
174
|
+
if @tubes_watched != ['default']
|
175
|
+
tubes_watched.each do |t|
|
176
|
+
transmit("watch #{t}", init: false)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
transmit("use #{tube_used}", init: false) if @tube_used != 'default'
|
181
|
+
end
|
182
|
+
|
183
|
+
# Wrapper method for capturing certain failures and retry the payload block
|
184
|
+
#
|
185
|
+
# @param [Proc] block The command to execute.
|
186
|
+
# @param [Integer] retry_interval The time to wait before the next retry
|
187
|
+
# @param [Integer] tries The maximum number of tries in draining mode
|
188
|
+
# @return [Object] Result of the block passed
|
189
|
+
#
|
190
|
+
def _with_retry(retry_interval, init=true, tries=MAX_RETRIES, &block)
|
191
|
+
yield
|
192
|
+
rescue EOFError, Errno::ECONNRESET, Errno::EPIPE,
|
193
|
+
Errno::ECONNREFUSED => ex
|
194
|
+
_reconnect(ex, retry_interval)
|
195
|
+
_initialize_tubes if init
|
196
|
+
retry
|
197
|
+
rescue Beaneater::DrainingError
|
198
|
+
tries -= 1
|
199
|
+
if tries.zero?
|
200
|
+
close
|
201
|
+
raise
|
202
|
+
end
|
203
|
+
sleep(retry_interval || DEFAULT_RETRY_INTERVAL)
|
204
|
+
retry
|
205
|
+
end
|
206
|
+
|
207
|
+
# Tries to re-establish connection to the beanstalkd
|
208
|
+
#
|
209
|
+
# @param [Exception] original_exception The exception caused the retry
|
210
|
+
# @param [Integer] retry_interval The time to wait before the next reconnect
|
211
|
+
# @param [Integer] tries The maximum number of attempts to reconnect
|
212
|
+
def _reconnect(original_exception, retry_interval, tries=MAX_RETRIES)
|
213
|
+
close
|
214
|
+
establish_connection
|
215
|
+
rescue Errno::ECONNREFUSED
|
216
|
+
tries -= 1
|
217
|
+
if tries.zero?
|
218
|
+
_raise_not_connected!
|
219
|
+
end
|
220
|
+
sleep(retry_interval || DEFAULT_RETRY_INTERVAL)
|
221
|
+
retry
|
222
|
+
end
|
223
|
+
|
224
|
+
# The host provided by BEANSTALKD_URL environment variable, if available.
|
225
|
+
#
|
226
|
+
# @return [String] A beanstalkd host address
|
227
|
+
# @example
|
228
|
+
# ENV['BEANSTALKD_URL'] = "localhost:1212"
|
229
|
+
# # => 'localhost:1212'
|
230
|
+
#
|
231
|
+
def _host_from_env
|
232
|
+
ENV['BEANSTALKD_URL'].respond_to?(:length) && ENV['BEANSTALKD_URL'].length > 0 && ENV['BEANSTALKD_URL'].strip
|
233
|
+
end
|
234
|
+
|
139
235
|
# Raises an error to be triggered when the connection has failed
|
140
236
|
# @raise [Beaneater::NotConnected] Beanstalkd is no longer connected
|
141
|
-
def
|
142
|
-
raise NotConnected, "Connection to beanstalk '#{@host}:#{@port}' is closed!"
|
237
|
+
def _raise_not_connected!
|
238
|
+
raise Beaneater::NotConnected, "Connection to beanstalk '#{@host}:#{@port}' is closed!"
|
143
239
|
end
|
240
|
+
|
144
241
|
end # Connection
|
145
242
|
end # Beaneater
|