-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
DbContext
created by dbContextDefaultFactory
…
…instead of the `Func<Owned<>>` factory itself @ `DoWork()` + primary ctor param `replyContentImageSaver` to re-insert `ImageInReply` entites with images url filename from newly re-extracted reply contents @ SimplifyImagesInAllReplyContentsWorker.cs @ crawler * using async overload for `DbContext.SaveChangesAsync()` * add params for captured variables `processEntityCount` & `process` to fix ReSharper inspection `AccessToModifiedClosure` * renamed from `SaveAndLog()` @ `SaveThenLog()` + param `writingEntitiesAction` for `SaveThenLog()` & move param `writingEntityEntryAction` before it @ `Transform()` @ TransformEntityWorker.cs @ shared @ c#
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -28,9 +28,10 @@ public abstract class TransformEntityWorker<TDbContext, TReadingEntity, TWriting | |
protected async Task Transform( | ||
Func<TDbContext> dbContextFactory, | ||
int saveByNthEntityCount, | ||
Action<EntityEntry<TWritingEntity>> writingEntityEntryAction, | ||
Func<TReadingEntity, TExceptionId> readingEntityExceptionIdSelector, | ||
Func<TReadingEntity, TWritingEntity> entityTransformer, | ||
Action<EntityEntry<TWritingEntity>> writingEntityEntryAction, | ||
Action<TDbContext, IEnumerable<TWritingEntity>> writingEntitiesAction, | ||
CancellationToken stoppingToken = default) | ||
{ | ||
var processedEntityCount = 0; | ||
|
@@ -45,26 +46,27 @@ protected async Task Transform( | |
from e in readingDb.Set<TReadingEntity>().AsNoTracking() select e; | ||
var writingEntities = new List<TWritingEntity>(); | ||
|
||
void SaveAndLog() | ||
async Task SaveThenLog(int processedCount, Process currentProcess) | ||
{ | ||
writingDb.Set<TWritingEntity>().UpdateRange(writingEntities); | ||
writingDb.Set<TWritingEntity>().AttachRange(writingEntities); | ||
writingDb.ChangeTracker.Entries<TWritingEntity>().ForEach(writingEntityEntryAction); | ||
var updatedEntityCount = writingDb.SaveChanges(); | ||
writingEntitiesAction(writingDb, writingEntities); | ||
var updatedEntityCount = await writingDb.SaveChangesAsync(stoppingToken); | ||
writingEntities.Clear(); | ||
writingDb.ChangeTracker.Clear(); | ||
|
||
logger.LogTrace("processedEntityCount:{} updatedEntityCount:{} elapsed:{}ms processMemory:{}MiB exceptions:{}", | ||
processedEntityCount, updatedEntityCount, | ||
processedCount, updatedEntityCount, | ||
stopwatch.ElapsedMilliseconds, | ||
process.PrivateMemorySize64 / 1024 / 1024, | ||
currentProcess.PrivateMemorySize64 / 1024 / 1024, | ||
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (crawler)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (crawler)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (crawler)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (crawler)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (imagePipeline)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (imagePipeline)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (imagePipeline)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (imagePipeline)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (shared)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (shared)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (shared)
Check failure on line 61 in c#/shared/src/TransformEntityWorker.cs GitHub Actions / build (shared)
|
||
JsonSerializer.Serialize(exceptions, JsonSerializerOptions)); | ||
stopwatch.Restart(); | ||
} | ||
|
||
foreach (var readingEntity in readingEntities) | ||
{ | ||
processedEntityCount++; | ||
if (processedEntityCount % saveByNthEntityCount == 0) SaveAndLog(); | ||
if (processedEntityCount % saveByNthEntityCount == 0) await SaveThenLog(processedEntityCount, process); | ||
if (stoppingToken.IsCancellationRequested) break; | ||
try | ||
{ | ||
|
@@ -85,6 +87,6 @@ void SaveAndLog() | |
} | ||
} | ||
|
||
SaveAndLog(); | ||
await SaveThenLog(processedEntityCount, process); | ||
} | ||
} |