in core/lib/payload/copy.py [0:0]
def detailed_checksum(self):
"""
Yet another way of calculating checksum but it opens a longer trx
than the default approach. By doing this we will able to print out
the exact chunk of data that caused a checksum mismatch
"""
affected_rows = 1
use_where = False
new_idx_for_checksum = self.find_coverage_index()
old_idx_for_checksum = "PRIMARY"
chunk_id = 0
while affected_rows:
chunk_id += 1
old_checksum = self.checksum_for_single_chunk(
self.table_name, use_where, old_idx_for_checksum
)
new_checksum = self.checksum_for_single_chunk(
self.new_table_name, use_where, new_idx_for_checksum
)
affected_rows = old_checksum["_osc_chunk_cnt"]
# Need to convert to List here because dict_values type will always
# claim two sides as different
if list(old_checksum.values()) != list(new_checksum.values()):
log.info("Checksum mismatch detected for chunk {}: ".format(chunk_id))
log.info("OLD: {}".format(str(old_checksum)))
log.info("NEW: {}".format(str(new_checksum)))
self.dump_current_chunk(use_where)
raise OSCError("CHECKSUM_MISMATCH")
# Refresh where condition range for next select
if affected_rows:
self.refresh_range_start()
use_where = True