@@ -56,18 +56,16 @@ public class MySqlRecordConsumer implements Consumer<SourceRecord> {
5656 private final MySqlValueConverters mySqlValueConverters ;
5757 private final Tables tables ;
5858 private final Map <String , SourceTable > sourceTableMap ;
59- private int schemaHistoryIndex ;
6059
6160 public MySqlRecordConsumer (DeltaSourceContext context , EventEmitter emitter ,
6261 DdlParser ddlParser , MySqlValueConverters mySqlValueConverters ,
63- Tables tables , Map <String , SourceTable > sourceTableMap , int schemaHistoryIndex ) {
62+ Tables tables , Map <String , SourceTable > sourceTableMap ) {
6463 this .context = context ;
6564 this .emitter = emitter ;
6665 this .ddlParser = ddlParser ;
6766 this .mySqlValueConverters = mySqlValueConverters ;
6867 this .tables = tables ;
6968 this .sourceTableMap = sourceTableMap ;
70- this .schemaHistoryIndex = schemaHistoryIndex ;
7169 }
7270
7371 @ Override
@@ -118,8 +116,11 @@ public void accept(SourceRecord sourceRecord) {
118116 return ;
119117 }
120118
119+ Map <String , String > deltaOffset = generateCdapOffsets (sourceRecord );
120+ Offset recordOffset = new Offset (deltaOffset );
121121
122122 StructuredRecord val = Records .convert ((Struct ) sourceRecord .value ());
123+ String ddl = val .get ("ddl" );
123124 StructuredRecord source = val .get ("source" );
124125 if (source == null ) {
125126 // This should not happen, 'source' is a mandatory field in sourceRecord from debezium
@@ -129,11 +130,9 @@ public void accept(SourceRecord sourceRecord) {
129130 // If the map is empty, we should read all DDL/DML events and columns of all tables
130131 boolean readAllTables = sourceTableMap .isEmpty ();
131132
132- String ddl = val .get ("ddl" );
133- Map <String , String > deltaOffset = generateCdapOffsets (sourceRecord );
134133 try {
135134 if (ddl != null ) {
136- handleDDL (ddl , deltaOffset , isSnapshot , readAllTables );
135+ handleDDL (ddl , recordOffset , isSnapshot , readAllTables );
137136 return ;
138137 }
139138
@@ -144,16 +143,15 @@ public void accept(SourceRecord sourceRecord) {
144143 return ;
145144 }
146145
147- handleDML (source , val , deltaOffset , isSnapshot , readAllTables );
146+ handleDML (source , val , recordOffset , isSnapshot , readAllTables );
148147 } catch (InterruptedException e ) {
149148 // happens when the event reader is stopped. throwing this exception tells Debezium to stop right away
150149 throw new StopConnectorException ("Interrupted while emitting event." );
151150 }
152151 }
153152
154- private void handleDML (StructuredRecord source , StructuredRecord val , Map < String , String > deltaOffset ,
153+ private void handleDML (StructuredRecord source , StructuredRecord val , Offset recordOffset ,
155154 boolean isSnapshot , boolean readAllTables ) throws InterruptedException {
156- deltaOffset .put (MySqlEventReader .SCHEMA_HISTORY_INDEX , String .valueOf (schemaHistoryIndex ));
157155 String databaseName = source .get ("db" );
158156 String tableName = source .get ("table" );
159157 SourceTable sourceTable = getSourceTable (databaseName , tableName );
@@ -200,7 +198,7 @@ private void handleDML(StructuredRecord source, StructuredRecord val, Map<String
200198
201199 Long ingestTime = val .get ("ts_ms" );
202200 DMLEvent .Builder builder = DMLEvent .builder ()
203- .setOffset (new Offset ( deltaOffset ) )
201+ .setOffset (recordOffset )
204202 .setOperationType (op )
205203 .setDatabaseName (databaseName )
206204 .setTableName (tableName )
@@ -218,9 +216,8 @@ private void handleDML(StructuredRecord source, StructuredRecord val, Map<String
218216 }
219217 }
220218
221- private void handleDDL (String ddlStatement , Map < String , String > deltaOffset ,
219+ private void handleDDL (String ddlStatement , Offset recordOffset ,
222220 boolean isSnapshot , boolean readAllTables ) throws InterruptedException {
223- deltaOffset .put (MySqlEventReader .SCHEMA_HISTORY_INDEX , String .valueOf (++schemaHistoryIndex ));
224221 ddlParser .getDdlChanges ().reset ();
225222 ddlParser .parse (ddlStatement , tables );
226223 AtomicReference <InterruptedException > interrupted = new AtomicReference <>();
@@ -230,7 +227,7 @@ private void handleDDL(String ddlStatement, Map<String, String> deltaOffset,
230227 }
231228 for (DdlParserListener .Event event : events ) {
232229 DDLEvent .Builder builder = DDLEvent .builder ()
233- .setOffset (new Offset ( deltaOffset ) )
230+ .setOffset (recordOffset )
234231 .setDatabaseName (databaseName )
235232 .setSnapshot (isSnapshot );
236233 DDLEvent ddlEvent = null ;
0 commit comments