more house keeping
This commit is contained in:
@@ -333,7 +333,31 @@ transact_write_items :: proc(
|
||||
}
|
||||
}
|
||||
|
||||
existing, _ := get_item_internal(engine, action.table_name, key_item, metadata)
|
||||
existing, read_err := get_item_internal(engine, action.table_name, key_item, metadata)
|
||||
#partial switch read_err {
|
||||
case .None:
|
||||
// Item found or not found — both fine.
|
||||
case .RocksDB_Error, .Serialization_Error, .Internal_Error:
|
||||
// Cannot safely determine old index keys — cancel the entire transaction.
|
||||
reasons[idx] = Cancellation_Reason{
|
||||
code = "InternalError",
|
||||
message = "Failed to read existing item for index maintenance",
|
||||
}
|
||||
result.cancellation_reasons = reasons
|
||||
return result, .Internal_Error
|
||||
case .Missing_Key_Attribute, .Invalid_Key:
|
||||
// The key we built from the action's own item/key should always be valid
|
||||
// by this point (validated earlier), but treat defensively.
|
||||
reasons[idx] = Cancellation_Reason{
|
||||
code = "ValidationError",
|
||||
message = "Invalid key when reading existing item",
|
||||
}
|
||||
result.cancellation_reasons = reasons
|
||||
return result, .Internal_Error
|
||||
case .Table_Not_Found, .Item_Not_Found, .Validation_Error:
|
||||
// These should not be returned by get_item_internal, but handle
|
||||
// defensively — treat as "item does not exist" and continue.
|
||||
}
|
||||
old_items[idx] = existing
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user