Skip to content

Introduce a NumPendingMulti that uses a sublist for efficient selection.#6089

Merged
derekcollison merged 3 commits intomainfrom
np-multi
Nov 8, 2024
Merged

Introduce a NumPendingMulti that uses a sublist for efficient selection.#6089
derekcollison merged 3 commits intomainfrom
np-multi

Conversation

@derekcollison
Copy link
Copy Markdown
Member

Consumers with many filtered subjects and large streams could suffer from slow creation times due to NumPending() being called for all filtered subjects.

This improvement is similar to the LoadNextMsgMulti for consumers with large number of filtered subjects.

Also fixed a bug in normal NumPending for memstore.

Signed-off-by: Derek Collison derek@nats.io

Similar to the LoadNextMsgMulti for consumers with large number of filtered subjects.

Also fixed a bug in normal NumPending for memstore.

Signed-off-by: Derek Collison <derek@nats.io>
@derekcollison derekcollison requested a review from a team as a code owner November 8, 2024 07:05
Copy link
Copy Markdown
Member

@neilalexander neilalexander left a comment

Choose a reason for hiding this comment

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

LGTM!

Signed-off-by: Derek Collison <derek@nats.io>
@derekcollison derekcollison requested a review from bruth November 8, 2024 16:32
Copy link
Copy Markdown
Member

@neilalexander neilalexander left a comment

Choose a reason for hiding this comment

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

LGTM

@derekcollison derekcollison merged commit eed9455 into main Nov 8, 2024
@derekcollison derekcollison deleted the np-multi branch November 8, 2024 18:11
neilalexander added a commit that referenced this pull request Nov 12, 2024
This optimises #6089 by ensuring that we don't over-walk either the
sublist or the subject tree, instead only matching the subject tree on
subjects for which the sublist expresses interest.

Signed-off-by: Neil Twigg <neil@nats.io>
neilalexander pushed a commit that referenced this pull request Nov 12, 2024
…on. (#6089)

Consumers with many filtered subjects and large streams could suffer
from slow creation times due to NumPending() being called for all
filtered subjects.

This improvement is similar to the LoadNextMsgMulti for consumers with
large number of filtered subjects.

Also fixed a bug in normal NumPending for memstore.

Signed-off-by: Derek Collison <derek@nats.io>

---------

Signed-off-by: Derek Collison <derek@nats.io>
neilalexander added a commit that referenced this pull request Nov 12, 2024
This optimises #6089 by ensuring that we don't over-walk either the
sublist or the subject tree, instead only matching the subject tree on
subjects for which the sublist expresses interest.

Signed-off-by: Neil Twigg <neil@nats.io>
derekcollison added a commit that referenced this pull request Nov 12, 2024
This optimises #6089 by ensuring that we don't over-walk either the
sublist or the subject tree, instead only matching the subject tree on
subjects for which the sublist expresses interest.

On my machine, in the `JetStreamConsumeWithFilters` benchmark with
`-benchtime 1000x`, this reduces the CPU time taken by `NumPendingMulti`
by 19.41 seconds, reducing it to only 0.06 seconds.

Signed-off-by: Neil Twigg <neil@nats.io>
neilalexander added a commit that referenced this pull request Nov 12, 2024
This optimises #6089 by ensuring that we don't over-walk either the
sublist or the subject tree, instead only matching the subject tree on
subjects for which the sublist expresses interest.

Signed-off-by: Neil Twigg <neil@nats.io>
neilalexander added a commit that referenced this pull request Nov 12, 2024
Includes the following:

* Some tweaks to the NRG test helpers
* #6055
* #6061
* #6065 
* #6041 (but with `math/rand`
instead of `math/rand/v2` due to an older Go version in CI for 2.10.x)
* #6066
* #6067
* #6069
* #6075
* #6082
* #6087
* #6086
* #6088
* #6089
* #6092
* #6096
* #6098
* #6097
* #6105
* #6104
* #6106
* #6109
* #6111
* #6112

Signed-off-by: Neil Twigg <neil@nats.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants