Skip to content

Distributed Background Jobs: Improve distributed background job locking behavior and performance#21100

Merged
nikolajlauridsen merged 10 commits intomainfrom
v17/fix/improve-distributed-jobs
Dec 10, 2025
Merged

Distributed Background Jobs: Improve distributed background job locking behavior and performance#21100
nikolajlauridsen merged 10 commits intomainfrom
v17/fix/improve-distributed-jobs

Conversation

@nikolajlauridsen
Copy link
Contributor

Summary

This PR improves the distributed background job system with better locking behavior and performance optimizations:

  • Prevent picking up already running jobs: Jobs that are currently being executed by another server are no longer picked up, preventing duplicate execution
  • Handle stale/timed-out jobs: Added a configurable MaximumExecutionTime setting (default 5 minutes) to detect and recover from jobs that appear stuck (server crashed during execution)
  • Optimize EnsureJobsAsync: Reduced time spent holding the database lock by batching inserts and deletes, and pre-computing registered job data outside the critical section
  • Add bulk repository operations: New batch Add and Delete methods on IDistributedJobRepository for improved performance
  • Comprehensive test coverage: Added integration tests covering all job lifecycle scenarios

Changes

DistributedJobSettings.cs

  • Added MaximumExecutionTime configuration option (default: 5 minutes)

IDistributedJobRepository.cs

  • Added Add(IEnumerable<DistributedBackgroundJobModel>) for bulk inserts
  • Added Delete(IEnumerable<DistributedBackgroundJobModel>) for bulk deletes
  • Default implementations provided for backwards compatibility (TODO: remove in V18)

DistributedJobRepository.cs

  • Implemented bulk Add using InsertBulk
  • Implemented bulk Delete using WhereIn SQL for efficient deletion

DistributedJobService.cs

  • TryTakeRunnableAsync: Now checks IsRunning flag and only picks up running jobs if they've exceeded Period + MaximumExecutionTime (stale job recovery)
  • EnsureJobsAsync: Optimized to minimize lock hold time:
    • Pre-computes registered job data outside the lock
    • Collects all changes first, then executes batch operations
    • Uses bulk insert/delete instead of individual operations

DistributedJobServiceTests.cs (new)

Integration tests covering:

  • Job is due and not running → returns job
  • Job is not due → returns null
  • Job is running but not timed out → returns null (prevents duplicate execution)
  • Job is running but timed out → returns job (stale recovery)
  • Finish marks job as not running
  • EnsureJobs registers new jobs
  • EnsureJobs removes unregistered jobs
  • EnsureJobs updates job period when changed
  • EnsureJobs is idempotent
  • Boundary condition: job running just before timeout threshold

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings December 9, 2025 12:57
@nikolajlauridsen nikolajlauridsen changed the title Improve distributed background job locking behavior and performance Distributed Background Jobs: Improve distributed background job locking behavior and performance Dec 9, 2025
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR enhances the distributed background job system to prevent duplicate job execution in multi-server scenarios and adds recovery mechanisms for stale jobs. The implementation adds a MaximumExecutionTime configuration setting (default: 5 minutes) to detect timed-out jobs, optimizes the job registration process by batching database operations, and introduces comprehensive integration tests to validate all job lifecycle scenarios.

Key changes:

  • Added stale job recovery logic that allows jobs exceeding their configured timeout to be reclaimed by another server
  • Optimized EnsureJobsAsync to reduce database lock hold time through batch operations and pre-computation
  • Added bulk repository methods to enable efficient batch insertions and deletions

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/DistributedJobServiceTests.cs New comprehensive integration test suite covering job lifecycle, timeout behavior, idempotence, and edge cases
src/Umbraco.Infrastructure/Services/Implement/DistributedJobService.cs Updated job claiming logic to check running status and timeout, optimized EnsureJobsAsync with batching, added new constructor accepting settings
src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DistributedJobRepository.cs Implemented bulk Add and Delete operations using InsertBulk and WhereIn for efficient batch operations
src/Umbraco.Infrastructure/Persistence/Repositories/IDistributedJobRepository.cs Added bulk Add and Delete interface methods with backward-compatible default implementations
src/Umbraco.Infrastructure/BackgroundJobs/DistributedBackgroundJobHostedService.cs Removed unused using statement and cleaned up XML documentation comments
src/Umbraco.Core/Configuration/Models/DistributedJobSettings.cs Added MaximumExecutionTime configuration property with 5-minute default

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copy link
Member

@Zeegaan Zeegaan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks and tests good, just have a few minor nitpicks here and there that aren't mandatory 🙈

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
nikolajlauridsen added a commit to nikolajlauridsen/UmbracoDocs that referenced this pull request Dec 10, 2025
Documents the new MaximumExecutionTime setting that was added in
umbraco/Umbraco-CMS#21100. This setting specifies when a running
distributed job is considered stale and can be recovered by another
server.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@nikolajlauridsen nikolajlauridsen merged commit 8626ae4 into main Dec 10, 2025
25 of 26 checks passed
@nikolajlauridsen nikolajlauridsen deleted the v17/fix/improve-distributed-jobs branch December 10, 2025 10:23
alexsee pushed a commit to alexsee/umbraco-container that referenced this pull request Jan 18, 2026
Updated
[Umbraco.Cms.Persistence.Sqlite](https://github.com/umbraco/Umbraco-CMS)
from 17.0.2 to 17.1.0.

<details>
<summary>Release notes</summary>

_Sourced from [Umbraco.Cms.Persistence.Sqlite's
releases](https://github.com/umbraco/Umbraco-CMS/releases)._

## 17.1.0

# What's Changed Since 17.1.0-rc

### 🐛 Bug Fixes
* Media: Fix files not deleted from disk when recycle bin protection is
enabled by @​AndyButland in
umbraco/Umbraco-CMS#21309
* Document Editing: Refactor of Fix property variation change breaking
document save via Infinite Editing (closes #​21195) by @​nielslyngsoe in
umbraco/Umbraco-CMS#21293
* umbraco/Umbraco-CMS#21306 by @​calm329 in
umbraco/Umbraco-CMS#21306

**Full Changelog**:
umbraco/Umbraco-CMS@release-17.1.0-rc...release-17.1.0

## What's Changed Since the Last Release (17.0.2)

### 📦 Dependencies
* Dependencies: Fixed dependency conflicts when installing
Microsoft.EntityFrameworkCore.Design (closes #​20421) by @​lauraneto in
umbraco/Umbraco-CMS#20474
* Dependencies: Remove `Microsoft.CodeAnalysis.CSharp` dependency from
Umbraco.Infrastructure by @​lauraneto in
umbraco/Umbraco-CMS#20481
* build(deps): bumps @​umbraco-ui/uui from 1.16.0-rc.0 to 1.16.0 by
@​iOvergaard in umbraco/Umbraco-CMS#20535
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Client by
@​dependabot[bot] in umbraco/Umbraco-CMS#20580
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Login by
@​dependabot[bot] in umbraco/Umbraco-CMS#20621
* Bump playwright and @​playwright/test in
/tests/Umbraco.Tests.AcceptanceTest by @​dependabot[bot] in
umbraco/Umbraco-CMS#20579
* Bump the npm_and_yarn group across 2 directories with 1 update by
@​dependabot[bot] in umbraco/Umbraco-CMS#20863
* Dependencies: Updates some dependencies to latest minor or patch
releases by @​AndyButland in
umbraco/Umbraco-CMS#20953
* build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 by @​iOvergaard
in umbraco/Umbraco-CMS#21054

### 🌈 Accessibility Improvements
* Entity Actions: Create button discernible text (fixes #​20205) by
@​OskarKruger in umbraco/Umbraco-CMS#20434
* Entity Actions: More create button discernible text, extension of
#​20434 by @​OskarKruger in
umbraco/Umbraco-CMS#20458
* Header: Adjusted button focus border color contrast by @​MrHutmat in
umbraco/Umbraco-CMS#20562
* Login: Added custom validation for missing password and user/email on
the login form by @​MrHutmat in
umbraco/Umbraco-CMS#20233
* Accessibility: Adding a label attribute for `<uui-button>` in news
dashboard by @​MrHutmat in
umbraco/Umbraco-CMS#20780
* Keyboard navigation: Return to opening element after modal close by
@​MrHutmat in umbraco/Umbraco-CMS#20782

### 🚀 New Features
* Preview: Allows changing the preview environment inside the preview
app, and other UX changes that enhance the experience by @​leekelleher
in umbraco/Umbraco-CMS#20598
* Login: Adds show/hide password toggle by @​MrHutmat in
umbraco/Umbraco-CMS#20611
* Adds Clear Clipboard button & logic by @​warrenbuckley in
umbraco/Umbraco-CMS#20757
* Member types: Implement containers by @​ronaldbarendse in
umbraco/Umbraco-CMS#20706
* Log viewer: Improves search functionality and code quality by
@​iOvergaard in umbraco/Umbraco-CMS#20913
* Log Viewer: Enhances the donut chart to be responsive, link to log
search, and show numbers directly by @​iOvergaard in
umbraco/Umbraco-CMS#20928
* Culture and Hostnames: Add ability to sort hostnames (closes #​20691)
by @​MrHutmat in umbraco/Umbraco-CMS#20826
* Localization: Adds `termOrDefault()` method to accept a fallback value
by @​iOvergaard in umbraco/Umbraco-CMS#20947
* Block Grid: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#20869
* News Dashboard: Adding functionality to overwrite the cache duration
by @​NillasKA in umbraco/Umbraco-CMS#21064
* Block List: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#21060
* Extend RTE output in Delivery API for better support for multi-site
URL resolution by @​MiguelGuedelha in
umbraco/Umbraco-CMS#20846
* Content Types: Introduce schema service to support future schema
generation by @​lauraneto in
umbraco/Umbraco-CMS#21031
* Delivery API: Adding allow list for content types by @​NillasKA in
umbraco/Umbraco-CMS#21111
* Emails: Add `Expires` header by @​rickbutterfield in
umbraco/Umbraco-CMS#20285
* Indexing: Make the indexing batch size configurable by @​kjac in
umbraco/Umbraco-CMS#20543
* Media: Add protection to restrict access to media in recycle bin
(closes #​2931) by @​AndyButland in
umbraco/Umbraco-CMS#20378
* Collection: Introduce Collection Item Card extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20954
* Collection: Introduce Collection Item Ref extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20994
 ... (truncated)

## 17.1.0-rc

## What's Changed

### 📦 Dependencies
* Dependencies: Fixed dependency conflicts when installing
Microsoft.EntityFrameworkCore.Design (closes #​20421) by @​lauraneto in
umbraco/Umbraco-CMS#20474
* Dependencies: Remove `Microsoft.CodeAnalysis.CSharp` dependency from
Umbraco.Infrastructure by @​lauraneto in
umbraco/Umbraco-CMS#20481
* build(deps): bumps @​umbraco-ui/uui from 1.16.0-rc.0 to 1.16.0 by
@​iOvergaard in umbraco/Umbraco-CMS#20535
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Client by
@​dependabot[bot] in umbraco/Umbraco-CMS#20580
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Login by
@​dependabot[bot] in umbraco/Umbraco-CMS#20621
* Bump playwright and @​playwright/test in
/tests/Umbraco.Tests.AcceptanceTest by @​dependabot[bot] in
umbraco/Umbraco-CMS#20579
* Bump the npm_and_yarn group across 2 directories with 1 update by
@​dependabot[bot] in umbraco/Umbraco-CMS#20863
* Dependencies: Updates some dependencies to latest minor or patch
releases by @​AndyButland in
umbraco/Umbraco-CMS#20953
* build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 by @​iOvergaard
in umbraco/Umbraco-CMS#21054

### 🌈 Accessibility Improvements
* Entity Actions: Create button discernible text (fixes #​20205) by
@​OskarKruger in umbraco/Umbraco-CMS#20434
* Entity Actions: More create button discernible text, extension of
#​20434 by @​OskarKruger in
umbraco/Umbraco-CMS#20458
* Header: Adjusted button focus border color contrast by @​MrHutmat in
umbraco/Umbraco-CMS#20562
* Login: Added custom validation for missing password and user/email on
the login form by @​MrHutmat in
umbraco/Umbraco-CMS#20233
* Accessibility: Adding a label attribute for `<uui-button>` in news
dashboard by @​MrHutmat in
umbraco/Umbraco-CMS#20780
* Keyboard navigation: Return to opening element after modal close by
@​MrHutmat in umbraco/Umbraco-CMS#20782

### 🚀 New Features
* Preview: Allows changing the preview environment inside the preview
app, and other UX changes that enhance the experience by @​leekelleher
in umbraco/Umbraco-CMS#20598
* Login: Adds show/hide password toggle by @​MrHutmat in
umbraco/Umbraco-CMS#20611
* Adds Clear Clipboard button & logic by @​warrenbuckley in
umbraco/Umbraco-CMS#20757
* Member types: Implement containers by @​ronaldbarendse in
umbraco/Umbraco-CMS#20706
* Log viewer: Improves search functionality and code quality by
@​iOvergaard in umbraco/Umbraco-CMS#20913
* Log Viewer: Enhances the donut chart to be responsive, link to log
search, and show numbers directly by @​iOvergaard in
umbraco/Umbraco-CMS#20928
* Culture and Hostnames: Add ability to sort hostnames (closes #​20691)
by @​MrHutmat in umbraco/Umbraco-CMS#20826
* Localization: Adds `termOrDefault()` method to accept a fallback value
by @​iOvergaard in umbraco/Umbraco-CMS#20947
* Block Grid: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#20869
* News Dashboard: Adding functionality to overwrite the cache duration
by @​NillasKA in umbraco/Umbraco-CMS#21064
* Block List: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#21060
* Extend RTE output in Delivery API for better support for multi-site
URL resolution by @​MiguelGuedelha in
umbraco/Umbraco-CMS#20846
* Content Types: Introduce schema service to support future schema
generation by @​lauraneto in
umbraco/Umbraco-CMS#21031
* Delivery API: Adding allow list for content types by @​NillasKA in
umbraco/Umbraco-CMS#21111
* Emails: Add `Expires` header by @​rickbutterfield in
umbraco/Umbraco-CMS#20285
* Indexing: Make the indexing batch size configurable by @​kjac in
umbraco/Umbraco-CMS#20543
* Media: Add protection to restrict access to media in recycle bin
(closes #​2931) by @​AndyButland in
umbraco/Umbraco-CMS#20378
* Collection: Introduce Collection Item Card extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20954
* Collection: Introduce Collection Item Ref extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20994
* Collection: Introduce Card and Ref Collection View kinds by
@​madsrasmussen in umbraco/Umbraco-CMS#21037

### 🚤 Performance
* Performance: Optimize memory footprint of document URL cache (closes
#​21055) by @​AndyButland in
umbraco/Umbraco-CMS#21066
* Distributed Background Jobs: Improve distributed background job
locking behavior and performance by @​nikolajlauridsen in
umbraco/Umbraco-CMS#21100
* Repositories: Optimize repository caches to populate for both int and
GUID keys by @​AndyButland in
umbraco/Umbraco-CMS#21124
* Performance: Re-introduce lazy locks by @​lauraneto in
umbraco/Umbraco-CMS#21102

### 🐛 Bug Fixes
 ... (truncated)

Commits viewable in [compare
view](umbraco/Umbraco-CMS@release-17.0.2...release-17.1.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Umbraco.Cms.Persistence.Sqlite&package-manager=nuget&previous-version=17.0.2&new-version=17.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
alexsee added a commit to alexsee/umbraco-container that referenced this pull request Jan 18, 2026
Updated
[Umbraco.Cms.DevelopmentMode.Backoffice](https://github.com/umbraco/Umbraco-CMS)
from 17.0.2 to 17.1.0.

<details>
<summary>Release notes</summary>

_Sourced from [Umbraco.Cms.DevelopmentMode.Backoffice's
releases](https://github.com/umbraco/Umbraco-CMS/releases)._

## 17.1.0

# What's Changed Since 17.1.0-rc

### 🐛 Bug Fixes
* Media: Fix files not deleted from disk when recycle bin protection is
enabled by @​AndyButland in
umbraco/Umbraco-CMS#21309
* Document Editing: Refactor of Fix property variation change breaking
document save via Infinite Editing (closes #​21195) by @​nielslyngsoe in
umbraco/Umbraco-CMS#21293
* umbraco/Umbraco-CMS#21306 by @​calm329 in
umbraco/Umbraco-CMS#21306

**Full Changelog**:
umbraco/Umbraco-CMS@release-17.1.0-rc...release-17.1.0

## What's Changed Since the Last Release (17.0.2)

### 📦 Dependencies
* Dependencies: Fixed dependency conflicts when installing
Microsoft.EntityFrameworkCore.Design (closes #​20421) by @​lauraneto in
umbraco/Umbraco-CMS#20474
* Dependencies: Remove `Microsoft.CodeAnalysis.CSharp` dependency from
Umbraco.Infrastructure by @​lauraneto in
umbraco/Umbraco-CMS#20481
* build(deps): bumps @​umbraco-ui/uui from 1.16.0-rc.0 to 1.16.0 by
@​iOvergaard in umbraco/Umbraco-CMS#20535
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Client by
@​dependabot[bot] in umbraco/Umbraco-CMS#20580
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Login by
@​dependabot[bot] in umbraco/Umbraco-CMS#20621
* Bump playwright and @​playwright/test in
/tests/Umbraco.Tests.AcceptanceTest by @​dependabot[bot] in
umbraco/Umbraco-CMS#20579
* Bump the npm_and_yarn group across 2 directories with 1 update by
@​dependabot[bot] in umbraco/Umbraco-CMS#20863
* Dependencies: Updates some dependencies to latest minor or patch
releases by @​AndyButland in
umbraco/Umbraco-CMS#20953
* build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 by @​iOvergaard
in umbraco/Umbraco-CMS#21054

### 🌈 Accessibility Improvements
* Entity Actions: Create button discernible text (fixes #​20205) by
@​OskarKruger in umbraco/Umbraco-CMS#20434
* Entity Actions: More create button discernible text, extension of
#​20434 by @​OskarKruger in
umbraco/Umbraco-CMS#20458
* Header: Adjusted button focus border color contrast by @​MrHutmat in
umbraco/Umbraco-CMS#20562
* Login: Added custom validation for missing password and user/email on
the login form by @​MrHutmat in
umbraco/Umbraco-CMS#20233
* Accessibility: Adding a label attribute for `<uui-button>` in news
dashboard by @​MrHutmat in
umbraco/Umbraco-CMS#20780
* Keyboard navigation: Return to opening element after modal close by
@​MrHutmat in umbraco/Umbraco-CMS#20782

### 🚀 New Features
* Preview: Allows changing the preview environment inside the preview
app, and other UX changes that enhance the experience by @​leekelleher
in umbraco/Umbraco-CMS#20598
* Login: Adds show/hide password toggle by @​MrHutmat in
umbraco/Umbraco-CMS#20611
* Adds Clear Clipboard button & logic by @​warrenbuckley in
umbraco/Umbraco-CMS#20757
* Member types: Implement containers by @​ronaldbarendse in
umbraco/Umbraco-CMS#20706
* Log viewer: Improves search functionality and code quality by
@​iOvergaard in umbraco/Umbraco-CMS#20913
* Log Viewer: Enhances the donut chart to be responsive, link to log
search, and show numbers directly by @​iOvergaard in
umbraco/Umbraco-CMS#20928
* Culture and Hostnames: Add ability to sort hostnames (closes #​20691)
by @​MrHutmat in umbraco/Umbraco-CMS#20826
* Localization: Adds `termOrDefault()` method to accept a fallback value
by @​iOvergaard in umbraco/Umbraco-CMS#20947
* Block Grid: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#20869
* News Dashboard: Adding functionality to overwrite the cache duration
by @​NillasKA in umbraco/Umbraco-CMS#21064
* Block List: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#21060
* Extend RTE output in Delivery API for better support for multi-site
URL resolution by @​MiguelGuedelha in
umbraco/Umbraco-CMS#20846
* Content Types: Introduce schema service to support future schema
generation by @​lauraneto in
umbraco/Umbraco-CMS#21031
* Delivery API: Adding allow list for content types by @​NillasKA in
umbraco/Umbraco-CMS#21111
* Emails: Add `Expires` header by @​rickbutterfield in
umbraco/Umbraco-CMS#20285
* Indexing: Make the indexing batch size configurable by @​kjac in
umbraco/Umbraco-CMS#20543
* Media: Add protection to restrict access to media in recycle bin
(closes #​2931) by @​AndyButland in
umbraco/Umbraco-CMS#20378
* Collection: Introduce Collection Item Card extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20954
* Collection: Introduce Collection Item Ref extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20994
 ... (truncated)

## 17.1.0-rc

## What's Changed

### 📦 Dependencies
* Dependencies: Fixed dependency conflicts when installing
Microsoft.EntityFrameworkCore.Design (closes #​20421) by @​lauraneto in
umbraco/Umbraco-CMS#20474
* Dependencies: Remove `Microsoft.CodeAnalysis.CSharp` dependency from
Umbraco.Infrastructure by @​lauraneto in
umbraco/Umbraco-CMS#20481
* build(deps): bumps @​umbraco-ui/uui from 1.16.0-rc.0 to 1.16.0 by
@​iOvergaard in umbraco/Umbraco-CMS#20535
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Client by
@​dependabot[bot] in umbraco/Umbraco-CMS#20580
* Bump vite from 7.1.9 to 7.1.11 in /src/Umbraco.Web.UI.Login by
@​dependabot[bot] in umbraco/Umbraco-CMS#20621
* Bump playwright and @​playwright/test in
/tests/Umbraco.Tests.AcceptanceTest by @​dependabot[bot] in
umbraco/Umbraco-CMS#20579
* Bump the npm_and_yarn group across 2 directories with 1 update by
@​dependabot[bot] in umbraco/Umbraco-CMS#20863
* Dependencies: Updates some dependencies to latest minor or patch
releases by @​AndyButland in
umbraco/Umbraco-CMS#20953
* build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 by @​iOvergaard
in umbraco/Umbraco-CMS#21054

### 🌈 Accessibility Improvements
* Entity Actions: Create button discernible text (fixes #​20205) by
@​OskarKruger in umbraco/Umbraco-CMS#20434
* Entity Actions: More create button discernible text, extension of
#​20434 by @​OskarKruger in
umbraco/Umbraco-CMS#20458
* Header: Adjusted button focus border color contrast by @​MrHutmat in
umbraco/Umbraco-CMS#20562
* Login: Added custom validation for missing password and user/email on
the login form by @​MrHutmat in
umbraco/Umbraco-CMS#20233
* Accessibility: Adding a label attribute for `<uui-button>` in news
dashboard by @​MrHutmat in
umbraco/Umbraco-CMS#20780
* Keyboard navigation: Return to opening element after modal close by
@​MrHutmat in umbraco/Umbraco-CMS#20782

### 🚀 New Features
* Preview: Allows changing the preview environment inside the preview
app, and other UX changes that enhance the experience by @​leekelleher
in umbraco/Umbraco-CMS#20598
* Login: Adds show/hide password toggle by @​MrHutmat in
umbraco/Umbraco-CMS#20611
* Adds Clear Clipboard button & logic by @​warrenbuckley in
umbraco/Umbraco-CMS#20757
* Member types: Implement containers by @​ronaldbarendse in
umbraco/Umbraco-CMS#20706
* Log viewer: Improves search functionality and code quality by
@​iOvergaard in umbraco/Umbraco-CMS#20913
* Log Viewer: Enhances the donut chart to be responsive, link to log
search, and show numbers directly by @​iOvergaard in
umbraco/Umbraco-CMS#20928
* Culture and Hostnames: Add ability to sort hostnames (closes #​20691)
by @​MrHutmat in umbraco/Umbraco-CMS#20826
* Localization: Adds `termOrDefault()` method to accept a fallback value
by @​iOvergaard in umbraco/Umbraco-CMS#20947
* Block Grid: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#20869
* News Dashboard: Adding functionality to overwrite the cache duration
by @​NillasKA in umbraco/Umbraco-CMS#21064
* Block List: Sort mode by @​leekelleher in
umbraco/Umbraco-CMS#21060
* Extend RTE output in Delivery API for better support for multi-site
URL resolution by @​MiguelGuedelha in
umbraco/Umbraco-CMS#20846
* Content Types: Introduce schema service to support future schema
generation by @​lauraneto in
umbraco/Umbraco-CMS#21031
* Delivery API: Adding allow list for content types by @​NillasKA in
umbraco/Umbraco-CMS#21111
* Emails: Add `Expires` header by @​rickbutterfield in
umbraco/Umbraco-CMS#20285
* Indexing: Make the indexing batch size configurable by @​kjac in
umbraco/Umbraco-CMS#20543
* Media: Add protection to restrict access to media in recycle bin
(closes #​2931) by @​AndyButland in
umbraco/Umbraco-CMS#20378
* Collection: Introduce Collection Item Card extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20954
* Collection: Introduce Collection Item Ref extension type by
@​madsrasmussen in umbraco/Umbraco-CMS#20994
* Collection: Introduce Card and Ref Collection View kinds by
@​madsrasmussen in umbraco/Umbraco-CMS#21037

### 🚤 Performance
* Performance: Optimize memory footprint of document URL cache (closes
#​21055) by @​AndyButland in
umbraco/Umbraco-CMS#21066
* Distributed Background Jobs: Improve distributed background job
locking behavior and performance by @​nikolajlauridsen in
umbraco/Umbraco-CMS#21100
* Repositories: Optimize repository caches to populate for both int and
GUID keys by @​AndyButland in
umbraco/Umbraco-CMS#21124
* Performance: Re-introduce lazy locks by @​lauraneto in
umbraco/Umbraco-CMS#21102

### 🐛 Bug Fixes
 ... (truncated)

Commits viewable in [compare
view](umbraco/Umbraco-CMS@release-17.0.2...release-17.1.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Umbraco.Cms.DevelopmentMode.Backoffice&package-manager=nuget&previous-version=17.0.2&new-version=17.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alexander Seeliger <alexsee@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants