The SDK RFCs

Begin with the end in mind.

Steven Covey

The SDK RFCs are where we think through the mechanics and semantics of new API being added to Couchbase. The goal is to iterate on what the level of detail should be before writing a full implementation and to quickly surface things we may want to take into consideration in the design. As it grows from an idea to shipping in a supported release, an SDK RFC will traverse along:

  1. IDENTIFIED: A need has been identified for an SDK RFC, but there's little more than a filed issue to point to at the moment
  2. DRAFT: The owner of the SDK RFC has started to draft up how the subject will be handled and may be reviewing with a core group. Comments are certainly welcome at this stage even though the owner hasn't worked through enough details to ask for...
  3. REVIEW: This SDK RFC is in a review period. Stakeholders and the owner may still be iterating on some final details before signoff. A minimum review period has been defined.
  4. ACCEPTED: All stakeholders have signed off and this SDK RFC is now or will be implemented soon.

Coding happens all the time and is encouraged. We just recognize there is a point where we will want to move from code having been written as a subproject or an experimental feature to a feature of the system. At that point we want the feature to take into consideration more use cases and development platforms than it had when it was merely experimental. We want the end result to feel like it's been designed, rather than merely written.

SDK RFC Index

RFC # Description Owner Status
1 The RFC Process Matt ACCEPTED
2 SubDocument API Mark ACCEPTED
3 Index Management Simon ACCEPTED
4 RYW Consistent Queries – at_plus Michael ACCEPTED
5 VBucket Retry Logic Brett ACCEPTED
7 Cluster Level Authentication [issue] [draft] Brett REVIEW
8 Datastructures Mark ACCEPTED
9 2i Query Support SDK IDENTIFIED
10 Full Text Search (FTS) API Michael ACCEPTED
11 Connection String SDK ACCEPTED
12 Adapt memcached error code handling for future proofing (superseded by RFC 13) SDK SUPERSEDED
13 KV Error Map Mark DRAFT
14 LWW Wins XDCR Support (superseded by RFC 17) SDK SUPERSEDED
15 Collection Support SDK IDENTIFIED
16 RBAC Support [issue] Mike G DRAFT
17 Cross-Cluster Failover Michael IDENTIFIED
18 Timeouts for Configuration and Operations Michael IDENTIFIED
19 SDK 2.0 APIs Brett ACCEPTED
20 Common Flags Brett ACCEPTED
21 Generic find Queries (draft discussion) Brett DRAFT
22 User Management API Subhashni DRAFT
23 Subdoc GET_COUNT and MKDOC Mark DRAFT
24 Fast failover configuration and behavior Jeff IDENTIFIED
25 XATTR Support Mark DRAFT
26 Ketama Hashing Mike G ACCEPTED
27 Analytics Querying Brett L DRAFT
28 Enhanced Error Messages Brett L DRAFT

Background

We take the addition or extension of API seriously because we intend this work to have a lifecycle of years or decades. Toward that end, we had originally been writing a set of "one pagers" which had been influenced by experience in other software development organizations. While those were great and we're even porting some of them over to RFCs, we recognized that we'd caught some mistakes late and want to focus ourselves on identifying affecting all platforms as early as possible.

Thus, we defined a new SDK RFC process. We're not alone in this kind of endeavor. Note that Joyent have created RFDs (which came from some similar experience @ingenthr and @trondn had at Sun as well), and Rust has Rust RFCs in addition to the well known IETF RFCs.

Even though this says "SDKs", frequently the discussion here will expose things not always considered at protocol and component design. Those issues may be discussed in the SDK RFC or the discussion may spawn off to Couchbase's issue tracker