Merge pull request #4538 from sbwalker/dev
fix #4498 build ServerState Assemblies collection in a more thread safe manner
This commit is contained in:
commit
e2f99a1554
|
@ -185,6 +185,7 @@ namespace Oqtane.Repository
|
||||||
if (siteId != -1)
|
if (siteId != -1)
|
||||||
{
|
{
|
||||||
var siteKey = _tenants.GetAlias().SiteKey;
|
var siteKey = _tenants.GetAlias().SiteKey;
|
||||||
|
var assemblies = new List<string>();
|
||||||
|
|
||||||
// get all module definition permissions for site
|
// get all module definition permissions for site
|
||||||
List<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.ModuleDefinition).ToList();
|
List<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.ModuleDefinition).ToList();
|
||||||
|
@ -193,7 +194,6 @@ namespace Oqtane.Repository
|
||||||
var settings = _settings.GetSettings(EntityNames.ModuleDefinition).ToList();
|
var settings = _settings.GetSettings(EntityNames.ModuleDefinition).ToList();
|
||||||
|
|
||||||
// populate module definition site settings and permissions
|
// populate module definition site settings and permissions
|
||||||
var serverState = _serverState.GetServerState(siteKey);
|
|
||||||
foreach (ModuleDefinition moduledefinition in ModuleDefinitions)
|
foreach (ModuleDefinition moduledefinition in ModuleDefinitions)
|
||||||
{
|
{
|
||||||
moduledefinition.SiteId = siteId;
|
moduledefinition.SiteId = siteId;
|
||||||
|
@ -211,17 +211,17 @@ namespace Oqtane.Repository
|
||||||
if (moduledefinition.IsEnabled)
|
if (moduledefinition.IsEnabled)
|
||||||
{
|
{
|
||||||
// build list of assemblies for site
|
// build list of assemblies for site
|
||||||
if (!serverState.Assemblies.Contains(moduledefinition.AssemblyName))
|
if (!assemblies.Contains(moduledefinition.AssemblyName))
|
||||||
{
|
{
|
||||||
serverState.Assemblies.Add(moduledefinition.AssemblyName);
|
assemblies.Add(moduledefinition.AssemblyName);
|
||||||
}
|
}
|
||||||
if (!string.IsNullOrEmpty(moduledefinition.Dependencies))
|
if (!string.IsNullOrEmpty(moduledefinition.Dependencies))
|
||||||
{
|
{
|
||||||
foreach (var assembly in moduledefinition.Dependencies.Replace(".dll", "").Split(',', StringSplitOptions.RemoveEmptyEntries).Reverse())
|
foreach (var assembly in moduledefinition.Dependencies.Replace(".dll", "").Split(',', StringSplitOptions.RemoveEmptyEntries).Reverse())
|
||||||
{
|
{
|
||||||
if (!serverState.Assemblies.Contains(assembly.Trim()))
|
if (!assemblies.Contains(assembly.Trim()))
|
||||||
{
|
{
|
||||||
serverState.Assemblies.Insert(0, assembly.Trim());
|
assemblies.Insert(0, assembly.Trim());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -248,6 +248,13 @@ namespace Oqtane.Repository
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cache site assemblies
|
||||||
|
var serverState = _serverState.GetServerState(siteKey);
|
||||||
|
foreach (var assembly in assemblies)
|
||||||
|
{
|
||||||
|
if (!serverState.Assemblies.Contains(assembly)) serverState.Assemblies.Add(assembly);
|
||||||
|
}
|
||||||
|
|
||||||
// clean up any orphaned permissions
|
// clean up any orphaned permissions
|
||||||
var ids = new HashSet<int>(ModuleDefinitions.Select(item => item.ModuleDefinitionId));
|
var ids = new HashSet<int>(ModuleDefinitions.Select(item => item.ModuleDefinitionId));
|
||||||
foreach (var permission in permissions.Where(item => !ids.Contains(item.EntityId)))
|
foreach (var permission in permissions.Where(item => !ids.Contains(item.EntityId)))
|
||||||
|
|
|
@ -161,12 +161,12 @@ namespace Oqtane.Repository
|
||||||
if (siteId != -1)
|
if (siteId != -1)
|
||||||
{
|
{
|
||||||
var siteKey = _tenants.GetAlias().SiteKey;
|
var siteKey = _tenants.GetAlias().SiteKey;
|
||||||
|
var assemblies = new List<string>();
|
||||||
|
|
||||||
// get settings for site
|
// get settings for site
|
||||||
var settings = _settings.GetSettings(EntityNames.Theme).ToList();
|
var settings = _settings.GetSettings(EntityNames.Theme).ToList();
|
||||||
|
|
||||||
// populate theme site settings
|
// populate theme site settings
|
||||||
var serverState = _serverState.GetServerState(siteKey);
|
|
||||||
foreach (Theme theme in Themes)
|
foreach (Theme theme in Themes)
|
||||||
{
|
{
|
||||||
theme.SiteId = siteId;
|
theme.SiteId = siteId;
|
||||||
|
@ -184,22 +184,29 @@ namespace Oqtane.Repository
|
||||||
if (theme.IsEnabled)
|
if (theme.IsEnabled)
|
||||||
{
|
{
|
||||||
// build list of assemblies for site
|
// build list of assemblies for site
|
||||||
if (!serverState.Assemblies.Contains(theme.AssemblyName))
|
if (!assemblies.Contains(theme.AssemblyName))
|
||||||
{
|
{
|
||||||
serverState.Assemblies.Add(theme.AssemblyName);
|
assemblies.Add(theme.AssemblyName);
|
||||||
}
|
}
|
||||||
if (!string.IsNullOrEmpty(theme.Dependencies))
|
if (!string.IsNullOrEmpty(theme.Dependencies))
|
||||||
{
|
{
|
||||||
foreach (var assembly in theme.Dependencies.Replace(".dll", "").Split(',', StringSplitOptions.RemoveEmptyEntries).Reverse())
|
foreach (var assembly in theme.Dependencies.Replace(".dll", "").Split(',', StringSplitOptions.RemoveEmptyEntries).Reverse())
|
||||||
{
|
{
|
||||||
if (!serverState.Assemblies.Contains(assembly.Trim()))
|
if (!assemblies.Contains(assembly.Trim()))
|
||||||
{
|
{
|
||||||
serverState.Assemblies.Insert(0, assembly.Trim());
|
assemblies.Insert(0, assembly.Trim());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cache site assemblies
|
||||||
|
var serverState = _serverState.GetServerState(siteKey);
|
||||||
|
foreach (var assembly in assemblies)
|
||||||
|
{
|
||||||
|
if (!serverState.Assemblies.Contains(assembly)) serverState.Assemblies.Add(assembly);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Themes;
|
return Themes;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user