def _rebuild_couch_case_and_re_diff(self, couch_case, sql_case_json):
        from corehq.form_processor.backends.couch.processor import FormProcessorCouch
        from corehq.apps.tzmigration.timezonemigration import json_diff

        rebuilt_case = FormProcessorCouch.hard_rebuild_case(
            self.domain, couch_case['_id'], None, save=False, lock=False
        )
        rebuilt_case_json = rebuilt_case.to_json()
        diffs = json_diff(rebuilt_case_json, sql_case_json, track_list_indices=False)
        diffs = filter_case_diffs(
            rebuilt_case_json, sql_case_json, diffs, self.forms_that_touch_cases_without_actions
        )
        return rebuilt_case_json, diffs
Esempio n. 2
0
    def _rebuild_couch_case_and_re_diff(self, couch_case, sql_case_json):
        from corehq.form_processor.backends.couch.processor import FormProcessorCouch
        from corehq.apps.tzmigration.timezonemigration import json_diff

        rebuilt_case = FormProcessorCouch.hard_rebuild_case(
            self.domain, couch_case['_id'], None, save=False, lock=False
        )
        rebuilt_case_json = rebuilt_case.to_json()
        diffs = json_diff(rebuilt_case_json, sql_case_json, track_list_indices=False)
        diffs = filter_case_diffs(
            rebuilt_case_json, sql_case_json, diffs, self.forms_that_touch_cases_without_actions
        )
        return rebuilt_case_json, diffs
Esempio n. 3
0
def rebuild_couch_case_and_re_diff(couch_case, sql_case_json, statedb):
    assert couch_case["domain"] == sql_case_json["domain"], \
        (couch_case["domain"], sql_case_json["domain"])
    rebuilt_case = FormProcessorCouch.hard_rebuild_case(couch_case["domain"],
                                                        couch_case['_id'],
                                                        None,
                                                        save=False,
                                                        lock=False)
    rebuilt_case_json = rebuilt_case.to_json()
    diffs = json_diff(rebuilt_case_json,
                      sql_case_json,
                      track_list_indices=False)
    diffs = filter_case_diffs(rebuilt_case_json, sql_case_json, diffs, statedb)
    return rebuilt_case_json, diffs
Esempio n. 4
0
def diff_case(sql_case, couch_case, dd_count):
    def diff(couch_json, sql_json):
        diffs = json_diff(couch_json, sql_json, track_list_indices=False)
        return filter_case_diffs(couch_json, sql_json, diffs, _diff_state)
    case_id = couch_case['_id']
    sql_json = sql_case.to_json()
    dd_count("commcare.couchsqlmigration.case.diffed")
    diffs = check_domains(case_id, couch_case, sql_json)
    if diffs:
        dd_count("commcare.couchsqlmigration.case.has_diff")
        return couch_case, diffs
    diffs = diff(couch_case, sql_json)
    if diffs:
        domain = couch_case["domain"]
        try:
            with convert_rebuild_error():
                couch_case = FormProcessorCouch.hard_rebuild_case(
                    domain, case_id, None, save=False, lock=False
                ).to_json()
            dd_count("commcare.couchsqlmigration.case.rebuild.couch")
            diffs = diff(couch_case, sql_json)
            if diffs:
                if should_sort_sql_transactions(sql_case, couch_case):
                    with convert_rebuild_error():
                        sql_case = rebuild_case_with_couch_action_order(sql_case)
                    dd_count("commcare.couchsqlmigration.case.rebuild.sql.sort")
                    diffs = diff(couch_case, sql_case.to_json())
                elif not was_rebuilt(sql_case):
                    with convert_rebuild_error():
                        sql_case = rebuild_case(sql_case)
                    dd_count("commcare.couchsqlmigration.case.rebuild.sql")
                    diffs = diff(couch_case, sql_case.to_json())
        except RebuildError as err:
            dd_count("commcare.couchsqlmigration.case.rebuild.error")
            log.warning(f"Case {case_id} rebuild -> {err}")
    if diffs:
        dd_count("commcare.couchsqlmigration.case.has_diff")
    return couch_case, diffs
Esempio n. 5
0
def hard_rebuild(couch_case):
    return FormProcessorCouch.hard_rebuild_case(couch_case["domain"],
                                                couch_case['_id'],
                                                None,
                                                save=False,
                                                lock=False).to_json()