Uploaded image for project: 'C++ Couchbase Client'
  1. C++ Couchbase Client
  2. CXXCBC-447

Unable to connect to bucket if non-KV node provided in connection string

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Major
    • 1.0.0
    • 1.0.0-dp.12
    • None
    • None
    • 1
    • SDK04: Scope Search

    Description

      I you have a cluster the uses multi-dimensional scaling (i.e. separate services on separate nodes) and the connection string only provides node(s) related to non-KV services, the client will timeout as unable to make a bucket-level connection.

      We see the following in the logs in response to sending SELECT_BUCKET:

      [2024-02-02 11:43:23.472]    0ms [trac] [73272,33262115] [85da90-10b9-b44e-d6e7-634a02fadca82f/26b663-ac25-4844-a088-c43762cec8f7c8/plain/default] <192.168.107.130/192.168.107.130:11210> MCBP recv {magic=0x18, opcode=0x89, fextlen=3, keylen=0, extlen=0, datatype=0, status=1, bodylen=3, opaque=111, cas=0}
      [2024-02-02 11:43:23.472]    0ms [debu] [73272,33262115] [85da90-10b9-b44e-d6e7-634a02fadca82f/26b663-ac25-4844-a088-c43762cec8f7c8/plain/default] <192.168.107.130/192.168.107.130:11210> kv_engine node does not have configuration propagated yet (opcode=select_bucket (0x89), status=not_found (0x01), opaque=111)
      

      Complete log attached ( cxxcbc447_unable_to_connect_cbs722.log ).

      Example from Python (v4.1.11):

      from datetime import timedelta
       
      from couchbase.auth import PasswordAuthenticator
      from couchbase.cluster import Cluster
      from couchbase.diagnostics import ServiceType
      from couchbase.options import (ClusterOptions,
                                     WaitUntilReadyOptions)
       
      auth = PasswordAuthenticator('Administrator', 'password')
      opts = ClusterOptions(auth)
      """
      Example yaml: https://github.com/couchbaselabs/cbdinocluster/blob/master/examples/1-kv-2-query.yaml
       
      ./cbdinocluster allocate --def-file cluster_defs/1-kv-2-query.yaml
      ./cbdinocluster buckets add 845 default --ram-quota-mb 150 --flush-enabled true
       
      query/index nodes: 192.168.107.129/130
      kv node: 192.168.107.128
      """
      cluster = Cluster.connect('couchbase://192.168.107.130', opts)
       
      # another potential solution
      cluster.wait_until_ready(timedelta(seconds=3),
                               WaitUntilReadyOptions(service_types=[ServiceType.KeyValue, ServiceType.Query]))
       
      collection = (cluster
                    .bucket('default')
                    .default_collection())
      

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              avsej Sergey Avseyev
              jared.casey Jared Casey
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes