[ https://issues.apache.org/jira/browse/CASSANDRA-15899?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sam Tunnicliffe updated CASSANDRA-15899: ---------------------------------------- Status: Changes Suggested (was: Review In Progress) The patch looks good to me, the only minor nit I've got is that having {{SearchIterator}} extend {{Iterator}} is somewhat unnecessary for how we're using it. I've pushed a branch (rebased onto latest trunk) for you to take a look at: https://github.com/beobal/cassandra/commits/beobal/15899-trunk Also, it may be worth adding a test where a write is received for a dropped column but the coordinator isn't aware of the schema change. This is handled correctly already on the other replicas via DroppedColumn and isn't affected by anything in this patch, but it took me a little time to manually verify that that was actually the case. If you agree, I've added that to the linked branch too. Otherwise, this seems fine to me. The fixver is 3.0, but I don't think there should be much involved in backporting this to 3.0/3.11. > Dropping a column can break queries until the schema is fully propagated > ------------------------------------------------------------------------ > > Key: CASSANDRA-15899 > URL: https://issues.apache.org/jira/browse/CASSANDRA-15899 > Project: Cassandra > Issue Type: Bug > Components: Cluster/Schema > Reporter: Marcus Eriksson > Assignee: Blake Eggleston > Priority: Normal > Fix For: 3.0.x > > > With a table like: > {code} > CREATE TABLE ks.tbl (id int primary key, v1 int, v2 int, v3 int) > {code} > and we drop {{v2}}, we get this exception on the replicas which haven't seen > the schema change: > {code} > ERROR [SharedPool-Worker-1] node2 2020-06-24 09:49:08,107 > AbstractLocalAwareExecutorService.java:169 - Uncaught exception on thread > Thread[SharedPool-Worker-1,5,node2] > java.lang.IllegalStateException: [ColumnDefinition{name=v1, > type=org.apache.cassandra.db.marshal.Int32Type, kind=REGULAR, position=-1}, > ColumnDefinition{name=v2, type=org.apache.cassandra.db.marshal.Int32Type, > kind=REGULAR, position=-1}, ColumnDefinition{name=v3, > type=org.apache.cassandra.db.marshal.Int32Type, kind=REGULAR, position=-1}] > is not a subset of [v1 v3] > at > org.apache.cassandra.db.Columns$Serializer.encodeBitmap(Columns.java:546) > ~[main/:na] > at > org.apache.cassandra.db.Columns$Serializer.serializeSubset(Columns.java:478) > ~[main/:na] > at > org.apache.cassandra.db.rows.UnfilteredSerializer.serialize(UnfilteredSerializer.java:184) > ~[main/:na] > at > org.apache.cassandra.db.rows.UnfilteredSerializer.serialize(UnfilteredSerializer.java:114) > ~[main/:na] > at > org.apache.cassandra.db.rows.UnfilteredSerializer.serialize(UnfilteredSerializer.java:102) > ~[main/:na] > at > org.apache.cassandra.db.rows.UnfilteredRowIteratorSerializer.serialize(UnfilteredRowIteratorSerializer.java:132) > ~[main/:na] > at > org.apache.cassandra.db.rows.UnfilteredRowIteratorSerializer.serialize(UnfilteredRowIteratorSerializer.java:87) > ~[main/:na] > ... > {code} > Note that it doesn't matter if we {{SELECT *}} or {{SELECT id, v1}} -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org