Changed Audit Trail trimming task to delete all records in one batch, rather than iterating through the table records (#7361)

This commit is contained in:
Rob King
2016-11-10 21:20:24 +00:00
committed by Sébastien Ros
parent b931b79115
commit 69eb505e2a

View File

@@ -18,6 +18,7 @@ using Orchard.Settings;
namespace Orchard.AuditTrail.Services { namespace Orchard.AuditTrail.Services {
public class AuditTrailManager : Component, IAuditTrailManager { public class AuditTrailManager : Component, IAuditTrailManager {
private readonly IRepository<AuditTrailEventRecord> _auditTrailRepository; private readonly IRepository<AuditTrailEventRecord> _auditTrailRepository;
private readonly ITransactionManager _transactionManager;
private readonly IAuditTrailEventProvider _providers; private readonly IAuditTrailEventProvider _providers;
private readonly IClock _clock; private readonly IClock _clock;
private readonly IAuditTrailEventHandler _auditTrailEventHandlers; private readonly IAuditTrailEventHandler _auditTrailEventHandlers;
@@ -30,6 +31,7 @@ namespace Orchard.AuditTrail.Services {
public AuditTrailManager( public AuditTrailManager(
IRepository<AuditTrailEventRecord> auditTrailRepository, IRepository<AuditTrailEventRecord> auditTrailRepository,
ITransactionManager transactionManager,
IAuditTrailEventProvider providers, IAuditTrailEventProvider providers,
IClock clock, IClock clock,
IAuditTrailEventHandler auditTrailEventHandlers, IAuditTrailEventHandler auditTrailEventHandlers,
@@ -41,6 +43,7 @@ namespace Orchard.AuditTrail.Services {
IClientHostAddressAccessor clientHostAddressAccessor) { IClientHostAddressAccessor clientHostAddressAccessor) {
_auditTrailRepository = auditTrailRepository; _auditTrailRepository = auditTrailRepository;
_transactionManager = transactionManager;
_providers = providers; _providers = providers;
_clock = clock; _clock = clock;
_auditTrailEventHandlers = auditTrailEventHandlers; _auditTrailEventHandlers = auditTrailEventHandlers;
@@ -200,13 +203,10 @@ namespace Orchard.AuditTrail.Services {
public IEnumerable<AuditTrailEventRecord> Trim(TimeSpan retentionPeriod) { public IEnumerable<AuditTrailEventRecord> Trim(TimeSpan retentionPeriod) {
var dateThreshold = (_clock.UtcNow.EndOfDay() - retentionPeriod); var dateThreshold = (_clock.UtcNow.EndOfDay() - retentionPeriod);
var query = _auditTrailRepository.Table.Where(x => x.CreatedUtc <= dateThreshold); var query = _auditTrailRepository.Table.Where(x => x.CreatedUtc <= dateThreshold);
var records = query.ToArray();
foreach (var record in records) { _transactionManager.GetSession().Delete(query);
_auditTrailRepository.Delete(record);
}
return records; return query.ToArray();
} }
public string SerializeProviderConfiguration(IEnumerable<AuditTrailEventSetting> settings) { public string SerializeProviderConfiguration(IEnumerable<AuditTrailEventSetting> settings) {