我正在从自托管的Elasticsearch FusionAuth search迁移到AWS Elasticsearch Service解决方案。
我有一个新的FusionAuth应用程序EC2实例正在从正在使用的数据库中读取,该数据库被配置为使用新的Elasticsearch服务。
在从新的应用实例触发重新索引时,我看到只有大约60k或62.5k的文档被写入到新的索引中,而我预期的是大约6mil。
我在AWS的Elasticsearch Service中看不到错误,在应用程序的日志中我可以看到:(有意省略了端点)
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.尽管有一些例外,但在最后也有一个"Reindex completed“信息日志。
由于不了解Elasticsearch的细节,我也不确定从哪里开始研究NullPointerException。
发布于 2020-02-19 01:27:13
看起来重新索引操作正在接受一个异常,这可能是导致索引被截断的原因。
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 NULLhttps://stackoverflow.com/questions/60278858
复制相似问题