@@ -104,6 +104,9 @@ public final class DatabaseNodeService implements IpDatabaseProvider {
104
104
private final ClusterService clusterService ;
105
105
private IngestService ingestService ;
106
106
107
+ // this reference is set and updated in checkDatabases below
108
+ private volatile GeoIpTaskState taskState = GeoIpTaskState .EMPTY ;
109
+
107
110
private final ConcurrentMap <String , DatabaseReaderLazyLoader > databases = new ConcurrentHashMap <>();
108
111
109
112
DatabaseNodeService (
@@ -185,12 +188,13 @@ public Boolean isValid(String databaseFile) {
185
188
ClusterState currentState = clusterService .state ();
186
189
assert currentState != null ;
187
190
188
- GeoIpTaskState state = getGeoIpTaskState (currentState );
189
- if (state == null ) {
191
+ if (taskState == null ) {
190
192
return true ;
191
193
}
192
194
193
- GeoIpTaskState .Metadata metadata = state .getDatabases ().get (databaseFile );
195
+ // use the cached taskState reference to figure out if this database is valid
196
+ GeoIpTaskState .Metadata metadata = taskState .getDatabases ().get (databaseFile );
197
+
194
198
// we never remove metadata from cluster state, if metadata is null we deal with built-in database, which is always valid
195
199
if (metadata == null ) {
196
200
return true ;
@@ -298,6 +302,9 @@ void checkDatabases(ClusterState state) {
298
302
// Note: an empty state will purge stale entries in databases map
299
303
taskState = GeoIpTaskState .EMPTY ;
300
304
}
305
+ // update the cached taskState reference to reflect this current information for future isValid checks
306
+ this .taskState = taskState ;
307
+
301
308
validMetadatas .addAll (
302
309
taskState .getDatabases ()
303
310
.entrySet ()
0 commit comments