@@ -110,7 +110,10 @@ class ForceResumeCoordinator(
110110
111111 val shards = clusterService.state().routingTable
112112 .indicesRouting().get(params.followerIndexName)?.shards()
113- ? : return
113+ if (shards == null ) {
114+ log.warn(" No routing table found for follower index ${params.followerIndexName} , skipping lease acquisition" )
115+ return
116+ }
114117
115118 shards.forEach { entry ->
116119 val followerShardId = entry.value.shardId
@@ -141,7 +144,7 @@ class ForceResumeCoordinator(
141144 return statsResponse.shards
142145 .firstOrNull { it.shardRouting.shardId().id == shardId && it.shardRouting.primary() }
143146 ?.seqNoStats?.globalCheckpoint
144- ? : throw IllegalStateException (" Primary shard $shardId not found for leader index $leaderIndexName " )
147+ ? : throw IllegalStateException (" Primary shard $shardId not found or seqNoStats unavailable for leader index $leaderIndexName " )
145148 }
146149
147150 /* *
@@ -173,10 +176,13 @@ class ForceResumeCoordinator(
173176 remoteClient
174177 )
175178 for (shardIdInt in acquiredLeases.keys) {
176- val followerShardId = ShardId (
177- clusterService.state().metadata.index(params.followerIndexName)?.index ? : continue ,
178- shardIdInt
179- )
179+ val indexMetadata = clusterService.state().metadata.index(params.followerIndexName)
180+ if (indexMetadata == null ) {
181+ log.warn(" Follower index ${params.followerIndexName} not found in metadata during cleanup. " +
182+ " Retention leases on leader may be orphaned for shard $shardIdInt ." )
183+ continue
184+ }
185+ val followerShardId = ShardId (indexMetadata.index, shardIdInt)
180186 retentionLeaseHelper.attemptRetentionLeaseRemoval(ShardId (params.leaderIndex, shardIdInt), followerShardId)
181187 }
182188 } catch (e: Exception ) {
0 commit comments