higgs 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +18 -0
- data/bin/higgs_backup +20 -20
- data/lib/higgs/thread.rb +48 -15
- data/lib/higgs/utils/bman.rb +46 -43
- data/lib/higgs/version.rb +4 -4
- data/test/test_thread.rb +63 -6
- data/test/test_tman.rb +4 -4
- data/test/test_utils_bman.rb +2 -1
- metadata +2 -2
data/ChangeLog
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
2007-11-28 TOKI Yoshinori <toki@freedom.ne.jp>
|
2
|
+
|
3
|
+
* lib/higgs/version.rb: version 0.1.4.
|
4
|
+
|
5
|
+
2007-11-21 TOKI Yoshinori <toki@freedom.ne.jp>
|
6
|
+
|
7
|
+
* bin/higgs_backup, lib/higgs/utils/bman.rb
|
8
|
+
(Higgs::Utils::BackupManager class): autostart of DRb service.
|
9
|
+
|
10
|
+
2007-11-19 TOKI Yoshinori <toki@freedom.ne.jp>
|
11
|
+
|
12
|
+
* bin/higgs_backup: fixed a bug of some COMMANDs.
|
13
|
+
|
14
|
+
2007-11-14 TOKI Yoshinori <toki@freedom.ne.jp>
|
15
|
+
|
16
|
+
* lib/higgs/thread.rb (Higgs::SharedWork class): fixed a bug of
|
17
|
+
hung up on exception.
|
18
|
+
|
1
19
|
2007-11-11 TOKI Yoshinori <toki@freedom.ne.jp>
|
2
20
|
|
3
21
|
* lib/higgs/version.rb: version 0.1.3.
|
data/bin/higgs_backup
CHANGED
@@ -5,24 +5,24 @@ require 'higgs/utils/bman'
|
|
5
5
|
require 'optparse'
|
6
6
|
|
7
7
|
# for ident(1)
|
8
|
-
CVS_ID = '$Id: higgs_backup
|
8
|
+
CVS_ID = '$Id: higgs_backup 688 2007-11-21 14:35:49Z toki $'
|
9
9
|
|
10
10
|
STDOUT.sync = true
|
11
11
|
|
12
|
-
COMMANDs =
|
13
|
-
online_backup
|
14
|
-
index
|
15
|
-
data
|
16
|
-
rotate
|
17
|
-
jlog
|
18
|
-
recover
|
19
|
-
verify
|
20
|
-
clean_from
|
21
|
-
clean_to
|
22
|
-
restore
|
23
|
-
restore_files
|
24
|
-
restore_recover
|
25
|
-
restore_verify
|
12
|
+
COMMANDs = [
|
13
|
+
'online_backup',
|
14
|
+
%w[ index backup_index ],
|
15
|
+
%w[ data backup_data ],
|
16
|
+
%w[ rotate rotate_jlog ],
|
17
|
+
%w[ jlog backup_jlog ],
|
18
|
+
'recover',
|
19
|
+
'verify',
|
20
|
+
%w[ clean_from clean_jlog_from ],
|
21
|
+
%w[ clean_to clean_jlog_to ],
|
22
|
+
'restore',
|
23
|
+
'restore_files',
|
24
|
+
'restore_recover',
|
25
|
+
'restore_verify'
|
26
26
|
]
|
27
27
|
|
28
28
|
commands = %w[ online_backup ]
|
@@ -31,7 +31,7 @@ options = { :verbose => 0 }
|
|
31
31
|
opts = OptionParser.new
|
32
32
|
opts.banner = "Usage: #{opts.program_name} [OPTIONs] [COMMANDs]\n"
|
33
33
|
opts.banner << "COMMANDs:\n"
|
34
|
-
opts.banner << COMMANDs.map{|
|
34
|
+
opts.banner << COMMANDs.map{|n, m| opts.summary_indent + n }.join("\n") << "\n"
|
35
35
|
opts.banner << "OPTIONs:\n"
|
36
36
|
|
37
37
|
opts.on('-f', '--from=BACKUP_TARGET_STORAGE', String) {|value|
|
@@ -61,7 +61,7 @@ opts.parse!
|
|
61
61
|
unless (ARGV.empty?) then
|
62
62
|
count = 0
|
63
63
|
for cmd in ARGV
|
64
|
-
unless (COMMANDs.include? cmd) then
|
64
|
+
unless (COMMANDs.map{|n, m| n }.include? cmd) then
|
65
65
|
STDERR.puts "error: unknown command: #{cmd}"
|
66
66
|
count += 1
|
67
67
|
end
|
@@ -72,13 +72,13 @@ unless (ARGV.empty?) then
|
|
72
72
|
commands = ARGV
|
73
73
|
end
|
74
74
|
|
75
|
-
DRb.start_service
|
76
75
|
bman = Higgs::Utils::BackupManager.new(options)
|
77
76
|
for cmd in commands
|
78
|
-
|
77
|
+
name, method = COMMANDs.find{|n, m| n == cmd }
|
78
|
+
unless (name) then
|
79
79
|
raise "unknown command: #{cmd}"
|
80
80
|
end
|
81
|
-
bman.__send__(
|
81
|
+
bman.__send__(method || name)
|
82
82
|
end
|
83
83
|
|
84
84
|
# Local Variables:
|
data/lib/higgs/thread.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = multi-thread utilities
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date: 2007-
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2007-11-14 01:42:21 +0900 (Wed, 14 Nov 2007) $
|
5
|
+
# Revision:: $Revision: 686 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -15,7 +15,7 @@ require 'thread'
|
|
15
15
|
module Higgs
|
16
16
|
class Latch
|
17
17
|
# for ident(1)
|
18
|
-
CVS_ID = '$Id: thread.rb
|
18
|
+
CVS_ID = '$Id: thread.rb 686 2007-11-13 16:42:21Z toki $'
|
19
19
|
|
20
20
|
def initialize
|
21
21
|
@lock = Mutex.new
|
@@ -43,7 +43,7 @@ module Higgs
|
|
43
43
|
|
44
44
|
class CountDownLatch
|
45
45
|
# for ident(1)
|
46
|
-
CVS_ID = '$Id: thread.rb
|
46
|
+
CVS_ID = '$Id: thread.rb 686 2007-11-13 16:42:21Z toki $'
|
47
47
|
|
48
48
|
def initialize(count)
|
49
49
|
@count = count
|
@@ -73,7 +73,7 @@ module Higgs
|
|
73
73
|
|
74
74
|
class Barrier
|
75
75
|
# for ident(1)
|
76
|
-
CVS_ID = '$Id: thread.rb
|
76
|
+
CVS_ID = '$Id: thread.rb 686 2007-11-13 16:42:21Z toki $'
|
77
77
|
|
78
78
|
def initialize(count)
|
79
79
|
@count = count
|
@@ -102,7 +102,7 @@ module Higgs
|
|
102
102
|
|
103
103
|
class SharedWork
|
104
104
|
# for ident(1)
|
105
|
-
CVS_ID = '$Id: thread.rb
|
105
|
+
CVS_ID = '$Id: thread.rb 686 2007-11-13 16:42:21Z toki $'
|
106
106
|
|
107
107
|
def initialize(&work)
|
108
108
|
unless (work) then
|
@@ -112,14 +112,31 @@ module Higgs
|
|
112
112
|
@lock = Mutex.new
|
113
113
|
@cond = ConditionVariable.new
|
114
114
|
@state = :init
|
115
|
+
@abort = nil
|
116
|
+
@error = nil
|
115
117
|
@result = nil
|
116
118
|
end
|
117
119
|
|
120
|
+
def abort_msg
|
121
|
+
msg = 'abort'
|
122
|
+
msg << " - #{@error.inspect}" if @error
|
123
|
+
msg
|
124
|
+
end
|
125
|
+
private :abort_msg
|
126
|
+
|
127
|
+
def __result__
|
128
|
+
if (@abort) then
|
129
|
+
raise RuntimeError, abort_msg
|
130
|
+
end
|
131
|
+
@result
|
132
|
+
end
|
133
|
+
private :__result__
|
134
|
+
|
118
135
|
def result
|
119
136
|
@lock.synchronize{
|
120
137
|
case (@state)
|
121
138
|
when :done
|
122
|
-
return
|
139
|
+
return __result__
|
123
140
|
when :init
|
124
141
|
@state = :working
|
125
142
|
# fall through
|
@@ -127,17 +144,26 @@ module Higgs
|
|
127
144
|
until (@state == :done)
|
128
145
|
@cond.wait(@lock)
|
129
146
|
end
|
130
|
-
return
|
147
|
+
return __result__
|
131
148
|
else
|
132
149
|
raise 'internal error'
|
133
150
|
end
|
134
151
|
}
|
135
152
|
|
136
|
-
|
137
|
-
|
138
|
-
@
|
139
|
-
|
140
|
-
|
153
|
+
completed = false
|
154
|
+
begin
|
155
|
+
r = @result = @work.call
|
156
|
+
completed = true
|
157
|
+
ensure
|
158
|
+
@lock.synchronize{
|
159
|
+
@state = :done
|
160
|
+
unless (completed) then
|
161
|
+
@abort = true
|
162
|
+
@error = $!
|
163
|
+
end
|
164
|
+
@cond.broadcast
|
165
|
+
}
|
166
|
+
end
|
141
167
|
r
|
142
168
|
end
|
143
169
|
|
@@ -150,6 +176,13 @@ module Higgs
|
|
150
176
|
until (@state == :done)
|
151
177
|
@cond.wait(@lock)
|
152
178
|
end
|
179
|
+
when :done
|
180
|
+
# nothing to do.
|
181
|
+
else
|
182
|
+
raise 'internal error'
|
183
|
+
end
|
184
|
+
if (@abort) then
|
185
|
+
raise RuntimeError, abort_msg
|
153
186
|
end
|
154
187
|
@result = value
|
155
188
|
}
|
@@ -158,7 +191,7 @@ module Higgs
|
|
158
191
|
|
159
192
|
class ReadWriteLock
|
160
193
|
# for ident(1)
|
161
|
-
CVS_ID = '$Id: thread.rb
|
194
|
+
CVS_ID = '$Id: thread.rb 686 2007-11-13 16:42:21Z toki $'
|
162
195
|
|
163
196
|
def initialize
|
164
197
|
@lock = Mutex.new
|
@@ -295,7 +328,7 @@ module Higgs
|
|
295
328
|
|
296
329
|
class Pool
|
297
330
|
# for ident(1)
|
298
|
-
CVS_ID = '$Id: thread.rb
|
331
|
+
CVS_ID = '$Id: thread.rb 686 2007-11-13 16:42:21Z toki $'
|
299
332
|
|
300
333
|
class ShutdownException < Exceptions::ShutdownException
|
301
334
|
end
|
data/lib/higgs/utils/bman.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = backup manager
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date: 2007-11-
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2007-11-21 23:35:49 +0900 (Wed, 21 Nov 2007) $
|
5
|
+
# Revision:: $Revision: 688 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -26,10 +26,6 @@ module Higgs
|
|
26
26
|
# [<tt>:remote_services_uri</tt>] value is <tt>"druby://<em>host</em>:<em>port</em>"</tt>.
|
27
27
|
# journal log rotation remote service should be enabled.
|
28
28
|
#
|
29
|
-
# DRb service should be started before Higgs::BackupManager is used.
|
30
|
-
#
|
31
|
-
# DRb.start_service
|
32
|
-
#
|
33
29
|
# == online-backup
|
34
30
|
#
|
35
31
|
# online-backup is controlled by <tt>higgs_backup</tt> command that
|
@@ -38,24 +34,26 @@ module Higgs
|
|
38
34
|
# simple online-backup is like this...
|
39
35
|
#
|
40
36
|
# % higgs_backup -v -f foo -t backup_dir -u druby://localhost:17320
|
41
|
-
# 2007-
|
42
|
-
# 2007-
|
43
|
-
# 2007-
|
44
|
-
# 2007-
|
45
|
-
# 2007-
|
46
|
-
# 2007-
|
47
|
-
# 2007-
|
48
|
-
# 2007-
|
49
|
-
# 2007-
|
50
|
-
# 2007-
|
51
|
-
# 2007-
|
52
|
-
# 2007-
|
53
|
-
# 2007-
|
54
|
-
# 2007-
|
55
|
-
# 2007-
|
56
|
-
# 2007-
|
57
|
-
# 2007-
|
58
|
-
# 2007-
|
37
|
+
# 2007-11-21 22:33:08.127 [18215]: **** START BACKUP SCENARIO ****
|
38
|
+
# 2007-11-21 22:33:08.129 [18215]: connect to remote services: druby://localhost:17320
|
39
|
+
# 2007-11-21 22:33:13.227 [18215]: DRb service started.
|
40
|
+
# 2007-11-21 22:33:13.233 [18215]: start index backup.
|
41
|
+
# 2007-11-21 22:33:13.724 [18215]: completed index backup.
|
42
|
+
# 2007-11-21 22:33:13.725 [18215]: start data backup.
|
43
|
+
# 2007-11-21 22:44:09.738 [18215]: completed data backup.
|
44
|
+
# 2007-11-21 22:44:09.763 [18215]: start journal log rotation.
|
45
|
+
# 2007-11-21 22:44:10.092 [18215]: completed journal log rotation.
|
46
|
+
# 2007-11-21 22:44:10.200 [18215]: start journal logs backup.
|
47
|
+
# 2007-11-21 22:44:10.339 [18215]: completed journal logs backup.
|
48
|
+
# 2007-11-21 22:44:10.340 [18215]: start backup storage recovery.
|
49
|
+
# 2007-11-21 22:44:11.101 [18215]: completed backup storage recovery.
|
50
|
+
# 2007-11-21 22:44:11.103 [18215]: start backup storage verify.
|
51
|
+
# 2007-11-21 22:58:04.552 [18215]: completed backup storage verify.
|
52
|
+
# 2007-11-21 22:58:04.581 [18215]: start journal logs clean of from-storage.
|
53
|
+
# 2007-11-21 22:58:04.638 [18215]: completed jounal logs clean of from-storage.
|
54
|
+
# 2007-11-21 22:58:04.640 [18215]: start journal logs clean of to-storage.
|
55
|
+
# 2007-11-21 22:58:04.668 [18215]: completed jounal logs clean of to-storage.
|
56
|
+
# 2007-11-21 22:58:04.669 [18215]: **** COMPLETED BACKUP SCENARIO ****
|
59
57
|
#
|
60
58
|
# online-backup scenario includes these processes.
|
61
59
|
#
|
@@ -166,7 +164,7 @@ module Higgs
|
|
166
164
|
#
|
167
165
|
class BackupManager
|
168
166
|
# for ident(1)
|
169
|
-
CVS_ID = '$Id: bman.rb
|
167
|
+
CVS_ID = '$Id: bman.rb 688 2007-11-21 14:35:49Z toki $'
|
170
168
|
|
171
169
|
def initialize(options={})
|
172
170
|
@from = options[:from]
|
@@ -174,6 +172,11 @@ module Higgs
|
|
174
172
|
to_name = options[:to_name] || (@from && File.basename(@from))
|
175
173
|
@to = File.join(to_dir, to_name) if (to_dir && to_name)
|
176
174
|
@remote_services_uri = options[:remote_services_uri]
|
175
|
+
if (options.key? :drb_service_autostart) then
|
176
|
+
@drb_service_autostart = options[:drb_service_autostart]
|
177
|
+
else
|
178
|
+
@drb_service_autostart = true
|
179
|
+
end
|
177
180
|
@verbose = options[:verbose] || 0
|
178
181
|
@out = options[:out] || STDOUT
|
179
182
|
end
|
@@ -190,8 +193,14 @@ module Higgs
|
|
190
193
|
unless (@remote_services_uri) then
|
191
194
|
raise 'required remote_services_uri'
|
192
195
|
end
|
193
|
-
|
196
|
+
|
197
|
+
return if @services
|
198
|
+
@out << log("connect to remote services: #{@remote_services_uri}") if (@verbose >= 1)
|
194
199
|
@services = DRbObject.new_with_uri(@remote_services_uri)
|
200
|
+
if (@drb_service_autostart) then
|
201
|
+
DRb.start_service
|
202
|
+
@out << log("DRb service started.") if (@verbose >= 1)
|
203
|
+
end
|
195
204
|
|
196
205
|
localhost_check_service = @services[:localhost_check_service_v1] or
|
197
206
|
raise 'not provided remote service: localhost_check_service_v1'
|
@@ -205,7 +214,6 @@ module Higgs
|
|
205
214
|
private :connect_service
|
206
215
|
|
207
216
|
def backup_index
|
208
|
-
@out << log('start index backup.') if (@verbose >= 1)
|
209
217
|
unless (@from) then
|
210
218
|
raise 'required from_storage'
|
211
219
|
end
|
@@ -213,6 +221,7 @@ module Higgs
|
|
213
221
|
raise 'required to_storage'
|
214
222
|
end
|
215
223
|
connect_service
|
224
|
+
@out << log('start index backup.') if (@verbose >= 1)
|
216
225
|
@out << log("save to #{@to}.idx") if (@verbose >= 2)
|
217
226
|
@jlog_rotate_service.call(File.expand_path(@to) + '.idx')
|
218
227
|
@out << log('completed index backup.') if (@verbose >= 1)
|
@@ -220,34 +229,34 @@ module Higgs
|
|
220
229
|
end
|
221
230
|
|
222
231
|
def backup_data
|
223
|
-
@out << log('start data backup.') if (@verbose >= 1)
|
224
232
|
unless (@from) then
|
225
233
|
raise 'required from_storage'
|
226
234
|
end
|
227
235
|
unless (@to) then
|
228
236
|
raise 'required to_storage'
|
229
237
|
end
|
238
|
+
@out << log('start data backup.') if (@verbose >= 1)
|
230
239
|
FileUtils.cp("#{@from}.tar", "#{@to}.tar", :preserve => true, :verbose => @verbose >= 2)
|
231
240
|
@out << log('completed data backup.') if (@verbose >= 1)
|
232
241
|
nil
|
233
242
|
end
|
234
243
|
|
235
244
|
def rotate_jlog
|
236
|
-
@out << log('start journal log rotation.') if (@verbose >= 1)
|
237
245
|
connect_service
|
246
|
+
@out << log('start journal log rotation.') if (@verbose >= 1)
|
238
247
|
@jlog_rotate_service.call(true)
|
239
248
|
@out << log('completed journal log rotation.') if (@verbose >= 1)
|
240
249
|
nil
|
241
250
|
end
|
242
251
|
|
243
252
|
def backup_jlog
|
244
|
-
@out << log('start journal logs backup.') if (@verbose >= 1)
|
245
253
|
unless (@from) then
|
246
254
|
raise 'required from_storage'
|
247
255
|
end
|
248
256
|
unless (@to) then
|
249
257
|
raise 'required to_storage'
|
250
258
|
end
|
259
|
+
@out << log('start journal logs backup.') if (@verbose >= 1)
|
251
260
|
for path in Storage.rotated_entries("#{@from}.jlog")
|
252
261
|
path =~ /\.jlog\.\d+$/ or raise "mismatch jlog name: #{path}"
|
253
262
|
unless (JournalLogger.has_eof_mark? path) then
|
@@ -261,20 +270,20 @@ module Higgs
|
|
261
270
|
end
|
262
271
|
|
263
272
|
def recover
|
264
|
-
@out << log('start backup storage recovery.') if (@verbose >= 1)
|
265
273
|
unless (@to) then
|
266
274
|
raise 'required to_storage'
|
267
275
|
end
|
276
|
+
@out << log('start backup storage recovery.') if (@verbose >= 1)
|
268
277
|
Storage.recover(@to, @out, @verbose - 1)
|
269
278
|
@out << log('completed backup storage recovery.') if (@verbose >= 1)
|
270
279
|
nil
|
271
280
|
end
|
272
281
|
|
273
282
|
def verify
|
274
|
-
@out << log('start backup storage verify.') if (@verbose >= 1)
|
275
283
|
unless (@to) then
|
276
284
|
raise 'required to_storage'
|
277
285
|
end
|
286
|
+
@out << log('start backup storage verify.') if (@verbose >= 1)
|
278
287
|
st = Storage.new(@to, :read_only => true)
|
279
288
|
begin
|
280
289
|
st.verify(@out, @verbose - 1)
|
@@ -286,15 +295,13 @@ module Higgs
|
|
286
295
|
end
|
287
296
|
|
288
297
|
def clean_jlog_from
|
289
|
-
@out << log('start journal logs clean of from-storage.') if (@verbose >= 1)
|
290
|
-
|
291
298
|
unless (@from) then
|
292
299
|
raise 'required from_storage'
|
293
300
|
end
|
294
301
|
unless (@to) then
|
295
302
|
raise 'required to_storage'
|
296
303
|
end
|
297
|
-
|
304
|
+
@out << log('start journal logs clean of from-storage.') if (@verbose >= 1)
|
298
305
|
for to_jlog in Storage.rotated_entries("#{@to}.jlog")
|
299
306
|
to_jlog =~ /\.jlog\.\d+$/ or raise "mismatch jlog name: #{to_jlog}"
|
300
307
|
ext = $&
|
@@ -303,22 +310,18 @@ module Higgs
|
|
303
310
|
FileUtils.rm(from_jlog, :verbose => @verbose >= 2)
|
304
311
|
end
|
305
312
|
end
|
306
|
-
|
307
313
|
@out << log('completed jounal logs clean of from-storage.') if (@verbose >= 1)
|
308
314
|
nil
|
309
315
|
end
|
310
316
|
|
311
317
|
def clean_jlog_to
|
312
|
-
@out << log('start journal logs clean of to-storage.') if (@verbose >= 1)
|
313
|
-
|
314
318
|
unless (@to) then
|
315
319
|
raise 'required to_storage'
|
316
320
|
end
|
317
|
-
|
321
|
+
@out << log('start journal logs clean of to-storage.') if (@verbose >= 1)
|
318
322
|
for to_jlog in Storage.rotated_entries("#{@to}.jlog")
|
319
323
|
FileUtils.rm(to_jlog, :verbose => @verbose >= 2)
|
320
324
|
end
|
321
|
-
|
322
325
|
@out << log('completed jounal logs clean of to-storage.') if (@verbose >= 1)
|
323
326
|
nil
|
324
327
|
end
|
@@ -339,13 +342,13 @@ module Higgs
|
|
339
342
|
end
|
340
343
|
|
341
344
|
def restore_files
|
342
|
-
@out << log('start storage files restore.') if (@verbose >= 1)
|
343
345
|
unless (@from) then
|
344
346
|
raise 'required from_storage'
|
345
347
|
end
|
346
348
|
unless (@to) then
|
347
349
|
raise 'required to_storage'
|
348
350
|
end
|
351
|
+
@out << log('start storage files restore.') if (@verbose >= 1)
|
349
352
|
FileLock.open("#{@from}.lock") {|flock|
|
350
353
|
flock.synchronize{
|
351
354
|
FileUtils.cp("#{@to}.idx", "#{@from}.idx", :preserve => true, :verbose => @verbose >= 2)
|
@@ -362,20 +365,20 @@ module Higgs
|
|
362
365
|
end
|
363
366
|
|
364
367
|
def restore_recover
|
365
|
-
@out << log('start restored storage recovery.') if (@verbose >= 1)
|
366
368
|
unless (@from) then
|
367
369
|
raise 'required from_storage'
|
368
370
|
end
|
371
|
+
@out << log('start restored storage recovery.') if (@verbose >= 1)
|
369
372
|
Storage.recover(@from, @out, @verbose - 1)
|
370
373
|
@out << log('completed restored storage recovery.') if (@verbose >= 1)
|
371
374
|
nil
|
372
375
|
end
|
373
376
|
|
374
377
|
def restore_verify
|
375
|
-
@out << log('start restored storage verify.') if (@verbose >= 1)
|
376
378
|
unless (@from) then
|
377
379
|
raise 'required from_storage'
|
378
380
|
end
|
381
|
+
@out << log('start restored storage verify.') if (@verbose >= 1)
|
379
382
|
st = Storage.new(@from) # read-write open for recovery
|
380
383
|
begin
|
381
384
|
st.verify(@out, @verbose - 1)
|
data/lib/higgs/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = version
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date: 2007-11-
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2007-11-28 22:51:52 +0900 (Wed, 28 Nov 2007) $
|
5
|
+
# Revision:: $Revision: 689 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -10,9 +10,9 @@
|
|
10
10
|
|
11
11
|
module Higgs
|
12
12
|
# for ident(1)
|
13
|
-
CVS_ID = '$Id: version.rb
|
13
|
+
CVS_ID = '$Id: version.rb 689 2007-11-28 13:51:52Z toki $'
|
14
14
|
|
15
|
-
VERSION = '0.1.
|
15
|
+
VERSION = '0.1.4'
|
16
16
|
end
|
17
17
|
|
18
18
|
# Local Variables:
|
data/test/test_thread.rb
CHANGED
@@ -27,7 +27,7 @@ module Higgs::Test
|
|
27
27
|
include Timeout
|
28
28
|
|
29
29
|
# for ident(1)
|
30
|
-
CVS_ID = '$Id: test_thread.rb
|
30
|
+
CVS_ID = '$Id: test_thread.rb 686 2007-11-13 16:42:21Z toki $'
|
31
31
|
|
32
32
|
def test_start_wait
|
33
33
|
latch = Latch.new
|
@@ -61,7 +61,7 @@ module Higgs::Test
|
|
61
61
|
include Timeout
|
62
62
|
|
63
63
|
# for ident(1)
|
64
|
-
CVS_ID = '$Id: test_thread.rb
|
64
|
+
CVS_ID = '$Id: test_thread.rb 686 2007-11-13 16:42:21Z toki $'
|
65
65
|
|
66
66
|
def test_count_down_wait
|
67
67
|
latch = CountDownLatch.new(3)
|
@@ -103,7 +103,7 @@ module Higgs::Test
|
|
103
103
|
include Timeout
|
104
104
|
|
105
105
|
# for ident(1)
|
106
|
-
CVS_ID = '$Id: test_thread.rb
|
106
|
+
CVS_ID = '$Id: test_thread.rb 686 2007-11-13 16:42:21Z toki $'
|
107
107
|
|
108
108
|
def test_wait
|
109
109
|
barrier = Barrier.new(COUNT_OF_THREADS)
|
@@ -147,7 +147,7 @@ module Higgs::Test
|
|
147
147
|
include Timeout
|
148
148
|
|
149
149
|
# for ident(1)
|
150
|
-
CVS_ID = '$Id: test_thread.rb
|
150
|
+
CVS_ID = '$Id: test_thread.rb 686 2007-11-13 16:42:21Z toki $'
|
151
151
|
|
152
152
|
def calc
|
153
153
|
@s = 0 # @s's scope is over multi-threading
|
@@ -261,6 +261,63 @@ module Higgs::Test
|
|
261
261
|
|
262
262
|
assert_equal(:bar, work.result)
|
263
263
|
end
|
264
|
+
|
265
|
+
def test_abort_work
|
266
|
+
work = SharedWork.new{
|
267
|
+
raise ThreadError, 'abort'
|
268
|
+
}
|
269
|
+
|
270
|
+
barrier = Barrier.new(2 + 1)
|
271
|
+
latch = Latch.new
|
272
|
+
|
273
|
+
t1 = Thread.new{
|
274
|
+
barrier.wait
|
275
|
+
assert_raise(ThreadError) {
|
276
|
+
work.result
|
277
|
+
}
|
278
|
+
latch.start
|
279
|
+
}
|
280
|
+
|
281
|
+
t2 = Thread.new{
|
282
|
+
barrier.wait
|
283
|
+
latch.wait
|
284
|
+
timeout(10) {
|
285
|
+
assert_raise(RuntimeError) {
|
286
|
+
work.result
|
287
|
+
}
|
288
|
+
}
|
289
|
+
}
|
290
|
+
|
291
|
+
barrier.wait
|
292
|
+
t1.join
|
293
|
+
t2.join
|
294
|
+
|
295
|
+
assert_raise(RuntimeError) {
|
296
|
+
work.result = nil
|
297
|
+
}
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_abort_work_many_threads
|
301
|
+
work = SharedWork.new{
|
302
|
+
raise RuntimeError, 'abort'
|
303
|
+
}
|
304
|
+
|
305
|
+
barrier = Barrier.new(COUNT_OF_THREADS + 1)
|
306
|
+
th_grp = ThreadGroup.new
|
307
|
+
COUNT_OF_THREADS.times{|i|# `i' should be local scope of thread block
|
308
|
+
th_grp.add Thread.new{
|
309
|
+
barrier.wait
|
310
|
+
assert_raise(RuntimeError, "thread: #{i}") {
|
311
|
+
work.result
|
312
|
+
}
|
313
|
+
}
|
314
|
+
}
|
315
|
+
|
316
|
+
barrier.wait
|
317
|
+
for t in th_grp.list
|
318
|
+
t.join
|
319
|
+
end
|
320
|
+
end
|
264
321
|
end
|
265
322
|
|
266
323
|
class ReadWriteLockTest < Test::Unit::TestCase
|
@@ -268,7 +325,7 @@ module Higgs::Test
|
|
268
325
|
include ThreadParams
|
269
326
|
|
270
327
|
# for ident(1)
|
271
|
-
CVS_ID = '$Id: test_thread.rb
|
328
|
+
CVS_ID = '$Id: test_thread.rb 686 2007-11-13 16:42:21Z toki $'
|
272
329
|
|
273
330
|
def setup
|
274
331
|
@rw_lock = ReadWriteLock.new
|
@@ -452,7 +509,7 @@ module Higgs::Test
|
|
452
509
|
include ThreadParams
|
453
510
|
|
454
511
|
# for ident(1)
|
455
|
-
CVS_ID = '$Id: test_thread.rb
|
512
|
+
CVS_ID = '$Id: test_thread.rb 686 2007-11-13 16:42:21Z toki $'
|
456
513
|
|
457
514
|
class Counter
|
458
515
|
def initialize
|
data/test/test_tman.rb
CHANGED
@@ -13,7 +13,7 @@ module Higgs::Test
|
|
13
13
|
include Higgs
|
14
14
|
|
15
15
|
# for ident(1)
|
16
|
-
CVS_ID = '$Id: test_tman.rb
|
16
|
+
CVS_ID = '$Id: test_tman.rb 685 2007-11-12 14:58:12Z toki $'
|
17
17
|
|
18
18
|
def setup
|
19
19
|
@test_dir = 'st_test'
|
@@ -172,8 +172,8 @@ module Higgs::Test
|
|
172
172
|
assert(expected_keys.empty?)
|
173
173
|
|
174
174
|
@tman.transaction{|tx|
|
175
|
-
tx[
|
176
|
-
tx[
|
175
|
+
tx[:foo] # load to cache
|
176
|
+
tx[:bar] # load to cache
|
177
177
|
|
178
178
|
expected_keys = [ :foo, :bar, :baz ]
|
179
179
|
tx.each_key do |key|
|
@@ -1104,7 +1104,7 @@ module Higgs::Test
|
|
1104
1104
|
|
1105
1105
|
class TransactionManagerTest_with_SecondaryCache < TransactionManagerTest
|
1106
1106
|
# for ident(1)
|
1107
|
-
CVS_ID = '$Id: test_tman.rb
|
1107
|
+
CVS_ID = '$Id: test_tman.rb 685 2007-11-12 14:58:12Z toki $'
|
1108
1108
|
|
1109
1109
|
def setup
|
1110
1110
|
super
|
data/test/test_utils_bman.rb
CHANGED
@@ -13,7 +13,7 @@ module Higgs::Test
|
|
13
13
|
include Higgs
|
14
14
|
|
15
15
|
# for ident(1)
|
16
|
-
CVS_ID = '$Id: test_utils_bman.rb
|
16
|
+
CVS_ID = '$Id: test_utils_bman.rb 688 2007-11-21 14:35:49Z toki $'
|
17
17
|
|
18
18
|
STORAGE_ITEMS = (ENV['STORAGE_ITEMS'] || '100').to_i
|
19
19
|
WARM_START_ITEMS = (ENV['WARM_START_ITEMS'] || '1000').to_i
|
@@ -46,6 +46,7 @@ module Higgs::Test
|
|
46
46
|
:to_dir => @to_dir,
|
47
47
|
:to_name => @to_name,
|
48
48
|
:remote_services_uri => @remote_services_uri,
|
49
|
+
:drb_service_autostart => false,
|
49
50
|
:verbose => $DEBUG ? 2 : 0,
|
50
51
|
:out => $DEBUG ? STDERR : '')
|
51
52
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: higgs
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2007-11-
|
6
|
+
version: 0.1.4
|
7
|
+
date: 2007-11-28 00:00:00 +09:00
|
8
8
|
summary: pure ruby transactional storage compatible with unix TAR format
|
9
9
|
require_paths:
|
10
10
|
- lib
|