fix ElasticSearchService- ReIndex

This commit is contained in:
Anton Suhorukov 2023-05-21 00:23:44 +03:00
parent fd3f479f7f
commit 76e80de7be

View File

@ -42,7 +42,7 @@ public class ElasticSearchService
{
_cacheNotify.Subscribe(async (a) =>
{
await ReIndexAsync(a.Names.ToList(), a.Tenant);
ReIndex(a.Names.ToList(), a.Tenant);
}, CacheNotifyAction.Any);
}
@ -51,33 +51,39 @@ public class ElasticSearchService
return _serviceProvider.GetService<IEnumerable<IFactoryIndexer>>().Any(r => r.IndexName == table);
}
public async Task ReIndexAsync(List<string> toReIndex, int tenant)
public void ReIndex(List<string> toReIndex, int tenant)
{
var allItems = _serviceProvider.GetService<IEnumerable<IFactoryIndexer>>().ToList();
var needClear = false;
foreach (var item in toReIndex)
{
var index = allItems.FirstOrDefault(r => r.IndexName == item);
if (index == null)
{
continue;
}
var generic = typeof(BaseIndexer<>);
var instance = (IIndexer)Activator.CreateInstance(generic.MakeGenericType(index.GetType()), index);
await instance.ReIndexAsync();
needClear = true;
}
var allItems = _serviceProvider.GetService<IEnumerable<IFactoryIndexer>>().ToList();
var tasks = new List<Task>(toReIndex.Count);
if (needClear)
foreach (var item in toReIndex)
{
var index = allItems.FirstOrDefault(r => r.IndexName == item);
if (index == null)
{
continue;
}
var generic = typeof(BaseIndexer<>);
var instance = (IIndexer)Activator.CreateInstance(generic.MakeGenericType(index.GetType()), index);
tasks.Add(instance.ReIndexAsync());
}
if (tasks.Count == 0)
{
return;
}
Task.WhenAll(tasks).ContinueWith(async r =>
{
using var scope = _serviceProvider.CreateScope();
var tenantManager = scope.ServiceProvider.GetRequiredService<TenantManager>();
var settingsManager = scope.ServiceProvider.GetRequiredService<SettingsManager>();
await tenantManager.SetCurrentTenantAsync(tenant);
await settingsManager.ClearCacheAsync<SearchSettings>();
}
}
});
}
}
//public State GetState()
//{
// return new State