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

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

                Author: ASF GitHub Bot
            Created on: 22/Nov/21 19:01
            Start Date: 22/Nov/21 19:01
    Worklog Time Spent: 10m 
      Work Description: phet commented on a change in pull request #3427:
URL: https://github.com/apache/gobblin/pull/3427#discussion_r754553904



##########
File path: 
gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinZkHelixManager.java
##########
@@ -0,0 +1,54 @@
+/*
+ * 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.cluster;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.helix.InstanceType;
+import org.apache.helix.manager.zk.ZKHelixManager;
+
+import lombok.extern.slf4j.Slf4j;
+
+
+/**
+ * A {@link ZKHelixManager} which keeps a reference count of users.
+ * Every user should call connect and disconnect to increase and decrease the 
count.
+ * Calls to connect and disconnect to the underlying ZKHelixManager are made 
only for the first and last usage respectively.
+ */
+@Slf4j
+public class GobblinZkHelixManager extends ZKHelixManager {

Review comment:
       I'd encourage a more specific name, tracking to how it works, such as 
`GobblinReferenceCountingZkHelixManager`

##########
File path: 
gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinHelixMultiManager.java
##########
@@ -160,30 +159,28 @@ protected void addLeadershipChangeAwareComponent 
(LeadershipChangeAwareComponent
   /**
    * Build the {@link HelixManager} for the Application Master.
    */
-  protected static HelixManager buildHelixManager(Config config, String 
zkConnectionString, String clusterName, InstanceType type) {
+  protected static HelixManager buildHelixManager(Config config, String 
clusterName, InstanceType type) {
+    
Preconditions.checkArgument(config.hasPath(GobblinClusterConfigurationKeys.ZK_CONNECTION_STRING_KEY));
+    String zkConnectionString = 
config.getString(GobblinClusterConfigurationKeys.ZK_CONNECTION_STRING_KEY);
+    log.info("Using ZooKeeper connection string: " + zkConnectionString);
+
     String helixInstanceName = ConfigUtils.getString(config, 
GobblinClusterConfigurationKeys.HELIX_INSTANCE_NAME_KEY,
         GobblinClusterManager.class.getSimpleName());
-    return HelixManagerFactory.getZKHelixManager(
+    return GobblinHelixManagerFactory.getZKHelixManager(

Review comment:
       ok... I see how this has been used, so apparently not written to a 
common interface... in that case, probably not worth big changes now.

##########
File path: 
gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinZkHelixManager.java
##########
@@ -0,0 +1,54 @@
+/*
+ * 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.cluster;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.helix.InstanceType;
+import org.apache.helix.manager.zk.ZKHelixManager;
+
+import lombok.extern.slf4j.Slf4j;
+
+
+/**
+ * A {@link ZKHelixManager} which keeps a reference count of users.
+ * Every user should call connect and disconnect to increase and decrease the 
count.
+ * Calls to connect and disconnect to the underlying ZKHelixManager are made 
only for the first and last usage respectively.
+ */
+@Slf4j
+public class GobblinZkHelixManager extends ZKHelixManager {
+  final AtomicInteger usageCount = new AtomicInteger(0);

Review comment:
       `private`?

##########
File path: 
gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinHelixManagerFactory.java
##########
@@ -0,0 +1,30 @@
+/*
+ * 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.cluster;
+
+import org.apache.helix.HelixManager;
+import org.apache.helix.InstanceType;
+
+
+public class GobblinHelixManagerFactory {
+
+  public static HelixManager getZKHelixManager(String clusterName, String 
instanceName,
+      InstanceType type, String zkAddr) {
+    return new GobblinZkHelixManager(clusterName, instanceName, type, zkAddr);

Review comment:
       two things:
   first, surprised there's no interface declaration, as is typical so 
different implementions of the factory could be used interchangeably.
   second, not a big deal, but the method name and return type names usually 
match, whereas the specific instance type (created) might match the class name 
(granted, more considerations when a common interface is being implemented).

##########
File path: 
gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinHelixJobTask.java
##########
@@ -203,6 +209,7 @@ public TaskResult run() {
       return new TaskResult(TaskResult.Status.FAILED, "Exception occurred for 
job " + planningJobId + ":" + ExceptionUtils
           .getFullStackTrace(e));
     } finally {
+      this.jobHelixManager.disconnect();

Review comment:
       still wondering on this... doesn't the `.connect()` belong prior to the 
start of the `try` block?




-- 
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]


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

    Worklog Id:     (was: 684920)
    Time Spent: 2h 50m  (was: 2h 40m)

> use distinct HelixJobManager
> ----------------------------
>
>                 Key: GOBBLIN-1575
>                 URL: https://issues.apache.org/jira/browse/GOBBLIN-1575
>             Project: Apache Gobblin
>          Issue Type: Bug
>            Reporter: Arjun Singh Bora
>            Priority: Major
>          Time Spent: 2h 50m
>  Remaining Estimate: 0h
>
> GobblinTaskRunner creates a HelixManager and passes it to HelixJobTask. When 
> the GobblinTaskRunner is stopped, it disconnects to HelixManager, but because 
> the HelixJobTask is also using the same HelixManager object, it cannot use it 
> do its own shutdown operation. This PR will make a copy of HelixManager to be 
> used by HelixJobTask 's.
> Same argument with GobblinClusterManager passing the same HelixManager object 
> to 
> [HelixRetriggeringJobCallable|https://github.com/apache/gobblin/pull/3427/files#diff-28c7588c2dc9414f72d21e77aa21d3e3a7f098a0c4842429944d9a398eee8706]



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to