Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prevent duplicate DocChangedEvents in batch processing #1173

Merged
merged 1 commit into from
Mar 4, 2025

Conversation

hackerwins
Copy link
Member

@hackerwins hackerwins commented Feb 28, 2025

What this PR does / why we need it:

Prevent duplicate DocChangedEvents in batch processing

If the queue contains multiple DocChangedEvents from the same publisher,
only two events are processed. This happens when a client attaches or
detaches a document, as the order of Changed and Watch/Unwatch events is
not guaranteed.

Which issue(s) this PR fixes:

Fixes #

Special notes for your reviewer:

Does this PR introduce a user-facing change?:


Additional documentation:


Checklist:

  • Added relevant tests or not required
  • Addressed and resolved all CodeRabbit review comments
  • Didn't break anything

Summary by CodeRabbit

  • Bug Fixes
    • Enhanced document event processing by filtering out duplicate triggers during batch operations. These changes ensure that document updates are reported accurately and efficiently, reducing redundant notifications and streamlining the update flow. These internal improvements optimize system performance and further enhance the overall user experience.

Copy link

coderabbitai bot commented Feb 28, 2025

Walkthrough

The pull request updates two areas. In the client code, added comments in the handleResponse function clarify the processing of document watch events when client presence is not available. In the server code, a new field is introduced to track the count of DocChangedEvent occurrences per publisher. The NewBatchPublisher function now initializes this map, and the Publish method is modified to check for duplicate events, returning early if more than one occurrence is detected, with the count being reset after each batch publish.

Changes

File Changes Summary
client/client.go Added comments in the handleResponse function to clarify the handling of DocWatchedEvent and DocUnwatchedEvent when client presence is missing.
server/backend/pubsub/publisher.go Added a new field docChangedCountMap to BatchPublisher, initialized it in NewBatchPublisher, and updated the Publish method to check for duplicate DocChangedEvent occurrences and reset the map after publishing.

Sequence Diagram(s)

sequenceDiagram
    participant Client as Client
    participant Pub as BatchPublisher
    participant Map as docChangedCountMap

    Client->>Pub: Publish(event: DocChangedEvent)
    Note right of Pub: Check if the event is a DocChangedEvent
    Pub->>Map: Retrieve current count for publisher ID
    alt Count exceeds threshold (>1)
        Pub-->>Client: Return early (skip duplicate event)
    else Count is acceptable
        Map-->>Pub: Return current count
        Pub->>Pub: Process and add the DocChangedEvent
    end
    Note right of Pub: After processing the batch
    Pub->>Map: Reset docChangedCountMap
Loading
✨ Finishing Touches
  • 📝 Generate Docstrings

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • 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 generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

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 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.

Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(c7797cf) and the current commit(b1ec942).

Significant Changes (≥20% difference)

Benchmark suite Previous Current Change
BenchmarkRPC/client_to_client_via_server/ (ns/op) 771.40 ms 481.50 ms 🟢 -37.58%
BenchmarkRPC/client_to_client_via_server/ (B/op) 39.09 MB 24.57 MB 🟢 -37.15%
BenchmarkRPC/client_to_client_via_server/ (allocs/op) 470,568 allocs 346,888 allocs 🟢 -26.28%
BenchmarkDocument/status_test/ (ns/op) 1334.00 ns 1067.00 ns 🟢 -20.01%

Key Observations 🔍

  • The BenchmarkRPC suite showed significant improvements in the client_to_client_via_server benchmarks, with a remarkable decrease in execution time, memory usage, and allocations. The client_to_client_via_server benchmarks saw reductions of approximately 37% in execution time, memory, and allocations, indicating substantial performance enhancements.
  • In the BenchmarkDocument suite, the status_test benchmark demonstrated a 20% decrease in execution time, showcasing improved efficiency in the status related operations.
  • Overall, the majority of benchmarks across different suites showed either minor improvements or remained relatively stable in terms of performance metrics. Notable decreases were observed in various benchmarks for different suites, indicating positive optimizations in processing times, memory usage, and allocation efficiency.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1472.00 ns 1474.00 ns 🔴 +0.14%
constructor_test/ (B/op) 1.43 KB 1.43 KB ⚪ 0%
constructor_test/ (allocs/op) 25 allocs 25 allocs ⚪ 0%
status_test/ (ns/op) 1334.00 ns 1067.00 ns 🟢 -20.01%
status_test/ (B/op) 1.40 KB 1.40 KB ⚪ 0%
status_test/ (allocs/op) 23 allocs 23 allocs ⚪ 0%
equals_test/ (ns/op) 7938.00 ns 7863.00 ns 🟢 -0.94%
equals_test/ (B/op) 7.71 KB 7.71 KB ⚪ 0%
equals_test/ (allocs/op) 132 allocs 132 allocs ⚪ 0%
nested_update_test/ (ns/op) 17081.00 ns 17042.00 ns 🟢 -0.23%
nested_update_test/ (B/op) 12.36 KB 12.36 KB ⚪ 0%
nested_update_test/ (allocs/op) 259 allocs 259 allocs ⚪ 0%
delete_test/ (ns/op) 22790.00 ns 22783.00 ns 🟢 -0.03%
delete_test/ (B/op) 15.84 KB 15.84 KB ⚪ 0%
delete_test/ (allocs/op) 340 allocs 340 allocs ⚪ 0%
object_test/ (ns/op) 8539.00 ns 8530.00 ns 🟢 -0.11%
object_test/ (B/op) 7.08 KB 7.08 KB 🔴 +0.01%
object_test/ (allocs/op) 119 allocs 119 allocs ⚪ 0%
array_test/ (ns/op) 28405.00 ns 31877.00 ns 🔴 +12.22%
array_test/ (B/op) 12.19 KB 12.19 KB ⚪ 0%
array_test/ (allocs/op) 274 allocs 274 allocs ⚪ 0%
text_test/ (ns/op) 31656.00 ns 32601.00 ns 🔴 +2.99%
text_test/ (B/op) 15.24 KB 15.24 KB ⚪ 0%
text_test/ (allocs/op) 485 allocs 485 allocs ⚪ 0%
text_composition_test/ (ns/op) 31389.00 ns 31556.00 ns 🔴 +0.53%
text_composition_test/ (B/op) 18.75 KB 18.75 KB ⚪ 0%
text_composition_test/ (allocs/op) 502 allocs 502 allocs ⚪ 0%
rich_text_test/ (ns/op) 86962.00 ns 84649.00 ns 🟢 -2.66%
rich_text_test/ (B/op) 39.41 KB 39.40 KB ⚪ 0%
rich_text_test/ (allocs/op) 1,147 allocs 1,147 allocs ⚪ 0%
counter_test/ (ns/op) 18075.00 ns 18249.00 ns 🔴 +0.96%
counter_test/ (B/op) 11.86 KB 11.86 KB ⚪ 0%
counter_test/ (allocs/op) 254 allocs 254 allocs ⚪ 0%
text_edit_gc_100/ (ns/op) 1.38 ms 1.37 ms 🟢 -0.80%
text_edit_gc_100/ (B/op) 864.90 KB 865.00 KB 🔴 +0.01%
text_edit_gc_100/ (allocs/op) 17,282 allocs 17,283 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 52.51 ms 52.19 ms 🟢 -0.61%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,593 allocs 185,599 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.09 ms 2.07 ms 🟢 -1.23%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,952 allocs 15,952 allocs ⚪ 0%
text_split_gc_1000/ (ns/op) 127.97 ms 128.60 ms 🔴 +0.49%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 184,998 allocs 184,990 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 16.81 ms 17.29 ms 🔴 +2.85%
text_delete_all_10000/ (B/op) 10.58 MB 10.58 MB 🔴 +0.01%
text_delete_all_10000/ (allocs/op) 56,138 allocs 56,139 allocs ⚪ 0%
text_delete_all_100000/ (ns/op) 290.19 ms 265.14 ms 🟢 -8.63%
text_delete_all_100000/ (B/op) 105.54 MB 105.52 MB 🟢 -0.02%
text_delete_all_100000/ (allocs/op) 566,122 allocs 566,057 allocs 🟢 -0.01%
text_100/ (ns/op) 228221.00 ns 240069.00 ns 🔴 +5.19%
text_100/ (B/op) 120.95 KB 120.99 KB 🔴 +0.03%
text_100/ (allocs/op) 5,182 allocs 5,182 allocs ⚪ 0%
text_1000/ (ns/op) 2.43 ms 2.50 ms 🔴 +2.96%
text_1000/ (B/op) 1.16 MB 1.16 MB ⚪ 0%
text_1000/ (allocs/op) 51,085 allocs 51,085 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.27 ms 🔴 +2.99%
array_1000/ (B/op) 1.09 MB 1.09 MB 🔴 +0.02%
array_1000/ (allocs/op) 11,880 allocs 11,880 allocs ⚪ 0%
array_10000/ (ns/op) 13.36 ms 13.54 ms 🔴 +1.38%
array_10000/ (B/op) 9.89 MB 9.89 MB 🟢 -0.01%
array_10000/ (allocs/op) 120,736 allocs 120,730 allocs ⚪ 0%
array_gc_100/ (ns/op) 131033.00 ns 136677.00 ns 🔴 +4.31%
array_gc_100/ (B/op) 99.93 KB 99.93 KB ⚪ 0%
array_gc_100/ (allocs/op) 1,267 allocs 1,267 allocs ⚪ 0%
array_gc_1000/ (ns/op) 1.41 ms 1.46 ms 🔴 +3.52%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,927 allocs 12,927 allocs ⚪ 0%
counter_1000/ (ns/op) 199973.00 ns 211508.00 ns 🔴 +5.77%
counter_1000/ (B/op) 178.18 KB 178.18 KB ⚪ 0%
counter_1000/ (allocs/op) 5,772 allocs 5,772 allocs ⚪ 0%
counter_10000/ (ns/op) 2.14 ms 2.19 ms 🔴 +2.44%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,779 allocs 59,779 allocs ⚪ 0%
object_1000/ (ns/op) 1.41 ms 1.46 ms 🔴 +3.44%
object_1000/ (B/op) 1.44 MB 1.44 MB ⚪ 0%
object_1000/ (allocs/op) 9,926 allocs 9,926 allocs ⚪ 0%
object_10000/ (ns/op) 14.97 ms 14.60 ms 🟢 -2.46%
object_10000/ (B/op) 12.35 MB 12.35 MB ⚪ 0%
object_10000/ (allocs/op) 101,232 allocs 101,233 allocs ⚪ 0%
tree_100/ (ns/op) 1.04 ms 1.07 ms 🔴 +3.58%
tree_100/ (B/op) 951.08 KB 951.08 KB ⚪ 0%
tree_100/ (allocs/op) 6,103 allocs 6,103 allocs ⚪ 0%
tree_1000/ (ns/op) 74.45 ms 79.33 ms 🔴 +6.56%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,113 allocs 60,112 allocs ⚪ 0%
tree_10000/ (ns/op) 9.39 s 9.59 s 🔴 +2.18%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,205 allocs 600,196 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 77.01 ms 79.71 ms 🔴 +3.50%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,291 allocs 75,291 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.83 ms 3.97 ms 🔴 +3.63%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,147 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 314.96 ms 326.53 ms 🔴 +3.67%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.04 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,937 allocs 154,941 allocs ⚪ 0%
tree_split_gc_100/ (ns/op) 2.59 ms 2.75 ms 🔴 +5.93%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,132 allocs 11,132 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 189.14 ms 204.27 ms 🔴 +8.00%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,064 allocs 122,078 allocs 🔴 +0.01%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 420.53 ms 414.48 ms 🟢 -1.44%
client_to_server/ (B/op) 17.87 MB 16.13 MB 🟢 -9.71%
client_to_server/ (allocs/op) 223,725 allocs 223,543 allocs 🟢 -0.08%
client_to_client_via_server/ (ns/op) 771.40 ms 481.50 ms 🟢 -37.58%
client_to_client_via_server/ (B/op) 39.09 MB 24.57 MB 🟢 -37.15%
client_to_client_via_server/ (allocs/op) 470,568 allocs 346,888 allocs 🟢 -26.28%
attach_large_document/ (ns/op) 1.26 s 1.29 s 🔴 +2.43%
attach_large_document/ (B/op) 1.90 GB 1.89 GB 🟢 -0.64%
attach_large_document/ (allocs/op) 12,439 allocs 12,118 allocs 🟢 -2.58%
adminCli_to_server/ (ns/op) 543.02 ms 537.10 ms 🟢 -1.09%
adminCli_to_server/ (B/op) 21.30 MB 21.31 MB 🔴 +0.02%
adminCli_to_server/ (allocs/op) 316,652 allocs 316,679 allocs ⚪ 0%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 85.81 ns 79.81 ns 🟢 -6.99%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.89 ns 44.75 ns 🟢 -2.48%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 187.90 ns 174.30 ns 🟢 -7.24%
(B/op) 30.00 B 31.00 B 🔴 +3.33%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.93 ns 48.96 ns 🟢 -3.87%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 45.77 ns 42.67 ns 🟢 -6.77%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 61.23 ns 57.91 ns 🟢 -5.42%
RWLock_rate_100/ (B/op) 2.00 B 2.00 B ⚪ 0%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 89.26 ns 87.21 ns 🟢 -2.30%
RWLock_rate_1000/ (B/op) 8.00 B 8.00 B ⚪ 0%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.49 ms 4.43 ms 🟢 -1.33%
Push_10_Changes/ (B/op) 150.94 KB 150.63 KB 🟢 -0.21%
Push_10_Changes/ (allocs/op) 1,625 allocs 1,625 allocs ⚪ 0%
Push_100_Changes/ (ns/op) 16.40 ms 15.76 ms 🟢 -3.90%
Push_100_Changes/ (B/op) 776.10 KB 772.20 KB 🟢 -0.50%
Push_100_Changes/ (allocs/op) 8,511 allocs 8,511 allocs ⚪ 0%
Push_1000_Changes/ (ns/op) 131.30 ms 127.32 ms 🟢 -3.03%
Push_1000_Changes/ (B/op) 7.18 MB 7.30 MB 🔴 +1.66%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,326 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.69 ms 3.62 ms 🟢 -1.79%
Pull_10_Changes/ (B/op) 124.60 KB 124.96 KB 🔴 +0.29%
Pull_10_Changes/ (allocs/op) 1,454 allocs 1,454 allocs ⚪ 0%
Pull_100_Changes/ (ns/op) 5.26 ms 5.17 ms 🟢 -1.63%
Pull_100_Changes/ (B/op) 354.65 KB 355.55 KB 🔴 +0.25%
Pull_100_Changes/ (allocs/op) 5,180 allocs 5,179 allocs 🟢 -0.02%
Pull_1000_Changes/ (ns/op) 10.49 ms 10.72 ms 🔴 +2.12%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB 🟢 -0.11%
Pull_1000_Changes/ (allocs/op) 44,680 allocs 44,680 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 18.53 ms 17.92 ms 🟢 -3.29%
Push_3KB_snapshot/ (B/op) 902.00 KB 898.59 KB 🟢 -0.38%
Push_3KB_snapshot/ (allocs/op) 8,514 allocs 8,512 allocs 🟢 -0.02%
Push_30KB_snapshot/ (ns/op) 132.49 ms 131.02 ms 🟢 -1.12%
Push_30KB_snapshot/ (B/op) 8.01 MB 8.33 MB 🔴 +3.95%
Push_30KB_snapshot/ (allocs/op) 86,458 allocs 89,964 allocs 🔴 +4.06%
Pull_3KB_snapshot/ (ns/op) 7.36 ms 7.25 ms 🟢 -1.49%
Pull_3KB_snapshot/ (B/op) 1.06 MB 1.06 MB 🔴 +0.16%
Pull_3KB_snapshot/ (allocs/op) 19,256 allocs 19,260 allocs 🔴 +0.02%
Pull_30KB_snapshot/ (ns/op) 19.29 ms 17.97 ms 🟢 -6.85%
Pull_30KB_snapshot/ (B/op) 8.77 MB 8.75 MB 🟢 -0.16%
Pull_30KB_snapshot/ (allocs/op) 185,629 allocs 185,664 allocs 🔴 +0.02%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.20 ns 0.19 ns 🟢 -3.58%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.38 ns 0.37 ns 🟢 -4.03%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.60 ns 0.57 ns 🟢 -5.95%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🟢 -5.15%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🔴 +11.32%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.04 ns 🔴 +4.37%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🟢 -3.59%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7057.00 ns 6904.00 ns 🟢 -2.17%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB 🟢 -0.07%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 54760.00 ns 54176.00 ns 🟢 -1.07%
memory_sync_100_test/ (B/op) 9.53 KB 9.51 KB 🟢 -0.24%
memory_sync_100_test/ (allocs/op) 269 allocs 268 allocs 🟢 -0.37%
memory_sync_1000_test/ (ns/op) 617621.00 ns 615047.00 ns 🟢 -0.42%
memory_sync_1000_test/ (B/op) 75.63 KB 75.30 KB 🟢 -0.44%
memory_sync_1000_test/ (allocs/op) 2,103 allocs 2,093 allocs 🟢 -0.48%
memory_sync_10000_test/ (ns/op) 7.83 ms 7.90 ms 🔴 +0.83%
memory_sync_10000_test/ (B/op) 752.23 KB 753.67 KB 🔴 +0.19%
memory_sync_10000_test/ (allocs/op) 20,417 allocs 20,431 allocs 🔴 +0.07%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.20 s 5.11 s 🟢 -1.69%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,784 allocs 20,619,832 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.29 ms 4.24 ms 🟢 -1.23%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 222.46 ms 221.04 ms 🟢 -0.64%
10000_vertices_from_protobuf/ (B/op) 442.31 MB 442.30 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,039 allocs 290,058 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 9.14 ms 8.71 ms 🟢 -4.71%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 877.37 ms 860.56 ms 🟢 -1.92%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,090 allocs 580,044 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 13.15 ms 13.43 ms 🔴 +2.14%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,030 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.02 s 1.97 s 🟢 -2.28%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,086 allocs 870,051 allocs ⚪ 0%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 157.85 ms 156.70 ms 🟢 -0.73%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 7.00 ms 7.00 ms ⚪ 0%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (B/op) 20.71 MB 20.70 MB 🟢 -0.05%
clients_10/ (allocs/op) 83,248 allocs 83,241 allocs ⚪ 0%
clients_100/ (ns/op) 1.39 s 1.37 s 🟢 -1.26%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 11.00 ms ⚪ 0%
clients_100/ (4_attach(ms)) 9.00 ms 9.00 ms ⚪ 0%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 10.00 ms 🔴 +11.11%
clients_100/ (B/op) 213.58 MB 210.99 MB 🟢 -1.21%
clients_100/ (allocs/op) 1,481,342 allocs 1,481,082 allocs 🟢 -0.02%
clients_1000/ (ns/op) 42.35 s 41.79 s 🟢 -1.33%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 116.00 ms 113.00 ms 🟢 -2.59%
clients_1000/ (4_attach(ms)) 72.00 ms 73.00 ms 🔴 +1.39%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 27.00 ms 22.00 ms 🟢 -18.52%
clients_1000/ (B/op) 6.43 GB 6.43 GB ⚪ 0%
clients_1000/ (allocs/op) 93,354,528 allocs 93,354,503 allocs ⚪ 0%

@hackerwins hackerwins force-pushed the ignored-dup-docchanged branch from 8e87c33 to 51705cd Compare March 4, 2025 03:19
Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(c7797cf) and the current commit(19bfc28).

Significant Changes (≥20% difference)

Benchmark suite Previous Current Change
BenchmarkRPC/client_to_client_via_server/ (ns/op) 771.40 ms 504.69 ms 🟢 -34.57%
BenchmarkRPC/client_to_client_via_server/ (B/op) 39.09 MB 26.06 MB 🟢 -33.34%
BenchmarkRPC/client_to_client_via_server/ (allocs/op) 470,568 allocs 323,612 allocs 🟢 -31.23%
BenchmarkVersionVector/clients_1000/ (7_pushpull_after_detach(ms)) 27.00 ms 21.00 ms 🟢 -22.22%

Key Observations 🔍

  • The benchmark suite BenchmarkVersionVector/clients_1000/ showed a significant improvement in the 7_pushpull_after_detach(ms) metric, decreasing by approximately 22.22%. This indicates a notable performance enhancement in client operations after detaching.
  • In the overall analysis of the data, several benchmarks across different suites demonstrated improvements ranging from 0.13% to 34.57%. These improvements were primarily seen in the reduction of time taken for operations (ns/op) and memory consumption (B/op), reflecting enhanced efficiency.
  • A few benchmarks, such as in BenchmarkTextEditing and BenchmarkVersionVector, experienced minor increases in performance metrics, indicating potential areas for optimization in specific test scenarios.

Clock Analysis

Lamport (v0.5.2)

Metric 10 clients 100 clients 1000 clients
Total Operation Time 84.96 ms 793.94 ms 34.79 s
Memory Allocations 35.11 MB 219.92 MB 4.91 GB
Number of Allocations (allocs/op) 69,271 1,246,728 81,485,288
ChangePack Size 138.0 B 137.0 B 141.0 B
Snapshot Size 379.0 B 3.08 KB 30.08 KB
Push-Pull Time 2.0 ms 1.5 ms 4.0 ms
Attach Time 4.5 ms 11.0 ms 31.0 ms
ChangePack After Detach 138.0 B 140.0 B 141.0 B
Snapshot After Detach 136.0 B 137.0 B 139.0 B
Push-Pull After Detach 2.5 ms 5.0 ms 9.5 ms

VV (current)

Metric 10 clients 100 clients 1000 clients
Total Operation Time 158.34 ms 1.40 s 42.59 s
Memory Allocations 20.95 MB 217.59 MB 6.43 GB
Number of Allocations (allocs/op) 83,272 1,481,562 93,354,434
ChangePack Size 745.00 B 6.14 KB 60.16 KB
Snapshot Size 379.00 B 3.08 KB 30.08 KB
Push-Pull Time 8.00 ms 10.00 ms 21.00 ms
Attach Time 6.00 ms 9.00 ms 71.00 ms
ChangePack After Detach 805.00 B 6.21 KB 60.22 KB
Snapshot After Detach 136.00 B 137.00 B 139.00 B
Push-Pull After Detach 8.00 ms 10.00 ms 21.00 ms

Summary

  • The Lamport clock generally performs better in terms of total operation time across all client scenarios compared to the Version Vector clock.
  • In terms of memory allocations, the Lamport clock shows higher memory footprint as the number of clients increases, whereas the Version Vector clock shows a more varied increase in memory usage.
  • The number of allocations per operation is significantly lower in the Lamport clock compared to the Version Vector clock, especially as the number of clients increases.
  • ChangePack size is consistently smaller in the Lamport clock than in the Version Vector clock across all client scenarios.
  • The Lamport clock generally outperforms in push-pull time compared to the Version Vector clock.
  • However, the Version Vector clock shows improvements in attach time after detach, maintaining a similar or lower time compared to the Lamport clock.
  • The Version Vector clock showcases better performance in push-pull after detach, especially with 1000 clients, where it demonstrates a significant improvement over the Lamport clock.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1472.00 ns 1464.00 ns 🟢 -0.54%
constructor_test/ (B/op) 1.43 KB 1.43 KB ⚪ 0%
constructor_test/ (allocs/op) 25 allocs 25 allocs ⚪ 0%
status_test/ (ns/op) 1334.00 ns 1080.00 ns 🟢 -19.04%
status_test/ (B/op) 1.40 KB 1.40 KB ⚪ 0%
status_test/ (allocs/op) 23 allocs 23 allocs ⚪ 0%
equals_test/ (ns/op) 7938.00 ns 7900.00 ns 🟢 -0.48%
equals_test/ (B/op) 7.71 KB 7.71 KB ⚪ 0%
equals_test/ (allocs/op) 132 allocs 132 allocs ⚪ 0%
nested_update_test/ (ns/op) 17081.00 ns 16894.00 ns 🟢 -1.09%
nested_update_test/ (B/op) 12.36 KB 12.36 KB ⚪ 0%
nested_update_test/ (allocs/op) 259 allocs 259 allocs ⚪ 0%
delete_test/ (ns/op) 22790.00 ns 22817.00 ns 🔴 +0.12%
delete_test/ (B/op) 15.84 KB 15.84 KB ⚪ 0%
delete_test/ (allocs/op) 340 allocs 340 allocs ⚪ 0%
object_test/ (ns/op) 8539.00 ns 8577.00 ns 🔴 +0.45%
object_test/ (B/op) 7.08 KB 7.08 KB 🔴 +0.01%
object_test/ (allocs/op) 119 allocs 119 allocs ⚪ 0%
array_test/ (ns/op) 28405.00 ns 28463.00 ns 🔴 +0.20%
array_test/ (B/op) 12.19 KB 12.19 KB ⚪ 0%
array_test/ (allocs/op) 274 allocs 274 allocs ⚪ 0%
text_test/ (ns/op) 31656.00 ns 37526.00 ns 🔴 +18.54%
text_test/ (B/op) 15.24 KB 15.24 KB ⚪ 0%
text_test/ (allocs/op) 485 allocs 485 allocs ⚪ 0%
text_composition_test/ (ns/op) 31389.00 ns 31472.00 ns 🔴 +0.26%
text_composition_test/ (B/op) 18.75 KB 18.75 KB ⚪ 0%
text_composition_test/ (allocs/op) 502 allocs 502 allocs ⚪ 0%
rich_text_test/ (ns/op) 86962.00 ns 86539.00 ns 🟢 -0.49%
rich_text_test/ (B/op) 39.41 KB 39.41 KB ⚪ 0%
rich_text_test/ (allocs/op) 1,147 allocs 1,147 allocs ⚪ 0%
counter_test/ (ns/op) 18075.00 ns 18044.00 ns 🟢 -0.17%
counter_test/ (B/op) 11.86 KB 11.86 KB ⚪ 0%
counter_test/ (allocs/op) 254 allocs 254 allocs ⚪ 0%
text_edit_gc_100/ (ns/op) 1.38 ms 1.38 ms 🟢 -0.42%
text_edit_gc_100/ (B/op) 864.90 KB 864.95 KB ⚪ 0%
text_edit_gc_100/ (allocs/op) 17,282 allocs 17,283 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 52.51 ms 51.96 ms 🟢 -1.04%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,593 allocs 185,599 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.09 ms 2.09 ms 🟢 -0.13%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,952 allocs 15,952 allocs ⚪ 0%
text_split_gc_1000/ (ns/op) 127.97 ms 128.04 ms 🔴 +0.06%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 184,998 allocs 184,996 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 16.81 ms 16.95 ms 🔴 +0.82%
text_delete_all_10000/ (B/op) 10.58 MB 10.58 MB 🔴 +0.03%
text_delete_all_10000/ (allocs/op) 56,138 allocs 56,146 allocs 🔴 +0.01%
text_delete_all_100000/ (ns/op) 290.19 ms 262.16 ms 🟢 -9.66%
text_delete_all_100000/ (B/op) 105.54 MB 105.52 MB 🟢 -0.02%
text_delete_all_100000/ (allocs/op) 566,122 allocs 566,072 allocs ⚪ 0%
text_100/ (ns/op) 228221.00 ns 233975.00 ns 🔴 +2.52%
text_100/ (B/op) 120.95 KB 120.99 KB 🔴 +0.03%
text_100/ (allocs/op) 5,182 allocs 5,182 allocs ⚪ 0%
text_1000/ (ns/op) 2.43 ms 2.45 ms 🔴 +0.75%
text_1000/ (B/op) 1.16 MB 1.16 MB ⚪ 0%
text_1000/ (allocs/op) 51,085 allocs 51,085 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.24 ms 🔴 +0.11%
array_1000/ (B/op) 1.09 MB 1.09 MB ⚪ 0%
array_1000/ (allocs/op) 11,880 allocs 11,880 allocs ⚪ 0%
array_10000/ (ns/op) 13.36 ms 13.38 ms 🔴 +0.20%
array_10000/ (B/op) 9.89 MB 9.89 MB ⚪ 0%
array_10000/ (allocs/op) 120,736 allocs 120,732 allocs ⚪ 0%
array_gc_100/ (ns/op) 131033.00 ns 132251.00 ns 🔴 +0.93%
array_gc_100/ (B/op) 99.93 KB 99.94 KB 🔴 +0.01%
array_gc_100/ (allocs/op) 1,267 allocs 1,267 allocs ⚪ 0%
array_gc_1000/ (ns/op) 1.41 ms 1.43 ms 🔴 +1.26%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,927 allocs 12,927 allocs ⚪ 0%
counter_1000/ (ns/op) 199973.00 ns 202552.00 ns 🔴 +1.29%
counter_1000/ (B/op) 178.18 KB 178.18 KB ⚪ 0%
counter_1000/ (allocs/op) 5,772 allocs 5,772 allocs ⚪ 0%
counter_10000/ (ns/op) 2.14 ms 2.17 ms 🔴 +1.48%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,779 allocs 59,779 allocs ⚪ 0%
object_1000/ (ns/op) 1.41 ms 1.41 ms 🟢 -0.09%
object_1000/ (B/op) 1.44 MB 1.44 MB ⚪ 0%
object_1000/ (allocs/op) 9,926 allocs 9,926 allocs ⚪ 0%
object_10000/ (ns/op) 14.97 ms 14.93 ms 🟢 -0.31%
object_10000/ (B/op) 12.35 MB 12.35 MB ⚪ 0%
object_10000/ (allocs/op) 101,232 allocs 101,231 allocs ⚪ 0%
tree_100/ (ns/op) 1.04 ms 1.02 ms 🟢 -1.20%
tree_100/ (B/op) 951.08 KB 951.08 KB ⚪ 0%
tree_100/ (allocs/op) 6,103 allocs 6,103 allocs ⚪ 0%
tree_1000/ (ns/op) 74.45 ms 74.90 ms 🔴 +0.61%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,113 allocs 60,113 allocs ⚪ 0%
tree_10000/ (ns/op) 9.39 s 9.45 s 🔴 +0.69%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,205 allocs 600,196 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 77.01 ms 76.55 ms 🟢 -0.60%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,291 allocs 75,290 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.83 ms 3.85 ms 🔴 +0.49%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,147 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 314.96 ms 316.88 ms 🔴 +0.61%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.04 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,937 allocs 154,943 allocs ⚪ 0%
tree_split_gc_100/ (ns/op) 2.59 ms 2.61 ms 🔴 +0.76%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,132 allocs 11,132 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 189.14 ms 190.65 ms 🔴 +0.79%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,064 allocs 122,059 allocs ⚪ 0%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 420.53 ms 418.29 ms 🟢 -0.53%
client_to_server/ (B/op) 17.87 MB 16.14 MB 🟢 -9.70%
client_to_server/ (allocs/op) 223,725 allocs 223,539 allocs 🟢 -0.08%
client_to_client_via_server/ (ns/op) 771.40 ms 504.69 ms 🟢 -34.57%
client_to_client_via_server/ (B/op) 39.09 MB 26.06 MB 🟢 -33.34%
client_to_client_via_server/ (allocs/op) 470,568 allocs 323,612 allocs 🟢 -31.23%
attach_large_document/ (ns/op) 1.26 s 1.27 s 🔴 +0.73%
attach_large_document/ (B/op) 1.90 GB 1.92 GB 🔴 +1.24%
attach_large_document/ (allocs/op) 12,439 allocs 12,221 allocs 🟢 -1.75%
adminCli_to_server/ (ns/op) 543.02 ms 538.75 ms 🟢 -0.79%
adminCli_to_server/ (B/op) 21.30 MB 21.30 MB ⚪ 0%
adminCli_to_server/ (allocs/op) 316,652 allocs 316,674 allocs ⚪ 0%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 85.81 ns 80.49 ns 🟢 -6.20%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.89 ns 45.05 ns 🟢 -1.83%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 187.90 ns 178.10 ns 🟢 -5.22%
(B/op) 30.00 B 31.00 B 🔴 +3.33%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.93 ns 49.06 ns 🟢 -3.67%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 45.77 ns 43.78 ns 🟢 -4.35%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 61.23 ns 59.85 ns 🟢 -2.25%
RWLock_rate_100/ (B/op) 2.00 B 2.00 B ⚪ 0%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 89.26 ns 88.20 ns 🟢 -1.19%
RWLock_rate_1000/ (B/op) 8.00 B 8.00 B ⚪ 0%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.49 ms 4.46 ms 🟢 -0.64%
Push_10_Changes/ (B/op) 150.94 KB 150.59 KB 🟢 -0.23%
Push_10_Changes/ (allocs/op) 1,625 allocs 1,625 allocs ⚪ 0%
Push_100_Changes/ (ns/op) 16.40 ms 16.41 ms 🔴 +0.07%
Push_100_Changes/ (B/op) 776.10 KB 785.67 KB 🔴 +1.23%
Push_100_Changes/ (allocs/op) 8,511 allocs 8,513 allocs 🔴 +0.02%
Push_1000_Changes/ (ns/op) 131.30 ms 132.06 ms 🔴 +0.58%
Push_1000_Changes/ (B/op) 7.18 MB 7.19 MB 🔴 +0.15%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,326 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.69 ms 3.67 ms 🟢 -0.41%
Pull_10_Changes/ (B/op) 124.60 KB 124.65 KB 🔴 +0.04%
Pull_10_Changes/ (allocs/op) 1,454 allocs 1,454 allocs ⚪ 0%
Pull_100_Changes/ (ns/op) 5.26 ms 5.24 ms 🟢 -0.45%
Pull_100_Changes/ (B/op) 354.65 KB 354.95 KB 🔴 +0.08%
Pull_100_Changes/ (allocs/op) 5,180 allocs 5,180 allocs ⚪ 0%
Pull_1000_Changes/ (ns/op) 10.49 ms 10.68 ms 🔴 +1.77%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB 🔴 +0.07%
Pull_1000_Changes/ (allocs/op) 44,680 allocs 44,684 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 18.53 ms 18.72 ms 🔴 +1.02%
Push_3KB_snapshot/ (B/op) 902.00 KB 899.30 KB 🟢 -0.30%
Push_3KB_snapshot/ (allocs/op) 8,514 allocs 8,513 allocs 🟢 -0.01%
Push_30KB_snapshot/ (ns/op) 132.49 ms 136.93 ms 🔴 +3.35%
Push_30KB_snapshot/ (B/op) 8.01 MB 8.19 MB 🔴 +2.25%
Push_30KB_snapshot/ (allocs/op) 86,458 allocs 87,899 allocs 🔴 +1.67%
Pull_3KB_snapshot/ (ns/op) 7.36 ms 7.28 ms 🟢 -1.07%
Pull_3KB_snapshot/ (B/op) 1.06 MB 1.06 MB ⚪ 0%
Pull_3KB_snapshot/ (allocs/op) 19,256 allocs 19,251 allocs 🟢 -0.03%
Pull_30KB_snapshot/ (ns/op) 19.29 ms 18.87 ms 🟢 -2.19%
Pull_30KB_snapshot/ (B/op) 8.77 MB 8.77 MB 🟢 -0.01%
Pull_30KB_snapshot/ (allocs/op) 185,629 allocs 185,670 allocs 🔴 +0.02%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.20 ns 0.19 ns 🟢 -5.01%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.38 ns 0.38 ns 🟢 -1.70%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.60 ns 0.61 ns 🔴 +1.86%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🟢 -1.43%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🔴 +15.74%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.04 ns 🔴 +1.67%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🔴 +0.47%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7057.00 ns 7134.00 ns 🔴 +1.09%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB 🟢 -0.07%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 54760.00 ns 55747.00 ns 🔴 +1.80%
memory_sync_100_test/ (B/op) 9.53 KB 9.50 KB 🟢 -0.39%
memory_sync_100_test/ (allocs/op) 269 allocs 268 allocs 🟢 -0.37%
memory_sync_1000_test/ (ns/op) 617621.00 ns 623110.00 ns 🔴 +0.89%
memory_sync_1000_test/ (B/op) 75.63 KB 76.10 KB 🔴 +0.62%
memory_sync_1000_test/ (allocs/op) 2,103 allocs 2,115 allocs 🔴 +0.57%
memory_sync_10000_test/ (ns/op) 7.83 ms 7.64 ms 🟢 -2.51%
memory_sync_10000_test/ (B/op) 752.23 KB 763.86 KB 🔴 +1.55%
memory_sync_10000_test/ (allocs/op) 20,417 allocs 20,508 allocs 🔴 +0.45%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.20 s 5.22 s 🔴 +0.40%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,784 allocs 20,619,745 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.29 ms 4.13 ms 🟢 -3.76%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 222.46 ms 220.49 ms 🟢 -0.89%
10000_vertices_from_protobuf/ (B/op) 442.31 MB 442.30 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,039 allocs 290,039 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 9.14 ms 9.05 ms 🟢 -0.92%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 877.37 ms 891.97 ms 🔴 +1.66%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,090 allocs 580,044 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 13.15 ms 14.13 ms 🔴 +7.48%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,029 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.02 s 1.98 s 🟢 -2.02%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,086 allocs 870,137 allocs ⚪ 0%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 157.85 ms 158.34 ms 🔴 +0.31%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 7.00 ms 8.00 ms 🔴 +14.29%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (B/op) 20.71 MB 20.95 MB 🔴 +1.14%
clients_10/ (allocs/op) 83,248 allocs 83,272 allocs 🔴 +0.03%
clients_100/ (ns/op) 1.39 s 1.40 s 🔴 +0.97%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 11.00 ms ⚪ 0%
clients_100/ (4_attach(ms)) 9.00 ms 9.00 ms ⚪ 0%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 10.00 ms 🔴 +11.11%
clients_100/ (B/op) 213.58 MB 217.59 MB 🔴 +1.88%
clients_100/ (allocs/op) 1,481,342 allocs 1,481,562 allocs 🔴 +0.01%
clients_1000/ (ns/op) 42.35 s 42.59 s 🔴 +0.58%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 116.00 ms 114.00 ms 🟢 -1.72%
clients_1000/ (4_attach(ms)) 72.00 ms 71.00 ms 🟢 -1.39%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 27.00 ms 21.00 ms 🟢 -22.22%
clients_1000/ (B/op) 6.43 GB 6.43 GB 🔴 +0.03%
clients_1000/ (allocs/op) 93,354,528 allocs 93,354,434 allocs ⚪ 0%

Copy link

codecov bot commented Mar 4, 2025

Codecov Report

Attention: Patch coverage is 41.66667% with 14 lines in your changes missing coverage. Please review.

Project coverage is 38.27%. Comparing base (c7797cf) to head (3c429b0).
Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
client/client.go 0.00% 8 Missing ⚠️
server/backend/pubsub/publisher.go 62.50% 5 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1173      +/-   ##
==========================================
- Coverage   38.28%   38.27%   -0.02%     
==========================================
  Files         171      171              
  Lines       25775    25793      +18     
==========================================
+ Hits         9867     9871       +4     
- Misses      15075    15088      +13     
- Partials      833      834       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@hackerwins hackerwins force-pushed the ignored-dup-docchanged branch from 51705cd to 988c848 Compare March 4, 2025 03:27
Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(c7797cf) and the current commit(9fdc840).

Significant Changes (≥20% difference)

Benchmark suite Previous Current Change
BenchmarkSplayTree/editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🔴 +44.01%
BenchmarkRPC/client_to_client_via_server/ (B/op) 39.09 MB 26.60 MB 🟢 -31.94%
BenchmarkRPC/client_to_client_via_server/ (ns/op) 771.40 ms 526.38 ms 🟢 -31.76%
BenchmarkRPC/client_to_client_via_server/ (allocs/op) 470,568 allocs 332,487 allocs 🟢 -29.34%

Key Observations 🔍

  • The most significant changes observed in the benchmark data are:

    1. BenchmarkSplayTree/editing_trace_bench/
      • There was a 44.01% increase in the time taken per operation, indicating a significant performance degradation in editing trace operations.
    2. BenchmarkRPC/client_to_client_via_server/
      • The memory consumption decreased by 31.94% and the time per operation decreased by 31.76%, showing improved efficiency in client-to-client communication via the server.
    3. BenchmarkRPC/client_to_client_via_server/
      • The number of allocations per operation decreased by 29.34%, reflecting a more optimized memory usage in client-to-client communication.
  • Overall, several benchmarks showed slight improvements or deteriorations:

    • Some benchmarks demonstrated consistent performance based on time per operation, memory usage, and allocations per operation.
  • Notable Trend:

    • The BenchmarkDocument suite showed variations across different test scenarios, with some operations improving (🟢) or deteriorating (🔴) in performance, albeit not significantly.

Overall, while certain benchmarks exhibited significant improvements or deteriorations, the majority of the data showed relatively stable performance levels with minor fluctuations.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1472.00 ns 1475.00 ns 🔴 +0.20%
constructor_test/ (B/op) 1.43 KB 1.43 KB ⚪ 0%
constructor_test/ (allocs/op) 25 allocs 25 allocs ⚪ 0%
status_test/ (ns/op) 1334.00 ns 1076.00 ns 🟢 -19.34%
status_test/ (B/op) 1.40 KB 1.40 KB ⚪ 0%
status_test/ (allocs/op) 23 allocs 23 allocs ⚪ 0%
equals_test/ (ns/op) 7938.00 ns 7942.00 ns 🔴 +0.05%
equals_test/ (B/op) 7.71 KB 7.71 KB ⚪ 0%
equals_test/ (allocs/op) 132 allocs 132 allocs ⚪ 0%
nested_update_test/ (ns/op) 17081.00 ns 19891.00 ns 🔴 +16.45%
nested_update_test/ (B/op) 12.36 KB 12.36 KB ⚪ 0%
nested_update_test/ (allocs/op) 259 allocs 259 allocs ⚪ 0%
delete_test/ (ns/op) 22790.00 ns 22873.00 ns 🔴 +0.36%
delete_test/ (B/op) 15.84 KB 15.84 KB ⚪ 0%
delete_test/ (allocs/op) 340 allocs 340 allocs ⚪ 0%
object_test/ (ns/op) 8539.00 ns 8603.00 ns 🔴 +0.75%
object_test/ (B/op) 7.08 KB 7.08 KB ⚪ 0%
object_test/ (allocs/op) 119 allocs 119 allocs ⚪ 0%
array_test/ (ns/op) 28405.00 ns 29440.00 ns 🔴 +3.64%
array_test/ (B/op) 12.19 KB 12.19 KB ⚪ 0%
array_test/ (allocs/op) 274 allocs 274 allocs ⚪ 0%
text_test/ (ns/op) 31656.00 ns 37787.00 ns 🔴 +19.37%
text_test/ (B/op) 15.24 KB 15.24 KB ⚪ 0%
text_test/ (allocs/op) 485 allocs 485 allocs ⚪ 0%
text_composition_test/ (ns/op) 31389.00 ns 31575.00 ns 🔴 +0.59%
text_composition_test/ (B/op) 18.75 KB 18.75 KB ⚪ 0%
text_composition_test/ (allocs/op) 502 allocs 502 allocs ⚪ 0%
rich_text_test/ (ns/op) 86962.00 ns 87116.00 ns 🔴 +0.18%
rich_text_test/ (B/op) 39.41 KB 39.40 KB ⚪ 0%
rich_text_test/ (allocs/op) 1,147 allocs 1,147 allocs ⚪ 0%
counter_test/ (ns/op) 18075.00 ns 18198.00 ns 🔴 +0.68%
counter_test/ (B/op) 11.86 KB 11.86 KB ⚪ 0%
counter_test/ (allocs/op) 254 allocs 254 allocs ⚪ 0%
text_edit_gc_100/ (ns/op) 1.38 ms 1.39 ms 🔴 +0.31%
text_edit_gc_100/ (B/op) 864.90 KB 864.98 KB ⚪ 0%
text_edit_gc_100/ (allocs/op) 17,282 allocs 17,282 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 52.51 ms 53.08 ms 🔴 +1.09%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,593 allocs 185,591 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.09 ms 2.12 ms 🔴 +1.10%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,952 allocs 15,952 allocs ⚪ 0%
text_split_gc_1000/ (ns/op) 127.97 ms 127.59 ms 🟢 -0.30%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 184,998 allocs 184,999 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 16.81 ms 16.82 ms 🔴 +0.05%
text_delete_all_10000/ (B/op) 10.58 MB 10.57 MB 🟢 -0.02%
text_delete_all_10000/ (allocs/op) 56,138 allocs 56,129 allocs 🟢 -0.02%
text_delete_all_100000/ (ns/op) 290.19 ms 307.43 ms 🔴 +5.94%
text_delete_all_100000/ (B/op) 105.54 MB 105.54 MB ⚪ 0%
text_delete_all_100000/ (allocs/op) 566,122 allocs 566,121 allocs ⚪ 0%
text_100/ (ns/op) 228221.00 ns 235963.00 ns 🔴 +3.39%
text_100/ (B/op) 120.95 KB 120.99 KB 🔴 +0.03%
text_100/ (allocs/op) 5,182 allocs 5,182 allocs ⚪ 0%
text_1000/ (ns/op) 2.43 ms 2.47 ms 🔴 +1.55%
text_1000/ (B/op) 1.16 MB 1.16 MB ⚪ 0%
text_1000/ (allocs/op) 51,085 allocs 51,085 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.24 ms 🔴 +0.52%
array_1000/ (B/op) 1.09 MB 1.09 MB 🔴 +0.01%
array_1000/ (allocs/op) 11,880 allocs 11,880 allocs ⚪ 0%
array_10000/ (ns/op) 13.36 ms 13.44 ms 🔴 +0.63%
array_10000/ (B/op) 9.89 MB 9.89 MB 🟢 -0.01%
array_10000/ (allocs/op) 120,736 allocs 120,732 allocs ⚪ 0%
array_gc_100/ (ns/op) 131033.00 ns 132138.00 ns 🔴 +0.84%
array_gc_100/ (B/op) 99.93 KB 99.93 KB ⚪ 0%
array_gc_100/ (allocs/op) 1,267 allocs 1,267 allocs ⚪ 0%
array_gc_1000/ (ns/op) 1.41 ms 1.43 ms 🔴 +1.38%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,927 allocs 12,927 allocs ⚪ 0%
counter_1000/ (ns/op) 199973.00 ns 205483.00 ns 🔴 +2.76%
counter_1000/ (B/op) 178.18 KB 178.18 KB ⚪ 0%
counter_1000/ (allocs/op) 5,772 allocs 5,772 allocs ⚪ 0%
counter_10000/ (ns/op) 2.14 ms 2.17 ms 🔴 +1.46%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,779 allocs 59,779 allocs ⚪ 0%
object_1000/ (ns/op) 1.41 ms 1.42 ms 🔴 +0.67%
object_1000/ (B/op) 1.44 MB 1.44 MB 🟢 -0.02%
object_1000/ (allocs/op) 9,926 allocs 9,925 allocs 🟢 -0.01%
object_10000/ (ns/op) 14.97 ms 15.04 ms 🔴 +0.42%
object_10000/ (B/op) 12.35 MB 12.35 MB ⚪ 0%
object_10000/ (allocs/op) 101,232 allocs 101,229 allocs ⚪ 0%
tree_100/ (ns/op) 1.04 ms 1.03 ms 🟢 -0.35%
tree_100/ (B/op) 951.08 KB 951.08 KB ⚪ 0%
tree_100/ (allocs/op) 6,103 allocs 6,103 allocs ⚪ 0%
tree_1000/ (ns/op) 74.45 ms 76.93 ms 🔴 +3.34%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,113 allocs 60,112 allocs ⚪ 0%
tree_10000/ (ns/op) 9.39 s 9.75 s 🔴 +3.86%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,205 allocs 600,158 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 77.01 ms 78.99 ms 🔴 +2.57%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,291 allocs 75,290 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.83 ms 3.85 ms 🔴 +0.57%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,147 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 314.96 ms 316.64 ms 🔴 +0.53%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.04 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,937 allocs 154,931 allocs ⚪ 0%
tree_split_gc_100/ (ns/op) 2.59 ms 2.62 ms 🔴 +1.14%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,132 allocs 11,132 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 189.14 ms 192.87 ms 🔴 +1.97%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,064 allocs 122,084 allocs 🔴 +0.02%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 420.53 ms 424.95 ms 🔴 +1.05%
client_to_server/ (B/op) 17.87 MB 17.92 MB 🔴 +0.26%
client_to_server/ (allocs/op) 223,725 allocs 223,725 allocs ⚪ 0%
client_to_client_via_server/ (ns/op) 771.40 ms 526.38 ms 🟢 -31.76%
client_to_client_via_server/ (B/op) 39.09 MB 26.60 MB 🟢 -31.94%
client_to_client_via_server/ (allocs/op) 470,568 allocs 332,487 allocs 🟢 -29.34%
attach_large_document/ (ns/op) 1.26 s 1.31 s 🔴 +3.93%
attach_large_document/ (B/op) 1.90 GB 1.92 GB 🔴 +1.29%
attach_large_document/ (allocs/op) 12,439 allocs 12,384 allocs 🟢 -0.44%
adminCli_to_server/ (ns/op) 543.02 ms 544.57 ms 🔴 +0.29%
adminCli_to_server/ (B/op) 21.30 MB 22.52 MB 🔴 +5.72%
adminCli_to_server/ (allocs/op) 316,652 allocs 316,678 allocs ⚪ 0%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 85.81 ns 80.85 ns 🟢 -5.78%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.89 ns 47.57 ns 🔴 +3.66%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 187.90 ns 177.50 ns 🟢 -5.53%
(B/op) 30.00 B 31.00 B 🔴 +3.33%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.93 ns 49.92 ns 🟢 -1.98%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 45.77 ns 46.35 ns 🔴 +1.27%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 61.23 ns 62.65 ns 🔴 +2.32%
RWLock_rate_100/ (B/op) 2.00 B 2.00 B ⚪ 0%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 89.26 ns 98.76 ns 🔴 +10.64%
RWLock_rate_1000/ (B/op) 8.00 B 9.00 B 🔴 +12.50%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.49 ms 4.50 ms 🔴 +0.38%
Push_10_Changes/ (B/op) 150.94 KB 150.48 KB 🟢 -0.31%
Push_10_Changes/ (allocs/op) 1,625 allocs 1,625 allocs ⚪ 0%
Push_100_Changes/ (ns/op) 16.40 ms 16.11 ms 🟢 -1.79%
Push_100_Changes/ (B/op) 776.10 KB 773.24 KB 🟢 -0.37%
Push_100_Changes/ (allocs/op) 8,511 allocs 8,513 allocs 🔴 +0.02%
Push_1000_Changes/ (ns/op) 131.30 ms 128.83 ms 🟢 -1.88%
Push_1000_Changes/ (B/op) 7.18 MB 7.21 MB 🔴 +0.50%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,325 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.69 ms 3.70 ms 🔴 +0.23%
Pull_10_Changes/ (B/op) 124.60 KB 124.12 KB 🟢 -0.38%
Pull_10_Changes/ (allocs/op) 1,454 allocs 1,454 allocs ⚪ 0%
Pull_100_Changes/ (ns/op) 5.26 ms 5.23 ms 🟢 -0.53%
Pull_100_Changes/ (B/op) 354.65 KB 353.82 KB 🟢 -0.24%
Pull_100_Changes/ (allocs/op) 5,180 allocs 5,180 allocs ⚪ 0%
Pull_1000_Changes/ (ns/op) 10.49 ms 10.64 ms 🔴 +1.40%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB 🟢 -0.18%
Pull_1000_Changes/ (allocs/op) 44,680 allocs 44,678 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 18.53 ms 18.45 ms 🟢 -0.41%
Push_3KB_snapshot/ (B/op) 902.00 KB 899.35 KB 🟢 -0.29%
Push_3KB_snapshot/ (allocs/op) 8,514 allocs 8,516 allocs 🔴 +0.02%
Push_30KB_snapshot/ (ns/op) 132.49 ms 132.05 ms 🟢 -0.34%
Push_30KB_snapshot/ (B/op) 8.01 MB 8.14 MB 🔴 +1.61%
Push_30KB_snapshot/ (allocs/op) 86,458 allocs 86,955 allocs 🔴 +0.57%
Pull_3KB_snapshot/ (ns/op) 7.36 ms 7.27 ms 🟢 -1.18%
Pull_3KB_snapshot/ (B/op) 1.06 MB 1.06 MB 🟢 -0.06%
Pull_3KB_snapshot/ (allocs/op) 19,256 allocs 19,258 allocs 🔴 +0.01%
Pull_30KB_snapshot/ (ns/op) 19.29 ms 19.30 ms 🔴 +0.04%
Pull_30KB_snapshot/ (B/op) 8.77 MB 8.77 MB ⚪ 0%
Pull_30KB_snapshot/ (allocs/op) 185,629 allocs 185,674 allocs 🔴 +0.02%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.20 ns 0.19 ns 🟢 -1.17%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.38 ns 0.38 ns 🔴 +0.76%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.60 ns 0.57 ns 🟢 -5.29%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🔴 +2.38%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.03 ns 🔴 +18.46%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.04 ns 🔴 +0.81%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🔴 +44.01%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7057.00 ns 7314.00 ns 🔴 +3.64%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB 🟢 -0.07%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 54760.00 ns 55719.00 ns 🔴 +1.75%
memory_sync_100_test/ (B/op) 9.53 KB 9.52 KB 🟢 -0.18%
memory_sync_100_test/ (allocs/op) 269 allocs 268 allocs 🟢 -0.37%
memory_sync_1000_test/ (ns/op) 617621.00 ns 624502.00 ns 🔴 +1.11%
memory_sync_1000_test/ (B/op) 75.63 KB 75.30 KB 🟢 -0.44%
memory_sync_1000_test/ (allocs/op) 2,103 allocs 2,092 allocs 🟢 -0.52%
memory_sync_10000_test/ (ns/op) 7.83 ms 7.96 ms 🔴 +1.58%
memory_sync_10000_test/ (B/op) 752.23 KB 754.39 KB 🔴 +0.29%
memory_sync_10000_test/ (allocs/op) 20,417 allocs 20,443 allocs 🔴 +0.13%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.20 s 5.28 s 🔴 +1.49%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,784 allocs 20,619,747 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.29 ms 4.22 ms 🟢 -1.65%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 222.46 ms 223.08 ms 🔴 +0.28%
10000_vertices_from_protobuf/ (B/op) 442.31 MB 442.30 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,039 allocs 290,039 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 9.14 ms 9.27 ms 🔴 +1.42%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 877.37 ms 876.41 ms 🟢 -0.11%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,090 allocs 580,090 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 13.15 ms 14.20 ms 🔴 +8.02%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,029 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.02 s 2.04 s 🔴 +0.98%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,086 allocs 870,147 allocs ⚪ 0%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 157.85 ms 159.90 ms 🔴 +1.30%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 7.00 ms 8.00 ms 🔴 +14.29%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (B/op) 20.71 MB 18.59 MB 🟢 -10.27%
clients_10/ (allocs/op) 83,248 allocs 82,822 allocs 🟢 -0.51%
clients_100/ (ns/op) 1.39 s 1.42 s 🔴 +2.50%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 12.00 ms 🔴 +9.09%
clients_100/ (4_attach(ms)) 9.00 ms 9.00 ms ⚪ 0%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 9.00 ms ⚪ 0%
clients_100/ (B/op) 213.58 MB 215.06 MB 🔴 +0.69%
clients_100/ (allocs/op) 1,481,342 allocs 1,478,287 allocs 🟢 -0.21%
clients_1000/ (ns/op) 42.35 s 42.51 s 🔴 +0.38%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 116.00 ms 112.00 ms 🟢 -3.45%
clients_1000/ (4_attach(ms)) 72.00 ms 72.00 ms ⚪ 0%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 27.00 ms 22.00 ms 🟢 -18.52%
clients_1000/ (B/op) 6.43 GB 6.43 GB 🟢 -0.02%
clients_1000/ (allocs/op) 93,354,528 allocs 93,346,821 allocs ⚪ 0%

@hackerwins hackerwins force-pushed the ignored-dup-docchanged branch from 988c848 to 3c429b0 Compare March 4, 2025 04:58
Copy link

@hackerwins-yorkie hackerwins-yorkie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go Benchmark Analysis 📊

This is a comparison result between the previous(c7797cf) and the current commit(784caa3).

Significant Changes (≥20% difference)

Benchmark suite Previous Current Change
BenchmarkSplayTree/random_access_200000/ (ns/op) 0.03 ns 0.04 ns 🔴 +29.19%
BenchmarkRPC/client_to_client_via_server/ (allocs/op) 470,568 allocs 339,647 allocs 🟢 -27.82%
BenchmarkRPC/client_to_client_via_server/ (ns/op) 771.40 ms 557.42 ms 🟢 -27.74%
BenchmarkRPC/client_to_client_via_server/ (B/op) 39.09 MB 28.74 MB 🟢 -26.47%
BenchmarkSplayTree/random_access_300000/ (ns/op) 0.04 ns 0.05 ns 🔴 +20.21%

Key Observations 🔍

  • The benchmark suite BenchmarkSplayTree/random_access_200000/ showed a significant increase of 29.19% in the operation time from 0.03 ns to 0.04 ns, indicating a performance degradation.
  • The benchmark suite BenchmarkRPC/client_to_client_via_server/ demonstrated improvements across multiple metrics, with reductions in allocations, bytes allocated, and time taken, ranging from 26.47% to 27.82%.
  • Overall, there were mixed results in the benchmark data, with some benchmarks showing improvements (🟢), some showing degradations (🔴), and others remaining relatively stable (⚪). No consistent trend was observed across all benchmark suites.

Detailed Test Results

BenchmarkDocument
Benchmark suite Previous Current Change
constructor_test/ (ns/op) 1472.00 ns 1485.00 ns 🔴 +0.88%
constructor_test/ (B/op) 1.43 KB 1.43 KB ⚪ 0%
constructor_test/ (allocs/op) 25 allocs 25 allocs ⚪ 0%
status_test/ (ns/op) 1334.00 ns 1107.00 ns 🟢 -17.02%
status_test/ (B/op) 1.40 KB 1.40 KB ⚪ 0%
status_test/ (allocs/op) 23 allocs 23 allocs ⚪ 0%
equals_test/ (ns/op) 7938.00 ns 8080.00 ns 🔴 +1.79%
equals_test/ (B/op) 7.71 KB 7.71 KB ⚪ 0%
equals_test/ (allocs/op) 132 allocs 132 allocs ⚪ 0%
nested_update_test/ (ns/op) 17081.00 ns 17439.00 ns 🔴 +2.10%
nested_update_test/ (B/op) 12.36 KB 12.36 KB ⚪ 0%
nested_update_test/ (allocs/op) 259 allocs 259 allocs ⚪ 0%
delete_test/ (ns/op) 22790.00 ns 25981.00 ns 🔴 +14.00%
delete_test/ (B/op) 15.84 KB 15.84 KB ⚪ 0%
delete_test/ (allocs/op) 340 allocs 340 allocs ⚪ 0%
object_test/ (ns/op) 8539.00 ns 8689.00 ns 🔴 +1.76%
object_test/ (B/op) 7.08 KB 7.08 KB ⚪ 0%
object_test/ (allocs/op) 119 allocs 119 allocs ⚪ 0%
array_test/ (ns/op) 28405.00 ns 29042.00 ns 🔴 +2.24%
array_test/ (B/op) 12.19 KB 12.19 KB ⚪ 0%
array_test/ (allocs/op) 274 allocs 274 allocs ⚪ 0%
text_test/ (ns/op) 31656.00 ns 32543.00 ns 🔴 +2.80%
text_test/ (B/op) 15.24 KB 15.24 KB ⚪ 0%
text_test/ (allocs/op) 485 allocs 485 allocs ⚪ 0%
text_composition_test/ (ns/op) 31389.00 ns 32421.00 ns 🔴 +3.29%
text_composition_test/ (B/op) 18.75 KB 18.75 KB ⚪ 0%
text_composition_test/ (allocs/op) 502 allocs 502 allocs ⚪ 0%
rich_text_test/ (ns/op) 86962.00 ns 87552.00 ns 🔴 +0.68%
rich_text_test/ (B/op) 39.41 KB 39.41 KB ⚪ 0%
rich_text_test/ (allocs/op) 1,147 allocs 1,147 allocs ⚪ 0%
counter_test/ (ns/op) 18075.00 ns 18493.00 ns 🔴 +2.31%
counter_test/ (B/op) 11.86 KB 11.86 KB ⚪ 0%
counter_test/ (allocs/op) 254 allocs 254 allocs ⚪ 0%
text_edit_gc_100/ (ns/op) 1.38 ms 1.40 ms 🔴 +1.65%
text_edit_gc_100/ (B/op) 864.90 KB 864.97 KB ⚪ 0%
text_edit_gc_100/ (allocs/op) 17,282 allocs 17,283 allocs ⚪ 0%
text_edit_gc_1000/ (ns/op) 52.51 ms 53.98 ms 🔴 +2.80%
text_edit_gc_1000/ (B/op) 46.84 MB 46.84 MB ⚪ 0%
text_edit_gc_1000/ (allocs/op) 185,593 allocs 185,594 allocs ⚪ 0%
text_split_gc_100/ (ns/op) 2.09 ms 2.13 ms 🔴 +1.56%
text_split_gc_100/ (B/op) 1.58 MB 1.58 MB ⚪ 0%
text_split_gc_100/ (allocs/op) 15,952 allocs 15,951 allocs ⚪ 0%
text_split_gc_1000/ (ns/op) 127.97 ms 130.60 ms 🔴 +2.05%
text_split_gc_1000/ (B/op) 137.79 MB 137.79 MB ⚪ 0%
text_split_gc_1000/ (allocs/op) 184,998 allocs 185,004 allocs ⚪ 0%
text_delete_all_10000/ (ns/op) 16.81 ms 17.39 ms 🔴 +3.42%
text_delete_all_10000/ (B/op) 10.58 MB 10.58 MB ⚪ 0%
text_delete_all_10000/ (allocs/op) 56,138 allocs 56,138 allocs ⚪ 0%
text_delete_all_100000/ (ns/op) 290.19 ms 288.32 ms 🟢 -0.65%
text_delete_all_100000/ (B/op) 105.54 MB 105.54 MB ⚪ 0%
text_delete_all_100000/ (allocs/op) 566,122 allocs 566,107 allocs ⚪ 0%
text_100/ (ns/op) 228221.00 ns 236958.00 ns 🔴 +3.83%
text_100/ (B/op) 120.95 KB 120.99 KB 🔴 +0.03%
text_100/ (allocs/op) 5,182 allocs 5,182 allocs ⚪ 0%
text_1000/ (ns/op) 2.43 ms 2.51 ms 🔴 +3.09%
text_1000/ (B/op) 1.16 MB 1.16 MB ⚪ 0%
text_1000/ (allocs/op) 51,085 allocs 51,085 allocs ⚪ 0%
array_1000/ (ns/op) 1.24 ms 1.25 ms 🔴 +0.86%
array_1000/ (B/op) 1.09 MB 1.09 MB ⚪ 0%
array_1000/ (allocs/op) 11,880 allocs 11,880 allocs ⚪ 0%
array_10000/ (ns/op) 13.36 ms 13.58 ms 🔴 +1.64%
array_10000/ (B/op) 9.89 MB 9.89 MB ⚪ 0%
array_10000/ (allocs/op) 120,736 allocs 120,739 allocs ⚪ 0%
array_gc_100/ (ns/op) 131033.00 ns 132935.00 ns 🔴 +1.45%
array_gc_100/ (B/op) 99.93 KB 99.92 KB ⚪ 0%
array_gc_100/ (allocs/op) 1,267 allocs 1,267 allocs ⚪ 0%
array_gc_1000/ (ns/op) 1.41 ms 1.43 ms 🔴 +1.53%
array_gc_1000/ (B/op) 1.14 MB 1.14 MB ⚪ 0%
array_gc_1000/ (allocs/op) 12,927 allocs 12,927 allocs ⚪ 0%
counter_1000/ (ns/op) 199973.00 ns 203682.00 ns 🔴 +1.85%
counter_1000/ (B/op) 178.18 KB 178.18 KB ⚪ 0%
counter_1000/ (allocs/op) 5,772 allocs 5,772 allocs ⚪ 0%
counter_10000/ (ns/op) 2.14 ms 2.23 ms 🔴 +4.06%
counter_10000/ (B/op) 2.07 MB 2.07 MB ⚪ 0%
counter_10000/ (allocs/op) 59,779 allocs 59,779 allocs ⚪ 0%
object_1000/ (ns/op) 1.41 ms 1.41 ms 🔴 +0.46%
object_1000/ (B/op) 1.44 MB 1.44 MB ⚪ 0%
object_1000/ (allocs/op) 9,926 allocs 9,926 allocs ⚪ 0%
object_10000/ (ns/op) 14.97 ms 14.76 ms 🟢 -1.44%
object_10000/ (B/op) 12.35 MB 12.35 MB 🟢 -0.01%
object_10000/ (allocs/op) 101,232 allocs 101,227 allocs ⚪ 0%
tree_100/ (ns/op) 1.04 ms 1.03 ms 🟢 -0.38%
tree_100/ (B/op) 951.08 KB 951.08 KB ⚪ 0%
tree_100/ (allocs/op) 6,103 allocs 6,103 allocs ⚪ 0%
tree_1000/ (ns/op) 74.45 ms 74.93 ms 🔴 +0.65%
tree_1000/ (B/op) 86.58 MB 86.58 MB ⚪ 0%
tree_1000/ (allocs/op) 60,113 allocs 60,113 allocs ⚪ 0%
tree_10000/ (ns/op) 9.39 s 9.53 s 🔴 +1.54%
tree_10000/ (B/op) 8.58 GB 8.58 GB ⚪ 0%
tree_10000/ (allocs/op) 600,205 allocs 600,191 allocs ⚪ 0%
tree_delete_all_1000/ (ns/op) 77.01 ms 78.04 ms 🔴 +1.33%
tree_delete_all_1000/ (B/op) 87.57 MB 87.57 MB ⚪ 0%
tree_delete_all_1000/ (allocs/op) 75,291 allocs 75,288 allocs ⚪ 0%
tree_edit_gc_100/ (ns/op) 3.83 ms 3.92 ms 🔴 +2.24%
tree_edit_gc_100/ (B/op) 4.15 MB 4.15 MB ⚪ 0%
tree_edit_gc_100/ (allocs/op) 15,147 allocs 15,147 allocs ⚪ 0%
tree_edit_gc_1000/ (ns/op) 314.96 ms 315.79 ms 🔴 +0.26%
tree_edit_gc_1000/ (B/op) 384.04 MB 384.04 MB ⚪ 0%
tree_edit_gc_1000/ (allocs/op) 154,937 allocs 154,953 allocs 🔴 +0.01%
tree_split_gc_100/ (ns/op) 2.59 ms 2.65 ms 🔴 +2.07%
tree_split_gc_100/ (B/op) 2.41 MB 2.41 MB ⚪ 0%
tree_split_gc_100/ (allocs/op) 11,132 allocs 11,132 allocs ⚪ 0%
tree_split_gc_1000/ (ns/op) 189.14 ms 191.20 ms 🔴 +1.09%
tree_split_gc_1000/ (B/op) 222.50 MB 222.50 MB ⚪ 0%
tree_split_gc_1000/ (allocs/op) 122,064 allocs 122,065 allocs ⚪ 0%
BenchmarkRPC
Benchmark suite Previous Current Change
client_to_server/ (ns/op) 420.53 ms 438.32 ms 🔴 +4.23%
client_to_server/ (B/op) 17.87 MB 16.13 MB 🟢 -9.74%
client_to_server/ (allocs/op) 223,725 allocs 223,512 allocs 🟢 -0.10%
client_to_client_via_server/ (ns/op) 771.40 ms 557.42 ms 🟢 -27.74%
client_to_client_via_server/ (B/op) 39.09 MB 28.74 MB 🟢 -26.47%
client_to_client_via_server/ (allocs/op) 470,568 allocs 339,647 allocs 🟢 -27.82%
attach_large_document/ (ns/op) 1.26 s 1.32 s 🔴 +5.05%
attach_large_document/ (B/op) 1.90 GB 1.91 GB 🔴 +0.56%
attach_large_document/ (allocs/op) 12,439 allocs 12,253 allocs 🟢 -1.50%
adminCli_to_server/ (ns/op) 543.02 ms 570.51 ms 🔴 +5.06%
adminCli_to_server/ (B/op) 21.30 MB 21.49 MB 🔴 +0.87%
adminCli_to_server/ (allocs/op) 316,652 allocs 316,702 allocs 🔴 +0.02%
BenchmarkLocker
Benchmark suite Previous Current Change
(ns/op) 85.81 ns 81.64 ns 🟢 -4.86%
(B/op) 32.00 B 32.00 B ⚪ 0%
(allocs/op) 1 allocs 1 allocs ⚪ 0%
BenchmarkLockerParallel
Benchmark suite Previous Current Change
(ns/op) 45.89 ns 53.93 ns 🔴 +17.52%
(B/op) 0.00 B 0.00 B ⚪ 0%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkLockerMoreKeys
Benchmark suite Previous Current Change
(ns/op) 187.90 ns 190.90 ns 🔴 +1.60%
(B/op) 30.00 B 31.00 B 🔴 +3.33%
(allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkRWLocker
Benchmark suite Previous Current Change
RWLock_rate_2/ (ns/op) 50.93 ns 57.02 ns 🔴 +11.96%
RWLock_rate_2/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_2/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_10/ (ns/op) 45.77 ns 51.72 ns 🔴 +13.00%
RWLock_rate_10/ (B/op) 0.00 B 0.00 B ⚪ 0%
RWLock_rate_10/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_100/ (ns/op) 61.23 ns 67.49 ns 🔴 +10.22%
RWLock_rate_100/ (B/op) 2.00 B 2.00 B ⚪ 0%
RWLock_rate_100/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
RWLock_rate_1000/ (ns/op) 89.26 ns 95.81 ns 🔴 +7.34%
RWLock_rate_1000/ (B/op) 8.00 B 8.00 B ⚪ 0%
RWLock_rate_1000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkChange
Benchmark suite Previous Current Change
Push_10_Changes/ (ns/op) 4.49 ms 4.67 ms 🔴 +3.97%
Push_10_Changes/ (B/op) 150.94 KB 150.38 KB 🟢 -0.37%
Push_10_Changes/ (allocs/op) 1,625 allocs 1,624 allocs 🟢 -0.06%
Push_100_Changes/ (ns/op) 16.40 ms 16.10 ms 🟢 -1.83%
Push_100_Changes/ (B/op) 776.10 KB 776.04 KB ⚪ 0%
Push_100_Changes/ (allocs/op) 8,511 allocs 8,513 allocs 🔴 +0.02%
Push_1000_Changes/ (ns/op) 131.30 ms 126.97 ms 🟢 -3.30%
Push_1000_Changes/ (B/op) 7.18 MB 7.19 MB 🔴 +0.12%
Push_1000_Changes/ (allocs/op) 79,325 allocs 79,329 allocs ⚪ 0%
Pull_10_Changes/ (ns/op) 3.69 ms 3.82 ms 🔴 +3.64%
Pull_10_Changes/ (B/op) 124.60 KB 123.57 KB 🟢 -0.83%
Pull_10_Changes/ (allocs/op) 1,454 allocs 1,454 allocs ⚪ 0%
Pull_100_Changes/ (ns/op) 5.26 ms 5.40 ms 🔴 +2.69%
Pull_100_Changes/ (B/op) 354.65 KB 352.73 KB 🟢 -0.54%
Pull_100_Changes/ (allocs/op) 5,180 allocs 5,180 allocs ⚪ 0%
Pull_1000_Changes/ (ns/op) 10.49 ms 11.07 ms 🔴 +5.44%
Pull_1000_Changes/ (B/op) 2.20 MB 2.20 MB 🟢 -0.11%
Pull_1000_Changes/ (allocs/op) 44,680 allocs 44,682 allocs ⚪ 0%
BenchmarkSnapshot
Benchmark suite Previous Current Change
Push_3KB_snapshot/ (ns/op) 18.53 ms 18.43 ms 🟢 -0.51%
Push_3KB_snapshot/ (B/op) 902.00 KB 897.62 KB 🟢 -0.49%
Push_3KB_snapshot/ (allocs/op) 8,514 allocs 8,518 allocs 🔴 +0.05%
Push_30KB_snapshot/ (ns/op) 132.49 ms 130.04 ms 🟢 -1.86%
Push_30KB_snapshot/ (B/op) 8.01 MB 8.17 MB 🔴 +2.06%
Push_30KB_snapshot/ (allocs/op) 86,458 allocs 88,911 allocs 🔴 +2.84%
Pull_3KB_snapshot/ (ns/op) 7.36 ms 7.41 ms 🔴 +0.70%
Pull_3KB_snapshot/ (B/op) 1.06 MB 1.06 MB 🟢 -0.28%
Pull_3KB_snapshot/ (allocs/op) 19,256 allocs 19,252 allocs 🟢 -0.02%
Pull_30KB_snapshot/ (ns/op) 19.29 ms 19.33 ms 🔴 +0.19%
Pull_30KB_snapshot/ (B/op) 8.77 MB 8.76 MB 🟢 -0.03%
Pull_30KB_snapshot/ (allocs/op) 185,629 allocs 185,672 allocs 🔴 +0.02%
BenchmarkSplayTree
Benchmark suite Previous Current Change
stress_test_100000/ (ns/op) 0.20 ns 0.19 ns 🟢 -3.73%
stress_test_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_200000/ (ns/op) 0.38 ns 0.38 ns 🟢 -1.10%
stress_test_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
stress_test_300000/ (ns/op) 0.60 ns 0.58 ns 🟢 -3.29%
stress_test_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
stress_test_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_100000/ (ns/op) 0.01 ns 0.01 ns 🟢 -1.27%
random_access_100000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_100000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_200000/ (ns/op) 0.03 ns 0.04 ns 🔴 +29.19%
random_access_200000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_200000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
random_access_300000/ (ns/op) 0.04 ns 0.05 ns 🔴 +20.21%
random_access_300000/ (B/op) 0.00 B 0.00 B ⚪ 0%
random_access_300000/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
editing_trace_bench/ (ns/op) 0.00 ns 0.00 ns 🟢 -12.82%
editing_trace_bench/ (B/op) 0.00 B 0.00 B ⚪ 0%
editing_trace_bench/ (allocs/op) 0 allocs 0 allocs ⚪ 0%
BenchmarkSync
Benchmark suite Previous Current Change
memory_sync_10_test/ (ns/op) 7057.00 ns 7311.00 ns 🔴 +3.60%
memory_sync_10_test/ (B/op) 1.34 KB 1.34 KB ⚪ 0%
memory_sync_10_test/ (allocs/op) 35 allocs 35 allocs ⚪ 0%
memory_sync_100_test/ (ns/op) 54760.00 ns 55661.00 ns 🔴 +1.65%
memory_sync_100_test/ (B/op) 9.53 KB 9.51 KB 🟢 -0.27%
memory_sync_100_test/ (allocs/op) 269 allocs 268 allocs 🟢 -0.37%
memory_sync_1000_test/ (ns/op) 617621.00 ns 619259.00 ns 🔴 +0.27%
memory_sync_1000_test/ (B/op) 75.63 KB 75.77 KB 🔴 +0.18%
memory_sync_1000_test/ (allocs/op) 2,103 allocs 2,105 allocs 🔴 +0.10%
memory_sync_10000_test/ (ns/op) 7.83 ms 7.67 ms 🟢 -2.08%
memory_sync_10000_test/ (B/op) 752.23 KB 756.94 KB 🔴 +0.63%
memory_sync_10000_test/ (allocs/op) 20,417 allocs 20,471 allocs 🔴 +0.26%
BenchmarkTextEditing
Benchmark suite Previous Current Change
(ns/op) 5.20 s 5.18 s 🟢 -0.46%
(B/op) 3.92 GB 3.92 GB ⚪ 0%
(allocs/op) 20,619,784 allocs 20,619,749 allocs ⚪ 0%
BenchmarkTree
Benchmark suite Previous Current Change
10000_vertices_to_protobuf/ (ns/op) 4.29 ms 4.23 ms 🟢 -1.44%
10000_vertices_to_protobuf/ (B/op) 6.36 MB 6.36 MB ⚪ 0%
10000_vertices_to_protobuf/ (allocs/op) 70,025 allocs 70,025 allocs ⚪ 0%
10000_vertices_from_protobuf/ (ns/op) 222.46 ms 220.00 ms 🟢 -1.11%
10000_vertices_from_protobuf/ (B/op) 442.31 MB 442.31 MB ⚪ 0%
10000_vertices_from_protobuf/ (allocs/op) 290,039 allocs 290,057 allocs ⚪ 0%
20000_vertices_to_protobuf/ (ns/op) 9.14 ms 9.34 ms 🔴 +2.21%
20000_vertices_to_protobuf/ (B/op) 12.89 MB 12.89 MB ⚪ 0%
20000_vertices_to_protobuf/ (allocs/op) 140,028 allocs 140,028 allocs ⚪ 0%
20000_vertices_from_protobuf/ (ns/op) 877.37 ms 876.77 ms 🟢 -0.07%
20000_vertices_from_protobuf/ (B/op) 1.70 GB 1.70 GB ⚪ 0%
20000_vertices_from_protobuf/ (allocs/op) 580,090 allocs 580,045 allocs ⚪ 0%
30000_vertices_to_protobuf/ (ns/op) 13.15 ms 14.22 ms 🔴 +8.18%
30000_vertices_to_protobuf/ (B/op) 18.98 MB 18.98 MB ⚪ 0%
30000_vertices_to_protobuf/ (allocs/op) 210,029 allocs 210,029 allocs ⚪ 0%
30000_vertices_from_protobuf/ (ns/op) 2.02 s 1.99 s 🟢 -1.65%
30000_vertices_from_protobuf/ (B/op) 3.75 GB 3.75 GB ⚪ 0%
30000_vertices_from_protobuf/ (allocs/op) 870,086 allocs 870,049 allocs ⚪ 0%
BenchmarkVersionVector
Benchmark suite Previous Current Change
clients_10/ (ns/op) 157.85 ms 161.21 ms 🔴 +2.13%
clients_10/ (1_changepack(bytes)) 745.00 B 745.00 B ⚪ 0%
clients_10/ (2_snapshot(bytes)) 379.00 B 379.00 B ⚪ 0%
clients_10/ (3_pushpull(ms)) 7.00 ms 8.00 ms 🔴 +14.29%
clients_10/ (4_attach(ms)) 6.00 ms 6.00 ms ⚪ 0%
clients_10/ (5_changepack_after_detach(bytes)) 805.00 B 805.00 B ⚪ 0%
clients_10/ (6_snapshot_after_detach(bytes)) 136.00 B 136.00 B ⚪ 0%
clients_10/ (7_pushpull_after_detach(ms)) 8.00 ms 8.00 ms ⚪ 0%
clients_10/ (B/op) 20.71 MB 17.92 MB 🟢 -13.51%
clients_10/ (allocs/op) 83,248 allocs 83,184 allocs 🟢 -0.08%
clients_100/ (ns/op) 1.39 s 1.44 s 🔴 +4.00%
clients_100/ (1_changepack(bytes)) 6.14 KB 6.14 KB ⚪ 0%
clients_100/ (2_snapshot(bytes)) 3.08 KB 3.08 KB ⚪ 0%
clients_100/ (3_pushpull(ms)) 11.00 ms 12.00 ms 🔴 +9.09%
clients_100/ (4_attach(ms)) 9.00 ms 10.00 ms 🔴 +11.11%
clients_100/ (5_changepack_after_detach(bytes)) 6.21 KB 6.21 KB ⚪ 0%
clients_100/ (6_snapshot_after_detach(bytes)) 137.00 B 137.00 B ⚪ 0%
clients_100/ (7_pushpull_after_detach(ms)) 9.00 ms 10.00 ms 🔴 +11.11%
clients_100/ (B/op) 213.58 MB 217.60 MB 🔴 +1.88%
clients_100/ (allocs/op) 1,481,342 allocs 1,481,498 allocs 🔴 +0.01%
clients_1000/ (ns/op) 42.35 s 43.90 s 🔴 +3.66%
clients_1000/ (1_changepack(bytes)) 60.16 KB 60.16 KB ⚪ 0%
clients_1000/ (2_snapshot(bytes)) 30.08 KB 30.08 KB ⚪ 0%
clients_1000/ (3_pushpull(ms)) 116.00 ms 112.00 ms 🟢 -3.45%
clients_1000/ (4_attach(ms)) 72.00 ms 71.00 ms 🟢 -1.39%
clients_1000/ (5_changepack_after_detach(bytes)) 60.22 KB 60.22 KB ⚪ 0%
clients_1000/ (6_snapshot_after_detach(bytes)) 139.00 B 139.00 B ⚪ 0%
clients_1000/ (7_pushpull_after_detach(ms)) 27.00 ms 23.00 ms 🟢 -14.81%
clients_1000/ (B/op) 6.43 GB 6.43 GB 🔴 +0.02%
clients_1000/ (allocs/op) 93,354,528 allocs 93,353,788 allocs ⚪ 0%

@hackerwins hackerwins marked this pull request as ready for review March 4, 2025 05:08
@hackerwins hackerwins changed the title Prevent duplicate DocChangedEvents in the batch Prevent duplicate DocChangedEvents in batch processing Mar 4, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🔭 Outside diff range comments (1)
server/backend/pubsub/publisher.go (1)

116-122: ⚠️ Potential issue

Bug: logging references cleared events array

The logging references bp.events at line 119, but this array has already been cleared at line 111. This will result in incorrect log information showing 0 events even when events were published.

	if logging.Enabled(zap.DebugLevel) {
		bp.logger.Infof(
			"Publishing batch of %d events for document %s",
-			len(bp.events),
+			len(events),
			bp.subs.docKey,
		)
	}
🧹 Nitpick comments (1)
server/backend/pubsub/publisher.go (1)

77-83: Consider clarifying the duplicate event handling limit

The code allows at most 2 DocChangedEvents from the same publisher in a batch (returning early if count > 1), which matches the comment about "only the two events are processed". Consider documenting in a comment why specifically 2 events are allowed rather than 1 or 3.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c7797cf and 3c429b0.

📒 Files selected for processing (2)
  • client/client.go (2 hunks)
  • server/backend/pubsub/publisher.go (4 hunks)
✅ Files skipped from review due to trivial changes (1)
  • client/client.go
🔇 Additional comments (4)
server/backend/pubsub/publisher.go (4)

46-46: Well-placed field addition for tracking duplicate events

The addition of docChangedCountMap to track the count of DocChangedEvents per publisher is a good approach to prevent duplicate events in a batch.


57-57: Good initialization of the map

Properly initializing the map in the constructor ensures it's ready for use when events start flowing.


73-83: Effective implementation for preventing duplicate DocChangedEvents

The implementation correctly limits the number of DocChangedEvents from the same publisher to 2 per batch, addressing the issue described in the comment. The code handles both the existence check and count tracking in a clean manner.


112-112: Properly resetting the map for the next batch

Resetting the map after each batch is published ensures the counting mechanism starts fresh for the next batch cycle, which is essential for correct behavior across multiple batches.

@hackerwins hackerwins merged commit ee109c4 into main Mar 4, 2025
5 checks passed
@hackerwins hackerwins deleted the ignored-dup-docchanged branch March 4, 2025 05:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants