Permalink
Commits on Mar 10, 2017
  1. NCBC-1359: Wrap file reading in sub-process to prevent read/write race

    MikeGoldsmith committed Mar 10, 2017
    MOTIVATION
    ----------
    The script that reads and removes lines that contains
    "InternalsVisibleTo" entries from AssemblyInfo.cs pipes it's commands
    directly to one another. Occasionally it is possible to get a read/write
    race where the file is still reading and when the last step is trying to
    write which fails.
    
    MODIFICATIONS
    -------------
    - Wrap the read section of the script into a sub-process by wrapping in
      parentheses
    
    RESULT
    ------
    The whole file is read into memory before the file and write actions to
    ensure there is not a read/write race.
    
    Change-Id: If9c1540239a46c8a834657705d4731feaec141a6
    Reviewed-on: http://review.couchbase.org/75007
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  2. NCBC-1359: Fix AppVeyor script that removes InternalsVisibleTo entries

    MikeGoldsmith committed Mar 10, 2017
    MOTIVATION
    ----------
    When AppVeyor builds the Couchbase projects it removes 'friend' library
    entries in the AssemblyInfo.cs as they are not needed outside of
    testing. The script that does the removal is destroying the file which
    leads to the assemblies failed to be corrected signed and have a default
    version of 0.0.0.0.
    
    MODIFICATIONS
    -------------
    - Fix the script that removes lines that includes "InternalVisibleTo" in
      AssemblyInfo.cs to use Set-Content instead of Out-File
    
    RESULT
    ------
    The AssemblyInfo.cs is updated as expected and the output assembly is
    correctly signed and has the correct version.
    
    Change-Id: I09c69ef7684134d2d697e91777d2ce5d30653ce9
    Reviewed-on: http://review.couchbase.org/75005
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
Commits on Mar 6, 2017
  1. NCBC-1343: Automatically poll for query and search nodes to come online

    brantburnett authored and jeffrymorris committed Mar 4, 2017
    Motivation
    ----------
    If nodes are marked as down, they never receive new queries until all
    nodes get marked as down.
    
    Modifications
    -------------
    Implement ClusterMonitor which scans current cluster state for service
    URLs marked as down every NodeAvailableCheckInterval.  Any down URLs are
    tested and then reactivated if they succeed.
    
    Cluster monitor shares a lifetime with the Cluster object.  Uses a ping
    URL that is specific to each service and relative to each node's URL for
    that service.
    
    Added configuration setting EnableDeadServiceUriPing, defaults to true,
    which enables this new behavior.
    
    Removed query node ping from Server class.  Removed calls to MarkDown
    for exceptions related to query, search, and analytics requests.
    
    Results
    -------
    Query and search nodes which come back online will come back into use by
    the client within the check interval, which defaults to every second.
    Search nodes will only reactivate starting with Couchbase Server 5.0,
    since the ping endpoint isn't available in 4.6.
    
    The IsDown flag on the Server object is now purely for the K/V service.
    The former behavior wasn't working correctly anyway, as most exceptions
    where caught in QueryClient, SearchClient, etc.  The remaining
    exceptions that would have triggered MarkDown would have been client
    side exceptions rather than communication exceptions.
    
    Change-Id: I7e582e92779325c8ceb0ae040b2fdd4c6f08e1f9
    Reviewed-on: http://review.couchbase.org/73280
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1348: Fix single sub-doc operations against small values

    brantburnett authored and jeffrymorris committed Mar 4, 2017
    Motivation
    ----------
    If performing a Counter sub-document mutation against a samll value,
    without any other mutations in the same operation, and with enhanced
    durability disabled, the result throws an NRE when you try to read the
    new counter value.
    
    Similar results when trying to read short values with sub-document Get
    operations, but for these it fails regardless of the enhanced durability
    setting.
    
    Modifications
    -------------
    Override GetExtras in SubDocSingularLookupBase to do nothing, since
    lookup sub-document operations don't return extras after the 24-byte
    header.
    
    Override GetExtras in SubDocSingleMutationBase to use the MultiMutation
    implementation of GetExtras which only looks for the MutationToken when
    VBucket is non-null.
    
    Results
    -------
    For all singular sub-doc operations extras are now read correctly,
    allowing the value to be read correctly afterwards.  This results in the
    Bytes property being populated so that calls to Content don't throw an
    NRE when trying to deserialize the value.
    
    Change-Id: Ic90b1cacdace5612f50219939dd7bf60acc81c51
    Reviewed-on: http://review.couchbase.org/74641
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  3. NCBC-1346: Remove unsupported LookupInBuilder.Exists test

    MikeGoldsmith authored and jeffrymorris committed Mar 3, 2017
    MOTIVATION
    ----------
    As part of the DataStructures API integration tests were added to test
    different scenarios. One of the tests is to verify in a document with
    an array of strings, LoookupInBuilder.Exists can find a given value.
    This is not a supported operation where LookupInBuilder.Exists can only
    verify of a object property exits.
    
    The failing test should be removed.
    
    MODIFICATIONS
    -------------
    - Remove the LookupIn_Exists integration test
    
    RESULT
    ------
    Integration test for an unsupported operation are no longer executed
    and fail.
    
    Change-Id: Icb44f4475fd8e0c7640ab980441dd1562d92d64f
    Reviewed-on: http://review.couchbase.org/74602
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Mar 2, 2017
  1. NCBC-1339: Ensure an operation is retried when state is not connected

    jeffrymorris committed Feb 24, 2017
    Motivation
    ----------
    It's expected that a socket connection may be broken by either a network
    glitch or because the remote host closes the connection (amongst other
    reasons). This patch ensures that an operation will be re-tried if this
    happens assuming that the operation could be retriable (get or set w/CAS) and if
    the connection can be re-established.
    
    Modifications
    -------------
     - Added a TransportFailureException class to handle the case when an
     operation encounters a connection that is no longer connected. This is a
     temporary state unless the remote host (couchbase node) is determined to
     be down.
     - Added a IsConnected property to IConnection and implemented in
     ConnectionBase which returns the current connected state of the socket
     being used.
     - Reworked the logic in MultiplexingIOService so that if a socket is not
     connected, it will throw an exception of type
     TransportFailureException. This will trigger these operations to be
     retried.
     - The logic in OperationResult.ShouldRetry is changed so that
     TimeoutException and any TransportFailure states will be retried
     (unless thay are an operation type that cannot be retried).
     - Fixed unit test that was breaking due to change.
    
    Results
    -------
    If a server connection goes down, the client will retry the operation if
    it can.
    
    Change-Id: I7d6fc49c265c764aa5f367ca5c20d360164188f5
    Reviewed-on: http://review.couchbase.org/74259
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
Commits on Mar 1, 2017
  1. NCBC-1337: When a timeout occurs Muxio returns Success with no body

    jeffrymorris committed Feb 23, 2017
    Motivation
    ----------
    If a connection is terminated by the server, any in-flight operations must
    be canceled and the response should show that they failed.
    
    Modifications
    -------------
     - Make AsyncState take an exception when Cancel or Complete is called
     - If the server fails to respond within the configured timeout, return a
       OperationTimeout.
     - If a operation is canceled, return an OperationAbandonedException for
       each operation.
     - Add OperationAbandonedException for canceled operations
    
     Results
     -------
     If a server connection times out, any in-flight operation will be
     canceled and an OperationAbandonedException will returned along with a
     status of ClientFailure.
    
    Change-Id: I02af9d0134ac0b0c40a3c0aaf88278ddc8099dc3
    Reviewed-on: http://review.couchbase.org/74124
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
Commits on Feb 28, 2017
  1. NCBC-1309: .NET Core Log.Error ignores parameters and logs format str…

    jeffrymorris committed Feb 18, 2017
    …ing only
    
    Motivation
    ----------
    When we log with a string format and args, we want the args to be captured
    in the log's output.
    
    Modifications
    -------------
    Pass the args to ILogger.Error within MicrosoftLoggingLogger class.
    
    Results
    -------
    The args parameters will be written to the log's output.
    
    Change-Id: Iaa5ec1e2277b750c0a4aacf18842411b2323d516
    Reviewed-on: http://review.couchbase.org/73868
    Reviewed-by: Brant Burnett <bburnett@centeredgesoftware.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1322: Test that DocumentFragment<T>.Value works as expected for …

    jeffrymorris committed Feb 16, 2017
    …POCO's
    
    Motivation
    ----------
    DocumentFragement<T>>Value is flagged as Obsolete: "For backwards
    compatibility with regular K/V and Document API internals. Do not use.".
    However, it is still possible to call it and retrieve a list of
    ICollection<OperationSpec> if cast to DocumentFragment<T> where T is the
    type of the DocumentFragment<T> generic parameter. Otherwise, null will be
    returned if LookupIn.Get(..).Execute() is called without casting. The
    purpose of the tests is to document this behavior since it is
    un-intuitive.
    
    Modifications
    -------------
    Added tests to Couchbase_SubDocument_Tests.cs illustratating behavior.
    
    Results
    -------
    Do not use DocumentFragment<T>.Value as it has been flagged as obsolete
    and may be removed in a future major release.
    
    Change-Id: I15c81bbf5b99b74c90796a69e83e10d651d8d032
    Reviewed-on: http://review.couchbase.org/73762
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  3. NCBC-1333: Push nuget packages to MyGet from AppVeyor

    MikeGoldsmith authored and jeffrymorris committed Feb 21, 2017
    MOTIVATION
    ----------
    AppVeyor creates a nuget packages for each commit but they are not used
    yet. It would be useful to push those changes to an unofficial MyGet
    feed so we could use them for internal client testing.
    
    MODIFICATIONS
    -------------
    - Update apveyor.yml to push nupkg files to a MyGet feed
    
    RESULT
    ------
    After AppVeyor builds each commit, the resulting NuGet package is
    published to an unofficial MyGet nuget feed.
    
    Change-Id: I80c28327b2d5f9d0490e583fe3d830cfdfb0836b
    Reviewed-on: http://review.couchbase.org/74030
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  4. NCBC-1342: Fix streaming non-adhoc queries return exception results

    brantburnett authored and jeffrymorris committed Feb 28, 2017
    Motivation
    ----------
    Any query run with AdHoc(false) and UseStreaming(true) will return a
    result with an exception.
    
    Modifications
    -------------
    When getting the query plan, get the first row by enumerating the
    IQueryResult directly rather than IQueryResult.Rows.
    
    Added integration tests for both synchronous and asynchronous queries.
    
    Results
    -------
    When the query plan is streamed by StreamingQueryClient, the
    non-functional Rows property isn't used.  No exception occurs attempting
    to get the query plan.
    
    Change-Id: Id432c9a4c32f31f8c653a2b9f08f9ea307d10911
    Reviewed-on: http://review.couchbase.org/74355
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  5. NCBC-1305: Make bootstrap url default to port 8091

    jeffrymorris committed Feb 18, 2017
    Motivation
    ----------
    If no port is provided, the System.Uri class will default to port 80. To
    bootstrap, Couchbase expects port 8091, so we we need to ensure that the
    default is port 8091 instead of port 80.
    
    Modifications
    -------------
    Check for port 80 when ClientConfiguration.Initialize is called and
    rewrite the uri to use port 8091.
    
    Results
    -------
    If no port is provided in the Uri, the sdk will default it to port 8091
    instead of port 80.
    
    Change-Id: Iaec736d79388a76ca6f5f7f8cfb8de2d766e1d4c
    Reviewed-on: http://review.couchbase.org/73869
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Feb 22, 2017
  1. NCBC-1335: Only run XATTRs and Analytics integration tests when avail…

    MikeGoldsmith committed Feb 21, 2017
    …able
    
    MOTIVATION
    ----------
    Currently neither XAttributes or Analytics are not supported by the test
    cluster that is created for integration tests and always fail. These
    tests should only be run when the cluster supports them.
    
    MODIFICATIONS
    -------------
    - Add SupportsXAttributes property to CouchbaseBucket
    - Check if bucket supports XAttributes before running XAttribute tests
    - Ignore Analytics tests
    
    RESULT
    ------
    XAttribute integration tests are only run when the test cluster supports
    them. Analytics integration tests are ignored until the service can be
    discovered.
    
    Change-Id: Id6f14d4a762657eda59a21dac096b2a1cf54e890
    Reviewed-on: http://review.couchbase.org/74040
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Feb 21, 2017
  1. NCBC-1334: Push client zip file to S3 after repository tag

    MikeGoldsmith committed Feb 21, 2017
    MOTIVATION
    ----------
    When AppVeyor builds after each commit, a zip file is created that
    contains the client assemblies. These zip files are manually uploaded to
    S3 but AppVeyor can do this automatically for a repository tag.
    
    MODIFICATIONS
    -------------
    - add a new deployment action to appveyor.yml for S3
    
    RESULT
    ------
    After AppVeyor has built the zip file for a repository tag build it will
    push the zip to S3.
    
    Change-Id: I8afacb22f6f4a1bbfa6608277f786b0de3cf4887
    Reviewed-on: http://review.couchbase.org/74031
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1330: Add CLR and OS to hello key

    MikeGoldsmith committed Feb 21, 2017
    MOTIVATION
    ----------
    When the client first makes contact with a cluster is sends a Hello
    operation that includes some information about the client. Currently
    only the client version is included but it would be useful to also
    include the .NET CLR and the OS name.
    
    MODIFICATIONS
    -------------
    - Update the Hello operation to add the CLR version and OS name to the
      hello operation key
    - Add unit test to ensure the correct values are added for both .NET
      framework and .NET Core apps
    
    RESULT
    ------
    When sending a hello operation to the cluster the key contains the
    couchbase client version, .NET CLR version and OS name & version the
    client is running on.
    
    Change-Id: Iaf2ba19daa90a809efeb170f1e455ff3945e2db3
    Reviewed-on: http://review.couchbase.org/74019
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  3. NCBC-1249: Add Analytics Query Support as Uncommitted

    MikeGoldsmith committed Feb 8, 2017
    MOTIVATION
    ----------
    An upcoming server feature will be Couchbase Analytics (CBAS). This is a
    new service with an API very similar to the N1QL API. This is the first
    commit to introduce the new Analytics bucket level queries.
    
    MODIFICATIONS
    -------------
    - Add AnalyticsRequest, AnalyticsResult with supporting interfaces and
      data mapping classes
    - Add Query and QueryAsync methods to Bucket, and supporting
      implementations
    - Extend Configuration to support retrieving an Analytics service URIs
    - Add basic tests to illustrate usage
    
    RESULT
    ------
    It is possible to submit an analytics query via an IBucket. Only simple
    queries are possible right now.
    
    NOTES:
    Analytics requests currently do not support:
    - Positional or named parameters
    - Prepared statements and/or caching
    - Cluster level querying
    - The query endpoint is always enabled, and uses hardcoded ports 8095
      or 18095 for SSL
    
    Change-Id: I934b75d5edb77b4bc490eb7482d78ac6d0940453
    Reviewed-on: http://review.couchbase.org/73315
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
Commits on Feb 20, 2017
  1. NCBC-1291: Reactivate search nodes after failure

    brantburnett authored and jeffrymorris committed Feb 8, 2017
    Motivation
    ----------
    Once a search node is marked as failed, it is never reactivated and
    cannot be used by the client.
    
    Modifications
    -------------
    When all search nodes are marked as failed, clear the failure on all
    nodes before selecting a node.
    
    Move failure threshold magic number to a constant.
    
    Results
    -------
    If all search nodes get flagged as failed, then it will retry them all to
    see if any are functional again.
    
    This is not a complete fix, as a node will not be reactivated until all
    search nodes have failed or there is a config change (i.e. rebalance).
    
    Change-Id: I73974988c923a8999d691ec2d4e49cfbfdeafb85
    Reviewed-on: http://review.couchbase.org/73277
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1329: Don't report XML missing warnings for Couchbase.NetStandard

    MikeGoldsmith committed Feb 20, 2017
    MOTIVATION
    ----------
    The Couchbase project was updated to ignore Missing XML warnings but
    that only affected Couchbase project. The Couchbase.NetStandard project
    should also ignore those warnings.
    
    MODIFICATIONS
    -------------
    - update project.json with buildOptions that ignore CS1591 warnings
    
    RESULT
    ------
    Missing XML warnings are no longer reported when building
    Couchbase.NetStandard.
    
    Change-Id: I645dd09bdda17f36285ee8e2fda9b5840279fd6b
    Reviewed-on: http://review.couchbase.org/73970
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  3. NCBC-1328: Update package cache path

    MikeGoldsmith committed Feb 17, 2017
    MOTIVATION
    ----------
    AppVeyor can cache the nuget packages folder between builds by
    configuring the path. The configured path points to packages where it
    should be src\packages.
    
    MODIFICATIONS
    -------------
    - update the packages folder to cache to src\package
    
    RESULT
    ------
    AppVeyor caches the packages folder and reuses it as appropriate.
    
    Change-Id: Ic1058af96a5abc3af1b67147b1973c34161bb3dd
    Reviewed-on: http://review.couchbase.org/73850
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  4. NCBC-1314: GetAndLock operations do not send expiration

    MikeGoldsmith committed Feb 13, 2017
    MOTIVATION
    ----------
    When GetAndLock operations are executed, the lock expiration is
    expected to be sent in the extras flags to the server.
    
    MODIFICATIONS
    -------------
    - Add an override for GetL operations that writes the extras flags
    - Add unit test to prove the provided expiration is written to the
      extras flags
    - Add integration tests to prove documents can be locked and that locks
      both expire after their expiration and can be unlocked
    
    RESULT
    ------
    When GetAndLock operations are executed, the lock expiration value is
    written in the extras flags that is sent to the server.
    
    Change-Id: Id62846261bdfb6732997a35f90fe37dabd5647d1
    Reviewed-on: http://review.couchbase.org/73578
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  5. NCBC-1315: Send key with hello operation

    MikeGoldsmith committed Feb 15, 2017
    MOTIVATION
    ----------
    When the Hello operation is sent to the server, it expects the key
    section of the packet to be present because it uses it to log which SDK
    has sent the request. This is useful for debugging purposes.
    
    Currently the key is not sent and so the server does not log which SDK
    has sent the request.
    
    MODIFICATIONS
    -------------
    - Move custom hello body logic into CreateBody() override
    - Remove Write() override
    - Add unit test to ensure key is written during the Write() method call
    
    RESULT
    ------
    The key is sent in the hello operation packet.
    
    NOTE: There are existing integration tests to prove that the Hello
    operation works as expected.
    
    Change-Id: Ic3a8881e5fcb8574f134755319b0a42c05788cd5
    Reviewed-on: http://review.couchbase.org/73698
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  6. NCBC-1311: Update GetWithLock and GetAndLock expiration comments

    MikeGoldsmith committed Feb 13, 2017
    MOTIVATION
    ----------
    When a GetAndLock operation is sent to the server with an expiration
    value of 0, the server default lock expiration is used (15 seconds).
    However the code comments for GetAndLock and GetWithLock both indicate
    an infinite timeout would be used on the server.
    
    MODIFICATIONS
    -------------
    - Update GetAndLock and GetWithLock code comments to indicate the server
      default lock expiration is used if an expiration of 0 is given
    
    RESULT
    ------
    The code documentation accurately reflects what lock expiration value
    will be used by the server.
    
    Change-Id: Ic3caf3bc5cb7b3dd8e1a914bf4314c0ce975c1e6
    Reviewed-on: http://review.couchbase.org/73579
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  7. NCBC-1321: Fix failing SASL authentication unit test

    MikeGoldsmith committed Feb 16, 2017
    MOTIVATION
    ----------
    After a recent update to how the pool configuration is used within MuxIO
    a unit test fails with a null exception. This unit test should fixed.
    
    MODIFICATIONS
    -------------
    - Fix the unit test by having the mock passed into the target return a
      new PoolConfiguration when queried
    
    RESULT
    ------
    The unit test now executes successfully.
    
    Change-Id: I09472b508279fdd7434bc1d779615448ebe2813d
    Reviewed-on: http://review.couchbase.org/73750
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  8. NCBC-1310: Add test for ketama hash ring

    MikeGoldsmith committed Feb 10, 2017
    MOTIVATION
    ----------
    As part of the Ketama RFC, we need to ensure the generated hashes for
    each server are correct, both in number and pointing to the correct
    hostnames.
    
    MODIFICATIONS
    -------------
    - Rename _bucket to Hashes and make internal in KetamaKeyMapper.cs
    - Add json file with expected hash / hostname list
    - Add unit test to compare generated hashes with expected hashes
    
    RESULT
    ------
    The unit test ensures that the generated ketama hashes are correct.
    
    Change-Id: I7ef76c6a2047f4b41198724baedd709397031cc0
    Reviewed-on: http://review.couchbase.org/73503
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
  9. NCBC-1308: Rename FTS QueryString to QueryStringQuery

    MikeGoldsmith committed Feb 9, 2017
    MOTIVATION
    ----------
    As part of the FTS RFC, each query type is to be named consistently
    across all SDK implementations. The StringQuery query should be named
    QueryStringQuery for consistency.
    
    MODIFICATIONS
    -------------
    - Rename StringQuery to QueryStringQuery
    - Update unit tests to use new query class name
    
    RESULT
    ------
    The query string FTS query is consistent with the RFC, QueryStringQuery.
    
    Change-Id: I29b012718093c203094457b594a0e4749d3cb2d6
    Reviewed-on: http://review.couchbase.org/73450
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  10. NCBC-1294: Add Couchbase.snk to gitignore

    MikeGoldsmith committed Jan 30, 2017
    MOTIVATION
    ----------
    The Coucbase library uses an SNK to strongly name the assembly for
    public use. The SNK is intended to be private to ensure that any
    consuming application can guarantee that it is an official distribution.
    
    To help prevent accidentally adding the SNK file to source control we
    can add it to the project's .gitignore file.
    
    MODIFICATIONS
    -------------
    - Add Couchbase.snk to .gitignore
    
    RESULT
    ------
    If present, the private Couchbase.snk file will not be added to source
    control accidentally.
    
    Change-Id: I55f8a51dcb14e4209b3ec6513ee270fa240b9c61
    Reviewed-on: http://review.couchbase.org/72882
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Feb 17, 2017
  1. NCBC-1327: Update nuspec (title, description, copyright, etc)

    MikeGoldsmith committed Feb 17, 2017
    MOTIVATION
    ----------
    The nuspec file is used to generate nuget packages and includes
    properties that are transferred to the package. These should be updated
    to reflect the current state of the project.
    
    MODIFICATIONS
    -------------
    - update couchbase.nuspec title, description, copyright year and add
      summary
    
    RESULT
    ------
    The nuget package has updated title, description, copyright and summary.
    
    Change-Id: I3f9f4b9b7441581ac0b224adfc0134d5a956e915
    Reviewed-on: http://review.couchbase.org/73848
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  2. NCBC-1326: Use artifacts section in appveyor config

    MikeGoldsmith committed Feb 17, 2017
    MOTIVATION
    ----------
    The zip and nuget packages are uploaded manually using a powershell
    script. It would be better to use the appveyor artifacts section instead
    to indicate what to store.
    
    MODIFICATIONS
    -------------
    - Use the appveyor artifacts section to specify the zip and nuget packages
      to upload as artifacts
    
    RESULT
    ------
    Both the zip and nuget packages are uploaded as artifacts.
    
    Change-Id: I70b6714a53f7c4eba8f11842e05c83a774358dbc
    Reviewed-on: http://review.couchbase.org/73843
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  3. NCBC-1325: Move packing steps to after_build in AppVeyor config

    MikeGoldsmith committed Feb 17, 2017
    MOTIVTION
    ---------
    We want to create a zip and nuget package on each commit, with them
    being deployed on a git tag. Currently the steps to do the packing work
    is done in before_deploy but this looks to only get executed if there is
    a deployment task.
    
    MODIFICATIONS
    - Moved the packaging commands in before_deploy to after_build in
      appveyor.yml
    
    RESULT
    ------
    A zip and nuget package should be created for each commit as it runs
    through AppVeyor.
    
    Change-Id: I7d116e25d1111ab03fb75e5f01ed6e25f3afcc67
    Reviewed-on: http://review.couchbase.org/73839
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  4. NCBC-1324: Remove InternalsVisibleTo before build in AppVeyor

    MikeGoldsmith committed Feb 17, 2017
    MOTIVATION
    ----------
    When AppVeyor builds the Couchbase project it tries to also sign the
    output assemblies. When doing that with InteralsVisibleTo entries, each
    'friend' project must also include a public key. It's not necessary to
    include the friend assemblies as they are only used during development
    and testing so can be safely removed before building.
    
    MODIFICATIONS
    -------------
    - Update appveyor.yml to remove any lines that contain
      InternalsVisibleTo in AssemblyInfo.cs before building
    
    RESULT
    ------
    Before AppVeyor builds the Couchbase Project, it removes the
    InternalsVisibleTo entries in the AssemblyInfo.cs.
    
    Change-Id: I5857c5327ced3efc34cd833a2981db541111e840
    Reviewed-on: http://review.couchbase.org/73821
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
  5. NCBC-1274: Fix appveyor configuration

    MikeGoldsmith committed Jan 31, 2017
    MOVTIVATION
    -----------
    When commits and tags are added to GitHub the AppVeyor integration is
    responsbile for building the Couchbase assemblies ready for packaging
    and distribution.
    
    MODIFICATIONS
    -------------
    Updated appveyor.yml to do the following:
    - only build the Couchbase and Couchbase.NetStandard projects
    - sign both assemblies using the decrypted Couchbase.snk file
    - do not run test projects (testing is conducted on Jenkins)
    - tidy up script blocks into discrete commands for easier reading
    - push the zip file to Github when triggered for a tag
    
    RESULT
    ------
    When AppVeyor is triggered, a zip and nuget package are created with
    the signed assemblies and stored as atrifacts. If AppVeyor was
    triggered because of a Git Tag, a GitHub Release is created and the
    zip file is also attached.
    
    Change-Id: I4cc10b5e7d25d7e0cab1f115dd0414911eeaf499
    Reviewed-on: http://review.couchbase.org/72951
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Feb 15, 2017
  1. NCBC-1307: SDK fails to connect to nodes after restart

    jeffrymorris committed Feb 9, 2017
    Motivation
    ----------
    If the client detects that the entire cluster has gone offline, the client
    should send NodeUnavailableExceptions after detecting that connectivity
    has been lost. When the cluster becomes available, the client should
    reconnect and continue to process requests without manual intervention.
    
    Modifications
    -------------
    - Added INFO level logging to MultiplexingConnection and
      MultiplexingIOService and related classes
    - Added synchronization to critical areas
    - Improved exception handling
    
    Results
    -------
    After a cluster goes offline, once the cluster comes back online the
    client should recover.
    
    Change-Id: I8ec571a653b7dd4fee8861b295ef9e69d3fefc3a
    Reviewed-on: http://review.couchbase.org/73423
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Feb 6, 2017
  1. NCBC-1303: Fix nuspec dependencies

    MikeGoldsmith committed Feb 6, 2017
    MOTIVATION
    ----------
    The Newtonsoft.Json and Microsoft.Extensions.Logging dependencies are
    not correctly pulled into projects referencing the Couchbase nuget
    package.
    
    MODIFICATIONS
    -------------
    - Remove generic dependency group
    - Add NewtonSoft.Json dependency to net45 dependency group
    - Add NewtonSoft.Json & Microsoft.Extensions.Logging to netstandard
      dependency group
    
    RESULT
    ------
    Both the Newtonsoft and MS logging assemblies are referenced and can be
    loaded for both net45 and netstandard projects.
    
    Change-Id: If87b1757c2bec3065d205456c280b81297fcb9c4
    Reviewed-on: http://review.couchbase.org/73199
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>
Commits on Feb 5, 2017
  1. NCBC-1302: Fix SemVer breaking method change to ClusterHelper.GetBucket

    brantburnett authored and MikeGoldsmith committed Feb 4, 2017
    Motivation
    ----------
    If a project consumes a Nuget package built targeting 2.3.x, and the
    project itself consumes 2.4.x, any call to ClusterHelper.GetBucket by
    the Nuget package will trigger a MissingMethodException.
    
    Modifications
    -------------
    Switch from a default password parameter to an overloaded method.
    
    Results
    -------
    Same code works, but the signature is intact compared to 2.3.x so SemVer
    isn't broken.
    
    Change-Id: I088f0808142f448bbfc98aff607b033c9069456b
    Reviewed-on: http://review.couchbase.org/73147
    Reviewed-by: Mike Goldsmith <goldsmith.mike@gmail.com>
    Tested-by: Mike Goldsmith <goldsmith.mike@gmail.com>
Commits on Feb 3, 2017
  1. NCBC-1248: Add XATTR Support as Uncommitted

    MikeGoldsmith committed Jan 24, 2017
    MOTIVATION
    ----------
    A new server feature is to provide attribute storage outside of the
    Couchbase document called attributes (XATTRs). Access to the XATTRs
    is to be done by extending the SubDoc API with additional Extras
    flag to indicate if the operation is targeting the document or it's
    attributes.
    
    MODIFICATIONS
    -------------
    - Add SubdocLookupFlags and SubdocMutateFlags
    - Add additional methods that use the appropriate flags in
      ILookupInBuilder and IMutateBuilder
    - Refactor LookupInBuilder and MutateBuilder to implement new methods
      and route existing functionality through the new methods
    - Remove CreateParents from OperationSpec and replace with Flags byte
    - Update SubDocSingularMutationBase, SubDocSingularLookupBase,
      MultiMutation and MultiLookup to write the flags byte
    - When server sends Hello request, record if XAttributes are supported
    - Fast-fail subdoc requests if XAttriubtes are not supported and one of
      the sucdoc commands attempts to use them
    - Add Unit tests to ensure the correct operation code, path, value and
      flags are written for mutate and lookup operations
    - Add Integration tests to prove mutate and lookup operations work with
      the server
    - Added tests to ensure existing subdoc API is not impacted
    
    RESULT
    ------
    Subdocument lookup and mutate operations can now target the attributes
    section of a Couchbase document.
    
    Change-Id: I21564eb3a9e6ac844948c8aab34ab86638090c3f
    Reviewed-on: http://review.couchbase.org/72403
    Reviewed-by: Jeffry Morris <jeffrymorris@gmail.com>
    Tested-by: Jeffry Morris <jeffrymorris@gmail.com>