higgs 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +208 -0
- data/LICENSE +26 -0
- data/README +2 -0
- data/Rakefile +75 -0
- data/bin/higgs_backup +67 -0
- data/bin/higgs_dump_index +43 -0
- data/bin/higgs_dump_jlog +42 -0
- data/bin/higgs_verify +37 -0
- data/lib/cgi/session/higgs.rb +72 -0
- data/lib/higgs/block.rb +192 -0
- data/lib/higgs/cache.rb +117 -0
- data/lib/higgs/dbm.rb +55 -0
- data/lib/higgs/exceptions.rb +31 -0
- data/lib/higgs/flock.rb +77 -0
- data/lib/higgs/index.rb +164 -0
- data/lib/higgs/jlog.rb +159 -0
- data/lib/higgs/lock.rb +189 -0
- data/lib/higgs/storage.rb +1086 -0
- data/lib/higgs/store.rb +228 -0
- data/lib/higgs/tar.rb +390 -0
- data/lib/higgs/thread.rb +370 -0
- data/lib/higgs/tman.rb +513 -0
- data/lib/higgs/utils/bman.rb +285 -0
- data/lib/higgs/utils.rb +22 -0
- data/lib/higgs/version.rb +21 -0
- data/lib/higgs.rb +59 -0
- data/misc/cache_bench/cache_bench.rb +43 -0
- data/misc/dbm_bench/.strc +8 -0
- data/misc/dbm_bench/Rakefile +78 -0
- data/misc/dbm_bench/dbm_multi_thread.rb +199 -0
- data/misc/dbm_bench/dbm_rnd_delete.rb +43 -0
- data/misc/dbm_bench/dbm_rnd_read.rb +44 -0
- data/misc/dbm_bench/dbm_rnd_update.rb +44 -0
- data/misc/dbm_bench/dbm_seq_read.rb +45 -0
- data/misc/dbm_bench/dbm_seq_write.rb +44 -0
- data/misc/dbm_bench/st_verify.rb +28 -0
- data/misc/io_bench/cksum_bench.rb +48 -0
- data/misc/io_bench/jlog_bench.rb +71 -0
- data/misc/io_bench/write_bench.rb +128 -0
- data/misc/thread_bench/lock_bench.rb +132 -0
- data/mkrdoc.rb +8 -0
- data/rdoc.yml +13 -0
- data/sample/count.rb +60 -0
- data/sample/dbmtest.rb +38 -0
- data/test/Rakefile +45 -0
- data/test/run.rb +32 -0
- data/test/test_block.rb +163 -0
- data/test/test_cache.rb +214 -0
- data/test/test_cgi_session.rb +142 -0
- data/test/test_flock.rb +162 -0
- data/test/test_index.rb +258 -0
- data/test/test_jlog.rb +180 -0
- data/test/test_lock.rb +320 -0
- data/test/test_online_backup.rb +169 -0
- data/test/test_storage.rb +439 -0
- data/test/test_storage_conf.rb +202 -0
- data/test/test_storage_init_opts.rb +89 -0
- data/test/test_store.rb +211 -0
- data/test/test_tar.rb +432 -0
- data/test/test_thread.rb +541 -0
- data/test/test_tman.rb +875 -0
- data/test/test_tman_init_opts.rb +56 -0
- data/test/test_utils_bman.rb +234 -0
- metadata +115 -0
data/ChangeLog
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
2007-09-29 TOKI Yoshinori <toki@freedom.ne.jp>
|
2
|
+
|
3
|
+
* lib/higgs/version.rb: version 0.1.0.
|
4
|
+
|
5
|
+
* check ruby-1.8.6-p110
|
6
|
+
ruby 1.8.6 (2007-09-23 patchlevel 110) [i686-linux], OK.
|
7
|
+
ruby 1.8.6 (2007-09-23 patchlevel 110) [i386-cygwin], OK.
|
8
|
+
|
9
|
+
2007-09-28 TOKI Yoshinori <toki@freedom.ne.jp>
|
10
|
+
|
11
|
+
* started subversion repository on rubyforge.org.
|
12
|
+
|
13
|
+
* add document utilities for package.
|
14
|
+
|
15
|
+
2007-09-26 TOKI Yoshinori <toki@freedom.ne.jp>
|
16
|
+
|
17
|
+
* Source Code Management: cvs -> svn.
|
18
|
+
|
19
|
+
2007-09-24 TOKI Yoshinori <toki@freedom.ne.jp>
|
20
|
+
|
21
|
+
* lib/higgs/version.rb: version 0.0.6.
|
22
|
+
|
23
|
+
* LICENSE: BSD style license.
|
24
|
+
|
25
|
+
* lib/higgs/storage.rb (Higgs::Storage class): fix a bug of
|
26
|
+
auto-recovery at the read-write open.
|
27
|
+
|
28
|
+
2007-09-18 TOKI Yoshinori <toki@freedom.ne.jp>
|
29
|
+
|
30
|
+
* lib/higgs/storage.rb (Higgs::Storage class): strict check for
|
31
|
+
recovery.
|
32
|
+
|
33
|
+
2007-09-17 TOKI Yoshinori <toki@freedom.ne.jp>
|
34
|
+
|
35
|
+
* sample/count.rb: sample of Higgs::Store
|
36
|
+
|
37
|
+
2007-09-09 TOKI Yoshinori <toki@freedom.ne.jp>
|
38
|
+
|
39
|
+
* lib/higgs/tman.rb (Higgs::TransactionContext class): update
|
40
|
+
secondary cache on writing.
|
41
|
+
|
42
|
+
* lib/higgs/cache.rb (Higgs::SharedWorkCache class): update for
|
43
|
+
cache entry.
|
44
|
+
|
45
|
+
* lib/higgs/thread.rb (Higgs::SharedWork class): update for
|
46
|
+
result.
|
47
|
+
|
48
|
+
2007-08-29 TOKI Yoshinori <toki@freedom.ne.jp>
|
49
|
+
|
50
|
+
* lib/higgs/tman.rb: update method.
|
51
|
+
|
52
|
+
2007-08-26 TOKI Yoshinori <toki@freedom.ne.jp>
|
53
|
+
|
54
|
+
* lib/higgs/tman.rb: current transaction access in a thread.
|
55
|
+
|
56
|
+
2007-08-07 TOKI Yoshinori <toki@freedom.ne.jp>
|
57
|
+
|
58
|
+
* lib/higgs/tman.rb: secondary cache.
|
59
|
+
|
60
|
+
2007-08-05 TOKI Yoshinori <toki@freedom.ne.jp>
|
61
|
+
|
62
|
+
* lib/higgs/index.rb: identities for key of secondary cache.
|
63
|
+
|
64
|
+
* cvs tag of higgs_snapshot_20070805. snapshot before secondary
|
65
|
+
cache implementation.
|
66
|
+
|
67
|
+
2007-07-28 TOKI Yoshinori <toki@freedom.ne.jp>
|
68
|
+
|
69
|
+
* lib/higgs/version.rb: version 0.0.5.
|
70
|
+
|
71
|
+
* bin/higgs_backup: backup utility.
|
72
|
+
|
73
|
+
2007-07-24 TOKI Yoshinori <toki@freedom.ne.jp>
|
74
|
+
|
75
|
+
* lib/higgs/utils/bman.rb: online backup scenario.
|
76
|
+
|
77
|
+
2007-07-23 TOKI Yoshinori <toki@freedom.ne.jp>
|
78
|
+
|
79
|
+
* test/test_utils_bman.rb: unit test for backup manager.
|
80
|
+
|
81
|
+
* lib/higgs/utils/bman.rb: backup manager.
|
82
|
+
|
83
|
+
* lib/higgs/utils.rb: namespace for higgs utilities.
|
84
|
+
|
85
|
+
2007-07-16 TOKI Yoshinori <toki@freedom.ne.jp>
|
86
|
+
|
87
|
+
* lib/higgs/storage.rb: load storage options from YAML
|
88
|
+
configuration file.
|
89
|
+
|
90
|
+
* lib/higgs/tman.rb: new Higgs::TransactionManager::Export
|
91
|
+
module. export transaction manager methods from @tman instance
|
92
|
+
variable.
|
93
|
+
|
94
|
+
2007-07-15 TOKI Yoshinori <toki@freedom.ne.jp>
|
95
|
+
|
96
|
+
* lib/higgs/storage.rb: new Higgs::Storage::Export module. export
|
97
|
+
storage methods from @storage instance variable.
|
98
|
+
|
99
|
+
* lib/cgi/session/higgs.rb, lib/higgs.rb, lib/higgs/block.rb,
|
100
|
+
lib/higgs/cache.rb, lib/higgs/dbm.rb, lib/higgs/exceptions.rb,
|
101
|
+
lib/higgs/flock.rb, lib/higgs/index.rb, lib/higgs/jlog.rb,
|
102
|
+
lib/higgs/lock.rb, lib/higgs/storage.rb, lib/higgs/store.rb,
|
103
|
+
lib/higgs/tar.rb, lib/higgs/thread.rb, lib/higgs/tman.rb: some
|
104
|
+
rdoc comments.
|
105
|
+
|
106
|
+
* lib/higgs/storage.rb: change confusing error name:
|
107
|
+
Higgs::Storage::BrokenError (alike Higgs::Block::BrokenError) ->
|
108
|
+
Higgs::Storage::PanicError.
|
109
|
+
|
110
|
+
* bin/higgs_verify: command line options.
|
111
|
+
|
112
|
+
2007-07-12 TOKI Yoshinori <toki@freedom.ne.jp>
|
113
|
+
|
114
|
+
* lib/higgs/storage.rb: change journal log format.
|
115
|
+
|
116
|
+
* lib/higgs/version.rb: version 0.0.4.
|
117
|
+
|
118
|
+
2007-07-11 TOKI Yoshinori <toki@freedom.ne.jp>
|
119
|
+
|
120
|
+
* bin/higgs_dump_index, bin/higgs_dump_jlog: command line options.
|
121
|
+
|
122
|
+
2007-07-10 TOKI Yoshinori <toki@freedom.ne.jp>
|
123
|
+
|
124
|
+
* lib/higgs/tman.rb: decode or freeze in each transaction for the rollback.
|
125
|
+
|
126
|
+
2007-07-08 TOKI Yoshinori <toki@freedom.ne.jp>
|
127
|
+
|
128
|
+
* bin/higgs_dump_index, bin/higgs_dump_jlog, bin/higgs_verify:
|
129
|
+
tools.
|
130
|
+
|
131
|
+
* lib/higgs/version.rb: version 0.0.3.
|
132
|
+
|
133
|
+
2007-07-07 TOKI Yoshinori <toki@freedom.ne.jp>
|
134
|
+
|
135
|
+
* lib/higgs/storage.rb: new `string_only' system property.
|
136
|
+
|
137
|
+
2007-07-05 TOKI Yoshinori <toki@freedom.ne.jp>
|
138
|
+
|
139
|
+
* lib/higgs/version.rb: version 0.0.2.
|
140
|
+
|
141
|
+
* lib/higgs/tman.rb: clear local properties cache on new write.
|
142
|
+
|
143
|
+
2007-07-04 TOKI Yoshinori <toki@freedom.ne.jp>
|
144
|
+
|
145
|
+
* lib/higgs/version.rb: version description file.
|
146
|
+
|
147
|
+
* lib/higgs/tman.rb: clear local properties cache on new write.
|
148
|
+
|
149
|
+
2007-06-23 TOKI Yoshinori <toki@freedom.ne.jp>
|
150
|
+
|
151
|
+
* lib/higgs/storage.rb: unique free block name.
|
152
|
+
|
153
|
+
2007-06-07 TOKI Yoshinori <toki@freedom.ne.jp>
|
154
|
+
|
155
|
+
* Rakefile: gem package task.
|
156
|
+
|
157
|
+
2007-05-21 TOKI Yoshinori <toki@freedom.ne.jp>
|
158
|
+
|
159
|
+
* lib/higgs/storage.rb: various data cksum type.
|
160
|
+
|
161
|
+
* lib/higgs/block.rb, lib/higgs/jlog.rb: various block body cksum
|
162
|
+
type.
|
163
|
+
|
164
|
+
2007-05-19 TOKI Yoshinori <toki@freedom.ne.jp>
|
165
|
+
|
166
|
+
* lib/cgi/session/higgs.rb: for CGI session.
|
167
|
+
|
168
|
+
2007-05-16 TOKI Yoshinori <toki@freedom.ne.jp>
|
169
|
+
|
170
|
+
* lib/higgs/storage.rb (Higgs::Storage): cancel of initialization on fail.
|
171
|
+
|
172
|
+
2007-05-14 TOKI Yoshinori <toki@freedom.ne.jp>
|
173
|
+
|
174
|
+
* lib/higgs/storage.rb (Higgs::Storage): fix a bug of
|
175
|
+
raw_write_and_commit.
|
176
|
+
|
177
|
+
2007-05-07 TOKI Yoshinori <toki@freedom.ne.jp>
|
178
|
+
|
179
|
+
* lib/higgs/storage.rb (Higgs::Storage): check index change number
|
180
|
+
in journal log.
|
181
|
+
|
182
|
+
2007-05-06 TOKI Yoshinori <toki@freedom.ne.jp>
|
183
|
+
|
184
|
+
* test/optional/test_online_backup.rb: online backup test.
|
185
|
+
|
186
|
+
* indentation tab -> white spaces.
|
187
|
+
|
188
|
+
* lib/higgs/jlog.rb (Higgs::JournalLogger): optional eof flag to
|
189
|
+
close method.
|
190
|
+
|
191
|
+
* lib/higgs/tar.rb (Higgs::Tar::ArchiveWriter): reverse optional
|
192
|
+
flag of close method.
|
193
|
+
|
194
|
+
* lib/higgs/tman.rb (Higgs::TransactionContext): allow to store
|
195
|
+
nil value to local data cache.
|
196
|
+
|
197
|
+
2007-05-04 TOKI Yoshinori <toki@freedom.ne.jp>
|
198
|
+
|
199
|
+
* lib/higgs/thread.rb: obsolete name space: Higgs::Thread
|
200
|
+
|
201
|
+
* lib/higgs/lock.rb: obsolete name space: Higgs::Lock
|
202
|
+
|
203
|
+
* lib/higgs/cache.rb: obsolete name space: Higgs::Cache
|
204
|
+
|
205
|
+
* merge from development branch:
|
206
|
+
cvs update -j higgs_snapshot_20070420 -j higgs_snapshot_20070420_branch_20070420_snapshot_20070504
|
207
|
+
|
208
|
+
|
data/LICENSE
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2007
|
2
|
+
TOKI Yoshinori <toki@freedom.ne.jp>. All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
1. Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
|
10
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
11
|
+
this list of conditions and the following disclaimer in the documentation
|
12
|
+
and/or other materials provided with the distribution.
|
13
|
+
|
14
|
+
3. The name of the author may not be used to endorse or promote products
|
15
|
+
derived from this software without specific prior written permission.
|
16
|
+
|
17
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
18
|
+
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
19
|
+
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
20
|
+
SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
22
|
+
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
23
|
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
24
|
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
25
|
+
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
26
|
+
OF SUCH DAMAGE.
|
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# for ident(1)
|
2
|
+
CVS_ID = '$Id: Rakefile 576 2007-09-29 08:35:19Z toki $'
|
3
|
+
|
4
|
+
require 'lib/higgs/version'
|
5
|
+
require 'rake/gempackagetask'
|
6
|
+
require 'yaml'
|
7
|
+
|
8
|
+
LIB_DIR = 'lib'
|
9
|
+
TEST_DIR = 'test'
|
10
|
+
RDOC_DIR = 'api'
|
11
|
+
RDOC_MAIN = 'Higgs'
|
12
|
+
|
13
|
+
def cd_v(dir)
|
14
|
+
cd(dir, :verbose => true) {
|
15
|
+
yield
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def load_rdoc_opts
|
20
|
+
YAML.load(IO.read('rdoc.yml'))
|
21
|
+
end
|
22
|
+
|
23
|
+
task :default
|
24
|
+
|
25
|
+
task :test do
|
26
|
+
cd_v TEST_DIR do
|
27
|
+
sh 'rake'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
task :rdoc do
|
32
|
+
rdoc_opts = load_rdoc_opts
|
33
|
+
sh 'rdoc', *(rdoc_opts['CommonOptions'] + rdoc_opts['CommandLineOptions']).flatten
|
34
|
+
end
|
35
|
+
|
36
|
+
task :rdoc_clean do
|
37
|
+
rm_rf RDOC_DIR
|
38
|
+
end
|
39
|
+
|
40
|
+
task :rdoc_upload => [ :rdoc_clean, :rdoc ] do
|
41
|
+
sh 'scp', '-pr', RDOC_DIR, 'rubyforge.org:/var/www/gforge-projects/higgs/.'
|
42
|
+
end
|
43
|
+
|
44
|
+
spec = Gem::Specification.new{|s|
|
45
|
+
s.name = 'higgs'
|
46
|
+
s.version = Higgs::VERSION
|
47
|
+
s.summary = 'pure ruby transactional storage compatible with unix TAR format'
|
48
|
+
s.author = 'TOKI Yoshinori'
|
49
|
+
s.email = 'toki@freedom.ne.jp'
|
50
|
+
s.executables = %w[ higgs_backup higgs_dump_index higgs_dump_jlog higgs_verify ]
|
51
|
+
s.files = Dir['**/{Rakefile,.strc,*.{rb,yml}}']
|
52
|
+
s.files += %w[ ChangeLog LICENSE README ]
|
53
|
+
s.test_files = %w[ test/run.rb ]
|
54
|
+
s.has_rdoc = true
|
55
|
+
s.rdoc_options = load_rdoc_opts['CommonOptions'].flatten
|
56
|
+
}
|
57
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
58
|
+
pkg.need_zip = true
|
59
|
+
pkg.need_tar_gz = true
|
60
|
+
end
|
61
|
+
|
62
|
+
task :gem_install => [ :gem ] do
|
63
|
+
sh 'gem', 'install', "pkg/higgs-#{Higgs::VERSION}.gem"
|
64
|
+
end
|
65
|
+
|
66
|
+
task :clean => [ :rdoc_clean, :clobber_package ] do
|
67
|
+
cd_v 'misc/dbm_bench' do
|
68
|
+
sh 'rake', 'clean'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Local Variables:
|
73
|
+
# mode: Ruby
|
74
|
+
# indent-tabs-mode: nil
|
75
|
+
# End:
|
data/bin/higgs_backup
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
require 'higgs/utils/bman'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
# for ident(1)
|
7
|
+
CVS_ID = '$Id: higgs_backup 546 2007-09-23 14:20:23Z toki $'
|
8
|
+
|
9
|
+
STDOUT.sync = true
|
10
|
+
|
11
|
+
opts = OptionParser.new
|
12
|
+
opts.banner = "Usage: #{opts.program_name} [options]"
|
13
|
+
|
14
|
+
command = :online_backup
|
15
|
+
options = { :verbose => 0 }
|
16
|
+
|
17
|
+
opts.on('--command=BACKUP_COMMAND',
|
18
|
+
[ :index, :data, :rotate, :jlog, :recover, :verify, :clean, :online_backup ]) {|value|
|
19
|
+
command = value
|
20
|
+
}
|
21
|
+
|
22
|
+
opts.on('-f', '--from=BACKUP_TARGET_STORAGE', String) {|value|
|
23
|
+
options[:from] = value
|
24
|
+
}
|
25
|
+
opts.on('-t', '--to-dir=DIR_TO_BACKUP', String) {|value|
|
26
|
+
options[:to_dir] = value
|
27
|
+
}
|
28
|
+
opts.on('-n', '--to-name=NAME_TO_BACKUP', String) {|value|
|
29
|
+
options[:to_name] = value
|
30
|
+
}
|
31
|
+
opts.on('-u', '--jlog-rotate-service-uri=URI', String) {|value|
|
32
|
+
options[:jlog_rotate_service_uri] = value
|
33
|
+
}
|
34
|
+
opts.on('-v', '--verbose', '--[no-]verbose') {|value|
|
35
|
+
if (value) then
|
36
|
+
options[:verbose] += 1
|
37
|
+
else
|
38
|
+
options[:verbose] -= 1
|
39
|
+
end
|
40
|
+
}
|
41
|
+
opts.on('--verbose-level=LEVEL', Integer) {|value|
|
42
|
+
options[:verbose] = value
|
43
|
+
}
|
44
|
+
|
45
|
+
opts.parse!
|
46
|
+
bman = Higgs::Utils::BackupManager.new(options)
|
47
|
+
|
48
|
+
case (command)
|
49
|
+
when :online_backup
|
50
|
+
bman.online_backup
|
51
|
+
when :index
|
52
|
+
bman.backup_index
|
53
|
+
when :data
|
54
|
+
bman.backup_data
|
55
|
+
when :rotate
|
56
|
+
bman.rotate_jlog
|
57
|
+
when :jlog
|
58
|
+
bman.backup_jlog
|
59
|
+
when :recover
|
60
|
+
bman.recover
|
61
|
+
when :verify
|
62
|
+
bman.verify
|
63
|
+
when :clean
|
64
|
+
bman.clean_jlog
|
65
|
+
else
|
66
|
+
raise "unknown backup command: #{command}"
|
67
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
require 'higgs/index'
|
4
|
+
require 'optparse'
|
5
|
+
require 'pp'
|
6
|
+
require 'yaml'
|
7
|
+
|
8
|
+
# for ident(1)
|
9
|
+
CVS_ID = '$Id: higgs_dump_index 462 2007-07-15 09:25:07Z toki $'
|
10
|
+
|
11
|
+
opts = OptionParser.new
|
12
|
+
opts.banner = "Usage: #{opts.program_name} [options] INDEX_PATH"
|
13
|
+
|
14
|
+
output_format = :pretty
|
15
|
+
opts.on('-o', '--output-format=FORMAT', [ :pretty, :yaml ]) {|value|
|
16
|
+
output_format = value
|
17
|
+
}
|
18
|
+
|
19
|
+
opts.on_tail('-h', '--help') {
|
20
|
+
puts opts
|
21
|
+
puts 'Output format:'
|
22
|
+
print opts.summary_indent, :pretty, "\n"
|
23
|
+
print opts.summary_indent, :yaml, "\n"
|
24
|
+
exit(1)
|
25
|
+
}
|
26
|
+
opts.parse!
|
27
|
+
|
28
|
+
index = Higgs::Index.new
|
29
|
+
index.load(ARGV[0])
|
30
|
+
|
31
|
+
case (output_format)
|
32
|
+
when :pretty
|
33
|
+
pp index
|
34
|
+
when :yaml
|
35
|
+
puts index.to_yaml
|
36
|
+
else
|
37
|
+
raise "unknown output format: #{output_format}"
|
38
|
+
end
|
39
|
+
|
40
|
+
# Local Variables:
|
41
|
+
# mode: Ruby
|
42
|
+
# indent-tabs-mode: nil
|
43
|
+
# End:
|
data/bin/higgs_dump_jlog
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
require 'higgs/jlog'
|
4
|
+
require 'optparse'
|
5
|
+
require 'pp'
|
6
|
+
require 'yaml'
|
7
|
+
|
8
|
+
# for ident(1)
|
9
|
+
CVS_ID = '$Id: higgs_dump_jlog 462 2007-07-15 09:25:07Z toki $'
|
10
|
+
|
11
|
+
opts = OptionParser.new
|
12
|
+
opts.banner = "Usage: #{opts.program_name} [options] [JOURNAL_LOG_PATHs]"
|
13
|
+
|
14
|
+
output_format = :pretty
|
15
|
+
opts.on('-o', '--output-format=FORMAT', [ :pretty, :yaml ]) {|value|
|
16
|
+
output_format = value
|
17
|
+
}
|
18
|
+
|
19
|
+
opts.on_tail('-h', '--help') {
|
20
|
+
puts opts
|
21
|
+
puts 'Output format:'
|
22
|
+
print opts.summary_indent, :pretty, "\n"
|
23
|
+
print opts.summary_indent, :yaml, "\n"
|
24
|
+
exit(1)
|
25
|
+
}
|
26
|
+
opts.parse!
|
27
|
+
|
28
|
+
Higgs::JournalLogger.scan_log(ARGF) {|log|
|
29
|
+
case (output_format)
|
30
|
+
when :pretty
|
31
|
+
pp log
|
32
|
+
when :yaml
|
33
|
+
puts log.to_yaml
|
34
|
+
else
|
35
|
+
raise "unknown output format: #{output_format}"
|
36
|
+
end
|
37
|
+
}
|
38
|
+
|
39
|
+
# Local Variables:
|
40
|
+
# mode: Ruby
|
41
|
+
# indent-tabs-mode: nil
|
42
|
+
# End:
|
data/bin/higgs_verify
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
require 'higgs/storage'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
# for ident(1)
|
7
|
+
CVS_ID = '$Id: higgs_verify 463 2007-07-15 09:52:12Z toki $'
|
8
|
+
|
9
|
+
opts = OptionParser.new
|
10
|
+
opts.banner = "Usage: #{opts.program_name} [options] HIGGS_NAME"
|
11
|
+
|
12
|
+
verbose_level = 0
|
13
|
+
opts.on('-v', '--[no-]verbose') {|v|
|
14
|
+
if (v) then
|
15
|
+
verbose_level += 1
|
16
|
+
else
|
17
|
+
verbose_level -= 1
|
18
|
+
end
|
19
|
+
}
|
20
|
+
opts.on('--verbose-level=LEVEL', Integer) {|level|
|
21
|
+
verbose_level = level
|
22
|
+
}
|
23
|
+
|
24
|
+
opts.parse!
|
25
|
+
higgs_name = ARGV.shift or raise 'requried HIGGS_PATH'
|
26
|
+
|
27
|
+
st = Higgs::Storage.new(higgs_name, :read_only => true)
|
28
|
+
begin
|
29
|
+
st.verify(STDOUT, verbose_level)
|
30
|
+
ensure
|
31
|
+
st.shutdown
|
32
|
+
end
|
33
|
+
|
34
|
+
# Local Variables:
|
35
|
+
# mode: Ruby
|
36
|
+
# indent-tabs-mode: nil
|
37
|
+
# End:
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# like cgi/session/pstore.rb
|
2
|
+
#
|
3
|
+
# Author:: $Author: toki $
|
4
|
+
# Date:: $Date: 2007-09-26 00:20:20 +0900 (Wed, 26 Sep 2007) $
|
5
|
+
# Revision:: $Revision: 559 $
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'cgi/session'
|
9
|
+
require 'digest/md5'
|
10
|
+
require 'fileutils'
|
11
|
+
require 'higgs/store'
|
12
|
+
|
13
|
+
class CGI
|
14
|
+
class Session
|
15
|
+
# like cgi/session/pstore.rb
|
16
|
+
class HiggsStore
|
17
|
+
# for ident(1)
|
18
|
+
CVS_ID = '$Id: higgs.rb 559 2007-09-25 15:20:20Z toki $'
|
19
|
+
|
20
|
+
def initialize(session, options={})
|
21
|
+
dir = options['tmpdir'] || Dir.tmpdir
|
22
|
+
prefix = options['prefix'] || ''
|
23
|
+
id = session.session_id
|
24
|
+
name = options['name'] || 'session'
|
25
|
+
md5 = Digest::MD5.hexdigest(id)
|
26
|
+
@store_dir = File.join(dir, prefix + md5)
|
27
|
+
FileUtils.mkdir_p(@store_dir)
|
28
|
+
@store_path = File.join(@store_dir, name)
|
29
|
+
@store_path.untaint
|
30
|
+
if (File.exist? "#{@store_path}.lock") then
|
31
|
+
@hash = nil
|
32
|
+
else
|
33
|
+
unless (session.new_session) then
|
34
|
+
raise CGI::Session::NoSession, 'uninitialized session'
|
35
|
+
end
|
36
|
+
@hash = {}
|
37
|
+
end
|
38
|
+
@store = Higgs::Store.new(@store_path, options)
|
39
|
+
end
|
40
|
+
|
41
|
+
def restore
|
42
|
+
unless (@hash) then
|
43
|
+
@store.transaction{|tx|
|
44
|
+
@hash = tx[:hash] || {}
|
45
|
+
}
|
46
|
+
end
|
47
|
+
@hash
|
48
|
+
end
|
49
|
+
|
50
|
+
def update
|
51
|
+
@store.transaction{|tx|
|
52
|
+
tx[:hash] = @hash
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
def close
|
57
|
+
r = nil
|
58
|
+
unless (@store.shutdown?) then
|
59
|
+
r = update
|
60
|
+
@store.shutdown
|
61
|
+
end
|
62
|
+
r
|
63
|
+
end
|
64
|
+
|
65
|
+
def delete
|
66
|
+
@store.shutdown unless @store.shutdown?
|
67
|
+
FileUtils.rm_rf(@store_dir)
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|