Skip to content

Conversation

@sacOO7
Copy link
Collaborator

@sacOO7 sacOO7 commented Aug 6, 2025

Summary by CodeRabbit

  • New Features

    • Added support for tracking deletion timestamps for live objects and map entries, improving accuracy and traceability of object removal events.
  • Bug Fixes

    • Ensured that tombstone (deletion) timestamps are consistently set based on available data, falling back to the current time if not provided.
  • Tests

    • Expanded and updated tests to validate correct handling of deletion events and accurate timestamp assignment for tombstoned objects and map entries.

sacOO7 added 4 commits August 1, 2025 14:30
…ne serial support

- Added tombstone serial tracking to ObjectMessage for server-provided serials
- Updated ObjectsManager to handle tombstone serial in object processing
- Enhanced MsgpackSerialization to support tombstone serial deserialization
- Modified BaseLiveObject to incorporate tombstone serial in state management
…ial handling

- Modified DefaultLiveCounter to support server-provided tombstone serials
- Enhanced LiveCounterManager with tombstone serial processing logic
- Updated DefaultLiveMap to handle tombstone serial in map operations
- Improved LiveMapManager with comprehensive tombstone serial support
… functionality

- Enhanced DefaultLiveObjectsTest with tombstone serial test scenarios
- Updated integration helpers with tombstone serial utilities
- Added TestHelpers support for tombstone serial testing
- Improved ObjectsManagerTest with tombstone serial validation
…verage

- Added extensive unit tests for LiveCounterManager tombstone serial handling
- Enhanced LiveMapManagerTest with comprehensive tombstone serial scenarios
- Updated DefaultLiveCounterTest and DefaultLiveMapTest for tombstone serial validation
- Implemented thorough test coverage for server-provided tombstone serial functionality
@coderabbitai
Copy link

coderabbitai bot commented Aug 6, 2025

Walkthrough

This change introduces a server-provided serialTimestamp field to ObjectMessage and ObjectMapEntry classes, integrates its handling throughout serialization, deserialization, and state management logic, and updates tombstone timestamping to use this value where available. Related method signatures and test cases are updated accordingly to support and verify this new timestamp propagation.

Changes

Cohort / File(s) Change Summary
Add serialTimestamp to core data classes
live-objects/src/main/kotlin/io/ably/lib/objects/ObjectMessage.kt
Added nullable serialTimestamp property to ObjectMessage and ObjectMapEntry for server-provided tombstone timestamps.
Serialization/Deserialization updates
live-objects/src/main/kotlin/io/ably/lib/objects/serialization/MsgpackSerialization.kt
Integrated serialTimestamp into Msgpack serialization/deserialization for both ObjectMessage and ObjectMapEntry.
Sync pool and manager logic updates
live-objects/src/main/kotlin/io/ably/lib/objects/ObjectsManager.kt
Changed sync data pool to store ObjectMessage instead of ObjectState; updated usages to propagate serialTimestamp.
Base object and state handling
live-objects/src/main/kotlin/io/ably/lib/objects/type/BaseLiveObject.kt
Updated applyObjectSync, applyObjectState, and tombstone methods to handle serialTimestamp and pass it to lifecycle logic.
LiveCounter logic and manager
live-objects/src/main/kotlin/io/ably/lib/objects/type/livecounter/DefaultLiveCounter.kt,
live-objects/src/main/kotlin/io/ably/lib/objects/type/livecounter/LiveCounterManager.kt
Updated state/operation application to accept and use serialTimestamp for tombstoning; added helper for update calculation.
LiveMap logic and manager
live-objects/src/main/kotlin/io/ably/lib/objects/type/livemap/DefaultLiveMap.kt,
live-objects/src/main/kotlin/io/ably/lib/objects/type/livemap/LiveMapManager.kt
Updated state/operation application and tombstoning to use serialTimestamp when available; improved timestamp accuracy.
Integration and unit tests for timestamp/tombstone logic
live-objects/src/test/kotlin/io/ably/lib/objects/integration/DefaultLiveObjectsTest.kt,
live-objects/src/test/kotlin/io/ably/lib/objects/integration/helpers/Utils.kt,
live-objects/src/test/kotlin/io/ably/lib/objects/unit/TestHelpers.kt,
live-objects/src/test/kotlin/io/ably/lib/objects/unit/objects/ObjectsManagerTest.kt,
live-objects/src/test/kotlin/io/ably/lib/objects/unit/type/livecounter/DefaultLiveCounterTest.kt,
live-objects/src/test/kotlin/io/ably/lib/objects/unit/type/livecounter/LiveCounterManagerTest.kt,
live-objects/src/test/kotlin/io/ably/lib/objects/unit/type/livemap/DefaultLiveMapTest.kt,
live-objects/src/test/kotlin/io/ably/lib/objects/unit/type/livemap/LiveMapManagerTest.kt
Updated and expanded tests to verify correct propagation and usage of serialTimestamp for tombstoned objects and entries; added helpers and new test cases for timestamp handling.

Sequence Diagram(s)

sequenceDiagram
    participant Server
    participant Client
    participant ObjectsManager
    participant LiveObject
    participant LiveCounterManager/LiveMapManager

    Server->>Client: Sends ObjectMessage with serialTimestamp
    Client->>ObjectsManager: Receives ObjectMessage (with serialTimestamp)
    ObjectsManager->>LiveObject: applyObjectSync(ObjectMessage)
    LiveObject->>LiveCounterManager/LiveMapManager: applyState(objectState, serialTimestamp)
    LiveCounterManager/LiveMapManager->>LiveObject: Update tombstonedAt with serialTimestamp (if present)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Assessment against linked issues

Objective Addressed Explanation
Add server-provided timestamp (serialTimestamp) for tombstone handling in LiveObject and all related logic (ECO-5447, #1117)
Ensure tombstone timestamps use server-provided value where present, fallback to system time otherwise (ECO-5447, #1117)
Update serialization/deserialization and all state/operation methods to propagate and use serialTimestamp (ECO-5447, #1117)
Update and add tests to verify correct tombstone timestamp handling and propagation (ECO-5447, #1117)

Suggested reviewers

  • ttypic

Poem

A server’s clock now guides the tomb,
With serial timestamps sealing doom.
Our objects sleep, their time precise,
Swept away in code so nice.
The tests all cheer, the logic shines,
🕰️⏳—in Kotlin lines!
—From your CodeRabbit, with happy rhymes.

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/server-provided-tombstone-serial-refactored

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@sacOO7 sacOO7 changed the title Feature/server provided tombstone serial refactored [ECO-5447][LiveObjects] Use server-provided timestamp to sweep old tombstones Aug 6, 2025
@sacOO7 sacOO7 marked this pull request as ready for review August 7, 2025 02:58
@sacOO7 sacOO7 requested a review from ttypic August 7, 2025 08:04
Base automatically changed from feature/object-subscriptions-refactored to main August 8, 2025 14:23
@sacOO7 sacOO7 merged commit b3f8338 into main Aug 8, 2025
17 of 18 checks passed
@sacOO7 sacOO7 deleted the feature/server-provided-tombstone-serial-refactored branch August 8, 2025 14:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

LiveObject: server-provided timestamp to sweep old tombstones

3 participants