Skip to content

vectordb-bench 1.0.21 fails optimize/compaction against Milvus 2.6.15 #779

@FantasqueX

Description

@FantasqueX

Summary

vectordb-bench==1.0.21 appears incompatible with milvusdb/milvus:v2.6.15 during the Milvus HNSW benchmark build/load stage.

The benchmark successfully creates the collection and inserts 1M rows, but fails during the optimize/compaction step with:

Value out of range: 9223372036854775808

The final VectorDBBench result is marked failed (label: "x") with zero load timings.

Downgrading to vectordb-bench==1.0.20 avoids the issue in the same environment.

Environment

  • Milvus image: milvusdb/milvus:v2.6.15
  • vectordb-bench: 1.0.21
  • pymilvus: 3.0.0
  • Benchmark command:
vectordbbench milvushnsw \
  --uri http://localhost:19530 \
  --case-type Performance768D1M \
  --k 100 \
  --num-concurrency 128,160,192,224,256,320,384 \
  --concurrency-duration 30 \
  --concurrency-timeout 3600 \
  --num-shards 4 \
  --replica-number 1 \
  --m 16 \
  --ef-construction 128 \
  --ef-search 128 \
  --skip-search-serial \
  --skip-search-concurrent

Actual Behavior

The build/load phase fails after insertion during Milvus optimize/compaction:

Milvus optimizing before search
Milvus all persistent segments are sorted.
Milvus compact or list segments error: <MilvusException: (code=1, message=Unexpected error, message=<Value out of range: 9223372036854775808>)>
Milvus optimize error: 'ErrorCode' object is not callable
VectorDB optimize error: 'ErrorCode' object is not callable
Failed to run performance case, reason = 'ErrorCode' object is not callable

Result JSON:

{
  "metrics": {
    "insert_duration": 0.0,
    "optimize_duration": 0.0,
    "load_duration": 0.0
  },
  "label": "x"
}

Expected Behavior

The build/load stage should complete successfully and produce non-zero insert/optimize/load timings, as it does with vectordb-bench==1.0.20.

Suspected Cause

In vectordb-bench==1.0.21, the Milvus backend appears to call:

self.client.compact(self.collection_name, target_size=(2**63 - 1))

With pymilvus==3.0.0, MilvusClient.compact() treats integer target_size using the default unit "mb" and converts it via parse_target_size().

A quick repro:

from pymilvus.milvus_client.optimize_task import parse_target_size

parse_target_size("9223372036854775807mb")
# returns 9223372036854775808

That value is larger than signed int64 max and is rejected by Milvus:

Value out of range: 9223372036854775808

There also seems to be a secondary error handling issue:

e.code().name

raises:

'ErrorCode' object is not callable

which masks the original Milvus exception.

This issue is assisted with codex.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions