def check()

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