Получение «коллекция уже существует» в журнале Solr при создании коллекции через код java - PullRequest
0 голосов
/ 05 августа 2020

У меня 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...