mirror of
https://github.com/qdrant/qdrant.git
synced 2026-08-01 15:40:53 -05:00
* 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
83 lines
2.1 KiB
Python
Executable File
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)
|
|
|