Claiming rows: get_changes_from_queue(...) marks a batch by setting process_id and process_start_time (SELECT ... FOR UPDATE SKIP LOCKED), applying size and batching rules.
Decryption and split: writers decrypt data, split into new_records_df, updated_records_df, deleted_records_df.
Writing: writers publish to destination app, then delete processed rows via delete_changes_from_db(...).
Retry/control helpers:
unmark_changes_from_queue(...): clears process_id/process_start_time to release rows.
postpone_changes_processing(...): pushes process_start_time to the future.