You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gobblin.apache.org by ab...@apache.org on 2017/07/27 23:47:13 UTC

incubator-gobblin git commit: [GOBBLIN-10] Fix_for_#1850_and_#1851

Repository: incubator-gobblin
Updated Branches:
  refs/heads/master b12c35385 -> 8d297de3e


[GOBBLIN-10] Fix_for_#1850_and_#1851

DatabaseJobHistoryStore should initialize
Reflections only once.

Fix findbugs error

Closes #1967 from kadaan/Fix_for_#1850


Project: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/commit/8d297de3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/tree/8d297de3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/diff/8d297de3

Branch: refs/heads/master
Commit: 8d297de3e85fa9570ddd60eac38ebf0d08b6e19e
Parents: b12c353
Author: Joel Baranick <jo...@ensighten.com>
Authored: Thu Jul 27 16:47:06 2017 -0700
Committer: Abhishek Tiwari <ab...@gmail.com>
Committed: Thu Jul 27 16:47:06 2017 -0700

----------------------------------------------------------------------
 .../metastore/DatabaseJobHistoryStore.java      | 28 +++++++++++++++++---
 1 file changed, 24 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/8d297de3/gobblin-metastore/src/main/java/gobblin/metastore/DatabaseJobHistoryStore.java
----------------------------------------------------------------------
diff --git a/gobblin-metastore/src/main/java/gobblin/metastore/DatabaseJobHistoryStore.java b/gobblin-metastore/src/main/java/gobblin/metastore/DatabaseJobHistoryStore.java
index 7e841b1..914ab42 100644
--- a/gobblin-metastore/src/main/java/gobblin/metastore/DatabaseJobHistoryStore.java
+++ b/gobblin-metastore/src/main/java/gobblin/metastore/DatabaseJobHistoryStore.java
@@ -17,7 +17,9 @@
 
 package gobblin.metastore;
 
+import javax.annotation.Nullable;
 import javax.sql.DataSource;
+import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 import java.util.Collection;
@@ -27,10 +29,14 @@ import org.flywaydb.core.Flyway;
 import org.flywaydb.core.api.FlywayException;
 import org.flywaydb.core.api.MigrationInfoService;
 import org.flywaydb.core.api.MigrationVersion;
+import org.reflections.Configuration;
 import org.reflections.Reflections;
 import org.reflections.util.ClasspathHelper;
 
+import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.inject.Inject;
 
@@ -40,6 +46,7 @@ import gobblin.rest.JobExecutionInfo;
 import gobblin.rest.JobExecutionQuery;
 
 import org.reflections.util.ClasspathHelper;
+import org.reflections.util.ConfigurationBuilder;
 
 
 /**
@@ -52,6 +59,9 @@ import org.reflections.util.ClasspathHelper;
  * @author Yinan Li
  */
 public class DatabaseJobHistoryStore implements JobHistoryStore {
+  // Scan all packages in the classpath with prefix gobblin.metastore.database when
+  // class is loaded. Since scan is expensive we do it only once when class is loaded.
+  private static final Reflections reflections = new Reflections(getConfigurationBuilder());
   private final VersionedDatabaseJobHistoryStore versionedStore;
 
   @Inject
@@ -92,16 +102,26 @@ public class DatabaseJobHistoryStore implements JobHistoryStore {
     return ClasspathHelper.forManifest(ClasspathHelper.forClassLoader(classLoaders));
   }
 
+  private static Configuration getConfigurationBuilder() {
+    ConfigurationBuilder configurationBuilder=  ConfigurationBuilder.build("gobblin.metastore.database",
+        effectiveClassPathUrls(DatabaseJobHistoryStore.class.getClassLoader()));
+    List<URL> filteredUrls = Lists.newArrayList(Iterables.filter(configurationBuilder.getUrls(), new Predicate<URL>() {
+      @Override
+      public boolean apply(@Nullable URL input) {
+        return input != null && (!input.getProtocol().equals("file") || new File(input.getFile()).exists());
+      }
+    }));
+    configurationBuilder.setUrls(filteredUrls);
+    return configurationBuilder;
+  }
+
   private static VersionedDatabaseJobHistoryStore findVersionedDatabaseJobHistoryStore(MigrationVersion requiredVersion)
       throws IllegalAccessException, InstantiationException, ClassNotFoundException {
     Class<?> foundClazz = null;
     Class<?> defaultClazz = null;
     MigrationVersion defaultVersion = MigrationVersion.EMPTY;
-    // Scan all packages
-    Reflections reflections = new Reflections("gobblin.metastore.database",
-        effectiveClassPathUrls(DatabaseJobHistoryStore.class.getClassLoader()));
     for (Class<?> clazz : Sets.intersection(reflections.getTypesAnnotatedWith(SupportedDatabaseVersion.class),
-        reflections.getSubTypesOf(VersionedDatabaseJobHistoryStore.class))) {
+            reflections.getSubTypesOf(VersionedDatabaseJobHistoryStore.class))) {
       SupportedDatabaseVersion annotation = clazz.getAnnotation(SupportedDatabaseVersion.class);
       String version = annotation.version();
       MigrationVersion actualVersion = MigrationVersion.fromVersion(Strings.isNullOrEmpty(version) ? null : version);