serverengine 1.5.7 → 1.5.8
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 +15 -0
- data/.travis.yml +1 -0
- data/Changelog +5 -0
- data/lib/serverengine/daemon_logger.rb +25 -15
- data/lib/serverengine/version.rb +1 -1
- data/spec/daemon_logger_spec.rb +33 -8
- metadata +5 -16
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OWJjNGIwYzAzZWFiOWYzNjMzODhiZGMyOTI0YzgwMzQ0MjRlMWFjMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YTI2MGEzN2E3Yjc5NzUxZTY2YjYwMWZkYmIyN2VkOTM5OTA4MGQ0MA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OTI3ZDNiN2I2MGQxYTBmZWQwZWU2ZGFmNDRkYTE5MGZjMWY1YzZkMDJlYTM5
|
10
|
+
M2JiZTBhZWI1MGQwMTlhNGM2MzQwMjNkODEyYmY3ODk3ZTIxNTY3NWQxZGQ5
|
11
|
+
MGQzNTIxYjA4NGZhYTI1Y2Y4OWI4MzhkNWY2ZjY1NTg2NGMwNWE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MzkxNmJiZTU1ZmRlNzgyYzZhMmRmOGVmOTI0MWI2NDU4MjlkMjE1OWIxM2M5
|
14
|
+
MGYyMjNmYmZhOGJlNDcwNmI1NDZiNTQ1MzcyYTljMGZhMzVkMzkxYWU0ZjYz
|
15
|
+
MTU4YTAyYTdlMjYwM2QwMTE0OTIxMTMyNmQ3Mzg1MjU3MTE1ODY=
|
data/.travis.yml
CHANGED
data/Changelog
CHANGED
@@ -21,11 +21,16 @@ module ServerEngine
|
|
21
21
|
|
22
22
|
class DaemonLogger < Logger
|
23
23
|
def initialize(logdev, config={})
|
24
|
-
rotate_age = config[:log_rotate_age] || 5
|
25
|
-
rotate_size = config[:log_rotate_size] || 1048576
|
24
|
+
@rotate_age = config[:log_rotate_age] || 5
|
25
|
+
@rotate_size = config[:log_rotate_size] || 1048576
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
if RUBY_VERSION < "2.1.0"
|
28
|
+
# Ruby < 2.1.0 has a problem around log rotation with multiprocess:
|
29
|
+
# https://github.com/ruby/ruby/pull/428
|
30
|
+
@logdev_class = MultiprocessFileLogDevice
|
31
|
+
else
|
32
|
+
@logdev_class = LogDevice
|
33
|
+
end
|
29
34
|
|
30
35
|
super(nil)
|
31
36
|
|
@@ -39,10 +44,16 @@ module ServerEngine
|
|
39
44
|
# IO
|
40
45
|
@logdev = logdev
|
41
46
|
@logdev.sync = true if @logdev.respond_to?(:sync=)
|
42
|
-
@file_dev
|
43
|
-
|
44
|
-
|
45
|
-
|
47
|
+
if @file_dev
|
48
|
+
old_file_dev = @file_dev
|
49
|
+
@file_dev = nil
|
50
|
+
old_file_dev.close
|
51
|
+
end
|
52
|
+
elsif !@file_dev || @file_dev.filename != logdev
|
53
|
+
# update path string
|
54
|
+
old_file_dev = @file_dev
|
55
|
+
@file_dev = @logdev_class.new(logdev, shift_age: @rotate_age, shift_size: @rotate_size)
|
56
|
+
old_file_dev.close if old_file_dev
|
46
57
|
@logdev = @file_dev
|
47
58
|
end
|
48
59
|
logdev
|
@@ -98,7 +109,7 @@ module ServerEngine
|
|
98
109
|
def trace?; @level <= TRACE; end
|
99
110
|
|
100
111
|
def reopen!
|
101
|
-
@file_dev.reopen!
|
112
|
+
@file_dev.reopen! if @file_dev
|
102
113
|
nil
|
103
114
|
end
|
104
115
|
|
@@ -113,7 +124,7 @@ module ServerEngine
|
|
113
124
|
end
|
114
125
|
|
115
126
|
def close
|
116
|
-
@file_dev.close
|
127
|
+
@file_dev.close if @file_dev
|
117
128
|
nil
|
118
129
|
end
|
119
130
|
|
@@ -162,8 +173,6 @@ module ServerEngine
|
|
162
173
|
nil
|
163
174
|
end
|
164
175
|
|
165
|
-
attr_reader :path
|
166
|
-
|
167
176
|
def reopen!
|
168
177
|
@mutex.synchronize do
|
169
178
|
if @file
|
@@ -210,13 +219,14 @@ module ServerEngine
|
|
210
219
|
begin
|
211
220
|
lock.flock(File::LOCK_EX)
|
212
221
|
ino = lock.stat.ino
|
213
|
-
if ino == File.stat(@path).ino
|
222
|
+
if ino == File.stat(@path).ino and ino == stat.ino
|
214
223
|
# 3)
|
215
224
|
log_rotate
|
216
225
|
else
|
217
|
-
reopen
|
226
|
+
@file.reopen(@path, 'a')
|
227
|
+
@file.sync = true
|
218
228
|
end
|
219
|
-
|
229
|
+
ensure
|
220
230
|
lock.close
|
221
231
|
end
|
222
232
|
rescue Errno::ENOENT => e
|
data/lib/serverengine/version.rb
CHANGED
data/spec/daemon_logger_spec.rb
CHANGED
@@ -109,23 +109,25 @@ describe ServerEngine::DaemonLogger do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'rotation' do
|
112
|
-
log = DaemonLogger.new("tmp/se1.log", level: 'trace', log_rotate_age: 3, log_rotate_size:
|
113
|
-
|
112
|
+
log = DaemonLogger.new("tmp/se1.log", level: 'trace', log_rotate_age: 3, log_rotate_size: 10000)
|
113
|
+
# 100 bytes
|
114
|
+
log.warn "test1"*20
|
114
115
|
File.exist?("tmp/se1.log").should == true
|
115
116
|
File.exist?("tmp/se1.log.0").should == false
|
116
117
|
|
117
|
-
|
118
|
+
# 10000 bytes
|
119
|
+
100.times { log.warn "test2"*20 }
|
118
120
|
File.exist?("tmp/se1.log").should == true
|
119
121
|
File.exist?("tmp/se1.log.0").should == true
|
120
122
|
File.read("tmp/se1.log.0") =~ /test2$/
|
121
123
|
|
122
|
-
|
123
|
-
log.warn "
|
124
|
+
# 10000 bytes
|
125
|
+
100.times { log.warn "test3"*20 }
|
124
126
|
File.exist?("tmp/se1.log").should == true
|
125
|
-
File.exist?("tmp/se1.log.
|
126
|
-
File.exist?("tmp/se1.log.
|
127
|
+
File.exist?("tmp/se1.log.1").should == true
|
128
|
+
File.exist?("tmp/se1.log.2").should == false
|
127
129
|
|
128
|
-
log.warn "
|
130
|
+
log.warn "test4"*20
|
129
131
|
File.read("tmp/se1.log.0") =~ /test5$/
|
130
132
|
end
|
131
133
|
|
@@ -138,4 +140,27 @@ describe ServerEngine::DaemonLogger do
|
|
138
140
|
log.debug "stdout logging test"
|
139
141
|
log.reopen!
|
140
142
|
end
|
143
|
+
|
144
|
+
it 'inter-process locking on rotation' do
|
145
|
+
log = DaemonLogger.new("tmp/se1.log", level: 'trace', log_rotate_age: 3, log_rotate_size: 10)
|
146
|
+
r, w = IO.pipe
|
147
|
+
$stderr = w # To capture #warn output in DaemonLogger
|
148
|
+
pid1 = Process.fork do
|
149
|
+
10.times do
|
150
|
+
log.info '0' * 15
|
151
|
+
end
|
152
|
+
end
|
153
|
+
pid2 = Process.fork do
|
154
|
+
10.times do
|
155
|
+
log.info '0' * 15
|
156
|
+
end
|
157
|
+
end
|
158
|
+
Process.waitpid pid1
|
159
|
+
Process.waitpid pid2
|
160
|
+
w.close
|
161
|
+
stderr = r.read
|
162
|
+
r.close
|
163
|
+
$stderr = STDERR
|
164
|
+
stderr.should_not =~ /(log shifting failed|log writing failed|log rotation inter-process lock failed)/
|
165
|
+
end
|
141
166
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serverengine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
5
|
-
prerelease:
|
4
|
+
version: 1.5.8
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Sadayuki Furuhashi
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-06-27 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: sigdump
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -103,30 +96,26 @@ files:
|
|
103
96
|
homepage: https://github.com/frsyuki/serverengine
|
104
97
|
licenses:
|
105
98
|
- Apache 2.0
|
99
|
+
metadata: {}
|
106
100
|
post_install_message:
|
107
101
|
rdoc_options: []
|
108
102
|
require_paths:
|
109
103
|
- lib
|
110
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
105
|
requirements:
|
113
106
|
- - ! '>='
|
114
107
|
- !ruby/object:Gem::Version
|
115
108
|
version: 1.9.3
|
116
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
-
none: false
|
118
110
|
requirements:
|
119
111
|
- - ! '>='
|
120
112
|
- !ruby/object:Gem::Version
|
121
113
|
version: '0'
|
122
|
-
segments:
|
123
|
-
- 0
|
124
|
-
hash: 1992105160493860645
|
125
114
|
requirements: []
|
126
115
|
rubyforge_project:
|
127
|
-
rubygems_version:
|
116
|
+
rubygems_version: 2.2.2
|
128
117
|
signing_key:
|
129
|
-
specification_version:
|
118
|
+
specification_version: 4
|
130
119
|
summary: ServerEngine - multiprocess server framework
|
131
120
|
test_files:
|
132
121
|
- spec/blocking_flag_spec.rb
|