azkaban-aplcache

Allow relative path of h2 DB to be used (#1060) The JDBC connection

5/8/2017 8:35:23 PM

Details

diff --git a/azkaban-common/src/main/java/azkaban/AzkabanCommonModule.java b/azkaban-common/src/main/java/azkaban/AzkabanCommonModule.java
index 8dfc10d..1fbf5b8 100644
--- a/azkaban-common/src/main/java/azkaban/AzkabanCommonModule.java
+++ b/azkaban-common/src/main/java/azkaban/AzkabanCommonModule.java
@@ -19,7 +19,6 @@ package azkaban;
 import azkaban.db.AzkabanDataSource;
 import azkaban.db.DatabaseOperator;
 import azkaban.db.DatabaseOperatorImpl;
-
 import azkaban.db.H2FileDataSource;
 import azkaban.db.MySQLDataSource;
 import azkaban.executor.ExecutorLoader;
@@ -37,8 +36,12 @@ import com.google.inject.Inject;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import javax.sql.DataSource;
 import org.apache.commons.dbutils.QueryRunner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -47,6 +50,8 @@ import org.apache.commons.dbutils.QueryRunner;
  * structuring of Guice components.
  */
 public class AzkabanCommonModule extends AbstractModule {
+  private static final Logger logger = LoggerFactory.getLogger(AzkabanCommonModule.class);
+
   private final AzkabanCommonModuleConfig config;
 
   public AzkabanCommonModule(Props props) {
@@ -91,7 +96,9 @@ public class AzkabanCommonModule extends AbstractModule {
 
     if(databaseType.equals("h2")) {
       String path = props.getString("h2.path");
-      return new H2FileDataSource(path);
+      Path h2DbPath = Paths.get(path).toAbsolutePath();
+      logger.info("h2 DB path: " + h2DbPath);
+      return new H2FileDataSource(h2DbPath);
     }
     int port = props.getInt("mysql.port");
     String host = props.getString("mysql.host");
diff --git a/azkaban-common/src/main/java/azkaban/database/DataSourceUtils.java b/azkaban-common/src/main/java/azkaban/database/DataSourceUtils.java
index 5c37361..650a9dc 100644
--- a/azkaban-common/src/main/java/azkaban/database/DataSourceUtils.java
+++ b/azkaban-common/src/main/java/azkaban/database/DataSourceUtils.java
@@ -16,15 +16,10 @@
 
 package azkaban.database;
 
-import java.sql.SQLException;
-
-import org.apache.commons.dbutils.DbUtils;
-import org.apache.log4j.Logger;
-
-import java.sql.PreparedStatement;
-import java.sql.Connection;
-
 import azkaban.utils.Props;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.apache.log4j.Logger;
 
 public class DataSourceUtils {
 
@@ -79,7 +74,9 @@ public class DataSourceUtils {
               numConnections);
     } else if (databaseType.equals("h2")) {
       String path = props.getString("h2.path");
-      dataSource = getH2DataSource(path);
+      Path h2DbPath = Paths.get(path).toAbsolutePath();
+      logger.info("h2 DB path: " + h2DbPath);
+      dataSource = getH2DataSource(h2DbPath);
     }
 
     return dataSource;
@@ -108,7 +105,7 @@ public class DataSourceUtils {
    * @param file
    * @return
    */
-  public static AzkabanDataSource getH2DataSource(String file) {
+  public static AzkabanDataSource getH2DataSource(Path file) {
     return new EmbeddedH2BasicDataSource(file);
   }
 
@@ -158,7 +155,7 @@ public class DataSourceUtils {
    *
    */
   public static class EmbeddedH2BasicDataSource extends AzkabanDataSource {
-    private EmbeddedH2BasicDataSource(String filePath) {
+    private EmbeddedH2BasicDataSource(Path filePath) {
       super();
       String url = "jdbc:h2:file:" + filePath;
       setDriverClassName("org.h2.Driver");
diff --git a/azkaban-db/src/main/java/azkaban/db/H2FileDataSource.java b/azkaban-db/src/main/java/azkaban/db/H2FileDataSource.java
index 98e361f..1e671de 100644
--- a/azkaban-db/src/main/java/azkaban/db/H2FileDataSource.java
+++ b/azkaban-db/src/main/java/azkaban/db/H2FileDataSource.java
@@ -15,8 +15,12 @@
  */
 package azkaban.db;
 
+import java.nio.file.Path;
+
+
 public class H2FileDataSource extends AzkabanDataSource {
-  public H2FileDataSource(String filePath) {
+
+  public H2FileDataSource(Path filePath) {
     super();
     String url = "jdbc:h2:file:" + filePath;
     setDriverClassName("org.h2.Driver");