5454import java .util .Set ;
5555import java .util .concurrent .ConcurrentHashMap ;
5656import java .util .concurrent .atomic .AtomicBoolean ;
57- import java .util .concurrent .atomic .AtomicReference ;
5857
5958import static org .elasticsearch .ingest .geoip .GeoIpDownloader .DATABASES_INDEX ;
6059import static org .elasticsearch .ingest .geoip .GeoIpDownloader .GEOIP_DOWNLOADER ;
@@ -105,9 +104,9 @@ public final class GeoIpDownloaderTaskExecutor extends PersistentTasksExecutor<G
105104 private volatile TimeValue pollInterval ;
106105 private volatile boolean eagerDownload ;
107106
108- private final ConcurrentHashMap <ProjectId , AtomicBoolean > atLeastOneGeoipProcessorByProject = new ConcurrentHashMap <>();
107+ private final ConcurrentHashMap <ProjectId , Boolean > atLeastOneGeoipProcessorByProject = new ConcurrentHashMap <>();
109108 private final ConcurrentHashMap <ProjectId , AtomicBoolean > taskIsBootstrappedByProject = new ConcurrentHashMap <>();
110- private final ConcurrentHashMap <ProjectId , AtomicReference < GeoIpDownloader > > tasks = new ConcurrentHashMap <>();
109+ private final ConcurrentHashMap <ProjectId , GeoIpDownloader > tasks = new ConcurrentHashMap <>();
111110 private final ProjectResolver projectResolver ;
112111
113112 GeoIpDownloaderTaskExecutor (
@@ -178,16 +177,10 @@ private void setPollInterval(TimeValue pollInterval) {
178177
179178 @ Override
180179 protected void nodeOperation (AllocatedPersistentTask task , GeoIpTaskParams params , PersistentTaskState state ) {
181- logger .info ("Executing node operation for GeoIpDownloader task id [{}] for project [{}]" , task .getId (), task .getProjectId ());
182-
183180 GeoIpDownloader downloader = (GeoIpDownloader ) task ;
184181 GeoIpTaskState geoIpTaskState = (state == null ) ? GeoIpTaskState .EMPTY : (GeoIpTaskState ) state ;
185182 downloader .setState (geoIpTaskState );
186- AtomicReference <GeoIpDownloader > downloaderReference = tasks .computeIfAbsent (
187- projectResolver .getProjectId (),
188- k -> new AtomicReference <>()
189- );
190- downloaderReference .set (downloader );
183+ tasks .put (projectResolver .getProjectId (), downloader );
191184 if (ENABLED_SETTING .get (clusterService .state ().metadata ().settings (), settings )) {
192185 downloader .runDownloader ();
193186 }
@@ -217,7 +210,7 @@ protected GeoIpDownloader createTask(
217210 headers ,
218211 () -> pollInterval ,
219212 () -> eagerDownload ,
220- () -> atLeastOneGeoipProcessorByProject .get (projectId ) != null && atLeastOneGeoipProcessorByProject . get ( projectId ). get ( ),
213+ () -> atLeastOneGeoipProcessorByProject .getOrDefault (projectId , false ),
221214 projectId ,
222215 projectResolver
223216 );
@@ -275,18 +268,18 @@ public void clusterChanged(ClusterChangedEvent event) {
275268 if (hasIngestPipelineChanges || hasIndicesChanges ) {
276269 var atLeastOneGeoipProcessor = atLeastOneGeoipProcessorByProject .computeIfAbsent (
277270 projectId ,
278- k -> new AtomicBoolean ( false )
271+ k -> false
279272 );
280273 boolean newAtLeastOneGeoipProcessor = hasAtLeastOneGeoipProcessor (projectMetadata );
281274
282- if (newAtLeastOneGeoipProcessor && atLeastOneGeoipProcessor . get () == false ) {
275+ if (newAtLeastOneGeoipProcessor && atLeastOneGeoipProcessor == false ) {
283276 logger .trace ("Scheduling runDownloader for project [{}] because a geoip processor has been added" , projectId );
284277 GeoIpDownloader currentDownloader = getTask (projectId );
285278 if (currentDownloader != null ) {
286279 currentDownloader .requestReschedule ();
287280 }
288281 }
289- atLeastOneGeoipProcessor . set ( newAtLeastOneGeoipProcessor );
282+ atLeastOneGeoipProcessorByProject . put ( projectId , newAtLeastOneGeoipProcessor );
290283 }
291284 });
292285 }
@@ -463,6 +456,8 @@ private void stopTask(Runnable onFailure) {
463456 client .admin ().indices ().prepareDelete (databasesIndex .getName ()).execute (ActionListener .wrap (rr -> {
464457 // remove task reference in the map so it can be garbage collected
465458 tasks .remove (projectId );
459+ taskIsBootstrappedByProject .remove (projectId );
460+ atLeastOneGeoipProcessorByProject .remove (projectId );
466461 }, e -> {
467462 Throwable t = e instanceof RemoteTransportException ? ExceptionsHelper .unwrapCause (e ) : e ;
468463 if (t instanceof ResourceNotFoundException == false ) {
@@ -475,11 +470,7 @@ private void stopTask(Runnable onFailure) {
475470 }
476471
477472 public GeoIpDownloader getTask (ProjectId projectId ) {
478- var taskReference = tasks .get (projectId );
479- if (taskReference != null ) {
480- return taskReference .get ();
481- }
482- return null ;
473+ return tasks .get (projectId );
483474 }
484475
485476 public static String getTaskId (ProjectId projectId , boolean supportsMultipleProjects ) {
0 commit comments