Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions cdc/model/codec/codec.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,7 @@ func MarshalRedoLog(r *model.RedoLog, b []byte) (o []byte, err error) {

// MarshalDDLAsRedoLog converts a DDLEvent into RedoLog, and then marshals it.
func MarshalDDLAsRedoLog(d *model.DDLEvent, b []byte) (o []byte, err error) {
log := &model.RedoLog{
RedoDDL: model.RedoDDLEvent{DDL: d},
Type: model.RedoLogTypeDDL,
}
return MarshalRedoLog(log, b)
return MarshalRedoLog(d.ToRedoLog(), b)
}

func decodeVersion(bts []byte) (uint16, []byte) {
Expand Down
4 changes: 2 additions & 2 deletions cdc/model/codec/v1/codec_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions cdc/model/codec/v1/codec_gen_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions cdc/model/kv_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions cdc/model/kv_gen_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 25 additions & 4 deletions cdc/model/sink.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,9 +286,18 @@ type RedoRowChangedEvent struct {

// RedoDDLEvent represents DDL event used in redo log persistent
type RedoDDLEvent struct {
DDL *DDLEvent `msg:"ddl"`
Type byte `msg:"type"`
TableName TableName `msg:"table-name"`
DDL *DDLEvent `msg:"ddl"`
Type byte `msg:"type"`
TableName TableName `msg:"table-name"`
Columns []*ColumnInfo `msg:"columns"`
}

// ColumnInfo is for column meta in DDL event
type ColumnInfo struct {
Name string `msg:"name"`
OriginDefaultValue any `msg:"origin_default"`
Type byte `msg:"type"`
Version uint64 `msg:"version"`
}

// ToRedoLog converts row changed event to redo log
Expand All @@ -314,8 +323,20 @@ func (r *RowChangedEvent) ToRedoLog() *RedoLog {

// ToRedoLog converts ddl event to redo log
func (d *DDLEvent) ToRedoLog() *RedoLog {
var columns []*ColumnInfo
if d.TableInfo != nil && d.TableInfo.TableInfo != nil {
columns = make([]*ColumnInfo, 0, len(d.TableInfo.Columns))
for _, col := range d.TableInfo.Columns {
columns = append(columns, &ColumnInfo{
Name: col.Name.String(),
OriginDefaultValue: col.GetOriginDefaultValue(),
Type: col.GetType(),
Version: col.Version,
})
}
}
return &RedoLog{
RedoDDL: RedoDDLEvent{DDL: d},
RedoDDL: RedoDDLEvent{DDL: d, Columns: columns},
Type: RedoLogTypeDDL,
}
Comment on lines +326 to 341
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The ToRedoLog function fails to populate the TableName and Type fields in the RedoDDLEvent struct. These fields are essential for the redo log reader to correctly reconstruct the table metadata during recovery. Without them, the reader will receive empty table names and default types, which could lead to data inconsistency or errors during DDL application.

	var columns []*ColumnInfo
	var tableName TableName
	if d.TableInfo != nil {
		tableName = d.TableInfo.TableName
		if d.TableInfo.TableInfo != nil {
			columns = make([]*ColumnInfo, 0, len(d.TableInfo.Columns))
			for _, col := range d.TableInfo.Columns {
				columns = append(columns, &ColumnInfo{
					Name:               col.Name.String(),
					OriginDefaultValue: col.GetOriginDefaultValue(),
					Type:               col.GetType(),
					Version:            col.Version,
				})
			}
		}
	}
	return &RedoLog{
		RedoDDL: RedoDDLEvent{
			DDL:       d,
			Columns:   columns,
			TableName: tableName,
			Type:      d.Type,
		},
		Type: RedoLogTypeDDL,
	}

}
Expand Down
Loading