2005-09-24 16:44  sean@gigave.com

	* configure.ac: Stamp 1.4.0b8. Hopefully this is the last of these
	  buggers.

2005-09-24 16:43  sean@gigave.com

	* m4/acinclude.m4: Tired of having my regen script fail, fix
	  permanently.

2005-09-24 16:27  sean@gigave.com

	* src/memcache.c: Fix the last of the short read problems acording
	  to Scott Wilson.

2005-09-19 17:14  sean@gigave.com

	* configure.ac: Roll 1.4.0b7
	* src/buffer.c: Fix a small bug with buffer debugging.

2005-09-19 17:12  sean@gigave.com

	* src/memcache.c: Fix ultra-braino. Meant to say, size greater
	  than or equal to, not less than or equal to. Pointy hat to:
	  sean@ Submitted by: Scott Wilson

2005-09-16 16:57  sean@gigave.com

	* COPYING, INSTALL, Makefile.am, configure.ac, doc/Makefile.am,
	  doc/memcache.4, include/Makefile.am, include/_buffer.h,
	  include/buffer.h, m4/Makefile.am, regen, src/Makefile.am,
	  src/buffer.c, src/crc32_table.h, test/Makefile.am,
	  test/benchmark/Makefile.am, test/benchmark/benchmark.c,
	  test/buffer_recycle/Makefile.am,
	  test/buffer_recycle/buffer_recycle.c, test/long_val/Makefile.am,
	  test/long_val/long_val.c, test/regress/Makefile.am,
	  test/regress/regress.c, test/unit/Makefile.am,
	  test/unit/check_buffer.c: Remove Nexadesic RCS tags.

2005-09-16 06:06  sean@gigave.com

	* configure.ac, include/memcache.h.in, src/memcache.c: Use #define
	  macros where appropriate to mask the need for developers to be
	  consistent with the function signature. Instead, they just need
	  to use these macros and they'll be automatically covered from
	  source incompatibility problems. Begin the 1.4.0.b6 stamp
	  process. Move check for hashing of keys from the caller into the
	  mcHashKey() function, which is actually implemented by
	  mcm_hash_key_func(). Gives other hash producers the opportunity
	  to override this functionality and ensure that it always hashes,
	  if they so choose.

2005-09-10 14:39  sean@gigave.com

	* src/memcache.c, test/redundant_server,
	  test/redundant_server/redundant_server.c: Few fixes to make sure
	  that server failover works when desired, but can easily be
	  disabled with the server find function.

2005-09-10 13:47  sean@gigave.com

	* .cvsignore, doc/.cvsignore, include/.cvsignore, m4/.cvsignore,
	  src/.cvsignore, test/.cvsignore, test/benchmark/.cvsignore,
	  test/buffer_recycle/.cvsignore, test/long_val/.cvsignore,
	  test/regress/.cvsignore, test/unit/.cvsignore: Remove .cvsignore
	  files, subversion uses a "svn:ignore" property instead. Was
	  using svn:ignore before, but was keeping .cvsignore files around
	  for some reason. *shrug*

2005-09-10 07:40  sean@gigave.com

	* configure.ac, include/memcache.h.in, src/memcache.c,
	  test/Makefile.am, test/redundant_server,
	  test/redundant_server/Makefile.am,
	  test/redundant_server/redundant_server.c: Add a test for server
	  redundancy

2005-09-04 00:31  sean@gigave.com

	* include/memcache.h.in, src/memcache.c: Add mc_aget2() and
	  mcm_aget2(). *_aget2() behaves the same as *_aget(), except that
	  the last arg of *_aget2() is a pointer to a size_t variable that
	  will have the size of the return value set if the pointer is
	  non-null.

2005-09-01 18:34  sean@gigave.com

	* configure.ac, include/memcache.h.in, src/memcache.c: Move all
	  misc pointers to the top of their respective structures that way
	  they all exist in the same offset in all structures that have
	  'void *misc' members. Provide a client tweakable function
	  pointer so that clients can override the key hashing function
	  and the server lookup function (takes the hash to calculate the
	  server in the server list). Change mc_hash_key(),
	  mc_server_find(), mcm_hash_key(), and mcm_server_find() so that
	  it makes use of the above function pointers. Add a retry to the
	  read() calls so that we don't loop forever when sucking in data
	  and trashing it. Hard coded 3 retries.

2005-08-25 01:15  sean@gigave.com

	* configure.ac: Release 1.4.0b5 with various memory fixes.

2005-08-25 01:14  sean@gigave.com

	* src/memcache.c: Free error contexts when free(3)'ing a given
	  memcache context.

2005-08-24 22:27  sean@gigave.com

	* test/benchmark/benchmark.c,
	  test/buffer_recycle/buffer_recycle.c: Plug a few memory leaks in
	  the regression libraries.

2005-08-24 22:22  sean@gigave.com

	* src/memcache.c: Catch a free-on-delete error.

2005-08-24 21:08  sean@gigave.com

	* src/memcache.c: Fix memory allocation problem with server lists.

2005-08-24 08:38  sean@gigave.com

	* src/buffer.c: Replace a few magic numbers w/ more correct
	  sizeof() replacements.

2005-08-24 06:28  sean@gigave.com

	* src/memcache.c: Make use of mcm_strndup() where appropriate when
	  dup'ing data. Pad the server list with a trailing NULL slot.

2005-08-23 07:53  sean@gigave.com

	* Makefile.am, configure.ac: Stamp 1.4.0b4. Remove various cvs
	  dependencies, memcache(3) is now under subversion's control.

2005-08-23 07:51  sean@gigave.com

	* include/memcache.h.in, src/memcache.c: Use the mc_const macro in
	  mcm_strnstr() instead of just const. We don't ever modify the
	  argument, but we return a value that we try to cast through
	  (char *), but newer gcc(1)'s are complaining. :-/ This is a
	  sufficient workaround given we know we're not changing the data.

2005-08-23 07:36  sean@gigave.com

	* src/memcache.c: Loosen up memcache(3)'s protocol parsing so that
	  it scans for the first part of the line and doesn't necessarily
	  throw an error if an additional chunk of data comes back from
	  the server. Ie: "NOT_STORED\r\n" "NOT_STORED some reason\r\n"
	  Will now be handled gracefully by the client. This is important
	  in the off chance you've hacked up memcached(8)... *whistles
	  innocently*

2005-08-23 07:24  sean@gigave.com

	* include/memcache.h.in: Include some implementation/cationary
	  advice for people using memcache(3) in multi-memory context
	  environments that will be using struct memcache_ctxt.

2005-08-23 07:01  sean@gigave.com

	* src/memcache.c: Fix mcm_server_deactivate() to take into account
	  down servers. Fix an off-by-one error in mcm_server_find() that
	  was causing problems when detecting when a server hash index
	  needed to be wrapped. Submitted by: Scott Wilson
	  <scott.wilson@gmail.com>

2005-08-22 21:05  sean@gigave.com

	* client-branches/RELEASE_1_3, .: Move the RELEASE_1_3 client to
	  be known as "lib"

2005-08-19 16:17  sean

	* client-branches/RELEASE_1_3/configure.ac,
	  client-branches/RELEASE_1_3/include/Makefile.am,
	  client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/buffer.c,
	  client-branches/RELEASE_1_3/src/memcache.c: Poach FreeBSD's
	  strnstr(3) function and rename it to mcm_strnstr(). This should
	  fix the build on Linux...

2005-08-19 11:08  sean

	* client-branches/RELEASE_1_3/configure.ac,
	  client-branches/RELEASE_1_3/regen: Conditionalize the need for
	  check(3)

2005-08-19 10:43  sean

	* client-branches/RELEASE_1_3/configure.ac: Stamp 1.4.0 beta2.

2005-08-19 10:42  sean

	* client-branches/RELEASE_1_3/test/regress/regress.c: Use warnx(3)
	  instead of warn(3) for non-system call warnings. Cleanup the
	  output to be a tad nicer too... think fping(1).

2005-08-19 10:40  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Fix callbacks so
	  they work again.

2005-08-19 10:20  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Fix multi-key get's.
	  Along the way, reduce the number of malloc(3) calls considerably
	  in the event of a multi-key request. Previously, there was one
	  malloc(3) call per server in the server list, now there's only
	  one malloc(3) call per key in the request. Eventually these bits
	  should be recycled, but aren't at the moment.

2005-08-19 09:53  sean

	* client-branches/RELEASE_1_3/test/unit/check_buffer.c: Fix up a
	  handful of errors now that the server is preallocating its
	  read/write buffers

2005-08-19 09:51  sean

	* client-branches/RELEASE_1_3/test/long_val/long_val.c: Cleanup
	  the long_val test.

2005-08-19 09:39  sean

	* client-branches/RELEASE_1_3/Makefile.am: Not that I'm bitter
	  about discovering this or anything, but, when performing tests,
	  renice the memcached(8) procs to +20 until a solution is found.
	* client-branches/RELEASE_1_3/include/buffer.h,
	  client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/buffer.c,
	  client-branches/RELEASE_1_3/src/memcache.c: Nuke all reminants
	  of recycling buffers. Better to just reset them if the buffer
	  length matches the offset.

2005-08-19 09:37  sean

	* client-branches/RELEASE_1_3/test/benchmark/benchmark.c: Move the
	  filter commands to after a struct memcache object has been
	  successfully created.

2005-08-19 08:13  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Finally commit my
	  handful of memcache server list fixes... this code isn't
	  perfect, but I'm tot he point that I need to start running w/
	  some diff's and need the code in tree. Multi-get's are pretty
	  busted right now, but everything else should work okay if you've
	  only got one server. Also integrate a few protocol syncro fixes.

2005-08-19 06:04  sean

	* client-branches/RELEASE_1_3/test/benchmark/benchmark.c: Spell
	  "Key" like "Value"

2005-08-19 06:02  sean

	* client-branches/RELEASE_1_3/configure.ac,
	  client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/buffer.c: With much pleasure and
	  irritation, I'm pleased to announce that I've removed the retry
	  count option. If you renice the memcached(8) process to +20, the
	  client ceases to have problems. Value size: 1 Num tests: 1000000
	  Test Ops per second Total Time Time per Request set 10116.708678
	  98.846377 0.000099 get 10275.019845 97.323413 0.000097 add
	  9584.252383 104.337820 0.000104 delete 11601.121606 86.198562
	  0.000086 Value size: 10 Num tests: 10000 Test Ops per second
	  Total Time Time per Request set 9722.576016 1.028534 0.000103
	  get 10315.127134 0.969450 0.000097 add 10001.140130 0.999886
	  0.000100 delete 11778.452029 0.849008 0.000085 Value size: 10
	  Num tests: 100000 Test Ops per second Total Time Time per
	  Request set 10101.245797 9.899769 0.000099 get 10296.571108
	  9.711971 0.000097 add 9838.724610 10.163919 0.000102 delete
	  11672.163478 8.567392 0.000086

2005-08-19 05:41  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Nuke some iovec
	  remains. Change the signature for mcm_server_new() to use a
	  non-const ctxt. Redefine the way that MCM_CLEAN_BUFS work by
	  having it reset a given buffer if the buffer's offset is the
	  same length as the length of the buffer. Fix various protocol
	  handling routines so that everything checks-out on my laptop...
	  now to go break things on my desktop.

2005-08-19 05:39  sean

	* client-branches/RELEASE_1_3/include/buffer.h,
	  client-branches/RELEASE_1_3/src/buffer.c: Add a handy function
	  that I used, but have since removed... but I don't mind having
	  the code hang around anyway. mcm_buf_eat_line(). It sets the
	  offset to be just beyond the end of a given line. I may remove
	  it later, but it gives me warm fuzzies right now.

2005-08-18 23:31  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Print out the
	  current line in the event of a protocol error in the delete
	  command. Only block for readability/writablility if a read/write
	  command fails. Make the readable/writable commands block until
	  data is available.

2005-08-18 22:38  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Nuke
	  mcm_retrieve_data. In its place, flush out mcm_fetch_cmd() so
	  that it handles reading data from a server correctly. Make heavy
	  use of mcm_read_fd() to solve/make this happen.

2005-08-18 22:35  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in: Add
	  TAILQ_FOREACH() to the list of macros.

2005-08-18 22:32  sean

	* client-branches/RELEASE_1_3/include/buffer.h,
	  client-branches/RELEASE_1_3/src/buffer.c,
	  client-branches/RELEASE_1_3/test/unit/check_buffer.c: Add a new
	  function, mcm_buf_remain_off() that returns the difference of
	  the offset and buffer length (not size). This function is meant
	  to be used when scanning a buffer. This function isn't to be
	  confused with mcm_buf_remain() which returns the difference of
	  the size and length, which is used when read(2)'ing data. Fixed
	  my primary bug: buffer flags are stored in the flags member, not
	  the off structure. This was quite frustrating since my eye kept
	  glossing over the problem. Unit test added.

2005-08-16 23:05  sean

	* client-branches/RELEASE_1_3/include/buffer.h,
	  client-branches/RELEASE_1_3/src/buffer.c,
	  client-branches/RELEASE_1_3/src/memcache.c: Add mcm_buf_read()
	  which read(2)'s data from a file descriptor and places the data
	  into a buffer. Fix some brain-o's in mcm_buf_realloc(). Overhaul
	  mcm_get_line() to make use of mcm_buf_read(). There are some
	  changes to mcm_retrieve_data() that need to be discarded, but
	  are going to be rewritten in a few minutes.

2005-08-16 07:39  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Add mc_global_ctxt()
	  which returns the pointer to the global context for folks that
	  want to use the mc_*() functions but sometimes need to use the
	  mcm_*() funcs

2005-08-16 07:36  sean

	* client-branches/RELEASE_1_3/test/unit/check_buffer.c: Add a host
	  of unit tests for my buffer library

2005-08-16 06:13  sean

	* client-branches/RELEASE_1_3/test/unit/Makefile.am: Don't mark
	  check_buffer as a noinst_PROGRAM that way this target isn't
	  built when doing a standard make and only gets built when using
	  the check target.

2005-08-16 06:04  sean

	* client-branches/RELEASE_1_3/test/benchmark/benchmark.c: Add
	  support to conditionally execute various tests. It's crude, but
	  will suffice for the time being.
	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Add retry limit for
	  failed read(2) attempts. This code shouldn't exist, but for the
	  time being I'll tollerate it. Add a per-server timeout. Begin to
	  fix a few IO cases.

2005-08-16 06:01  sean

	* client-branches/RELEASE_1_3/configure.ac,
	  client-branches/RELEASE_1_3/regen,
	  client-branches/RELEASE_1_3/test/Makefile.am,
	  client-branches/RELEASE_1_3/test/unit,
	  client-branches/RELEASE_1_3/test/unit/.cvsignore,
	  client-branches/RELEASE_1_3/test/unit/Makefile.am,
	  client-branches/RELEASE_1_3/test/unit/check_buffer.c: Add
	  support for check(3) - a C unit testing library that doesn't
	  suck (yet). Add a hard-retry limit before a command is resent to
	  a server. It defaults to two, but is some rather evil code that
	  should disappear soonish.

2005-08-12 15:25  sean

	* client-branches/RELEASE_1_3/src/memcache.c: When issuing a
	  delete command, only append the hold-timer if the value is
	  non-zero.

2005-08-12 15:17  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Make sure we call
	  MCM_CLEAN_BUFS() before every appropriate return call where we
	  grab a new buf. Switch to using non-blocking IO.

2005-08-12 14:23  sean

	* client-branches/RELEASE_1_3/src/buffer.c,
	  client-branches/RELEASE_1_3/src/memcache.c: Add a few missing
	  functions that the linker didn't detect were missing. Fix a
	  handful of bugs. The benchmark and buffer_recycle programs now
	  work as expected, though I can only test against memcached(8)
	  without kqueue(2) so I'm not sure if I'm missing something
	  because of the lack of performance.

2005-08-12 04:13  sean

	* client-branches/RELEASE_1_3/configure.ac,
	  client-branches/RELEASE_1_3/doc/memcache.4,
	  client-branches/RELEASE_1_3/include/_buffer.h,
	  client-branches/RELEASE_1_3/include/buffer.h,
	  client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/regen,
	  client-branches/RELEASE_1_3/src,
	  client-branches/RELEASE_1_3/src/.cvsignore,
	  client-branches/RELEASE_1_3/src/Makefile.am,
	  client-branches/RELEASE_1_3/src/buffer.c,
	  client-branches/RELEASE_1_3/src/memcache.c: OMG, I pitty the
	  person that tries to comprehend this diff. Really, I'm sorry.
	  `cvs di | wc -l` >> 2695. I really am sorry... mainly to myself,
	  diff's past this point are going to be impossible to tease
	  apart. *) Prep for a 1.4.0.b1 release... too many changes have
	  gone in here to even consider calling this 1.3.0 *) Add my
	  buffer management library that I wrote once upon a time for a
	  programming language I was working on. *) Introduce recyclable
	  buffers into struct memcache_ctxt. *) Nuke the single buffer and
	  iovec struct. Instead, we have a read(2) buffer and a separate
	  write(2) buffer. The singular circular buffer is now officially
	  dead. Long live efficient appends. cord(3) anyone? *) Move the
	  MCM_ERR*() macros into memcache.h that way I can use them from
	  my buffer routines. I don't use them as much as I should. *)
	  Move from using an iovec struct to the memcache_buf structs.
	  Ugliness and a huge, sweeping change.

2005-08-11 00:51  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Validate all keys at
	  all points of entry into the library.
	* client-branches/RELEASE_1_3/include/memcache.h.in: Force
	  memcache.h.in to be treated as a C file.

2005-07-29 04:56  sean

	* client-branches/RELEASE_1_3/configure.ac,
	  client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Release memcache
	  1.3.0 rc2. Add a method for validating keys. Keys can be changed
	  in this function, but all changes must be inline and all key
	  changes will change the master/original string. Intended purpose
	  was to catch keys with an included space without sending an
	  actual protocol error out over the wire, however language
	  authors can use this method to convert spaces to underbars. Make
	  this method for the above test a function pointer that users can
	  install. The default function uses isspace(3) and returns an
	  error at the character that contained the space (ie, if the
	  first character contains a space, the return value is one. If
	  the second character is a space, then the function will return a
	  two).

2005-07-29 01:00  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: These are not the
	  droids you're looking for. Add client side support for the
	  "listen" command. As of yet, this server-side command has not
	  been released to the public. Hide a few more of my other
	  "refresh" bits behind #ifdef SEAN_HACKS.

2005-07-29 00:53  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Create a per context
	  error context. Implement customizable return codes. Error
	  handlers can now set retcode in the error context and functions
	  that return some form of an integer will now return the value
	  stored in retcode if the value is non-zero.

2005-07-28 22:32  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Fix a fantastic
	  off-by-one bug in parsing responses. Fixed by: Howard Lee

2005-06-07 18:26  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in: Newer GCC
	  versions are giving me crap about return types being ignored on
	  integers.

2005-05-24 10:46  sean

	* client-branches/RELEASE_1_3/configure.ac: Stamp 1.3.0 beta9

2005-05-24 10:30  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Fix those god damn,
	  mother fucking protocol errors. Pardon my french. Problem was
	  due to a partial read that was looking ahead too far in its
	  buffer. Ie, the parser was looking at "\r" and peaking ahead to
	  see if it was "\r\n", and was throwing a kanipshit if it
	  couldn't find it's newline. There were a few other oddities that
	  I've addressed. I've extensively tested this now with a default
	  buffer size of one byte and have run tests with that byte side,
	  and a few others, all the way up to 16K and feel rather
	  confident that this issue has been addressed. Yay!

2005-05-24 10:21  sean

	* client-branches/RELEASE_1_3/test/long_val/long_val.c: Fix up my
	  long_val test so that it uses: sizeof("key") instead of: char
	  *key = "key"; sizeof(key);

2005-05-22 17:54  sean

	* client-branches/RELEASE_1_3/configure.ac: Test for variadic
	  macro support. Conditionalize protocol debugging on the presence
	  of variadic macros.

2005-05-22 16:51  sean

	* client-branches/RELEASE_1_3/Makefile.am: Add a quick disthook
	  that removes the regen file from public tarballs.

2005-05-21 03:59  sean

	* client-branches/RELEASE_1_3/test/buffer_recycle/buffer_recycle.c:
	  Enable some debugging output by removing the default error masks.

2005-05-21 03:51  sean

	* client-branches/RELEASE_1_3/configure.ac: Remove
	  -Wdisabled-optimization from CFLAGS. Had this in there twice and
	  only removed one of the flags. *blush*
	* client-branches/RELEASE_1_3,
	  client-branches/RELEASE_1_3/.cvsignore: Ignore distfiles

2005-05-21 03:47  sean

	* client-branches/RELEASE_1_3/configure.ac: Test to see if $CC
	  supports -std=c99, -Wpacked, and -Wdisabled-optimization. This
	  should make life easier for people still using GCC < 2.95.X.

2005-05-21 03:06  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Change the
	  timestamps in error messages to be fixed width (pad with zeros).
	  Apply the same fix provided by McCaskey to all memchr(3) calls.

2005-05-21 02:51  sean

	* client-branches/RELEASE_1_3/test/buffer_recycle,
	  client-branches/RELEASE_1_3/test/buffer_recycle/.cvsignore: Add
	  a quick .cvsignore for the buffer recycle test.

2005-05-21 02:32  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Handle the case
	  where a signal is delivered and interrupts a select(2) call.

2005-05-21 01:03  sean

	* client-branches/RELEASE_1_3/Makefile.am,
	  client-branches/RELEASE_1_3/configure.ac,
	  client-branches/RELEASE_1_3/test/Makefile.am,
	  client-branches/RELEASE_1_3/test/buffer_recycle,
	  client-branches/RELEASE_1_3/test/buffer_recycle/Makefile.am,
	  client-branches/RELEASE_1_3/test/buffer_recycle/buffer_recycle.c:
	  Add a problem test. Obtained from: Cimarron Taylor, FilmLoop

2005-05-21 00:43  sean

	* client-branches/RELEASE_1_3/configure.ac: Roll 1.3.0.beta8. Many
	  critical fixes... still not flawless... there's one more that
	  I'm still hunting before 1.3.0 rc1 gets stamped.

2005-05-21 00:33  sean

	* client-branches/RELEASE_1_3/test/long_val/long_val.c: Introduce
	  a small presentation cleanup that lets the user know if the
	  server couldn't find the given key.

2005-05-20 23:48  sean

	* client-branches/RELEASE_1_3/regen: Include a small test for
	  acinclude.m4 as a reminder to myself. Also force the copy'ing of
	  various bits. This frequently stomps on INSTALL, but I can deal
	  with that for now.

2005-05-20 23:45  sean

	* client-branches/RELEASE_1_3/test/benchmark/benchmark.c: Nuke
	  trailing whitespace.

2005-05-20 23:44  sean

	* client-branches/RELEASE_1_3/Makefile.am: Include a server on
	  port 11214 in the list of servers to start.

2005-05-20 23:32  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Remove the const
	  modifier for the memcache_ctxt argument for a handful of
	  mcm_server_add*() functions. Cast various timestamps in the
	  default error handler to int. The lack of standard time
	  representation in unix is starting to really piss me off. Add
	  more debugging code than one should ever have to wade through or
	  view.

2005-05-20 19:06  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Introduce a timeout
	  error code. Spell UNKNWON as UNKNOWN. Print out the severity if
	  it's unkown and hide behind DEBUG_MC_PROTO. Add a timestamp to
	  error messages. Add a ton of debugging info to
	  mcm_server_readable() and mcm_server_writable().

2005-05-20 16:14  sean

	* client-branches/RELEASE_1_3/configure.ac,
	  client-branches/RELEASE_1_3/test/Makefile.am,
	  client-branches/RELEASE_1_3/test/long_val,
	  client-branches/RELEASE_1_3/test/long_val/.cvsignore,
	  client-branches/RELEASE_1_3/test/long_val/Makefile.am,
	  client-branches/RELEASE_1_3/test/long_val/long_val.c: Add a test
	  that set/get's values of increasing size and verifies the
	  contents of the value.

2005-05-20 14:08  sean

	* client-branches/RELEASE_1_3/include/memcache.h.in,
	  client-branches/RELEASE_1_3/src/memcache.c: Ditch the concept of
	  a select(2) timeout. select(2) doesn't seem to be working
	  correctly at the moment when a fd is marked as non-blocking,
	  then passed to connect(2). I should be able to select(2) on the
	  fd for when its writable, but it's always timing out. As such,
	  keep the file descriptor in blocking mode until we've
	  connect(2)'ed, then switch over to using a non-blocking fd. What
	  a pain in the ass. kqueue(2) anyone? Coming soon...

2005-05-20 08:38  sean

	* client-branches/RELEASE_1_3/include/memcache,
	  client-branches/RELEASE_1_3/include/memcache.h.in: Once upon a
	  branch, far, far away, I did some repo surgery and moved a
	  header around. Now that I'm back on a branch-tag that depends on
	  this file pre-move, make a copy of the file. This may cause me
	  headaches later, but, for now it gets me rolling again.

2005-05-20 08:30  sean

	* client-branches/RELEASE_1_3/regen: MFC: Update regen to contain
	  updated auto* bits after a fink update on my laptop.

2005-05-20 08:17  sean

	* client-branches/RELEASE_1_3/src/memcache.c: Fix a small bug
	  found by John McCaskey wherein memcache(3) would block
	  improperly.

2005-05-16 15:44  sean@gigave.com

	* client-branches/RELEASE_1_3,
	  client-branches/RELEASE_1_3/src/buffer.c: This commit was
	  manufactured by cvs2svn to create branch 'RELEASE_1_3'.

2005-05-02 10:02  sean

	* client/test/benchmark/benchmark.c: Fix for non-c99 compilers.

2005-05-02 09:58  sean

	* client/Makefile.am, client/src/memcache.c: Cope with stone-age
	  compilers.

2005-05-02 09:48  sean

	* client/configure.ac: Stamp 1.3.0.beta7. This isn't a flawless
	  version, but it's the first version post-autofuck that I'd be
	  semi-comfortable pushing out. The two oustanding issues are:
	  There is an outstanding issue when using benchmark in that after
	  a prolonged period of time, the client begins to ping-pong
	  between select(2) and read(2). There's also an oustanding issue
	  where it looks as though select(2) with a NULL timeout doesn't
	  seem to ever return. Regardless, the performance times are down
	  to nominal levels again. Key size: 50 Num tests: 1000 Test Ops
	  per second Total Time Time per Request set 8651.117724 0.115592
	  0.000116 get 8695.576560 0.115001 0.000115 add 8441.881864
	  0.118457 0.000118 delete 9559.315553 0.104610 0.000105

2005-05-02 09:43  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c: *)
	  Replace -DPEDANTIC with --enable-mc-proto-debug's DEBUG_MC_PROTO
	  *) Break the API by changing the args of
	  mc[m]?_server_disconnect(). I may revisit this, but removing
	  struct memcache from the arg list is the right thing to do since
	  none of its downstream consumers used struct memcache. *) Add a
	  few internal functions, mcm_server_(readable|writable) to begin
	  to centralize handling of file-descriptor related activities.
	  The various calls to select(2) floating around were giving me
	  the creaps. *) Took the ugly-stick and beat the hell out of my
	  code by adding scores of DEBUG_MC_PROTO bits. *) Centralize
	  calls to close(2) in mcm_server_disconnect().

2005-05-02 09:37  sean

	* client/Makefile.am: The test target depends on the check target.

2005-05-02 06:00  sean

	* client/test/benchmark/benchmark.c: A few fixups for benchmark.c
	  now that the key is a char* instead of a char[]. sizeof() seems
	  to think the variable is of a different size. Imagine that.
	  *grin*

2005-05-02 05:59  sean

	* client/Makefile.am, client/configure.ac: Automatically build a
	  ChangeLog and include it in distributions. Reintroduce the
	  'reset' target which resets test versions of memcached. Change
	  the automake(1) target from 'memcache' to 'libmemcache' for the
	  sake of building distributions. Add a test for memcached(8).

2005-05-02 05:20  sean

	* client/Makefile.am: Fix small nit in auto* build process. Don't
	  use test/* as a subdir, just list test.

2005-05-02 05:19  sean

	* client/regen: In the least elegant way possible, enable building
	  of the autofuck bits on my powerbook.

2005-05-02 05:17  sean

	* client/configure.ac: Fix small nit in struct iovec detection on
	  systems that don't include prerequisites.

2005-05-02 04:30  sean

	* client/Makefile.am, client/test/Makefile.am: Add a few targets
	  to simplify running of tests.

2005-05-02 03:25  sean

	* client/test/benchmark/benchmark.c,
	  client/test/regress/regress.c: Fix up a few warnings with
	  various test programs.

2005-05-02 03:23  sean

	* client/configure.ac: Introduce all of the various auto* changes
	  necessary to suppor the previous commit message. Add
	  --enable-debug to turn on debugging CFLAGS. Add
	  --enable-default-buf-size to configure the default buffer/read
	  size buffer. Add --enable-hash-type which lets the client side
	  hash type be changed easily at compile time. Valid values are
	  "crc32", "elf", or "perl" Add --enable-mc-iovec to
	  enable/disable the use of memcache's internal struct iovec.
	  Autofuck should automatically detect the need/use of this, but,
	  it should be automatically enabled on nearly all POSIX systems
	  automatically. Add --enable-mc-proto-debug to the mix. It
	  doesn't do anything at the moment, but will in a matter of
	  hours. Joy. Add --enable-profiling turns on profiling CFLAGS.

2005-05-02 03:12  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Replace static definitions of version numbers with autofuck
	  macro's. This should reduce file churn slightly. Make use of
	  some auto* magic and replace various function obfuscation bits
	  with some md5(1) magic... or other evilness in the absense of
	  md5(1). Nuke various static compilation #define's in favor of
	  some goo that's going to be made evident in the following commit
	  to configure.ac. Introduce a new integer into struct
	  memcache_ctxt to replace the use of the global errno(2) value.
	  When an atomic increment/decrement command is executed, the
	  return value will be set to zero and ctxt->errnum will be set to
	  ENOENT.

2005-05-02 02:44  sean

	* client/INSTALL: Update the installation instructions to reflect
	  the use of autofuck instead of pmk(1).

2005-05-02 02:43  sean

	* client, client/.cvsignore, client/include,
	  client/include/.cvsignore: Update the list of files to ignore

2005-05-01 23:13  sean

	* client, client/.cvsignore, client/Makefile.am,
	  client/Makefile.pmk, client/configure.ac, client/doc,
	  client/doc/.cvsignore, client/doc/Makefile.am, client/include,
	  client/include/.cvsignore, client/include/Makefile.am,
	  client/m4, client/m4/.cvsignore, client/m4/Makefile.am,
	  client/pmkfile, client/regen, client/src, client/src/.cvsignore,
	  client/src/Makefile.am, client/src/memcache.c, client/test,
	  client/test/.cvsignore, client/test/Makefile.am,
	  client/test/benchmark, client/test/benchmark/.cvsignore,
	  client/test/benchmark/Makefile.am,
	  client/test/benchmark/benchmark.c, client/test/regress,
	  client/test/regress/.cvsignore, client/test/regress/Makefile.am:
	  First pass at switching from pmk(1) to autofuck and friends.

2005-04-30 22:15  sean

	* client/test/regress/regress.c: In one case, use 'localhost'
	  instead of '127.0.0.1'

2005-04-30 22:14  sean

	* client/Makefile.pmk, client/test/benchmark,
	  client/test/benchmark/benchmark.c: Add a benchmark program used
	  to test requests per second. The server list is still
	  hard-coded, however, but it's a useful start for debugging
	  performance calls. I need to find a performance analysis program
	  that is useful for IO intensive programs, other than gprof(1).
	  Until then, this is helpful.

2005-04-30 20:26  sean

	* client/include/memcache/memcache.h.in: Commit miss for warnings
	  when debugging is turned was.

2005-04-30 20:17  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Make memcache(3) warning free.

2005-04-30 01:07  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c: Ah
	  ha! Strangeness in latency land. Funny people are these...
	  people with green eyes, whirring squabble sounds that look like
	  funny blinking machines with wires... evil are they. But that
	  wasn't the problem. If the buffer size was too small, it would
	  result in a tiny latency from a second read(2) call as well as
	  potentially an additional malloc(3) which seems to have
	  irritated the overly hyper performance sensitive folk. *grin*
	  Submitted by: Adam Michaels

2005-04-22 19:41  sean

	* client/src/memcache.c: Move the select(2) call to after the
	  connect(2). Dumb, dumb, dumb, dumb. errno = ENEEDSLEEP;

2005-04-21 23:29  sean

	* client/src/memcache.c: Use non-blocking IO + select(2) - if it's
	  available - to implement a connection timeout.
	  setsockopt(SO_RCVLOWAT) doesn't handle this.

2005-04-21 23:03  sean

	* client/src/memcache.c: Fix a bug that would pop up if no servers
	  were available to connect to.

2005-04-21 22:52  sean

	* client/include/memcache/memcache.h.in: Push out a new release
	  with the minor fixes that I've accumulated. Enter beta5. And
	  there was much rejoicing.

2005-04-21 22:28  sean

	* client/src/memcache.c: When incrementing/decrementing a key, if
	  the key is not found, return 0 *and* set errno to ENOENT that
	  way decrementing from 1 to 0 can be done successfully and
	  clients can detect success from failure. On machines that
	  resolve a hostname to an IPv6 address, but the host doesn't
	  support IPv6, silently continue. It is common for machines to
	  have an entry in hosts(5) for localhost that resolves to an IPv4
	  and IPv6 address. On machines configured like this, people can
	  now resume using 'localhost' instead of the IPv4 address
	  127.0.0.1. Set a receive timeout to limit times for connect(2)
	  failures.

2005-04-20 00:26  sean

	* client/src/memcache.c: If we're performing a multi-get,
	  short-circuit the key delegation if there is only one server and
	  execute the get request immediately.

2005-04-20 00:03  sean

	* client/src/memcache.c: Fix multi-get's internal flags. While the
	  data was being returned correctly, the internal flags weren't
	  being set. This had the effect of causing mc[m]?_res_found() and
	  other like functions to fail or return incorrect values. Now
	  (after a bit of testing), push beta4 out the door.

2005-04-19 23:23  sean

	* client/src/memcache.c: Performance tweak. Don't hash a value
	  that's already been hashed.

2005-04-19 21:14  sean

	* client/pmkfile: Release 1.3.0.beta4

2005-04-19 20:47  sean

	* client/src/memcache.c: Don't copy _flags when doing a multi-get.
	  Instead, zero the flags out.

2005-04-19 20:46  sean

	* client/test/regress/regress.c: Fix a memory leak that was picked
	  up in valgrind.
	* client/pmkfile: Set the CFLAG -pg when we're in debug mode. This
	  should discourage most people from using debug where not
	  necessary, as well as it'll leave behind nice droppings.

2005-04-19 16:30  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add a trace debug message that executes at the INFO level. Handy
	  for debugging.

2005-04-19 16:04  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  mcm_get(3) now queries the correct servers in multi-get
	  requests. memcache(3) now performs correctly with multi-get
	  requests. Previously multi-get would only work on single
	  servers. Single-get requests always worked, however.

2005-04-19 06:11  sean

	* client/src/memcache.c: Fix error handling... I'm not adding
	  '...' support for memcache(3)'s error handling for a while, I
	  just want to get 1.3 out the door. Almost there...

2005-04-19 06:08  sean

	* client/src/memcache.c: Do a better job of checking the return of
	  strtol(3) in the event that the data being returned is zero.
	  This should quell the remaining strtol(3) errors that folks have
	  seen. Entirely my fault: I should've done a better job of
	  checking the return values earlier or not used endptr at all. In
	  mcm_server_activate_all(3), only call mcm_server_activate(3) on
	  servers that are down. All other server conditions are ignored.
	  Callers can still explicitly call mcm_server_activate(3) on
	  their own, though I can't promise that there won't be an info
	  message generated due to incorrect library use.

2005-04-19 00:38  sean

	* client/src/memcache.c: Install a default error function handler
	  by default.

2005-04-18 20:28  sean

	* client/include/memcache/memcache.h.in: Roll 1.3 beta2

2005-04-18 20:11  sean

	* client/src/memcache.c: Only call the error handler if an error
	  handler has been set.

2005-04-15 06:12  sean

	* client/src/memcache.c: Ensure that all strings returned by
	  memcache(3) are null-terminated. Pointed out by:
	  cimarron@taylors.org

2005-03-29 20:10  sean

	* client/src/memcache.c: I'd give my left nut to have time_t
	  defined as the same width on all systems. Cast accordingly.
	  *kicks OS-X for not being fully compliant with FreeBSD*

2005-03-28 20:35  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Promote a handful of warnings to errors (library calls). Promote
	  the test message to a warning that way people will see it by
	  default if they invoke the test handler. Ignore NOTICE and INFO
	  messages by default. Push out 1.3.0.beta2

2005-03-28 20:19  sean

	* client/src/memcache.c: Ignore all INFO level messages by default.

2005-03-28 14:45  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c: *)
	  Drop const from a bunch of functions that were passed
	  memcache_ctxt. Now using the memcache_ctxt for passing around a
	  backup copy of the last command send to the server. This is
	  necessary in the event that a server dies and the command needs
	  to be reissued to another server. *) Change the magic hash value
	  from 42 to 0. My engineering mindset finally over took my sense
	  of humor and desire to plant eggs (maybe this is just a
	  counter-reaction to easter, who knows). *) Consolodate looking
	  up of valid servers and connecting to servers in
	  mcm_server_connect_next_avail(), which will exhaust a server
	  list attempting to find a valid memcache server. *) If read(2)
	  or writev(2) fail when communicating with a server, memcache(3)
	  will no reconnect to the same server, or find another server
	  automatically. *) Change a bunch of MCM_(ERR|WARN)() macros to
	  their X counterpart since there is no errno attached to the
	  warning.

2005-03-27 23:24  sean

	* client/src/memcache.c: Cleanup handling of read(2) in
	  mcm_retrieve_data() such that it will now reconnect if necessary.

2005-03-27 23:00  sean

	* client/src/memcache.c: When read(2)'ing data from the client: *)
	  handle EINVAL by reconnecting (though this shouldn't ever
	  happen) *) And throw a few asserts for EBADF, EFAULT, as well as
	  for the default case

2005-03-26 23:52  sean

	* client/src/memcache.c: Ensure that we're using non-blocking IO
	  when we start mcm_retrieve_data(). Put place holders for more
	  grainular error handling for return codes from writev(2) and
	  read(2). More on that later today, hopefully.

2005-03-26 23:44  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add a new error flag, MCM_ERR_MC_RECONN. It's an INFO level
	  notice that gets thrown when a server connection is
	  re-established.

2005-03-26 23:40  sean

	* client/src/memcache.c: Move calls of mcm_server_block() into the
	  routines that are actually doing the IO (ie: mcm_get_line() and
	  mcm_server_send_cmd()). Reset errno after we return from
	  executing the error handler. Nuke #warning's. They were just too
	  obnoxious and I'd rather have only two lines of warnings instead
	  of six from gcc about #warning. Stop calling MCM_CSTRLEN() on
	  pointers. sizeof() is fickle and it doesn't dereference a void *
	  to figure out the size of a string. Sucks, but better than
	  having the application hang because it thinks "stats\r\n" is the
	  same length as a pointer, and not 8 bytes long.

2005-03-26 23:01  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Revamp the private function mcm_err() to include a suggested
	  error level. Consolidate all writev(2) calls into
	  mcm_server_send_cmd(). Handle ECONNRESET in mcm_get_line(). If a
	  client has a long running connection to a memcache server and
	  the memcache server resets, the client no longer deactivates the
	  server in this case. Instead, the client resends the last
	  command issued, and attempts to read(2) the response. If it
	  fails a second time, then it deactivates the server. Add a few
	  #warning bits to tell users to ignore the warnings. Mind you,
	  these #warning snippets cause more output than the two remaining
	  warnings, but until I figure out a way to tell gcc(1) to fuck
	  off and die, I'll leave these in here for now. Convert
	  mcm_server_stats() to using mcm_server_send_cmd().

2005-03-26 19:48  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add mc[m]?_server_add5() which is the same as mcm_server_add4()
	  except that it takes an optional length argument. Add
	  mc[m]?_strnchr() which behaves the same as strchr(3) except that
	  it also takes a length arg. Implement mc[m]?_server_add4() in
	  terms of mcm_server_add5().

2005-03-26 18:55  sean

	* client/src/memcache.c: Make mcm_err_func() be consistent with
	  what I'm telling clients to use: return int32_t.

2005-03-26 18:44  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Futz with the function signatures and initialization routines
	  for error handlers.

2005-03-26 18:28  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Correct an interface oversight and obfuscate/hide the interface
	  to error handlers behind some predefined macros, similar to what
	  I did for the call back interface.

2005-03-26 18:11  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add mc[m]?_err_filter_(add|del|get|test)(). This lets clients
	  ignore error messages from various error levels. I'm pondering
	  adding a second filter for error codes, but haven't done so yet.

2005-03-26 03:28  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add mcErrSetup(), mcErrGet(), and mcErrSetupCtxt(). Missing
	  those was something of a glaring oversight for the non-context
	  users.

2005-03-26 03:10  sean

	* client/src/memcache.c: Replace a few left over abort(3) calls
	  with their appropriate MCM_ERR*(*) counterpart.

2005-03-26 02:59  sean

	* client/include/memcache/memcache.h.in, client/pmkfile,
	  client/src/memcache.c: Apologizes in advance for the large
	  commit. *) Introduce mc_const. It lets me conditionally
	  const'ify certain struct headers without undef'ing every const
	  declaration. Useful for making sure client applications do the
	  right thing. *) Bump the version number to 1.3.0. I reserve the
	  right to change anything before an official announcement,
	  however. *) Define a few severity levels for error logging:
	  NONE, INFO, NOTICE, WARN, ERR, and FATAL. They're prefixed with
	  either MCM_ERR_LVL_ or MC_ERR_LVL_, depending on your
	  application's coding preference. *) Add a host of error codes,
	  22 to be specific. See memcache.h for the actual values. *) Add
	  struct memcache_err_ctxt. This context is passed to error
	  handlers when an error occurs. See memcache.h for details. *)
	  Add a new member to struct memcache_ctxt, an mcErrFunc. There is
	  only one per context, but it is thread safe and lets callers
	  catch any error and act accordingly. *) Add mc[m]?_err_test()
	  which tests the registered error handler. *) Added an
	  interesting and potentially harmful feature: memcache(3)'s very
	  own struct iovec. I did this to quell the various warnings when
	  assigning const char *'s to iovec.iov_base (nearly always
	  defined as either void * or char *, not const _whatever_). I
	  have a runtime test in place, but it's not a compile time test.
	  For now, I've enabled it by default, but it can be easily turned
	  off. *) Hide various personal extensions behind #ifdef's *) Add
	  a handful of MCM_ERR*() and MCM_WARN*() macros to aid in
	  invoking an error response. *) Invoke user error handling
	  routines via mcm_err(). It bundles up all of the relevant
	  information, creates struct memcache_err_ctxt, and passes it to
	  the function. *) Add a default error handler. *) Replace all
	  warn(), warnx(), err(), errx(), and abort() calls with their
	  respective macro that uses the error handler.

2005-03-22 04:59  sean

	* client/include/memcache/memcache.h.in, client/pmkfile: Roll out
	  1.2.4 as a bug fix release for various brain-o's and bugs. As
	  things stand, however, seems as though the lib is working well
	  for most people... now to get 1.3 out the door w/ its much
	  needed error handling.

2005-03-22 04:56  sean

	* client/src/memcache.c: size_t's format should be %lu, not %u.
	  Why can't everyone use compilers that support the %z format
	  modifier?

2005-03-22 04:42  sean

	* client/src/memcache.c: Fix incorrect handling of buffers often
	  caused by slow network connections (often seen on buggy linux
	  machines or OS-X which doesn't have a functioning TCP_NOPUSH).
	  Submitted by: Richard Cameron <camster@citeulike.org>

2005-03-22 04:34  sean

	* client/src/memcache.c: Fix a memory leak and segfault resulting
	  from my moving of buffers to be per-server specific struct from
	  the per-memcache struct. Patch by: John McCaskey

2005-03-22 04:17  sean

	* client/INSTALL: Add a bit of errata for gcc 2.X.

2005-03-22 04:06  sean

	* client/test/regress/regress.c: Add note pointing out for
	  developers to use strlen() instead of MCM_CSTRLEN(). Prompted by
	  gripe from: Andy Powell

2005-03-22 03:45  sean

	* client/include/memcache/memcache.h.in: Shuffle around the order
	  of the memcache ctxt

2005-01-29 20:42  sean

	* client/include/memcache/memcache.h.in: Add a void *misc pointer
	  to struct memcache_server. Turns out this was the only structure
	  missing this nugget. Quite handy when it comes to embedding
	  memcache(3) in other languages.

2005-01-24 07:36  sean

	* client/include/memcache/memcache.h.in, client/pmkfile: Stamp
	  1.2.3. This release only includes compile fixes for Leenox
	  *cough*hoplessly broken platform*cough* and is functionally
	  identical to 1.2.1.

2005-01-24 07:22  sean

	* client/INSTALL: /libmemcache(3)/memcache(3)/

2005-01-24 07:21  sean

	* client/src/memcache.c: I think the warning message says it best:
	  #warning "Working around busted-ass Linux header include
	  problems: use FreeBSD instead" #warning "http://www.FreeBSD.org/
	  - you won't regret it"

2005-01-20 18:21  sean

	* client/include/memcache/memcache.h.in: Stamp 1.2.2 in
	  memcache.h's version information.

2005-01-20 18:14  sean

	* client/pmkfile: Stamp 1.2.2. There is no functional difference
	  between 1.2.1 and 1.2.2, only building of the program has been
	  "fixed" to work with broken versions of pmk(1).

2005-01-20 18:13  sean

	* client/pmkfile: In the interim, work around a bug in pmk 0.9.0
	  and reduce the size of my comment block by replacing my
	  copyright notice with a reference to COPYING.

2005-01-20 18:12  sean

	* client/COPYING: Add the license used for this software (MIT
	  License).

2005-01-20 17:59  sean

	* client/pmkfile: s/CHECK_INCLUDE/CHECK_HEADER/g
	  http://sourceforge.net/mailarchive/message.php?msg_id=10609509

2005-01-20 09:03  sean

	* client/pmkfile: Stamp 1.2.1 which fixes a few key brain-o's in
	  the memory free(3)'ing dept.

2005-01-20 08:54  sean

	* client/src/memcache.c: Fucking Linux/GPL/gcc, why can't it just
	  curl up and die? Change %zu and %hu to just %u. This adds a
	  warning that *should* be reasonably harmless. memcache.c:2192:
	  warning: unsigned int format, size_t arg (arg 4)

2005-01-20 08:33  sean

	* client/test/regress/regress.c: Plug small memory leak in
	  regression tests. Pointed out by: John McCaskey

2005-01-20 08:23  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c: *)
	  Add flag to note the need to free a key when it's passed and
	  strdup()'ed instead of passed by reference (ie, mcm_req_add() vs
	  mcm_req_add_ref()). *) Use mcm_req_add_ref() in mcm_aget() and
	  mcm_arefresh() instead of mcm_req_add(): no sense in
	  mcmStrdup()'ing a string that we know isn't going to change.
	  Unfortunately this introduces a warning, but the code is correct
	  because GCC can't see the logic and use of the flag in struct
	  memcache_res's _flags member.

2005-01-11 11:23  sean

	* client/include/memcache/memcache.h.in: Add a void *misc pointer
	  to struct memcache_req and struct memcache_res.

2005-01-11 11:16  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Move various buffer orriented struct memcache members to struct
	  memcache_server in preparation for support of the non-blocking
	  IO scatter/gather multi-get scheme described on the memcached@
	  mailing list. This transion deferrs initialization of the buffer
	  from creation of struct memcache, to the creation of struct
	  memcache_server *and* increases the memory overhead to be:
	  buffer size * number of servers. The default buffer is still 2KB.

2005-01-10 21:34  sean

	* client/src/crc32_table.h, client/src/memcache.c: For the longest
	  time, this gnarly crc32 prebuilt table has been a rather large
	  eye sore. Fix by moving said table into it's own header file and
	  include accordingly. With crc32 table (and it's hex values
	  gone), continue my aspell(1) sweep and tidy up some type-o's.
	  This is what I get for either having brain-o's, or for typing
	  with a largish bandage on my index finger. I'll be quite happy
	  when I'm no longer EDOGBYTE errors (pun intended). *sigh*

2005-01-10 10:31  sean

	* client/src/memcache.c: Peremptev spel chek run,

2005-01-10 10:25  sean

	* client/include/memcache/memcache.h.in: Run aspell(1) over
	  memcache.h. Prompted by: Evan Martin's 's/strickly/strictly/'
	  reminder. :)

2005-01-09 23:40  sean

	* client/pmkfile: Release 1.2.0

2005-01-09 23:34  sean

	* client/Makefile.pmk, client/pmkfile: Update make release targets
	  to use pmk(1) detected paths for variables. This shouldn't
	  effect anyone byt me since the various binaries aren't required
	  for anything but release engineering.

2005-01-09 22:58  sean

	* client/Makefile.pmk: Update release target to rm(1) target via
	  sudo(1).

2005-01-09 09:08  sean

	* client/Makefile.pmk: Spell cvs2cl.pl as cvs2cl. I should have
	  pmk detect this, but I'm too lazy to fix this now.

2005-01-09 09:03  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Don't hash to find the remote server when there is only one live
	  server. This should shave a few CPU cycles for folks who only
	  have one server up. Add a new function, mc[m]?_req_add_ref().
	  mc[m]?_req_add_ref() behaves identically to the way
	  mc[m]?_req_add() used to. mc[m]?_req_add() now mc[m]?_strdup()'s
	  the key to be safe. mc[m]_req_add_ref() uses a reference instead
	  of a copy. This was a performance/safety issue that I felt was
	  best to err on the safe side unless someone goes out of their
	  way to understand the dangers/benefits of the _ref() version.

2005-01-04 21:35  sean

	* client/Makefile.pmk, client/include/memcache/memcache.h.in,
	  client/pmkfile, client/test/regress/regress.c: Copyright bump:
	  add 2005

2005-01-04 20:44  sean

	* client/test/regress/regress.c: Use three servers again and make
	  use of mc_server_add4() to make this possible again.

2005-01-04 20:43  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add mc[m]?_server_add4(). Takes a host argument in the form of:
	  "127.0.0.1:11211". Should be useful for a number of different
	  applications, not the least of which is config files. Add
	  mc[m]?_strndup(). Copies at most len bytes and adds a '\0'
	  padding character. Handy. Wish this was a part of the standard C
	  string lib. mcm_strdup() is now implemented in terms of
	  mcm_strndup(). Change mc[m]?_str[n]?dup() to use the atomic
	  malloc instead of the normal malloc. Just an
	  optimization/correctness thing for GC'ed environments. It's
	  starting to smell alot like release time...

2005-01-04 20:14  sean

	* client/include/memcache/memcache.h.in: Fix the callback
	  interface (was only broken for a revvision) and prevent future
	  brokeness by changing the signature to be defined in terms of
	  the existing MD5 macros. I should've done that from moment one.

2005-01-04 20:12  sean

	* client/Makefile.pmk: Add .h as a build dependency for .c files.
	  Add memcache.[ch] as a build dependency for the regression tests.

2005-01-04 20:01  sean

	* client/include/memcache/memcache.h.in: Add a "void *misc" struct
	  member to struct memcache. Primary use is for embedding
	  memcache(3) in other programming languages. Please note that
	  memcache(3) will never touch this pointer for any purpose. As
	  promised, change the md5's for the callback interface. Reorder
	  some of struct memcache and tweak wording.

2005-01-04 19:48  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add a few version functions: mc[m]?_reldate() Returns a numeric
	  version of the date the library version was released: 20050104
	  mc[m]?_vernum() Returns a numeric version of the library: 010200
	  mc[m]?_version() Returns a string version: "1.2.0" Add a few
	  matching #define's too: MEMCACHE_VER MEMCACHE_VERNUM
	  MEMCACHE_RELDATE in the event that someone has cpp(1) skills.

2005-01-04 00:41  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Expose mc[m]?_server_new() to the public. Another useful
	  function for OOP language wrappers. Change the default inits
	  from memcache_server_new() to memcache_server_add3(). This may
	  bite a few people who want a default timeout that's non-zero for
	  all servers, but one. This should be rare though.

2005-01-04 00:15  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Expose mc[m]?_strdup() as public APIs since it seems as though
	  non-braindamaged versions exist with regards to memory context
	  sensitive APIs (ie, ruby).

2005-01-03 22:27  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add a new way of adding a server via: int mcm_server_add3(const
	  struct memcache_ctxt *ctxt, struct memcache *mc, struct
	  memcache_server *ms); int mc_server_add3(struct memcache *mc,
	  struct memcache_server *ms); Useful when writing OOP language
	  wrappers. mc[m]?_server_add2() is implemented in terms of
	  mc[m]?_server_add3().

2004-12-29 19:58  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Make mc[m]?_server_free() public. No one should use this, but
	  it's handy for my ruby bindings, so someone else may find a
	  use/need for this as well.

2004-12-29 18:18  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Further my quest to piss off as many users as possibly by
	  changing the API for various memory context functions by
	  removing the need for a strdup(3)-like function. This was stupid
	  and I should've provided a static version from day one. Correct
	  this oversight. I wonder what other API changes I should make
	  before the 1.2.0 release to get this over with as soon as
	  possible.

2004-12-25 02:34  sean

	* client/src/memcache.c: When creating a new memory context, don't
	  check to see if an atomic malloc function was provided. Instead
	  rely on setup ctxt to check to see if one was provided and rely
	  on its logic instead. If an atomic malloc function is not
	  specified, use the non-atomic malloc function. Atomic vs
	  non-atomic malloc functions only matter when using memcache(3)
	  in a GC context.

2004-12-25 02:02  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add mc[m]?_server_disconnect() and
	  mc[m]?_server_disconnect_all(). Internally, make use of the
	  static function memcache_server_init().

2004-12-25 02:00  sean

	* client/Makefile.pmk: If we have to rebuild the Makefile, throw
	  in the debug flags.

2004-12-25 01:58  sean

	* client/test/regress/regress.c: Disconnect from the server before
	  we loop. No need to do this, but I want this test in here to
	  make sure things work right.

2004-12-25 01:35  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Continue my quest to piss of users and rename
	  mc[m]?_find_server() to mc[m]?_server_find(). Apologies to all
	  for this, but I'd rather get this kind of consistency work in
	  now as opposed to gimping along an API that isn't 100% right.

2004-12-25 01:31  sean

	* client/Makefile.pmk: Have the distclean target actually remove
	  release targets.

2004-12-23 22:34  sean

	* client/binary_protocol.txt, client/doc, client/doc/memcache.4:
	  Add memcache.4, an nroff replacement of the binary protocol
	  document. Granted the mackup is terrible and should be replaced
	  with proper mdoc(7) markup. That'll probably happen when I add
	  memcache.3 to the mix. document. Granted the mackup is terrible
	  and should be replaced with proper mdoc(7) markup. That'll
	  probably happen when I add memcache.3 to the mix. document.
	  Granted the mackup is terrible and should be replaced with
	  proper mdoc(7) markup. That'll probably happen when I add
	  memcache.3 to the mix. document. Granted the mackup is terrible
	  and should be replaced with proper mdoc(7) markup. That'll
	  probably happen when I add memcache.3 to the mix.

2004-12-22 22:37  sean

	* client/Makefile.pmk, client/pmkfile: Change the way I handle
	  release numbering so it's all in one file.

2004-12-22 22:22  sean

	* client/pmkfile: Bump library version to 1.2.

2004-12-22 22:21  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Piss more people off (sorry!!!), but hopefully not. Rename
	  mc[m]?_deactivate_server() to mc[m]?_server_deactivate(). Add
	  mc[m]?_server_activate_all() which iterates through all
	  available servers and activates servers disabled servers.

2004-12-22 21:49  sean

	* client/Makefile.pmk: Only remove a release tarball if one
	  exists. This saves me from typing in my password for sudo(1)
	  when there's nothing there.

2004-12-22 21:43  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Change the API for mc[m]?_flush_all(). This is a better
	  interface and more flexible. People should be able to figure out
	  a server on their own using the existing API: no sense in
	  providing duplicate functionality at the expense of consistency.

2004-12-22 21:23  sean

	* client/include/memcache/memcache.h.in, client/pmkfile: Remove
	  external dependency on sys/queue.h by including the necessary
	  TAILQ_* macros in memcache.h. This brings with it the BSD
	  license, which isn't a big deal, but not ideal. Given I'm only
	  using the TRASHIT, TAILQ_HEAD, TAILQ_ENTRY, TAILQ_FIRST,
	  TAILQ_NEXT, TAILQ_INIT, TAILQ_INSERT_TAIL, and TAILQ_REMOVE
	  macros, I really should just replace this with a cleanroom
	  implementation... problem being the source code compatibility
	  for folks may not be so friendly. Remove detection for
	  sys/queue.h now that it's no longer needed.

2004-12-21 18:32  sean

	* client/binary_protocol.txt: Add a TODO list of things left to
	  accomplish. Add a Name Space ID to STORE and FETCH Packets. Make
	  the Client Flags required in FETCH Packets. Add an error code
	  signifying that a virtual bucket doesn't exist on this server
	  (ie, you've got the wrong server). Add a FLUSH Packet.

2004-12-21 06:04  sean

	* client, client/.cvsignore: Ignore the regress program.

2004-12-20 21:54  sean

	* client/test/regress/regress.c: Fix bug in regression tests.
	  Guess I should've read the warning I wrote in memcache.h.

2004-12-20 21:53  sean

	* client, client/.cvsignore: Add ChangeLog to the list of ignored
	  files

2004-12-20 21:52  sean

	* client/Makefile.pmk: Dynamically create a changelog for every
	  release.

2004-12-20 21:51  sean

	* client/ChangeLog: Keeping a ChangeLog in CVS was a stupid idea.

2004-12-20 21:50  sean

	* client/test/regress/regress.c: Add a set of callback tests. Use
	  MCM_CSTRLEN() instead of strlen(3).

2004-12-20 21:47  sean

	* client/ChangeLog: Add an announcement for when I added the
	  ChangeLog.

2004-12-20 21:46  sean

	* client/ChangeLog: Add a ChangeLog. Requested by: many, many,
	  thousands - scores even! - of people.

2004-12-20 21:41  sean

	* client/include/memcache/memcache.h.in: Fix up some comments.

2004-12-20 21:38  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c: *)
	  Add a globally defined MCM_CSTRLEN() macro that uses sizeof()
	  instead of strlen() to find the size of a string. This only
	  works for const char * strings that are compiled in to the
	  binary (ie, do: MCM_CSTRLEN("foo") but don't do:
	  MCM_CSTRLEN(key)). *) Add fetch callback functionality. All
	  get/refresh commands can now execute a callback. This adds zero
	  overhead in the event that a user doesn't want callbacks.
	  Performance is the name of the game here. See the following
	  commit to regress.c for an example. Callbacks are registered
	  through the mc[m]?_res_register_fetch_cb() function. *)
	  Internally, use MCM_CSTRLEN() instead of CSTRLEN(). *) Set the
	  attempted bit after we call mcm_retrieve_data(). *) Add stats
	  for refresh bits.

2004-12-20 20:43  sean

	* client/Makefile.pmk: Only run the regression test suite once,
	  not 1000 times. If someone wants to, they'll run the command by
	  hand.

2004-12-20 20:38  sean

	* client/test/regress/regress.c: Fixup regress.c to match my
	  coding standards. Various whitespace fixes, remove a global
	  variable, etc.

2004-12-20 18:36  sean

	* client/include/memcache/memcache.h.in: Um, our interface has
	  sufficiently diverged from libxml, so I want to avoid explicitly
	  saying we're using a similar model to libxml. We were, but
	  aren't any more. Only CVS will know the whole truth.

2004-12-20 18:28  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add mc[m]?_res_attempted(), mc[m]?_res_found().
	  mcm_res_attempted() returns 1 if the given response object has
	  been through a get attempt. mcm_res_found() returns 1 if a given
	  response object contains valid data. Minor whitespace cleanup
	  from John McCaskey's patches. Shuffled a ton of the header
	  around to allow for the next commit, a callback interface.

2004-12-20 18:22  sean

	* client/INSTALL, client/pmkfile: Rename the switch debug_cflags
	  to just debug. pmk -e debug is much more sane.

2004-12-18 07:51  sean

	* client/binary_protocol.txt: Point the reader in the direction of
	  the STORE Packet when reading about the various bits in the DATA
	  Packet. Per gripe from: Richard 'toast' Russo <russor@msoe.edu>

2004-12-18 07:41  sean

	* client/test/regress/regress.c: Add additional regression tests
	  from John McCaskey. These are most helpful and will hopefully be
	  added to and will keep folks out of trouble.

2004-12-18 07:40  sean

	* client/src/memcache.c: Small fix from John McCaskey that allows
	  multi-get's to populate their appropriate struct. As things
	  were, all data was ending up in the first key. This problem has
	  only existed since rc1 and wasn't present in the past.

2004-12-17 01:00  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Change MC_RES_* to MCM_RES_*. Alias MC_RES_* to its MCM_RES_*
	  counter part. This change was done for consistencies sake so
	  that people can search for mc_* or MC_* in their code and
	  replace it safely with mcm_* or MCM_*.

2004-12-17 00:51  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Add mcMemFreeCtxt(3).

2004-12-16 23:20  sean

	* client/src/memcache.c: Remove useless check.

2004-12-16 22:55  sean

	* client/Makefile.pmk: Add a sudo when removing a release.

2004-12-16 22:53  sean

	* client/INSTALL: Add a note about building with debug flags

2004-12-16 22:52  sean

	* client/Makefile.pmk: Move release name further up in
	  Makefile.pmk and make distclean remove a released local copy.

2004-12-16 22:49  sean

	* client/include/memcache/memcache.h.in: Crap, type-o. Forgot a
	  '*' in a function pointer.

2004-12-16 22:46  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c: *)
	  Add mcMallocAtomic back to struct memcache_ctxt. Now that I know
	  what "atomic malloc" is supposed to do, make heavy use of it to
	  speed up the case where a calling program has garbage collection
	  (ie, boehm). *) Convert the appropriate calls from mcMalloc() to
	  mcMallocAtomic(). Basically do this in all places where we're
	  not allocating a struct. *) This breaks API, so it's best to get
	  this out of the way where possible.

2004-12-16 22:25  sean

	* client/Makefile.pmk: Add a few patterns to the distclean target.

2004-12-16 22:17  sean

	* client/pmkfile: When debugging, having the -g flag in the list
	  of CFLAGS is damn handy.

2004-12-16 22:16  sean

	* client/binary_protocol.txt: Various updates to the binary
	  protocol document.

2004-12-16 22:15  sean

	* client, client/.cvsignore: Add a few files to ignore
	  (.emacs.desktop, .gdb_history)

2004-12-16 22:14  sean

	* client/test, client/test/regress, client/test/regress/regress.c:
	  Add a basic regression test suite.

2004-12-16 22:12  sean

	* client/include/memcache/memcache.h.in: Update a few comments
	* client/Makefile.pmk: *) Add the CFLAGS to the linking process
	  when building a shared object. *) Add a reset, test, and regress
	  target for development

2004-12-16 22:07  sean

	* client/src/memcache.c: > Addition of function mcm_retrieve_data,
	  which replaces part of the > code in mcm_fetch_line, as well as
	  the code in mcm_get_line when > performing single or multi get
	  commands. This command checks data is it > is retrived for the
	  VALUE key flags bytes\r\n lines and then ensures > that the
	  amount of data read matches up with they recieved bytes values.
	  > This is the only safe way to read data as assuming the \r\n is
	  the end > of a response or even that END\r\n is the end is
	  unsafe as the data > itself may be arbitrary binary data.
	  Submitted by: John McCaskey <johnm@klir.com> Minor
	  Editorializations/tweaks: sean

2004-12-16 21:54  sean

	* client/src/memcache.c: Update to mcm_get_line(3). In the words
	  of the patch author: *) removing the re-alignment of the mc->buf
	  that was in your original code, but was made obsolete by my
	  original changes to read everything the very first call to
	  mcm_get_line, no need to realign if we aren't going to be
	  reading anymore, just wastes cpu cycles. *) changing the
	  detection of a read of exactly the number of bytes that was
	  allowed to only double the buffer, but not immediatley cause
	  another read() as its possible we are at the end. I realized
	  that it would be better to just make room, then continue on to
	  the check for the \r\n, and only if it is not there read more.
	  This eliminates the scenario of an attempted read with no more
	  data that we had previously since my first update. *) check for
	  "\r\n" at the end of the read data and assume if it is there
	  that we are done reading. This is not 100% safe for a get
	  command or for the stats command. The get command is handled by
	  the next patch which makes it not use mcm_get_line, the stats
	  command I'm not too worried about, but my additional checking
	  for END\r\n if the command is a stats command could be added
	  back in (I removed it as it sounded like you were unsure about
	  this additional checking...) Submitted by: John McCaskey
	  <johnm@klir.com>

2004-12-16 21:38  sean

	* client/src/memcache.c: Fix a memory leak in mcm_free(3) where I
	  wasn't free(3)'ing the server list itself. Submitted by: John
	  McCaskey <johnm@klir.com>

2004-12-15 21:37  sean

	* client/binary_protocol.txt: More revisions.

2004-12-11 17:40  sean

	* client/src/memcache.c: bwahahahahaha! No wonder perl's hashing
	  function wasn't working right: I forgot to advance the pointer.
	  This makes much more sense now. Submitted by: Bob Starr
	  <rstarr@laserbeans.com>

2004-12-09 17:30  sean

	* client/binary_protocol.txt: Flush out some of the description of
	  the response packet. Rename the ERROR Packet the RESPONSE
	  Packet. Rename the old RESPONSE Packet to the DATA Packet.

2004-12-08 23:53  sean

	* client/src/memcache.c: Fix a few errors with the reading of
	  data. Submitted by: John McCaskey <johnm@klir.com>

2004-12-08 22:17  sean

	* client/Makefile.pmk: The install target should always get
	  executed.

2004-12-08 22:16  sean

	* client/binary_protocol.txt: Commit my first whack at the binary
	  protocol. I think I forgot a DELETE Packet. *blush* I'll have to
	  convert this to nroff(7)/mdoc(7) at some point. Text just sucks.

2004-12-08 19:57  sean

	* client/Makefile.pmk, client/pmkfile: Update for the 1.1 release.
	  Going to send this out for testing for a few days first before I
	  release it.

2004-12-08 19:56  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c: *)
	  Move to having multiple memory contexts and add its supporting
	  API. *) Nuke calls of sizeof("foo") - 1 and replace with the
	  macro CSTRLEN("foo")

2004-12-08 00:36  sean

	* client/pmkfile: Only look for pmk if we're in debug mode. Most
	  users don't need pmk anyway.

2004-12-08 00:27  sean

	* client/Makefile.pmk: Release 1.0.2

2004-12-08 00:26  sean

	* client/INSTALL: Add a basic INSTALL file

2004-12-08 00:25  sean

	* client/src/memcache.c: Fix a few critical bugs with realloc(3)
	  and in the case where a newline hasn't been found in
	  GET_INIT_BUF_SIZE bytes. Submitted by: John McCaskey
	  <johnm@klir.com>

2004-12-07 19:20  sean

	* client/src/memcache.c: Ah ha! The strlen() -> sizeof() operation
	  has completed! This should yield a small performance
	  improvement, hopefully.

2004-12-07 19:12  sean

	* client/include/memcache/memcache.h.in, client/src/memcache.c:
	  Fix a rather nasty and large bug with the free on delete
	  handling. Instead of using: if (res->_flags &
	  (MC_RES_FREE_ON_DELETE | MC_RES_NO_FREE_ON_DELETE)) { which
	  would return true if *either* flag was set, use the more precise
	  and correct version: if (res->_flags & (MC_RES_FREE_ON_DELETE |
	  MC_RES_NO_FREE_ON_DELETE) == (MC_RES_FREE_ON_DELETE |
	  MC_RES_NO_FREE_ON_DELETE)) { which solves the problem with
	  mc_aget(3) and likely a host of other bugs.

2004-12-07 19:05  sean

	* client/Makefile.pmk: Add a release target.

2004-12-07 01:22  sean

	* client/Makefile.pmk: Bunch of little fixes.

2004-12-07 01:21  sean

	* client, client/.cvsignore: Ignore .dylib and .so files

2004-12-07 01:17  sean

	* client, client/.cvsignore, client/Makefile.pmk, client/include,
	  client/include/memcache, client/include/memcache/memcache.h.in,
	  client/pmkfile, client/src, client/src/memcache.c: I'm tired of
	  chasing bugs in this due to improper version control. Add to my
	  corporate CVS repository until such time as its incorporated
	  into the official memcached(8) repository.

2004-12-07 01:17  sean@gigave.com

	* client, client-branches, tags: New repository initialized by
	  cvs2svn.

