Hi Solr people, I am writing a custom UpdateProcessor, part of a custom plugin, and need to run some code only on the shard leader. This is a plugin, so I cannot access the DistributedUpdateProcessor.isLeader() method which is not public. For now I am copying-pasting the below code, but I am thinking there's got to be a better way to do it. private boolean getIsLeader() { final boolean isZkAware = req.getCore().getCoreContainer().isZooKeeperAware(); if (!isZkAware) { return getNonZkLeaderAssumption(req); } String shardId = cloudDesc.getShardId(); try { Replica leaderReplica = zkController.getZkStateReader().getLeaderRetry(collection, shardId); return leaderReplica.getName().equals(cloudDesc.getCoreNodeName()); } catch (InterruptedException e) { throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, “Error TODO", e); } } I think there is also another way to do it using cloudDesc.isLeader() but my understanding, if I am not wrong, is that the first code gives the most accurate state. Am I right? Is this the only way to get the most accurate state about the current leader?
Also, should I run it every time I need to check the current status as the leader can change anytime? What's the impact in terms of performance? Thank you for your help in advance. Lamine