Couchbase Server KV Error: "EINVAL" on null Upsert
Couchbase Server KV Error: "EINVAL" on null Upsert
我有一个 Couchbase 文档,我想使用服务器版本 6.6.0、CouchbaseNetClient 3.0.5、Couchbase.Extensions.DependencyInjection 3.0.4.811 进行变异。
文件:
{
"name": "First Last",
"email": null
}
变异代码:
var bucket = await _bucketProvider.GetBucketAsync();
await bucket.DefaultCollection().MutateInAsync(updatedProfile.Id, new[]
{
MutateInSpec.Upsert("name", updatedProfile.Name),
MutateInSpec.Upsert("email", updatedProfile.Email)
});
当新的电子邮件值为空时,出现以下错误:
KV Error: {Name="EINVAL", Description="Invalid packet",
Attributes="internal,invalid-input"}
这似乎是一个错误,不幸的是我无法在 GitHub 上向 .NET 客户端的存储库提交问题。
我在这里找到了一个类似的 post Couchbase 无法在多个具有空值的更新插入中进行 Mutate
,但即使我只更新一个值,它仍然不会变为 null。
任何帮助将不胜感激。
注意:以下是重现问题的示例片段。
class Program
{
private static ICluster _cluster;
static async Task Main(string[] args)
{
var userInfo = new
{
Name = "User1",
Email = (string)null // *** This is causing the exception. ***
};
_cluster = await Cluster.ConnectAsync("couchbase://localhost", "Administrator", "Password");
var bucket = await _cluster.BucketAsync("items");
await bucket.DefaultCollection().MutateInAsync("doc1", new[]
{
MutateInSpec.Upsert("name", userInfo.Name),
MutateInSpec.Upsert("email", userInfo.Email) // *** Setting the null value ***
});
_cluster.Dispose();
}
}
编辑: Couchbase Jira 问题 - https://issues.couchbase.com/browse/NCBC-2640
更新:这似乎是一个错误 - https://issues.couchbase.com/browse/NCBC-2640
我刚刚使用最新版本的 .NET SDK (3.0.5, just released today) 进行了尝试,它可以正常工作,没有错误。我首先手动创建了您的示例文档。然后我 运行 在控制台应用程序中这样做:
class Program
{
private static ICluster _cluster;
static async Task Main(string[] args)
{
_cluster = await Cluster.ConnectAsync("couchbase://localhost", "Administrator", "password");
var bucket = await _cluster.BucketAsync("bucket");
var result = await bucket.DefaultCollection().MutateInAsync("doc1", new[]
{
MutateInSpec.Upsert("name", "new name"),
MutateInSpec.Upsert("email", "new email") // this works fine, but `default(string)` instead of "new email" causes an exception
});
_cluster.Dispose();
}
}
在不知道您使用的是哪个版本的 SDK 的情况下,我推测这是一个已修复的错误。
另一种可能性:我注意到 _bucketProvider
的使用。 Couchbase.Extensions.DependencyInjection
库可能默认使用旧版本的 SDK,因此请记住,您可以 add/update 两个库分别使用 NuGet。 (同样,只是推测您可能使用的是什么版本)。
这已被 Couchbase 团队确定为一个错误。您可以在此处关注进度 - https://issues.couchbase.com/browse/NCBC-2640
我有一个 Couchbase 文档,我想使用服务器版本 6.6.0、CouchbaseNetClient 3.0.5、Couchbase.Extensions.DependencyInjection 3.0.4.811 进行变异。
文件:
{
"name": "First Last",
"email": null
}
变异代码:
var bucket = await _bucketProvider.GetBucketAsync();
await bucket.DefaultCollection().MutateInAsync(updatedProfile.Id, new[]
{
MutateInSpec.Upsert("name", updatedProfile.Name),
MutateInSpec.Upsert("email", updatedProfile.Email)
});
当新的电子邮件值为空时,出现以下错误:
KV Error: {Name="EINVAL", Description="Invalid packet", Attributes="internal,invalid-input"}
这似乎是一个错误,不幸的是我无法在 GitHub 上向 .NET 客户端的存储库提交问题。
我在这里找到了一个类似的 post Couchbase 无法在多个具有空值的更新插入中进行 Mutate ,但即使我只更新一个值,它仍然不会变为 null。
任何帮助将不胜感激。
注意:以下是重现问题的示例片段。
class Program
{
private static ICluster _cluster;
static async Task Main(string[] args)
{
var userInfo = new
{
Name = "User1",
Email = (string)null // *** This is causing the exception. ***
};
_cluster = await Cluster.ConnectAsync("couchbase://localhost", "Administrator", "Password");
var bucket = await _cluster.BucketAsync("items");
await bucket.DefaultCollection().MutateInAsync("doc1", new[]
{
MutateInSpec.Upsert("name", userInfo.Name),
MutateInSpec.Upsert("email", userInfo.Email) // *** Setting the null value ***
});
_cluster.Dispose();
}
}
编辑: Couchbase Jira 问题 - https://issues.couchbase.com/browse/NCBC-2640
更新:这似乎是一个错误 - https://issues.couchbase.com/browse/NCBC-2640
我刚刚使用最新版本的 .NET SDK (3.0.5, just released today) 进行了尝试,它可以正常工作,没有错误。我首先手动创建了您的示例文档。然后我 运行 在控制台应用程序中这样做:
class Program
{
private static ICluster _cluster;
static async Task Main(string[] args)
{
_cluster = await Cluster.ConnectAsync("couchbase://localhost", "Administrator", "password");
var bucket = await _cluster.BucketAsync("bucket");
var result = await bucket.DefaultCollection().MutateInAsync("doc1", new[]
{
MutateInSpec.Upsert("name", "new name"),
MutateInSpec.Upsert("email", "new email") // this works fine, but `default(string)` instead of "new email" causes an exception
});
_cluster.Dispose();
}
}
在不知道您使用的是哪个版本的 SDK 的情况下,我推测这是一个已修复的错误。
另一种可能性:我注意到 _bucketProvider
的使用。 Couchbase.Extensions.DependencyInjection
库可能默认使用旧版本的 SDK,因此请记住,您可以 add/update 两个库分别使用 NuGet。 (同样,只是推测您可能使用的是什么版本)。
这已被 Couchbase 团队确定为一个错误。您可以在此处关注进度 - https://issues.couchbase.com/browse/NCBC-2640