[
https://issues.apache.org/jira/browse/CASSANDRA-20028?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17892961#comment-17892961
]
João Reis commented on CASSANDRA-20028:
---------------------------------------
Ok so with the java driver things are a bit different. It still gets the
UNPREPARED but when re-preparing the java driver does not update the local
prepared statement object with the results from the re-prepare request so the
following EXECUTE is sent with the old metadata ID and in this case we do see
the METADATA_CHANGED flag. So the server clearly has this behavior implemented
but something is causing the server to maybe evict the statement from its cache
after the ALTER TABLE statement?
> METADATA_CHANGED is never set
> -----------------------------
>
> Key: CASSANDRA-20028
> URL: https://issues.apache.org/jira/browse/CASSANDRA-20028
> Project: Cassandra
> Issue Type: Bug
> Components: Legacy/CQL
> Reporter: João Reis
> Priority: Normal
> Fix For: 4.0.x, 4.1.x, 5.0.x, 5.x
>
>
> CASSANDRA-10786 added the METADATA_CHANGED flag to the v5 spec (ROWS
> RESPONSE). Drivers are supposed to handle this flag and update their locally
> cached prepared statement object with the new metadata.
> As we're working to implement v5 support on GoCQL we are trying to trigger a
> scenario where C* returns this flag but we are unable to. Instead we receive
> an UNPREPARED which causes the driver to re-prepare the statement. This flag
> was added to avoid this scenario so I don't really understand if there is a
> bug somewhere or if the test case we're creating is not valid?
> I ran the following steps against C* 4.0-rc1, 4.0.0 and 5.0.2 with the same
> results:
> {code}
> CREATE KEYSPACE testks WITH REPLICATION = { 'class': 'SimpleStrategy',
> 'replication_factor': 1 }
> CREATE TABLE testks.testtable (id uuid PRIMARY KEY, txt TEXT)
> INSERT INTO testks.testtable(id, txt) VALUES (uuid(), 'test')
> // PREPARED_ID: 2bea4b54ec20bd3533f7b91467abb618
> // RESULT METADATA ID: 1f685bd34ed0ba1e99ba6bd960da2545
> SELECT * FROM testks.testtable
> ALTER TABLE testks.testtable ADD (txt2 TEXT)
> INSERT INTO testks.testtable(id, txt, txt2) VALUES (uuid(), 'test2',
> 'test222')
> // this SELECT gets an UNPREPARED response from the server
> // instead of a ROWS response with the new metadata
> //
> // after RE-PREPARE:
> // PREPARED_ID: 2bea4b54ec20bd3533f7b91467abb618
> // RESULT METADATA ID: 87257e07eccd14a6c8e623012af9278a
> SELECT * FROM testtable
> {code}
> Note that v5 support on gocql is still WIP so I imported gocql [from this
> branch|https://github.com/apache/cassandra-gocql-driver/pull/1822] to test
> this with gocql.
> I believe [~lukasz.antoniak] was able to reproduce this with the java driver
> which has had v5 support for a while and got the same results, I'll ask him
> to post a comment on this ticket.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]