Permalink
Commits on Oct 17, 2017
  1. NCBC-1557: Correctly setup cloned PoolConfig when updating bucket config

    MikeGoldsmith committed with jeffrymorris Oct 16, 2017
    MOTIVATION
    ----------
    When using a memached bucket with Couchbase Server 5.0, the bucket name
    is empty when performing the SelectBucket operation. This should have
    the correct bucket name.
    
    MODIFICATIONS
    -------------
    - Use BucketConfiguration.ClonePoolConfiguration instead of
      PoolConfiguration.Clone when setting up IO Service in
      MemcachedConfigContext
    - Add check for if BucketName is empty before sending SelectBucket
      operation in ConnectionPoolBase.EnableEnhancedAuthentication
    
    RESULT
    ------
    The pool config's BucketName property is correctly set when opening
    memached buckets which is used with the SelectBucket operation.
    
    Change-Id: I7a403847889766f7770b03c08f5a80f985e6fc57
    Reviewed-on: http://review.couchbase.org/84439
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Build Bot <build@couchbase.com>
  2. NCBC-1559: Invalid default timeout is set for Memcached Upsert

    jeffrymorris committed Oct 17, 2017
    Motivation
    ----------
    MemcachedBucket.Upsert(key, value) has a bug where the expiration is set
    to the GlobalTimeout value and instead of the key having an infinite
    timeout, it times out nearly immediately causing the key to be evicted
    from the bucket.
    Other overloads and operations do not appear to be impacted; the work
    around is to use any of the other overloads.
    
    Modifications
    -------------
    Changed default value for expiration to be TimeSpan.Zero which will be in
    an infinite expiration for the given key.
    
    Results
    -------
    Fixes bug where the GlobalTimeout (2500ms) for the operation is used
    instead of the expiration of TimeSpan.Infinite. Keys inserted with this
    method will have infinite lifetimes.
    
    Change-Id: I4ff798e4201976172f68155b662b6da02ff8d3a2
    Reviewed-on: http://review.couchbase.org/84502
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  3. NCBC-1554: Failure status results in ArgumentOutOfRangeException

    jeffrymorris committed with MikeGoldsmith Oct 12, 2017
    Motivation
    ----------
    If the server response sets the ResponseStatus to Failure,
    OperationResult.SetException() will throw an ArgumentOutOfRangeException.
    
    Modifications
    -------------
    Allow SetExpection to break from switch statement instead of falling
    through and triggering an ArgumentOutOfRangeException.
    
    Result
    ------
    A ResponseStatus.Failure will not cause and ArgumemtOutOfRangeException.
    
    Change-Id: I2e4ed020936100fc47ce10bdcc23c1ee74c09c29
    Reviewed-on: http://review.couchbase.org/84301
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
Commits on Oct 11, 2017
  1. NCBC-1502: Remove invalid query plans for failed requets and update

    MikeGoldsmith committed with jeffrymorris Oct 10, 2017
    retry logic
    
    MOTIVATION
    ----------
    Failed query requests should be checked to see if the locally cached
    query plan should be invalidated. Additionally, the retry behaviour for
    N1QL queries should be at the request executor leve and not within
    QueryClient.
    
    MODIFICATIONS
    -------------
    - Add PreparedStatementNotFound to ErrorPrepared N1QL error messages
      enum
    - Add QueryResultExtensions that contains contains IsQueryPlanStale to
      check if a query plan is stale
    - Check for and remove stale query plans after executing a N1QL query in
      QueryClient.ExecuteAsync
    - Update QueryResult.ShouldRetry to indicate if a query should be
      retried because of status code and/or message
    - Update CouchbaseRequestExeutor to use request.ShouldRetry and
      request.IsAdhoc in logic for retries
    - Update tests to use ShouldRetry instead of QeryClient.CanRetry
    - Add unit tests for QueryResultExtensions
    
    RESULT
    ------
    Whenever a prepared N1QL request failed, it's result is checked to see
    if the locally cached query plan should be invalidated. Also, the retry
    logic for N1QL requests has been moved to CouchbaseRequestExecutor level
    instead of within QueryClient.
    
    Change-Id: Ie5bf10211840bd906c71529cb2c80b1fafec200d
    Reviewed-on: http://review.couchbase.org/84227
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1540: Deprecate HeartBeatConfigInterval and rename to ConfigPoll…

    jeffrymorris committed Oct 10, 2017
    …Interval
    
    Motivation
    ----------
    Ensure consistency across SDK's and adhere to RFC-0024
    Fast-Failover configuration and behavior:
    https://github.com/couchbaselabs/sdk-rfcs/blob/master/rfc/0024-fast-failover.md
    
    Modifications
    -------------
     - Rename HeartBeatConfigInterval to ConfigPollInterval
     - Rename HeartConfigCheckfloor to ConfigPollCheckFloor
     - Rename EnableConfigHeartbeat to ConfigPollEnabled
     - Update unit tests and any place where the older config setting was used
     - Add unit tests to ensure backwards compatibility
    
    Result
    ------
    The settings for fast-failover are consistent with other SDKs and the
    RFC-0024.
    
    Change-Id: I0f5c93e23492268f49a8827f0fb91226202de4b8
    Reviewed-on: http://review.couchbase.org/84243
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  3. NCBC-1542: Removed lock for Insert and RemoveAt in CouchbaseList

    dlemstra committed with MikeGoldsmith Oct 2, 2017
    Motivation
    ----------
    The CouchbaseList class contains a couple unnecessary locks that
    can be removed.
    
    Modifications
    -------------
     - Removed lock for Insert and RemoveAt in CouchbaseList
    
    Result
    ------
    The unnecessary locks are gone.
    
    Change-Id: I77afa6d1139b848f24994216cb45e8c44d35f06a
    Reviewed-on: http://review.couchbase.org/83973
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Build Bot <build@couchbase.com>
  4. NCBC-1551: Fix expiration bug with sync bulk upsert

    mattcarabine committed with MikeGoldsmith Oct 10, 2017
    Motivation
    ----------
    NCBC-1206 introduced per-operation timeouts for each operation.
    Unfortunately this change incorrectly interpreted the operation timeout
    as the TTL instead for the (obsolete) synchronous bulk upsert operation.
    
    This commit fixes this bug and ensures that the timeout is honored and
    expiration is not incorrectly set.
    
    Modifications
    -------------
    - Explicitly set expiration to 0 in all synchronous bulk upserts.
    - Pass this expiration as well as the timeout to the underlying Upsert
    method.
    
    Result
    ------
    The expiration is now correctly set to 0 for all synchronous bulk
    upserts.
    
    Change-Id: I95f07471e4a869fd1314e8898f973695a121734e
    Reviewed-on: http://review.couchbase.org/84226
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Build Bot <build@couchbase.com>
  5. NCBC-1524: Add missing license information

    MikeGoldsmith committed Oct 3, 2017
    MOTIVATION
    ----------
    All files in the Couchbase SDK should have appropriate license
    information. This is done using a LICENSE file in the root of the
    repository and each file should have a region at the end with
    license details.
    
    MODIFICATIONS
    -------------
    - add LICENSE file to root of repository with license information
    - add missing license region to all files in Couchbase project
    
    RESULT
    ------
    License information is now available both through a LICENSE file in the
    root of the repository and in each file in the Couchbase project.
    
    Change-Id: I271da98ef2d5491ed2e12f547397833a075c9e8f
    Reviewed-on: http://review.couchbase.org/83959
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Oct 9, 2017
  1. NCBC-1538: fix expiration bug in MemcachedBucket.Upsert

    jeffrymorris committed with MikeGoldsmith Oct 3, 2017
    Motivation
    ----------
    Fix a bug were the expiration was not being set in the
    MemcachedBucket.Upsert method.
    
    Modifications
    -------------
     - Assign expiration to Set operation
     - Create integration test
    
    Result
    ------
    The expiration is now set and will be honored.
    
    Change-Id: I2139126501b4fe167d3dde93fa56e6a2315a0769
    Reviewed-on: http://review.couchbase.org/83941
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  2. NCBC-1541: Fix two small typos.

    dlemstra committed with MikeGoldsmith Oct 2, 2017
    Motivation
    ----------
    The current code contains a few minor typos that should be fixed.
    
    Modifications
    -------------
    - Fix two small typos.
    
    Result
    ------
    Two compiler warnings are gone.
    
    Change-Id: I119a0a3e1ded987ec18e0b572506c07edc77be6a
    Reviewed-on: http://review.couchbase.org/83972
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Build Bot <build@couchbase.com>
  3. NCBC-1543: Release the acquired connection back to the connection pool

    dlemstra committed with MikeGoldsmith Oct 2, 2017
    Motivation
    ----------
    A connection is not returned back to the connection pool after it has
    been used in the ExecuteAsync methods of the PooledIOService.
    
    Modifications
    -------------
     -  Release the acquired connection back to the connection pool when
        the action has been completed.
    
    Result
    ------
    The connection is released back into the pool.
    
    Change-Id: I62133c753fcc99c590ca606641dff742b2bc9657
    Reviewed-on: http://review.couchbase.org/83971
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Build Bot <build@couchbase.com>
Commits on Oct 6, 2017
  1. Revert "NCBC-1502: check if query plan is stale and purge cache if st…

    MikeGoldsmith committed with jeffrymorris Oct 6, 2017
    …ale"
    
    This reverts commit 55f05bb.
    
    Change-Id: Id731dd5df17a4ebba2d751785c5d5438dbe0e4c4
    Reviewed-on: http://review.couchbase.org/84099
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Oct 5, 2017
  1. NCBC-1545: Add BucketNotConnected response code

    MikeGoldsmith committed with jeffrymorris Oct 5, 2017
    MOTIVATION
    ----------
    It has been found that during rebalance of adding new nodes the .NET SDK
    does not fail authentication when the SelectBucket operation returns a
    non-success. This is not captured and the connection is then used for
    subsequent opeations which fail with BucketNotConnected response code.
    
    MODIFICATIONS
    -------------
    - add ResponseCode.BucketNotConnected
    - set ResponseCode.BucketNotConnected as non-retryable in
      OperationResult.ShouldRetry
    - set BucketNotConnected as a status that does not need any further
      processing in OperationResult.SetException
    - update both MemcachedConfigContext and CouchbaseConfigContext to
      perform authentication in say steps as during CCCP bootstrap
    - add long line to ConnectionPoolBase.EnableEnhancedAuthentication to
      indicate when SelectBucke operations fail
    - ensure Authenticate is called for connections in
      SharedConnectionPool.Aquire
    
    RESULT
    ------
    The correct authentication process should be followed both during
    bootstrap and when new bucket configurations are received for both
    Memcached and Couchbase buckets.
    
    Change-Id: I9f29a7035f3fc237f00896a3139db5c73555c401
    Reviewed-on: http://review.couchbase.org/84059
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Build Bot <build@couchbase.com>
  2. NCBC-1548: Move authenticator validation to ClientConfiguration

    MikeGoldsmith committed Oct 4, 2017
    MOTIVATION
    ----------
    Authenticators should retrieve username from the connection string
    before being validated.
    
    MODIFICATIONS
    -------------
    - move authenticator.Validate execution from Cluster to
      ClientConfiguration after the connection string has been checked
    - update test that did not add any bucket credentials
    
    RESULT
    ------
    When an authenticator is used, it will check for a username in
    connection strings before being validated.
    
    Change-Id: Id32d163406eb7b477914dbc4ac1dbe6d75c22c2d
    Reviewed-on: http://review.couchbase.org/84019
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Sep 29, 2017
  1. NCBC-1502: check if query plan is stale and purge cache if stale

    jeffrymorris committed Aug 31, 2017
    Motivation
    ----------
    If a stale query plan is encountered, the client may fail with the error
    "unexpected end of JSON input". This commit purges the query plan cache if
    its stale and then retries the request.
    
    Modifications
    -------------
     - Check that query plan stale in QueryClient and purge if
       necessary.
     - Add extension method that checks the response to see if its stale
     - Add tests
    
    Result
    ------
    If the query plan is stale, it will be purged from  the cache and the
    query retried.
    
    Change-Id: Ife46dc81e58d1f795799df024d456a691ec5c3d8
    Reviewed-on: http://review.couchbase.org/82991
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1522: Improve exception handling when auth fails

    jeffrymorris committed Sep 19, 2017
    Motivation
    ----------
    When using the ClassicAuthenticator with pre-5.0 clusters, if you do not
    call AddBucketCredntials(bucket, password), the client will expectedly
    fail to bootstrap, however, the message should indicate that its an
    authentication error and not a standard CLR message when an operation is
    attempted on an empty list.
    
    Modifications
    ------------
     - Throw AuthenticationException if the bucket crendentials list is empty.
     - Add unit test
    
    Result
    ------
    If bucket crendentials are not provided, the client will fail-fast and
    throw an AuthenticationException.
    
    Change-Id: I0dd01b7fab1b4c5f266c8e8ab5cbc57c900697f2
    Reviewed-on: http://review.couchbase.org/83528
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  3. NCBC-1511: Use POST to submit view keys for view queries

    MikeGoldsmith committed Sep 27, 2017
    MOTIVATION
    ----------
    Couchbase server has a limit on query string length for view queries and
    having lots of keys can cause the server to reject the request. The
    server already supports having view queries being submitted via POST
    which can have the keys sent in the body.
    
    MODIFICATIONS
    -------------
    - Add CreateRequestBody to IViewQuerable
    - Implement CreateRequestBody in ViewQuery that creates a JSON object
      with keys
    - Implement CreateRequestBody in SpatialViewQuery that return empty JSON
      object
    - Add unit and integration tests to verify POST is being used and we can
      submit view queries
    
    RESULT
    ------
    View queries are submitted via POST instead of GET, with ViewQuery keys
    added in the body.
    
    Change-Id: I94b18300eda601fd59e3872847cf676cbec0bea6
    Reviewed-on: http://review.couchbase.org/83102
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  4. NCBC-1535: Reuse QueryClient's Async versions of methods in sync code…

    MikeGoldsmith committed Sep 27, 2017
    … paths
    
    MOTIVATION
    ----------
    The QueryClient has a lot of duplication between sync and async code
    paths. This could be improved by having the sync path use the async code
    paths.
    
    MODIFICATIONS
    -------------
    - mark IViewQuery.Query(string) and QueryAsync(string) obsolete as they
      are only used in testing
    - update Prepare and Query to use Async versions internally, wrapped
      using a SynchronizationContextExclusion to preserve application
      context
    - remove unused private sync methods
    - update internal code to use newer language features such as inline out
      parameters and inline type casting
    
    RESULT
    ------
    The QueryClient implementation more closely adheres to the DRY principal
    by reusing async code paths from sync code paths.
    
    Change-Id: I1b64c8bfa07d3ee72c4a8fe06aa9a4041295d7a8
    Reviewed-on: http://review.couchbase.org/83776
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  5. NCBC-1461: Don’t log failed prepare N1QL requests

    MikeGoldsmith committed Sep 27, 2017
    MOTIVATION
    ----------
    It has been found that failed N1QL prepare requests log their original
    query statement to the Couchbase log at the WARN level. This is a
    security concern as the statement may include information that is
    sensitive.
    
    MODIFICATIONS
    -------------
    - don't log failed N1QL prepare statements in QueryClient
    
    RESULT
    ------
    Failed N1QL prepare requests no longer log their original statment.
    
    Change-Id: I900e5d2d96cc67fe7386bb399bf9e450fec57259
    Reviewed-on: http://review.couchbase.org/83775
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Sep 27, 2017
  1. NCBC-1529: Ignore compiler warning for missing XML comments

    MikeGoldsmith committed Sep 22, 2017
    MOTIVATION
    ----------
    When building the Couchbase library, there are lots of compiler warnings
    regarding public properties that do not have XML descriptions. This is
    something we would like to improve, but does will be over time.
    
    In the short-term it would be good to ignore these warnings.
    
    MODIFICATIONS
    -------------
    - add nowarn property with value 1591 to Couchbase.csporj
    
    RESULT
    ------
    There are no more compiler warnings for missing XML comments on public
    properties when building the Couchbase library.
    
    Change-Id: I9b76dca6aa5440e2547abb67f18b1a641d551816
    Reviewed-on: http://review.couchbase.org/83642
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1528: Don’t run N1QL pretty print tests on unsupported servers

    MikeGoldsmith committed Sep 22, 2017
    MOTIVATION
    ----------
    There is an integration tests that fails during CI because Couchbase
    Server 4.5 does not support the Pretty Print N1QL parameter. The test
    should only be run when working with a compatible server.
    
    MODIFICATIONS
    -------------
    - ignore pretty print tests when server version < 4.6.0
    
    RESULT
    ------
    Pretty print integration tests are only executed when working with a
    Couchbase Server version >= 4.6.0.
    
    Change-Id: I3f115e83c56ce3572478fe66b508b04eaf3d7079
    Reviewed-on: http://review.couchbase.org/83639
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  3. NCBC-1520: Update integration tests execution configuration

    MikeGoldsmith committed Sep 13, 2017
    MOTIVATION
    ----------
    There are a few improvements that can be made to make running
    integration tests more reliable and accurate. These are using the
    default configuration, configuring SSL tests to use enhanced auth when
    config indicates it should be and dynamically ignoring RBAC auth tests
    based on config.
    
    MODIFICATIONS
    -------------
    - Authenticator tests skip dynamically depending on config
    - Set default configuration as 'basic'
    - Execute SetupEnhancedAuth when setting up cluster in SSL tests
    
    RESULT
    ------
    The default configuration is 'basic', Couchbase SSL tests setup enhanced
    auth correctly when appropriate and authenticator tests dynamically
    skips RBAC tests based on config.
    
    Change-Id: I6c33a323e9b4278295fcb6941279f5e137c51783
    Reviewed-on: http://review.couchbase.org/83349
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Sep 26, 2017
  1. NCBC-1532: No highlighter with name or type 'Html' registered

    jeffrymorris committed Sep 25, 2017
    Motivation
    ----------
    Fixes a bug in the SDK where the server will return an error message
    because the serialized value for SearchQuery.Highlighting(.., ..) will be
    camel-cased, but the server expects no casing.
    
    Modifications
    -------------
     - Ensure field is converted to lower case
     - Added integration test
     - Added unit test
    
    Result
    ------
    The server will no longer return an error message if the specific
    Highlighting overload is called.
    
    Change-Id: Ia57951df7839bec89910303abb5ef3452c80442c
    Reviewed-on: http://review.couchbase.org/83691
    Reviewed-by: Matthew D. Groves <me@mgroves.com>
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
Commits on Sep 23, 2017
  1. NCBC-1523: FTS - Unexpected character encountered while parsing value

    jeffrymorris committed Sep 15, 2017
    Motivation
    ----------
    If a non-HTTP 4XX error occurs, the server will return an object of
    key/value pairs with the pindex and the error message. This fixes a bug
    where the client assumed that each error message was a string and not an
    object.
    
    Modifications
    -------------
     - Change the parsing of the errors property so that it treated each error
       as a key/value.
     - Add unit test and example output file.
     - Fix logic to determine if request was succesful.
     - Rename tests so that its easier to find.
    
    Result
    ------
    If the errors property has values, they will converted into a string and
    added to the SearchQueryResult.Errors collection.
    
    Change-Id: I6c7f2409a49033609e37887c2448354381a2752a
    Reviewed-on: http://review.couchbase.org/83441
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Sep 21, 2017
  1. NCBC-1517: Enabled KVErrorMap by default

    MikeGoldsmith committed Sep 11, 2017
    MOTIVATION
    ----------
    KV Error Map is a new feature in Couchbase Server 5.0, and was
    optionally enabled using configuration during development. The default
    should now always to be enabled and the tuneable option marked as
    obsolete.
    
    MODIFICATIONS
    -------------
    - Always send XError feature code during Hello in IOServiceBase
    - Mark each reference to UseKVErrorMap as obsolete, in
      PoolConfiguration, BucketElement, BucketConfiguration,
      BucketDefinition and ConfigContextBase
    - Update tests that set UseKVErrorMap to not set anymore
    
    RESULT
    ------
    The KVErrorMap feature is always requested and the option to disable
    this has been marked as obsolete along with tests being updated.
    
    Change-Id: I2914bb27dc27b5d6273937c45d2ab70e632580e8
    Reviewed-on: http://review.couchbase.org/83268
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Sep 18, 2017
  1. NCBC-1521: Remove obsolete properties from http services

    MikeGoldsmith committed with jeffrymorris Sep 14, 2017
    MOTIVATION
    ----------
    The IDataMapper and HttpClient properties defined in some of the http
    service interfaces and implementation classes are not required. They
    were marked as obsolete during the 2.4 development cycle and should be
    removed now we are in the 2.5 developnent cycle.
    
    MODIFICATIONS
    -------------
    - remove IDataMapper and HttpClient property definitions from
      ISerchClient, IQueryClient and IViewClient interfaces
    - remove property implementations from SearchClient, QueryClient and
      ViewClientBase
    
    RESULT
    ------
    The obsolete IDataMapper and HttpClient properties have been removed
    from each of the http service interfaces and class implementations.
    
    Change-Id: I684e767ed4f169af2a472118fd2cf80f411544d1
    Reviewed-on: http://review.couchbase.org/83399
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1525: Allow streaming scalar query results

    brantburnett committed with jeffrymorris Sep 17, 2017
    Motivation
    ----------
    The current N1QL streaming implementation only works with JSON objects,
    not with scalars returned via SELECT RAW.
    
    Modifications
    -------------
    Accept any type of item in the "rows" attribute, including scalars.
    
    Results
    -------
    Scalar query results may now be streamed.
    
    Change-Id: If4cffaa390094a66fa5d2a6415eb0049f228f0fe
    Reviewed-on: http://review.couchbase.org/83448
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  3. NCBC-1509: Discover and bootstrap Analytics service

    MikeGoldsmith committed with jeffrymorris Sep 15, 2017
    MOTIVATION
    ----------
    The Analytics service is now discoverable using the standard cluster
    configuration services JSON. The client should read this config and
    determine if the node has the Analytics service and what ports to use.
    
    MODIFICATIONS
    -------------
    - add Analytics and AnalyticsSsl to services class used to deserialize
      server config
    - update NodeExt to use services instead of hard-coded values
    - add default ports for Analytics and AnalyticsSsl to DefaultPorts.cs
    - Add unit tests to verify setup behaviour of NodeExt
    
    RESULT
    ------
    The Analytics service will be bootstrapped as part of the normal setup.
    
    Change-Id: I8ca9b125f08bfc95ec05d247d840759a5466d16a
    Reviewed-on: http://review.couchbase.org/83433
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>
    Tested-by: Build Bot <build@couchbase.com>
  4. NCBC-1512: Add logging that shows the server features that are enable…

    jeffrymorris committed Sep 6, 2017
    …d by client
    
    Motivation
    ----------
    Add INFO level logging which shows which server features that the client
    has enabled or that the server supports. For example: XError, Enhanced
    Durability, Enhanced Authentication, XAttrs, etc.
    
    Modifications
    -------------
    Update IOServiceBase to INFO log which features are enabled/supported.
    
    Results
    -------
    This is information is now available and should help debugging.
    
    Change-Id: Ib36a7cf859caff59b2e4f8b2186fa687bd55c196
    Reviewed-on: http://review.couchbase.org/83155
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  5. NCBC-1513: Fix version issue with System.ComponentModel.TypeConverter…

    jeffrymorris committed Sep 6, 2017
    … 4.0.1 in
    
    tests
    
    Motivation
    ----------
    There is a versioning issue (which VS resolves and flags as a warning)
    where System.ComponentModel.TypeConverter expects greater or equal to
    4.0.1 but cannot resolve, so VS uses 4.1.0.
    
    Modifications
    -------------
     - Update System.ComponentModel.TypeConverter from older version to 4.3.0
    
    Result
    ------
    Compiler warning is removed.
    
    Change-Id: Ibf1a88789b44a8673819b60c1451290d92ff6951
    Reviewed-on: http://review.couchbase.org/83157
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  6. NCBC-1436: QueryClient hides base properties HttpClient and DataMapper

    jeffrymorris committed Sep 7, 2017
    Motivation
    ----------
    Both IQueryClient and HttpServiceBase both have DataMapper and HttpClient,
    because QueryClient implement or derive from both, these properties are
    overriden and hidden causing a compiler warning. This commit removes the
    properties from IQueryClient and QueryClient so that the compiler is
    removed.
    
    Modifications
    -------------
    Remove HttpClient and DataMapper properties from IQueryClient and
    QueryClient so that the base implementation is used.
    
    Result
    ------
    Compiler warning is removed.
    
    Change-Id: Id4a7fea06677645373fa324f312220db20f11afa
    Reviewed-on: http://review.couchbase.org/83159
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
Commits on Sep 14, 2017
  1. NCBC-1510: Fix Myget symbols upload path

    MikeGoldsmith committed Sep 14, 2017
    MOTIVATION
    ----------
    The MyGet path to upload symbols packages is incorrect and is rejected
    by the server.
    
    MODIFICATIONS
    -------------
    - update the symbols for MyGet symbols packages
    
    RESULT
    ------
    The path used to upload the symbols package is correct and will succeed.
    
    Change-Id: I23eefce26749100c777d345de54f60b8426e9bc2
    Reviewed-on: http://review.couchbase.org/83389
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>
  2. NCBC-1510: Create and publish symbols package during builds

    MikeGoldsmith committed Sep 11, 2017
    MOTIVATION
    ----------
    It is desirable to create symbols nuget packages that can be deployed
    alongside full nuget packages to help with debugging. They contains both
    pdb files and the original source code and are pushed to dedicated
    symbols servers for indexing. Using these symbols packages allows client
    applications to debug original source code to help identify issues.
    
    MODIFICATIONS
    -------------
    - add IncludeSymbols and IncludeSource parameters to msbuild command
    - update skip_symbols to false for both nuget and myget in appveyor.yml
    - add symbol server url for myget deployments
    - remove default nuget feed url for nuget deployments
    - add *.nupkg to .gitignore
    
    RESULT
    ------
    An additional nuget package is created that contains both the pdb files
    and source code that can be used to help debug a client application. The
    extra nuget package is published to either myget or nuget symbols feed
    as part of the appveyor deployment step.
    
    Change-Id: I876fb3a98637c7e48fcb15441ca66b42d3ffb111
    Reviewed-on: http://review.couchbase.org/83277
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  3. NCBC-1514: Add tests for read/writer scenarios

    MikeGoldsmith committed Sep 11, 2017
    MOTIVATION
    ----------
    As part of RBAC a user may be assigned data_reader and data_writer
    roles where data_reader should not have write access and data_writer
    should not have read access.
    
    MODIFICATIONS
    -------------
    - Add integration tests to verify behaviours above
    
    RESULT
    ------
    Integration tests ensure data_reader does not allow write access and
    data_writer does not allow read access.
    
    Change-Id: I2441c00e408ed682d903bac4fb21c231caa55b8d
    Reviewed-on: http://review.couchbase.org/83262
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>
    Tested-by: Build Bot <build@couchbase.com>
  4. NCBC-1336: Update AppVeyor with automated user credentials

    MikeGoldsmith committed Sep 8, 2017
    MOTIVATION
    ----------
    For security purposes, we should use a dedicated AWS profile with
    AppVeyor instead of a personal account. This ensures granular
    control and manageability.
    
    MODIFICATIONS
    -------------
    - replace encrypted AWS access and secret with dedicated credentials
      for use with AppVeyor
    
    RESULT
    ------
    The credentials used to upload the client zip to S3 on tagged builds
    now uses a dedicated AWS profile.
    
    Change-Id: Ic02354bcd1299dd7be3dd0eac0102387f156f2d5
    Reviewed-on: http://review.couchbase.org/83226
    Tested-by: Build Bot <build@couchbase.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>