]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
[registry] small refactoring and added flush test
authorMatthias H <apoc@sixserv.org>
Thu, 6 Mar 2014 13:20:27 +0000 (14:20 +0100)
committerMatthias H <apoc@sixserv.org>
Thu, 6 Mar 2014 13:20:27 +0000 (14:20 +0100)
lib/rbot/registry.rb
lib/rbot/registry/daybreak.rb
lib/rbot/registry/dbm.rb
lib/rbot/registry/sqlite.rb
lib/rbot/registry/tc.rb
test/test_registry.rb

index 4fd5f77c5f6ea0496083c2f6a8aa0d5f431569c4..70b450ac2b5885d45ecf4b0c232c3f81ee1c5b91 100644 (file)
@@ -98,6 +98,8 @@ class Registry
   # 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?)
@@ -187,13 +189,13 @@ class Registry
     # 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.
index 6058b4086e0f65929472250c735c183a758af8e1..233c3a0da970d97299360e43c6a6c95ad431d8df 100644 (file)
@@ -24,6 +24,11 @@ class Registry
       @registry ||= Daybreak::DB.new(@filename)
     end
 
+    def flush
+      return unless @registry
+      @registry.flush
+    end
+
     def optimize
       return unless @registry
       @registry.compact
index a13cb8cef23ddd6a6d9b04a35b52cf9d98bc28f0..9c0304a97f411ab457bec7d664b6ea48d8eaede6 100644 (file)
@@ -23,21 +23,10 @@ class Registry
       @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
index 89e7d78c1857ab7f544df2f4d165148b73c03f3f..1af5d242e645d805b52ad1668a44591b8b051260 100644 (file)
@@ -29,10 +29,9 @@ class Registry
       @registry
     end
 
-    def flush
-    end
-
     def optimize
+      return unless @registry
+      @registry.execute('VACUUM')
     end
 
     def [](key)
index 63bfdf78e392904690e38eb243d0656725eef790..4e248f42f3a2133c0cbc2b14835dcf74bbecd99c 100644 (file)
@@ -36,6 +36,11 @@ class Registry
       @registry.sync
     end
 
+    def optimize
+      return unless @registry
+      @registry.optimize
+    end
+
   end
 
 end # Registry
index 76ee2b2227af720322f9b4bdffac20c036bcd362..a7d45457570e24115f7c4e43c82ce23c6b482d42 100644 (file)
@@ -12,6 +12,26 @@ module RegistryHashInterfaceTests
   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
@@ -210,11 +230,9 @@ end
 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
 
@@ -262,7 +280,7 @@ class RegistryDaybreakTest < Test::Unit::TestCase
 
   def setup
     setup_temp
-    @format = 'sqlite'
+    @format = 'daybreak'
     @reg = open(@tempdir)
   end