Skip to content

Commit f82331e

Browse files
authored
Merge branch 'main' into fix/handle_airflow_dags_and_groups
2 parents 47d0b22 + 9bb877d commit f82331e

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

api/src/main/java/marquez/service/OpenLineageService.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,21 @@
3030
import marquez.common.models.JobVersionId;
3131
import marquez.common.models.NamespaceName;
3232
import marquez.common.models.RunId;
33+
import marquez.common.models.RunState;
3334
import marquez.db.BaseDao;
3435
import marquez.db.DatasetDao;
3536
import marquez.db.DatasetVersionDao;
3637
import marquez.db.models.ExtendedDatasetVersionRow;
3738
import marquez.db.models.JobRow;
3839
import marquez.db.models.RunArgsRow;
3940
import marquez.db.models.RunRow;
41+
import marquez.db.models.RunStateRow;
4042
import marquez.db.models.UpdateLineageRow;
4143
import marquez.service.RunTransitionListener.JobInputUpdate;
4244
import marquez.service.RunTransitionListener.JobOutputUpdate;
4345
import marquez.service.RunTransitionListener.RunInput;
4446
import marquez.service.RunTransitionListener.RunOutput;
47+
import marquez.service.RunTransitionListener.RunTransition;
4548
import marquez.service.models.LineageEvent;
4649
import marquez.service.models.RunMeta;
4750

@@ -91,6 +94,7 @@ public CompletableFuture<Void> createAsync(LineageEvent event) {
9194
buildJobOutputUpdate(update).ifPresent(runService::notify);
9295
}
9396
buildJobInputUpdate(update).ifPresent(runService::notify);
97+
buildRunTransition(update).ifPresent(runService::notify);
9498
}
9599
});
96100

@@ -222,4 +226,15 @@ private DatasetVersionId buildDatasetVersionId(ExtendedDatasetVersionRow ds) {
222226
.name(DatasetName.of(ds.getDatasetName()))
223227
.build();
224228
}
229+
230+
private Optional<RunTransition> buildRunTransition(UpdateLineageRow record) {
231+
RunId runId = RunId.of(record.getRun().getUuid());
232+
RunStateRow runStateRow = record.getRunState();
233+
if (runStateRow == null) {
234+
return Optional.empty();
235+
}
236+
RunState newState = RunState.valueOf(runStateRow.getState());
237+
RunState oldState = newState.isStarting() ? null : RunState.RUNNING;
238+
return Optional.of(new RunTransition(runId, oldState, newState));
239+
}
225240
}

api/src/test/java/marquez/service/OpenLineageServiceIntegrationTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import marquez.jdbi.MarquezJdbiExternalPostgresExtension;
4646
import marquez.service.RunTransitionListener.JobInputUpdate;
4747
import marquez.service.RunTransitionListener.JobOutputUpdate;
48+
import marquez.service.RunTransitionListener.RunTransition;
4849
import marquez.service.models.Dataset;
4950
import marquez.service.models.Job;
5051
import marquez.service.models.LineageEvent;
@@ -79,6 +80,7 @@ public class OpenLineageServiceIntegrationTest {
7980
private DatasetVersionDao datasetVersionDao;
8081
private ArgumentCaptor<JobInputUpdate> runInputListener;
8182
private ArgumentCaptor<JobOutputUpdate> runOutputListener;
83+
private ArgumentCaptor<RunTransition> runTransitionListener;
8284
private OpenLineageService lineageService;
8385

8486
public static String EVENT_REQUIRED_ONLY = "open_lineage/event_required_only.json";
@@ -145,6 +147,8 @@ public void setup(Jdbi jdbi) throws SQLException {
145147
doNothing().when(runService).notify(runInputListener.capture());
146148
runOutputListener = ArgumentCaptor.forClass(JobOutputUpdate.class);
147149
doNothing().when(runService).notify(runOutputListener.capture());
150+
runTransitionListener = ArgumentCaptor.forClass(RunTransition.class);
151+
doNothing().when(runService).notify(runTransitionListener.capture());
148152
lineageService = new OpenLineageService(openLineageDao, runService);
149153
datasetDao = jdbi.onDemand(DatasetDao.class);
150154

@@ -243,6 +247,19 @@ public void testRunListenerOutput(List<URI> uris, ExpectedResults expectedResult
243247
}
244248
}
245249

250+
@ParameterizedTest
251+
@MethodSource("getData")
252+
public void testRunTransition(List<URI> uris, ExpectedResults expectedResults) {
253+
initEvents(uris);
254+
255+
if (expectedResults.inputEventCount > 0) {
256+
Assertions.assertEquals(
257+
uris.size(),
258+
runTransitionListener.getAllValues().size(),
259+
"RunTransition happens once for each run");
260+
}
261+
}
262+
246263
@ParameterizedTest
247264
@MethodSource({"getData"})
248265
public void serviceCalls(List<URI> uris, ExpectedResults expectedResults) {

0 commit comments

Comments
 (0)