[jira] [Comment Edited] (CASSANDRA-6936) Make all byte representations of types comparable by their unsigned byte representation only

2022-06-30 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-6936?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17560942#comment-17560942
 ] 

Ivan Senic edited comment on CASSANDRA-6936 at 6/30/22 9:12 AM:


Do I understand correct that this will be first available in the `4.2` release 
that is scheduled to go out in a year?


was (Author: JIRAUSER281556):
Do I understand good that this will be first available in the `4.2` release 
that is scheduled to go out in a year?

> Make all byte representations of types comparable by their unsigned byte 
> representation only
> 
>
> Key: CASSANDRA-6936
> URL: https://issues.apache.org/jira/browse/CASSANDRA-6936
> Project: Cassandra
>  Issue Type: Improvement
>  Components: Legacy/Core
>Reporter: Benedict Elliott Smith
>Assignee: Branimir Lambov
>Priority: Normal
>  Labels: compaction, performance
> Fix For: 4.2
>
>  Time Spent: 25h
>  Remaining Estimate: 0h
>
> This could be a painful change, but is necessary for implementing a 
> trie-based index, and settling for less would be suboptimal; it also should 
> make comparisons cheaper all-round, and since comparison operations are 
> pretty much the majority of C*'s business, this should be easily felt (see 
> CASSANDRA-6553 and CASSANDRA-6934 for an example of some minor changes with 
> major performance impacts). No copying/special casing/slicing should mean 
> fewer opportunities to introduce performance regressions as well.
> Since I have slated for 3.0 a lot of non-backwards-compatible sstable 
> changes, hopefully this shouldn't be too much more of a burden.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-6936) Make all byte representations of types comparable by their unsigned byte representation only

2022-06-30 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-6936?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17560942#comment-17560942
 ] 

Ivan Senic commented on CASSANDRA-6936:
---

Do I understand good that this will be first available in the `4.2` release 
that is scheduled to go out in a year?

> Make all byte representations of types comparable by their unsigned byte 
> representation only
> 
>
> Key: CASSANDRA-6936
> URL: https://issues.apache.org/jira/browse/CASSANDRA-6936
> Project: Cassandra
>  Issue Type: Improvement
>  Components: Legacy/Core
>Reporter: Benedict Elliott Smith
>Assignee: Branimir Lambov
>Priority: Normal
>  Labels: compaction, performance
> Fix For: 4.2
>
>  Time Spent: 25h
>  Remaining Estimate: 0h
>
> This could be a painful change, but is necessary for implementing a 
> trie-based index, and settling for less would be suboptimal; it also should 
> make comparisons cheaper all-round, and since comparison operations are 
> pretty much the majority of C*'s business, this should be easily felt (see 
> CASSANDRA-6553 and CASSANDRA-6934 for an example of some minor changes with 
> major performance impacts). No copying/special casing/slicing should mean 
> fewer opportunities to introduce performance regressions as well.
> Since I have slated for 3.0 a lot of non-backwards-compatible sstable 
> changes, hopefully this shouldn't be too much more of a burden.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-17401) Race condition in QueryProcessor causes just prepared statement not to be in the prepared statements cache

2022-02-24 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-17401?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17497383#comment-17497383
 ] 

Ivan Senic commented on CASSANDRA-17401:


[~ifesdjeen] [~e.dimitrova] You can close the issue. I do understand the on 
execution of the prepared statement it will be re-prepared if the cache does 
not contain it. We ll adapt usage in Stargate.

> Race condition in QueryProcessor causes just prepared statement not to be in 
> the prepared statements cache
> --
>
> Key: CASSANDRA-17401
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17401
> Project: Cassandra
>  Issue Type: Bug
>Reporter: Ivan Senic
>Priority: Normal
>
> The changes in the 
> [QueryProcessor#prepare|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L575-L638]
>  method that were introduced in versions *4.0.2* and *3.11.12* can cause a 
> race condition between two threads trying to concurrently prepare the same 
> statement. This race condition can cause removing of a prepared statement 
> from the cache, after one of the threads has received the result of the 
> prepare and eventually uses MD5Digest to call 
> [QueryProcessor#getPrepared|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L212-L215].
> The race condition looks like this:
>  * Thread1 enters _prepare_ method and resolves _safeToReturnCached_ as false
>  * Thread1 executes eviction of hashes
>  * Thread2 enters _prepare_ method and resolves _safeToReturnCached_ as false
>  * Thread1 prepares the statement and caches it
>  * Thread1 returns the result of the prepare
>  * Thread2 executes eviction of hashes
>  * Thread1 tries to execute the prepared statement with the received 
> MD5Digest, but statement is not in the cache as it was evicted by Thread2
> I tried to reproduce this by using a Java driver, but hitting this case from 
> a client side is highly unlikely and I can not simulate the needed race 
> condition. However, we can easily reproduce this in Stargate (details 
> [here|https://github.com/stargate/stargate/pull/1647]), as it's closer to 
> QueryProcessor.
> Reproducing this in a unit test is fairly easy. I am happy to showcase this 
> if needed.
> Note that the issue can occur only when  safeToReturnCached is resolved as 
> false.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-17401) Race condition in QueryProcessor causes just prepared statement not to be in the prepared statements cache

2022-02-23 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-17401?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17496911#comment-17496911
 ] 

Ivan Senic commented on CASSANDRA-17401:


[~ifesdjeen] I have to admin that internals of Cassandra are not 100% familiar 
to me. However, wouldn't there be a _PreparedQueryNotFoundException_ thrown in 
the _ExecuteMessage_ or the _BatchMessage_ if the _QueryHandler.getPrepared_ 
returns null? I don't know how this is exception handled or how is the 
re-preparing actually working.

Maybe I was not clear in my explanation above, but bottom line is that if the 
race condition is uncovering the issue described, the 
_QueryHandler.getPrepared_  will return null for the MD5 that was just returned 
by the same class prepare method call. If you think this is acceptable, then 
you can close the issue.

> Race condition in QueryProcessor causes just prepared statement not to be in 
> the prepared statements cache
> --
>
> Key: CASSANDRA-17401
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17401
> Project: Cassandra
>  Issue Type: Bug
>Reporter: Ivan Senic
>Priority: Normal
>
> The changes in the 
> [QueryProcessor#prepare|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L575-L638]
>  method that were introduced in versions *4.0.2* and *3.11.12* can cause a 
> race condition between two threads trying to concurrently prepare the same 
> statement. This race condition can cause removing of a prepared statement 
> from the cache, after one of the threads has received the result of the 
> prepare and eventually uses MD5Digest to call 
> [QueryProcessor#getPrepared|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L212-L215].
> The race condition looks like this:
>  * Thread1 enters _prepare_ method and resolves _safeToReturnCached_ as false
>  * Thread1 executes eviction of hashes
>  * Thread2 enters _prepare_ method and resolves _safeToReturnCached_ as false
>  * Thread1 prepares the statement and caches it
>  * Thread1 returns the result of the prepare
>  * Thread2 executes eviction of hashes
>  * Thread1 tries to execute the prepared statement with the received 
> MD5Digest, but statement is not in the cache as it was evicted by Thread2
> I tried to reproduce this by using a Java driver, but hitting this case from 
> a client side is highly unlikely and I can not simulate the needed race 
> condition. However, we can easily reproduce this in Stargate (details 
> [here|https://github.com/stargate/stargate/pull/1647]), as it's closer to 
> QueryProcessor.
> Reproducing this in a unit test is fairly easy. I am happy to showcase this 
> if needed.
> Note that the issue can occur only when  safeToReturnCached is resolved as 
> false.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-17401) Race condition in QueryProcessor causes just prepared statement not to be in the prepared statements cache

2022-02-23 Thread Ivan Senic (Jira)


 [ 
https://issues.apache.org/jira/browse/CASSANDRA-17401?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ivan Senic updated CASSANDRA-17401:
---
Description: 
The changes in the 
[QueryProcessor#prepare|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L575-L638]
 method that were introduced in versions *4.0.2* and *3.11.12* can cause a race 
condition between two threads trying to concurrently prepare the same 
statement. This race condition can cause removing of a prepared statement from 
the cache, after one of the threads has received the result of the prepare and 
eventually uses MD5Digest to call 
[QueryProcessor#getPrepared|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L212-L215].

The race condition looks like this:
 * Thread1 enters _prepare_ method and resolves _safeToReturnCached_ as false
 * Thread1 executes eviction of hashes
 * Thread2 enters _prepare_ method and resolves _safeToReturnCached_ as false
 * Thread1 prepares the statement and caches it
 * Thread1 returns the result of the prepare
 * Thread2 executes eviction of hashes
 * Thread1 tries to execute the prepared statement with the received MD5Digest, 
but statement is not in the cache as it was evicted by Thread2

I tried to reproduce this by using a Java driver, but hitting this case from a 
client side is highly unlikely and I can not simulate the needed race 
condition. However, we can easily reproduce this in Stargate (details 
[here|https://github.com/stargate/stargate/pull/1647]), as it's closer to 
QueryProcessor.

Reproducing this in a unit test is fairly easy. I am happy to showcase this if 
needed.

Note that the issue can occur only when  safeToReturnCached is resolved as 
false.

  was:
The changes in the 
[QueryProcessor#prepare|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L575-L638]
 method that were introduced in versions *4.0.2* and *3.11.12* can cause a race 
condition between two threads trying to concurrently prepare the same 
statement. This race condition can cause removing of a prepared statement from 
the cache, after one of the threads has received the result of the prepare and 
eventually uses MD5Digest to call 
[QueryProcessor#getPrepared|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L212-L215].

The race condition looks like this:
 * Thread1 enters _prepare_ method and resolves _safeToReturnCached_ as false
 * Thread1 executes eviction of hashes
 * Thread2 enters _prepare_ method and resolves _safeToReturnCached_ as false
 * Thread1 prepares the statement and caches it
 * Thread1 returns the result of the prepare
 * Thread2 executes eviction of hashes
 * Thread1 tries to execute the prepared statement with the received MD5Digest, 
but statement is not in the cache as it was evicted by Thread2

I tried to reproduce this by using a Java driver, but hitting this case from a 
client side is highly unlikely and I can not simulate the needed race 
condition. However, we can easily reproduce this in Stargate (details 
[here|https://github.com/stargate/stargate/pull/1647]), as it's closer to 
QueryProcessor.

 

Reproducing this in a unit test is fairly easy. I am happy to showcase this if 
needed.

 

Note that the issue can occur only when  safeToReturnCached is resolved as 
false.


> Race condition in QueryProcessor causes just prepared statement not to be in 
> the prepared statements cache
> --
>
> Key: CASSANDRA-17401
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17401
> Project: Cassandra
>  Issue Type: Bug
>Reporter: Ivan Senic
>Priority: Normal
>
> The changes in the 
> [QueryProcessor#prepare|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L575-L638]
>  method that were introduced in versions *4.0.2* and *3.11.12* can cause a 
> race condition between two threads trying to concurrently prepare the same 
> statement. This race condition can cause removing of a prepared statement 
> from the cache, after one of the threads has received the result of the 
> prepare and eventually uses MD5Digest to call 
> [QueryProcessor#getPrepared|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L212-L215].
> The race condition looks like this:
>  * Thread1 enters _prepare_ method and resolves _safeToReturnCached_ as false
>  * Thread1 executes eviction of hashes
>  * Thread2 enters _prepare_ method and resolves _safeToReturnCached_ as false
>  * Thread1 prepares the statement and 

[jira] [Created] (CASSANDRA-17401) Race condition in QueryProcessor causes just prepared statement not to be in the prepared statements cache

2022-02-23 Thread Ivan Senic (Jira)
Ivan Senic created CASSANDRA-17401:
--

 Summary: Race condition in QueryProcessor causes just prepared 
statement not to be in the prepared statements cache
 Key: CASSANDRA-17401
 URL: https://issues.apache.org/jira/browse/CASSANDRA-17401
 Project: Cassandra
  Issue Type: Bug
Reporter: Ivan Senic


The changes in the 
[QueryProcessor#prepare|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L575-L638]
 method that were introduced in versions *4.0.2* and *3.11.12* can cause a race 
condition between two threads trying to concurrently prepare the same 
statement. This race condition can cause removing of a prepared statement from 
the cache, after one of the threads has received the result of the prepare and 
eventually uses MD5Digest to call 
[QueryProcessor#getPrepared|https://github.com/apache/cassandra/blame/cassandra-4.0.2/src/java/org/apache/cassandra/cql3/QueryProcessor.java#L212-L215].

The race condition looks like this:
 * Thread1 enters _prepare_ method and resolves _safeToReturnCached_ as false
 * Thread1 executes eviction of hashes
 * Thread2 enters _prepare_ method and resolves _safeToReturnCached_ as false
 * Thread1 prepares the statement and caches it
 * Thread1 returns the result of the prepare
 * Thread2 executes eviction of hashes
 * Thread1 tries to execute the prepared statement with the received MD5Digest, 
but statement is not in the cache as it was evicted by Thread2

I tried to reproduce this by using a Java driver, but hitting this case from a 
client side is highly unlikely and I can not simulate the needed race 
condition. However, we can easily reproduce this in Stargate (details 
[here|https://github.com/stargate/stargate/pull/1647]), as it's closer to 
QueryProcessor.

 

Reproducing this in a unit test is fairly easy. I am happy to showcase this if 
needed.

 

Note that the issue can occur only when  safeToReturnCached is resolved as 
false.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Comment Edited] (CASSANDRA-17202) Avoid unnecessary String.format in QueryProcessor when getting stored prepared statement

2021-12-15 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-17202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17460022#comment-17460022
 ] 

Ivan Senic edited comment on CASSANDRA-17202 at 12/15/21, 3:00 PM:
---

Done.

3.11: [https://github.com/apache/cassandra/pull/1364]
4.0: [https://github.com/apache/cassandra/pull/1365]

 


was (Author: JIRAUSER281556):
Done: 

3.11: [https://github.com/apache/cassandra/pull/1364]
4.0: [https://github.com/apache/cassandra/pull/1365]

 

> Avoid unnecessary String.format in QueryProcessor when getting stored 
> prepared statement 
> -
>
> Key: CASSANDRA-17202
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17202
> Project: Cassandra
>  Issue Type: Bug
>  Components: Messaging/Client
>Reporter: Ivan Senic
>Assignee: Ivan Senic
>Priority: Low
> Fix For: 4.x
>
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found 
> in the prepared statements cache, there is always unnecessary string creation 
> using String.format in order to execute the _checkTrue_ assertion. The string 
> construction is necessary only when the queries are not equal.
> {code:java}
> public static ResultMessage.Prepared getStoredPreparedStatement(String 
> queryString, String clientKeyspace)
> throws InvalidRequestException
> {
> MD5Digest statementId = computeId(queryString, clientKeyspace);
> Prepared existing = preparedStatements.getIfPresent(statementId);
> if (existing == null)
> return null;
> checkTrue(queryString.equals(existing.rawCQLStatement),
> String.format("MD5 hash collision: query with the same MD5 hash 
> was already prepared. \n Existing: '%s'", existing.rawCQLStatement));
>  {code}
> Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
> getting on my nerves as it's popping up on my flame graphs all the time.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-17202) Avoid unnecessary String.format in QueryProcessor when getting stored prepared statement

2021-12-15 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-17202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17460022#comment-17460022
 ] 

Ivan Senic commented on CASSANDRA-17202:


Done: 

3.11: [https://github.com/apache/cassandra/pull/1364]
4.0: [https://github.com/apache/cassandra/pull/1365]

 

> Avoid unnecessary String.format in QueryProcessor when getting stored 
> prepared statement 
> -
>
> Key: CASSANDRA-17202
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17202
> Project: Cassandra
>  Issue Type: Bug
>  Components: Messaging/Client
>Reporter: Ivan Senic
>Assignee: Ivan Senic
>Priority: Low
> Fix For: 4.x
>
>  Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found 
> in the prepared statements cache, there is always unnecessary string creation 
> using String.format in order to execute the _checkTrue_ assertion. The string 
> construction is necessary only when the queries are not equal.
> {code:java}
> public static ResultMessage.Prepared getStoredPreparedStatement(String 
> queryString, String clientKeyspace)
> throws InvalidRequestException
> {
> MD5Digest statementId = computeId(queryString, clientKeyspace);
> Prepared existing = preparedStatements.getIfPresent(statementId);
> if (existing == null)
> return null;
> checkTrue(queryString.equals(existing.rawCQLStatement),
> String.format("MD5 hash collision: query with the same MD5 hash 
> was already prepared. \n Existing: '%s'", existing.rawCQLStatement));
>  {code}
> Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
> getting on my nerves as it's popping up on my flame graphs all the time.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-17202) Avoid unnecessary String.format in QueryProcessor when getting stored prepared statement

2021-12-15 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-17202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17459937#comment-17459937
 ] 

Ivan Senic commented on CASSANDRA-17202:


The GitHub PR is updated as per request.

[~blerer] Are you saying I should create two more PRs, one targeting the 
_cassandra-3.11_ and one _cassandra-4.0_ branch? The current PR targets the 
{_}trunk{_}.

> Avoid unnecessary String.format in QueryProcessor when getting stored 
> prepared statement 
> -
>
> Key: CASSANDRA-17202
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17202
> Project: Cassandra
>  Issue Type: Bug
>  Components: Messaging/Client
>Reporter: Ivan Senic
>Assignee: Ivan Senic
>Priority: Low
> Fix For: 4.x
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found 
> in the prepared statements cache, there is always unnecessary string creation 
> using String.format in order to execute the _checkTrue_ assertion. The string 
> construction is necessary only when the queries are not equal.
> {code:java}
> public static ResultMessage.Prepared getStoredPreparedStatement(String 
> queryString, String clientKeyspace)
> throws InvalidRequestException
> {
> MD5Digest statementId = computeId(queryString, clientKeyspace);
> Prepared existing = preparedStatements.getIfPresent(statementId);
> if (existing == null)
> return null;
> checkTrue(queryString.equals(existing.rawCQLStatement),
> String.format("MD5 hash collision: query with the same MD5 hash 
> was already prepared. \n Existing: '%s'", existing.rawCQLStatement));
>  {code}
> Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
> getting on my nerves as it's popping up on my flame graphs all the time.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-17202) Avoid unnecessary String.format in QueryProcessor when getting stored prepared statement

2021-12-13 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-17202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17458466#comment-17458466
 ] 

Ivan Senic commented on CASSANDRA-17202:


[~blerer] I missed that.. Sure that's better and involves less changes.. Should 
I update the PR?

> Avoid unnecessary String.format in QueryProcessor when getting stored 
> prepared statement 
> -
>
> Key: CASSANDRA-17202
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17202
> Project: Cassandra
>  Issue Type: Bug
>  Components: Messaging/Client
>Reporter: Ivan Senic
>Assignee: Ivan Senic
>Priority: Low
> Fix For: 4.x
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found 
> in the prepared statements cache, there is always unnecessary string creation 
> using String.format in order to execute the _checkTrue_ assertion. The string 
> construction is necessary only when the queries are not equal.
> {code:java}
> public static ResultMessage.Prepared getStoredPreparedStatement(String 
> queryString, String clientKeyspace)
> throws InvalidRequestException
> {
> MD5Digest statementId = computeId(queryString, clientKeyspace);
> Prepared existing = preparedStatements.getIfPresent(statementId);
> if (existing == null)
> return null;
> checkTrue(queryString.equals(existing.rawCQLStatement),
> String.format("MD5 hash collision: query with the same MD5 hash 
> was already prepared. \n Existing: '%s'", existing.rawCQLStatement));
>  {code}
> Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
> getting on my nerves as it's popping up on my flame graphs all the time.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Updated] (CASSANDRA-17202) Avoid unnecessary String.format in QueryProcessor when getting stored prepared statement

2021-12-10 Thread Ivan Senic (Jira)


 [ 
https://issues.apache.org/jira/browse/CASSANDRA-17202?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ivan Senic updated CASSANDRA-17202:
---
Description: 
In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found in 
the prepared statements cache, there is always unnecessary string creation 
using String.format in order to execute the _checkTrue_ assertion. The string 
construction is necessary only when the queries are not equal.
{code:java}
public static ResultMessage.Prepared getStoredPreparedStatement(String 
queryString, String clientKeyspace)
throws InvalidRequestException
{
MD5Digest statementId = computeId(queryString, clientKeyspace);
Prepared existing = preparedStatements.getIfPresent(statementId);
if (existing == null)
return null;

checkTrue(queryString.equals(existing.rawCQLStatement),
String.format("MD5 hash collision: query with the same MD5 hash was 
already prepared. \n Existing: '%s'", existing.rawCQLStatement));
 {code}
Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
getting on my nerves as it's popping up on my flame graphs all the time.

 

  was:
In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found in 
the prepared statements cache, there is always unnecessary string creation 
using String.format in order to execute the _checkTrue_ assertion. The string 
construction is necessary only when the queries are not equal.


{code:java}
public static ResultMessage.Prepared getStoredPreparedStatement(String 
queryString, String clientKeyspace)
throws InvalidRequestException
{
MD5Digest statementId = computeId(queryString, clientKeyspace);
Prepared existing = preparedStatements.getIfPresent(statementId);
if (existing == null)
return null;

checkTrue(queryString.equals(existing.rawCQLStatement),
String.format("MD5 hash collision: query with the same MD5 hash was 
already prepared. \n Existing: '%s'", existing.rawCQLStatement));
 {code}
Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
getting in my nerves as it's popping up on my flame graphs all the time.

 


> Avoid unnecessary String.format in QueryProcessor when getting stored 
> prepared statement 
> -
>
> Key: CASSANDRA-17202
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17202
> Project: Cassandra
>  Issue Type: Improvement
>  Components: Messaging/Client
>Reporter: Ivan Senic
>Assignee: Ivan Senic
>Priority: Low
> Fix For: 4.x
>
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found 
> in the prepared statements cache, there is always unnecessary string creation 
> using String.format in order to execute the _checkTrue_ assertion. The string 
> construction is necessary only when the queries are not equal.
> {code:java}
> public static ResultMessage.Prepared getStoredPreparedStatement(String 
> queryString, String clientKeyspace)
> throws InvalidRequestException
> {
> MD5Digest statementId = computeId(queryString, clientKeyspace);
> Prepared existing = preparedStatements.getIfPresent(statementId);
> if (existing == null)
> return null;
> checkTrue(queryString.equals(existing.rawCQLStatement),
> String.format("MD5 hash collision: query with the same MD5 hash 
> was already prepared. \n Existing: '%s'", existing.rawCQLStatement));
>  {code}
> Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
> getting on my nerves as it's popping up on my flame graphs all the time.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Commented] (CASSANDRA-17202) Avoid unnecessary String.format in QueryProcessor when getting stored prepared statement

2021-12-10 Thread Ivan Senic (Jira)


[ 
https://issues.apache.org/jira/browse/CASSANDRA-17202?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17457170#comment-17457170
 ] 

Ivan Senic commented on CASSANDRA-17202:


PR: https://github.com/apache/cassandra/pull/1358

> Avoid unnecessary String.format in QueryProcessor when getting stored 
> prepared statement 
> -
>
> Key: CASSANDRA-17202
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17202
> Project: Cassandra
>  Issue Type: Improvement
>Reporter: Ivan Senic
>Assignee: Ivan Senic
>Priority: Normal
>  Time Spent: 10m
>  Remaining Estimate: 0h
>
> In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found 
> in the prepared statements cache, there is always unnecessary string creation 
> using String.format in order to execute the _checkTrue_ assertion. The string 
> construction is necessary only when the queries are not equal.
> {code:java}
> public static ResultMessage.Prepared getStoredPreparedStatement(String 
> queryString, String clientKeyspace)
> throws InvalidRequestException
> {
> MD5Digest statementId = computeId(queryString, clientKeyspace);
> Prepared existing = preparedStatements.getIfPresent(statementId);
> if (existing == null)
> return null;
> checkTrue(queryString.equals(existing.rawCQLStatement),
> String.format("MD5 hash collision: query with the same MD5 hash 
> was already prepared. \n Existing: '%s'", existing.rawCQLStatement));
>  {code}
> Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
> getting in my nerves as it's popping up on my flame graphs all the time.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org



[jira] [Created] (CASSANDRA-17202) Avoid unnecessary String.format in QueryProcessor when getting stored prepared statement

2021-12-10 Thread Ivan Senic (Jira)
Ivan Senic created CASSANDRA-17202:
--

 Summary: Avoid unnecessary String.format in QueryProcessor when 
getting stored prepared statement 
 Key: CASSANDRA-17202
 URL: https://issues.apache.org/jira/browse/CASSANDRA-17202
 Project: Cassandra
  Issue Type: Improvement
Reporter: Ivan Senic
Assignee: Ivan Senic


In the _QueryProcessor#getStoredPreparedStatement_ if the statement is found in 
the prepared statements cache, there is always unnecessary string creation 
using String.format in order to execute the _checkTrue_ assertion. The string 
construction is necessary only when the queries are not equal.


{code:java}
public static ResultMessage.Prepared getStoredPreparedStatement(String 
queryString, String clientKeyspace)
throws InvalidRequestException
{
MD5Digest statementId = computeId(queryString, clientKeyspace);
Prepared existing = preparedStatements.getIfPresent(statementId);
if (existing == null)
return null;

checkTrue(queryString.equals(existing.rawCQLStatement),
String.format("MD5 hash collision: query with the same MD5 hash was 
already prepared. \n Existing: '%s'", existing.rawCQLStatement));
 {code}
Hopefully the JIT can optimize this once the _checkTrue_ is inlined, but it's 
getting in my nerves as it's popping up on my flame graphs all the time.

 



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

-
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org