Module: Persist
- Defined in:
- lib/rbbt/persist/tsv/cdb.rb,
lib/rbbt/persist/refactor.rb,
lib/rbbt/persist/tsv/lmdb.rb,
lib/rbbt/persist/tsv/adapter.rb,
lib/rbbt/persist/tsv/leveldb.rb,
lib/rbbt/persist/tsv/sharder.rb,
lib/rbbt/persist/tsv/kyotocabinet.rb,
lib/rbbt/persist/tsv/packed_index.rb,
lib/rbbt/persist/tsv/fix_width_table.rb,
lib/rbbt/persist/tsv/tokyocabinet/marshal.rb
Defined Under Namespace
Modules: CDBAdapter, FWTAdapter, KCAdapter, LMDBAdapter, LevelDBAdapter, PKIAdapter, SharderAdapter, TCAdapter, TSVAdapter
Classes: Sharder
Class Method Summary
collapse
-
.is_persisted?(path, persist_options = {}) ⇒ Boolean
-
.newer?(path, file, by_link = false) ⇒ Boolean
Is ‘file’ newer than ‘path’? return non-true if path is newer than file.
-
.open_cdb(path, write, serializer = nil) ⇒ Object
-
.open_fwt(path, value_size, range = false, serializer = nil, update = false, in_memory = false, &pos_function) ⇒ Object
-
.open_kyotocabinet(path, write, serializer = nil, kyotocabinet_class = 'kch') ⇒ Object
-
.open_leveldb(path, write, serializer = nil) ⇒ Object
-
.open_lmdb(path, write, serializer = nil) ⇒ Object
-
.open_pki(path, write, pattern, &pos_function) ⇒ Object
-
.open_sharder(path, write, serializer = nil, type = TokyoCabinet::HDB, options, &shard_function) ⇒ Object
Class Method Details
.is_persisted?(path, persist_options = {}) ⇒ Boolean
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/rbbt/persist/refactor.rb', line 3
def self.is_persisted?(path, persist_options = {})
return true if Open.remote?(path)
return true if Open.ssh?(path)
return false if not Open.exists? path
return false if TrueClass === persist_options[:update]
expiration = persist_options[:expiration]
if expiration
seconds = Misc.timespan(expiration)
patht = Open.mtime(path)
return false if Time.now > patht + seconds
end
check = persist_options[:check]
return true if check.nil?
missing = check.reject{|file| Open.exists?(file) }
return false if missing.any?
return true unless ENV["RBBT_UPDATE"]
if Array === check
newer = check.select{|file| newer? path, file}
return true if newer.empty?
Log.medium "Persistence check for #{path} failed in: #{ Misc.fingerprint(newer)}"
return false
else
! newer?(path, check)
end
end
|
.newer?(path, file, by_link = false) ⇒ Boolean
Is ‘file’ newer than ‘path’? return non-true if path is newer than file
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/rbbt/persist/refactor.rb', line 35
def self.newer?(path, file, by_link = false)
return true if not Open.exists?(file)
path = path.find if Path === path
file = file.find if Path === file
if by_link
patht = File.exist?(path) ? File.lstat(path).mtime : nil
filet = File.exist?(file) ? File.lstat(file).mtime : nil
else
patht = Open.mtime(path)
filet = Open.mtime(file)
end
return true if patht.nil? || filet.nil?
diff = patht - filet
return diff if diff < 0
return false
end
|
.open_cdb(path, write, serializer = nil) ⇒ Object
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/rbbt/persist/tsv/cdb.rb', line 128
def self.open_cdb(path, write, serializer = nil)
write = true unless File.exist? path
FileUtils.mkdir_p File.dirname(path) unless File.exist?(File.dirname(path))
database = Persist::CDBAdapter.open(path, write)
database
end
|
.open_fwt(path, value_size, range = false, serializer = nil, update = false, in_memory = false, &pos_function) ⇒ Object
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/rbbt/persist/tsv/fix_width_table.rb', line 100
def self.open_fwt(path, value_size, range = false, serializer = nil, update = false, in_memory = false, &pos_function)
FileUtils.mkdir_p File.dirname(path) unless File.exist?(File.dirname(path))
database = Persist::FWTAdapter.open(path, value_size, range, update, in_memory, &pos_function)
unless serializer == :clean
TSV.setup database
database.serializer = serializer || database.serializer
end
database
end
|
.open_kyotocabinet(path, write, serializer = nil, kyotocabinet_class = 'kch') ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/rbbt/persist/tsv/kyotocabinet.rb', line 80
def self.open_kyotocabinet(path, write, serializer = nil, kyotocabinet_class= 'kch')
write = true unless File.exist? path
FileUtils.mkdir_p File.dirname(path) unless File.exist?(File.dirname(path))
database = Persist::KCAdapter.open(path, write, kyotocabinet_class)
unless serializer == :clean
TSV.setup database
database.serializer = serializer || database.serializer
end
database
end
|
.open_leveldb(path, write, serializer = nil) ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'lib/rbbt/persist/tsv/leveldb.rb', line 106
def self.open_leveldb(path, write, serializer = nil)
write = true unless File.exist? path
FileUtils.mkdir_p File.dirname(path) unless File.exist?(File.dirname(path))
database = Persist::LevelDBAdapter.open(path, write)
unless serializer == :clean
TSV.setup database
database.serializer = serializer || database.serializer
end
database
end
|
.open_lmdb(path, write, serializer = nil) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/rbbt/persist/tsv/lmdb.rb', line 47
def self.open_lmdb(path, write, serializer = nil)
write = true unless File.exist? path
FileUtils.mkdir_p File.dirname(path) unless File.exist?(File.dirname(path))
database = Persist::LMDBAdapter.open(path, write)
unless serializer == :clean
TSV.setup database
database.serializer = serializer || database.serializer
end
database
end
|
.open_pki(path, write, pattern, &pos_function) ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/rbbt/persist/tsv/packed_index.rb', line 98
def self.open_pki(path, write, pattern, &pos_function)
FileUtils.mkdir_p File.dirname(path) unless File.exist?(File.dirname(path))
database = Persist::PKIAdapter.open(path, write, pattern, &pos_function)
database
end
|
.open_sharder(path, write, serializer = nil, type = TokyoCabinet::HDB, options, &shard_function) ⇒ Object
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
|
# File 'lib/rbbt/persist/tsv/sharder.rb', line 245
def self.open_sharder(path, write, serializer = nil, type = TokyoCabinet::HDB, options, &shard_function)
write = true unless File.exist? path
FileUtils.mkdir_p File.dirname(path) unless File.exist?(File.dirname(path))
database = Persist::SharderAdapter.open(path, write, type, options, &shard_function)
if type.to_s == 'pki'
TSV.setup database
database.type = :list
database.serializer = :clean
else
if serializer != :clean
TSV.setup database
database.serializer = serializer if serializer
end
end
database
end
|