Browse Source

fix(tasks): Stop job scheduling when deleting a job

pull/1178/head
colin 10 months ago
parent
commit
6710519fab
  1. 10
      aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobDeleteEventData.cs
  2. 19
      aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobSynchronizer.cs
  3. 8
      aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/en.json
  4. 8
      aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/zh-Hans.json
  5. 23
      aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain/LINGYUN/Abp/TaskManagement/BackgroundJobManager.cs

10
aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobDeleteEventData.cs

@ -0,0 +1,10 @@
using System;
using Volo.Abp.EventBus;
namespace LINGYUN.Abp.BackgroundTasks.EventBus;
[Serializable]
[EventName("abp.background-tasks.job.delete")]
public class JobDeleteEventData : JobEventData
{
}

19
aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.EventBus/LINGYUN/Abp/BackgroundTasks/EventBus/JobSynchronizer.cs

@ -10,6 +10,7 @@ public class JobSynchronizer :
IDistributedEventHandler<JobTriggerEventData>,
IDistributedEventHandler<JobPauseEventData>,
IDistributedEventHandler<JobResumeEventData>,
IDistributedEventHandler<JobDeleteEventData>,
ITransientDependency
{
protected IJobStore JobStore { get; }
@ -115,4 +116,22 @@ public class JobSynchronizer :
}
}
}
public async virtual Task HandleEventAsync(JobDeleteEventData eventData)
{
if (string.Equals(eventData.NodeName, BackgroundTasksOptions.NodeName))
{
foreach (var jobId in eventData.IdList)
{
var jobInfo = await JobStore.FindAsync(jobId);
if (jobInfo == null)
{
continue;
}
await JobScheduler.RemoveAsync(jobInfo);
}
}
}
}

8
aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/en.json

@ -21,6 +21,7 @@
"DisplayName:Group": "Group",
"DisplayName:Name": "Name",
"DisplayName:Description": "Description",
"DisplayName:NodeName": "Node Name",
"DisplayName:Type": "Type",
"Description:Type": "Type of job implementer, format: type full name, assembly, example: System.String, mscorlib",
"DisplayName:Status": "Status",
@ -88,6 +89,11 @@
"BackgroundJobs:Copy": "Copy Jobs",
"BasicInfo": "Basic",
"Paramters": "Paramters",
"MultipleSelectJobsWillBeDeletedMessage": "Multiple jobs selected will be deleted!"
"MultipleSelectJobsWillBeDeletedMessage": "Multiple jobs selected will be deleted!",
"SelectJobWillBePauseMessage": "The selected job will be paused!",
"SelectJobWillBeResumeMessage": "The selected job will be resumed!",
"SelectJobWillBeTriggerMessage": "The selected job will be trigger!",
"SelectJobWillBeStartMessage": "The selected job will be started!",
"SelectJobWillBeStopMessage": "The selected job will be stopped!"
}
}

8
aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain.Shared/LINGYUN/Abp/TaskManagement/Localization/Resources/zh-Hans.json

@ -21,6 +21,7 @@
"DisplayName:Group": "分组",
"DisplayName:Name": "名称",
"DisplayName:Description": "描述",
"DisplayName:NodeName": "运行节点",
"DisplayName:Type": "类型",
"Description:Type": "作业实现者的类型,格式: 类型全名, 程序集名称, 示例: System.String, mscorlib",
"DisplayName:Status": "状态",
@ -88,6 +89,11 @@
"BackgroundJobs:Copy": "复制作业",
"BasicInfo": "基本信息",
"Paramters": "参数列表",
"MultipleSelectJobsWillBeDeletedMessage": "选择的多个作业将被删除!"
"MultipleSelectJobsWillBeDeletedMessage": "选择的多个作业将被删除!",
"SelectJobWillBePauseMessage": "选择的作业将被暂停!",
"SelectJobWillBeResumeMessage": "选择的作业将被重启!",
"SelectJobWillBeTriggerMessage": "选择的作业将被触发!",
"SelectJobWillBeStartMessage": "选择的作业将被启动!",
"SelectJobWillBeStopMessage": "选择的作业将被停止!"
}
}

23
aspnet-core/modules/task-management/LINGYUN.Abp.TaskManagement.Domain/LINGYUN/Abp/TaskManagement/BackgroundJobManager.cs

@ -2,6 +2,7 @@
using LINGYUN.Abp.BackgroundTasks.EventBus;
using System.Collections.Generic;
using System.Linq;
using System.Runtime;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
using Volo.Abp.EventBus.Distributed;
@ -70,11 +71,33 @@ public class BackgroundJobManager : DomainService
public async virtual Task DeleteAsync(BackgroundJobInfo jobInfo)
{
await BackgroundJobInfoRepository.DeleteAsync(jobInfo);
UnitOfWorkManager.Current.OnCompleted(async () =>
{
await EventBus.PublishAsync(
new JobDeleteEventData
{
IdList = new List<string> { jobInfo.Id },
TenantId = jobInfo.TenantId,
NodeName = jobInfo.NodeName
});
});
}
public async virtual Task BulkDeleteAsync(IEnumerable<BackgroundJobInfo> jobInfos)
{
await BackgroundJobInfoRepository.DeleteManyAsync(jobInfos);
UnitOfWorkManager.Current.OnCompleted(async () =>
{
await EventBus.PublishAsync(
new JobDeleteEventData
{
IdList = jobInfos.Select(x => x.Id).ToList(),
TenantId = jobInfos.Select(x => x.TenantId).First(),
NodeName = jobInfos.Select(x => x.NodeName).First()
});
});
}
public async virtual Task QueueAsync(BackgroundJobInfo jobInfo)

Loading…
Cancel
Save