LENS-478 : Add counter for DatabaseResourceService load errors (Yash Sharma via amareshwari)
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/06e11557 Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/06e11557 Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/06e11557 Branch: refs/heads/current-release-line Commit: 06e1155732f963c31c16aa4bf6b3278b6f144952 Parents: 70e4b92 Author: Yash Sharma <[email protected]> Authored: Wed Jun 3 16:04:39 2015 +0530 Committer: Amareshwari Sriramadasu <[email protected]> Committed: Wed Jun 3 16:04:39 2015 +0530 ---------------------------------------------------------------------- .../lens/server/api/metrics/MetricsService.java | 2 + .../lens/server/metrics/MetricsServiceImpl.java | 12 +++++ .../server/session/DatabaseResourceService.java | 51 ++++++++++++++++++-- 3 files changed, 62 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/06e11557/lens-server-api/src/main/java/org/apache/lens/server/api/metrics/MetricsService.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/metrics/MetricsService.java b/lens-server-api/src/main/java/org/apache/lens/server/api/metrics/MetricsService.java index ffde912..f7a23ab 100644 --- a/lens-server-api/src/main/java/org/apache/lens/server/api/metrics/MetricsService.java +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/metrics/MetricsService.java @@ -133,6 +133,8 @@ public interface MetricsService { String ACTIVE_SESSIONS = "active-sessions"; + long getTotalDatabaseResourceLoadErrors(); + long getQueuedQueries(); long getRunningQueries(); http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/06e11557/lens-server/src/main/java/org/apache/lens/server/metrics/MetricsServiceImpl.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/metrics/MetricsServiceImpl.java b/lens-server/src/main/java/org/apache/lens/server/metrics/MetricsServiceImpl.java index 66beeed..9ae0d66 100644 --- a/lens-server/src/main/java/org/apache/lens/server/metrics/MetricsServiceImpl.java +++ b/lens-server/src/main/java/org/apache/lens/server/metrics/MetricsServiceImpl.java @@ -42,6 +42,7 @@ import org.apache.lens.server.api.session.SessionEvent; import org.apache.lens.server.api.session.SessionExpired; import org.apache.lens.server.api.session.SessionOpened; import org.apache.lens.server.api.session.SessionService; +import org.apache.lens.server.session.DatabaseResourceService; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hive.service.AbstractService; @@ -114,6 +115,9 @@ public class MetricsServiceImpl extends AbstractService implements MetricsServic /** The total cancelled queries. */ private Counter totalCancelledQueries; + /** The total errors while loading database resources */ + private Counter totalDatabaseResourceLoadErrors; + /** The opened sessions */ private Gauge<Integer> activeSessions; @@ -334,6 +338,9 @@ public class MetricsServiceImpl extends AbstractService implements MetricsServic } }); + totalDatabaseResourceLoadErrors = metricRegistry.counter(MetricRegistry.name(DatabaseResourceService.class, + DatabaseResourceService.LOAD_RESOURCES_ERRORS)); + totalAcceptedQueries = metricRegistry.counter(MetricRegistry.name(QueryExecutionService.class, "total-" + ACCEPTED_QUERIES)); @@ -486,6 +493,11 @@ public class MetricsServiceImpl extends AbstractService implements MetricsServic } @Override + public long getTotalDatabaseResourceLoadErrors() { + return totalDatabaseResourceLoadErrors.getCount(); + } + + @Override public long getQueuedQueries() { return queuedQueries.getValue(); } http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/06e11557/lens-server/src/main/java/org/apache/lens/server/session/DatabaseResourceService.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/session/DatabaseResourceService.java b/lens-server/src/main/java/org/apache/lens/server/session/DatabaseResourceService.java index 608c679..2a5cce5 100644 --- a/lens-server/src/main/java/org/apache/lens/server/session/DatabaseResourceService.java +++ b/lens-server/src/main/java/org/apache/lens/server/session/DatabaseResourceService.java @@ -26,8 +26,10 @@ import java.net.URLClassLoader; import java.nio.charset.Charset; import java.util.*; +import org.apache.lens.server.LensServices; import org.apache.lens.server.api.LensConfConstants; import org.apache.lens.server.api.error.LensException; +import org.apache.lens.server.api.metrics.MetricsService; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -48,6 +50,36 @@ public class DatabaseResourceService extends AbstractService { private Map<String, ClassLoader> classLoaderCache; private Map<String, List<LensSessionImpl.ResourceEntry>> dbResEntryMap; + /** + * The metrics service. + */ + private MetricsService metricsService; + + /** + * The Constant LOAD_RESOURCES_ERRORS. + */ + public static final String LOAD_RESOURCES_ERRORS = "total-load-resources-errors"; + + /** + * Incr counter. + * + * @param counter the counter + */ + private void incrCounter(String counter) { + getMetrics().incrCounter(DatabaseResourceService.class, counter); + } + + /** + * Gets counter value. + * + * @param counter the counter + */ + private long getCounter(String counter) { + return getMetrics().getCounter(DatabaseResourceService.class, counter); + } + + + public DatabaseResourceService(String name) { super(name); } @@ -68,7 +100,8 @@ public class DatabaseResourceService extends AbstractService { loadDbResourceEntries(); loadResources(); } catch (LensException e) { - LOG.warn("Failed to load DB resource mapping, resources must be added explicitly to session"); + incrCounter(LOAD_RESOURCES_ERRORS); + LOG.warn("Failed to load DB resource mapping, resources must be added explicitly to session."); } } @@ -92,6 +125,7 @@ public class DatabaseResourceService extends AbstractService { Path resTopDirPath = new Path(resTopDir); serverFs = FileSystem.newInstance(resTopDirPath.toUri(), getHiveConf()); if (!serverFs.exists(resTopDirPath)) { + incrCounter(LOAD_RESOURCES_ERRORS); LOG.warn("Database resource location does not exist - " + resTopDir + ". Database jars will not be available"); return; } @@ -190,15 +224,15 @@ public class DatabaseResourceService extends AbstractService { /** * Load DB specific resources - * @throws LensException */ - public void loadResources() throws LensException { + public void loadResources() { for (String db : dbResEntryMap.keySet()) { try { createClassLoader(db); loadDBJars(db, dbResEntryMap.get(db), true); LOG.info("Loaded resources for db " + db + " resources: " + dbResEntryMap.get(db)); } catch (LensException exc) { + incrCounter(LOAD_RESOURCES_ERRORS); LOG.warn("Failed to load resources for db " + db, exc); classLoaderCache.remove(db); } @@ -245,6 +279,7 @@ public class DatabaseResourceService extends AbstractService { try { newUrls.add(new URL(res.getLocation())); } catch (MalformedURLException e) { + incrCounter(LOAD_RESOURCES_ERRORS); LOG.error("Invalid URL " + res.getLocation() + " adding to db " + database, e); } } @@ -292,4 +327,14 @@ public class DatabaseResourceService extends AbstractService { public Collection<LensSessionImpl.ResourceEntry> getResourcesForDatabase(String database) { return dbResEntryMap.get(database); } + + private MetricsService getMetrics() { + if (metricsService == null) { + metricsService = (MetricsService) LensServices.get().getService(MetricsService.NAME); + if (metricsService == null) { + throw new NullPointerException("Could not get metrics service"); + } + } + return metricsService; + } }
