[ 
https://issues.apache.org/jira/browse/GOBBLIN-1910?focusedWorklogId=880563&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-880563
 ]

ASF GitHub Bot logged work on GOBBLIN-1910:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 15/Sep/23 02:52
            Start Date: 15/Sep/23 02:52
    Worklog Time Spent: 10m 
      Work Description: phet commented on code in PR #3776:
URL: https://github.com/apache/gobblin/pull/3776#discussion_r1326670036


##########
gobblin-service/src/main/java/org/apache/gobblin/service/modules/orchestration/DagTaskStream.java:
##########
@@ -0,0 +1,275 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.gobblin.service.modules.orchestration;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.BlockingDeque;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.TimeUnit;
+
+import com.codahale.metrics.Timer;
+import com.google.common.base.Optional;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigException;
+
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+
+import org.apache.gobblin.config.ConfigBuilder;
+import org.apache.gobblin.configuration.ConfigurationKeys;
+import org.apache.gobblin.instrumented.Instrumented;
+import org.apache.gobblin.metrics.event.TimingEvent;
+import org.apache.gobblin.runtime.api.DagActionStore;
+import org.apache.gobblin.runtime.api.FlowSpec;
+import org.apache.gobblin.runtime.api.SpecNotFoundException;
+import org.apache.gobblin.runtime.spec_catalog.FlowCatalog;
+import org.apache.gobblin.service.ExecutionStatus;
+import org.apache.gobblin.service.FlowId;
+import org.apache.gobblin.service.modules.flowgraph.Dag;
+import org.apache.gobblin.service.modules.spec.JobExecutionPlan;
+import 
org.apache.gobblin.service.modules.utils.FlowCompilationValidationHelper;
+import org.apache.gobblin.service.monitoring.JobStatus;
+import org.apache.gobblin.service.monitoring.JobStatusRetriever;
+
+import static org.apache.gobblin.service.ExecutionStatus.ORCHESTRATED;
+import static org.apache.gobblin.service.ExecutionStatus.valueOf;
+
+
+/**
+ * Holds a stream of {@link DagTask} that needs to be processed by the {@link 
DagManager}.
+ * It provides an implementation for {@link DagManagement} defines the rules 
for a flow and job.
+ * Implements {@link Iterator} to provide the next {@link DagTask} if 
available to {@link DagManager}
+ */
+@WorkInProgress
+@Slf4j
+public class DagTaskStream implements Iterator<Optional<DagTask>>, 
DagManagement {
+  @Getter
+  private final BlockingDeque<DagTask> taskStream = new 
LinkedBlockingDeque<>();
+  private JobStatusRetriever jobStatusRetriever;
+  private Optional<Timer> jobStatusPolledTimer;
+
+  private DagManagerMetrics dagManagerMetrics;
+
+  private DagManagementStateStore dagManagementStateStore;
+
+  private Long defaultJobStartSlaTimeMillis;
+  private FlowTriggerHandler flowTriggerHandler;
+  private Optional<DagActionStore> dagActionStore;
+  private DagStateStore failedDagStateStore;
+  private FlowCompilationValidationHelper flowCompilationValidationHelper;
+  private FlowCatalog flowCatalog = new 
FlowCatalog(ConfigBuilder.create().build());
+
+  //TODO: add ctor for instantiating the attributes (will be handled in the 
subsequent PR)
+
+  @Override
+  public boolean hasNext() {
+    return !taskStream.isEmpty();
+  }
+
+  @Override
+  public Optional<DagTask> next() {
+
+    DagTask dagTask = taskStream.peek();
+
+    try {
+      if(flowTriggerHandler.attemptDagTaskLeaseAcquisition(dagTask)) {
+        return Optional.of(taskStream.poll());
+      }
+    } catch (IOException e) {
+      throw new RuntimeException(e);

Review Comment:
   what are we thinking here?  clearly a single error should not crash our 
entire DAG-handling subsystem...
   
   would the caller catch this and log a message?
   
   should we just be the one to log the message internally and then continue 
onward?
   
   perhaps we should provide some kind of `handleException(IOException ioe)` 
hook so behavior need not be hard-coded inside this class?





Issue Time Tracking
-------------------

    Worklog Id:     (was: 880563)
    Time Spent: 2h 40m  (was: 2.5h)

> Refactor code to move current in-memory references to new design for REST 
> calls: Launch, Resume and Kill
> --------------------------------------------------------------------------------------------------------
>
>                 Key: GOBBLIN-1910
>                 URL: https://issues.apache.org/jira/browse/GOBBLIN-1910
>             Project: Apache Gobblin
>          Issue Type: New Feature
>            Reporter: Meeth Gala
>            Priority: Major
>          Time Spent: 2h 40m
>  Remaining Estimate: 0h
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to