milvus-2.5.1
Release date: December 26, 2024
Milvus version | Python SDK version | Node.js SDK version | Java SDK version |
---|---|---|---|
2.5.1 | 2.5.2 | 2.5.2 | 2.5.2 |
Milvus 2.5.1 focuses on a series of bug fixes addressing memory loading, RBAC listings, query node balancing, and sealed segment indexing, while also improving the Web UI and interceptors. We highly recommend upgrading to 2.5.1 for enhanced stability and reliability.
- Update web UI collection and query pages. (#38701)
- Fixed OOM issues by adding a memory factor to loading estimations. (#38722)
- Fixed privilege group expansion when listing policies in RootCoord. (#38760)
- Fixed issues with listing privilege groups and collections. (#38738)
- Fixed the balancer to avoid repeatedly overloading the same query node. (#38724)
- Fixed unexpected balance tasks triggered after QueryCoord restarts. (#38725)
- Fixed load config updates not applying to loading collections. (#38737)
- Fixed zero read count during data import. (#38695)
- Fixed Unicode decoding for JSON keys in expressions. (#38653)
- Fixed interceptor DB name for alterCollectionField in 2.5. (#38663)
- Fixed empty index parameters for sealed segments when using BM25 brute force search. (#38752)
milvus-2.4.19
Release Date: December 26, 2024
Milvus version | Python SDK version | Java SDK version | Node.js SDK version |
---|---|---|---|
2.4.19 | 2.4.13 | 2.4.9 | 2.4.9 |
Milvus 2.4.19 focuses on fixing issues in RBAC, Balancer, and loading processes, while also introducing several performance enhancements in areas such as PartitionKey Deletion and hybrid searching. We highly recommend upgrading to this version for increased stability and reliability.
- Expression templates are introduced to accelerate hybrid searches. (#38624)
- Additional metrics are provided for improved deletion monitoring. (#38746)
- L0 file generation is restricted to specific partition for partitionKey deletion to reduce amplification. (#38232)
- Fixed OOM issues by adding a memory factor to loading estimations. (#38721)
- Fixed privilege group expansion when listing policies in RootCoord. (#38759)
- Fixed access log retention, skipping empty log rotation. (#38661)
- Fixed the balancer to avoid repeatedly overloading the same query node. (#38720)
- Fixed issues with listing privilege groups and collections. (#38698)
- Fixed load config updates not applying to loading collections. (#38596)
- Fixed unexpected balance tasks triggered after QueryCoord restarts. (#38714)
- Fixed zero read count during data import. (#38696)
- Fixed Unicode decoding for JSON keys in expressions. (#38652)
TiDB v8.1.2
For new features, improvements, and bug fixes released in v8.1.2 for TiDB, see TiDB v8.1.2 release notes.
See the difference from the issue perspective:
- pingcap/tidb#55561
- pingcap/tidb#55250
- pingcap/tidb#53618
- pingcap/tidb#55543
- pingcap/tidb#54210
- pingcap/tidb#55478
- pingcap/tidb#53867
- pingcap/tidb#55042
- pingcap/tidb#54538
- pingcap/tidb#55666
- pingcap/tidb#55818
- pingcap/tidb#49692
- pingcap/tidb#55957
- pingcap/tidb#56116
- pingcap/tidb#55837
- pingcap/tidb#56062
- pingcap/tidb#55970
- pingcap/tidb#56173
- pingcap/tidb#56368
- pingcap/tidb#56439
- pingcap/tidb#56511
- pingcap/tidb#55551
- pingcap/tidb#56218
- pingcap/tidb#56539
- pingcap/tidb#56458
- pingcap/tidb#56456
- pingcap/tidb#52049
- pingcap/tidb#54961
- pingcap/tidb#56934
- pingcap/tidb#54770
- pingcap/tidb#56422
- pingcap/tidb#56408
- pingcap/tidb#56572
- pingcap/tidb#56980
- pingcap/tidb#54823
- pingcap/tidb#57112
- pingcap/tidb#57137
- pingcap/tidb#57257
- pingcap/tidb#55812
- pingcap/tidb#46969
- pingcap/tidb#56083
- pingcap/tidb#53713
- pingcap/tidb#55885
- pingcap/tidb#55881
- pingcap/tidb#57404
- pingcap/tidb#57625
- pingcap/tidb#56726
- pingcap/tidb#57722
- pingcap/tidb#57816
- pingcap/tidb#56837
- pingcap/tidb#57449
- pingcap/tidb#57980
- pingcap/tidb#57710
- pingcap/tidb#55677
- pingcap/tidb#56832
- pingcap/tidb#55808
- pingcap/tidb#55265
- pingcap/tidb#57790
- pingcap/tidb#55902
- pingcap/tidb#57585
- pingcap/tidb#55374
- pingcap/tidb#58184
- pingcap/tidb#55273
- pingcap/tidb#57134
- pingcap/tidb#58168
- pingcap/tidb#58031
- pingcap/tidb#58147
- pingcap/tidb#56897
- pingcap/tidb#56809
- pingcap/tidb#58284
- pingcap/tidb#58267
- pingcap/tidb#58340
- pingcap/tidb#52612
3.1.0-rc.0 / 2024-12-18
- [SECURITY] upgrade golang.org/x/crypto to address reported CVE-2024-45337. #15691
- [CHANGE] Notifier: Increment prometheus_notifications_errors_total by the number of affected alerts rather than per batch. #15428
- [CHANGE] API: list rules field "groupNextToken:omitempty" renamed to "groupNextToken". #15400
- [ENHANCEMENT] OTLP translate: keep identifying attributes in target_info. #15448
- [ENHANCEMENT] Paginate rule groups, add infinite scroll to rules within groups. #15677
- [ENHANCEMENT] TSDB: Improve calculation of space used by labels. #13880
- [ENHANCEMENT] Rules: new metric rule_group_last_rule_duration_sum_seconds. #15672
- [ENHANCEMENT] Observability: Export 'go_sync_mutex_wait_total_seconds_total' metric. #15339
- [ENHANCEMEN] Remote-Write: optionally use a DNS resolver that picks a random IP. #15329
- [PERF] Optimize
l=~".+"
matcher. #15474, #15684 - [PERF] TSDB: Cache all symbols for compaction . #15455
- [PERF] TSDB: MemPostings: keep a map of label values slices. #15426
- [PERF] Remote-Write: Remove interning hook. #15456
- [PERF] Scrape: optimize string manipulation for experimental native histograms with custom buckets. #15453
- [PERF] TSDB: reduce memory allocations. #15465, #15427
- [PERF] Storage: Implement limit in mergeGenericQuerier. #14489
- [PERF] TSDB: Optimize inverse matching. #14144
- [PERF] Regex: use stack memory for lowercase copy of string. #15210
- [PERF] TSDB: When deleting from postings index, pause to unlock and let readers read. #15242
- [BUGFIX] Rules: Do not run rules concurrently if uncertain about dependencies. #15560
- [BUGFIX] PromQL: Adds test for
absent
,absent_over_time
andderiv
func with histograms. #15667 - [BUGFIX] PromQL: Fix various bugs related to quoting UTF-8 characters. #15531
- [BUGFIX] Scrape: fix nil panic after scrape loop reload. #15563
- [BUGFIX] Remote-write: fix panic on repeated log message. #15562
- [BUGFIX] Scrape: reload would ignore always_scrape_classic_histograms and convert_classic_histograms_to_nhcb configs. #15489
- [BUGFIX] TSDB: fix data corruption in experimental native histograms. #15482
- [BUGFIX] PromQL: Ignore histograms in all time related functions. #15479
- [BUGFIX] OTLP receiver: Convert metric metadata. #15416
- [BUGFIX] PromQL: Fix
resets
function for histograms. #15527 - [BUGFIX] PromQL: Fix behaviour of
changes()
for mix of histograms and floats. #15469 - [BUGFIX] PromQL: Fix behaviour of some aggregations with histograms. #15432
- [BUGFIX] allow quoted exemplar keys in openmetrics text format. #15260
- [BUGFIX] TSDB: fixes for rare conditions when loading write-behind-log (WBL). #15380
- [BUGFIX]
round()
function did not remove__name__
label. #15250 - [BUGFIX] Promtool: analyze block shows metric name with 0 cardinality. #15438
- [BUGFIX] PromQL: Fix
count_values
for histograms. #15422 - [BUGFIX] PromQL: fix issues with comparison binary operations with
bool
modifier and native histograms. #15413 - [BUGFIX] PromQL: fix incorrect "native histogram ignored in aggregation" annotations. #15414
- [BUGFIX] PromQL: Corrects the behaviour of some operator and aggregators with Native Histograms. #15245
- [BUGFIX] TSDB: Always return unknown hint for first sample in non-gauge histogram chunk. #15343
- [BUGFIX] PromQL: Clamp functions: Ignore any points with native histograms. #15169
- [BUGFIX] TSDB: Fix race on stale values in headAppender. #15322
- [BUGFIX] UI: Fix selector / series formatting for empty metric names. #15340
milvus-2.5.0
Release note is coming soon....
2024-12-19, Version 23.5.0 (Current), @aduh95
Following the merge of Curve25519 into the Web Cryptography API Editor's Draft the Ed25519
and X25519
algorithm identifiers are now stable and will no longer emit an ExperimentalWarning upon use.
Contributed by Filip Skokan in #56142.
This release introduces module.registerHooks()
for registering module loader customization hooks that are run for all modules loaded by require()
, import
and functions returned by createRequire()
in the same thread, which makes them easier for CJS monkey-patchers to migrate to.
import assert from 'node:assert';
import { registerHooks, createRequire } from 'node:module';
import { writeFileSync } from 'node:fs';
writeFileSync('./bar.js', 'export const id = 123;', 'utf8');
registerHooks({
resolve(specifier, context, nextResolve) {
const replaced = specifier.replace('foo', 'bar');
return nextResolve(replaced, context);
},
load(url, context, nextLoad) {
const result = nextLoad(url, context);
return {
...result,
source: result.source.toString().replace('123', '456'),
};
},
});
// Checks that it works with require.
const require = createRequire(import.meta.url);
const required = require('./foo.js'); // Redirected by resolve hook to bar.js
assert.strictEqual(required.id, 456); // Replaced by load hook to 456
// Checks that it works with import.
const imported = await import('./foo.js'); // Redirected by resolve hook to bar.js
assert.strictEqual(imported.id, 456); // Replaced by load hook to 456
This complements the module.register()
hooks - the new hooks fit better internally and cover all corners in the module graph; whereas module.register()
previously could not cover require()
while it was on-thread, and still cannot cover createRequire()
after being moved off-thread.
They are also run in the same thread as the modules being loaded and where the hooks are registered, which means they are easier to debug (no more console.log()
getting lost) and do not have the many deadlock issues haunting the module.register()
hooks. The new API also takes functions directly so that it's easier for intermediate loader packages to take user options from files that the hooks can't be aware of, like many existing CJS monkey-patchers do.
Contributed by Joyee Cheung in #55698.
- [
59cae91465
] - (SEMVER-MINOR) dgram: support blocklist in udp (theanarkh) #56087 - [
72f79b44ed
] - doc: stabilize util.styleText (Rafael Gonzaga) #56265 - [
b5a2c0777d
] - (SEMVER-MINOR) module: add prefix-only modules tomodule.builtinModules
(Jordan Harband) #56185 - [
9863d27566
] - (SEMVER-MINOR) module: only emit require(esm) warning under --trace-require-module (Joyee Cheung) #56194 - [
8e780bc5ae
] - (SEMVER-MINOR) module: use synchronous hooks for preparsing in import(cjs) (Joyee Cheung) #55698 - [
65bc8e847f
] - (SEMVER-MINOR) report: fix typos in report keys and bump the version (Yuan-Ming Hsu) #56068 - [
0ab36e1937
] - (SEMVER-MINOR) sqlite: aggregate constants in a single property (Edigleysson Silva (Edy)) #56213 - [
efcc5d90c5
] - (SEMVER-MINOR) src,lib: stabilize permission model (Rafael Gonzaga) #56201
- [
2314e4916e
] - assert: make Maps be partially compared in partialDeepStrictEqual (Giovanni Bucci) #56195 - [
cfbdff7b45
] - assert: make partialDeepStrictEqual work with ArrayBuffers (Giovanni Bucci) #56098 - [
f264dd6d20
] - buffer: document concat zero-fill (Duncan) #55562 - [
4831b87d83
] - build: set DESTCPU correctly for 'make binary' on loongarch64 (吴小白) #56271 - [
1497bb405e
] - build: fix missing fp16 dependency in d8 builds (Joyee Cheung) #56266 - [
445c8c7489
] - build: add major release action (Rafael Gonzaga) #56199 - [
f4faedfa69
] - build: fix C string encoding forPRODUCT_DIR_ABS
(Anna Henningsen) #56111 - [
6f49c8006c
] - build: use variable for simdutf path (Shelley Vohr) #56196 - [
fcaa2c82a6
] - build: fix GN build on macOS (Joyee Cheung) #56141 - [
08e5309f4f
] - Revert "build: avoid compiling with VS v17.12" (Gerhard Stöbich) #56151 - [
c2fb38cfdf
] - crypto: graduate WebCryptoAPI Ed25519 and X25519 algorithms as stable (Filip Skokan) #56142 - [
8658833884
] - deps: update nghttp3 to 1.6.0 (Node.js GitHub Bot) #56258 - [
7c941d4610
] - deps: update simdutf to 5.6.4 (Node.js GitHub Bot) #56255 - [
4e9113eada
] - deps: update libuv to 1.49.2 (Luigi Pinca) #56224 - [
db6aba12e4
] - deps: update c-ares to v1.34.4 (Node.js GitHub Bot) #56256 - [
25bb462bc2
] - deps: define V8_PRESERVE_MOST as no-op on Windows (Stefan Stojanovic) #56238 - [
54308c51bb
] - deps: update sqlite to 3.47.2 (Node.js GitHub Bot) #56178 - [
59cae91465
] - (SEMVER-MINOR) dgram: support blocklist in udp (theanarkh) #56087 - [
52c18e605e
] - doc: fix color contrast issue in light mode (Rich Trott) #56272 - [
72f79b44ed
] - doc: stabilize util.styleText (Rafael Gonzaga) #56265 - [
0d08756d0c
] - doc: clarify util.aborted resource usage (Kunal Kumar) #55780 - [
f94f21080b
] - doc: add esm examples to node:repl (Alfredo González) #55432 - [
7a10ef88d9
] - doc: add esm examples to node:readline (Alfredo González) #55335 - [
cc7a7c391b
] - doc: fix 'which' to 'that' and add commas (Selveter Senitro) #56216 - [
c5b086250e
] - doc: fix winget config path (Alex Yang) #56233 - [
71c38a24d4
] - doc: add esm examples to node:tls (Alfredo González) #56229 - [
394fffbbde
] - doc: add esm examples to node:perf_hooks (Alfredo González) #55257 - [
7b2a6ee61e
] - doc:sea.getRawAsset(key)
always returns an ArrayBuffer (沈鸿飞) #56206 - [
8092dcf27e
] - doc: update announce documentation for releases (Rafael Gonzaga) #56200 - [
2974667815
] - doc: update blog link to /vulnerability (Rafael Gonzaga) #56198 - [
f3b3ff85e0
] - doc: call out import.meta is only supported in ES modules (Anton Kastritskii) #56186 - [
a9e67280e7
] - doc: add ambassador message - benefits of Node.js (Michael Dawson) #56085 - [
e4922ab15f
] - doc: fix incorrect link to style guide (Yuan-Ming Hsu) #56181 - [
114a3e5a05
] - doc: fix c++ addon hello world sample (Edigleysson Silva (Edy)) #56172 - [
f1c2d2f65e
] - doc: update blog release-post link (Ruy Adorno) #56123 - [
d48b5224c0
] - doc: fix module.md headings (Chengzhong Wu) #56131 - [
4cc0493a0b
] - fs: make mutatingoptions
in Callbackreaddir()
not affect results (LiviaMedeiros) #56057 - [
8d485f1c09
] - fs: make mutatingoptions
in Promisesreaddir()
not affect results (LiviaMedeiros) #56057 - [
595851b5ed
] - fs,win: fix readdir for named pipe (Hüseyin Açacak) #56110 - [
075b36b7b4
] - http: add setDefaultHeaders option to http.request (Tim Perry) #56112 - [
febd969c46
] - http2: remove duplicate codeblock (Vitaly Aminev) #55915 - [
b0ebd23e52
] - http2: support ALPNCallback option (ZYSzys) #56187 - [
f10239fde7
] - lib: remove redundant global regexps (Gürgün Dayıoğlu) #56182 - [
fd55d3cbdd
] - lib: clean up persisted signals when they are settled (Edigleysson Silva (Edy)) #56001 - [
889094fdbc
] - lib: handle Float16Array in node:v8 serdes (Bartek Iwańczuk) #55996 - [
5aec513207
] - lib: disable default memory leak warning for AbortSignal (Lenz Weber-Tronic) #55816 - [
b5a2c0777d
] - (SEMVER-MINOR) module: add prefix-only modules tomodule.builtinModules
(Jordan Harband) #56185 - [
9863d27566
] - (SEMVER-MINOR) module: only emit require(esm) warning under --trace-require-module (Joyee Cheung) #56194 - [
5665e86da6
] - module: prevent main thread exiting before esm worker ends (Shima Ryuhei) #56183 - [
8e780bc5ae
] - (SEMVER-MINOR) module: use synchronous hooks for preparsing in import(cjs) (Joyee Cheung) #55698 - [
e5bb6c2303
] - (SEMVER-MINOR) module: implement module.registerHooks() (Joyee Cheung) #55698 - [
f883bedceb
] - node-api: allow napi_delete_reference in finalizers (Chengzhong Wu) #55620 - [
65bc8e847f
] - (SEMVER-MINOR) report: fix typos in report keys and bump the version (Yuan-Ming Hsu) #56068 - [
a6f0cfa468
] - sea: only assert snapshot main function for main threads (Joyee Cheung) #56120 - [
0ab36e1937
] - (SEMVER-MINOR) sqlite: aggregate constants in a single property (Edigleysson Silva (Edy)) #56213 - [
4745798225
] - sqlite: add support for custom functions (Colin Ihrig) #55985 - [
53cc0cc744
] - sqlite: supportdb.loadExtension
(Alex Yang) #53900 - [
3968599702
] - src: fix outdated js2c.cc references (Chengzhong Wu) #56133 - [
efcc5d90c5
] - (SEMVER-MINOR) src,lib: stabilize permission model (Rafael Gonzaga) #56201 - [
a4a83613cb
] - stream: commit pull-into descriptors after filling from queue (Mattias Buelens) #56072 - [
3298ef4891
] - test: remove test-sqlite-statement-sync flaky designation (Luigi Pinca) #56051 - [
1d8cc6179d
] - test: use --permission over --experimental-permission (Rafael Gonzaga) #56239 - [
5d252b7a67
] - test: remove exludes for sea tests on PPC (Michael Dawson) #56217 - [
8288f57724
] - test: fix test-abortsignal-drop-settled-signals flakiness (Edigleysson Silva (Edy)) #56197 - [
683cc15796
] - test: move localizationd data fromtest-icu-env
to external file (Livia Medeiros) #55618 - [
a0c4a5f122
] - test: update WPT for url to 6fa3fe8a92 (Node.js GitHub Bot) #56136 - [
a0e3926285
] - test: removehasOpenSSL3x
utils (Antoine du Hamel) #56164 - [
041a49094e
] - test: update streams wpt (Mattias Buelens) #56072 - [
ea9a675f56
] - test_runner: exclude test files from coverage by default (Pietro Marchini) #56060 - [
118cd9998f
] - tools: fixnode:
enforcement for docs (Antoine du Hamel) #56284 - [
c4c56daae8
] - tools: update github_reporter to 1.7.2 (Node.js GitHub Bot) #56205 - [
78743b1533
] - tools: add REPLACEME check to workflow (Mert Can Altin) #56251 - [
002ee71d9b
] - tools: usegithub.actor
instead of bot username for release proposals (Antoine du Hamel) #56232 - [
d25d16efeb
] - Revert "tools: disable automated libuv updates" (Luigi Pinca) #56223 - [
b395e0c8c9
] - tools: update gyp-next to 0.19.1 (Anna Henningsen) #56111 - [
a5aaf31c50
] - tools: fix release proposal linter to support more than 1 folk preparing (Antoine du Hamel) #56203 - [
fa667d609e
] - tools: remove has_absl_stringify from gyp file (Michaël Zasso) #56157 - [
65b541e70e
] - tools: enable linter fortools/icu/**
(Livia Medeiros) #56176 - [
28a4b6ff58
] - tools: use commit title as PR title when creating release proposal (Antoine du Hamel) #56165 - [
e20eef659f
] - tools: update gyp-next to 0.19.0 (Node.js GitHub Bot) #56158 - [
efcc829085
] - tools: bump the eslint group in /tools/eslint with 4 updates (dependabot[bot]) #56099 - [
5620b2be8a
] - tools: improve release proposal PR opening (Antoine du Hamel) #56161 - [
3e17a8e78e
] - util: harden more built-in classes against prototype pollution (Antoine du Hamel) #56225 - [
13815417c7
] - util: fix Latin1 decoding to return string output (Mert Can Altin) #56222 - [
77397c5013
] - util: do not rely on mutableObject
andFunction
'constructor
prop (Antoine du Hamel) #56188 - [
84f98e0a74
] - v8,tools: expose experimental wasm revectorize feature (Yolanda-Chen) #54896 - [
8325fa5c04
] - worker: fix crash when a worker joins after exit (Stephen Belanger) #56191
milvus-2.4.18
Release Date: December 20, 2024
Milvus version | Python SDK version | Java SDK version | Node.js SDK version |
---|---|---|---|
2.4.18 | 2.4.11 | 2.4.8 | 2.4.9 |
Milvus 2.4.18 introduces customizable privilege groups and an enhanced Grant/Revoke API, significantly streamlining permission management. This version also brings a suite of built-in privilege groups for common operational scenarios, as well as a host of performance and stability improvements—ranging from CPU optimization to faster collection loading and more efficient indexing. In addition, critical bug fixes ensure a more resilient system, addressing issues like crash scenarios and synchronization failures. We recommend you upgrade to 2.4.18 to take advantage of these key enhancements and improved overall reliability.
RBAC Enhancements:
- Introduces customizable privilege groups, allowing users to create, drop, list, and dynamically manage privileges (add/remove) within their defined groups.
- Includes a suite of built-in privilege groups for common operational scenarios:
- Cluster-Level: ClusterReadOnly, ClusterReadWrite, ClusterAdmin
- Database-Level: DatabaseReadOnly, DatabaseReadWrite, DatabaseAdmin
- Collection-Level: CollectionReadOnly, CollectionReadWrite, CollectionAdmin
- Provides a new version of the Grant/Revoke API, enabling the use of these new interfaces without the need to specify an
ObjectType
.
- Allow hyphens in partition names (#38474)
- Optimize CPU usage for health check requests (#35595)
- Support templates for expressions in RESTful APIs (#38161)
- Remove the limit on the number of load tasks per round (#38497)
alterindex
&altercollection
now support modifying properties (#38361 #38111 #38421)alterdatabase
supports deleting properties (#38450)- Add detailed replica counts for resource groups (#38315)
- Support score-based balancing for channel policies (#38378)
- Add metrics to count the number of non-zero values/tokens in sparse searches (#38328)
- Remove the RPC layer of the coordinator when running in standalone or mixed mode (#38207)
- Add mmap file usage metrics (#38211)
- Support database requests in RESTful API (#38188)
- Enable rate limiting for RESTful V1 (#38190)
- Add collection ID to search request count metrics (#38144)
- Refine clustering compaction logs (#38102)
- Accelerate the collection loading process (#37841)
- Improve compaction performance by removing ParamTable lookups (#37882)
- Support retrying searches when topk is reduced and results are insufficient (#37093)
- Update Knowhere version (#38277)
- Optimize sparse index and get ~10% performance improvement
- Fixed a crash caused by growing-groupby (#38553)
- Fixed an issue where the
SyncSegments
RPC would always fail (#38032) - Fixed an issue where sync tasks remained running after the DataNode had stopped (#38441)
- Fixed inaccurate general counts (#38525)
- Escaped prefixes before conducting searches in inverted indexes (#38425)
- Fixed an issue where roles could be dropped even though grants still existed (#38369)
- Fixed empty import task results (#38317)
- Fixed a DataNode issue where progress could stall at the writer buffer memory check (#38287)
- Fixed an issue that prevented the permission grant on the
manualcompact
API (#38168) - Fixed inaccurate partition count metrics (#38073)
- Accelerated flushing speed by optimizing lock usage (#37897)
- Handled errors gracefully when the compaction queue is full (#37990)
- Optimized loading speed by separating the pool for target observation and collection loading (#37735)
- Fixed a crash caused by retrieving varchar data from a memory-mapped growing segment (#37995)
- Fixed an issue where channels could be accidentally released after balancing (#37940)