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

feat(stf/branch): simplify merged iterator #22131

Merged
merged 18 commits into from
Nov 7, 2024

Conversation

testinginprod
Copy link
Contributor

@testinginprod testinginprod commented Oct 4, 2024

Description

Simplifies merged iterator.

Adss benches:

benchstat bench_storev1.txt bench_22131.txt 

goos: darwin
goarch: arm64
pkg: cosmossdk.io/server/v2/stf/branch
cpu: Apple M3 Max
                                │ bench_22131.txt │
                                │     sec/op      │
_CacheStack_Set/StackSize1-14         32.59n ± 2%
_CacheStack_Set/StackSize10-14        46.08n ± 0%
_CacheStack_Set/StackSize100-14       46.37n ± 5%
_Get/StackSize1-14                    24.91n ± 1%
_Get/StackSize10-14                   327.1n ± 0%
_Get/StackSize100-14                  5.024µ ± 2%
_Iterate/StackSize1-14                250.2n ± 0%
_Iterate/StackSize10-14               13.24µ ± 5%
_Iterate/StackSize100-14              1.440m ± 0%
geomean                               620.3n

                                │ bench_22131.txt │
                                │      B/op       │
_CacheStack_Set/StackSize1-14          2.000 ± 0%
_CacheStack_Set/StackSize10-14         2.000 ± 0%
_CacheStack_Set/StackSize100-14        2.000 ± 0%
_Get/StackSize1-14                     1.000 ± 0%
_Get/StackSize10-14                    1.000 ± 0%
_Get/StackSize100-14                   1.000 ± 0%
_Iterate/StackSize1-14                 984.0 ± 0%
_Iterate/StackSize10-14              10.59Ki ± 0%
_Iterate/StackSize100-14             106.9Ki ± 0%
geomean                                27.62

                                │ bench_22131.txt │
                                │    allocs/op    │
_CacheStack_Set/StackSize1-14          2.000 ± 0%
_CacheStack_Set/StackSize10-14         2.000 ± 0%
_CacheStack_Set/StackSize100-14        2.000 ± 0%
_Get/StackSize1-14                     1.000 ± 0%
_Get/StackSize10-14                    1.000 ± 0%
_Get/StackSize100-14                   1.000 ± 0%
_Iterate/StackSize1-14                 7.000 ± 0%
_Iterate/StackSize10-14                232.0 ± 0%
_Iterate/StackSize100-14              2.482k ± 0%
geomean                                6.828

pkg: cosmossdk.io/store/cachekv
                                │ bench_storev1.txt │
                                │      sec/op       │
_CacheStack_Set/StackSize1-14           50.74n ± 2%
_CacheStack_Set/StackSize10-14          59.41n ± 2%
_CacheStack_Set/StackSize100-14         58.58n ± 7%
_Get/StackSize1-14                      11.62n ± 2%
_Get/StackSize10-14                     16.32n ± 4%
_Get/StackSize100-14                    16.39n ± 3%
_Iterate/StackSize1-14                  1.423µ ± 3%
_Iterate/StackSize10-14                 44.31µ ± 4%
_Iterate/StackSize100-14                52.14m ± 1%
geomean                                 495.6n

                                │ bench_storev1.txt │
                                │       B/op        │
_CacheStack_Set/StackSize1-14            34.00 ± 0%
_CacheStack_Set/StackSize10-14           34.00 ± 0%
_CacheStack_Set/StackSize100-14          34.00 ± 0%
_Get/StackSize1-14                       1.000 ± 0%
_Get/StackSize10-14                      1.000 ± 0%
_Get/StackSize100-14                     1.000 ± 0%
_Iterate/StackSize1-14                 1.547Ki ± 0%
_Iterate/StackSize10-14                10.83Ki ± 0%
_Iterate/StackSize100-14               114.6Ki ± 1%
geomean                                  75.64

                                │ bench_storev1.txt │
                                │     allocs/op     │
_CacheStack_Set/StackSize1-14            3.000 ± 0%
_CacheStack_Set/StackSize10-14           3.000 ± 0%
_CacheStack_Set/StackSize100-14          3.000 ± 0%
_Get/StackSize1-14                       1.000 ± 0%
_Get/StackSize10-14                      1.000 ± 0%
_Get/StackSize100-14                     1.000 ± 0%
_Iterate/StackSize1-14                   15.00 ± 0%
_Iterate/StackSize10-14                  249.0 ± 0%
_Iterate/StackSize100-14                2.733k ± 0%
geomean                                  8.666


Author Checklist

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.

I have...

  • included the correct type prefix in the PR title, you can find examples of the prefixes below:
  • confirmed ! in the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • reviewed "Files changed" and left comments if necessary
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • updated the relevant documentation or specification, including comments for documenting Go code
  • confirmed all CI checks have passed

Reviewers Checklist

All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.

Please see Pull Request Reviewer section in the contributing guide for more information on how to review a pull request.

I have...

  • confirmed the correct type prefix in the PR title
  • confirmed all author checklist items have been addressed
  • reviewed state machine logic, API design and naming, documentation is accurate, tests and test coverage

Summary by CodeRabbit

  • New Features

    • Introduced a generic merged iterator for enhanced flexibility in handling parent and child iterators.
    • Added benchmark tests for caching mechanisms to evaluate performance under varying conditions.
  • Bug Fixes

    • Improved error handling in iterator methods to manage invalid states effectively.
  • Documentation

    • Updated comments for clarity regarding the functionality of various components, including the Store and changeSet.
  • Chores

    • Updated dependency versions and added replace directives for improved dependency management across modules.

Copy link
Contributor

coderabbitai bot commented Oct 4, 2024

📝 Walkthrough

Walkthrough

The changes introduce a new generic mergedIterator type that merges parent and child iterators, enhancing flexibility for any types implementing the corestore.Iterator interface. Key methods are updated to accommodate this new type, including logic to skip deleted items. Additionally, new benchmark tests for caching mechanisms are added, and various go.mod files are updated to reflect changes in dependencies and local paths. Terminological updates are made in comments across several files to clarify the functionality of structures and methods.

Changes

File Path Change Summary
server/v2/stf/branch/mergeiter.go Introduced mergedIterator type; updated mergeIterators function and methods to use generics; added error handling for invalid iterators.
server/v2/stf/branch/mergeiter_test.go Added TestMergedIterator_Validity to validate behavior with invalid iterators; updated existing test case names for clarity.
server/v2/stf/branch/bench_test.go Introduced benchmark tests for caching mechanisms with three functions: Benchmark_CacheStack_Set, Benchmark_Get, and Benchmark_Iterate.
server/v2/stf/go.mod Updated cosmossdk.io/core dependency from v1.0.0-alpha.4 to v1.0.0-alpha.5; added cosmossdk.io/core/testing dependency.
runtime/v2/go.mod Added replace directive for cosmossdk.io/core/testing; simplified version specification.
server/v2/cometbft/go.mod Added replace directive for cosmossdk.io/core/testing; simplified version specification.
server/v2/stf/branch/changeset.go Updated comment from "sorted cache" to "sorted tree"; no functional changes.
server/v2/stf/branch/store.go Updated comments for Store struct and changeSet; clarified caching behavior in Get method.
simapp/v2/go.mod Updated version for cosmossdk.io/core/testing and added replace directive.
tests/go.mod Updated version for cosmossdk.io/core/testing and added replace directive.

Possibly related issues

Possibly related PRs

Suggested labels

C:core/testing

Suggested reviewers

  • kocubinski
  • julienrbrt
  • testinginprod

📜 Recent review details

Configuration used: .coderabbit.yml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 40d482d and 332a0c7.

⛔ Files ignored due to path filters (4)
  • runtime/v2/go.sum is excluded by !**/*.sum
  • server/v2/cometbft/go.sum is excluded by !**/*.sum
  • simapp/v2/go.sum is excluded by !**/*.sum
  • tests/go.sum is excluded by !**/*.sum
📒 Files selected for processing (4)
  • runtime/v2/go.mod (2 hunks)
  • server/v2/cometbft/go.mod (2 hunks)
  • simapp/v2/go.mod (2 hunks)
  • tests/go.mod (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • runtime/v2/go.mod
  • server/v2/cometbft/go.mod
  • simapp/v2/go.mod
🧰 Additional context used
📓 Path-based instructions (1)
tests/go.mod (1)

Pattern tests/**/*: "Assess the integration and e2e test code assessing sufficient code coverage for the changes associated in the pull request"

🔇 Additional comments (1)
tests/go.mod (1)

35-35: LGTM: Dependency management changes look good!

The changes maintain consistency with other module declarations and follow Go module best practices for local development.

Also applies to: 251-251


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

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.

@github-actions github-actions bot added C:server/v2 Issues related to server/v2 C:server/v2 stf labels Oct 4, 2024
Copy link
Contributor

@alpe alpe left a comment

Choose a reason for hiding this comment

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

Very nice refactoring! The code looks cleaner and easier to read.
I have added some questions to better understand the motivation for generics and the different behaviour on invalid iterator

server/v2/stf/branch/mergeiter.go Outdated Show resolved Hide resolved
// The cache iterator may contain items that shadow or override items in the parent iterator.
// If the cache iterator has the same key as the parent, the cache's value takes precedence.
// Deleted items in the cache (indicated by nil values) are skipped.
type mergedIterator[Parent, Cache corestore.Iterator] struct {
Copy link
Contributor

Choose a reason for hiding this comment

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

Why do you use generics here? mergedIterator is a package private type and not likely to be extended. It should be fine to stick with the corestore.Iterator type.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

in theory, by fact i am not sure, they should provide a performance benefit since it does not do dynamic dispatch on every call

return true
// Skip deleted items (value is nil)
if value == nil {
continue
Copy link
Contributor

Choose a reason for hiding this comment

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

personal preference: a recursion could be used instead of the for loop. But this may be easier to read

server/v2/stf/branch/mergeiter.go Outdated Show resolved Hide resolved
server/v2/stf/branch/mergeiter.go Outdated Show resolved Hide resolved
server/v2/stf/branch/mergeiter.go Outdated Show resolved Hide resolved
@alpe
Copy link
Contributor

alpe commented Oct 7, 2024

tested with #22141

@testinginprod testinginprod marked this pull request as ready for review October 8, 2024 13:13
@testinginprod testinginprod requested review from kocubinski and a team as code owners October 8, 2024 13:13
Copy link
Contributor

github-actions bot commented Oct 8, 2024

@testinginprod your pull request is missing a changelog!

Copy link
Contributor

@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: 1

📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 5dc8768 and bbbecf7.

📒 Files selected for processing (1)
  • server/v2/stf/branch/mergeiter.go (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
server/v2/stf/branch/mergeiter.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

🔇 Additional comments (1)
server/v2/stf/branch/mergeiter.go (1)

68-71: Verify the expected behavior of Key() and Value() when the iterator is invalid

The Key() and Value() methods return nil when the iterator is invalid (!i.valid). According to the corestore.Iterator interface, it's important to confirm whether returning nil is appropriate in this scenario or if these methods should panic or handle errors differently. This ensures consistency and prevents unexpected behavior for users of the iterator.

Please verify the interface's requirements:

Also applies to: 76-80

Comment on lines 100 to 156
// advance moves the iterator to the next valid (non-deleted) item.
// It handles merging logic between the parent and cache iterators.
func (i *mergedIterator[Parent, Cache]) advance() {
for {
// If parent is invalid, fast-forward cache.
if !iter.parent.Valid() {
iter.skipCacheDeletes(nil)
return iter.cache.Valid()
// Check if both iterators have reached the end
if !i.parent.Valid() && !i.cache.Valid() {
i.valid = false
return
}
// Parent is valid.

if !iter.cache.Valid() {
return true
var key, value []byte

// If parent iterator is exhausted, use the cache iterator
if !i.parent.Valid() {
key = i.cache.Key()
value = i.cache.Value()
i.cache.Next()
} else if !i.cache.Valid() {
// If cache iterator is exhausted, use the parent iterator
key = i.parent.Key()
value = i.parent.Value()
i.parent.Next()
} else {
// Both iterators are valid; compare keys
keyP, keyC := i.parent.Key(), i.cache.Key()
switch cmp := i.compare(keyP, keyC); {
case cmp < 0:
// Parent key is less than cache key
key = keyP
value = i.parent.Value()
i.parent.Next()
case cmp == 0:
// Keys are equal; cache overrides parent
key = keyC
value = i.cache.Value()
i.parent.Next()
i.cache.Next()
case cmp > 0:
// Cache key is less than parent key
key = keyC
value = i.cache.Value()
i.cache.Next()
}
}
// Parent is valid, cache is valid.

// Compare parent and cache.
keyP := iter.parent.Key()
keyC := iter.cache.Key()

switch iter.compare(keyP, keyC) {
case -1: // parent < cache.
return true
// Skip deleted items (value is nil)
if value == nil {
continue
}

case 0: // parent == cache.
// Skip over if cache item is a delete.
valueC := iter.cache.Value()
if valueC == nil {
iter.parent.Next()
iter.cache.Next()
// Update the current key and value, and mark iterator as valid
i.currKey = key
i.currValue = value
i.valid = true
return
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Reset i.err in the advance method to avoid stale errors

In the advance() method, when advancing the iterator, i.err is not reset. This could result in the Error() method returning an outdated error even after the iterator has recovered from a previous invalid state. To ensure that i.err accurately reflects the current state of the iterator, consider resetting it at the beginning of the advance() method.

Apply this diff to reset i.err appropriately:

 func (i *mergedIterator[Parent, Cache]) advance() {
+    i.err = nil
     for {
         if !i.parent.Valid() && !i.cache.Valid() {
             i.valid = false
             return
         }
         // Rest of the code...
     }
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// advance moves the iterator to the next valid (non-deleted) item.
// It handles merging logic between the parent and cache iterators.
func (i *mergedIterator[Parent, Cache]) advance() {
for {
// If parent is invalid, fast-forward cache.
if !iter.parent.Valid() {
iter.skipCacheDeletes(nil)
return iter.cache.Valid()
// Check if both iterators have reached the end
if !i.parent.Valid() && !i.cache.Valid() {
i.valid = false
return
}
// Parent is valid.
if !iter.cache.Valid() {
return true
var key, value []byte
// If parent iterator is exhausted, use the cache iterator
if !i.parent.Valid() {
key = i.cache.Key()
value = i.cache.Value()
i.cache.Next()
} else if !i.cache.Valid() {
// If cache iterator is exhausted, use the parent iterator
key = i.parent.Key()
value = i.parent.Value()
i.parent.Next()
} else {
// Both iterators are valid; compare keys
keyP, keyC := i.parent.Key(), i.cache.Key()
switch cmp := i.compare(keyP, keyC); {
case cmp < 0:
// Parent key is less than cache key
key = keyP
value = i.parent.Value()
i.parent.Next()
case cmp == 0:
// Keys are equal; cache overrides parent
key = keyC
value = i.cache.Value()
i.parent.Next()
i.cache.Next()
case cmp > 0:
// Cache key is less than parent key
key = keyC
value = i.cache.Value()
i.cache.Next()
}
}
// Parent is valid, cache is valid.
// Compare parent and cache.
keyP := iter.parent.Key()
keyC := iter.cache.Key()
switch iter.compare(keyP, keyC) {
case -1: // parent < cache.
return true
// Skip deleted items (value is nil)
if value == nil {
continue
}
case 0: // parent == cache.
// Skip over if cache item is a delete.
valueC := iter.cache.Value()
if valueC == nil {
iter.parent.Next()
iter.cache.Next()
// Update the current key and value, and mark iterator as valid
i.currKey = key
i.currValue = value
i.valid = true
return
}
}
// advance moves the iterator to the next valid (non-deleted) item.
// It handles merging logic between the parent and cache iterators.
func (i *mergedIterator[Parent, Cache]) advance() {
i.err = nil
for {
// Check if both iterators have reached the end
if !i.parent.Valid() && !i.cache.Valid() {
i.valid = false
return
}
var key, value []byte
// If parent iterator is exhausted, use the cache iterator
if !i.parent.Valid() {
key = i.cache.Key()
value = i.cache.Value()
i.cache.Next()
} else if !i.cache.Valid() {
// If cache iterator is exhausted, use the parent iterator
key = i.parent.Key()
value = i.parent.Value()
i.parent.Next()
} else {
// Both iterators are valid; compare keys
keyP, keyC := i.parent.Key(), i.cache.Key()
switch cmp := i.compare(keyP, keyC); {
case cmp < 0:
// Parent key is less than cache key
key = keyP
value = i.parent.Value()
i.parent.Next()
case cmp == 0:
// Keys are equal; cache overrides parent
key = keyC
value = i.cache.Value()
i.parent.Next()
i.cache.Next()
case cmp > 0:
// Cache key is less than parent key
key = keyC
value = i.cache.Value()
i.cache.Next()
}
}
// Skip deleted items (value is nil)
if value == nil {
continue
}
// Update the current key and value, and mark iterator as valid
i.currKey = key
i.currValue = value
i.valid = true
return
}
}

// If the iterator is invalid, it returns nil.
func (i *mergedIterator[Parent, Cache]) Key() []byte {
if !i.valid {
panic("called key on invalid iterator")

Check warning

Code scanning / CodeQL

Panic in BeginBock or EndBlock consensus methods Warning

Possible panics in BeginBock- or EndBlock-related consensus methods could cause a chain halt
server/v2/stf/branch/mergeiter.go Fixed Show fixed Hide fixed
Copy link
Contributor

@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 and nitpick comments (1)
server/v2/stf/branch/mergeiter_test.go (1)

10-54: LGTM! Consider adding a test for valid iterators and refactoring for DRY.

The new test function TestMergedIterator_Validity is well-structured and effectively tests the behavior of invalid iterators. Good job on using subtests and a helper function for checking panics.

To further improve the test coverage and maintainability:

  1. Consider adding a test case for a valid iterator to ensure it doesn't panic when calling Key() and Value().
  2. The two subtests have very similar setup code. Consider refactoring to reduce duplication.

Here's a suggestion for refactoring:

func TestMergedIterator_Validity(t *testing.T) {
	panics := func(f func()) {
		defer func() {
			if r := recover(); r == nil {
				t.Error("panic expected")
			}
		}()
		f()
	}

	setupInvalidIterator := func() corestore.Iterator {
		parent, err := newMemState().Iterator(nil, nil)
		if err != nil {
			t.Fatal(err)
		}
		cache, err := newMemState().Iterator(nil, nil)
		if err != nil {
			t.Fatal(err)
		}
		return mergeIterators(parent, cache, true)
	}

	t.Run("panics when calling key on invalid iter", func(t *testing.T) {
		it := setupInvalidIterator()
		panics(func() { it.Key() })
	})

	t.Run("panics when calling value on invalid iter", func(t *testing.T) {
		it := setupInvalidIterator()
		panics(func() { it.Value() })
	})

	// TODO: Add test case for valid iterator
	// t.Run("doesn't panic with valid iterator", func(t *testing.T) {
	//     // Setup a valid iterator and test Key() and Value()
	// })
}

This refactoring reduces code duplication and makes it easier to add more test cases in the future.

📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between bbbecf7 and 6d64e8c.

📒 Files selected for processing (2)
  • server/v2/stf/branch/mergeiter.go (1 hunks)
  • server/v2/stf/branch/mergeiter_test.go (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • server/v2/stf/branch/mergeiter.go
🧰 Additional context used
📓 Path-based instructions (1)
server/v2/stf/branch/mergeiter_test.go (2)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.


Pattern **/*_test.go: "Assess the unit test code assessing sufficient code coverage for the changes associated in the pull request"

@julienrbrt
Copy link
Member

Anything blocking this?

@tac0turtle
Copy link
Member

Any chance we can get benchmarks on this pr too

Copy link
Contributor

@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: 4

🧹 Outside diff range and nitpick comments (1)
server/v2/stf/branch/bench_test.go (1)

1-172: Overall benchmark implementation is good but could be more comprehensive

The benchmarks address the request from PR comments and provide good coverage of basic operations. While there are some implementation details that could be improved, the structure provides a solid foundation for performance testing.

Consider adding benchmarks for:

  1. Different key/value sizes
  2. Different access patterns (sequential vs random)
  3. Mixed operations (combinations of Get/Set/Iterate)

Would you like help implementing these additional benchmark scenarios?

📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 6d64e8c and d4c27a2.

⛔ Files ignored due to path filters (1)
  • server/v2/stf/go.sum is excluded by !**/*.sum
📒 Files selected for processing (2)
  • server/v2/stf/branch/bench_test.go (1 hunks)
  • server/v2/stf/go.mod (2 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
server/v2/stf/branch/bench_test.go (2)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.


Pattern **/*_test.go: "Assess the unit test code assessing sufficient code coverage for the changes associated in the pull request"

🔇 Additional comments (3)
server/v2/stf/go.mod (2)

18-20: LGTM: Appropriate replace directive for local development

The replace directive correctly points to the local testing package, which is a standard practice for local development and testing.


6-7: Verify compatibility with core v1.0.0-alpha.5

The upgrade to cosmossdk.io/core v1.0.0-alpha.5 might introduce breaking changes. Since this PR involves iterator modifications, ensure all iterator-related APIs are compatible with the new version.

✅ Verification successful

Core version upgrade is safe to proceed

The codebase analysis shows that while there are many iterator implementations, they all use the store package's Iterator interface (cosmossdk.io/core/store) rather than directly depending on core.Iterator. The upgrade from alpha.4 to alpha.5 appears safe as:

  1. All iterator implementations are local to the codebase
  2. The core package is primarily used for interfaces and services, not concrete implementations
  3. No direct usage of core.Iterator was found that could be affected by the version bump
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any core.Iterator usage that might be affected by the version bump
rg -l "core\.Iterator" 

Length of output: 24


Script:

#!/bin/bash
# Let's try a broader search for iterator-related code and imports
rg -i "iterator" server/v2/stf/

# Also check for core package imports
rg "cosmossdk.io/core" server/v2/stf/

# Check git diff for the specific changes in go.mod
git diff origin/main server/v2/stf/go.mod

Length of output: 21109

server/v2/stf/branch/bench_test.go (1)

1-8: LGTM: Clean and minimal imports

The package declaration and imports are well-organized, using appropriate aliasing for the testing package.

server/v2/stf/branch/bench_test.go Outdated Show resolved Hide resolved
server/v2/stf/branch/bench_test.go Outdated Show resolved Hide resolved
server/v2/stf/branch/bench_test.go Outdated Show resolved Hide resolved
server/v2/stf/branch/bench_test.go Outdated Show resolved Hide resolved
# Conflicts:
#	server/v2/stf/go.mod
#	server/v2/stf/go.sum
Copy link
Contributor

@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: 9

🧹 Outside diff range and nitpick comments (5)
server/v2/stf/branch/bench_test.go (1)

66-83: Enhance makeBranchStack configurability and realism

The helper function could be improved to:

  1. Use more realistic key/value sizes
  2. Allow configuring the number of elements
-func makeBranchStack(b *testing.B, stackSize int) Store[store.KVStore] {
+func makeBranchStack(b *testing.B, stackSize, elemCount int) Store[store.KVStore] {
 	parent := coretesting.NewMemKV()
 	branch := NewStore[store.KVStore](parent)
 	for i := 1; i < stackSize; i++ {
 		branch = NewStore[store.KVStore](branch)
-		for j := 0; j < elemsInStack; j++ {
-			// create unique keys by including the branch index.
-			key := []byte{byte(i), byte(j)}
-			value := []byte{byte(j)}
+		for j := 0; j < elemCount; j++ {
+			key := make([]byte, 32)   // typical key size
+			value := make([]byte, 64) // typical value size
+			// Create unique keys using branch index and counter
+			binary.BigEndian.PutUint64(key, uint64(i))
+			binary.BigEndian.PutUint64(key[8:], uint64(j))
 			err := branch.Set(key, value)
 			if err != nil {
 				b.Fatal(err)

Then update the benchmark calls:

-			bs := makeBranchStack(b, stackSize)
+			bs := makeBranchStack(b, stackSize, elemsInStack)
runtime/v2/go.mod (1)

Line range hint 3-3: Update Go version to 1.22

The specified Go version 1.23 is not yet released. This could cause compatibility issues as the latest stable version is Go 1.22.

Apply this diff to fix the version:

-go 1.23
+go 1.22
server/v2/stf/branch/mergeiter_test.go (2)

22-53: Refactor test cases to reduce duplication and add cleanup.

While the test cases are well-structured, there are a few improvements that could be made:

  1. The setup code is duplicated between test cases
  2. Missing cleanup for iterators
  3. Test names could be more descriptive

Consider refactoring like this:

+func setupInvalidIterators(t *testing.T) (corestore.Iterator, func()) {
+    parent, err := newMemState().Iterator(nil, nil)
+    if err != nil {
+        t.Fatal(err)
+    }
+    cache, err := newMemState().Iterator(nil, nil)
+    if err != nil {
+        t.Fatal(err)
+    }
+    it := mergeIterators(parent, cache, true)
+    return it, func() {
+        parent.Close()
+        cache.Close()
+    }
+}

 func TestMergedIterator_Validity(t *testing.T) {
     // ... panics helper ...

-    t.Run("panics when calling key on invalid iter", func(t *testing.T) {
-        parent, err := newMemState().Iterator(nil, nil)
-        if err != nil {
-            t.Fatal(err)
-        }
-        cache, err := newMemState().Iterator(nil, nil)
-        if err != nil {
-            t.Fatal(err)
-        }
-
-        it := mergeIterators(parent, cache, true)
+    t.Run("Key() should panic when called on invalid merged iterator", func(t *testing.T) {
+        it, cleanup := setupInvalidIterators(t)
+        defer cleanup()
         panics(func() {
             it.Key()
         })
     })

-    t.Run("panics when calling value on invalid iter", func(t *testing.T) {
-        parent, err := newMemState().Iterator(nil, nil)
-        if err != nil {
-            t.Fatal(err)
-        }
-        cache, err := newMemState().Iterator(nil, nil)
-        if err != nil {
-            t.Fatal(err)
-        }
-
-        it := mergeIterators(parent, cache, true)
+    t.Run("Value() should panic when called on invalid merged iterator", func(t *testing.T) {
+        it, cleanup := setupInvalidIterators(t)
+        defer cleanup()
         panics(func() {
             it.Value()
         })
     })
 }

Line range hint 104-116: Enhance test case name and coverage.

The test case name "both iterators have same key, but child value is nil" could be more descriptive about its purpose. Additionally, consider adding test cases for domain boundaries.

  1. Rename the test case to better reflect its purpose:
-"both iterators have same key, but child value is nil": {
+"deletion: child nil value should hide parent value": {
  1. Consider adding these test cases:
"domain boundaries: start and end keys respected": {
    setup: func() corestore.Iterator {
        parent := newMemState()
        if err := parent.Set([]byte("k1"), []byte("v1")); err != nil {
            t.Fatal(err)
        }
        if err := parent.Set([]byte("k2"), []byte("v2")); err != nil {
            t.Fatal(err)
        }
        cache := newMemState()
        if err := cache.Set([]byte("k3"), []byte("v3")); err != nil {
            t.Fatal(err)
        }
        // Test with specific domain
        return mergeIterators(
            must(parent.Iterator([]byte("k1"), []byte("k3"))),
            must(cache.Iterator([]byte("k1"), []byte("k3"))),
            true,
        )
    },
    exp: [][2]string{{"k1", "v1"}, {"k2", "v2"}},
},
server/v2/stf/branch/mergeiter.go (1)

14-29: Consider documenting performance implications of generic implementation

The generic implementation is well-structured and type-safe. While it may provide performance benefits by avoiding dynamic dispatch, it would be valuable to:

  1. Add a comment documenting the performance characteristics
  2. Consider adding benchmarks to validate the performance benefits
📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between d4c27a2 and 40d482d.

⛔ Files ignored due to path filters (3)
  • runtime/v2/go.sum is excluded by !**/*.sum
  • server/v2/cometbft/go.sum is excluded by !**/*.sum
  • simapp/v2/go.sum is excluded by !**/*.sum
📒 Files selected for processing (11)
  • runtime/v2/go.mod (2 hunks)
  • server/v2/cometbft/go.mod (2 hunks)
  • server/v2/stf/branch/bench_22131.txt (1 hunks)
  • server/v2/stf/branch/bench_storev1.txt (1 hunks)
  • server/v2/stf/branch/bench_test.go (1 hunks)
  • server/v2/stf/branch/changeset.go (1 hunks)
  • server/v2/stf/branch/mergeiter.go (1 hunks)
  • server/v2/stf/branch/mergeiter_test.go (6 hunks)
  • server/v2/stf/branch/store.go (2 hunks)
  • server/v2/stf/go.mod (2 hunks)
  • simapp/v2/go.mod (2 hunks)
✅ Files skipped from review due to trivial changes (1)
  • server/v2/stf/branch/changeset.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • server/v2/stf/go.mod
🧰 Additional context used
📓 Path-based instructions (4)
server/v2/stf/branch/bench_test.go (2)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.


Pattern **/*_test.go: "Assess the unit test code assessing sufficient code coverage for the changes associated in the pull request"

server/v2/stf/branch/mergeiter.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

server/v2/stf/branch/mergeiter_test.go (2)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.


Pattern **/*_test.go: "Assess the unit test code assessing sufficient code coverage for the changes associated in the pull request"

server/v2/stf/branch/store.go (1)

Pattern **/*.go: Review the Golang code for conformity with the Uber Golang style guide, highlighting any deviations.

🪛 LanguageTool
server/v2/stf/branch/bench_22131.txt

[uncategorized] ~5-~5: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 36413290 33.31 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~5-~5: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36413290 33.31 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~6-~6: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 35942940 34.33 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~6-~6: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 35942940 34.33 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~7-~7: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 36227097 32.59 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~7-~7: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36227097 32.59 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~8-~8: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36985620 32.62 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~9-~9: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 34493827 32.62 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~10-~10: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 37298065 32.46 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~10-~10: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 37298065 32.46 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~11-~11: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 37051664 32.55 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~11-~11: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 37051664 32.55 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~12-~12: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 36883686 32.48 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~12-~12: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36883686 32.48 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~13-~13: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 37034179 32.59 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~13-~13: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 37034179 32.59 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~14-~14: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 36960226 32.46 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~14-~14: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36960226 32.46 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~15-~15: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26045575 46.27 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~15-~15: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26045575 46.27 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~16-~16: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 25950037 46.15 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~16-~16: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25950037 46.15 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~17-~17: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26205926 46.01 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~17-~17: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26205926 46.01 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~18-~18: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 25982696 46.00 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~18-~18: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25982696 46.00 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~19-~19: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26053021 46.06 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~19-~19: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26053021 46.06 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~20-~20: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 25772341 46.08 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~20-~20: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25772341 46.08 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~21-~21: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 25855080 46.17 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~21-~21: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25855080 46.17 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~22-~22: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26162884 46.08 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~22-~22: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26162884 46.08 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~23-~23: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26146875 46.11 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~23-~23: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26146875 46.11 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~24-~24: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25878520 45.99 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~25-~25: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26067688 46.20 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~25-~25: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26067688 46.20 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~26-~26: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26085656 46.02 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~26-~26: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26085656 46.02 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~27-~27: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26131170 46.01 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~27-~27: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26131170 46.01 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~28-~28: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26144407 46.06 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~28-~28: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26144407 46.06 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~29-~29: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26018938 46.02 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~29-~29: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26018938 46.02 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~30-~30: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 25682228 48.46 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~30-~30: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 25682228 48.46 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~31-~31: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26095701 46.54 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~31-~31: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26095701 46.54 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~32-~32: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26147968 48.50 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~32-~32: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26147968 48.50 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~33-~33: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 25609377 46.66 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~34-~34: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 25418208 46.67 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~35-~35: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 47967780 24.95 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~35-~35: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 47967780 24.95 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~36-~36: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 47577195 25.19 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~36-~36: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 47577195 25.19 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~37-~37: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 47781637 24.94 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~37-~37: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 47781637 24.94 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~38-~38: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 47332609 25.00 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~38-~38: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 47332609 25.00 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~39-~39: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 47787187 25.03 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~39-~39: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 47787187 25.03 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~40-~40: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 48496687 24.83 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~40-~40: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 48496687 24.83 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~41-~41: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 48153289 24.89 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~41-~41: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 48153289 24.89 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~42-~42: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 48453279 24.69 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~42-~42: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 48453279 24.69 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~43-~43: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 48500605 24.71 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~43-~43: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 48500605 24.71 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~44-~44: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 48790486 24.77 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~44-~44: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 48790486 24.77 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~45-~45: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3676309 328.9 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~46-~46: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3665226 327.0 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~47-~47: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3669343 327.1 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~48-~48: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3674840 327.2 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~49-~49: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3667174 327.1 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~50-~50: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3665042 327.0 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~51-~51: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3666630 327.0 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~52-~52: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3665234 327.5 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~53-~53: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3680134 326.8 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~54-~54: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 3663696 326.7 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~55-~55: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 237254 5028 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~56-~56: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 240108 5267 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~57-~57: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 242304 5014 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~58-~58: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 236968 5136 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~59-~59: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 246918 5086 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~60-~60: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 240165 4959 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~61-~61: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 242150 5030 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~62-~62: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 245880 4891 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~63-~63: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 236239 5019 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~64-~64: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 239452 5012 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~65-~65: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4859352 248.2 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~66-~66: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4786867 250.3 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~67-~67: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4754394 250.2 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~68-~68: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4808739 249.5 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~69-~69: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4803613 249.8 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~70-~70: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4794133 250.9 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~71-~71: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4799314 249.4 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~72-~72: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4784235 252.0 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~73-~73: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4848817 251.2 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~74-~74: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...4 4752552 251.1 ns/op 984 B/op 7 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~75-~75: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 91701 13156 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~76-~76: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 91626 13236 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~77-~77: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 91365 14143 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~78-~78: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 83239 13882 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~79-~79: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 88155 13691 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~80-~80: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 84646 13487 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~81-~81: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 89509 13241 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~82-~82: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 91993 13247 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~83-~83: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 90870 13235 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~84-~84: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 89091 13219 ns/op 10848 B/op 232 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~85-~85: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 831 1437972 ns/op 109488 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~86-~86: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 831 1442003 ns/op 109488 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~87-~87: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 830 1440507 ns/op 109488 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~88-~88: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 832 1438528 ns/op 109494 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~89-~89: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 836 1439228 ns/op 109488 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~90-~90: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 828 1444444 ns/op 109488 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~91-~91: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 836 1437128 ns/op 109488 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~92-~92: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 836 1437714 ns/op 109488 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~93-~93: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 834 1441704 ns/op 109488 B/op 2482 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~94-~94: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 832 1447616 ns/op 109488 B/op 2482 allocs/op PAS...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~95-~95: OK: operatiekamer, oké: prima. OK (i.p.v. oké) staat ook veel op het beeldscherm.
Context: ...p 109488 B/op 2482 allocs/op PASS ok cosmossdk.io/server/v2/stf/branch 120...

(NL_SIMPLE_REPLACE_OK)

server/v2/stf/branch/bench_storev1.txt

[misspelling] ~5-~5: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23762670 50.66 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~6-~6: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 23815470 52.51 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~6-~6: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23815470 52.51 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~7-~7: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 23700504 50.09 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~7-~7: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23700504 50.09 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~8-~8: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23894227 50.60 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~9-~9: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 23923881 51.59 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~9-~9: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23923881 51.59 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~10-~10: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23567246 50.72 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~11-~11: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23912976 50.76 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~12-~12: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23585929 51.69 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~13-~13: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 23619915 51.00 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~13-~13: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23619915 51.00 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~14-~14: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 22026919 50.65 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~15-~15: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 20656384 59.33 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~15-~15: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20656384 59.33 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~16-~16: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20070175 59.69 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~17-~17: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 17762174 60.18 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~17-~17: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 17762174 60.18 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~18-~18: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 20686652 58.29 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~18-~18: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20686652 58.29 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~19-~19: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20080363 58.92 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~20-~20: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 21156355 59.50 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~20-~20: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 21156355 59.50 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~21-~21: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20363948 60.83 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~22-~22: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 20779700 58.36 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~22-~22: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20779700 58.36 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~23-~23: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 17666738 58.08 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~23-~23: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 17666738 58.08 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~24-~24: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20784408 59.87 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~25-~25: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20917387 57.43 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~25-~25: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20917387 57.43 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~26-~26: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 19810956 58.39 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~26-~26: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 19810956 58.39 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~27-~27: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 19317696 58.77 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~28-~28: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 19808176 65.74 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~29-~29: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20627594 59.53 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~29-~29: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20627594 59.53 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~30-~30: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20669712 58.38 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~30-~30: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20669712 58.38 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~31-~31: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20143410 57.45 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~31-~31: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20143410 57.45 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~32-~32: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20125293 60.01 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~32-~32: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20125293 60.01 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~33-~33: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 21023170 57.92 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~34-~34: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 21142921 62.84 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~35-~35: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.63 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~35-~35: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.63 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~36-~36: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 99004795 11.54 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~37-~37: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.58 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~38-~38: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.67 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~38-~38: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.67 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~39-~39: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.57 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~40-~40: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.47 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~41-~41: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.88 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~41-~41: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.88 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~42-~42: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 99394999 11.60 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~42-~42: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 99394999 11.60 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~43-~43: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.65 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~43-~43: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.65 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~44-~44: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.94 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~44-~44: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.94 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~45-~45: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71410506 17.11 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~46-~46: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71044978 17.04 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~47-~47: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 73479136 16.02 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~48-~48: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...-14 73639016 16.63 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~48-~48: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 73639016 16.63 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~49-~49: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 72728744 16.38 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~50-~50: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71737082 16.13 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~51-~51: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...-14 76073544 15.72 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~51-~51: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 76073544 15.72 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~52-~52: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 73673114 15.55 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~53-~53: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 70475266 16.27 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~54-~54: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 76181808 16.57 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~55-~55: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 69400598 18.96 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~55-~55: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 69400598 18.96 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~56-~56: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 73939244 16.36 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~57-~57: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 71737443 15.75 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~57-~57: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71737443 15.75 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~58-~58: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71800394 16.43 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~59-~59: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 72954243 15.96 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~59-~59: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 72954243 15.96 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~60-~60: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 75871334 16.74 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~60-~60: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 75871334 16.74 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~61-~61: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 75076051 16.36 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~62-~62: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 69914791 16.31 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~63-~63: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 64448419 16.68 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~63-~63: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 64448419 16.68 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~64-~64: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 70766191 16.46 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~65-~65: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 806337 1420 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~66-~66: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 897746 1404 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~67-~67: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 911017 1398 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~68-~68: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 839779 1426 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~69-~69: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 873406 1380 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~70-~70: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 840322 1431 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~71-~71: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 1000000 1440 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~72-~72: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 775245 1440 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~73-~73: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 903236 1441 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~74-~74: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...-14 904930 1368 ns/op 1584 B/op 15 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~75-~75: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 28052 44257 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~76-~76: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 27132 44182 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~77-~77: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 27482 43655 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~78-~78: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 28772 44653 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~79-~79: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 26344 46040 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~80-~80: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 26232 45708 ns/op 11089 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~81-~81: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 26694 45973 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~82-~82: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 27445 43115 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~83-~83: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 25693 44260 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~84-~84: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...0-14 27298 44350 ns/op 11088 B/op 249 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~85-~85: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 22 52325875 ns/op 117396 B/op 2733 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~86-~86: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 22 52214273 ns/op 117396 B/op 2733 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~87-~87: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 22 52066638 ns/op 117396 B/op 2733 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~88-~88: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 22 52752657 ns/op 117396 B/op 2733 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~89-~89: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 26 52589131 ns/op 115662 B/op 2710 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~90-~90: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 22 51627826 ns/op 117396 B/op 2733 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~91-~91: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 22 51819970 ns/op 117396 B/op 2733 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~92-~92: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 24 51052571 ns/op 116457 B/op 2721 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~93-~93: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 22 52228589 ns/op 117396 B/op 2733 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~94-~94: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...00-14 22 52047693 ns/op 117396 B/op 2733 allocs/op PAS...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~95-~95: OK: operatiekamer, oké: prima. OK (i.p.v. oké) staat ook veel op het beeldscherm.
Context: ...p 117396 B/op 2733 allocs/op PASS ok cosmossdk.io/store/cachekv 133.087s

(NL_SIMPLE_REPLACE_OK)

🔇 Additional comments (13)
server/v2/stf/branch/store.go (1)

11-13: Please clarify the ordering requirements for the changeset.

The comment change from "always ascending sorted" to "ordered changeset" makes the ordering requirements less specific. This could lead to confusion about the exact ordering guarantees that need to be maintained.

Let's check how the ordering is used in the codebase:

runtime/v2/go.mod (1)

8-8: LGTM: Dependency management changes look good

The changes to the core/testing dependency are well-structured:

  • Replace directive points to the local development path
  • Dependency version is appropriately set to v0.0.0 to work with the replace directive
  • Changes are consistent with similar updates in other modules

Also applies to: 34-34

server/v2/stf/branch/mergeiter_test.go (1)

Line range hint 167-173: LGTM! Well-implemented generic helper function.

The must helper function is well-designed:

  • Uses generics appropriately
  • Handles errors consistently
  • Provides clear panic behavior
server/v2/stf/branch/mergeiter.go (2)

10-12: LGTM: Error variable declaration follows best practices

The error variable declaration follows Go conventions and the Uber style guide.


85-89: LGTM: Proper error handling using errors.Join

The Close method correctly uses errors.Join to handle multiple potential errors, as suggested in past reviews.

server/v2/cometbft/go.mod (2)

7-7: LGTM: Replace directive properly configured

The addition of the replace directive for cosmossdk.io/core/testing follows the established pattern in the file and enables proper local development.


47-47: LGTM: Version update aligns with replace directive

The version update to v0.0.0 is correct as it corresponds to the local development setup established by the replace directive.

server/v2/stf/branch/bench_22131.txt (2)

5-34: Set operation performance looks good.

The CacheStack_Set operation shows excellent performance characteristics:

  • Consistent memory usage (2 B/op) across all stack sizes
  • Minimal time increase from stack size 1 (~33 ns) to sizes 10 and 100 (~46 ns)
🧰 Tools
🪛 LanguageTool

[uncategorized] ~5-~5: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 36413290 33.31 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~5-~5: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36413290 33.31 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~6-~6: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 35942940 34.33 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~6-~6: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 35942940 34.33 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~7-~7: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 36227097 32.59 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~7-~7: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36227097 32.59 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~8-~8: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36985620 32.62 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~9-~9: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 34493827 32.62 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~10-~10: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 37298065 32.46 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~10-~10: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 37298065 32.46 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~11-~11: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 37051664 32.55 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~11-~11: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 37051664 32.55 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~12-~12: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 36883686 32.48 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~12-~12: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36883686 32.48 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~13-~13: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 37034179 32.59 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~13-~13: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 37034179 32.59 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~14-~14: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 36960226 32.46 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~14-~14: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 36960226 32.46 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~15-~15: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26045575 46.27 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~15-~15: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26045575 46.27 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~16-~16: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 25950037 46.15 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~16-~16: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25950037 46.15 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~17-~17: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26205926 46.01 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~17-~17: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26205926 46.01 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~18-~18: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 25982696 46.00 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~18-~18: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25982696 46.00 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~19-~19: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26053021 46.06 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~19-~19: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26053021 46.06 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~20-~20: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 25772341 46.08 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~20-~20: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25772341 46.08 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~21-~21: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 25855080 46.17 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~21-~21: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25855080 46.17 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~22-~22: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26162884 46.08 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~22-~22: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26162884 46.08 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~23-~23: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 26146875 46.11 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~23-~23: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 26146875 46.11 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~24-~24: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 25878520 45.99 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~25-~25: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26067688 46.20 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~25-~25: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26067688 46.20 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~26-~26: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26085656 46.02 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~26-~26: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26085656 46.02 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~27-~27: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26131170 46.01 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~27-~27: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26131170 46.01 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~28-~28: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26144407 46.06 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~28-~28: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26144407 46.06 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~29-~29: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26018938 46.02 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~29-~29: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26018938 46.02 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~30-~30: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 25682228 48.46 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~30-~30: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 25682228 48.46 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~31-~31: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26095701 46.54 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~31-~31: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26095701 46.54 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~32-~32: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 26147968 48.50 ns/op 2 B/op 2 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~32-~32: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 26147968 48.50 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~33-~33: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 25609377 46.66 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~34-~34: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 25418208 46.67 ns/op 2 B/op 2 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


95-96: LGTM - Tests passed successfully.

The benchmark suite completed successfully in 120.114s.

🧰 Tools
🪛 LanguageTool

[misspelling] ~95-~95: OK: operatiekamer, oké: prima. OK (i.p.v. oké) staat ook veel op het beeldscherm.
Context: ...p 109488 B/op 2482 allocs/op PASS ok cosmossdk.io/server/v2/stf/branch 120...

(NL_SIMPLE_REPLACE_OK)

server/v2/stf/branch/bench_storev1.txt (2)

5-34: Set operation performance looks good.

The CacheStack_Set operation shows consistent and efficient performance:

  • Fast operation time (~50-65 ns)
  • Constant memory usage (34 bytes)
  • Low allocation count (3)
  • Good scalability across different stack sizes
🧰 Tools
🪛 LanguageTool

[misspelling] ~5-~5: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23762670 50.66 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~6-~6: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 23815470 52.51 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~6-~6: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23815470 52.51 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~7-~7: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 23700504 50.09 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~7-~7: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23700504 50.09 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~8-~8: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23894227 50.60 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~9-~9: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 23923881 51.59 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~9-~9: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23923881 51.59 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~10-~10: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23567246 50.72 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~11-~11: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23912976 50.76 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~12-~12: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23585929 51.69 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~13-~13: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize1-14 23619915 51.00 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~13-~13: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 23619915 51.00 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~14-~14: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize1-14 22026919 50.65 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~15-~15: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 20656384 59.33 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~15-~15: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20656384 59.33 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~16-~16: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20070175 59.69 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~17-~17: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 17762174 60.18 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~17-~17: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 17762174 60.18 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~18-~18: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 20686652 58.29 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~18-~18: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20686652 58.29 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~19-~19: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20080363 58.92 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~20-~20: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 21156355 59.50 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~20-~20: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 21156355 59.50 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~21-~21: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20363948 60.83 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~22-~22: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 20779700 58.36 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~22-~22: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20779700 58.36 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~23-~23: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize10-14 17666738 58.08 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~23-~23: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 17666738 58.08 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~24-~24: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize10-14 20784408 59.87 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~25-~25: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20917387 57.43 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~25-~25: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20917387 57.43 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~26-~26: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 19810956 58.39 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~26-~26: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 19810956 58.39 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~27-~27: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 19317696 58.77 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~28-~28: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 19808176 65.74 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~29-~29: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20627594 59.53 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~29-~29: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20627594 59.53 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~30-~30: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20669712 58.38 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~30-~30: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20669712 58.38 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~31-~31: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20143410 57.45 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~31-~31: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20143410 57.45 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~32-~32: Als dit een tijd is, klopt het uur niet. Als het een getal is, zou er een komma moeten staan.
Context: ...StackSize100-14 20125293 60.01 ns/op 34 B/op 3 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~32-~32: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 20125293 60.01 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~33-~33: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 21023170 57.92 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~34-~34: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ...ize100-14 21142921 62.84 ns/op 34 B/op 3 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


35-64: Get operation is highly optimized.

The Get operation demonstrates excellent performance characteristics:

  • Very fast operation time (~11-18 ns)
  • Minimal memory usage (1 byte)
  • Single allocation per operation
  • Maintains efficiency across stack sizes
🧰 Tools
🪛 LanguageTool

[uncategorized] ~35-~35: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.63 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~35-~35: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.63 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~36-~36: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 99004795 11.54 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~37-~37: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.58 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~38-~38: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.67 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~38-~38: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.67 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~39-~39: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.57 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~40-~40: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.47 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~41-~41: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.88 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~41-~41: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.88 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~42-~42: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...14 99394999 11.60 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~42-~42: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 99394999 11.60 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~43-~43: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.65 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~43-~43: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.65 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~44-~44: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...4 100000000 11.94 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~44-~44: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 100000000 11.94 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~45-~45: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71410506 17.11 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~46-~46: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71044978 17.04 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~47-~47: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 73479136 16.02 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~48-~48: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...-14 73639016 16.63 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~48-~48: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 73639016 16.63 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~49-~49: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 72728744 16.38 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~50-~50: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71737082 16.13 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~51-~51: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...-14 76073544 15.72 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~51-~51: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 76073544 15.72 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~52-~52: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 73673114 15.55 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~53-~53: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 70475266 16.27 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~54-~54: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 76181808 16.57 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~55-~55: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 69400598 18.96 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~55-~55: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 69400598 18.96 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~56-~56: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 73939244 16.36 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~57-~57: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 71737443 15.75 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~57-~57: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71737443 15.75 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~58-~58: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 71800394 16.43 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~59-~59: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 72954243 15.96 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~59-~59: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 72954243 15.96 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~60-~60: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 75871334 16.74 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~60-~60: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 75871334 16.74 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~61-~61: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 75076051 16.36 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~62-~62: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 69914791 16.31 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[uncategorized] ~63-~63: Als het om een tijd gaat, klopt mogelijk het tijdstip niet. Als het een getal is, zou er een komma moeten staan.
Context: ...0-14 64448419 16.68 ns/op 1 B/op 1 allocs/op ...

(TIJD_FOUT_PREMIUM)


[misspelling] ~63-~63: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 64448419 16.68 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)


[misspelling] ~64-~64: ‘ns’ zou fout kunnen zijn. Misschien bedoelt u: “eens”, “NS”
Context: ... 70766191 16.46 ns/op 1 B/op 1 allocs/op Ben...

(NL_SIMPLE_REPLACE_NS)

simapp/v2/go.mod (2)

61-61: LGTM: Appropriate version for local development

The addition of cosmossdk.io/core/testing v0.0.0 as an indirect dependency is correct when used in conjunction with a replace directive.


294-294: LGTM: Consistent replace directive

The replace directive for cosmossdk.io/core/testing follows the established pattern and correctly points to the local development path.

Comment on lines +11 to +14
var (
stackSizes = []int{1, 10, 100}
elemsInStack = 10
)
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Adjust stack sizes as per request

As suggested by @tac0turtle, consider using [100, 1000, 10000] for stack sizes to better represent real-world chain scenarios.

 var (
-	stackSizes   = []int{1, 10, 100}
+	stackSizes   = []int{100, 1000, 10000}
 	elemsInStack = 10
 )
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
var (
stackSizes = []int{1, 10, 100}
elemsInStack = 10
)
var (
stackSizes = []int{100, 1000, 10000}
elemsInStack = 10
)

Comment on lines +29 to +40
func Benchmark_Get(b *testing.B) {
for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, _ = bs.Get([]byte{0})
}
})
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Improve Get benchmark correctness

The benchmark needs several improvements:

  1. Missing verification of retrieved values
  2. No setup to ensure keys exist
  3. Error handling is ignored
 func Benchmark_Get(b *testing.B) {
 	for _, stackSize := range stackSizes {
 		b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
 			bs := makeBranchStack(b, stackSize)
+			key := []byte("test-key")
+			expectedValue := []byte("test-value")
+			if err := bs.Set(key, expectedValue); err != nil {
+				b.Fatal(err)
+			}
 			b.ResetTimer()
 			b.ReportAllocs()
 			for i := 0; i < b.N; i++ {
-				_, _ = bs.Get([]byte{0})
+				value, err := bs.Get(key)
+				if err != nil {
+					b.Fatal(err)
+				}
+				if !bytes.Equal(value, expectedValue) {
+					b.Fatalf("unexpected value: got %x, want %x", value, expectedValue)
+				}
 			}
 		})
 	}
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func Benchmark_Get(b *testing.B) {
for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, _ = bs.Get([]byte{0})
}
})
}
}
func Benchmark_Get(b *testing.B) {
for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
key := []byte("test-key")
expectedValue := []byte("test-value")
if err := bs.Set(key, expectedValue); err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
value, err := bs.Get(key)
if err != nil {
b.Fatal(err)
}
if !bytes.Equal(value, expectedValue) {
b.Fatalf("unexpected value: got %x, want %x", value, expectedValue)
}
}
})
}
}

Comment on lines +16 to +27
func Benchmark_CacheStack_Set(b *testing.B) {
for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_ = bs.Set([]byte{0}, []byte{0})
}
})
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Enhance Set benchmark reliability

Several improvements are needed:

  1. Using constant key/value pairs ([]byte{0}) doesn't represent real-world usage
  2. Missing cleanup between iterations could affect results
  3. Errors should be handled
 func Benchmark_CacheStack_Set(b *testing.B) {
 	for _, stackSize := range stackSizes {
 		b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
 			bs := makeBranchStack(b, stackSize)
+			key := make([]byte, 32)   // typical key size
+			value := make([]byte, 64) // typical value size
 			b.ResetTimer()
 			b.ReportAllocs()
 			for i := 0; i < b.N; i++ {
-				_ = bs.Set([]byte{0}, []byte{0})
+				binary.BigEndian.PutUint64(key, uint64(i))
+				if err := bs.Set(key, value); err != nil {
+					b.Fatal(err)
+				}
+				b.StopTimer()
+				bs.Discard()  // cleanup between iterations
+				b.StartTimer()
 			}
 		})
 	}
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func Benchmark_CacheStack_Set(b *testing.B) {
for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_ = bs.Set([]byte{0}, []byte{0})
}
})
}
}
func Benchmark_CacheStack_Set(b *testing.B) {
for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
key := make([]byte, 32) // typical key size
value := make([]byte, 64) // typical value size
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
binary.BigEndian.PutUint64(key, uint64(i))
if err := bs.Set(key, value); err != nil {
b.Fatal(err)
}
b.StopTimer()
bs.Discard() // cleanup between iterations
b.StartTimer()
}
})
}
}

Comment on lines +42 to +64
func Benchmark_Iterate(b *testing.B) {
var keySink, valueSink any

for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
iter, _ := bs.Iterator(nil, nil)
for iter.Valid() {
keySink = iter.Key()
valueSink = iter.Value()
iter.Next()
}
_ = iter.Close()
}
})
}

_ = keySink
_ = valueSink
}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix iterator usage and improve coverage

The benchmark has several issues:

  1. Iterator error handling is ignored
  2. No verification of iteration results
  3. Empty key range might not represent real usage
 func Benchmark_Iterate(b *testing.B) {
-	var keySink, valueSink any
+	var (
+		expectedKeys   = make([][]byte, 0, elemsInStack)
+		expectedValues = make([][]byte, 0, elemsInStack)
+	)
 
 	for _, stackSize := range stackSizes {
 		b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
 			bs := makeBranchStack(b, stackSize)
+			// Prepare expected data
+			for j := 0; j < elemsInStack; j++ {
+				expectedKeys = append(expectedKeys, []byte{byte(stackSize - 1), byte(j)})
+				expectedValues = append(expectedValues, []byte{byte(j)})
+			}
 			b.ResetTimer()
 			b.ReportAllocs()
 			for i := 0; i < b.N; i++ {
-				iter, _ := bs.Iterator(nil, nil)
+				iter, err := bs.Iterator([]byte{byte(stackSize - 1)}, nil)
+				if err != nil {
+					b.Fatal(err)
+				}
+				keyIdx := 0
 				for iter.Valid() {
-					keySink = iter.Key()
-					valueSink = iter.Value()
+					if !bytes.Equal(iter.Key(), expectedKeys[keyIdx]) {
+						b.Fatalf("unexpected key at %d: got %x, want %x", keyIdx, iter.Key(), expectedKeys[keyIdx])
+					}
+					if !bytes.Equal(iter.Value(), expectedValues[keyIdx]) {
+						b.Fatalf("unexpected value at %d: got %x, want %x", keyIdx, iter.Value(), expectedValues[keyIdx])
+					}
+					keyIdx++
 					iter.Next()
 				}
-				_ = iter.Close()
+				if err := iter.Close(); err != nil {
+					b.Fatal(err)
+				}
+				if keyIdx != len(expectedKeys) {
+					b.Fatalf("unexpected number of keys: got %d, want %d", keyIdx, len(expectedKeys))
+				}
 			}
 		})
 	}
-
-	_ = keySink
-	_ = valueSink
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
func Benchmark_Iterate(b *testing.B) {
var keySink, valueSink any
for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
iter, _ := bs.Iterator(nil, nil)
for iter.Valid() {
keySink = iter.Key()
valueSink = iter.Value()
iter.Next()
}
_ = iter.Close()
}
})
}
_ = keySink
_ = valueSink
}
func Benchmark_Iterate(b *testing.B) {
var (
expectedKeys = make([][]byte, 0, elemsInStack)
expectedValues = make([][]byte, 0, elemsInStack)
)
for _, stackSize := range stackSizes {
b.Run(fmt.Sprintf("StackSize%d", stackSize), func(b *testing.B) {
bs := makeBranchStack(b, stackSize)
// Prepare expected data
for j := 0; j < elemsInStack; j++ {
expectedKeys = append(expectedKeys, []byte{byte(stackSize - 1), byte(j)})
expectedValues = append(expectedValues, []byte{byte(j)})
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
iter, err := bs.Iterator([]byte{byte(stackSize - 1)}, nil)
if err != nil {
b.Fatal(err)
}
keyIdx := 0
for iter.Valid() {
if !bytes.Equal(iter.Key(), expectedKeys[keyIdx]) {
b.Fatalf("unexpected key at %d: got %x, want %x", keyIdx, iter.Key(), expectedKeys[keyIdx])
}
if !bytes.Equal(iter.Value(), expectedValues[keyIdx]) {
b.Fatalf("unexpected value at %d: got %x, want %x", keyIdx, iter.Value(), expectedValues[keyIdx])
}
keyIdx++
iter.Next()
}
if err := iter.Close(); err != nil {
b.Fatal(err)
}
if keyIdx != len(expectedKeys) {
b.Fatalf("unexpected number of keys: got %d, want %d", keyIdx, len(expectedKeys))
}
}
})
}
}

Comment on lines +34 to +38
value, err = s.parent.Get(key)
if err != nil {
return nil, err
}
return value, nil
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Fix error handling sequence in Get method.

The current implementation might cache invalid states because the value is retrieved from the parent store before checking for errors. Consider reordering the operations to ensure we only cache valid results.

Here's the suggested fix:

-	value, err = s.parent.Get(key)
-	if err != nil {
-		return nil, err
-	}
-	return value, nil
+	value, err = s.parent.Get(key)
+	if err != nil {
+		return nil, err
+	}
+	s.changeSet.set(key, value)  // Only cache after error check
+	return value, nil

Committable suggestion skipped: line range outside the PR's diff.

server/v2/stf/branch/mergeiter.go Show resolved Hide resolved
server/v2/stf/branch/bench_22131.txt Outdated Show resolved Hide resolved
server/v2/stf/branch/bench_22131.txt Outdated Show resolved Hide resolved
server/v2/stf/branch/bench_storev1.txt Outdated Show resolved Hide resolved
// If the iterator is invalid, it returns nil.
func (i *mergedIterator[Parent, Child]) Value() []byte {
if !i.valid {
panic("called value on invalid iterator")

Check warning

Code scanning / CodeQL

Panic in BeginBock or EndBlock consensus methods Warning

Possible panics in BeginBock- or EndBlock-related consensus methods could cause a chain halt
Copy link
Member

Choose a reason for hiding this comment

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

should we be committing these? It's probably good enough to drop the output into the PR.

@testinginprod testinginprod added this pull request to the merge queue Nov 6, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Nov 6, 2024
@tac0turtle tac0turtle enabled auto-merge November 7, 2024 13:17
@tac0turtle tac0turtle added this pull request to the merge queue Nov 7, 2024
Merged via the queue into main with commit 99b4858 Nov 7, 2024
75 of 76 checks passed
@tac0turtle tac0turtle deleted the tip/serverv2/mergedIterSPike branch November 7, 2024 14:55
alpe added a commit that referenced this pull request Nov 13, 2024
* main: (31 commits)
  docs: update links for https security protocol (#22514)
  build(deps): Bump github.com/bytedance/sonic from 1.12.3 to 1.12.4 in /log (#22513)
  feat(x/protocolpool)!: allow any coins in continuous funds (#21916)
  docs: Update protobuf  tx signing message format outer link (#22510)
  test(accounts): fix integration tests (#22418)
  chore(x): fix some typos in comment (#22508)
  build(deps): Bump cosmossdk.io/log from 1.4.1 to 1.5.0 (#22487)
  build(deps): Bump cosmossdk.io/core from 1.0.0-alpha.5 to 1.0.0-alpha.6 (#22502)
  build(deps): Bump golang.org/x/crypto from 0.28.0 to 0.29.0 (#22480)
  docs(adr75): server v2 (#21069)
  fix(server/v2): improve server stop (#22455)
  chore: prepare core changelog (#22495)
  refactor(store/v2): simplify genesis flow (#22435)
  build(deps): Bump google.golang.org/grpc from 1.67.1 to 1.68.0 (#22486)
  build(deps): Bump golang.org/x/sync from 0.8.0 to 0.9.0 (#22482)
  feat(x/circuit): Allow msg Reset with empty msgURL (#22459)
  build(deps): Bump actions/xxx-artifact from v3 to v4 (#22468)
  feat(stf/branch): simplify merged iterator (#22131)
  refactor(log): disable coloring in testing logger (#22466)
  chore(x/tx): update changelog to alpha.2 (#22465)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants