in crossdc-producer/src/main/java/org/apache/solr/update/processor/MirroringUpdateProcessor.java [236:264]
boolean isLeader(SolrQueryRequest req, String id, String route, SolrInputDocument doc) {
CloudDescriptor cloudDesc =
req.getCore().getCoreDescriptor().getCloudDescriptor();
String collection = cloudDesc.getCollectionName();
ClusterState clusterState =
req.getCore().getCoreContainer().getZkController().getClusterState();
DocCollection coll = clusterState.getCollection(collection);
Slice slice = coll.getRouter().getTargetSlice(id, doc, route, req.getParams(), coll);
if (slice == null) {
// No slice found. Most strict routers will have already thrown an exception, so a null return is
// a signal to use the slice of this core.
// TODO: what if this core is not in the targeted collection?
String shardId = cloudDesc.getShardId();
slice = coll.getSlice(shardId);
if (slice == null) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No shard " + shardId + " in " + coll);
}
}
String shardId = slice.getName();
Replica leaderReplica = null;
try {
leaderReplica = req.getCore().getCoreContainer().getZkController().getZkStateReader().getLeaderRetry(collection, shardId);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
}
return leaderReplica.getName().equals(cloudDesc.getCoreNodeName());
}