🐛 Fix bugs
This commit is contained in:
@@ -697,14 +697,21 @@ public class PersistentTaskService(
|
|||||||
{
|
{
|
||||||
var previousProgress = task.ChunksCount > 0 ? (double)task.ChunksUploaded / task.ChunksCount * 100 : 0;
|
var previousProgress = task.ChunksCount > 0 ? (double)task.ChunksUploaded / task.ChunksCount * 100 : 0;
|
||||||
|
|
||||||
// Use ExecuteUpdateAsync for better performance - update only the fields we need
|
// Get current parameters and update them directly
|
||||||
|
var parameters = task.TypedParameters;
|
||||||
|
if (!parameters.UploadedChunks.Contains(chunkIndex))
|
||||||
|
{
|
||||||
|
parameters.UploadedChunks.Add(chunkIndex);
|
||||||
|
parameters.ChunksUploaded = parameters.UploadedChunks.Count;
|
||||||
|
|
||||||
var now = SystemClock.Instance.GetCurrentInstant();
|
var now = SystemClock.Instance.GetCurrentInstant();
|
||||||
|
|
||||||
|
// Use ExecuteUpdateAsync to update the Parameters dictionary directly
|
||||||
var updatedRows = await db.Tasks
|
var updatedRows = await db.Tasks
|
||||||
.OfType<PersistentUploadTask>()
|
.OfType<PersistentUploadTask>()
|
||||||
.Where(t => t.TaskId == taskId)
|
.Where(t => t.TaskId == taskId)
|
||||||
.ExecuteUpdateAsync(setters => setters
|
.ExecuteUpdateAsync(setters => setters
|
||||||
.SetProperty(t => t.UploadedChunks, t => t.UploadedChunks.Append(chunkIndex).Distinct().ToList())
|
.SetProperty(t => t.Parameters, ParameterHelper.Untyped(parameters))
|
||||||
.SetProperty(t => t.ChunksUploaded, t => t.UploadedChunks.Count)
|
|
||||||
.SetProperty(t => t.LastActivity, now)
|
.SetProperty(t => t.LastActivity, now)
|
||||||
.SetProperty(t => t.UpdatedAt, now)
|
.SetProperty(t => t.UpdatedAt, now)
|
||||||
);
|
);
|
||||||
@@ -724,6 +731,7 @@ public class PersistentTaskService(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks if a chunk has already been uploaded
|
/// Checks if a chunk has already been uploaded
|
||||||
@@ -822,13 +830,13 @@ public class PersistentTaskService(
|
|||||||
var stats = new UserUploadStats
|
var stats = new UserUploadStats
|
||||||
{
|
{
|
||||||
TotalTasks = tasks.Count,
|
TotalTasks = tasks.Count,
|
||||||
InProgressTasks = tasks.Count(t => t.Status == Model.TaskStatus.InProgress),
|
InProgressTasks = tasks.Count(t => t.Status == TaskStatus.InProgress),
|
||||||
CompletedTasks = tasks.Count(t => t.Status == Model.TaskStatus.Completed),
|
CompletedTasks = tasks.Count(t => t.Status == TaskStatus.Completed),
|
||||||
FailedTasks = tasks.Count(t => t.Status == Model.TaskStatus.Failed),
|
FailedTasks = tasks.Count(t => t.Status == TaskStatus.Failed),
|
||||||
ExpiredTasks = tasks.Count(t => t.Status == Model.TaskStatus.Expired),
|
ExpiredTasks = tasks.Count(t => t.Status == TaskStatus.Expired),
|
||||||
TotalUploadedBytes = tasks.Sum(t => (long)t.ChunksUploaded * t.ChunkSize),
|
TotalUploadedBytes = tasks.Sum(t => t.ChunksUploaded * t.ChunkSize),
|
||||||
AverageProgress = tasks.Any(t => t.Status == Model.TaskStatus.InProgress)
|
AverageProgress = tasks.Any(t => t.Status == TaskStatus.InProgress)
|
||||||
? tasks.Where(t => t.Status == Model.TaskStatus.InProgress)
|
? tasks.Where(t => t.Status == TaskStatus.InProgress)
|
||||||
.Average(t => t.ChunksCount > 0 ? (double)t.ChunksUploaded / t.ChunksCount * 100 : 0)
|
.Average(t => t.ChunksCount > 0 ? (double)t.ChunksUploaded / t.ChunksCount * 100 : 0)
|
||||||
: 0,
|
: 0,
|
||||||
RecentActivity = tasks.OrderByDescending(t => t.LastActivity)
|
RecentActivity = tasks.OrderByDescending(t => t.LastActivity)
|
||||||
|
|||||||
Reference in New Issue
Block a user