umustafi commented on code in PR #3640:
URL: https://github.com/apache/gobblin/pull/3640#discussion_r1119143320


##########
gobblin-service/src/main/java/org/apache/gobblin/service/modules/scheduler/GobblinServiceJobScheduler.java:
##########
@@ -343,8 +416,27 @@ public AddSpecResponse onAddSpec(Spec addedSpec) {
       }
     }
 
+    // Compare the modification timestamp of the spec being added if the 
scheduler is being initialized, ideally we
+    // don't even want to do the same update twice as it will kill the 
existing flow and reschedule it unnecessarily
+    Long modificationTime = 
Long.valueOf(flowSpec.getConfigAsProperties().getProperty(FlowSpec.MODIFICATION_TIME_KEY,
 "0"));
+    String uriString = flowSpec.getUri().toString();
+    Boolean isRunImmediately = PropertiesUtils.getPropAsBoolean(jobConfig, 
ConfigurationKeys.FLOW_RUN_IMMEDIATELY, "false");
+    // If the modification time is 0 (which means the original API was used to 
retrieve spec or warm standby mode is not
+    // enabled), spec not in scheduler, or have a modification time associated 
with it assume it's the most recent
+    if (modificationTime != 0L && 
this.scheduledFlowSpecs.containsKey(uriString)
+        && this.lastUpdatedTimeForFlowSpec.containsKey(uriString)) {
+      // For run-immediately flows with a schedule the modified_time would 
remain the same
+      if (this.lastUpdatedTimeForFlowSpec.get(uriString) > modificationTime
+          || 
(this.lastUpdatedTimeForFlowSpec.get(uriString).equals(modificationTime) && 
!isRunImmediately)) {

Review Comment:
   I'm comparing `Long` object not primitive so equals() needed to compare 
value, == comparison will check the object references are equal not value 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to