github-actions[bot] commented on code in PR #65438:
URL: https://github.com/apache/doris/pull/65438#discussion_r3556218009


##########
fe/fe-catalog/src/main/java/org/apache/doris/catalog/Column.java:
##########
@@ -101,6 +101,11 @@ public static Column generateAfterValueColumn(Column 
column) {
         Column afterValueColumn = new Column(column);
         afterValueColumn.setComment("after value (" + column.getName() + ")");
         afterValueColumn.setAggregationType(AggregateType.NONE, true);
+        afterValueColumn.setIsAllowNull(true);

Review Comment:
   This fixes newly generated row-binlog schemas, but it looks like existing 
row-binlog tables can keep the old after-value schema after an FE 
restart/upgrade. `generateAfterValueColumn()` is only used when creating new 
row-binlog metadata (and when adding new columns). The row-binlog schema itself 
is persisted in `MaterializedIndexMeta.schema`; on load 
`MaterializedIndexMeta.gsonPostProcess()` just rebuilds maps, and 
`OlapTable.gsonPostProcess()` does not normalize the row-binlog meta before 
`getRowBinlogMeta()` returns it.
   
   That means a table that already has a `BITMAP NOT NULL` row-binlog after 
column will still expose that non-null target slot, while `BlockReader` 
continues to copy the nullable `__BEFORE__` mirror into it for MIN_DELTA/DETAIL 
update-before rows. Please add a metadata-load/replay compatibility step (and a 
test that constructs/deserializes legacy row-binlog meta) so existing 
row-binlog tables get the nullable/default-cleared after columns too.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to