core/storagemanager.lua
changeset 4010 21311bd31f6b
parent 4009 71b2c1dcf26d
child 4011 0df6b99cb74a
equal deleted inserted replaced
4009:71b2c1dcf26d 4010:21311bd31f6b
    13 for k,v in pairs(datamanager) do olddm[k] = v; end
    13 for k,v in pairs(datamanager) do olddm[k] = v; end
    14 local prosody = prosody;
    14 local prosody = prosody;
    15 
    15 
    16 module("storagemanager")
    16 module("storagemanager")
    17 
    17 
       
    18 local null_storage_method = function () return false, "no data storage active"; end
       
    19 local null_storage_driver = setmetatable(
       
    20 	{
       
    21 		name = "null",
       
    22 		open = function (self) return self; end
       
    23 	}, {
       
    24 		__index = function (self, method)
       
    25 			return null_storage_method;
       
    26 		end
       
    27 	}
       
    28 );
       
    29 
       
    30 --TODO: Move default driver to mod_auth_internal
    18 local default_driver_mt = { name = "internal" };
    31 local default_driver_mt = { name = "internal" };
    19 default_driver_mt.__index = default_driver_mt;
    32 default_driver_mt.__index = default_driver_mt;
    20 function default_driver_mt:open(store)
    33 function default_driver_mt:open(store)
    21 	return setmetatable({ host = self.host, store = store }, default_driver_mt);
    34 	return setmetatable({ host = self.host, store = store }, default_driver_mt);
    22 end
    35 end
    71 		driver_name = config.get(host, "core", "default_storage");
    84 		driver_name = config.get(host, "core", "default_storage");
    72 		driver = load_driver(host, driver_name);
    85 		driver = load_driver(host, driver_name);
    73 		if not driver then
    86 		if not driver then
    74 			if driver_name or (type(storage) == "string"
    87 			if driver_name or (type(storage) == "string"
    75 			or type(storage) == "table" and storage[store]) then
    88 			or type(storage) == "table" and storage[store]) then
    76 				log("warn", "Falling back to default driver for %s storage on %s", store, host);
    89 				log("warn", "Falling back to null driver for %s storage on %s", store, host);
       
    90 				driver_name = "null";
       
    91 				driver = null_storage_driver;
       
    92 			else
       
    93 				driver_name = "internal";
       
    94 				driver = load_driver(host, driver_name);
    77 			end
    95 			end
    78 			driver_name = "internal";
       
    79 			driver = load_driver(host, driver_name);
       
    80 		end
    96 		end
    81 	end
    97 	end
    82 	
    98 	
    83 	local ret, err = driver:open(store, typ);
    99 	local ret, err = driver:open(store, typ);
    84 	if not ret then
   100 	if not ret then
    85 		if err == "unsupported-store" then
   101 		if err == "unsupported-store" then
    86 			log("debug", "Storage driver %s does not support store %s (%s), falling back to internal driver",
   102 			log("debug", "Storage driver %s does not support store %s (%s), falling back to internal driver",
    87 				driver_name, store, typ);
   103 				driver_name, store, typ);
    88 			ret = setmetatable({ host = host, store = store }, default_driver_mt); -- default to default driver
   104 			ret = null_storage_driver;
    89 			err = nil;
   105 			err = nil;
    90 		end
   106 		end
    91 	end
   107 	end
    92 	return ret, err;
   108 	return ret, err;
    93 end
   109 end