2020import marquez .common .models .JobName ;
2121import marquez .common .models .JobType ;
2222import marquez .common .models .NamespaceName ;
23+ import marquez .common .models .RunState ;
2324import marquez .db .JobVersionDao .IoType ;
2425import marquez .db .JobVersionDao .JobDataset ;
2526import marquez .db .JobVersionDao .JobDatasetMapper ;
2627import marquez .db .mappers .JobMapper ;
2728import marquez .db .mappers .JobRowMapper ;
29+ import marquez .db .mappers .RunMapper ;
2830import marquez .db .models .JobRow ;
2931import marquez .db .models .NamespaceRow ;
3032import marquez .service .models .Job ;
3133import marquez .service .models .JobMeta ;
3234import marquez .service .models .Run ;
3335import org .jdbi .v3 .sqlobject .config .RegisterRowMapper ;
36+ import org .jdbi .v3 .sqlobject .customizer .BindList ;
3437import org .jdbi .v3 .sqlobject .statement .SqlQuery ;
3538import org .jdbi .v3 .sqlobject .statement .SqlUpdate ;
3639import org .postgresql .util .PGobject ;
3740
3841@ RegisterRowMapper (JobRowMapper .class )
3942@ RegisterRowMapper (JobMapper .class )
4043@ RegisterRowMapper (JobDatasetMapper .class )
44+ @ RegisterRowMapper (RunMapper .class )
4145public interface JobDao extends BaseDao {
4246
4347 @ SqlQuery (
@@ -138,14 +142,10 @@ default Optional<Job> findWithDatasetsAndRun(String namespaceName, String jobNam
138142 Optional <Job > job = findJobByName (namespaceName , jobName );
139143 job .ifPresent (
140144 j -> {
141- Optional <Run > run = createRunDao ().findByLatestJob (namespaceName , jobName );
142- run .ifPresentOrElse (
143- r -> this .setJobData (r , j ),
144- () ->
145- this .setJobData (
146- createJobVersionDao ()
147- .findCurrentInputOutputDatasetsFor (namespaceName , jobName ),
148- j ));
145+ List <Run > runs = createRunDao ().findByLatestJob (namespaceName , jobName , 1 , 0 );
146+ this .setJobData (runs , j );
147+ this .setJobDataset (
148+ createJobVersionDao ().findCurrentInputOutputDatasetsFor (namespaceName , jobName ), j );
149149 });
150150 return job ;
151151 }
@@ -244,10 +244,18 @@ job_tags as (
244244 ON f.run_uuid = jv.latest_run_uuid
245245 LEFT OUTER JOIN job_tags jt
246246 ON j.uuid = jt.uuid
247+ LEFT JOIN runs r
248+ ON r.uuid = jv.latest_run_uuid
249+ WHERE
250+ (r.current_run_state IN (<lastRunStates>) OR r.uuid IS NULL)
247251 ORDER BY
248252 j.name
249253 """ )
250- List <Job > findAll (String namespaceName , int limit , int offset );
254+ List <Job > findAll (
255+ String namespaceName ,
256+ @ BindList ("lastRunStates" ) List <RunState > lastRunStates ,
257+ int limit ,
258+ int offset );
251259
252260 @ SqlQuery ("SELECT count(*) FROM jobs_view AS j WHERE symlink_target_uuid IS NULL" )
253261 int count ();
@@ -271,18 +279,19 @@ job_tags as (
271279 + "AND symlink_target_uuid IS NULL" )
272280 int countFor (String namespaceName );
273281
274- default List <Job > findAllWithRun (String namespaceName , int limit , int offset ) {
282+ default List <Job > findAllWithRun (
283+ String namespaceName , List <RunState > lastRunStates , int limit , int offset ) {
275284 RunDao runDao = createRunDao ();
276- return findAll (namespaceName , limit , offset ).stream ()
285+ return findAll (namespaceName , lastRunStates , limit , offset ).stream ()
277286 .peek (
278- j ->
279- runDao
280- . findByLatestJob ( namespaceName , j . getName (). getValue ())
281- . ifPresent ( run -> this . setJobData ( run , j )) )
282- .collect ( Collectors . toList () );
287+ j -> {
288+ List < Run > runs = runDao . findByLatestJob ( namespaceName , j . getName (). getValue (), 10 , 0 );
289+ this . setJobData ( runs , j );
290+ } )
291+ .toList ();
283292 }
284293
285- default void setJobData (List <JobDataset > datasets , Job j ) {
294+ default void setJobDataset (List <JobDataset > datasets , Job j ) {
286295 Optional .of (
287296 datasets .stream ()
288297 .filter (d -> d .ioType ().equals (IoType .INPUT ))
@@ -304,19 +313,25 @@ default void setJobData(List<JobDataset> datasets, Job j) {
304313 .ifPresent (s -> j .setOutputs (s ));
305314 }
306315
307- default void setJobData (Run run , Job j ) {
308- j .setLatestRun (run );
316+ default void setJobData (List <Run > runs , Job j ) {
317+ if (runs .isEmpty ()) {
318+ return ;
319+ }
320+
321+ Run latestRun = runs .get (0 );
322+ j .setLatestRun (latestRun );
323+ j .setLatestRuns (runs );
309324 DatasetVersionDao datasetVersionDao = createDatasetVersionDao ();
310325 j .setInputs (
311- datasetVersionDao .findInputDatasetVersionsFor (run .getId ().getValue ()).stream ()
326+ datasetVersionDao .findInputDatasetVersionsFor (latestRun .getId ().getValue ()).stream ()
312327 .map (
313328 ds ->
314329 new DatasetId (
315330 NamespaceName .of (ds .getNamespaceName ()),
316331 DatasetName .of (ds .getDatasetName ())))
317332 .collect (Collectors .toSet ()));
318333 j .setOutputs (
319- datasetVersionDao .findOutputDatasetVersionsFor (run .getId ().getValue ()).stream ()
334+ datasetVersionDao .findOutputDatasetVersionsFor (latestRun .getId ().getValue ()).stream ()
320335 .map (
321336 ds ->
322337 new DatasetId (
0 commit comments