35
35
* {@code minIntervalSecsConfigName} seconds apart.
36
36
*/
37
37
@ InterfaceAudience .Private
38
- class RegistryEndpointsRefresher {
38
+ final class RegistryEndpointsRefresher {
39
39
40
40
private static final Logger LOG = LoggerFactory .getLogger (RegistryEndpointsRefresher .class );
41
41
@@ -51,11 +51,7 @@ class RegistryEndpointsRefresher {
51
51
private boolean refreshNow = false ;
52
52
private boolean stopped = false ;
53
53
54
- public void start () {
55
- thread .start ();
56
- }
57
-
58
- public synchronized void stop () {
54
+ synchronized void stop () {
59
55
stopped = true ;
60
56
notifyAll ();
61
57
}
@@ -108,18 +104,15 @@ public interface Refresher {
108
104
void refresh () throws IOException ;
109
105
}
110
106
111
- RegistryEndpointsRefresher (Configuration conf , String intervalSecsConfigName ,
112
- String minIntervalSecsConfigName , Refresher refresher ) {
113
- periodicRefreshMs = TimeUnit .SECONDS
114
- .toMillis (conf .getLong (intervalSecsConfigName , PERIODIC_REFRESH_INTERVAL_SECS_DEFAULT ));
115
- minTimeBetweenRefreshesMs = TimeUnit .SECONDS
116
- .toMillis (conf .getLong (minIntervalSecsConfigName , MIN_SECS_BETWEEN_REFRESHES_DEFAULT ));
117
- Preconditions .checkArgument (periodicRefreshMs > 0 );
118
- Preconditions .checkArgument (minTimeBetweenRefreshesMs < periodicRefreshMs );
107
+ private RegistryEndpointsRefresher (long periodicRefreshMs , long minTimeBetweenRefreshesMs ,
108
+ Refresher refresher ) {
109
+ this .periodicRefreshMs = periodicRefreshMs ;
110
+ this .minTimeBetweenRefreshesMs = minTimeBetweenRefreshesMs ;
111
+ this .refresher = refresher ;
119
112
thread = new Thread (this ::mainLoop );
120
113
thread .setName ("Registry-endpoints-refresh-end-points" );
121
114
thread .setDaemon (true );
122
- this . refresher = refresher ;
115
+ thread . start () ;
123
116
}
124
117
125
118
/**
@@ -130,4 +123,22 @@ synchronized void refreshNow() {
130
123
refreshNow = true ;
131
124
notifyAll ();
132
125
}
126
+
127
+ /**
128
+ * Create a {@link RegistryEndpointsRefresher}. If the interval secs configured via
129
+ * {@code intervalSecsConfigName} is less than zero, will return null here, which means disable
130
+ * refreshing of endpoints.
131
+ */
132
+ static RegistryEndpointsRefresher create (Configuration conf , String intervalSecsConfigName ,
133
+ String minIntervalSecsConfigName , Refresher refresher ) {
134
+ long periodicRefreshMs = TimeUnit .SECONDS
135
+ .toMillis (conf .getLong (intervalSecsConfigName , PERIODIC_REFRESH_INTERVAL_SECS_DEFAULT ));
136
+ if (periodicRefreshMs <= 0 ) {
137
+ return null ;
138
+ }
139
+ long minTimeBetweenRefreshesMs = TimeUnit .SECONDS
140
+ .toMillis (conf .getLong (minIntervalSecsConfigName , MIN_SECS_BETWEEN_REFRESHES_DEFAULT ));
141
+ Preconditions .checkArgument (minTimeBetweenRefreshesMs < periodicRefreshMs );
142
+ return new RegistryEndpointsRefresher (periodicRefreshMs , minTimeBetweenRefreshesMs , refresher );
143
+ }
133
144
}
0 commit comments