Revision history for Perl extension Cache::Memcached::Fast.
0.09 2008-03-06
- this release makes 'noreply' mode official, and improves
latency for some command patterns by managing TCP_NODELAY flag.
Changes since 0.08:
Enable TCP_NODELAY to reduce latency of commands that wait for
the reply, and disable it for throughput of commands that don't
need any reply.
t/encoding.t was removed from distribution. It doesn't work
with Perl 5.6, which has no 'encoding' pragma, and I don't
know how to fix it (beautifully, there's a number of ugly
ways).
'noreply' mode is documented as the official feature of
memcached 1.2.5. script/benchmark.pl uses it automatically
when available.
Add parameter 'hash_namespace' (see docs).
Add method 'namespace' to get and/or set the namespace prefix.
This is handy when you "lease" C::M::F object for different
parts of your application that do unrelated things.
0.08 2008-01-24
- this is mostly a cleanup release, that also improves
decompression speed.
Changes since 0.07:
compress_alog was replaced with more generic compress_methods.
It turned out that IO::Uncompress::Gunzip is much (~4x) slower
than Compress::Zlib, so the latter is used as the default for
compress_methods. Besides, previous mechanism didn't scale
well.
Implemented the check of constructor arguments to catch
various typos (enabled by default), and new 'check_args'
parameter to disable it.
Workaround "cast from integer to pointer of different size"
warning on 64-bit platforms.
Removed 127.0.0.x from test cases since not all hosts resolve
such addresses when x is not 1.
Use plain malloc()/free() instead of Newx()/Safefree() in XS.
This should fix the build with Perl versions 5.6.0--5.8.6.
0.07 2008-01-18
- this is a major release that features a significant speed
improvement and introduces multi update commands. It also
fixes a bug in nowait mode that was introduced in 0.06.
Upgrade is recommended if you are using nowait => 1, or want
to employ new features and speed.
Changes since 0.06:
For performance reasons all Perl code was converted to XS. If
you performed any benchmarks, you may want to repeat them ;).
This change has a drawback that now you can't derive from
C::M::F easily.
Every update command now has its multi equivalent: set_multi,
add_multi, replace_multi, append_multi, prepend_multi,
incr_multi, decr_multi and delete_multi. By using multi
commands you will reduce request latency: several requests
would be sent in one packet, and the client would talk to all
servers simultaneously.
Improved results of update commands: commands that previously
returned boolean value now return true for positive server
reply, false for negative server reply, and undef on error.
Similar to DBI, decr returns "0E0" for positive zero reply,
which evaluates to true in a boolean context.
flush_all now returns a hash 'server_name' => 'bool_result'.
New commands 'server_versions' and 'nowait_push'.
New 'utf8' and 'serialize_methods' parameters for constructor.
script/compare.pl was removed. Instead script/benchmark.pl
takes an optional last argument "compare".
t/03-flush_all.t was removed. We use PID as a part of a
namespace prefix now, so we don't need clear cache any more.
And there are good reasons not to have flush_all: the user may
flush a valuable cache by mistake, and "flush_all 0" doesn't
work on memcached 1.2.2, so the outcome was uncertain anyway.
Without flush_all it's possible to execute in parallel more
than one 'make test'.
Fixed bug in 'nowait' mode that could cause false negative
replies to subsequent requests that you are waiting for.
Workaround the loss of the last 'noreply' request on the
server. 'noreply' is still an undocumented feature.
To support multi commands the API of internal client
implementation was changed. If you were using it as a
standalone library---sorry :). After API will freeze C client
library will likely be released on its own.
0.06 2007-12-20
- this release fixes a serious bug and features the 'nowait'
mode. Upgrade is recommended.
Changes since 0.05:
Fix a subtle race bug present since 0.02 that could mix
several values into one when you have more than one memcached
server and executed get_multi or gets_multi. If you have seen
the following in your logs or on the console:
Attempt to free unreferenced scalar: SV 0x9e89d34 at
/tmp/Cache-Memcached-Fast/blib/lib/Cache/Memcached/Fast.pm line 688.
that was it.
Added 'nowait' mode that allows the client to not wait the
reply, and thus reduces the wallclock time. Run
script/benchmark.pl and see how it affects wallclock time,
especially over the wire.
Made undocumented 'noreply' parameter a per-server setting.
0.05 2007-12-18
- more fixes to build and pass tests on different platforms.
There's no functional changes again.
Changes since 0.04:
At least on Perl 5.6.2 SVREF typemap entry has the meaning of
the class based on blessed SV. So instead of SVREF we use
custom Ref_SV and custom typemap entry. Found by CPAN
testers.
Do not use AUTOLOAD for normal commands, only for undocumented
ones.
Add incr() and decr() to script/compare.pl and
script/benchmark.pl.
Test case is split into several files and cleaned a bit.
Rename 'sun' -> 's_unix' in connect.c, because 'sun' is
reserved on... guesses? Right, Sun systems! Found by CPAN
testers.
Fix test case for FreeBSD and derivatives: do not use
localhost.localdomain address, which FreeBSD doesn't resolve
by default.
Added docs section "UTF-8 and tainted data".
0.04 2007-12-16
- CPAN testers found more issues on different platforms,
fixing these.
Changes since 0.03:
const char * is missing from typemap in Perl 5.6.2, fixed by
using plain char * for class name in new().
Use AI_ADDRCONFIG conditionally, some systems do not have it
(NetBSD 3.1).
0.03 2007-12-16
- this release has no new functionality compared to 0.02. It
only fixes some test and documentation problems that were
discovered, as it always happens, after the upload to CPAN.
Changes since 0.02:
Fixed internal documentation references.
Added missing docs for incr and decr.
Fixed test case to test server version and use
cas/gets/append/prepend only for 1.2.4 and up.
Actually there's new _undocumented_ command server_versions,
is has broken interface, you can't say which version
corresponds to which server when some of them do not respond.
This command is subject to change.
0.02 2007-12-15
- first public release.
Changes since 0.01:
Fully restartable code was replaced with classic
fill-the-buffer-first approach: it turned out that
restartability doesn't add much advantage. Lots of beautiful
and ugly code gone away.
Added support for multiple servers (select machine, CRC32,
timeouts).
Added script/compare.pl to compare this module to the original
Cache::Memcached, and also to measure speed in general.
Added Unix socket support, SIGPIPE handling (proper ignoring
actually ;)).
Added support for serialization of Perl data structures, and
for compression.
New commands: incr, decr, gets, gets_multi, cas,
enable_compression, remove (alias to delete).
New client parameters: connect_timeout, io_timeout (aka
select_timeout), compress_threshold, compress_ratio,
compress_algo, max_failure, failure_timeout.
Finally added documentation!
Added support for server weights.
Added the Ketama consistent hashing algorithm.
Added default tests as generated with Module::Starter. Main
test case is still messy, should be split into several tests.
There's also support for 'noreply'-enabled memcached, but
those patches are not (yet) accepted to mainline, so 'noreply'
is not an official feature and is not documented.
0.01 2007-11-26
- first internal release.
Supported only one server connection (TCP). Commands are
set(), add(), replace(), prepend(), append(), delete(),
flush_all(), get(), get_multi(). Client parameters are
'servers', 'namespace', 'close_on_error'. There's no
documentation. Test case is messy (but does its job).
0.00 2007-11-19
- original version; created by h2xs 1.23 with options
-O --omit-autoload --compat-version=5.6.0 \
--use-new-tests --name=Cache::Memcached::Fast