Skip to content

Commit 73305fb

Browse files
authored
[hotfix] Optimize SchemaChangeEventVisitor to reduce class inflations (#4350)
1 parent 25a5817 commit 73305fb

13 files changed

Lines changed: 86 additions & 312 deletions

File tree

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/AddColumnEventVisitor.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/AlterTableCommentEventVisitor.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/CreateTableEventVisitor.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/DropColumnEventVisitor.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/DropTableEventVisitor.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/RenameColumnEventVisitor.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/SchemaChangeEventVisitor.java

Lines changed: 51 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -27,64 +27,83 @@
2727
import org.apache.flink.cdc.common.event.RenameColumnEvent;
2828
import org.apache.flink.cdc.common.event.SchemaChangeEvent;
2929
import org.apache.flink.cdc.common.event.TruncateTableEvent;
30+
import org.apache.flink.cdc.common.utils.Preconditions;
31+
32+
import javax.annotation.Nonnull;
3033

3134
/** Visitor clas for all {@link SchemaChangeEvent}s and returns a specific typed object. */
3235
@Internal
3336
public class SchemaChangeEventVisitor {
3437
public static <T, E extends Throwable> T visit(
3538
SchemaChangeEvent event,
36-
AddColumnEventVisitor<T, E> addColumnVisitor,
37-
AlterColumnTypeEventVisitor<T, E> alterColumnTypeEventVisitor,
38-
CreateTableEventVisitor<T, E> createTableEventVisitor,
39-
DropColumnEventVisitor<T, E> dropColumnEventVisitor,
40-
DropTableEventVisitor<T, E> dropTableEventVisitor,
41-
RenameColumnEventVisitor<T, E> renameColumnEventVisitor,
42-
TruncateTableEventVisitor<T, E> truncateTableEventVisitor,
43-
AlterTableCommentEventVisitor<T, E> alterTableCommentEventVisitor)
39+
@Nonnull VisitorHandler<AddColumnEvent, T, E> addColumnVisitor,
40+
@Nonnull VisitorHandler<AlterColumnTypeEvent, T, E> alterColumnTypeEventVisitor,
41+
@Nonnull VisitorHandler<CreateTableEvent, T, E> createTableEventVisitor,
42+
@Nonnull VisitorHandler<DropColumnEvent, T, E> dropColumnEventVisitor,
43+
@Nonnull VisitorHandler<DropTableEvent, T, E> dropTableEventVisitor,
44+
@Nonnull VisitorHandler<RenameColumnEvent, T, E> renameColumnEventVisitor,
45+
@Nonnull VisitorHandler<TruncateTableEvent, T, E> truncateTableEventVisitor,
46+
@Nonnull VisitorHandler<AlterTableCommentEvent, T, E> alterTableCommentEventVisitor)
4447
throws E {
4548
if (event instanceof AddColumnEvent) {
46-
if (addColumnVisitor == null) {
47-
return null;
48-
}
49+
Preconditions.checkNotNull(addColumnVisitor);
4950
return addColumnVisitor.visit((AddColumnEvent) event);
5051
} else if (event instanceof AlterColumnTypeEvent) {
51-
if (alterColumnTypeEventVisitor == null) {
52-
return null;
53-
}
52+
Preconditions.checkNotNull(alterColumnTypeEventVisitor);
5453
return alterColumnTypeEventVisitor.visit((AlterColumnTypeEvent) event);
5554
} else if (event instanceof CreateTableEvent) {
56-
if (createTableEventVisitor == null) {
57-
return null;
58-
}
55+
Preconditions.checkNotNull(createTableEventVisitor);
5956
return createTableEventVisitor.visit((CreateTableEvent) event);
6057
} else if (event instanceof DropColumnEvent) {
61-
if (dropColumnEventVisitor == null) {
62-
return null;
63-
}
58+
Preconditions.checkNotNull(dropColumnEventVisitor);
6459
return dropColumnEventVisitor.visit((DropColumnEvent) event);
6560
} else if (event instanceof DropTableEvent) {
66-
if (dropTableEventVisitor == null) {
67-
return null;
68-
}
61+
Preconditions.checkNotNull(dropTableEventVisitor);
6962
return dropTableEventVisitor.visit((DropTableEvent) event);
7063
} else if (event instanceof RenameColumnEvent) {
71-
if (renameColumnEventVisitor == null) {
72-
return null;
73-
}
64+
Preconditions.checkNotNull(renameColumnEventVisitor);
7465
return renameColumnEventVisitor.visit((RenameColumnEvent) event);
7566
} else if (event instanceof TruncateTableEvent) {
76-
if (truncateTableEventVisitor == null) {
77-
return null;
78-
}
67+
Preconditions.checkNotNull(truncateTableEventVisitor);
7968
return truncateTableEventVisitor.visit((TruncateTableEvent) event);
8069
} else if (event instanceof AlterTableCommentEvent) {
81-
if (alterTableCommentEventVisitor == null) {
82-
return null;
83-
}
70+
Preconditions.checkNotNull(alterTableCommentEventVisitor);
8471
return alterTableCommentEventVisitor.visit((AlterTableCommentEvent) event);
8572
} else {
8673
throw new IllegalArgumentException(
8774
"Unknown schema change event type " + event.getType());
8875
}
8976
}
77+
78+
public static <E extends Throwable> void voidVisit(
79+
SchemaChangeEvent event,
80+
@Nonnull VoidVisitorHandler<AddColumnEvent, E> addColumnVisitor,
81+
@Nonnull VoidVisitorHandler<AlterColumnTypeEvent, E> alterColumnTypeEventVisitor,
82+
@Nonnull VoidVisitorHandler<CreateTableEvent, E> createTableEventVisitor,
83+
@Nonnull VoidVisitorHandler<DropColumnEvent, E> dropColumnEventVisitor,
84+
@Nonnull VoidVisitorHandler<DropTableEvent, E> dropTableEventVisitor,
85+
@Nonnull VoidVisitorHandler<RenameColumnEvent, E> renameColumnEventVisitor,
86+
@Nonnull VoidVisitorHandler<TruncateTableEvent, E> truncateTableEventVisitor,
87+
@Nonnull VoidVisitorHandler<AlterTableCommentEvent, E> alterTableCommentEventHandler)
88+
throws E {
89+
visit(
90+
event,
91+
wrapVoidVisitor(addColumnVisitor),
92+
wrapVoidVisitor(alterColumnTypeEventVisitor),
93+
wrapVoidVisitor(createTableEventVisitor),
94+
wrapVoidVisitor(dropColumnEventVisitor),
95+
wrapVoidVisitor(dropTableEventVisitor),
96+
wrapVoidVisitor(renameColumnEventVisitor),
97+
wrapVoidVisitor(truncateTableEventVisitor),
98+
wrapVoidVisitor(alterTableCommentEventHandler));
99+
}
100+
101+
private static <EVT extends SchemaChangeEvent, E extends Throwable>
102+
VisitorHandler<EVT, Void, E> wrapVoidVisitor(VoidVisitorHandler<EVT, E> handler) {
103+
Preconditions.checkNotNull(handler);
104+
return event -> {
105+
handler.visit(event);
106+
return null;
107+
};
108+
}
90109
}

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/TruncateTableEventVisitor.java renamed to flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/VisitorHandler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@
1818
package org.apache.flink.cdc.common.event.visitor;
1919

2020
import org.apache.flink.cdc.common.annotation.Internal;
21+
import org.apache.flink.cdc.common.event.SchemaChangeEvent;
2122
import org.apache.flink.cdc.common.event.TruncateTableEvent;
2223

2324
/** Visitor for {@link TruncateTableEvent}s. */
2425
@Internal
2526
@FunctionalInterface
26-
public interface TruncateTableEventVisitor<T, E extends Throwable> {
27-
T visit(TruncateTableEvent event) throws E;
27+
public interface VisitorHandler<EVT extends SchemaChangeEvent, T, E extends Throwable> {
28+
T visit(EVT event) throws E;
2829
}

flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/AlterColumnTypeEventVisitor.java renamed to flink-cdc-common/src/main/java/org/apache/flink/cdc/common/event/visitor/VoidVisitorHandler.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@
1818
package org.apache.flink.cdc.common.event.visitor;
1919

2020
import org.apache.flink.cdc.common.annotation.Internal;
21-
import org.apache.flink.cdc.common.event.AlterColumnTypeEvent;
21+
import org.apache.flink.cdc.common.event.SchemaChangeEvent;
22+
import org.apache.flink.cdc.common.event.TruncateTableEvent;
2223

23-
/** Visitor for {@link AlterColumnTypeEvent}s. */
24+
/** Visitor for {@link TruncateTableEvent}s. */
2425
@Internal
2526
@FunctionalInterface
26-
public interface AlterColumnTypeEventVisitor<T, E extends Throwable> {
27-
T visit(AlterColumnTypeEvent event) throws E;
27+
public interface VoidVisitorHandler<EVT extends SchemaChangeEvent, E extends Throwable> {
28+
void visit(EVT event) throws E;
2829
}

flink-cdc-connect/flink-cdc-pipeline-connectors/flink-cdc-pipeline-connector-doris/src/main/java/org/apache/flink/cdc/connectors/doris/sink/DorisMetadataApplier.java

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -112,40 +112,16 @@ public Set<SchemaChangeEventType> getSupportedSchemaEvolutionTypes() {
112112

113113
@Override
114114
public void applySchemaChange(SchemaChangeEvent event) {
115-
SchemaChangeEventVisitor.<Void, SchemaEvolveException>visit(
115+
SchemaChangeEventVisitor.voidVisit(
116116
event,
117-
addColumnEvent -> {
118-
applyAddColumnEvent(addColumnEvent);
119-
return null;
120-
},
121-
alterColumnTypeEvent -> {
122-
applyAlterColumnTypeEvent(alterColumnTypeEvent);
123-
return null;
124-
},
125-
createTableEvent -> {
126-
applyCreateTableEvent(createTableEvent);
127-
return null;
128-
},
129-
dropColumnEvent -> {
130-
applyDropColumnEvent(dropColumnEvent);
131-
return null;
132-
},
133-
dropTableEvent -> {
134-
applyDropTableEvent(dropTableEvent);
135-
return null;
136-
},
137-
renameColumnEvent -> {
138-
applyRenameColumnEvent(renameColumnEvent);
139-
return null;
140-
},
141-
truncateTableEvent -> {
142-
applyTruncateTableEvent(truncateTableEvent);
143-
return null;
144-
},
145-
alterTableCommentEvent -> {
146-
applyAlterTableCommentEvent(alterTableCommentEvent);
147-
return null;
148-
});
117+
this::applyAddColumnEvent,
118+
this::applyAlterColumnTypeEvent,
119+
this::applyCreateTableEvent,
120+
this::applyDropColumnEvent,
121+
this::applyDropTableEvent,
122+
this::applyRenameColumnEvent,
123+
this::applyTruncateTableEvent,
124+
this::applyAlterTableCommentEvent);
149125
}
150126

151127
private void applyCreateTableEvent(CreateTableEvent event) throws SchemaEvolveException {

0 commit comments

Comments
 (0)