[
https://issues.apache.org/jira/browse/CASSANDRA-21160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18057334#comment-18057334
]
Arvind Kandpal edited comment on CASSANDRA-21160 at 2/9/26 11:51 AM:
---------------------------------------------------------------------
Hi,
I have looked into the code for VectorMemoryIndex, and here is what I found:
The add method is currently synchronized, which serializes the entire insertion
process. As the description suggests, this creates unnecessary contention since
the underlying graph structure supports concurrent writes.
My thought process on the fix: Simply removing the synchronized keyword isn't
enough because updateKeyBounds modifies the mutable minimumKey and maximumKey.
If we remove the lock entirely, updates to these bounds won't be thread-safe.
I plan to remove synchronized from the add method signature but wrap the
updateKeyBounds(primaryKey call in a synchronized block. This ensures that the
heavy graph.add operation runs concurrently, while the lightweight bounds
update remains protected.
Is this correct approach ?
was (Author: JIRAUSER311141):
Hi,
I have looked into the code for {{{}VectorMemoryIndex{}}}, and here is what I
found:
The {{add}} method is currently {{{}synchronized{}}}, which serializes the
entire insertion process. As the description suggests, this creates unnecessary
contention since the underlying graph structure supports concurrent writes.
*My thought process on the fix:* Simply removing the {{synchronized}} keyword
isn't enough because {{updateKeyBounds}} modifies the mutable {{minimumKey}}
and {{{}maximumKey{}}}. If we remove the lock entirely, updates to these bounds
won't be thread-safe.
*Proposal:* I plan to remove {{synchronized}} from the {{add}} method signature
but wrap the {{updateKeyBounds(primaryKey)}} call in a {{synchronized}} block.
This ensures that the heavy {{graph.add}} operation runs concurrently, while
the lightweight bounds update remains protected.
Is this correct approach ?
> VectorMemoryIndex has unnecessary synchronization on the add method
> -------------------------------------------------------------------
>
> Key: CASSANDRA-21160
> URL: https://issues.apache.org/jira/browse/CASSANDRA-21160
> Project: Apache Cassandra
> Issue Type: Improvement
> Components: Feature/Vector Search
> Reporter: Michael Marshall
> Priority: Normal
>
> The `VectorMemoryIndex` supports asynchronous additions to the graph.
> However, the `synchronous` keyword for the `add` method prevents this and
> therefore means we are adding a point of contention that is unnecessary.
> As part of this ticket, we should verify my understanding that writes can be
> concurrent and then drop the keyword.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]