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

[CASSANDRA-20167][trunk] Reduce memory allocations in miscellaneous places along write path #3845

Open
wants to merge 8 commits into
base: trunk
Choose a base branch
from

Conversation

netudima
Copy link
Contributor

Avoid unnecessary allocations in different places along write path

  • avoid iterator allocations if possible
  • handle typical cases (such as a single row, single table writes) more efficiently
  • add fast paths for typical scenarios (like pending ranges is empty)
  • memorize things which can be computed once

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever for CASSANDRA-20167

Dmitry Konstantinov added 7 commits January 28, 2025 18:09
Avoid objects allocations used only in rarely invoked logic branches. Memorize things which can be computed once. Avoid unnecessary iterators for the write hot path. Do not recreate immutable objects with the same content.

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever for CASSANDRA-20167
- parse header and query options flags as int, without EnumSet overheads
- avoid ByteBuffer slicing in 2 places
- avoid a capturing lambda allocation by using an explicit interface

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever for CASSANDRA-20167
- avoid an unnecessary byte buffer slicing (DataOutputBuffer.toByteArray()) during a Mutation serialization
- replace AtomicLong viewLockAcquireStart field in Mutation with volatile long and AtomicLongFieldUpdater usage

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever for CASSANDRA-20167
…earchIterator within inclusionTester() logic which checks if we need to iterate over particular column for each cell. It is not really needed here: we've just added these cells during PartitionUpdate creation

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever for CASSANDRA-20167
…Parameters

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever for CASSANDRA-20167
…te within a single table ( very typical case when we just modify a single row)

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever for CASSANDRA-20167
…fications constructor, we had to copy columnSpecs for every request because in one place plain List is used and ImmutableList in another one

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever for CASSANDRA-20167
…ater is used

Patch by Dmitry Konstantinov; reviewed by Chris Lohfink, Michael Semb Wever, Vladimir Sitnikov for CASSANDRA-20167
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants