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);