Skip to content

HADOOP-18325: ABFS: Add correlated metric support for ABFS operations #6314

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 114 commits into from
May 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
98d2901
Metric
anmolasrani123 May 12, 2022
16612d3
Metric changes
anmolasrani123 May 16, 2022
fb2295e
Metric changes
anmolasrani123 May 20, 2022
986d2e6
Metrics
anmolasrani123 May 27, 2022
23d9b47
Added final metrics
anmolasrani123 Jun 6, 2022
d57a746
Checkstyle fixes
anmolasrani123 Jun 7, 2022
4476d33
Added new params to metrics
anmolasrani123 Jun 14, 2022
d7b6be8
Incorrect total requests fix
anmolasrani123 Jun 21, 2022
324d2c0
Adding thread safety for metrics update
anmolasrani123 Jun 23, 2022
b9273d3
Made the metric enablement configurable
anmolasrani123 Jul 5, 2022
5fc1417
Removed hardcoded value for maxIoRetries
anmolasrani123 Jul 6, 2022
b185269
Fix null pointer exceptions
anmolasrani123 Jul 7, 2022
ef9691a
Fix for acronyms
anmolasrani123 Jul 8, 2022
3bddb11
Fix for spacing issues
anmolasrani123 Jul 11, 2022
4afba69
Added documentation for configs
anmolasrani123 Jul 12, 2022
0edb368
Update variable name
anmolasrani123 Jul 12, 2022
791b84e
Added config for URI
anmolasrani123 Jul 12, 2022
f6bad55
Test for max retries
anmolasrani123 Jul 13, 2022
9230bd8
Add test case for retry
anmolasrani123 Jul 13, 2022
e1c4c61
Refactored the test class
anmolasrani123 Jul 14, 2022
07aa9af
Merge branch 'metrics' of https://github.com/anmolanmol1234/hadoop in…
anmolasrani123 Jul 14, 2022
7686cce
Added comments
anmolasrani123 Jul 14, 2022
f9de500
Merge branch 'metrics' of https://github.com/anmolanmol1234/hadoop in…
anmolasrani123 Jul 14, 2022
f66bfe3
Back to previous configs
anmolasrani123 Jul 14, 2022
d0c0f68
remove test case
anmolasrani123 Jul 14, 2022
637060f
remove test case
anmolasrani123 Jul 14, 2022
a477400
remove test case
anmolasrani123 Jul 14, 2022
0f44a9b
Fix for checkstyle errors
anmolasrani123 Jul 15, 2022
312853c
Checkstyle error fixes
anmolasrani123 Jul 18, 2022
bca9c4e
Spotbugs fixes
anmolasrani123 Jul 18, 2022
4e99643
Merge branch 'apache:trunk' into HADOOP-18325
anmolanmol1234 Jul 25, 2022
a5ca55f
Added metrics for input stream
anmolasrani123 Jul 26, 2022
1d99d7b
Fix for input stream metrics
anmolasrani123 Jul 26, 2022
3b5ba52
Fix for input stream metrics
anmolasrani123 Jul 26, 2022
139b528
variable name fix
anmolasrani123 Jul 26, 2022
4e9cd93
Added changes for first read and second read
anmolasrani123 Jul 28, 2022
137f337
Merge branch 'apache:trunk' into HADOOP-18325_temp
anmolanmol1234 Jul 28, 2022
15337ff
Added support for read footer metrics
saxenapranav Jul 28, 2022
5706ca0
fix for file size
anmolasrani123 Aug 2, 2022
3abca57
Checkstyle fixes
anmolasrani123 Aug 3, 2022
4889c59
Merge branch 'HADOOP-18325' into HADOOP-18325_footerMetrics
anmolasrani123 Aug 3, 2022
6cc7d37
Reformating and refactoring the code
anmolasrani123 Aug 3, 2022
05acafc
Update documentation
anmolasrani123 Aug 3, 2022
388d837
Checkstyle fixes
anmolasrani123 Aug 4, 2022
da41836
Added new tracing class for metrics
anmolasrani123 Aug 8, 2022
d55aa47
Additional tracing header formats
anmolasrani123 Aug 10, 2022
e26ee5f
Test for footer metrics
anmolasrani123 Aug 12, 2022
5f680d0
Test for footer metrics
anmolasrani123 Aug 12, 2022
a0d3ef9
Checkstyle fixes
anmolasrani123 Aug 12, 2022
63abb7f
Tracing header fix
anmolasrani123 Aug 12, 2022
eb381e1
Removing unused fields
anmolasrani123 Aug 16, 2022
386da87
Merge branch 'apache:trunk' into HADOOP-18325_footerMetrics
anmolanmol1234 Aug 16, 2022
40868de
Removing unused fields
anmolasrani123 Aug 16, 2022
1f6827f
Merge branch 'apache:trunk' into HADOOP-18325
anmolanmol1234 Oct 7, 2022
d22b897
Merge branch 'apache:trunk' into HADOOP-18325
anmolanmol1234 Oct 19, 2022
899d11a
Changes for idle period
anmolasrani123 Oct 25, 2022
4a9fafa
Changes for idle period
anmolasrani123 Oct 25, 2022
96855b7
Timer
anmolasrani123 Nov 2, 2022
3cc1c74
Changes for pushing metrics
anmolasrani123 Nov 3, 2022
241410a
Modifier change
anmolasrani123 Nov 3, 2022
b4b273a
Added changes for footer metrics
anmolasrani123 Nov 9, 2022
dbcb447
Refactoring and added test cases
anmolasrani123 Nov 10, 2022
c88d902
Refactoring and added test cases
anmolasrani123 Nov 10, 2022
c4c15c9
Merge branch 'apache:trunk' into HADOOP-18325_temp
anmolanmol1234 Nov 10, 2022
41ffe2b
Merge conflicts
anmolanmol1234 Aug 25, 2023
1dc49f4
Latest pull
anmolanmol1234 Nov 7, 2023
62d5889
Merge branch 'apache:trunk' into metricLatest
anmolanmol1234 Nov 8, 2023
c000464
Make code more readable
anmolanmol1234 Nov 8, 2023
84bce79
Make code more readable
anmolanmol1234 Nov 8, 2023
758dfea
code refactor
anmolanmol1234 Nov 15, 2023
98066c3
Send metrics to new header
anmolanmol1234 Dec 1, 2023
8e0f143
Merge conflicts
anmolanmol1234 Dec 1, 2023
96b91a5
Fix failures
anmolanmol1234 Dec 4, 2023
b93a891
Fix test failure
anmolanmol1234 Dec 4, 2023
adc8049
Fix null pointer issues
anmolanmol1234 Dec 4, 2023
e9a7c7c
Fix test failures
anmolanmol1234 Dec 4, 2023
831201a
Checkstyle fixes
anmolanmol1234 Dec 4, 2023
d1c3c57
Merge conflicts
anmolanmol1234 Jan 2, 2024
1609cf0
Make map ordering correct
anmolanmol1234 Jan 2, 2024
f97e43a
Remove magic number
anmolanmol1234 Feb 29, 2024
eca298e
Merge conflicts
anmolanmol1234 Mar 1, 2024
bf1c409
Javadocs
anmolanmol1234 Mar 4, 2024
f45c3db
Addressing comments for single call
anmolanmol1234 Mar 4, 2024
2875fcc
Merge branch 'trunk' of https://github.com/anmolanmol1234/hadoop into…
anmolanmol1234 Mar 4, 2024
901f670
Remove MagicNumber
anmolanmol1234 Mar 4, 2024
0395e94
Reuse code
anmolanmol1234 Mar 4, 2024
b3acadb
Adding getters and setters
anmolanmol1234 Mar 5, 2024
9e8acc9
Change getters and setters
anmolanmol1234 Mar 6, 2024
73ab52b
Making changes in footer metrics as well
anmolanmol1234 Mar 6, 2024
081bce4
change variable
anmolanmol1234 Mar 6, 2024
3e21c2d
Update code
anmolanmol1234 Mar 6, 2024
0f4068f
Validate grammar
anmolanmol1234 Mar 7, 2024
f51f756
Remove use of reflection
anmolanmol1234 Mar 7, 2024
ea92172
javadocs
anmolanmol1234 Mar 7, 2024
e514c88
Checkstyle fixes
anmolanmol1234 Mar 7, 2024
7c933fd
Checkstyle and javadocs
anmolanmol1234 Mar 8, 2024
b2ae082
PR comments
anmolanmol1234 Mar 12, 2024
ab9ecdc
killing existing timer
anmolanmol1234 Mar 12, 2024
5696ba6
Addressing PR comments
anmolanmol1234 Mar 13, 2024
7d41cee
Synchronization changes
anmolanmol1234 Mar 13, 2024
99495d3
test fix
anmolanmol1234 Mar 13, 2024
646a81c
Test fixes
anmolanmol1234 Mar 13, 2024
09c2674
Compiling issue
anmolanmol1234 Mar 13, 2024
c416fb0
Metric creds changes
anmolanmol1234 Mar 14, 2024
e944dc6
md changes
anmolanmol1234 Mar 14, 2024
290dbaa
Read count changes
anmolanmol1234 Mar 15, 2024
d5fbf4a
Remove unused imports
anmolanmol1234 Mar 15, 2024
e18b2f5
Revert IDE refactors
anmolanmol1234 Mar 15, 2024
8147b27
Reafctor abfs.md
anmolanmol1234 Mar 15, 2024
18205c1
fix metrics creds
anmolanmol1234 Mar 15, 2024
1479da8
Merge branch 'trunk' into metricLatest
anmolanmol1234 Apr 12, 2024
ac3cb16
Backmerge with trunk
anmolanmol1234 Apr 12, 2024
f8df32f
Merge branch 'trunk' into metricLatest
anmolanmol1234 May 21, 2024
05edb95
Fix imports
anmolanmol1234 May 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,312 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.hadoop.fs.azurebfs;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;

import static org.apache.hadoop.fs.azurebfs.constants.FileSystemConfigurations.HUNDRED;
import static org.apache.hadoop.fs.azurebfs.constants.FileSystemConfigurations.THOUSAND;

public class AbfsBackoffMetrics {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you add javadocs for each of these and the class.


private AtomicLong numberOfRequestsSucceeded;

private AtomicLong minBackoff;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are these timings? if so should include time unit in name or at least use millis and javadoc it


private AtomicLong maxBackoff;

private AtomicLong totalRequests;

private AtomicLong totalBackoff;

private String retryCount;

private AtomicLong numberOfIOPSThrottledRequests;

private AtomicLong numberOfBandwidthThrottledRequests;

private AtomicLong numberOfOtherThrottledRequests;

private AtomicLong numberOfNetworkFailedRequests;

private AtomicLong maxRetryCount;

private AtomicLong totalNumberOfRequests;

private AtomicLong numberOfRequestsSucceededWithoutRetrying;

private AtomicLong numberOfRequestsFailed;

private final Map<String, AbfsBackoffMetrics> metricsMap
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is mixing up a metrics class "stats on use" with the map of filenames -> instances. it explains why there are two constructors and one only does partial init and whose toString() will NPE -but it doesn't justify this design.

Proposed: split out the metrics (which should use IOStatisticsStore for its structure, and implement IOStatisticsSource serving this) from the map managing the metrics.

that must be at most one per client instance and needs a good cleanup story so it scales well.

= new ConcurrentHashMap<>();

public AbfsBackoffMetrics() {
initializeMap();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest you actually use an {{IOStatisticsStoreBuilder}} to build an IOStatisticsStore, from which you can then extract the counters for direct access -but still be able to snapshot, aggregate and share the stats though public APIs.

See S3AInstrumentation.InputStreamStatistics as an example of this

this.numberOfIOPSThrottledRequests = new AtomicLong();
this.numberOfBandwidthThrottledRequests = new AtomicLong();
this.numberOfOtherThrottledRequests = new AtomicLong();
this.totalNumberOfRequests = new AtomicLong();
this.maxRetryCount = new AtomicLong();
this.numberOfRequestsSucceededWithoutRetrying = new AtomicLong();
this.numberOfRequestsFailed = new AtomicLong();
this.numberOfNetworkFailedRequests = new AtomicLong();
}

public AbfsBackoffMetrics(String retryCount) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this only partially initialises the metrics

this.retryCount = retryCount;
this.numberOfRequestsSucceeded = new AtomicLong();
this.minBackoff = new AtomicLong(Long.MAX_VALUE);
this.maxBackoff = new AtomicLong();
this.totalRequests = new AtomicLong();
this.totalBackoff = new AtomicLong();
}

private void initializeMap() {
ArrayList<String> retryCountList = new ArrayList<String>(
Arrays.asList("1", "2", "3", "4", "5_15", "15_25", "25AndAbove"));
for (String s : retryCountList) {
metricsMap.put(s, new AbfsBackoffMetrics(s));
}
}

public long getNumberOfRequestsSucceeded() {
return this.numberOfRequestsSucceeded.get();
}

public void setNumberOfRequestsSucceeded(long numberOfRequestsSucceeded) {
this.numberOfRequestsSucceeded.set(numberOfRequestsSucceeded);
}

public void incrementNumberOfRequestsSucceeded() {
this.numberOfRequestsSucceeded.getAndIncrement();
}

public long getMinBackoff() {
return this.minBackoff.get();
}

public void setMinBackoff(long minBackoff) {
this.minBackoff.set(minBackoff);
}

public long getMaxBackoff() {
return this.maxBackoff.get();
}

public void setMaxBackoff(long maxBackoff) {
this.maxBackoff.set(maxBackoff);
}

public long getTotalRequests() {
return this.totalRequests.get();
}

public void incrementTotalRequests() {
this.totalRequests.incrementAndGet();
}

public void setTotalRequests(long totalRequests) {
this.totalRequests.set(totalRequests);
}

public long getTotalBackoff() {
return this.totalBackoff.get();
}

public void setTotalBackoff(long totalBackoff) {
this.totalBackoff.set(totalBackoff);
}

public String getRetryCount() {
return this.retryCount;
}

public long getNumberOfIOPSThrottledRequests() {
return this.numberOfIOPSThrottledRequests.get();
}

public void setNumberOfIOPSThrottledRequests(long numberOfIOPSThrottledRequests) {
this.numberOfIOPSThrottledRequests.set(numberOfIOPSThrottledRequests);
}

public void incrementNumberOfIOPSThrottledRequests() {
this.numberOfIOPSThrottledRequests.getAndIncrement();
}

public long getNumberOfBandwidthThrottledRequests() {
return this.numberOfBandwidthThrottledRequests.get();
}

public void setNumberOfBandwidthThrottledRequests(long numberOfBandwidthThrottledRequests) {
this.numberOfBandwidthThrottledRequests.set(numberOfBandwidthThrottledRequests);
}

public void incrementNumberOfBandwidthThrottledRequests() {
this.numberOfBandwidthThrottledRequests.getAndIncrement();
}

public long getNumberOfOtherThrottledRequests() {
return this.numberOfOtherThrottledRequests.get();
}

public void setNumberOfOtherThrottledRequests(long numberOfOtherThrottledRequests) {
this.numberOfOtherThrottledRequests.set(numberOfOtherThrottledRequests);
}

public void incrementNumberOfOtherThrottledRequests() {
this.numberOfOtherThrottledRequests.getAndIncrement();
}

public long getMaxRetryCount() {
return this.maxRetryCount.get();
}

public void setMaxRetryCount(long maxRetryCount) {
this.maxRetryCount.set(maxRetryCount);
}

public void incrementMaxRetryCount() {
this.maxRetryCount.getAndIncrement();
}

public long getTotalNumberOfRequests() {
return this.totalNumberOfRequests.get();
}

public void setTotalNumberOfRequests(long totalNumberOfRequests) {
this.totalNumberOfRequests.set(totalNumberOfRequests);
}

public void incrementTotalNumberOfRequests() {
this.totalNumberOfRequests.getAndIncrement();
}

public Map<String, AbfsBackoffMetrics> getMetricsMap() {
return metricsMap;
}

public long getNumberOfRequestsSucceededWithoutRetrying() {
return this.numberOfRequestsSucceededWithoutRetrying.get();
}

public void setNumberOfRequestsSucceededWithoutRetrying(long numberOfRequestsSucceededWithoutRetrying) {
this.numberOfRequestsSucceededWithoutRetrying.set(numberOfRequestsSucceededWithoutRetrying);
}

public void incrementNumberOfRequestsSucceededWithoutRetrying() {
this.numberOfRequestsSucceededWithoutRetrying.getAndIncrement();
}

public long getNumberOfRequestsFailed() {
return this.numberOfRequestsFailed.get();
}

public void setNumberOfRequestsFailed(long numberOfRequestsFailed) {
this.numberOfRequestsFailed.set(numberOfRequestsFailed);
}

public void incrementNumberOfRequestsFailed() {
this.numberOfRequestsFailed.getAndIncrement();
}

public long getNumberOfNetworkFailedRequests() {
return this.numberOfNetworkFailedRequests.get();
}

public void setNumberOfNetworkFailedRequests(long numberOfNetworkFailedRequests) {
this.numberOfNetworkFailedRequests.set(numberOfNetworkFailedRequests);
}

public void incrementNumberOfNetworkFailedRequests() {
this.numberOfNetworkFailedRequests.getAndIncrement();
}

/*
Acronyms :-
1.RCTSI :- Request count that succeeded in x retries
2.MMA :- Min Max Average (This refers to the backoff or sleep time between 2 requests)
3.s :- seconds
4.BWT :- Number of Bandwidth throttled requests
5.IT :- Number of IOPS throttled requests
6.OT :- Number of Other throttled requests
7.NFR :- Number of requests which failed due to network errors
8.%RT :- Percentage of requests that are throttled
9.TRNR :- Total number of requests which succeeded without retrying
10.TRF :- Total number of requests which failed
11.TR :- Total number of requests which were made
12.MRC :- Max retry count across all requests
*/
@Override
public String toString() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the goal here? something for logging or to submit as a header in a message.

And do you expect the log entries to be structured enough for parsing later?

If so, I would propose having a toLogString() message and highlight that it must not be changed

StringBuilder metricString = new StringBuilder();
long totalRequestsThrottled = getNumberOfBandwidthThrottledRequests()
+ getNumberOfIOPSThrottledRequests()
+ getNumberOfOtherThrottledRequests();
double percentageOfRequestsThrottled =
((double) totalRequestsThrottled / getTotalNumberOfRequests()) * HUNDRED;
for (Map.Entry<String, AbfsBackoffMetrics> entry : metricsMap.entrySet()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is going to blow up if you used the string constructor.

  • consider adding a unit test calling .toString() immediately after creating the object.
  • if you use IOStatistics, as I've proposed, you can just use ioStatisticsToString to print these things

metricString.append("$RCTSI$_").append(entry.getKey())
.append("R_").append("=")
.append(entry.getValue().getNumberOfRequestsSucceeded());
long totalRequests = entry.getValue().getTotalRequests();
if (totalRequests > 0) {
metricString.append("$MMA$_").append(entry.getKey())
.append("R_").append("=")
.append(String.format("%.3f",
(double) entry.getValue().getMinBackoff() / THOUSAND))
.append("s")
.append(String.format("%.3f",
(double) entry.getValue().getMaxBackoff() / THOUSAND))
.append("s")
.append(String.format("%.3f",
((double) entry.getValue().getTotalBackoff() / totalRequests)
/ THOUSAND))
.append("s");
} else {
metricString.append("$MMA$_").append(entry.getKey())
.append("R_").append("=0s");
}
}
metricString.append("$BWT=")
.append(getNumberOfBandwidthThrottledRequests())
.append("$IT=")
.append(getNumberOfIOPSThrottledRequests())
.append("$OT=")
.append(getNumberOfOtherThrottledRequests())
.append("$RT=")
.append(String.format("%.3f", percentageOfRequestsThrottled))
.append("$NFR=")
.append(getNumberOfNetworkFailedRequests())
.append("$TRNR=")
.append(getNumberOfRequestsSucceededWithoutRetrying())
.append("$TRF=")
.append(getNumberOfRequestsFailed())
.append("$TR=")
.append(getTotalNumberOfRequests())
.append("$MRC=")
.append(getMaxRetryCount());

return metricString + "";
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.lang.reflect.Field;

import org.apache.hadoop.classification.VisibleForTesting;
import org.apache.hadoop.fs.azurebfs.utils.MetricFormat;
import org.apache.hadoop.util.Preconditions;

import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -291,6 +292,26 @@ public class AbfsConfiguration{
DefaultValue = DEFAULT_ENABLE_AUTOTHROTTLING)
private boolean enableAutoThrottling;

@IntegerConfigurationValidatorAnnotation(ConfigurationKey = FS_AZURE_METRIC_IDLE_TIMEOUT,
DefaultValue = DEFAULT_METRIC_IDLE_TIMEOUT_MS)
private int metricIdleTimeout;

@IntegerConfigurationValidatorAnnotation(ConfigurationKey = FS_AZURE_METRIC_ANALYSIS_TIMEOUT,
DefaultValue = DEFAULT_METRIC_ANALYSIS_TIMEOUT_MS)
private int metricAnalysisTimeout;

@StringConfigurationValidatorAnnotation(ConfigurationKey = FS_AZURE_METRIC_URI,
DefaultValue = EMPTY_STRING)
private String metricUri;

@StringConfigurationValidatorAnnotation(ConfigurationKey = FS_AZURE_METRIC_ACCOUNT_NAME,
DefaultValue = EMPTY_STRING)
private String metricAccount;

@StringConfigurationValidatorAnnotation(ConfigurationKey = FS_AZURE_METRIC_ACCOUNT_KEY,
DefaultValue = EMPTY_STRING)
private String metricAccountKey;

@IntegerConfigurationValidatorAnnotation(ConfigurationKey = FS_AZURE_ACCOUNT_OPERATION_IDLE_TIMEOUT,
DefaultValue = DEFAULT_ACCOUNT_OPERATION_IDLE_TIMEOUT_MS)
private int accountOperationIdleTimeout;
Expand Down Expand Up @@ -818,6 +839,26 @@ public boolean isAutoThrottlingEnabled() {
return this.enableAutoThrottling;
}

public int getMetricIdleTimeout() {
return this.metricIdleTimeout;
}

public int getMetricAnalysisTimeout() {
return this.metricAnalysisTimeout;
}

public String getMetricUri() {
return metricUri;
}

public String getMetricAccount() {
return metricAccount;
}

public String getMetricAccountKey() {
return metricAccountKey;
}

public int getAccountOperationIdleTimeout() {
return accountOperationIdleTimeout;
}
Expand Down Expand Up @@ -854,6 +895,10 @@ public TracingHeaderFormat getTracingHeaderFormat() {
return getEnum(FS_AZURE_TRACINGHEADER_FORMAT, TracingHeaderFormat.ALL_ID_FORMAT);
}

public MetricFormat getMetricFormat() {
return getEnum(FS_AZURE_METRIC_FORMAT, MetricFormat.EMPTY);
}

public AuthType getAuthType(String accountName) {
return getEnum(FS_AZURE_ACCOUNT_AUTH_TYPE_PROPERTY_NAME, AuthType.SharedKey);
}
Expand Down
Loading