modulemanager: Removed an unused variable.
[prosody.git] / core / storagemanager.lua
index 218fbea417ecac3d27dbf4a9dbb13637e7870dc3..43409960347fe2baef73023092208de416052724 100644 (file)
@@ -1,5 +1,5 @@
 
-local error = error;
+local error, type = error, type;
 local setmetatable = setmetatable;
 
 local config = require "core.configmanager";
@@ -11,6 +11,7 @@ local log = require "util.logger".init("storagemanager");
 
 local olddm = {}; -- maintain old datamanager, for backwards compatibility
 for k,v in pairs(datamanager) do olddm[k] = v; end
+local prosody = prosody;
 
 module("storagemanager")
 
@@ -25,6 +26,7 @@ function default_driver_mt:set(user, data) return olddm.store(user, self.host, s
 local stores_available = multitable.new();
 
 function initialize_host(host)
+       local host_session = hosts[host];
        host_session.events.add_handler("item-added/data-driver", function (event)
                local item = event.item;
                stores_available:set(host, item.name, item);
@@ -35,18 +37,22 @@ function initialize_host(host)
                stores_available:set(host, item.name, nil);
        end);
 end
+prosody.events.add_handler("host-activated", initialize_host, 101);
 
 local function load_driver(host, driver_name)
        if not driver_name then
                return;
        end
        local driver = stores_available:get(host, driver_name);
-       if not driver then
-               if driver_name ~= "internal" then
-                       modulemanager.load(host, "storage_"..driver_name);
-               else
-                       return setmetatable({host = host}, default_driver_mt);
+       if driver then return driver; end
+       if driver_name ~= "internal" then
+               local ok, err = modulemanager.load(host, "storage_"..driver_name);
+               if not ok then
+                       log("error", "Failed to load storage driver plugin %s: %s", driver_name, err);
                end
+               return stores_available:get(host, driver_name);
+       else
+               return setmetatable({host = host}, default_driver_mt);
        end
 end
 
@@ -65,8 +71,11 @@ function open(host, store, typ)
                driver_name = config.get(host, "core", "default_storage");
                driver = load_driver(host, driver_name);
                if not driver then
+                       if driver_name or (type(storage) == "string"
+                       or type(storage) == "table" and storage[store]) then
+                               log("warn", "Falling back to default driver for %s storage on %s", store, host);
+                       end
                        driver_name = "internal";
-                       log("warn", "Falling back to default driver for %s storage on %s", store, host);
                        driver = load_driver(host, driver_name);
                end
        end