officer 0.10.0 → 0.10.1

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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- officer (0.10.0)
4
+ officer (0.10.1)
5
5
  choice
6
6
  daemons
7
7
  eventmachine
@@ -13,19 +13,18 @@ Read more in my blog post: [http://remesch.com/officer-the-ruby-lock-server-and-
13
13
  Officer uses the 'daemons' gem to simplify creating long lived background processes.
14
14
 
15
15
  Help information:
16
- officer --help
17
16
 
18
- Usage: officer [-hofplsd]
17
+ Usage: officer [-hofplsdm]
19
18
  -h, --host=HOST The hostname or IP to bind to (default: 0.0.0.0)
20
19
  -o, --socket-type=OPTION TCP or UNIX (default: TCP)
21
- -f, --socket-file=FILE Full path and name to the UNIX socket file (only used if --socket-type=UNIX, default: /tmp/officer.sock)
20
+ -f, --socket-file=FILE Full path and name to the UNIX domain socket file (only used with '-o UNIX', default: /tmp/officer.sock)
22
21
  -p, --port=PORT The port to listen on (default: 11500)
23
22
  -l, --log-level Set the log level to debug, info, or error (default: error)
24
23
  -s, --stats Log stats every 5 seconds (default: off, required log level: info)
25
24
  -d, --pid-dir Set directory where pid file will be saved (default: operating system's run directory)
25
+ -m, --max-idle Maximum idle time (in seconds) to wait before closing a connection that is idle and hasn't sent a keep alive (default: 60)
26
26
  --help
27
27
 
28
-
29
28
  Run Officer in the foreground with full logging and statistics:
30
29
 
31
30
  officer run -- -l debug -s -d /tmp
@@ -58,7 +57,8 @@ Options:
58
57
  - :port => TCP Port to listen on (default: 11500).
59
58
  - :socket_type => TCP or UNIX (default: TCP).
60
59
  - :socket_file => Full path to the server's UNIX domain socket file (default: /tmp/officer.sock). This option is only used when the socket type is UNIX.
61
-
60
+ - :namespace => Prepend a namespace to each lock name (default: empty string).
61
+ - :keep_alive_freq => Frequency (in Hz) to send a keep alive message (default: 6 Hz).
62
62
 
63
63
  ### Lock
64
64
 
@@ -67,7 +67,6 @@ Options:
67
67
  Options:
68
68
 
69
69
  - :timeout => The number of seconds to wait for a lock to become available (default: wait forever).
70
- - :namespace => Prepend a namespace to each lock name (default: empty string).
71
70
  - :queue_max => If the lock queue length is greater than :queue_max then don't wait for the lock (default: infinite).
72
71
 
73
72
 
@@ -161,9 +161,12 @@ module Officer
161
161
  connection.my_locks my_locks
162
162
  end
163
163
 
164
- def watchdog
164
+ def close_idle_connections(max_idle)
165
165
  @connections.each do |conn, names|
166
-
166
+ if conn.last_cmd_at < Time.now.utc - max_idle
167
+ Officer::Log.error "Closing due to max idle time: #{conn.to_host_s}"
168
+ conn.close_connection
169
+ end
167
170
  end
168
171
  end
169
172
  end
@@ -69,6 +69,12 @@ module Officer
69
69
  desc "Set directory where pid file will be saved (default: operating system's run directory)"
70
70
  end
71
71
 
72
+ option :max_idle do
73
+ short '-m'
74
+ long '--max-idle'
75
+ desc "Maximum idle time (in seconds) to wait before closing a connection that is idle and hasn't sent a keep alive (default: 60)"
76
+ end
77
+
72
78
  option :help do
73
79
  long '--help'
74
80
  end
@@ -19,11 +19,19 @@ module Officer
19
19
  params[:socket_file] ||= '/tmp/officer.sock'
20
20
  params[:stats] ||= false
21
21
  params[:log_level] ||= 'error'
22
+ params[:close_idle] = params.include?(:close_idle) ? params[:close_idle] : true
23
+ params[:max_idle] ||= 60 # Seconds.
22
24
 
23
25
  Officer::Log.set_log_level params[:log_level]
24
26
  end
25
27
 
26
28
  def run
29
+ Officer::Log.debug 'Starting Officer with params:'
30
+
31
+ @params.each do |param, value|
32
+ Officer::Log.debug " #{param} => #{value}"
33
+ end
34
+
27
35
  EM.error_handler {|e| Officer::Log.error e}
28
36
 
29
37
  EM.kqueue = true if EM.kqueue?
@@ -33,7 +41,12 @@ module Officer
33
41
  if @params[:stats]
34
42
  EM::PeriodicTimer.new(5) do
35
43
  Officer::LockStore.instance.log_state
36
- Officer::LockStore.instance.watchdog
44
+ end
45
+ end
46
+
47
+ if @params[:close_idle]
48
+ EM::PeriodicTimer.new(5) do
49
+ Officer::LockStore.instance.close_idle_connections @params[:max_idle]
37
50
  end
38
51
  end
39
52
 
@@ -1,3 +1,3 @@
1
1
  module Officer
2
- VERSION = "0.10.0"
2
+ VERSION = "0.10.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: officer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-19 00:00:00.000000000 Z
12
+ date: 2012-06-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70138100800420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
24
+ version_requirements: *70138100800420
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: json
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &70138100799880 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: '0'
38
33
  type: :runtime
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
35
+ version_requirements: *70138100799880
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: daemons
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &70138100799300 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ! '>='
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: '0'
54
44
  type: :runtime
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
46
+ version_requirements: *70138100799300
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: choice
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &70138100798800 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ! '>='
@@ -69,15 +54,10 @@ dependencies:
69
54
  version: '0'
70
55
  type: :runtime
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
57
+ version_requirements: *70138100798800
78
58
  - !ruby/object:Gem::Dependency
79
59
  name: rake
80
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &70138100798280 !ruby/object:Gem::Requirement
81
61
  none: false
82
62
  requirements:
83
63
  - - ! '>='
@@ -85,15 +65,10 @@ dependencies:
85
65
  version: '0'
86
66
  type: :development
87
67
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
68
+ version_requirements: *70138100798280
94
69
  - !ruby/object:Gem::Dependency
95
70
  name: rspec
96
- requirement: !ruby/object:Gem::Requirement
71
+ requirement: &70138100797740 !ruby/object:Gem::Requirement
97
72
  none: false
98
73
  requirements:
99
74
  - - ! '>='
@@ -101,12 +76,7 @@ dependencies:
101
76
  version: '0'
102
77
  type: :development
103
78
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
79
+ version_requirements: *70138100797740
110
80
  description: Officer is designed to help you coordinate distributed processes and
111
81
  avoid race conditions.
112
82
  email:
@@ -151,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
121
  version: '0'
152
122
  segments:
153
123
  - 0
154
- hash: -2483715139742074305
124
+ hash: -2468263928416701502
155
125
  required_rubygems_version: !ruby/object:Gem::Requirement
156
126
  none: false
157
127
  requirements:
@@ -160,10 +130,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
130
  version: '0'
161
131
  segments:
162
132
  - 0
163
- hash: -2483715139742074305
133
+ hash: -2468263928416701502
164
134
  requirements: []
165
135
  rubyforge_project:
166
- rubygems_version: 1.8.23
136
+ rubygems_version: 1.8.17
167
137
  signing_key:
168
138
  specification_version: 3
169
139
  summary: Ruby lock server and client built on EventMachine.