in tools/mongodb-schema.py [0:0]
def check(src, dst):
#
# check metadata
#
srcDbNames = src.conn.database_names()
dstDbNames = dst.conn.database_names()
srcDbNames = [db for db in srcDbNames if db not in configure[EXCLUDE_DBS]]
dstDbNames = [db for db in dstDbNames if db not in configure[EXCLUDE_DBS]]
srcDbNames.sort()
dstDbNames.sort()
if len(srcDbNames) != len(dstDbNames) or len(set(srcDbNames).difference(set(dstDbNames))):
log_error("DIFF => database count not equals. \nsrc[%s], \ndst[%s]" % (srcDbNames, dstDbNames))
return False
log_info("EQUL => database set equals. db_list : [%s]" % string.join(srcDbNames))
# check database names and collections
for db in srcDbNames:
# if db in configure[EXCLUDE_DBS]:
# log_info("IGNR => ignore database [%s]" % db)
# continue
#
# if dstDbNames.count(db) == 0:
# log_error("DIFF => database [%s] only in srcDb" % (db))
# return False
# db.stats() comparision
srcDb = src.conn[db]
dstDb = dst.conn[db]
srcStats = srcDb.command("dbstats")
dstStats = dstDb.command("dbstats")
removeUncheck(srcStats)
removeUncheck(dstStats)
if srcStats != dstStats:
log_error("DIFF => database [%s] stats not equals \nsrc[%s], \ndst[%s]" % (db, srcStats, dstStats))
return False
log_info("EQUL => database [%s] stats() equals" % db)
# for collections in db
srcColls = srcDb.collection_names()
dstColls = dstDb.collection_names()
srcColls = [coll for coll in srcColls if coll not in configure[EXCLUDE_COLLS]]
dstColls = [coll for coll in dstColls if coll not in configure[EXCLUDE_COLLS]]
srcColls.sort()
dstColls.sort()
if len(srcColls) != len(dstColls) or len(set(srcColls).difference(set(dstColls))):
log_error("DIFF => database [%s] collections count not equals, \nsrc[%s], \ndst[%s]" % (db, srcColls, dstColls))
return False
log_info("EQUL => database [%s] collections set equals, coll_list : [%s]" % (db, string.join(srcColls)))
for coll in srcColls:
srcColl = srcDb[coll]
dstColl = dstDb[coll]
srcIndexes, dstIndexes = [], []
# compare collection indexes
for index in srcColl.list_indexes():
srcIndexes.append(index["name"])
for index in dstColl.list_indexes():
dstIndexes.append(index["name"])
if len(set(srcIndexes).difference(set(dstIndexes))):
log_error("DIFF => collection [%s] has diffrence indexes. \nsrc[%s], \ndst[%s]" % (coll, srcIndexes, dstIndexes))
return False
log_info("EQUL => collection [%s] indexes equals. indexes[%s]" % (coll, srcIndexes))
return True