Upgrade packages for reset cache

This commit is contained in:
Behzad Alizadeh
2026-04-26 20:10:53 +03:30
parent 4abfe079db
commit d1c0b06ec6
4 changed files with 183 additions and 54 deletions
@@ -5,7 +5,7 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<PackageId>Caspian.WorkflowFramework</PackageId> <PackageId>Caspian.WorkflowFramework</PackageId>
<Version>1.1.0-preview.17</Version> <Version>1.1.0-preview.18</Version>
<Authors>Behzad Alizadeh</Authors> <Authors>Behzad Alizadeh</Authors>
<Company>Caspian</Company> <Company>Caspian</Company>
<Product>Caspian.WorkflowFramework</Product> <Product>Caspian.WorkflowFramework</Product>
@@ -20,55 +20,55 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Caspian.Elsa.WorkflowContexts" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.WorkflowContexts" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Workflows.Runtime.Distributed" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Workflows.Runtime.Distributed" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Alterations" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Alterations" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Alterations.MassTransit" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Alterations.MassTransit" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Caching.Distributed.MassTransit" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Caching.Distributed.MassTransit" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Caching.Distributed.ProtoActor" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Caching.Distributed.ProtoActor" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.CSharp" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.CSharp" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Dapper" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Dapper" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Dapper.Migrations" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Dapper.Migrations" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.DropIns" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.DropIns" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Email" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Email" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Elasticsearch" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Elasticsearch" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Environments" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Environments" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.EntityFrameworkCore" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.EntityFrameworkCore" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.EntityFrameworkCore.MySql" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.EntityFrameworkCore.MySql" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.EntityFrameworkCore.Oracle" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.EntityFrameworkCore.Oracle" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.EntityFrameworkCore.PostgreSql" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.EntityFrameworkCore.PostgreSql" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.EntityFrameworkCore.Sqlite" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.EntityFrameworkCore.Sqlite" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.EntityFrameworkCore.SqlServer" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.EntityFrameworkCore.SqlServer" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.FileStorage" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.FileStorage" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Hangfire" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Hangfire" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Http" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Http" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Identity" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Identity" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Kafka" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Kafka" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Labels" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Labels" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Liquid" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Liquid" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.MassTransit" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.MassTransit" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.MassTransit.AzureServiceBus" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.MassTransit.AzureServiceBus" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.MassTransit.RabbitMq" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.MassTransit.RabbitMq" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.MongoDb" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.MongoDb" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.OpenTelemetry" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.OpenTelemetry" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Quartz" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Quartz" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Quartz.EntityFrameworkCore.MySql" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Quartz.EntityFrameworkCore.MySql" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Quartz.EntityFrameworkCore.PostgreSql" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Quartz.EntityFrameworkCore.PostgreSql" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Quartz.EntityFrameworkCore.Sqlite" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Quartz.EntityFrameworkCore.Sqlite" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Retention" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Retention" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Secrets.Api" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Secrets.Api" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.PostgreSql" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.Sqlite" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Secrets.Persistence.EntityFrameworkCore.SqlServer" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Secrets.Scripting" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Secrets.Scripting" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Sql.MySql" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Sql.MySql" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Sql.PostgreSql" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Sql.PostgreSql" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Sql.Sqlite" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Sql.Sqlite" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Sql.SqlServer" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Sql.SqlServer" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Sql" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Sql" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Tenants.AspNetCore" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Tenants.AspNetCore" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa.Webhooks" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa.Webhooks" Version="1.1.0-preview.5" />
<PackageReference Include="Caspian.Elsa" Version="1.1.0-preview.4" /> <PackageReference Include="Caspian.Elsa" Version="1.1.0-preview.5" />
<PackageReference Include="JetBrains.Annotations" Version="2024.3.0" /> <PackageReference Include="JetBrains.Annotations" Version="2024.3.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.3.0" /> <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.3.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.7" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.7" />
@@ -48,5 +48,15 @@ namespace Caspian.WorkflowFramework.Contracts
/// Cancels the specified workflow instance. /// Cancels the specified workflow instance.
/// </summary> /// </summary>
Task<WorkflowResponse<dynamic>> CancelInstanceAsync(CancelWorkflowInstanceModel input); Task<WorkflowResponse<dynamic>> CancelInstanceAsync(CancelWorkflowInstanceModel input);
/// <summary>
/// Cancels the specified workflow instance.
/// </summary>
Task<WorkflowResponse<dynamic>> ForceCancelInstanceAsync(CancelWorkflowInstanceModel input);
/// <summary>
/// Evicts a workflow definition from cache (optional, commented out in service).
/// </summary>
Task EvictDefFromCacheAsync(string name, CancellationToken cancellationToken = default);
} }
} }
@@ -1,7 +1,4 @@
using System.Diagnostics; using Caspian.WorkflowFramework.Contracts;
using System.Dynamic;
using System.Text.Json;
using Caspian.WorkflowFramework.Contracts;
using Caspian.WorkflowFramework.Models; using Caspian.WorkflowFramework.Models;
using Caspian.WorkflowFramework.Utility; using Caspian.WorkflowFramework.Utility;
using Elsa.Common.Entities; using Elsa.Common.Entities;
@@ -11,11 +8,15 @@ using Elsa.Workflows.Management;
using Elsa.Workflows.Management.Filters; using Elsa.Workflows.Management.Filters;
using Elsa.Workflows.Models; using Elsa.Workflows.Models;
using Elsa.Workflows.Runtime; using Elsa.Workflows.Runtime;
using Elsa.Workflows.Runtime.Filters;
using Elsa.Workflows.Runtime.Messages; using Elsa.Workflows.Runtime.Messages;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Converters; using Newtonsoft.Json.Converters;
using San.MongoLogger; using San.MongoLogger;
using System.Diagnostics;
using System.Dynamic;
using System.Text.Json;
namespace Caspian.WorkflowFramework.Services; namespace Caspian.WorkflowFramework.Services;
public class WorkflowService : IWorkflowService, ILoggable public class WorkflowService : IWorkflowService, ILoggable
@@ -29,6 +30,8 @@ public class WorkflowService : IWorkflowService, ILoggable
private readonly IWorkflowInstanceStore _workflowInstanceStore; private readonly IWorkflowInstanceStore _workflowInstanceStore;
private readonly IEventPublisher _eventPublisher; private readonly IEventPublisher _eventPublisher;
private readonly IWorkflowDefinitionCacheManager _workflowDefinitionCacheManager; private readonly IWorkflowDefinitionCacheManager _workflowDefinitionCacheManager;
private readonly IBookmarkStore _bookmarkStore;
private readonly IActivityExecutionStore _activityExecutionStore;
private readonly IMdbLogger<WorkflowService> _logger; private readonly IMdbLogger<WorkflowService> _logger;
#endregion #endregion
@@ -43,6 +46,8 @@ public class WorkflowService : IWorkflowService, ILoggable
_workflowInstanceManager = _serviceProvider.GetRequiredService<IWorkflowInstanceManager>(); _workflowInstanceManager = _serviceProvider.GetRequiredService<IWorkflowInstanceManager>();
_workflowInstanceStore = _serviceProvider.GetRequiredService<IWorkflowInstanceStore>(); _workflowInstanceStore = _serviceProvider.GetRequiredService<IWorkflowInstanceStore>();
_eventPublisher = _serviceProvider.GetRequiredService<IEventPublisher>(); _eventPublisher = _serviceProvider.GetRequiredService<IEventPublisher>();
_bookmarkStore = _serviceProvider.GetRequiredService<IBookmarkStore>();
_activityExecutionStore = _serviceProvider.GetRequiredService<IActivityExecutionStore>();
_logger = logger; _logger = logger;
} }
#endregion #endregion
@@ -724,4 +729,117 @@ public class WorkflowService : IWorkflowService, ILoggable
} }
} }
#endregion #endregion
#region ForceCancelInstanceAsync
public async Task<WorkflowResponse<dynamic>> ForceCancelInstanceAsync(CancelWorkflowInstanceModel input)
{
var sw = Stopwatch.StartNew();
try
{
_logger.Log("Start ForceCancelInstanceAsync", WFInstanceId: input.WorkflowInstanceId, input);
var instance = await _workflowInstanceManager.FindByIdAsync(input.WorkflowInstanceId);
if (instance == null)
return new WorkflowResponse<dynamic> { Status = 1, Message = "Instance not found", Data = false };
// جلوگری از Resume شدن دوباره
instance.Status = WorkflowStatus.Finished;
instance.SubStatus = WorkflowSubStatus.Cancelled;
// پاک‌سازی bookmarks از دیتابیس واقعی
var bookmarkFilter = new BookmarkFilter()
{
WorkflowInstanceId = input.WorkflowInstanceId
};
await _bookmarkStore.DeleteAsync(bookmarkFilter);
// پاک‌سازی scheduled activities (در صورتی که runtime distributed باشد)
var activityFilter = new ActivityExecutionRecordFilter()
{
WorkflowInstanceId = input.WorkflowInstanceId
};
await _activityExecutionStore.DeleteManyAsync(activityFilter);
//// پاک‌سازی incidents (در پروژه‌های بزرگ ضروری است)
//await _incidentStore.DeleteManyAsync(
// x => x.WorkflowInstanceId == input.WorkflowInstanceId
//);
// ذخیره instance تغییر یافته
await _workflowInstanceManager.SaveAsync(instance);
sw.Stop();
var response = new WorkflowResponse<dynamic>
{
Status = 0,
Message = "Force cancel completed",
Data = true
};
_logger.Log("End ForceCancelInstanceAsync", WFInstanceId: instance.Id, response, sw.ElapsedMilliseconds);
return response;
}
catch (Exception ex)
{
sw.Stop();
var response = new WorkflowResponse<dynamic>
{
Status = 100,
Message = ex.Message,
Data = false
};
_logger.Log("Exception in ForceCancelInstanceAsync", WFInstanceId: input.WorkflowInstanceId, response, sw.ElapsedMilliseconds, ex);
return response;
}
}
#endregion
#region EvictDefFromCacheAsync
/// <inheritdoc />
public async Task EvictDefFromCacheAsync(string name, CancellationToken cancellationToken = default)
{
var sw = Stopwatch.StartNew();
try
{
_logger.Log("Start of EvictDefFromCacheAsync", name);
var defFilter = new WorkflowDefinitionFilter()
{
Name = name,
VersionOptions = VersionOptions.Published
};
var definition = await _workflowDefinitionService
.FindWorkflowDefinitionAsync(defFilter);
await _workflowDefinitionCacheManager.EvictWorkflowDefinitionAsync(definition.DefinitionId);
var workflowDefinitionFilter = new WorkflowDefinitionFilter()
{
DefinitionHandle = WorkflowDefinitionHandle.ByDefinitionId(definition.DefinitionId, VersionOptions.Published)
};
var createWorkflowDefinitionFilterCacheKey = _workflowDefinitionCacheManager.CreateWorkflowDefinitionFilterCacheKey(workflowDefinitionFilter);
_workflowDefinitionCacheManager.Cache.Remove(createWorkflowDefinitionFilterCacheKey);
var createWorkflowFilterCacheKey = _workflowDefinitionCacheManager.CreateWorkflowFilterCacheKey(workflowDefinitionFilter);
_workflowDefinitionCacheManager.Cache.Remove(createWorkflowFilterCacheKey);
}
finally
{
sw.Stop();
_logger.Log("End of EvictDefFromCacheAsync", name, sw.ElapsedMilliseconds, null);
}
}
#endregion
} }
+1
View File
@@ -9,5 +9,6 @@
<add key="Local Package source" value="D:\MyNugetPackages" /> <add key="Local Package source" value="D:\MyNugetPackages" />
<add key="Workflow Package source" value="D:\NugetPackageRepository\WorkflowPackages" /> <add key="Workflow Package source" value="D:\NugetPackageRepository\WorkflowPackages" />
<add key="Caspian package source" value="https://nuget.caspian.com/v3/index.json" /> <add key="Caspian package source" value="https://nuget.caspian.com/v3/index.json" />
<add key="Liara Package source" value="D:\CaspianProjects\NugetPackageRepositoryLiara\AllPackages" />
</packageSources> </packageSources>
</configuration> </configuration>