higgs 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +67 -0
- data/bin/higgs_apply_jlog +1 -1
- data/bin/higgs_backup +1 -1
- data/bin/higgs_dump_index +1 -1
- data/bin/higgs_dump_jlog +1 -1
- data/bin/higgs_ping +1 -1
- data/bin/higgs_verify +1 -1
- data/lib/cgi/session/higgs.rb +3 -3
- data/lib/higgs/block.rb +3 -3
- data/lib/higgs/cache.rb +17 -13
- data/lib/higgs/dbm.rb +3 -3
- data/lib/higgs/exceptions.rb +3 -3
- data/lib/higgs/flock.rb +3 -3
- data/lib/higgs/index.rb +35 -17
- data/lib/higgs/jlog.rb +3 -3
- data/lib/higgs/lock.rb +5 -5
- data/lib/higgs/services.rb +3 -3
- data/lib/higgs/sman.rb +7 -3
- data/lib/higgs/storage.rb +14 -3
- data/lib/higgs/store.rb +3 -3
- data/lib/higgs/tar.rb +3 -3
- data/lib/higgs/thread.rb +130 -8
- data/lib/higgs/tman.rb +15 -13
- data/lib/higgs/utils/bman.rb +3 -3
- data/lib/higgs/utils.rb +3 -3
- data/lib/higgs/version.rb +4 -4
- data/lib/higgs.rb +2 -2
- data/misc/cache_bench/cache_bench.rb +2 -2
- data/misc/dbm_bench/.strc +1 -1
- data/misc/dbm_bench/Rakefile +1 -1
- data/misc/dbm_bench/dbm_multi_thread.rb +2 -2
- data/misc/dbm_bench/dbm_rnd_delete.rb +2 -2
- data/misc/dbm_bench/dbm_rnd_read.rb +2 -2
- data/misc/dbm_bench/dbm_rnd_update.rb +2 -2
- data/misc/dbm_bench/dbm_seq_read.rb +2 -2
- data/misc/dbm_bench/dbm_seq_write.rb +2 -2
- data/misc/dbm_bench/run.rb +52 -0
- data/misc/dbm_bench/st_verify.rb +2 -2
- data/misc/io_bench/cksum_bench.rb +1 -1
- data/misc/io_bench/jlog_bench.rb +2 -2
- data/misc/io_bench/write_bench.rb +1 -1
- data/misc/thread_bench/lock_bench.rb +2 -2
- data/test/Rakefile +1 -1
- data/test/run.rb +3 -3
- data/test/test_block.rb +1 -1
- data/test/test_cache.rb +9 -9
- data/test/test_cache_mvcc.rb +403 -168
- data/test/test_cgi_session.rb +3 -3
- data/test/test_dbm.rb +14 -5
- data/test/test_flock.rb +1 -1
- data/test/test_index.rb +5 -7
- data/test/test_jlog.rb +1 -1
- data/test/test_lock.rb +21 -21
- data/test/test_online_backup.rb +1 -1
- data/test/test_services.rb +1 -1
- data/test/test_storage.rb +4 -4
- data/test/test_storage_conf.rb +1 -1
- data/test/test_storage_init_opts.rb +1 -1
- data/test/test_store.rb +2 -2
- data/test/test_tar.rb +19 -19
- data/test/test_thread.rb +46 -46
- data/test/test_tman.rb +2 -2
- data/test/test_tman_init_opts.rb +1 -1
- data/test/test_tman_mvcc.rb +11 -11
- data/test/test_utils_bman.rb +4 -2
- metadata +10 -18
- data/Rakefile +0 -81
- data/mkrdoc.rb +0 -11
- data/rdoc.yml +0 -13
data/ChangeLog
CHANGED
@@ -1,3 +1,70 @@
|
|
1
|
+
2008-07-26 TOKI Yoshinori <toki@freedom.ne.jp>
|
2
|
+
|
3
|
+
* check ruby 1.9.0 (2008-07-25 revision 18217) [i686-linux]
|
4
|
+
Loaded suite run
|
5
|
+
Started
|
6
|
+
............................................................................................................................................................................................................................................................................................................................................................
|
7
|
+
Finished in 2076.798714343 seconds.
|
8
|
+
|
9
|
+
348 tests, 30406771 assertions, 0 failures, 0 errors
|
10
|
+
|
11
|
+
* check ruby 1.8.7 (2008-06-20 patchlevel 22) [i686-linux]
|
12
|
+
Loaded suite run
|
13
|
+
Started
|
14
|
+
............................................................................................................................................................................................................................................................................................................................................................
|
15
|
+
Finished in 422.501347 seconds.
|
16
|
+
|
17
|
+
348 tests, 3098555 assertions, 0 failures, 0 errors
|
18
|
+
|
19
|
+
|
20
|
+
2008-07-11 TOKI Yoshinori <toki@freedom.ne.jp>
|
21
|
+
|
22
|
+
* lib/higgs/version.rb: version 0.1.6.
|
23
|
+
|
24
|
+
* check ruby 1.9.0 (2008-06-20 revision 17482) [i686-linux]
|
25
|
+
Loaded suite run
|
26
|
+
Started
|
27
|
+
............................................................................................................................................................................................................................................................................................................................................................
|
28
|
+
Finished in 1152.566426031 seconds.
|
29
|
+
|
30
|
+
348 tests, 14579396 assertions, 0 failures, 0 errors
|
31
|
+
|
32
|
+
* check ruby 1.8.7 (2008-06-09 patchlevel 17) [i686-linux]
|
33
|
+
Loaded suite run
|
34
|
+
Started
|
35
|
+
............................................................................................................................................................................................................................................................................................................................................................
|
36
|
+
Finished in 426.574262 seconds.
|
37
|
+
|
38
|
+
348 tests, 3140575 assertions, 0 failures, 0 errors
|
39
|
+
|
40
|
+
2008-02-13 TOKI Yoshinori <toki@freedom.ne.jp>
|
41
|
+
|
42
|
+
* merge from development branch of ruby-1.9.
|
43
|
+
branch: branches/higgs_develop_ruby1_9
|
44
|
+
snapshot of start: tag/higgs_develop_mvcc_snapshot_20080114_merge_to_trunk
|
45
|
+
snapshot of end: tags/higgs_develop_ruby1_9_snapshot_20080213_merge_to_trunk
|
46
|
+
|
47
|
+
2008-02-02 TOKI Yoshinori <toki@freedom.ne.jp>
|
48
|
+
|
49
|
+
* lib/higgs/cache.rb (Higgs::MVCCCache class): fixed a bug of race
|
50
|
+
condition.
|
51
|
+
|
52
|
+
* lib/higgs/index.rb (Higgs::Index class): multi-thread guard on
|
53
|
+
update.
|
54
|
+
|
55
|
+
* lib/higgs/thread.rb: HiggsSynchronized module is new.
|
56
|
+
multi-thread guard syntax like java.
|
57
|
+
|
58
|
+
2008-02-01 TOKI Yoshinori <toki@freedom.ne.jp>
|
59
|
+
|
60
|
+
* development branch of ruby-1.9.
|
61
|
+
branch: branches/higgs_develop_ruby1_9
|
62
|
+
snapshot of start: tag/higgs_develop_mvcc_snapshot_20080114_merge_to_trunk
|
63
|
+
|
64
|
+
2008-01-24 TOKI Yoshinori <toki@freedom.ne.jp>
|
65
|
+
|
66
|
+
* refactoring of multi-thread test.
|
67
|
+
|
1
68
|
2008-01-20 TOKI Yoshinori <toki@freedom.ne.jp>
|
2
69
|
|
3
70
|
* lib/higgs/version.rb: version 0.1.5.
|
data/bin/higgs_apply_jlog
CHANGED
data/bin/higgs_backup
CHANGED
data/bin/higgs_dump_index
CHANGED
@@ -6,7 +6,7 @@ require 'pp'
|
|
6
6
|
require 'yaml'
|
7
7
|
|
8
8
|
# for ident(1)
|
9
|
-
CVS_ID = '$Id: higgs_dump_index
|
9
|
+
CVS_ID = '$Id: higgs_dump_index 781 2008-07-28 15:13:27Z toki $'
|
10
10
|
|
11
11
|
opts = OptionParser.new
|
12
12
|
opts.banner = "Usage: #{opts.program_name} [options] INDEX_PATH"
|
data/bin/higgs_dump_jlog
CHANGED
@@ -6,7 +6,7 @@ require 'pp'
|
|
6
6
|
require 'yaml'
|
7
7
|
|
8
8
|
# for ident(1)
|
9
|
-
CVS_ID = '$Id: higgs_dump_jlog
|
9
|
+
CVS_ID = '$Id: higgs_dump_jlog 781 2008-07-28 15:13:27Z toki $'
|
10
10
|
|
11
11
|
opts = OptionParser.new
|
12
12
|
opts.banner = "Usage: #{opts.program_name} [options] [JOURNAL_LOG_PATHs]"
|
data/bin/higgs_ping
CHANGED
data/bin/higgs_verify
CHANGED
@@ -4,7 +4,7 @@ require 'higgs/storage'
|
|
4
4
|
require 'optparse'
|
5
5
|
|
6
6
|
# for ident(1)
|
7
|
-
CVS_ID = '$Id: higgs_verify
|
7
|
+
CVS_ID = '$Id: higgs_verify 781 2008-07-28 15:13:27Z toki $'
|
8
8
|
|
9
9
|
opts = OptionParser.new
|
10
10
|
opts.banner = "Usage: #{opts.program_name} [options] HIGGS_NAME"
|
data/lib/cgi/session/higgs.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# like cgi/session/pstore.rb
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
|
8
8
|
require 'cgi/session'
|
@@ -15,7 +15,7 @@ class CGI
|
|
15
15
|
# like cgi/session/pstore.rb
|
16
16
|
class HiggsStore
|
17
17
|
# for ident(1)
|
18
|
-
CVS_ID = '$Id: higgs.rb
|
18
|
+
CVS_ID = '$Id: higgs.rb 781 2008-07-28 15:13:27Z toki $'
|
19
19
|
|
20
20
|
def initialize(session, options={})
|
21
21
|
dir = options['tmpdir'] || Dir.tmpdir
|
data/lib/higgs/block.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = block read/write
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -28,7 +28,7 @@ module Higgs
|
|
28
28
|
#
|
29
29
|
module Block
|
30
30
|
# for ident(1)
|
31
|
-
CVS_ID = '$Id: block.rb
|
31
|
+
CVS_ID = '$Id: block.rb 781 2008-07-28 15:13:27Z toki $'
|
32
32
|
|
33
33
|
include Exceptions
|
34
34
|
|
data/lib/higgs/cache.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = cache utilities
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date: 2008-
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -16,7 +16,7 @@ module Higgs
|
|
16
16
|
# = cache by Least Recently Used strategy
|
17
17
|
class LRUCache
|
18
18
|
# for ident(1)
|
19
|
-
CVS_ID = '$Id: cache.rb
|
19
|
+
CVS_ID = '$Id: cache.rb 781 2008-07-28 15:13:27Z toki $'
|
20
20
|
|
21
21
|
extend Forwardable
|
22
22
|
|
@@ -73,7 +73,7 @@ module Higgs
|
|
73
73
|
# = multi-thread safe cache
|
74
74
|
class SharedWorkCache
|
75
75
|
# for ident(1)
|
76
|
-
CVS_ID = '$Id: cache.rb
|
76
|
+
CVS_ID = '$Id: cache.rb 781 2008-07-28 15:13:27Z toki $'
|
77
77
|
|
78
78
|
def initialize(cache={}, &work)
|
79
79
|
unless (work) then
|
@@ -123,7 +123,10 @@ module Higgs
|
|
123
123
|
def_delegator :@snapshots, :empty?
|
124
124
|
|
125
125
|
def write_old_values(cnum, write_list)
|
126
|
-
|
126
|
+
# new snapshot is not created until the update ends.
|
127
|
+
snapshot_list = @lock.synchronize{ @snapshots.values }
|
128
|
+
|
129
|
+
for snapshot in snapshot_list
|
127
130
|
@snapshots.each_value do |snapshot|
|
128
131
|
lock = snapshot[:lock].write_lock
|
129
132
|
cache = snapshot[:cache]
|
@@ -148,15 +151,17 @@ module Higgs
|
|
148
151
|
end
|
149
152
|
}
|
150
153
|
end
|
151
|
-
|
154
|
+
end
|
155
|
+
|
152
156
|
nil
|
153
157
|
end
|
154
158
|
|
155
|
-
def ref_count_up(
|
159
|
+
def ref_count_up(cnum_func)
|
156
160
|
@lock.synchronize{
|
161
|
+
cnum = cnum_func.call
|
157
162
|
@snapshots[cnum] = { :lock => ReadWriteLock.new, :cache => {}, :ref_count => 0 } unless (@snapshots.key? cnum)
|
158
163
|
@snapshots[cnum][:ref_count] += 1
|
159
|
-
return @snapshots[cnum][:lock].read_lock, @snapshots[cnum][:cache]
|
164
|
+
return cnum, @snapshots[cnum][:lock].read_lock, @snapshots[cnum][:cache]
|
160
165
|
}
|
161
166
|
end
|
162
167
|
|
@@ -173,9 +178,8 @@ module Higgs
|
|
173
178
|
@parent = parent
|
174
179
|
end
|
175
180
|
|
176
|
-
def ref_count_up(
|
177
|
-
@cnum =
|
178
|
-
@lock, @cache = @parent.ref_count_up(@cnum)
|
181
|
+
def ref_count_up(cnum_func)
|
182
|
+
@cnum, @lock, @cache = @parent.ref_count_up(cnum_func)
|
179
183
|
nil
|
180
184
|
end
|
181
185
|
|
@@ -254,10 +258,10 @@ module Higgs
|
|
254
258
|
end
|
255
259
|
end
|
256
260
|
|
257
|
-
def transaction(
|
261
|
+
def transaction(cnum_func)
|
258
262
|
r = nil
|
259
263
|
snapshot = Snapshot.new(self)
|
260
|
-
snapshot.ref_count_up(
|
264
|
+
snapshot.ref_count_up(cnum_func)
|
261
265
|
begin
|
262
266
|
r = yield(snapshot)
|
263
267
|
ensure
|
data/lib/higgs/dbm.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = storage like dbm
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -54,7 +54,7 @@ module Higgs
|
|
54
54
|
#
|
55
55
|
class DBM < StorageManager
|
56
56
|
# for ident(1)
|
57
|
-
CVS_ID = '$Id: dbm.rb
|
57
|
+
CVS_ID = '$Id: dbm.rb 781 2008-07-28 15:13:27Z toki $'
|
58
58
|
|
59
59
|
DECODE = proc{|r| r }
|
60
60
|
ENCODE = proc{|w| w }
|
data/lib/higgs/exceptions.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = exceptions
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -11,7 +11,7 @@
|
|
11
11
|
module Higgs
|
12
12
|
module Exceptions
|
13
13
|
# for ident(1)
|
14
|
-
CVS_ID = '$Id: exceptions.rb
|
14
|
+
CVS_ID = '$Id: exceptions.rb 781 2008-07-28 15:13:27Z toki $'
|
15
15
|
|
16
16
|
class HiggsError < StandardError
|
17
17
|
end
|
data/lib/higgs/flock.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = file lock
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -11,7 +11,7 @@
|
|
11
11
|
module Higgs
|
12
12
|
class FileLock
|
13
13
|
# for ident(1)
|
14
|
-
CVS_ID = '$Id: flock.rb
|
14
|
+
CVS_ID = '$Id: flock.rb 781 2008-07-28 15:13:27Z toki $'
|
15
15
|
|
16
16
|
def initialize(path, read_only=false)
|
17
17
|
@path = path
|
data/lib/higgs/index.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = storage index
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -10,15 +10,18 @@
|
|
10
10
|
|
11
11
|
require 'forwardable'
|
12
12
|
require 'higgs/block'
|
13
|
+
require 'higgs/thread'
|
14
|
+
require 'thread'
|
13
15
|
|
14
16
|
module Higgs
|
15
17
|
# = storage index
|
16
18
|
class Index
|
17
19
|
# for ident(1)
|
18
|
-
CVS_ID = '$Id: index.rb
|
20
|
+
CVS_ID = '$Id: index.rb 781 2008-07-28 15:13:27Z toki $'
|
19
21
|
|
20
22
|
extend Forwardable
|
21
23
|
include Block
|
24
|
+
include Synchronized
|
22
25
|
|
23
26
|
MAGIC_SYMBOL = 'HIGGS_INDEX'
|
24
27
|
MAJOR_VERSION = 0
|
@@ -31,41 +34,48 @@ module Higgs
|
|
31
34
|
@index = {}
|
32
35
|
@identities = {}
|
33
36
|
@storage_id = nil
|
37
|
+
self.__lock__ = Mutex.new
|
34
38
|
end
|
35
39
|
|
36
|
-
attr_reader
|
37
|
-
attr_accessor
|
38
|
-
attr_accessor
|
40
|
+
synchronized attr_reader(:change_number)
|
41
|
+
synchronized attr_accessor(:eoa)
|
42
|
+
synchronized attr_accessor(:storage_id)
|
39
43
|
|
40
44
|
def succ!
|
41
45
|
@change_number = @change_number.succ
|
42
46
|
self
|
43
47
|
end
|
48
|
+
synchronized :succ!
|
44
49
|
|
45
50
|
def free_fetch(size)
|
46
51
|
@free_lists[size].shift if (@free_lists.key? size)
|
47
52
|
end
|
53
|
+
synchronized :free_fetch
|
48
54
|
|
49
55
|
def free_fetch_at(pos, size)
|
50
56
|
@free_lists[size].delete(pos) or raise "not found free region: (#{pos},#{size})"
|
51
57
|
end
|
58
|
+
synchronized :free_fetch_at
|
52
59
|
|
53
60
|
def free_store(pos, size)
|
54
61
|
@free_lists[size] = [] unless (@free_lists.key? size)
|
55
62
|
@free_lists[size] << pos
|
56
63
|
nil
|
57
64
|
end
|
65
|
+
synchronized :free_store
|
58
66
|
|
59
|
-
def_delegator
|
60
|
-
def_delegator
|
67
|
+
synchronized def_delegator(:@index, :key?)
|
68
|
+
synchronized def_delegator(:@index, :keys)
|
61
69
|
|
62
70
|
def identity(key)
|
63
71
|
i = @index[key] and i[0]
|
64
72
|
end
|
73
|
+
synchronized :identity
|
65
74
|
|
66
75
|
def [](key)
|
67
76
|
i = @index[key] and i[1]
|
68
77
|
end
|
78
|
+
synchronized :[]
|
69
79
|
|
70
80
|
def self.create_id(key, identities)
|
71
81
|
id = key.to_s
|
@@ -86,15 +96,18 @@ module Higgs
|
|
86
96
|
end
|
87
97
|
value
|
88
98
|
end
|
99
|
+
synchronized :[]=
|
89
100
|
|
90
101
|
def delete(key)
|
91
102
|
id, value = @index.delete(key)
|
92
103
|
@identities.delete(id) if id
|
93
104
|
value
|
94
105
|
end
|
106
|
+
synchronized :delete
|
95
107
|
|
96
108
|
def each_key
|
97
|
-
@index.
|
109
|
+
keys = __lock__.synchronize{ @index.keys }
|
110
|
+
for key in keys
|
98
111
|
yield(key)
|
99
112
|
end
|
100
113
|
self
|
@@ -110,6 +123,7 @@ module Higgs
|
|
110
123
|
:storage_id => @storage_id
|
111
124
|
}
|
112
125
|
end
|
126
|
+
synchronized :to_h
|
113
127
|
|
114
128
|
def migration_0_0_to_0_1(index_data)
|
115
129
|
if ((index_data[:version] <=> [ 0, 0 ]) > 0) then
|
@@ -152,8 +166,10 @@ module Higgs
|
|
152
166
|
tmp_path = "#{path}.tmp.#{$$}"
|
153
167
|
File.open(tmp_path, File::WRONLY | File::CREAT | File::TRUNC, 0660) {|f|
|
154
168
|
f.binmode
|
155
|
-
|
156
|
-
|
169
|
+
block_write(f, MAGIC_SYMBOL,
|
170
|
+
__lock__.synchronize{
|
171
|
+
Marshal.dump(thread_unsafe_to_h)
|
172
|
+
})
|
157
173
|
f.fsync
|
158
174
|
}
|
159
175
|
File.rename(tmp_path, path)
|
@@ -169,12 +185,14 @@ module Higgs
|
|
169
185
|
if (index_data[:version] != [ MAJOR_VERSION, MINOR_VERSION ]) then
|
170
186
|
raise "unsupported version: #{index_data[:version].join('.')}"
|
171
187
|
end
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
188
|
+
__lock__.synchronize{
|
189
|
+
@change_number = index_data[:change_number]
|
190
|
+
@eoa = index_data[:eoa]
|
191
|
+
@free_lists = index_data[:free_lists]
|
192
|
+
@index = index_data[:index]
|
193
|
+
@identities = index_data[:identities]
|
194
|
+
@storage_id = index_data[:storage_id]
|
195
|
+
}
|
178
196
|
}
|
179
197
|
self
|
180
198
|
end
|
data/lib/higgs/jlog.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = journal log writer
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -14,7 +14,7 @@ module Higgs
|
|
14
14
|
# = journal log writer
|
15
15
|
class JournalLogger
|
16
16
|
# for ident(1)
|
17
|
-
CVS_ID = '$Id: jlog.rb
|
17
|
+
CVS_ID = '$Id: jlog.rb 781 2008-07-28 15:13:27Z toki $'
|
18
18
|
|
19
19
|
include Block
|
20
20
|
|
data/lib/higgs/lock.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = multi-thread lock manager
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date: 2008-
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -17,7 +17,7 @@ module Higgs
|
|
17
17
|
# = multi-thread lock manager
|
18
18
|
class LockManager
|
19
19
|
# for ident(1)
|
20
|
-
CVS_ID = '$Id: lock.rb
|
20
|
+
CVS_ID = '$Id: lock.rb 781 2008-07-28 15:13:27Z toki $'
|
21
21
|
|
22
22
|
include Exceptions
|
23
23
|
|
@@ -102,7 +102,7 @@ module Higgs
|
|
102
102
|
|
103
103
|
class GiantLockManager < LockManager
|
104
104
|
# for ident(1)
|
105
|
-
CVS_ID = '$Id: lock.rb
|
105
|
+
CVS_ID = '$Id: lock.rb 781 2008-07-28 15:13:27Z toki $'
|
106
106
|
|
107
107
|
def initialize(*args)
|
108
108
|
super
|
@@ -126,7 +126,7 @@ module Higgs
|
|
126
126
|
|
127
127
|
class OptimisticLockManager < LockManager
|
128
128
|
# for ident(1)
|
129
|
-
CVS_ID = '$Id: lock.rb
|
129
|
+
CVS_ID = '$Id: lock.rb 781 2008-07-28 15:13:27Z toki $'
|
130
130
|
|
131
131
|
def initialize(*args)
|
132
132
|
super
|
data/lib/higgs/services.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = remote services
|
2
2
|
#
|
3
3
|
# Author:: $Author $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -14,7 +14,7 @@ module Higgs
|
|
14
14
|
# = remote services
|
15
15
|
class RemoteServices
|
16
16
|
# for ident(1)
|
17
|
-
CVS_ID = '$Id: services.rb
|
17
|
+
CVS_ID = '$Id: services.rb 781 2008-07-28 15:13:27Z toki $'
|
18
18
|
|
19
19
|
# theses options are defined.
|
20
20
|
# [<tt>:remote_services_uri</tt>] URI for DRb remote call to provide services.
|
data/lib/higgs/sman.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = storage manager
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date:
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -29,6 +29,8 @@ module Higgs
|
|
29
29
|
# * Higgs::Storage#jlog_rotate_size
|
30
30
|
# * Higgs::Storage#jlog_rotate_max
|
31
31
|
# * Higgs::Storage#shutdown?
|
32
|
+
# * Higgs::Storage#alive?
|
33
|
+
# * Higgs::Storage#change_number
|
32
34
|
# * Higgs::Storage#rotate_journal_log
|
33
35
|
#
|
34
36
|
# these methods are delegated to Higgs::TransactionManager.
|
@@ -42,7 +44,7 @@ module Higgs
|
|
42
44
|
#
|
43
45
|
class StorageManager
|
44
46
|
# for ident(1)
|
45
|
-
CVS_ID = '$Id: sman.rb
|
47
|
+
CVS_ID = '$Id: sman.rb 781 2008-07-28 15:13:27Z toki $'
|
46
48
|
|
47
49
|
extend Forwardable
|
48
50
|
|
@@ -67,6 +69,8 @@ module Higgs
|
|
67
69
|
def_delegator :@storage, :jlog_rotate_size
|
68
70
|
def_delegator :@storage, :jlog_rotate_max
|
69
71
|
def_delegator :@storage, :shutdown?
|
72
|
+
def_delegator :@storage, :alive?
|
73
|
+
def_delegator :@storage, :change_number
|
70
74
|
def_delegator :@storage, :rotate_journal_log
|
71
75
|
def_delegator :@tman, :read_only
|
72
76
|
def_delegator :@tman, :transaction
|
data/lib/higgs/storage.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# = transactional storage core
|
2
2
|
#
|
3
3
|
# Author:: $Author: toki $
|
4
|
-
# Date:: $Date: 2008-
|
5
|
-
# Revision:: $Revision:
|
4
|
+
# Date:: $Date: 2008-07-29 00:13:27 +0900 (Tue, 29 Jul 2008) $
|
5
|
+
# Revision:: $Revision: 781 $
|
6
6
|
#
|
7
7
|
# == license
|
8
8
|
# :include:LICENSE
|
@@ -23,7 +23,7 @@ module Higgs
|
|
23
23
|
# = transactional storage core
|
24
24
|
class Storage
|
25
25
|
# for ident(1)
|
26
|
-
CVS_ID = '$Id: storage.rb
|
26
|
+
CVS_ID = '$Id: storage.rb 781 2008-07-28 15:13:27Z toki $'
|
27
27
|
|
28
28
|
include Exceptions
|
29
29
|
|
@@ -624,7 +624,9 @@ module Higgs
|
|
624
624
|
:val => value
|
625
625
|
}
|
626
626
|
if (i = @index[key]) then
|
627
|
+
i = i.dup
|
627
628
|
if (j = i[type]) then
|
629
|
+
j = j.dup; i[type] = j
|
628
630
|
commit_log << {
|
629
631
|
:ope => :free_store,
|
630
632
|
:pos => j[:pos],
|
@@ -638,6 +640,7 @@ module Higgs
|
|
638
640
|
else
|
639
641
|
i[type] = { :pos => pos, :siz => blocked_size, :cnum => @index.change_number }
|
640
642
|
end
|
643
|
+
@index[key] = i
|
641
644
|
else
|
642
645
|
@index[key] = { type => { :pos => pos, :siz => blocked_size, :cnum => @index.change_number } }
|
643
646
|
end
|
@@ -648,6 +651,7 @@ module Higgs
|
|
648
651
|
if (i = @index[key]) then
|
649
652
|
if (j = i[type]) then
|
650
653
|
if (j[:siz] >= blocked_size) then
|
654
|
+
i = i.dup; j = j.dup; i[type] = j
|
651
655
|
@logger.debug("write type of overwrite: (pos,size)=(#{j[:pos]},#{blocked_size})") if @logger.debug?
|
652
656
|
commit_log << {
|
653
657
|
:ope => :write,
|
@@ -670,6 +674,7 @@ module Higgs
|
|
670
674
|
@index.free_store(commit_log.last[:pos], commit_log.last[:siz])
|
671
675
|
j[:siz] = blocked_size
|
672
676
|
end
|
677
|
+
@index[key] = i
|
673
678
|
next
|
674
679
|
end
|
675
680
|
end
|
@@ -687,7 +692,9 @@ module Higgs
|
|
687
692
|
:val => value
|
688
693
|
}
|
689
694
|
if (i = @index[key]) then
|
695
|
+
i = i.dup
|
690
696
|
if (j = i[type]) then
|
697
|
+
j = j.dup; i[type] = j
|
691
698
|
commit_log << {
|
692
699
|
:ope => :free_store,
|
693
700
|
:pos => j[:pos],
|
@@ -701,6 +708,7 @@ module Higgs
|
|
701
708
|
else
|
702
709
|
i[type] = { :pos => eoa, :siz => blocked_size, :cnum => @index.change_number }
|
703
710
|
end
|
711
|
+
@index[key] = i
|
704
712
|
else
|
705
713
|
@index[key] = { type => { :pos => eoa, :siz => blocked_size, :cnum => @index.change_number } }
|
706
714
|
end
|
@@ -804,13 +812,16 @@ module Higgs
|
|
804
812
|
w_tar.add(cmd[:nam], cmd[:val], :mtime => cmd[:mod])
|
805
813
|
blocked_size = Tar::Block::BLKSIZ + Tar::Block.blocked_size(cmd[:val].length)
|
806
814
|
if (i = index[cmd[:key]]) then
|
815
|
+
i = i.dup
|
807
816
|
if (j = i[cmd[:typ]]) then
|
817
|
+
j = j.dup; i[cmd[:typ]] = j
|
808
818
|
j[:pos] = cmd[:pos]
|
809
819
|
j[:siz] = blocked_size
|
810
820
|
j[:cnum] = index.change_number
|
811
821
|
else
|
812
822
|
i[cmd[:typ]] = { :pos => cmd[:pos], :siz => blocked_size, :cnum => index.change_number }
|
813
823
|
end
|
824
|
+
index[cmd[:key]] = i
|
814
825
|
else
|
815
826
|
index[cmd[:key]] = { cmd[:typ] => { :pos => cmd[:pos], :siz => blocked_size, :cnum => index.change_number } }
|
816
827
|
end
|