libmembase - a C interface to Membase
Switch branches/tags
Nothing to show
Pull request Compare This branch is 1128 commits behind trondn:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



I started implementing libcouchbase during the release testing of
Couchbase. We didn't have a "smart client" in C at the moment, so I had
to revert to Python/Java to run my tests. A "smart client" is a client
that utilize the REST interface to locate the server hosting a given

Initially I looked at adding the support to libmemcached, since
libmemcached already implements everything I need except for the
"smart client" bits. Unfortunately it wasn't that easy to add this to
the existing codebase, because libmemcached doesn't use vbuckets and
the serverlist is provided by the caller. I'm not saying that it would
be impossible to refactor the code so that it works, but libmemcached
isn't targeted to couchbase only (and adding vendor-specific logic to
a generic library didn't feel right).

You might think that I suffer for the "not invented here" syndrome by
adding my own implementation for base64 encoding and extremely simple
implementation for sending and parsing a chunked http response instead
of using libraries such as libcurl etc. The answer is really simple:
I want to minimize the list of external dependencies making it easier
to build and install on your system (and we're only using an extremely
simple and small part of HTTP ;-))

I'm going to try my very best to keep the public interface as stable
as possible making upgrades as easy as possible. I've tried my very
best to hide all knowledge about the internals in the interface, and
that is for a reason. As a client of the library you should _NOT_
try to poke at the internals, because that will _MOST LIKELY_ cause
your application to crash when I'm changing the internals (and you
can be pretty sure that they will change between versions).


Trond Norbye