Skip to content

ronkorving/libcouchbase

 
 

Repository files navigation

Hi!

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
vbucket.

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).

Cheers,

Trond Norbye


About

The couchbase client for C.

Resources

License

Stars

Watchers

Forks

Packages

No packages published