0

我正在从自托管的 Elasticsearch FusionAuth 搜索迁移到 AWS Elasticsearch Service 解决方案。

我有一个新的 FusionAuth 应用程序 EC2 实例,它从配置为使用新的 Elasticsearch 服务的使用中的数据库中读取。

在从新应用实例触发重新索引时,我发现只有大约 60k 或 62.5k 文档被写入新索引,而我预计大约 600 万。

我从 AWS 的 Elasticsearch 服务中看不到任何错误,并且在应用程序的日志中我可以看到:(故意省略端点)

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.

尽管有一些例外,但最后还有一个“重新索引完成”信息日志。

不知道 Elasticsearch 的来龙去脉,我也不知道从哪里开始调查 NullPointerException。

4

1 回答 1

0

看起来重新索引操作正在发生异常,这可能是截断索引的原因。

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

此代码假设您有用户名或电子邮件地址。这应该由 FusionAuth API 强制执行。但在这种情况下,要发生此异常,电子邮件和用户名都是NULL.

您是如何使用 Import API、User API 或其他方式让用户进入数据库的?

从理论上讲,您应该找到至少一个具有NULL电子邮件和用户名值的用户。

这个查询 - 或类似的 - 应该找到有问题的用户,然后我们需要确定这个用户是如何添加到 FusionAuth 中的。

SELECT email, username from identities WHERE email IS NULL OR username IS NULL
于 2020-02-18T17:27:12.557 回答