Couchbase Server KV错误:在空Upsert上出现“ EINVAL”

问题描述

我有一个要使用服务器版本6.6.0,CouchbaseNetClient 3.0.5,Couchbase.Extensions.DependencyInjection 3.0.4.811进行更改的Couchbase文档。

文档:

{
    "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错误:{Name =“ EINVAL”,Description =“无效的数据包”, Attributes =“ internal,invalid-input”}

这似乎是一个错误,很遗憾,我无法将问题提交到GitHub上的.NET客户端。

我在Couchbase can't MutateIn multiple upserts with null value 处找到了类似的帖子,但是即使我仅更新一个值,它也不会突变为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),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的情况下,我推测这是一个已修复的错误。

另一种可能性:我注意到使用_bucketProviderCouchbase.Extensions.DependencyInjection库在默认情况下可能正在使用旧版本的SDK,因此请记住,您可以使用NuGet分别添加/更新这两个库。 (再次,只是推测您可能使用的版本)。

,

这已被Couchbase团队识别为错误。您可以在此处关注进度-https://issues.couchbase.com/browse/NCBC-2640