FusionAuth неполный переиндексация с AWS Elasticsearch - PullRequest
0 голосов
/ 18 февраля 2020

Я выполняю миграцию с поиска Elasticsearch FusionAuth, размещенного в собственной системе, на решение AWS Elasticsearch Service.

У меня есть новое чтение экземпляра EC2 приложения FusionAuth из используемой базы данных, настроенное для использования новой службы Elasticsearch.

При запуске переиндексации из нового экземпляра приложения я вижу, что только около 60 тыс. Или 62,5 тыс. Документов записываются в новый индекс, когда я ожидаю примерно 6 млн.

Я не вижу ошибок от Elasticsearch Service AWS и в журналах приложения я вижу: (конечная точка намеренно опущена)

Feb 13, 2020 10:18:46.116 AM INFO  io.fusionauth.api.service.search.ElasticSearchClientProvider - Connecting to FusionAuth Search Engine at [https://vpc-<<omitted>>.eu-west-1.es.amazonaws.com]
13-Feb-2020 11:19:55.176 INFO [http-nio-9011-exec-3] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
        java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
                at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:430)
                at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)
                at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
                at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
                at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
"/usr/local/fusionauth/logs/fusionauth-app.log" [readonly] 43708L, 4308629C                                                                                                                                                                                                                                                                               42183,1       96%
        at io.fusionauth.api.service.search.client.domain.documents.IndexUser.<init>(IndexUser.java:79)
        at io.fusionauth.api.service.search.ElasticsearchSearchEngine.lambda$index$1(ElasticsearchSearchEngine.java:140)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at io.fusionauth.api.service.search.ElasticsearchSearchEngine.index(ElasticsearchSearchEngine.java:140)
        at io.fusionauth.api.service.user.ReindexRunner$ReindexWorker.run(ReindexRunner.java:101)
        at java.lang.Thread.run(Thread.java:748)
Exception in thread "Thread-14" java.lang.NullPointerException
        at io.fusionauth.api.service.search.client.domain.documents.IndexUser.<init>(IndexUser.java:79)
        at io.fusionauth.api.service.search.ElasticsearchSearchEngine.lambda$index$1(ElasticsearchSearchEngine.java:140)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at io.fusionauth.api.service.search.ElasticsearchSearchEngine.index(ElasticsearchSearchEngine.java:140)
        at io.fusionauth.api.service.user.ReindexRunner$ReindexWorker.run(ReindexRunner.java:101)
        at java.lang.Thread.run(Thread.java:748)
Exception in thread "Thread-13" java.lang.NullPointerException
Exception in thread "Thread-11" java.lang.NullPointerException
Exception in thread "Thread-12" java.lang.NullPointerException
Feb 18, 2020 10:23:29.064 AM INFO  io.fusionauth.api.service.user.ReindexRunner - Reindex completed in [86797] ms or [86] seconds.

Несмотря на некоторые исключения, в конце также есть журнал INFO "Reindex complete".

Не зная подробности Elasticsearch, я также не уверен, с чего начать расследование NullPointerException.

1 Ответ

0 голосов
/ 18 февраля 2020

Похоже, что операция переиндексации принимает исключение, которое, вероятно, является причиной усеченного индекса.

Exception in thread "Thread-14" java.lang.NullPointerException
        at io.fusionauth.api.service.search.client.domain.documents.IndexUser.<init>(IndexUser.java:79)

Этот код предполагает, что у вас есть имя пользователя или адрес электронной почты. Это должно выполняться API-интерфейсами FusionAuth. Но в этом случае для возникновения этого исключения оба адреса электронной почты и имя пользователя NULL.

Как вы попали в базу данных, используя API импорта, API пользователя или что-то еще?

Теоретически вы должны найти хотя бы одного пользователя со значением NULL для электронной почты и имени пользователя.

Этот запрос - или аналогичный - должен найти пользователя-нарушителя, тогда нам нужно определить, как этот пользователь был добавлен в FusionAuth.

SELECT email, username from identities WHERE email IS NULL OR username IS NULL
...