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

Class Method Details

.is_persisted?(path, persist_options = {}) ⇒ Boolean

Returns:

  • (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

Returns:

  • (Boolean)


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)

  #unless serializer == :clean
  #  TSV.setup database
  #  database.serializer = serializer if serializer
  #end

  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)

  #TSV.setup database

  #database.serializer = :clean

  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