Sparkdo.Scheduler 2.0.0-preview.2

This is a prerelease version of Sparkdo.Scheduler.
dotnet add package Sparkdo.Scheduler --version 2.0.0-preview.2
                    
NuGet\Install-Package Sparkdo.Scheduler -Version 2.0.0-preview.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Sparkdo.Scheduler" Version="2.0.0-preview.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Sparkdo.Scheduler" Version="2.0.0-preview.2" />
                    
Directory.Packages.props
<PackageReference Include="Sparkdo.Scheduler" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Sparkdo.Scheduler --version 2.0.0-preview.2
                    
#r "nuget: Sparkdo.Scheduler, 2.0.0-preview.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Sparkdo.Scheduler@2.0.0-preview.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Sparkdo.Scheduler&version=2.0.0-preview.2&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Sparkdo.Scheduler&version=2.0.0-preview.2&prerelease
                    
Install as a Cake Tool

Sparkdo.Scheduler

Sparkdo.Scheduler 是默认 runtime 包。当前已包含 SchedulerJobCatalog runtime catalog seam、DefaultScheduler direct enqueue / direct enqueue sharding / schedule once / schedule cron / manual trigger / cancel 路径、显式单轮 ExecutionRunner、descriptor-aware payload serializer seam、默认 JSON payload codec、默认 in-memory provider、异步 store 端口实现、executor placement claim evaluator、event retention cleanup、trace context snapshot、occurrence 去重、lease renew / stale recovery、startup gate、trigger runner 单轮执行、health/report/diagnostic snapshot、report schema compatibility、options provenance report、clock drift / SLO / runbook report evidence、默认 redaction、Sparkdo.Runtime.Instrumentation bridge、management query/command 最小面和 package asset handoff 的最小闭环。

Instrumentation/ 只保存 Scheduler signal taxonomy 和 runtime adapter bridge;Scheduler 只负责发 signal 和 metadata,不拥有观测后端。真正的 Activity、Meter、recorder、OpenTelemetry exporter、source filter 和 no-op 路径都属于 src/instrumentation,Scheduler 只通过 Sparkdo.Runtime.Instrumentation 把信号接过去。

默认 runtime DI 由 SparkdoSchedulerManifest 声明:默认 in-memory store 端口、SchedulerJobCatalogJsonJobPayloadSerializerSchedulerRuntimeStateIScheduler、显式 ExecutionRunnerSchedulerWorkerOptions、singleton SchedulerWorker,以及 SchedulerWorkerStartupTask / SchedulerWorkerShutdownTask lifecycle entry。Sparkdo.Scheduler.Compiler 在 Application role 生成 SparkdoSchedulerGeneratedContributionsSparkdoSchedulerBootstrapContribution;Polaris generated bootstrap 根据 Manifest 的 application-bootstrap-contribution extension 应用该 contribution,并以 TryAddEnumerable(...) 注册 IJobContributionProvider。默认 in-memory store 端口保持 scoped,但共享 singleton InMemorySchedulerState,因此不同 DI scope 中的 enqueue、runner 和 worker 能看到同一份单进程状态。Generic Host 入口是 Host.CreateDefaultBuilder(args).AddSparkdo();应用可通过 Configure<SchedulerWorkerOptions>(options => options.Enabled = false) 关闭后台循环。后续 provider 包应替换 IExecutionQueueIScheduleStoreIExecutorStoreIHistoryStoreIShardStoreISchedulerStoreDiagnostics,不替换整个 Scheduler runtime。

内部结构

目录 内容
Catalog/ IJobContributionProvider 构建的 SchedulerJobCatalog runtime seam;runner、payload serializer、runtime report 共用它,不重复解释 generated job facts。
Diagnostics/ SchedulerRuntimeSnapshotProviderSchedulerDiagnosticSnapshot,用于读取当前 runtime health/report 快照。
Execution/ DefaultScheduler 的 direct enqueue、显式 ExecutionRunner、runner options/result/outcome。
Health/ health severity、queue lag、provider feature、runbook id 和 scheduler health summary。
Runners/ package-default SchedulerWorker、startup/shutdown lifecycle task、worker options、iteration result、lifecycle evidence state 和 AddSchedulerWorker(...) host-visible helper。
Scheduling/ trigger runner 单轮调度入口。
Reports/ ecosystem evidence、job catalog、report schema、Manifest/runtime defaults evidence、options validation/provenance report、event retention report、clock drift audit、SLO burn rate、runbook catalog 和 generated contribution summary。
Stores/ 默认 in-memory provider、direct enqueue sharding execution、异步 store 端口实现、executor placement claim evaluator、共享状态、execution / schedule / executor / shard record。
Instrumentation/ runtime-local operation/outcome/tag 模型、低基数 tag policy 和 Sparkdo.Runtime.Instrumentation bridge;不拥有 Activity/Meter/recorder dispatcher 或任何观测后端。
Tracing/ trace context policy evaluator、allow-list header 过滤、低敏 trace snapshot 和 redrive lineage helper;不拥有 Activity/Meter/recorder dispatcher。
Management/Queries/ runtime-local management query service,返回 execution/schedule query result 和 strong query consistency。
Management/Commands/ runtime-local management command service,支持 pause/resume schedule、pause/resume queue、redrive dead-letter、force cancel 和 internal policy dry-run。
Management/Results/ runtime-local command target/request hash helper、idempotency evidence 和 internal policy/budget/cost dry-run report。
Infrastructure/ id 生成、startup gate 和 DI runtime state。
Serialization/ descriptor-aware payload serializer seam、默认 JSON payload serializer 和显式 in-memory override。
Manifest/ SparkdoSchedulerManifest 的 options、default services、worker lifecycle 与 application bootstrap contribution 声明。

阶段 07 / 15 / 17 / 18 / 19 / 20 / 26 / 28 新增目录按 src/scheduler/docs/observability-management-map.md 执行。当前 07B 已实现 Health/Reports/Diagnostics/ 的只读 runtime snapshot;07C 已实现 Instrumentation/ taxonomy 和默认 diagnostic redaction;15 已将 runtime signal 通过 Sparkdo.Runtime.Instrumentation 接入 src/instrumentation,Activity/Meter/recorder dispatcher 与 OpenTelemetry 注册仍属于 src/instrumentation;18 已补边界测试,防止 Scheduler 生产代码重写 Activity/Meter/OpenTelemetry/recorder/source filter;20 已将 Scheduler runtime signal 收束为调用 SparkdoInstrumentationMetadata.RuntimeAdapter(...) 通用 factory,不手写 RuntimeAdapter metadata。Scheduler 不维护任何自有 observability sink、recorder dispatcher 或 exporter。07D 已实现 Management/QueriesManagement/CommandsManagement/Results 的最小 runtime surface。阶段 13 在 Reports/ 中补齐 OptionsValidationReportConfigurationProvenance,阶段 16 在 Reports/ 中补齐 EventRetentionReport,阶段 17 在 Reports/ 中补齐 TraceContextReport,阶段 19 在 Reports/ 中补齐 ReportSchemaCompatibility,阶段 26 在 Reports/ / Health/ 中补齐 ClockDriftAuditOperationalSloBurnRateRunbookCatalog,阶段 28 在 Reports/ 中补齐 SchedulerEcosystemEvidence,用于把 package onboarding、generated contribution、runtime catalog、runtime state 和 worker activation 边界汇成一个审计入口。它们都用于 report evidence,不是 job authoring API。后续仍必须分开维护,不把 health/report/instrumentation signal/management/tracing 类型合并到一个大文件。

Cron occurrence 由 Sparkdo.Crontab 计算,当前只支持 fixed-offset / UTC 语义;CronOptionsSnapshot.TimeZoneId 显式传入时会 fail closed,后续再接入 time zone provider。

Abstractions/Stores 中的 store port 是正式 provider SPI,所有端口必须异步并接收 CancellationTokenIHistoryStore.CleanupAsync(...) 使用 bounded request/result 表达 retention cleanup,不要求 provider 一次删除全部 history,也不暴露 provider row。Abstractions/Placement 中的 placement contract 进入 IExecutionQueue.ClaimAsync(...) 边界,用于解释 accepted / rejected placement decision。Sparkdo.Scheduler 中的 InMemory* 类型是默认 provider implementation:它们可以被 generated DI 构造,也可以被外部 provider 通过 tryAdd 覆盖;其内部状态、row 和同步锁不是公共契约。SchedulerRuntimeSnapshotProvider、management service、trigger runner 和 DefaultScheduler 都通过 store 端口工作,不再直接穿透到内存 state。

Package Assets

Sparkdo.Scheduler nupkg 预期携带:

  • lib/net10.0/Sparkdo.Scheduler.dll
  • analyzers/dotnet/cs/Sparkdo.Scheduler.Compiler.dll

Runtime defaults 与 lifecycle 来自包内 typed Manifest;job provider 来自 consumer 编译期生成的 application bootstrap contribution。Compiler 同时生成 JobActivatorJobPayloadCodec delegate,让 ExecutionRunner 在显式 DI job service 缺失时仍能 AOT-safe 创建 job 实例,并通过应用声明的 JsonSerializerContext 做 JSON payload roundtrip;这不是 runtime assembly scanning 或完整 service auto-registration。

SchedulerEcosystemEvidence 使用 typed-manifest-generated-bootstrap 表示 package onboarding,使用 typed-manifest-runtime-defaults 表示默认注册来源。显式 worker lifecycle state 可记录上一轮低敏 outcome、trigger 数、lease recovery 数、cleanup code、executor registration 和 draining evidence。Package smoke 应断言 typed Manifest、generated bootstrap、Host lifecycle 与 runtime defaults 的真实 consumer 行为;未执行的 gate 不写成已通过。

阶段 28 的 public API freeze audit 见 src/scheduler/docs/public-api-freeze-audit.mdSparkdo.Scheduler runtime 后续不能通过新增 report-only / governance-only Abstractions 类型来补设计缺口;policy/budget/cost 已降为 runtime internal evidence,store schema migration proof 已迁到 Sparkdo.Scheduler.Testing conformance,MetricTagPolicy 已降为 runtime-only 固定 report evidence,business calendar 已收束为最小 schedule metadata。sharding planner/aggregator 已迁出 public surface;阶段 31 只用 EnqueueOptions.ShardCount 支持 direct enqueue 的 in-memory single-process sharding execution,不公开 planner / aggregator plugin model。

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Sparkdo.Scheduler:

Package Downloads
Sparkdo.Scheduler.Testing

Sparkdo Scheduler test-only helpers and conformance harness.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.0-preview.2 41 7/20/2026
2.0.0-preview.1 53 7/18/2026