Skip to content

Commit

Permalink
PSMDB-1482 add the test with unshardCollection
Browse files Browse the repository at this point in the history
  • Loading branch information
olexandr-havryliak committed Sep 9, 2024
1 parent d847b8e commit 31e80d0
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 2 deletions.
7 changes: 5 additions & 2 deletions pbm-functional/pytest/example_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,18 @@
{"_id": "rs2", "members": [{"host": "rs201"}, {"host": "rs202"}, {"host": "rs203"}]}
]}

cluster = Cluster(config)
#mongod_extra_args = " --setParameter=perconaTelemetryGracePeriod=2 --setParameter=perconaTelemetryScrapeInterval=5"
mongod_extra_args = " "

cluster = Cluster(config,mongod_extra_args=mongod_extra_args)

def handler(signum,frame):
cluster.destroy()
exit(0)

cluster.destroy()
cluster.create()
cluster.setup_pbm()
#cluster.setup_pbm()

signal.signal(signal.SIGINT,handler)
print("\nCluster is prepared and ready to use")
Expand Down
82 changes: 82 additions & 0 deletions pbm-functional/pytest/test_PBM-1386.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import pytest
import pymongo
import bson
import testinfra
import time
import os
import docker

from datetime import datetime
from cluster import Cluster
from packaging import version


@pytest.fixture(scope="package")
def mongod_version():
return docker.from_env().containers.run(
image='replica_member/local',
remove=True,
command='bash -c \'mongod --version | head -n1 | sed "s/db version v//"\''
).decode("utf-8", errors="replace")

@pytest.fixture(scope="package")
def config(mongod_version):
if version.parse(mongod_version) < version.parse("8.0.0"):
pytest.skip("Unsupported version for unshardCollection")
else:
return { "mongos": "mongos",
"configserver":
{"_id": "rscfg", "members": [{"host":"rscfg01"},{"host": "rscfg02"},{"host": "rscfg03" }]},
"shards":[
{"_id": "rs1", "members": [{"host":"rs101"},{"host": "rs102"},{"host": "rs103" }]},
{"_id": "rs2", "members": [{"host":"rs201"},{"host": "rs202"},{"host": "rs203" }]}
]}

@pytest.fixture(scope="package")
def cluster(config):
return Cluster(config)

@pytest.fixture(scope="function")
def start_cluster(cluster,request):
try:
cluster.destroy()
os.chmod("/backups",0o777)
os.system("rm -rf /backups/*")
cluster.create()
client=pymongo.MongoClient(cluster.connection)
client.admin.command("enableSharding", "test")
client.admin.command("shardCollection", "test.test", key={"_id": "hashed"})
cluster.setup_pbm()
result = cluster.exec_pbm_cli("config --set storage.type=filesystem --set storage.filesystem.path=/backups --set backup.compression=none")
assert result.rc == 0
Cluster.log("Setup PBM with fs storage:\n" + result.stdout)
yield True
finally:
if request.config.getoption("--verbose"):
cluster.get_logs()
cluster.destroy(cleanup_backups=True)

@pytest.mark.timeout(900,func_only=True)
def test_logical_PBM_T264(start_cluster,cluster):
cluster.check_pbm_status()
client=pymongo.MongoClient(cluster.connection)
for i in range(600):
client['test']['test'].insert_one({"doc":i})

cluster.make_backup('logical')
cluster.enable_pitr(pitr_extra_args="--set pitr.oplogSpanMin=0.5")
time.sleep(10)
Cluster.log("Start unsharding collection test.test")
result=client.admin.command({'unshardCollection': "test.test", 'toShard': "rs2"})
Cluster.log(result)
time.sleep(10)
assert not pymongo.MongoClient(cluster.connection)["test"].command("collstats", "test").get("sharded", False)
pitr = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S")
Cluster.log("Time for PITR is: " + pitr)
pitr_backup="--time=" + pitr
time.sleep(60)
pymongo.MongoClient(cluster.connection).drop_database('test')
cluster.make_restore(pitr_backup,check_pbm_status=True,make_resync=False)
assert pymongo.MongoClient(cluster.connection)["test"]["test"].count_documents({}) == 600
assert not pymongo.MongoClient(cluster.connection)["test"].command("collstats", "test").get("sharded", False)

0 comments on commit 31e80d0

Please sign in to comment.