higgs 0.1.3 → 0.1.4
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.
- 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
|