Skip to content

Commit 9ebc279

Browse files
Make "replace data" perform tombstoning when state indicates it
Based on spec referenced in 040987b; same comment re testing applies too.
1 parent 3970d76 commit 9ebc279

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

Sources/AblyLiveObjects/Internal/InternalDefaultLiveCounter.swift

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,12 @@ internal final class InternalDefaultLiveCounter: Sendable {
150150
objectMessageSerialTimestamp: Date?,
151151
) -> LiveObjectUpdate<DefaultLiveCounterUpdate> {
152152
mutex.withLock {
153-
mutableState.replaceData(using: state, objectMessageSerialTimestamp: objectMessageSerialTimestamp)
153+
mutableState.replaceData(
154+
using: state,
155+
objectMessageSerialTimestamp: objectMessageSerialTimestamp,
156+
logger: logger,
157+
clock: clock,
158+
)
154159
}
155160
}
156161

@@ -221,6 +226,8 @@ internal final class InternalDefaultLiveCounter: Sendable {
221226
internal mutating func replaceData(
222227
using state: ObjectState,
223228
objectMessageSerialTimestamp: Date?,
229+
logger: Logger,
230+
clock: SimpleClock,
224231
) -> LiveObjectUpdate<DefaultLiveCounterUpdate> {
225232
// RTLC6a: Replace the private siteTimeserials with the value from ObjectState.siteTimeserials
226233
liveObjectMutableState.siteTimeserials = state.siteTimeserials
@@ -230,6 +237,20 @@ internal final class InternalDefaultLiveCounter: Sendable {
230237
return .noop
231238
}
232239

240+
// RTLC6f: Tombstone if state indicates tombstoned
241+
if state.tombstone {
242+
let dataBeforeTombstoning = data
243+
244+
tombstone(
245+
objectMessageSerialTimestamp: objectMessageSerialTimestamp,
246+
logger: logger,
247+
clock: clock,
248+
)
249+
250+
// RTLC6f1
251+
return .update(.init(amount: -dataBeforeTombstoning))
252+
}
253+
233254
// RTLC6b: Set the private flag createOperationIsMerged to false
234255
liveObjectMutableState.createOperationIsMerged = false
235256

Sources/AblyLiveObjects/Internal/InternalDefaultLiveMap.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,20 @@ internal final class InternalDefaultLiveMap: Sendable {
378378
return .noop
379379
}
380380

381+
// RTLM6f: Tombstone if state indicates tombstoned
382+
if state.tombstone {
383+
let dataBeforeTombstoning = data
384+
385+
tombstone(
386+
objectMessageSerialTimestamp: objectMessageSerialTimestamp,
387+
logger: logger,
388+
clock: clock,
389+
)
390+
391+
// RTLM6f1
392+
return .update(.init(update: dataBeforeTombstoning.mapValues { _ in .removed }))
393+
}
394+
381395
// RTLM6b: Set the private flag createOperationIsMerged to false
382396
liveObjectMutableState.createOperationIsMerged = false
383397

0 commit comments

Comments
 (0)