mirror of https://github.com/apache/lucene.git
SOLR-9323: Expose ClusterSate.getCollectionStates which returns unverified list of collection names
This commit is contained in:
parent
f8a99dc3c3
commit
0ad365cbd0
|
@ -1514,9 +1514,9 @@ public class SQLHandler extends RequestHandlerBase implements SolrCoreAware , Pe
|
|||
CloudSolrClient cloudSolrClient = this.context.getSolrClientCache().getCloudSolrClient(this.zkHost);
|
||||
cloudSolrClient.connect();
|
||||
ZkStateReader zkStateReader = cloudSolrClient.getZkStateReader();
|
||||
Map<String, DocCollection> collections = zkStateReader.getClusterState().getCollectionsMap();
|
||||
Set<String> collections = zkStateReader.getClusterState().getCollectionStates().keySet();
|
||||
if (collections.size() != 0) {
|
||||
this.tables.addAll(collections.keySet());
|
||||
this.tables.addAll(collections);
|
||||
}
|
||||
Collections.sort(this.tables);
|
||||
}
|
||||
|
|
|
@ -352,6 +352,16 @@ public class CloudSolrStream extends TupleStream implements Expressible {
|
|||
}
|
||||
}
|
||||
|
||||
public static Collection<Slice> getSlicesIgnoreCase(String name, ClusterState clusterState) {
|
||||
for (String coll : clusterState.getCollectionStates().keySet()) {
|
||||
if (coll.equalsIgnoreCase(name)) {
|
||||
DocCollection collection = clusterState.getCollectionOrNull(coll);
|
||||
if (collection != null) return collection.getActiveSlices();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void constructStreams() throws IOException {
|
||||
|
||||
try {
|
||||
|
@ -362,20 +372,9 @@ public class CloudSolrStream extends TupleStream implements Expressible {
|
|||
//System.out.println("Connected to zk an got cluster state.");
|
||||
|
||||
Collection<Slice> slices = clusterState.getActiveSlices(this.collection);
|
||||
|
||||
if (slices == null) slices = getSlicesIgnoreCase(this.collection, clusterState);
|
||||
if (slices == null) {
|
||||
//Try case insensitive match
|
||||
Map<String, DocCollection> collectionsMap = clusterState.getCollectionsMap();
|
||||
for (Map.Entry<String, DocCollection> entry : collectionsMap.entrySet()) {
|
||||
if (entry.getKey().equalsIgnoreCase(collection)) {
|
||||
slices = entry.getValue().getActiveSlices();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (slices == null) {
|
||||
throw new Exception("Collection not found:" + this.collection);
|
||||
}
|
||||
throw new Exception("Collection not found:" + this.collection);
|
||||
}
|
||||
|
||||
ModifiableSolrParams mParams = new ModifiableSolrParams(params);
|
||||
|
|
|
@ -519,20 +519,9 @@ public class TopicStream extends CloudSolrStream implements Expressible {
|
|||
//System.out.println("Connected to zk an got cluster state.");
|
||||
|
||||
Collection<Slice> slices = clusterState.getActiveSlices(this.collection);
|
||||
|
||||
if (slices == null) slices = getSlicesIgnoreCase(this.collection, clusterState);
|
||||
if (slices == null) {
|
||||
//Try case insensitive match
|
||||
Map<String, DocCollection> collectionsMap = clusterState.getCollectionsMap();
|
||||
for (Map.Entry<String, DocCollection> entry : collectionsMap.entrySet()) {
|
||||
if (entry.getKey().equalsIgnoreCase(collection)) {
|
||||
slices = entry.getValue().getActiveSlices();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (slices == null) {
|
||||
throw new Exception("Collection not found:" + this.collection);
|
||||
}
|
||||
throw new Exception("Collection not found:" + this.collection);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -39,8 +39,8 @@ import org.noggit.JSONWriter;
|
|||
public class ClusterState implements JSONWriter.Writable {
|
||||
|
||||
private final Integer znodeVersion;
|
||||
|
||||
private final Map<String, CollectionRef> collectionStates;
|
||||
|
||||
private final Map<String, CollectionRef> collectionStates, immutableCollectionStates;
|
||||
private Set<String> liveNodes;
|
||||
|
||||
/**
|
||||
|
@ -67,6 +67,7 @@ public class ClusterState implements JSONWriter.Writable {
|
|||
this.liveNodes = new HashSet<>(liveNodes.size());
|
||||
this.liveNodes.addAll(liveNodes);
|
||||
this.collectionStates = new LinkedHashMap<>(collectionStates);
|
||||
this.immutableCollectionStates = Collections.unmodifiableMap(collectionStates);
|
||||
}
|
||||
|
||||
|
||||
|
@ -432,10 +433,12 @@ public class ClusterState implements JSONWriter.Writable {
|
|||
this.liveNodes = liveNodes;
|
||||
}
|
||||
|
||||
/**For internal use only
|
||||
/** Be aware that this may return collections which may not exist now.
|
||||
* You can confirm that this collection exists after verifying
|
||||
* CollectionRef.get() != null
|
||||
*/
|
||||
Map<String, CollectionRef> getCollectionStates() {
|
||||
return collectionStates;
|
||||
public Map<String, CollectionRef> getCollectionStates() {
|
||||
return immutableCollectionStates;
|
||||
}
|
||||
|
||||
public static class CollectionRef {
|
||||
|
|
Loading…
Reference in New Issue