When computing load diff, binlogs in v1/legacy format have empty
child_fields. In this case, the field_id itself should be used as the
child_id (group_id == field_id for legacy format).
Without this fix, legacy format binlogs are not recognized during diff
computation, causing segments to fail loading and TestProxy to timeout.
Changes:
- Add fallback to use fieldid as child_id when child_fields is empty
- Add LoadDiff::ToString() for debugging
- Add logging for diff in Load/Reopen operations
- Add comprehensive unit tests for legacy format handling
Related to #46594
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: load-diff computation must enumerate every binlog
child group for a field so current vs new segment state comparisons
include all column-group/binlog groups; for legacy (v1) binlogs that
have empty child_fields, the code must treat group_id == field_id to
preserve that mapping.
- Bug fix (resolves#46594): SegmentLoadInfo now normalizes
field_binlog.child_fields() into a vector and falls back to using
field_id as the single child group when child_fields is empty; the same
normalization is applied for both current and new-info paths, ensuring
legacy v1 binlogs are discovered and included in Load/ComputeDiff
results so segments load correctly.
- Logic simplified: removed the implicit assumption that child_fields is
always present by centralizing a single normalization/fallback step used
symmetrically for both diff paths, avoiding ad-hoc special-casing and
unifying iteration over child groups.
- No data loss / no behavior regression: the fallback only activates
when child_fields is empty — non-legacy binlogs continue to use their
child_fields unchanged. Add/drop semantics are preserved because the
same normalization is applied to both sides of the diff. Unit tests
(v1-only, v4-only, mixed cases) were added to validate correctness;
LoadDiff::ToString() and extra logging are diagnostic only.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Co-authored-by: Cai Zhang <cai.zhang@zilliz.com>
---------
Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
relate: https://github.com/milvus-io/milvus/issues/46571
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: the LexicalHighlighter API now expects the match
queries under the parameter name highlight_query (not queries); all call
sites must pass highlight_query to supply match data. This PR assumes
the underlying highlighter behavior and processing of those query values
are unchanged.
- Logic simplified/removed: removed the legacy keyword queries in tests
and updated calls to use highlight_query
(tests/python_client/milvus_client/test_milvus_client_highlighter.py).
This eliminates a redundant/incorrect keyword alias and aligns tests
with the consolidated LexicalHighlighter constructor parameter name.
- Why this does NOT introduce data loss or behavior regression: the
change is a parameter-name rename only — no parsing, matching, or
storage logic was modified. Tests now construct LexicalHighlighter with
pre_tags/post_tags/highlight_search_text/fragment_* and pass the query
list under highlight_query; the highlighter execution path
(client.search → highlighter processing → result['highlight']) is
untouched, so existing highlight outputs and stored data remain
unchanged.
- Other changes: bumped pymilvus test dependency to 2.7.0rc93 in
tests/python_client/requirements.txt to match the updated constructor
signature; scope of change is limited to tests and dependency pinning
(no production code changes).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Issue: #46188
Bug was caused by inconsistent version of tzdata as well as wrong month
assignment in convert_timestamptz function.
Also fix when debug_mode=True the compare function can correctly return
True or False.
---------
Signed-off-by: Eric Hou <eric.hou@zilliz.com>
Co-authored-by: Eric Hou <eric.hou@zilliz.com>
issue: #44212
Implement search/query storage usage statistics in go side(result
reduce), only record storage usage in vector search C++ path. Need to be
implemented in query c++ path in next prs.
---------
Signed-off-by: chasingegg <chao.gao@zilliz.com>
Signed-off-by: marcelo.chen <marcelo.chen@zilliz.com>
Co-authored-by: marcelo.chen <marcelo.chen@zilliz.com>
Bumps [deepdiff](https://github.com/seperman/deepdiff) from 6.7.1 to
8.6.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/seperman/deepdiff/releases">deepdiff's
releases</a>.</em></p>
<blockquote>
<h2>8.5.0</h2>
<ul>
<li>Updating deprecated pydantic calls</li>
<li>Switching to pyproject.toml</li>
<li>Fix for moving nested tables when using iterable_compare_func.
by</li>
<li>Fix recursion depth limit when hashing numpy.datetime64</li>
<li>Moving from legacy setuptools use to pyproject.toml</li>
</ul>
<h2>8.4.1</h2>
<ul>
<li>pytz is not required.</li>
</ul>
<h2>8.4.0</h2>
<ul>
<li>Adding BaseOperatorPlus base class for custom operators</li>
<li>default_timezone can be passed now to set your default timezone to
something other than UTC.</li>
<li>New summarization algorithm that produces valid json</li>
<li>Better type hint support</li>
</ul>
<h2>8.1.1</h2>
<p>Adding Python 3.13 to setup.py</p>
<h2>8.1.0</h2>
<ul>
<li>Removing deprecated lines from setup.py</li>
<li>Added <code>prefix</code> option to <code>pretty()</code></li>
<li>Fixes hashing of numpy boolean values.</li>
<li>Fixes <strong>slots</strong> comparison when the attribute doesn't
exist.</li>
<li>Relaxing orderly-set reqs</li>
<li>Added Python 3.13 support</li>
<li>Only lower if clean_key is instance of str <a
href="https://redirect.github.com/seperman/deepdiff/issues/504">#504</a></li>
<li>Fixes issue where the key deep_distance is not returned when both
compared items are equal <a
href="https://redirect.github.com/seperman/deepdiff/issues/510">#510</a></li>
<li>Fixes exclude_paths fails to work in certain cases</li>
<li>exclude_paths fails to work <a
href="https://redirect.github.com/seperman/deepdiff/issues/509">#509</a></li>
<li>Fixes to_json() method chokes on standard json.dumps() kwargs such
as sort_keys</li>
<li>to_dict() method chokes on standard json.dumps() kwargs <a
href="https://redirect.github.com/seperman/deepdiff/issues/490">#490</a></li>
<li>Fixes accessing the affected_root_keys property on the diff object
returned by DeepDiff fails when one of the dicts is empty</li>
<li>Fixes accessing the affected_root_keys property on the diff object
returned by DeepDiff fails when one of the dicts is empty <a
href="https://redirect.github.com/seperman/deepdiff/issues/508">#508</a></li>
</ul>
<p>8.0.1 - extra import of numpy is removed</p>
<h2>8.0.0</h2>
<p>With the introduction of <code>threshold_to_diff_deeper</code>, the
values returned are different than in previous versions of DeepDiff. You
can still get the older values by setting
<code>threshold_to_diff_deeper=0</code>. However to signify that enough
has changed in this release that the users need to update the parameters
passed to DeepDiff, we will be doing a major version update.</p>
<ul>
<li><input type="checkbox" checked="" disabled="" />
<code>use_enum_value=True</code> makes it so when diffing enum, we use
the enum's value. It makes it so comparing an enum to a string or any
other value is not reported as a type change.</li>
<li><input type="checkbox" checked="" disabled="" />
<code>threshold_to_diff_deeper=float</code> is a number between 0 and 1.
When comparing dictionaries that have a small intersection of keys, we
will report the dictionary as a <code>new_value</code> instead of
reporting individual keys changed. If you set it to zero, you get the
same results as DeepDiff 7.0.1 and earlier, which means this feature is
disabled. The new default is 0.33 which means if less that one third of
keys between dictionaries intersect, report it as a new object.</li>
<li><input type="checkbox" checked="" disabled="" /> Deprecated
<code>ordered-set</code> and switched to <code>orderly-set</code>. The
<code>ordered-set</code> package was not being maintained anymore and
starting Python 3.6, there were better options for sets that ordered. I
forked one of the new implementations, modified it, and published it as
<code>orderly-set</code>.</li>
<li><input type="checkbox" checked="" disabled="" /> Added
<code>use_log_scale:bool</code> and
<code>log_scale_similarity_threshold:float</code>. They can be used to
ignore small changes in numbers by comparing their differences in
logarithmic space. This is different than ignoring the difference based
on significant digits.</li>
<li><input type="checkbox" checked="" disabled="" /> json serialization
of reversed lists.</li>
<li><input type="checkbox" checked="" disabled="" /> Fix for iterable
moved items when <code>iterable_compare_func</code> is used.</li>
<li><input type="checkbox" checked="" disabled="" /> Pandas and Polars
support.</li>
</ul>
<h2>7.0.1</h2>
<ul>
<li><input type="checkbox" checked="" disabled="" /> When verbose=2,
return <code>new_path</code> when the <code>path</code> and
<code>new_path</code> are different (for example when ignore_order=True
and the index of items have changed).</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/seperman/deepdiff/commits">compare
view</a></li>
</ul>
</details>
<br />
[](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)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/milvus-io/milvus/network/alerts).
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
related issue: #42918
1. add tests for ttl eventually search
2. add tests for partition key filter
3. improve check query results for output fields
4. verify some fix for rabitq index and update the test accordingly
5. update gen random float vector in (-1, 1) instead of (0,1)
---------
Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com>
related issue: #39985
1. add some test for external filter function
2. combine search iterator tests into one test file
---------
Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com>
issue: https://github.com/milvus-io/milvus/issues/38877
1. refactor pymilvus client v2 testcasebase
2. add a test for search hint
3. update pymilvus to 2.6
---------
Signed-off-by: yanliang567 <yanliang.qiao@zilliz.com>