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.
Reviewed: https:/ /review. opendev. org/c/openstack /swift/ +/874122 /opendev. org/openstack/ swift/commit/ 2fe18b24cd7e709 c8712fcda7369b0 715a21fb89
Committed: https:/
Submitter: "Zuul (22348)"
Branch: master
commit 2fe18b24cd7e709 c8712fcda7369b0 715a21fb89
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 7026743f87f4b65 4d85e8fcc80
Co-Authored-By: Clay Gerrard <email address hidden>
Change-Id: I74a0aac0ac2957