У меня 8 серверов solr (версия 8.2.0) и 5 серверов ZooKeepers (версия 3.4.14) в моем проекте.
Я создаю коллекции solr программно, используя весеннюю загрузку и запускаю некоторые бэкэнд-логи c . Я запускаю этот весенний загрузочный код по расписанию, используя воздушный поток 5 раз в день. За день имя коллекции уникально, например, «name_20200805» для всех 5 расписаний в день. Итак, при первом запуске расписания, когда создается коллекция, я получаю следующую ошибку, даже если коллекция создается впервые в этот день. Если коллекция уже существует, я пропускаю создание коллекции для других 4 расписаний в день.
расписание для воздушного потока - airflow_dag 0 2,4,6,8,10 * * *
. это расписание - время PDT. Spring boot jar запускается в блоках данных.
метод, использованный для создания коллекции:
boolean doProcess(Record record) {
Record outputRecord = record.copy();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYYMMdd");
String newCollectionName = "name"+ "_" + LocalDate.now().format(formatter);
CloudSolrClient solr = new CloudSolrClient.Builder(zkHost, Optional.empty()).build();
List<String> currentCollections = currentCollections(solr);
if(!currentCollections.contains(newCollectionName)) {
if (createTimestampedCollection(newCollectionName, solr)) {
//some code here
}
}
outputRecord.put("solrCollection", newCollectionName);
try {
solr.close();
} catch (IOException e) {
e.printStackTrace();
}
return super.doProcess(outputRecord);
}
boolean createTimestampedCollection(String newCollectionName, CloudSolrClient solr) {
final CollectionAdminRequest.Create createCollection = CollectionAdminRequest.Create.createCollection(newCollectionName, configSet, numShards, numReplicas);
createCollection.setBasicAuthCredentials(username, password);
createCollection.setMaxShardsPerNode(numReplicas);
CollectionAdminResponse adminResponse = null;
try {
adminResponse = createCollection.process(solr);
} catch (SolrServerException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
Может ли кто-нибудь помочь мне исправить следующую проблему
Collection: name_20200805 operation: create failed:org.apache.solr.common.SolrException: collection already exists: name_20200805
at org.apache.solr.cloud.api.collections.CreateCollectionCmd.call(CreateCollectionCmd.java:116)
at org.apache.solr.cloud.api.collections.OverseerCollectionMessageHandler.processMessage(OverseerCollectionMessageHandler.java:264)
at org.apache.solr.cloud.OverseerTaskProcessor$Runner.run(OverseerTaskProcessor.java:505)
at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0(ExecutorUtil.java:209)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)