27
27
import java .util .Map ;
28
28
import java .util .Objects ;
29
29
import java .util .Set ;
30
+ import org .slf4j .Logger ;
31
+ import org .slf4j .LoggerFactory ;
30
32
31
33
public class MySqlInitialLoadGlobalStateManager extends MySqlInitialLoadStateManager {
32
34
35
+ private static final Logger LOGGER = LoggerFactory .getLogger (MySqlInitialLoadGlobalStateManager .class );
33
36
protected StateManager stateManager ;
34
37
35
38
// Only one global state is emitted, which is fanned out into many entries in the DB by platform. As
@@ -42,6 +45,7 @@ public class MySqlInitialLoadGlobalStateManager extends MySqlInitialLoadStateMan
42
45
43
46
// non ResumableFullRefreshStreams do not have any state. We only report count for them.
44
47
private Set <AirbyteStreamNameNamespacePair > nonResumableFullRefreshStreams ;
48
+ private Set <AirbyteStreamNameNamespacePair > completedNonResumableFullRefreshStreams ;
45
49
46
50
private final boolean savedOffsetStillPresentOnServer ;
47
51
private final ConfiguredAirbyteCatalog catalog ;
@@ -69,6 +73,7 @@ private void initStreams(final InitialLoadStreams initialLoadStreams,
69
73
this .streamsThatHaveCompletedSnapshot = new HashSet <>();
70
74
this .resumableFullRefreshStreams = new HashSet <>();
71
75
this .nonResumableFullRefreshStreams = new HashSet <>();
76
+ this .completedNonResumableFullRefreshStreams = new HashSet <>();
72
77
73
78
catalog .getStreams ().forEach (configuredAirbyteStream -> {
74
79
var pairInStream =
@@ -78,7 +83,8 @@ private void initStreams(final InitialLoadStreams initialLoadStreams,
78
83
this .streamsThatHaveCompletedSnapshot .add (pairInStream );
79
84
}
80
85
if (configuredAirbyteStream .getSyncMode () == SyncMode .FULL_REFRESH ) {
81
- if (initialLoadStreams .streamsForInitialLoad ().contains (configuredAirbyteStream )) {
86
+ if (configuredAirbyteStream .getStream ().getSourceDefinedPrimaryKey () != null
87
+ && !configuredAirbyteStream .getStream ().getSourceDefinedPrimaryKey ().isEmpty ()) {
82
88
this .resumableFullRefreshStreams .add (pairInStream );
83
89
} else {
84
90
this .nonResumableFullRefreshStreams .add (pairInStream );
@@ -115,6 +121,13 @@ public AirbyteStateMessage generateStateMessageAtCheckpoint(final ConfiguredAirb
115
121
streamStates .add (getAirbyteStreamState (stream , (Jsons .jsonNode (pkStatus ))));
116
122
}
117
123
});
124
+
125
+ completedNonResumableFullRefreshStreams .forEach (stream -> {
126
+ streamStates .add (new AirbyteStreamState ()
127
+ .withStreamDescriptor (
128
+ new StreamDescriptor ().withName (stream .getName ()).withNamespace (stream .getNamespace ())));
129
+ });
130
+
118
131
if (airbyteStream .getSyncMode () == SyncMode .INCREMENTAL ) {
119
132
AirbyteStreamNameNamespacePair pair =
120
133
new AirbyteStreamNameNamespacePair (airbyteStream .getStream ().getName (), airbyteStream .getStream ().getNamespace ());
@@ -129,10 +142,12 @@ public AirbyteStateMessage generateStateMessageAtCheckpoint(final ConfiguredAirb
129
142
130
143
@ Override
131
144
public AirbyteStateMessage createFinalStateMessage (final ConfiguredAirbyteStream airbyteStream ) {
145
+ final AirbyteStreamNameNamespacePair pair =
146
+ new AirbyteStreamNameNamespacePair (airbyteStream .getStream ().getName (), airbyteStream .getStream ().getNamespace ());
132
147
if (airbyteStream .getSyncMode () == SyncMode .INCREMENTAL ) {
133
- AirbyteStreamNameNamespacePair pair =
134
- new AirbyteStreamNameNamespacePair (airbyteStream .getStream ().getName (), airbyteStream .getStream ().getNamespace ());
135
148
streamsThatHaveCompletedSnapshot .add (pair );
149
+ } else if (nonResumableFullRefreshStreams .contains (pair )) {
150
+ completedNonResumableFullRefreshStreams .add (pair );
136
151
}
137
152
final List <AirbyteStreamState > streamStates = new ArrayList <>();
138
153
@@ -146,7 +161,7 @@ public AirbyteStateMessage createFinalStateMessage(final ConfiguredAirbyteStream
146
161
streamStates .add (getAirbyteStreamState (stream , (Jsons .jsonNode (pkStatus ))));
147
162
});
148
163
149
- nonResumableFullRefreshStreams .forEach (stream -> {
164
+ completedNonResumableFullRefreshStreams .forEach (stream -> {
150
165
streamStates .add (new AirbyteStreamState ()
151
166
.withStreamDescriptor (
152
167
new StreamDescriptor ().withName (stream .getName ()).withNamespace (stream .getNamespace ())));
0 commit comments