FreeNAS/freenas 62ad5a7src/middlewared/middlewared/api/base model.py, src/middlewared/middlewared/api/base/handler accept.py result.py

reduce parent process memory by > 100MB
DeltaFile
+11-1src/middlewared/middlewared/api/base/model.py
+4-1src/middlewared/middlewared/api/base/handler/accept.py
+2-0src/middlewared/middlewared/api/base/handler/result.py
+2-0src/middlewared/middlewared/api/base/server/legacy_api_method.py
+2-0src/middlewared/middlewared/api/base/handler/dump_params.py
+21-25 files

FreeNAS/freenas 17c3261src/middlewared/middlewared main.py, src/middlewared/middlewared/api/base model.py

Explicitly process submodels in `ensure_model_ready`
DeltaFile
+15-2src/middlewared/middlewared/api/base/model.py
+5-0src/middlewared/middlewared/utils/typing_.py
+2-1src/middlewared/middlewared/api/base/handler/inspect.py
+2-1src/middlewared/middlewared/api/base/handler/remove_secrets.py
+2-0src/middlewared/middlewared/main.py
+26-45 files

FreeNAS/freenas b9618dfsrc/middlewared/middlewared/plugins/smb_ util_smbconf.py

Disable SMB3 unix extensions by default

This commit disables the SMB3 unix extensions by default. They
will be exposed as a configurable option in a future PR.
DeltaFile
+1-0src/middlewared/middlewared/plugins/smb_/util_smbconf.py
+1-01 files

FreeNAS/freenas e0aec72src/middlewared/middlewared/api/v25_10_0 core.py, src/middlewared/middlewared/api/v25_10_1 core.py

NAS-139180 / 25.10.2 / Change error on core.bulk op to LongString (by anodos325) (#17957)

Depending on the circumstances and exact arguments passed to a method,
the operation may fail with a detail python traceback that requires a
LongString for the error message.

Original PR: https://github.com/truenas/middleware/pull/17956

Co-authored-by: Andrew Walker <awalker at ixsystems.com>
DeltaFile
+1-1src/middlewared/middlewared/api/v25_10_0/core.py
+1-1src/middlewared/middlewared/api/v25_10_1/core.py
+1-1src/middlewared/middlewared/api/v25_10_2/core.py
+3-33 files

FreeNAS/freenas 6956d02src/middlewared/middlewared main.py, src/middlewared/middlewared/api/base/server/ws_handler rpc.py

NAS-139199 / 25.10.2 / Fix Futures resource leak in run_coroutine_threadsafe (by yocalebo) (#17969)

This fixes a leak whereby we're not tracking `Future` objects correctly.
This means they're never cleaned up and overtime they'll build up on the
main event loop.

I confirmed this behavior by running `midclt call interface.query` in a
tight loop on a box and then connecting a remote pdb session with the
middleware process. It was designed to "overrun" the main event loop,
what it did was build up a queue that never cleared itself. There were
~2.3k PENDING futures in our thread pool.

This does 2 things:
1. creates a `run_coroutine_threadsafe` wrapper that properly tracks the
futures so they're cleaned up
2. logs any exceptions that may occur in these "fire and forget"
futures.

Original PR: https://github.com/truenas/middleware/pull/17967

Co-authored-by: caleb <yocalebo at gmail.com>
DeltaFile
+35-0src/middlewared/middlewared/utils/threading.py
+3-2src/middlewared/middlewared/apps/webshell_app.py
+3-2src/middlewared/middlewared/apps/websocket_app.py
+2-1src/middlewared/middlewared/main.py
+2-1src/middlewared/middlewared/plugins/failover_/reboot.py
+2-1src/middlewared/middlewared/api/base/server/ws_handler/rpc.py
+47-76 files

FreeNAS/freenas d5fe122src/middlewared/middlewared main.py, src/middlewared/middlewared/api/base/server/ws_handler rpc.py

fix cherry-pick
DeltaFile
+35-0src/middlewared/middlewared/utils/threading.py
+3-2src/middlewared/middlewared/apps/webshell_app.py
+3-2src/middlewared/middlewared/apps/websocket_app.py
+2-1src/middlewared/middlewared/main.py
+2-1src/middlewared/middlewared/plugins/failover_/reboot.py
+2-1src/middlewared/middlewared/api/base/server/ws_handler/rpc.py
+47-76 files

FreeNAS/freenas 097e252src/middlewared/middlewared/plugins/failover_ remote.py, src/middlewared/middlewared/plugins/zfs mount_events.py events_read.py

NAS-139201 / 26.04 / fix start_daemon_thread callers (#17970)

These were missed in the last PR
https://github.com/truenas/middleware/pull/17968
DeltaFile
+1-1src/middlewared/middlewared/plugins/zfs_/zfs_events.py
+1-1src/middlewared/middlewared/plugins/zfs/mount_events.py
+1-1src/middlewared/middlewared/plugins/zfs/events_read.py
+1-1src/middlewared/middlewared/plugins/failover_/remote.py
+4-44 files

FreeNAS/freenas 23a8547src/middlewared/middlewared/plugins zettarepl.py, src/middlewared/middlewared/plugins/device_ netlink_events.py udev_events.py

NAS-139200 / 26.04 / Force name keyword arg in start_daemon_thread (#17968)

While tracing middlewared process, I found a bunch of threads attached
to parent process with just names like `Thread-0`, `Thread-1`, etc. This
is the default thread_name_prefix given to a `Thread` in python. That's
unhelpful so this forces a `name` keyword argument to be given to
`start_daemon_thread`.
DeltaFile
+16-2src/middlewared/middlewared/utils/threading.py
+6-4src/middlewared/middlewared/plugins/zettarepl.py
+1-1src/middlewared/middlewared/plugins/device_/netlink_events.py
+1-1src/middlewared/middlewared/plugins/device_/udev_events.py
+1-1src/middlewared/middlewared/plugins/failover_/datastore.py
+25-95 files

FreeNAS/freenas cefa1b2

Empty commit to create PR on github.

You should reset it
DeltaFile
+0-00 files

FreeNAS/freenas 33d77e3src/middlewared/middlewared main.py, src/middlewared/middlewared/api/base/server/ws_handler rpc.py

NAS-139199 / 26.04 / Fix Futures resource leak in run_coroutine_threadsafe (#17967)

This fixes a leak whereby we're not tracking `Future` objects correctly.
This means they're never cleaned up and overtime they'll build up on the
main event loop.

I confirmed this behavior by running `midclt call interface.query` in a
tight loop on a box and then connecting a remote pdb session with the
middleware process. It was designed to "overrun" the main event loop,
what it did was build up a queue that never cleared itself. There were
~2.3k PENDING futures in our thread pool.

This does 2 things:
1. creates a `run_coroutine_threadsafe` wrapper that properly tracks the
futures so they're cleaned up
2. logs any exceptions that may occur in these "fire and forget"
futures.
DeltaFile
+35-0src/middlewared/middlewared/utils/threading.py
+3-2src/middlewared/middlewared/apps/webshell_app.py
+3-2src/middlewared/middlewared/apps/websocket_app.py
+2-1src/middlewared/middlewared/main.py
+2-1src/middlewared/middlewared/plugins/failover_/reboot.py
+2-1src/middlewared/middlewared/api/base/server/ws_handler/rpc.py
+47-76 files

FreeNAS/freenas 0b44a48src/middlewared/middlewared/plugins zettarepl.py

flake8
DeltaFile
+3-1src/middlewared/middlewared/plugins/zettarepl.py
+3-11 files

FreeNAS/freenas fdd7f54src/middlewared/middlewared/pytest/unit/alert/source test_quota.py, tests/unit test_quota.py

Shift test location
DeltaFile
+0-72src/middlewared/middlewared/pytest/unit/alert/source/test_quota.py
+72-0tests/unit/test_quota.py
+72-722 files

FreeNAS/freenas 9025ae4src/middlewared/middlewared main.py, src/middlewared/middlewared/api/base/server/ws_handler rpc.py

fix Future leak in run_coroutine_threadsafe
DeltaFile
+3-2src/middlewared/middlewared/apps/websocket_app.py
+3-2src/middlewared/middlewared/apps/webshell_app.py
+2-1src/middlewared/middlewared/plugins/failover_/reboot.py
+2-1src/middlewared/middlewared/api/base/server/ws_handler/rpc.py
+2-1src/middlewared/middlewared/main.py
+12-75 files

FreeNAS/freenas 1b2cb74src/middlewared/middlewared/plugins zettarepl.py

flake8
DeltaFile
+3-1src/middlewared/middlewared/plugins/zettarepl.py
+3-11 files

FreeNAS/freenas 8397532src/middlewared/middlewared main.py, src/middlewared/middlewared/api/base/server/ws_handler rpc.py

fix import
DeltaFile
+4-4src/middlewared/middlewared/plugins/zettarepl.py
+3-2src/middlewared/middlewared/apps/websocket_app.py
+3-2src/middlewared/middlewared/apps/webshell_app.py
+2-1src/middlewared/middlewared/main.py
+2-1src/middlewared/middlewared/api/base/server/ws_handler/rpc.py
+2-1src/middlewared/middlewared/plugins/failover_/reboot.py
+16-113 files not shown
+19-149 files

FreeNAS/freenas 21064e2src/middlewared/middlewared/plugins zettarepl.py, src/middlewared/middlewared/plugins/device_ netlink_events.py udev_events.py

fix start_daemon_thread callers
DeltaFile
+4-4src/middlewared/middlewared/plugins/zettarepl.py
+1-1src/middlewared/middlewared/plugins/device_/netlink_events.py
+1-1src/middlewared/middlewared/plugins/device_/udev_events.py
+1-1src/middlewared/middlewared/plugins/failover_/datastore.py
+7-74 files

FreeNAS/freenas 0dc8cd3src/middlewared/middlewared/utils threading.py

force name keyword arg for start_daemon_thread
DeltaFile
+16-2src/middlewared/middlewared/utils/threading.py
+16-21 files

FreeNAS/freenas 5fb7a7bsrc/middlewared/middlewared main.py, src/middlewared/middlewared/api/base/server/ws_handler rpc.py

fix Futures leak
DeltaFile
+3-2src/middlewared/middlewared/apps/webshell_app.py
+3-2src/middlewared/middlewared/apps/websocket_app.py
+2-2src/middlewared/middlewared/plugins/failover_/reboot.py
+2-1src/middlewared/middlewared/api/base/server/ws_handler/rpc.py
+2-1src/middlewared/middlewared/main.py
+12-85 files

FreeNAS/freenas fe39108src/middlewared/middlewared/utils threading.py

add run_coroutine_threadsafe helper to fix future leaks
DeltaFile
+27-0src/middlewared/middlewared/utils/threading.py
+27-01 files

FreeNAS/freenas a12489esrc/middlewared/middlewared/api/base model.py, src/middlewared/middlewared/api/base/handler accept.py result.py

reduce parent process memory by > 100MB
DeltaFile
+11-1src/middlewared/middlewared/api/base/model.py
+4-1src/middlewared/middlewared/api/base/handler/accept.py
+2-0src/middlewared/middlewared/api/base/handler/result.py
+2-0src/middlewared/middlewared/api/base/server/legacy_api_method.py
+2-0src/middlewared/middlewared/api/base/handler/dump_params.py
+21-25 files

FreeNAS/freenas f6767f4src/middlewared/middlewared/plugins zettarepl.py

Address reviews
DeltaFile
+19-4src/middlewared/middlewared/plugins/zettarepl.py
+19-41 files

FreeNAS/freenas 5e2d9b8src/middlewared/middlewared/plugins zettarepl.py

Fix replication mount conflict for ix-apps datasets

This commit fixes an issue where replicating ix-apps datasets would fail with a mount conflict after switching Docker pools.

When Docker switches to a pool, it sets `mountpoint=/.ix-apps` on that pool's ix-apps dataset. If the user later switches back to the original pool and runs replication again, zfs recv attempts to auto-mount the destination dataset at `/.ix-apps`, conflicting with the currently active ix-apps dataset.

The fix disables automatic mounting (adds -u flag to zfs recv) when the source dataset is a Docker ix-apps dataset `({pool}/ix-apps` or its children). Docker's `fs_manage.mount` handles mounting separately when needed.
DeltaFile
+5-1src/middlewared/middlewared/plugins/zettarepl.py
+5-11 files

FreeNAS/freenas 6f7f682src/middlewared/middlewared/plugins/audit audit.py

Add extra option to deduplicate the result.
DeltaFile
+22-1src/middlewared/middlewared/plugins/audit/audit.py
+22-11 files

FreeNAS/freenas d5c83b9src/middlewared/middlewared main.py, src/middlewared/middlewared/alert/source ipmi_sel.py

Migrate keyvalue service usage to call2 / call_sync2
DeltaFile
+113-0src/middlewared/middlewared/utils/service/call_mixin.py
+17-70src/middlewared/middlewared/main.py
+11-11src/middlewared/middlewared/plugins/pool_/dataset.py
+6-11src/middlewared/middlewared/plugins/pool_/import_pool.py
+2-12src/middlewared/middlewared/plugins/apps/crud.py
+6-6src/middlewared/middlewared/alert/source/ipmi_sel.py
+155-11029 files not shown
+215-20235 files

FreeNAS/freenas f625c12src/middlewared/middlewared/api/base decorator.py, src/middlewared/middlewared/plugins/webshare sharing.py config.py

Address review
DeltaFile
+191-0src/middlewared/middlewared/pytest/unit/api/base/test_decorator.py
+14-4src/middlewared/middlewared/api/base/decorator.py
+1-1src/middlewared/middlewared/plugins/webshare/sharing.py
+1-1src/middlewared/middlewared/plugins/webshare/config.py
+207-64 files

FreeNAS/freenas e525306src/middlewared/middlewared/api/base decorator.py model.py, src/middlewared/middlewared/api/base/handler accept.py

Use annotations for public API methods
DeltaFile
+74-16src/middlewared/middlewared/api/base/decorator.py
+24-24src/middlewared/middlewared/plugins/webshare/sharing.py
+33-4src/middlewared/middlewared/api/base/handler/accept.py
+13-10src/middlewared/middlewared/api/v26_04_0/webshare.py
+18-1src/middlewared/middlewared/api/base/model.py
+7-9src/middlewared/middlewared/plugins/webshare/config.py
+169-642 files not shown
+179-658 files

FreeNAS/freenas 0e08b2bsrc/middlewared/middlewared/utils origin.py

NAS-139194 / 25.10.2 / Properly set address family in ConnectionOrigin (by anodos325) (#17965)

This commit fixes the handling for AF_INET6 origin in the TrueNAS
ConnectionOrigin. Our internal validation was determining correct
address family, but it wasn't being set in family attribute.

Original PR: https://github.com/truenas/middleware/pull/17964

Co-authored-by: Andrew Walker <andrew.walker at truenas.com>
DeltaFile
+5-5src/middlewared/middlewared/utils/origin.py
+5-51 files

FreeNAS/freenas 1ea322asrc/middlewared/middlewared/utils origin.py

Properly set address family in ConnectionOrigin

This commit fixes the handling for AF_INET6 origin in the
TrueNAS ConnectionOrigin. Our internal validation was determining
correct address family, but it wasn't being set in family
attribute.

(cherry picked from commit e43808a86400aa9a4e5ec191616c589890b9db88)
DeltaFile
+5-5src/middlewared/middlewared/utils/origin.py
+5-51 files

FreeNAS/freenas 57b193bsrc/middlewared/middlewared/utils origin.py

NAS-139194 / 26.04 / Properly set address family in ConnectionOrigin (#17964)

This commit fixes the handling for AF_INET6 origin in the TrueNAS
ConnectionOrigin. Our internal validation was determining correct
address family, but it wasn't being set in family attribute.
DeltaFile
+5-5src/middlewared/middlewared/utils/origin.py
+5-51 files

FreeNAS/freenas e43808asrc/middlewared/middlewared/utils origin.py

Properly set address family in ConnectionOrigin

This commit fixes the handling for AF_INET6 origin in the
TrueNAS ConnectionOrigin. Our internal validation was determining
correct address family, but it wasn't being set in family
attribute.
DeltaFile
+5-5src/middlewared/middlewared/utils/origin.py
+5-51 files