Files
qdrant/tests/consensus_tests/downscale_cluster.py
xzfc cf08ac68dc Switch to poetry (#4518)
* Use poetry for openapi tests

* Use poetry for consensus tests

* Use poetry for gen_storage_compat_data/populate_db.py

* Make consensus_tests scripts executable

* Use poetry for test-consensus-compose

* Cleanup

* Don't call poetry run in scripts
2024-07-08 18:17:43 +00:00

83 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import requests
import time
from assertions import assert_http_ok
parser = argparse.ArgumentParser("Move all shards to first node and detach the last one")
parser.add_argument("collection_name")
parser.add_argument("ports", type=int, nargs="+")
args = parser.parse_args()
# Check collection cluster distribution
r = requests.get(f"http://127.0.0.1:{args.ports[0]}/collections/{args.collection_name}/cluster")
assert_http_ok(r)
"""
Example output:
{
"result": {
"peer_id": 1995564390118081002,
"shard_count": 3,
"local_shards": [
{
"shard_id": 0,
"points_count": 1
}
],
"remote_shards": [
{
"shard_id": 1,
"peer_id": 3084118168649519856
},
{
"shard_id": 2,
"peer_id": 10993045052641065997
}
],
"shard_transfers": []
},
"status": "ok",
"time": 0.000013974
}
"""
collection_cluster_status = r.json()
from_peer = collection_cluster_status["result"]['peer_id']
to_peer = collection_cluster_status["result"]["remote_shards"][0]["peer_id"]
for local_shards in collection_cluster_status["result"]["local_shards"]:
shard_id = local_shards["shard_id"]
r = requests.post(f"http://127.0.0.1:{args.ports[0]}/collections/{args.collection_name}/cluster?timeout=60", json={
"move_shard": {
"from_peer_id": from_peer,
"shard_id": shard_id,
"to_peer_id": to_peer
}
})
assert_http_ok(r)
max_wait = 60
# Check that the shard is moved
while max_wait > 0:
r = requests.get(f"http://127.0.0.1:{args.ports[0]}/collections/{args.collection_name}/cluster")
assert_http_ok(r)
collection_cluster_status = r.json()
if len(collection_cluster_status["result"]["local_shards"]) == 0:
break
max_wait -= 1
time.sleep(1)
# Disconnect peer from the cluster
r = requests.delete(f"http://127.0.0.1:{args.ports[0]}/cluster/peer/{from_peer}?timeout=60")
assert_http_ok(r)