1
15
16 package com.amazonaws.retry.internal;
17
18 import static com.amazonaws.SDKGlobalConfiguration.AWS_RETRY_MODE_ENV_VAR;
19 import static com.amazonaws.SDKGlobalConfiguration.AWS_RETRY_MODE_SYSTEM_PROPERTY;
20
21 import com.amazonaws.annotation.SdkInternalApi;
22 import com.amazonaws.annotation.SdkTestInternalApi;
23 import com.amazonaws.auth.profile.internal.BasicProfile;
24 import com.amazonaws.auth.profile.internal.BasicProfileConfigFileLoader;
25 import com.amazonaws.profile.path.AwsProfileFileLocationProvider;
26 import com.amazonaws.retry.RetryMode;
27
28
37 @SdkInternalApi
38 public final class RetryModeResolver {
39 private static final String PROFILE_PROPERTY = "retry_mode";
40
41 private final BasicProfileConfigFileLoader configFileLoader;
42 private final RetryMode retryMode;
43
44 public RetryModeResolver() {
45 this.configFileLoader = BasicProfileConfigFileLoader.INSTANCE;
46 this.retryMode = resolveRetryMode();
47 }
48
49 @SdkTestInternalApi
50 RetryModeResolver(AwsProfileFileLocationProvider configFileLocationProvider) {
51 this.configFileLoader = new BasicProfileConfigFileLoader(configFileLocationProvider);
52 this.retryMode = resolveRetryMode();
53 }
54
55
58 public RetryMode retryMode() {
59 return retryMode;
60 }
61
62 private RetryMode systemProperty() {
63 return RetryMode.fromName(System.getProperty(AWS_RETRY_MODE_SYSTEM_PROPERTY));
64 }
65
66 private RetryMode envVar() {
67 return RetryMode.fromName(System.getenv(AWS_RETRY_MODE_ENV_VAR));
68
69 }
70
71 private RetryMode resolveRetryMode() {
72 RetryMode mode = envVar();
73
74 if (mode != null) {
75 return mode;
76 }
77
78 mode = systemProperty();
79 if (mode != null) {
80 return mode;
81 }
82
83 mode = profile();
84 if (mode != null) {
85 return mode;
86 }
87
88 return RetryMode.LEGACY;
89 }
90
91 private RetryMode profile() {
92 BasicProfile profile = configFileLoader.getProfile();
93 if (profile == null) {
94 return null;
95 }
96 String val = profile.getPropertyValue(PROFILE_PROPERTY);
97
98 return RetryMode.fromName(val);
99 }
100 }
101