higgs 0.1.5 → 0.1.6
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 +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
|