• Amit Kapila's avatar
    Fix deadlock for multiple replicating truncates of the same table. · 6d0eb385
    Amit Kapila authored
    While applying the truncate change, the logical apply worker acquires
    RowExclusiveLock on the relation being truncated. This allowed truncate on
    the relation at a time by two apply workers which lead to a deadlock. The
    reason was that one of the workers after updating the pg_class tuple tries
    to acquire SHARE lock on the relation and started to wait for the second
    worker which has acquired RowExclusiveLock on the relation. And when the
    second worker tries to update the pg_class tuple, it starts to wait for
    the first worker which leads to a deadlock. Fix it by acquiring
    AccessExclusiveLock on the relation before applying the truncate change as
    we do for normal truncate operation.
    
    Author: Peter Smith, test case by Haiying Tang
    Reviewed-by: Dilip Kumar, Amit Kapila
    Backpatch-through: 11
    Discussion: https://postgr.es/m/CAHut+PsNm43p0jM+idTvWwiGZPcP0hGrHMPK9TOAkc+a4UpUqw@mail.gmail.com
    6d0eb385
010_truncate.pl 7.88 KB