Uploaded image for project: 'Couchbase Server'
  1. Couchbase Server
  2. MB-40262

A Sub-Document insertion only specifying XATTR paths no longer creates an empty JSON body

    XMLWordPrintable

Details

    • Triaged
    • 1
    • Yes
    • KV Sprint 2020-June

    Description

      This is a regression that was introduced in MB-40126.

      This Java 3.x code replicates:

      String docId = docId();
       
      coll.mutateIn(docId, Collections.singletonList(
                  upsert("foo", "bar").xattr()
              ),
              mutateInOptions().storeSemantics(StoreSemantics.INSERT));
       
      LookupInResult result = coll.lookupIn(docId, Arrays.asList(
              LookupInSpec.get("foo").xattr(),
              LookupInSpec.get("")
      ));
       
      assertTrue(result.exists(1));
       

      This is a Sub-Document insertion (ADD flag) that's only touching XATTRs, it doesn't specify the body and leaves it at whatever the server defaults to.

      It passes on 6.5.0-4908 but fails on 6.6.0-7857, on the last line.

      So memcached used to create an empty JSON object as the body if none was specified, and now creates the document with a null body instead.

      (This change does seem like an improvement to me, but sadly will break existing released transactional code when running on 6.6.)

      Attachments

        Issue Links

          For Gerrit Dashboard: MB-40262
          # Subject Branch Project Status CR V

          Activity

            People

              graham.pople Graham Pople
              graham.pople Graham Pople
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes

                  PagerDuty