Comment 4 for bug 2007643

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to swift (master)

Reviewed: https://review.opendev.org/c/openstack/swift/+/874122
Committed: https://opendev.org/openstack/swift/commit/2fe18b24cd7e709c8712fcda7369b0715a21fb89
Submitter: "Zuul (22348)"
Branch: master

commit 2fe18b24cd7e709c8712fcda7369b0715a21fb89
Author: Alistair Coles <email address hidden>
Date: Thu Feb 16 18:39:36 2023 +0000

    ssync: fix decoding of ts_meta when ts_data has offset

    The SsyncSender encodes object file timestamps in a compact form and
    the SsyncReceiver decodes the timestamps and compares them to its
    object file set.

    The encoding represents the meta file timestamp as a delta from the
    data file timestamp, NOT INCLUDING the data file timestamp offset.

    Previously, the decoding was erroneously calculating the meta file
    timestamp as the sum of the delta plus the data file timestamp
    INCLUDING the offset.

    For example, if the SssyncSender has object file timestamps:

      ts_data = t0_1.data
      ts_meta = t1.data

    then the receiver would erroneously perceive that the sender has:

      ts_data = t0_1.data
      ts_meta = t1_1.data

    As described in the referenced bug report, this erroneous decoding
    could cause the SsyncReceiver to request that the SsyncSender sync an
    object that is already in sync, which results in a 409 Conflict at the
    receiver. The 409 causes the ssync session to terminate, and the same
    process repeats on the next attempt.

    Closes-Bug: #2007643
    Co-Authored-By: Clay Gerrard <email address hidden>
    Change-Id: I74a0aac0ac29577026743f87f4b654d85e8fcc80