From 6e960d8906bc288cbe3908e5c32a86e19386c83d Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 28 Apr 2010 22:40:20 -0700 Subject: [PATCH] Fix logic with tenant cache Don't cache the environment if default shell settings was created Also display error if "/tenant" switch specifies a non existing tenant name. --HG-- branch : dev --- src/Orchard/Commands/CommandHostAgent.cs | 30 ++++++++++++++---------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/Orchard/Commands/CommandHostAgent.cs b/src/Orchard/Commands/CommandHostAgent.cs index 184e92fc6..efe2269cd 100644 --- a/src/Orchard/Commands/CommandHostAgent.cs +++ b/src/Orchard/Commands/CommandHostAgent.cs @@ -100,28 +100,32 @@ namespace Orchard.Commands { } public IStandaloneEnvironment FindOrCreateTenant(string tenant) { - if (!_tenants.ContainsKey(tenant)) { - var host = _hostContainer.Resolve(); - var tenantManager = _hostContainer.Resolve(); + IStandaloneEnvironment result; + if (_tenants.TryGetValue(tenant, out result)) + return result; + var host = _hostContainer.Resolve(); + var tenantManager = _hostContainer.Resolve(); - // Retrieve settings for speficified tenant. In case of an unitiliazed site (no - // settings anywhere), we create a default settings instance. - var settingsList = tenantManager.LoadSettings(); - ShellSettings settings; - if (settingsList.Any()) { - settings = tenantManager.LoadSettings().Single(s => String.Equals(s.Name, tenant, StringComparison.OrdinalIgnoreCase)); - } - else { - settings = new ShellSettings {Name = "Default", State = new TenantState("Uninitialized")}; + // Retrieve settings for speficified tenant. + var settingsList = tenantManager.LoadSettings(); + if (settingsList.Any()) { + var settings = settingsList.SingleOrDefault(s => String.Equals(s.Name, tenant, StringComparison.OrdinalIgnoreCase)); + if (settings == null) { + throw new OrchardException(string.Format("Tenant {0} does not exist", tenant)); } var env = host.CreateStandaloneEnvironment(settings); // Store in cache for next calls _tenants.Add(tenant, env); + return env; + } + else { + // In case of an unitiliazed site (no default settings yet), we create a default settings instance. + var settings = new ShellSettings {Name = "Default", State = new TenantState("Uninitialized")}; + return host.CreateStandaloneEnvironment(settings); } - return _tenants[tenant]; }