about summary refs log tree commit homepage
path: root/lib/mogilefs/mogilefs.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2008-12-18 20:52:24 -0800
committerEric Wong <normalperson@yhbt.net>2008-12-18 20:52:24 -0800
commitdf2af32f01bc995e9f311b51d3351ee042e23483 (patch)
treee6aa2b13a32a7986860b912ff70b8e2dcc93e12b /lib/mogilefs/mogilefs.rb
parentbd42a70bb299e088b1c244c3ffe46695393521c5 (diff)
downloadmogilefs-client-df2af32f01bc995e9f311b51d3351ee042e23483.tar.gz
Allow MogileFS::MogileFS to use :db_backend => MogileFS::Mysql
This should complete the integration of the read-only Mysql
backend into MogileFS::MogileFS.
Diffstat (limited to 'lib/mogilefs/mogilefs.rb')
-rw-r--r--lib/mogilefs/mogilefs.rb21
1 files changed, 19 insertions, 2 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index 00149ec..2901213 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -46,7 +46,11 @@ class MogileFS::MogileFS < MogileFS::Client
 
     raise ArgumentError, "you must specify a domain" unless @domain
 
-    super
+    if @backend = args[:db_backend]
+      @readonly = true
+    else
+      super
+    end
   end
 
   ##
@@ -210,6 +214,7 @@ class MogileFS::MogileFS < MogileFS::Client
   ##
   # Returns the size of +key+.
   def size(key)
+    @backend.respond_to?(:_size) and return @backend._size(domain, key)
     paths = get_paths(key) or return nil
     paths_size(paths)
   end
@@ -248,7 +253,11 @@ class MogileFS::MogileFS < MogileFS::Client
   # Lists keys starting with +prefix+ follwing +after+ up to +limit+.  If
   # +after+ is nil the list starts at the beginning.
 
-  def list_keys(prefix, after = nil, limit = 1000)
+  def list_keys(prefix, after = nil, limit = 1000, &block)
+    if @backend.respond_to?(:_list_keys)
+      return @backend._list_keys(domain, prefix, after, limit, &block)
+    end
+
     res = begin
       @backend.list_keys(:domain => domain, :prefix => prefix,
                          :after => after, :limit => limit)
@@ -257,6 +266,14 @@ class MogileFS::MogileFS < MogileFS::Client
     end
 
     keys = (1..res['key_count'].to_i).map { |i| res["key_#{i}"] }
+    if block_given?
+      # emulate the MogileFS::Mysql interface, slowly...
+      keys.each do |key|
+        paths = get_paths(key) or next
+        length = paths_size(paths) or next
+        yield key, length, paths.size
+      end
+    end
 
     return keys, res['next_after']
   end