Author: jghoman
Date: Fri Feb 10 00:13:04 2012
New Revision: 1242614

URL: http://svn.apache.org/viewvc?rev=1242614&view=rev
Log:
GIRAPH-142: _hadoopBsp should be prefixable via configuration.

Added:
    incubator/giraph/trunk/src/test/java/zk/
    incubator/giraph/trunk/src/test/java/zk/TestZooKeeperManager.java
Modified:
    incubator/giraph/trunk/CHANGELOG
    incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/BspService.java
    incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/GiraphJob.java
    
incubator/giraph/trunk/src/main/java/org/apache/giraph/zk/ZooKeeperManager.java

Modified: incubator/giraph/trunk/CHANGELOG
URL: 
http://svn.apache.org/viewvc/incubator/giraph/trunk/CHANGELOG?rev=1242614&r1=1242613&r2=1242614&view=diff
==============================================================================
--- incubator/giraph/trunk/CHANGELOG (original)
+++ incubator/giraph/trunk/CHANGELOG Fri Feb 10 00:13:04 2012
@@ -2,6 +2,8 @@ Giraph Change Log
 
 Release 0.2.0 - unreleased
 
+  GIRAPH-142: _hadoopBsp should be prefixable via configuration. (jghoman)
+
   GIRAPH-145. Change partition request log level to debug rather than info.
   (jghoman)
 

Modified: 
incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/BspService.java
URL: 
http://svn.apache.org/viewvc/incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/BspService.java?rev=1242614&r1=1242613&r2=1242614&view=diff
==============================================================================
--- 
incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/BspService.java 
(original)
+++ 
incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/BspService.java 
Fri Feb 10 00:13:04 2012
@@ -23,6 +23,7 @@ import org.apache.giraph.graph.partition
 import org.apache.giraph.zk.BspEvent;
 import org.apache.giraph.zk.PredicateLock;
 import org.apache.giraph.zk.ZooKeeperExt;
+import org.apache.giraph.zk.ZooKeeperManager;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -137,7 +138,7 @@ public abstract class BspService <
     /** Unset application attempt */
     public static final long UNSET_APPLICATION_ATTEMPT = Long.MIN_VALUE;
 
-    public static final String BASE_DIR = "/_hadoopBsp";
+    private static final String BASE_DIR = "/_hadoopBsp";
     public static final String MASTER_JOB_STATE_NODE = "/_masterJobState";
     public static final String INPUT_SPLIT_DIR = "/_inputSplitDir";
     public static final String INPUT_SPLIT_DONE_DIR = "/_inputSplitDoneDir";
@@ -629,7 +630,7 @@ public abstract class BspService <
             conf.getInt(GiraphJob.CHECKPOINT_FREQUENCY,
                           GiraphJob.CHECKPOINT_FREQUENCY_DEFAULT);
 
-        BASE_PATH = BASE_DIR + "/" + jobId;
+        BASE_PATH = ZooKeeperManager.getBasePath(conf) + BASE_DIR + "/" + 
jobId;
         MASTER_JOB_STATE_PATH = BASE_PATH + MASTER_JOB_STATE_NODE;
         INPUT_SPLIT_PATH = BASE_PATH + INPUT_SPLIT_DIR;
         INPUT_SPLITS_ALL_READY_PATH = BASE_PATH + INPUT_SPLITS_ALL_READY_NODE;

Modified: 
incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/GiraphJob.java
URL: 
http://svn.apache.org/viewvc/incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/GiraphJob.java?rev=1242614&r1=1242613&r2=1242614&view=diff
==============================================================================
--- incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/GiraphJob.java 
(original)
+++ incubator/giraph/trunk/src/main/java/org/apache/giraph/graph/GiraphJob.java 
Fri Feb 10 00:13:04 2012
@@ -280,6 +280,12 @@ public class GiraphJob extends Job {
     public static final String RESTART_SUPERSTEP = "giraph.restartSuperstep";
 
     /**
+     * Base ZNode for Giraph's state in the ZooKeeper cluster.  Must be a root
+     * znode on the cluster beginning with "/"
+     */
+    public static final String BASE_ZNODE_KEY = "giraph.zkBaseZNode";
+
+    /**
      * If ZOOKEEPER_LIST is not set, then use this directory to manage
      * ZooKeeper
      */

Modified: 
incubator/giraph/trunk/src/main/java/org/apache/giraph/zk/ZooKeeperManager.java
URL: 
http://svn.apache.org/viewvc/incubator/giraph/trunk/src/main/java/org/apache/giraph/zk/ZooKeeperManager.java?rev=1242614&r1=1242613&r2=1242614&view=diff
==============================================================================
--- 
incubator/giraph/trunk/src/main/java/org/apache/giraph/zk/ZooKeeperManager.java 
(original)
+++ 
incubator/giraph/trunk/src/main/java/org/apache/giraph/zk/ZooKeeperManager.java 
Fri Feb 10 00:13:04 2012
@@ -18,6 +18,19 @@
 
 package org.apache.giraph.zk;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.io.Closeables;
+import org.apache.commons.io.FileUtils;
+import org.apache.giraph.graph.GiraphJob;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.mapreduce.Mapper;
+import org.apache.log4j.Logger;
+import org.apache.zookeeper.server.quorum.QuorumPeerMain;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileWriter;
@@ -35,18 +48,8 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.io.Closeables;
-import org.apache.commons.io.FileUtils;
-import org.apache.giraph.graph.GiraphJob;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.mapreduce.Mapper;
-import org.apache.log4j.Logger;
-import org.apache.zookeeper.server.quorum.QuorumPeerMain;
+import static org.apache.giraph.graph.GiraphJob.BASE_ZNODE_KEY;
+
 
 /**
  * Manages the election of ZooKeeper servers, starting/stopping the services,
@@ -128,6 +131,24 @@ public class ZooKeeperManager {
         return GiraphJob.ZOOKEEPER_MANAGER_DIR_DEFAULT + "/" + jobId;
     }
 
+  /**
+   * Return the base ZooKeeper ZNode from which all other ZNodes Giraph creates
+   * should be sited, for instance in a multi-tenant ZooKeeper, the znode
+   * reserved for Giraph
+   *
+   * @param conf  Necessary to access user-provided values
+   * @return  String of path without trailing slash
+   */
+    public static String getBasePath(Configuration conf) {
+        String result = conf.get(BASE_ZNODE_KEY, "");
+        if(!result.equals("") && !result.startsWith("/")) {
+            throw new IllegalArgumentException("Value for " +
+                BASE_ZNODE_KEY + " must start with /: " + result);
+        }
+
+        return result;
+    }
+
     /**
      * Collects the output of a stream and dumps it to the log.
      */

Added: incubator/giraph/trunk/src/test/java/zk/TestZooKeeperManager.java
URL: 
http://svn.apache.org/viewvc/incubator/giraph/trunk/src/test/java/zk/TestZooKeeperManager.java?rev=1242614&view=auto
==============================================================================
--- incubator/giraph/trunk/src/test/java/zk/TestZooKeeperManager.java (added)
+++ incubator/giraph/trunk/src/test/java/zk/TestZooKeeperManager.java Fri Feb 
10 00:13:04 2012
@@ -0,0 +1,45 @@
+/*
+ * 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 zk;
+
+import junit.framework.TestCase;
+import org.apache.giraph.graph.GiraphJob;
+import org.apache.giraph.zk.ZooKeeperManager;
+import org.apache.hadoop.conf.Configuration;
+
+public class TestZooKeeperManager extends TestCase {
+  public void testGetBasePath() {
+    Configuration conf = new Configuration();
+
+    // Default is empty, everything goes in root znode
+    assertEquals("Default value for base path should be empty",
+        "", ZooKeeperManager.getBasePath(conf));
+
+    conf.set(GiraphJob.BASE_ZNODE_KEY, "/howdy");
+    assertEquals("Base path should reflect value of " + 
GiraphJob.BASE_ZNODE_KEY,
+        "/howdy", ZooKeeperManager.getBasePath(conf));
+
+    conf.set(GiraphJob.BASE_ZNODE_KEY, "no_slash");
+    try {
+      ZooKeeperManager.getBasePath(conf);
+      fail("Should not have allowed path without starting slash");
+    } catch (IllegalArgumentException iae) {
+      assertTrue(iae.getMessage().contains(GiraphJob.BASE_ZNODE_KEY));
+    }
+  }
+}


Reply via email to