Solr облако не может найти плагин - NoClassDefFoundError

Я использую облачный кластер solr и использую пользовательский компонент поиска - https://github.com/cominvent/request-sanitizer-component.

конфигурации:

Server count: 8
Shards: 16
Replication factor: 3
Max shards per node: 6

Я определил поисковый компонент в solrconfig.xml:

<searchComponent runtimeLib="true" name="request-sanitizer" version="1" class="com.cominvent.solr.RequestSanitizerComponent"/>

Я загрузил jar плагина в коллекцию.system, следуя инструкциям руководства по solr.

Затем я добавляю плагин jar в свою коллекцию, используя API-интерфейс конфигурации с этим curl:

curl http://solr-220.soma.plos.org:8983/solr/50_2/config -H 'Content-type:application/json' -d '{
    "add-runtimelib": { "name":"request-sanitizer", "version":1 }
}'

Затем я добавляю поисковый компонент:

curl http://solr-220.soma.plos.org:8983/solr/50_2/config -H 'Content-type:application/json' -d '{
  "add-searchcomponent": {
    "name": "request-sanitizer",
    "runtimeLib": true,
    "class": "com.cominvent.solr.RequestSanitizerComponent",
    "sanitize": "rows=>50:50" }
}'

Плагин jar и поисковый компонент добавляются в configoverlay.json в http://solr-220.soma.plos.org:8983/solr/50_2/config/overlay:

{
  "responseHeader":{
    "status":0,
    "QTime":0},
  "overlay":{
    "znodeVersion":4,
    "runtimeLib":{"request-sanitizer":{
        "name":"request-sanitizer",
        "version":1}},
    "searchComponent":{"request-sanitizer":{
        "name":"request-sanitizer",
        "runtimeLib":true,
        "class":"com.cominvent.solr.RequestSanitizerComponent",
        "sanitize":"rows=>50:50"}}}}

Однако, когда я пытаюсь сделать запрос к коллекции, я получаю следующее исключение:

java.lang.NoClassDefFoundError: org/apache/solr/handler/component/SearchComponent

Что не так с моей конфигурацией?

Заметки

Для первой попытки я поместил банку в SOLR_HOME/lib. Первоначально это работало для кластеров с небольшим количеством сегментов - создание коллекции вызывало бы те же исключения NoClassDefFoundError, но они исчезали после перезапуска сервера.

Однако, когда я увеличил до 8 осколков, создание создало те же исключения, и коллекция так и не была создана. Вот почему я решил использовать API конфигурации, но я бы также принял решение, которое использует SOLR_HOME/lib. Одна из возможностей - заставить коллекцию остаться, даже с многочисленными ошибками запуска, если это возможно.

Спасибо за прочтение!

1 ответ

У нас было два экземпляра баночки с дезинфицирующим средством в пути к классам. Удаление одной из банок решило проблему.

Другие вопросы по тегам