Skip to content

Latest commit

 

History

History
73 lines (58 loc) · 6.33 KB

README.md

File metadata and controls

73 lines (58 loc) · 6.33 KB

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

Accepted & Superseded RFCs

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 Brett ACCEPTED
8 Datastructures Mark ACCEPTED
10 Full Text Search (FTS) API Michael ACCEPTED
11 Connection String SDK ACCEPTED
12 Adapt memcached error code handling for future proofing (see RFC 13) SDK SUPERSEDED
13 KV Error Map Brett (Mark) ACCEPTED
14 LWW Wins XDCR Support (see RFC 17) SDK SUPERSEDED
16 RBAC Mike G ACCEPTED
19 SDK 2.0 APIs Brett ACCEPTED
20 Common Flags Brett ACCEPTED
22 User Management API Subhashni ACCEPTED
23 Subdoc GET_COUNT and MKDOC (see RFC 25) Mark SUPERSEDED
24 Fast failover configuration and behavior Jeff ACCEPTED
25 Spock additions for Subdoc (including XATTRs) Brett (Mark) ACCEPTED
26 Ketama Hashing Mike G ACCEPTED
28 Enhanced Error Messages Brett L ACCEPTED
34 Health Check Sergey REVIEW

Draft, Review & Identified RFCs

RFC # Description Owner Status
9 2i Query Support SDK IDENTIFIED
15 Collection Support SDK IDENTIFIED
17 Cross-Cluster Failover Michael IDENTIFIED
18 Timeouts for Configuration and Operations Michael IDENTIFIED
21 Generic find Queries [issue] Brett IDENTIFIED
27 Analytics Querying [draft] Michael N (Brett) DRAFT
29 Server Version Identification [draft] Mike G DRAFT
30 Client-Side Compression [draft] Sergey DRAFT
31 Custom Transcoders [draft] Mike G DRAFT
32 Field-Level Encryption [draft] Jeff DRAFT
33 Circuit Breakers Subhashni IDENTIFIED
35 Server-side per-operation timing [draft] Mike G DRAFT
36 X.509 Authentication [draft] Michael 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