elasticsearch - elasticsearch 在 C# Nest 客户端中的 VerifyRepositoryRequest 失败
问题描述
更新到 elasticsearch 7.5.1 后,以下代码现在导致异常“找不到入口点”
//old code worked just fine
var verifyRepositoryResponse = this.elasticClient.VerifyRepository(new VerifyRepositoryRequest("C__MYFOLDER_Backup"));
//new code throws
var verifyRepositoryResponse = this.elasticClient.Snapshot.VerifyRepository(new VerifyRepositoryRequest("C__MYFOLDER_Backup"));
请注意,通过提琴手提出以下请求
POST http://localhost:9200/_snapshot/C__MYFOLDER_Backup/_verify HTTP/1.1
User-Agent: Fiddler
Host: localhost:9200
Content-Type: application/json
Content-Length: 0
返回
{"nodes":{"1cWG9trDRi--6I-46lOlBw":{"name":"DESKTOP-5L01F6I"}}}
任何想法是什么导致了这里的问题?不幸的是,关于这件事的文档为零。
更新:使用不存在的目录作为参数调用代码
var verifyRepositoryResponse = this.elasticClient.Snapshot.VerifyRepository(new VerifyRepositoryRequest("C__DOESNOTEXIST_Backup"));
在这种情况下,我会得到预期的 4xx 响应。在所有测试之前,已清理存储库和数据库。
更新:高级错误信息:
"# FailureReason: Unrecoverable/Unexpected BadResponse while attempting POST on http://localhost:9200/_snapshot/C__MYFOLDER_Backup/_verify\r\n - [1] BadResponse: Node: http://localhost:9200/ Exception: EntryPointNotFoundException Took: 00:00:00.1859931\r\n# Audit
exception in step 1 BadResponse:\r\nSystem.EntryPointNotFoundException: Entry point was not found.\r\n at Elasticsearch.Net.Utf8Json.IJsonFormatter`1.Deserialize(JsonReader& reader, IJsonFormatterResolver formatterResolver)\r\n at Deserialize(Object[] ,
JsonReader& , IJsonFormatterResolver )\r\n at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Byte[] bytes, Int32 offset, IJsonFormatterResolver resolver)\r\n at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Stream stream,
IJsonFormatterResolver resolver)\r\n at Elasticsearch.Net.DiagnosticsSerializerProxy.Deserialize[T](Stream stream)\r\n at Elasticsearch.Net.ResponseBuilder.SetBody[TResponse](ApiCallDetails details, RequestData requestData, Stream responseStream, String
mimeType)\r\n at Elasticsearch.Net.ResponseBuilder.ToResponse[TResponse](RequestData requestData, Exception ex, Nullable`1 statusCode, IEnumerable`1 warnings, Stream responseStream, String mimeType)\r\n at
Elasticsearch.Net.HttpWebRequestConnection.Request[TResponse](RequestData requestData)\r\n at Elasticsearch.Net.RequestPipeline.CallElasticsearch[TResponse](RequestData requestData)\r\n at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method,
String path, PostData data, IRequestParameters requestParameters)\r\n# Inner Exception: Entry point was not found.\r\nSystem.EntryPointNotFoundException: Entry point was not found.\r\n at Elasticsearch.Net.Utf8Json.IJsonFormatter`1.Deserialize(JsonReader&
reader, IJsonFormatterResolver formatterResolver)\r\n at Deserialize(Object[] , JsonReader& , IJsonFormatterResolver )\r\n at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Byte[] bytes, Int32 offset, IJsonFormatterResolver resolver)\r\n at
Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Stream stream, IJsonFormatterResolver resolver)\r\n at Elasticsearch.Net.DiagnosticsSerializerProxy.Deserialize[T](Stream stream)\r\n at
Elasticsearch.Net.ResponseBuilder.SetBody[TResponse](ApiCallDetails details, RequestData requestData, Stream responseStream, String mimeType)\r\n at Elasticsearch.Net.ResponseBuilder.ToResponse[TResponse](RequestData requestData, Exception ex, Nullable`1
statusCode, IEnumerable`1 warnings, Stream responseStream, String mimeType)\r\n at Elasticsearch.Net.HttpWebRequestConnection.Request[TResponse](RequestData requestData)\r\n at Elasticsearch.Net.RequestPipeline.CallElasticsearch[TResponse](RequestData
requestData)\r\n at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method, String path, PostData data, IRequestParameters requestParameters)\r\n# Exception:\r\nElasticsearch.Net.UnexpectedElasticsearchClientException: Entry point was not found. --->
System.EntryPointNotFoundException: Entry point was not found.\r\n at Elasticsearch.Net.Utf8Json.IJsonFormatter`1.Deserialize(JsonReader& reader, IJsonFormatterResolver formatterResolver)\r\n at Deserialize(Object[] , JsonReader& , IJsonFormatterResolver
)\r\n at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Byte[] bytes, Int32 offset, IJsonFormatterResolver resolver)\r\n at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Stream stream, IJsonFormatterResolver resolver)\r\n at
Elasticsearch.Net.DiagnosticsSerializerProxy.Deserialize[T](Stream stream)\r\n at Elasticsearch.Net.ResponseBuilder.SetBody[TResponse](ApiCallDetails details, RequestData requestData, Stream responseStream, String mimeType)\r\n at
Elasticsearch.Net.ResponseBuilder.ToResponse[TResponse](RequestData requestData, Exception ex, Nullable`1 statusCode, IEnumerable`1 warnings, Stream responseStream, String mimeType)\r\n at Elasticsearch.Net.HttpWebRequestConnection.Request[TResponse](RequestData
requestData)\r\n at Elasticsearch.Net.RequestPipeline.CallElasticsearch[TResponse](RequestData requestData)\r\n at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method, String path, PostData data, IRequestParameters requestParameters)\r\n ---
End of inner exception stack trace ---\r\n at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method, String path, PostData data, IRequestParameters requestParameters)\r\n at
Nest.Specification.SnapshotApi.SnapshotNamespace.VerifyRepository(IVerifyRepositoryRequest request)\r\n at InforsHT.Genesis.Infrastructure.Data.Repositories.ElasticBackupAndRestoreProxy.IsBackupLocationPresent(String backupLocation) in
C:\\work\\eve\\Source\\InforsHT.Genesis.Infrastructure.Data\\Repositories\\ElasticBackupAndRestoreProxy.cs:line 44\r\n"
解决方案
这是一个错误。VerifyRepositoryResponse
的Node
属性具有 a 属性,当属性类型为 时JsonFormatterAttribute
,它期望反序列化 a 。这对于使用强类型格式化程序的底层 JSON 序列化程序来说是有问题的,其中类型必须完全匹配。IDictionary<string, CompactNodeInfo>
IReadOnlyDictionary<string, CompactNodeInfo>
IJsonFormatter<T>
T
我已经打开了要跟踪的问题和修复问题的拉取请求。现在,您可以通过使用在高级客户端上公开的低级客户端来解决该错误
var response = client.LowLevel.Snapshot.VerifyRepository<DynamicResponse>("C__MYFOLDER_Backup");
并遍历DynamicResponse
。或者,使用or和 traverse使用StringResponse
和解析。JObject
JsonDocument
推荐阅读
- python - 找出给定数据集中每列中缺失值的百分比
- bash - 使用有限的 EC2 存储同时下载和传输文件
- javascript - 以 html 格式上传图片
- unity3d - Vuforia 在后台停止视频
- r - 如何避免在while循环外编码第一次迭代
- python - 在开发模式下安装烧瓶应用程序
- sql-server - SQL Server BACPAC 导入失败并出现 IDENTITY_INSERT 错误
- java - Json 可以保存对象引用还是只复制值?
- c# - 我尝试使用实体框架更新我的 bd 记录,但它没有更新它(它不标记错误)
- django - Wagtail:是否可以禁用在站点域之前添加内部链接?