commit 681c1167a501aa2f35b856afec48480d776db43e
parent dd54c58cbc1993836b39ae625dd1c265d63dc5f1
Author: Michael Camilleri <[email protected]>
Date: Mon, 1 Jun 2026 17:06:29 +0900
Reduce log noise regarding settled journals
Diffstat:
1 file changed, 8 insertions(+), 0 deletions(-)
diff --git a/Crossmate/Sync/SyncEngine.swift b/Crossmate/Sync/SyncEngine.swift
@@ -1447,6 +1447,11 @@ actor SyncEngine {
for failure in event.failedRecordSaves {
let name = failure.record.recordID.recordName
let err = failure.error as NSError
+ // A settled failure is one CloudKit rejected but we treat as
+ // success (the durable record already exists), so it skips the
+ // verbose "failed to save" log below — that line reads as an
+ // error and is pure noise next to the "settled" message.
+ var settled = false
if err.domain == CKErrorDomain,
err.code == CKError.zoneNotFound.rawValue {
orphaned.insert(failure.record.recordID.zoneID)
@@ -1461,6 +1466,7 @@ actor SyncEngine {
// so this is success — drop the pending change so the
// immutable record doesn't retry-loop forever.
settledDecisions.insert(failure.record.recordID)
+ settled = true
messages.append("send: decision \(name) already present — settled")
} else if name.hasPrefix("journal-"),
err.domain == CKErrorDomain,
@@ -1478,12 +1484,14 @@ actor SyncEngine {
// sweep and `Pending Changes` never drains.
settledJournals.insert(failure.record.recordID)
self.markJournalUploaded(gameID: gid, in: ctx)
+ settled = true
messages.append("send: journal \(name) already present — settled")
} else if self.recoverServerChangedSave(failure.error, failedRecordName: name, in: ctx) {
messages.append(
"send: recovered stale system fields for \(name) from CloudKit server record"
)
}
+ guard !settled else { continue }
let userInfo = err.userInfo
.map { "\($0.key)=\($0.value)" }
.joined(separator: " | ")