Closed
Conversation
… on threads of TickerQ
…k merge between branches
* Fixed the scheduler background to Task.Delay since the Peridic Timer were skipping ticks on short interval with seconds. * small refactor * fixed the mixd up delete ticker
* Made improvements and new feature: request by default not using GZIP compression * Added timezone dashboard support and other fix on features. * Fixed the seefing data
* Added some new features on dashboard and on demand running directly without giving pressure of background scheduler * Added dispatch interfaces * added pagination on machine names * Added test coverage * added examples * Added sample sqlite for samples * Added csproj fules for Sample data * fixed the locking of immediate run ticker in safe for runcondition * fiexed indexing, the scheduler on high run and memory persistence * fixed dashboard path merge * small fixes on manager * Added migration changes for examples
* Fix schema assignment logic in UseTickerQDbContext and add SetSchema method * Refactor UseTickerQDbContext to simplify schema assignment logic
* Checkpoint from VS Code for coding agent session * Remove documentation on separating job queueing from job processing
* Add retry logic improvements and unit tests for ExecuteTaskAsync * Refactor retry test setup to use SetupRetryTestFixture for consistency
…crementalSourceGenerator (#433)
* Add per-function concurrency control via maxConcurrency attribute parameter (#458) Adds a `maxConcurrency` parameter to `[TickerFunction]` that limits how many instances of a specific function can execute concurrently. When set to 0 (default), concurrency is unlimited (preserving backward compatibility). The limit is enforced via a per-function SemaphoreSlim in the dispatcher, queuing excess work instead of skipping it. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add tests for per-function concurrency gate and dispatcher concurrency behavior Tests cover: - ConcurrencyGate: null for unlimited, semaphore creation, caching, independence - Dispatcher: semaphore acquire/release, release on exception, independent semaphores per function, serialized execution with maxConcurrency=1 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Apply concurrency gate to all QueueAsync call sites Previously only TickerQDispatcher and FallbackBackgroundService used the concurrency gate. This adds it to TickerQSchedulerBackgroundService (the main scheduler loop) and SdkExecutionEndpoint (SDK remote execution). Also moves ITickerFunctionConcurrencyGate to TickerQ.Utilities so the SDK project can resolve it from DI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add scheduler concurrency gate integration tests Verify that TickerQSchedulerBackgroundService correctly uses the concurrency gate when queuing tasks: semaphore acquire/release on success, release on exception, and no semaphore for unlimited functions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Centralize test project versions via Directory.Build.props Replace hardcoded TargetFramework and package versions in test projects with MSBuild variables (DotNetVersion), matching the pattern used by src projects. This ensures version compatibility when backporting to v8/v9. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add EntityFrameworkCore test project to PR workflow The pr.yaml workflow only built and ran TickerQ.Tests. Added TickerQ.EntityFrameworkCore.Tests to both the build and test steps. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix design-time DbContext tests failing due to EF Core GetService throw EF Core's GetService<T>() extension throws InvalidOperationException when the service is unresolvable, so the null-conditional (?.) from #652 never executes. Use try-catch to fall back to DefaultSchema. Also add EnableServiceProviderCaching(false) to prevent model cache pollution across tests with the same DbContext type. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Fix AddStackExchangeRedis overriding EF Core persistence provider (#669) Change Redis persistence registration to TryAddSingleton so EF Core's AddSingleton takes precedence regardless of registration order. Move in-memory provider registration after external providers as a TryAddSingleton fallback. Add dedicated Redis test project with registration precedence tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add functional tests for persistence provider CRUD via managers and DI Exercise ITimeTickerManager, ICronTickerManager, and ITickerPersistenceProvider end-to-end through in-memory, EF Core, and EF Core + Redis configurations. Add InternalsVisibleTo for the new test project. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add concurrency and locking tests for persistence providers Test lock acquisition, optimistic concurrency, dead node recovery, concurrent multi-node access, cron occurrence locking, and per-function concurrency gate (serialized/parallel execution, exception safety). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Use atomic Lua scripts for Redis acquire/release/recovery operations Replace all non-atomic read-check-write patterns with Redis Lua scripts that execute atomically (single-threaded), eliminating TOCTOU race conditions in multi-node deployments. This brings Redis provider parity with EF Core's atomic ExecuteUpdateAsync + WHERE clause guarantees. Three Lua scripts: AcquireScript (status/holder/updatedAt check + lock), ReleaseScript (status/holder check + unlock), RecoverDeadNodeScript (dead node holder match + reset to Idle). 10 methods updated: QueueTimeTickers, QueueTimedOutTimeTickers, AcquireImmediateTimeTickersAsync, ReleaseAcquiredTimeTickers, ReleaseDeadNodeTimeTickerResources, QueueCronTickerOccurrences, QueueTimedOutCronTickerOccurrences, AcquireImmediateCronOccurrencesAsync, ReleaseAcquiredCronTickerOccurrences, ReleaseDeadNodeOccurrenceResources. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
… reference (#680) - Changed Redis registration test to check service descriptor instead of resolving the provider, which triggered a real Redis connection and failed in CI environments without Redis. - Removed redundant Microsoft.Extensions.Hosting.Abstractions package reference from TickerQ.csproj — it's already a transitive dependency from TickerQ.Utilities, and the explicit lower-bound reference caused NU1605 package downgrade errors. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…le bug (#683) - Date format now adapts to selected timezone: EU (dd/MM/yyyy), US (MM/dd/yyyy), ISO (yyyy-MM-dd) - Applied timezone-aware formatting to all date displays including tables, graphs, and date picker - Fixed cron ticker enable/disable dialog showing inverted text - Fixed Redis persistence not filtering disabled cron tickers in GetAllCronTickerExpressions Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Simplify EF Core DbContext session pattern and remove dead validation - Remove dead originalDescriptor lookup and throw in UseApplicationDbContext (the variable was unused after PR #590 switched to IDbContextOptionsConfiguration) - Replace ITickerDbContextFactory/ITickerDbContextSession interfaces with a simpler DbContextLease struct that handles both IDbContextFactory and scoped DbContext resolution - Remove ITickerDbContextFactory DI registration — BasePersistenceProvider now takes IServiceProvider directly and creates leases via helper methods - Addresses feedback from @jods4 on PR #590 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update EF Core tests to use IServiceProvider instead of removed ITickerDbContextFactory Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…#691) Tests cover factory path, scoped path, pooled factory, precedence, instance isolation, dispose behavior, change tracking isolation, and error cases when no DbContext is registered. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Includes 6 comparison benchmarks (cron parsing, job creation, serialization, startup registration, delegate invocation, concurrent throughput) plus 7 internal TickerQ micro-benchmarks. All runnable via `dotnet run -c Release`. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
) * Register scoped DbContext from factory for direct injection (#700) UseTickerQDbContext only registered IDbContextFactory<TContext> but not TContext itself, preventing users from injecting the DbContext directly. Add a scoped registration that creates instances from the factory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * new fix on db context scope create, release: 10.2.1 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…er (#709) * Restructure hub projects: move RemoteExecutor and SDKs into hub/ folder - Move TickerQ.RemoteExecutor to hub/remoteExecutor/ - Move TickerQ.SDK (.NET) to hub/sdks/dotnet/ - Add TickerQ Node.js SDK to hub/sdks/node/ with full source, README, and LICENSE - Add hub/Directory.Build.props with corrected icon.jpg path for NuGet packaging - Add .gitignore for Node.js SDK - Update src.sln project references to new paths Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix TickerQ.slnx project paths for hub restructuring Update RemoteExecutor and SDK paths in root slnx to match the new hub/ folder structure, fixing CI build and test failures. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix build.yml project paths for hub restructuring Update SDK and RemoteExecutor build/pack paths from src/ to hub/ to match the new folder structure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Add CLA.md with copyright/patent license grants for contributors - Add CONTRIBUTING.md with development setup and contribution process - Add GitHub Actions CLA workflow using contributor-assistant/github-action - Allowlist dependabot, github-actions, and renovate bots Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ection Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Update LICENSE, CLA.md, README.md to reference Arcenox LLC - Add Authors and Copyright tags to Directory.Build.props - Clean trailing whitespace in LICENSE Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace cherry-pick workflow with merge-based sync (handles renames/deletions naturally) - Add .sync-overrides config for generic version replacement rules - Apply version overrides from config instead of hardcoded sed commands - Post PR comment with sync details (restored files + version overrides applied) - Auto-resolve conflicts: excluded files keep target, everything else takes main Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
# Conflicts: # .github/workflows/sync-version-branches.yml # .sync-exclude # TickerQ.sln # hub/remoteExecutor/TickerQ.RemoteExecutor/TickerQ.RemoteExecutor.csproj # hub/sdks/dotnet/TickerQ.SDK/TickerQ.SDK.csproj # samples/TickerQ.Sample.ApplicationDbContext/TickerQ.Sample.ApplicationDbContext.csproj # samples/TickerQ.Sample.Console/TickerQ.Sample.Console.csproj # samples/TickerQ.Sample.Dashboard.ReflectionFree/TickerQ.Sample.Dashboard.ReflectionFree.csproj # samples/TickerQ.Sample.WebApi/TickerQ.Sample.WebApi.csproj # samples/TickerQ.Sample.WorkerService/TickerQ.Sample.WorkerService.csproj # src/Directory.Build.props # src/TickerQ.Dashboard/TickerQ.Dashboard.csproj # src/TickerQ.EntityFrameworkCore/Customizer/CustomizerServiceDescriptor.cs # src/TickerQ.EntityFrameworkCore/Infrastructure/BasePersistenceProvider.cs # src/TickerQ.EntityFrameworkCore/Infrastructure/MappingExtensions.cs # src/TickerQ.EntityFrameworkCore/Properties/InternalsVisibleTo.cs # src/TickerQ.EntityFrameworkCore/TickerQ.EntityFrameworkCore.csproj # src/TickerQ.Instrumentation.OpenTelemetry/TickerQ.Instrumentation.OpenTelemetry.csproj # src/TickerQ.Utilities/TickerQ.Utilities.csproj # tests/Directory.Build.props # tests/TickerQ.EntityFrameworkCore.Tests/TickerQ.EntityFrameworkCore.Tests.csproj # tests/TickerQ.Tests/TickerQ.Tests.csproj
Collaborator
Author
Sync DetailsExcluded files restored from
|
Collaborator
Author
|
Closing — .sync-overrides was missing when this sync ran. Will re-trigger after merging #744. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated Branch Sync
This PR merges recent changes from
mainintonet8.Created automatically by branch sync workflow