saxenapranav commented on code in PR #6314: URL: https://github.com/apache/hadoop/pull/6314#discussion_r1510679721
########## hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azurebfs/services/AbfsClient.java: ########## @@ -1411,6 +1448,97 @@ protected AccessTokenProvider getTokenProvider() { return tokenProvider; } + public AzureBlobFileSystem getMetricFilesystem() throws IOException { + if (metricFs == null) { + try { + Configuration metricConfig = abfsConfiguration.getRawConfiguration(); + String metricAccountKey = metricConfig.get(FS_AZURE_METRIC_ACCOUNT_KEY); + final String abfsMetricUrl = metricConfig.get(FS_AZURE_METRIC_URI); + if (abfsMetricUrl == null) { + return null; + } + metricConfig.set(FS_AZURE_ACCOUNT_KEY_PROPERTY_NAME, metricAccountKey); + metricConfig.set(AZURE_CREATE_REMOTE_FILESYSTEM_DURING_INITIALIZATION, "false"); + URI metricUri; + metricUri = new URI(FileSystemUriSchemes.ABFS_SCHEME, abfsMetricUrl, null, null, null); + metricFs = (AzureBlobFileSystem) FileSystem.newInstance(metricUri, metricConfig); + } catch (AzureBlobFileSystemException | URISyntaxException ex) { + //do nothing + } + } + return metricFs; + } + + private TracingContext getMetricTracingContext() { + String hostName; + try { + hostName = InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + hostName = "UnknownHost"; + } + return new TracingContext(TracingContext.validateClientCorrelationID( + abfsConfiguration.getClientCorrelationId()), + hostName, FSOperationType.GET_ATTR, true, + abfsConfiguration.getTracingHeaderFormat(), + null, abfsCounters.toString()); + } + + /** + * Synchronized method to suspend or resume timer. + * @param timerFunctionality resume or suspend. + * @param timerTask The timertask object. + * @return true or false. + */ + synchronized boolean timerOrchestrator(TimerFunctionality timerFunctionality, Review Comment: Design is good and doesn't need change. What I am suggesting is: we do not have this method as synchronized, and the actions which are taken if conditions are true shall be synchronized. This helps because, conditions are going to be true only sometimes, but we will always keep things synchronized even if there is no action that needs to be taken. What I proposing is: ``` boolean timerOrchestrator(TimerFunctionality timerFunctionality, TimerTask timerTask) { switch (timerFunctionality) { case RESUME: if (metricCollectionStopped.get()) { synchronized (this) { if(metricCollectionStopped.get()) { resumeTimer(); } } } break; case SUSPEND: long now = System.currentTimeMillis(); long lastExecutionTime = abfsCounters.getLastExecutionTime().get(); if (metricCollectionEnabled && (now - lastExecutionTime >= metricAnalysisPeriod)) { synchronized (this) { if (!(metricCollectionEnabled && (now - lastExecutionTime >= metricAnalysisPeriod))) {return false;} timerTask.cancel(); timer.purge(); metricCollectionStopped.set(true); return true; } } break; default: break; } return false; } ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org