mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-22 09:30:45 +00:00
Alternator uses a single column, a map, with the deliberately strange name ":attrs", to hold all the schema-less attributes of an item. The existing code is buggy when the user tries to write to an attribute with this strange name ":attrs". Although it is extremely unlikely that any user would happen to choose such a name, it is nevertheless a legal attribute name in DynamoDB, and should definitely not cause Scylla to crash as it does in some cases today. The bug was caused by the code assuming that to check whether an attribute is stored in its own column in the schema, we just need to check whether a column with that name exists. This is almost true, except for the name ":attrs" - a column with this name exists, but it is a map - the attribute with that name should be stored *in* the map, not as the map. The fix is to modify that check to special-case ":attrs". This fix makes the relevant tests, which used to crash or fail, now pass. This fix solves most of #5009, but one point is not yet solved (and perhaps we don't need to solve): It is still not allowed to use the name ":attrs" for a **key** attribute. But trying to do that fails cleanly (during the table creation) with an appropriate error message, so is only a very minor compatibility issue. Refs #5009 Signed-off-by: Nadav Har'El <nyh@scylladb.com>