-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmigration_manager.py
56 lines (43 loc) · 1.83 KB
/
migration_manager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import mongo
from util import (print_info, print_success, print_fail, print_warning)
import json
import jsondiff
def migrate(origin_connection_string, destination_connection_string, collection, handle_balancer, compare_documents, override):
origin = mongo.MongoDb(origin_connection_string)
destination = mongo.MongoDb(destination_connection_string)
print_info("starting migration")
balancer_state = None
if handle_balancer:
balancer_state = origin.get_balancer_state()
if balancer_state:
print_info("origin stop balancer " + str(origin.stop_balancer()))
else:
print_warning("balancer is already not started")
print_info("dump and restore")
migration = mongo.Migration(origin, destination)
migration_result = None
try:
if collection:
migration_result = migration.dump_restore_collection(override, collection)
else:
migration_result = migration.dump_restore(override)
finally:
if handle_balancer and balancer_state:
print_info("origin start balancer " + str(origin.start_balancer()))
if migration_result == 0:
print_success("migration finished successfuly")
else:
print_fail("migration finished with errors")
if compare_documents:
print_info("document count compare")
origin_count = origin.count_documents(collection if collection else "")
dest_count = destination.count_documents(collection if collection else "")
diff = jsondiff.diff(origin_count, dest_count)
if diff :
print("Different")
print_fail("document count between clusters is different")
print(diff)
exit(1)
else :
print_success("document count match")
print(json.dumps(dest_count))