# Abstract database accessor (a hash-like interface).
class AbstractAccessor
+ attr_reader :filename
+
# lets the user define a recovery procedure in case the Marshal
# deserialization fails, it might be manually recover data.
# NOTE: weird legacy stuff, used by markov plugin (WTH?)
# Forces flush/sync the database on disk.
def flush
return unless @registry
- @registry.flush
+ # if not supported by the database, close/reopen:
+ close
+ registry
end
- # Should optimize/vacuum the database.
+ # Should optimize/vacuum the database. (if supported)
def optimize
- return unless @registry
- @registry.optimize
end
# Closes the database.
@registry ||= Daybreak::DB.new(@filename)
end
+ def flush
+ return unless @registry
+ @registry.flush
+ end
+
def optimize
return unless @registry
@registry.compact
@registry ||= DBM.open(@filename, 0666, DBM::WRCREAT)
end
- def flush
- return if !@registry
- # ruby dbm has no flush, so we close/reopen :(
- close
- registry
- end
-
def dbexists?
not Dir.glob(@filename + '.*').empty?
end
- def optimize
- # unsupported!
- end
-
end
end # Registry
@registry
end
- def flush
- end
-
def optimize
+ return unless @registry
+ @registry.execute('VACUUM')
end
def [](key)
@registry.sync
end
+ def optimize
+ return unless @registry
+ @registry.optimize
+ end
+
end
end # Registry
end
def test_flush
+ # I don't know if there really is a good way to test this:
+ big_string = 'A' * (1024 * 512)
+ @reg['foo'] = big_string+'a'
+
+ dbfile = @reg.filename
+ assert_not_nil(dbfile)
+ if not File.exists? dbfile
+ # dbm ext. are arbitary
+ dbfile = Dir.glob(dbfile+'.*').first
+ end
+ assert_not_nil(dbfile)
+
+ assert(File.exists?(dbfile), 'expected database to exist')
+
+ size_before = File.size(dbfile)
+ @reg['bar'] = big_string
+ @reg.flush
+ size_after = File.size(dbfile)
+
+ assert(size_before < size_after, 'expected big string to be flushed on disk!')
end
def test_optimize
module TempRegistryTest
def setup_temp
@tempdir = Dir.mktmpdir
- puts ' setup registry test, using %s' % @tempdir
end
def teardown_temp
- puts ' teardown registry test, delete %s' % @tempdir
FileUtils.remove_entry @tempdir
end
def setup
setup_temp
- @format = 'sqlite'
+ @format = 'daybreak'
@reg = open(@tempdir)
end