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) {
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]