Spring Boot + Hibernate Search: необходимый индексный статус игнорируется? - PullRequest
0 голосов
/ 31 января 2020

Подключив Hibernate Search к Elasticsearch, я заметил, что при развертывании одной не ES, моя служба не сможет подключиться успешно. Мне кажется, переменная окружения для установки required_index_status игнорируется. Я ищу опечатку или что-то подобное уже полчаса, но ничего не могу найти.

pom. xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
</parent>
...
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search</artifactId>
    <version>5.11.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search-elasticsearch</artifactId>
    <version>5.11.0.Final</version>
</dependency>

application.yml

spring: 
  data:
    rest:
      basePath: /
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: false

Переменные среды:

$ kubectl describe pod <NAME>

Environment:
  ...
  SPRING_JPA_PROPERTIES_HIBERNATE_SEARCH_DEFAULT_INDEXMANAGER:                         elasticsearch
  SPRING_JPA_PROPERTIES_HIBERNATE_SEARCH_DEFAULT_ELASTICSEARCH_HOST:                   elasticsearch
  SPRING_JPA_PROPERTIES_HIBERNATE_SEARCH_DEFAULT_ELASTICSEARCH_REQUIRED_INDEX_STATUS:  yellow

Сообщение в журнале 1:

Caused by: org.hibernate.search.exception.SearchException: HSEARCH400024: Timed out while waiting for for index 'myindex' to reach status 'green'; status was still 'yellow' after 10000ms.

Сообщение в журнале 2:

Caused by: org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
Request: GET /_cluster/health/myindex with parameters {wait_for_status=green, timeout=10000ms}
Response: 408 'Request Timeout' with body
{
  "cluster_name": "my-elastic-cluster",
  "status": "yellow",
  "timed_out": true,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 5,
  "active_shards": 5,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 5,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50.0
}

Мы ясно видим, что это ожидание статуса «зеленый» вместо «желтый».

1 Ответ

0 голосов
/ 31 января 2020

Я считаю, что ваша переменная окружения SPRING_JPA_PROPERTIES_HIBERNATE_SEARCH_DEFAULT_ELASTICSEARCH_REQUIRED_INDEX_STATUS переводится в spring.jpa.properties.hibernate.search.default.elasticsearch.required.index.status, тогда как она должна быть переведена в spring.jpa.properties.hibernate.search.default.elasticsearch.required_index_status (обратите внимание на подчеркивание в конце).

Я не знаю, как переводит Spring имена переменных среды точно, но должен быть способ избежать подчеркивания. Может быть, двойное подчеркивание? Вам, вероятно, стоит взглянуть на их документацию.

В худшем случае вы можете установить spring.jpa.properties.hibernate.search.default.elasticsearch.required_index_status для пользовательской переменной среды в application.properties и установить эту переменную среды вместо того, что вы сделали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...