+2010-05-21 redis version is now 1.3.14 (aka 2.0.0 RC1) (antirez)
+2010-05-21 html doc updated (antirez)
+2010-05-21 by default test with valgrind does not show full leak info (antirez)
+2010-05-21 minor fix for the skiplist code, resulting in a false positive with valgrind, and in general into a useless small allocation (antirez)
+2010-05-21 Merge branch 'master' of git@github.com:antirez/redis (antirez)
+2010-05-21 tests suite initial support for valgrind, fixed the old test suite until the new one is able to target a specific host/port (antirez)
+2010-05-20 Don't exit with error in tests temp file cleanup if there are no files to clean (antirez)
+2010-05-20 fix memory leak on 32-bit builds (Pieter Noordhuis)
+2010-05-20 Merge branch 'master' of github.com:antirez/redis (antirez)
+2010-05-20 Fix for DEBUG DIGEST (antirez)
+2010-05-20 Merge branch 'test_vm' of git://github.com/pietern/redis (antirez)
+2010-05-20 code to enable running tests with the vm enabled (Pieter Noordhuis)
+2010-05-20 minor change to shutdown (antirez)
+2010-05-20 shutdown on SIGTERM (antirez)
+2010-05-20 Merge http://github.com/ngmoco/redis (antirez)
+2010-05-20 fix compile error on solaris (Pieter Noordhuis)
+2010-05-20 added regression for zipmap bug (antirez)
+2010-05-20 fix lookup of keys with length larger than ZIPMAP_BIGLEN (Pieter Noordhuis)
+2010-05-19 TODO updated (antirez)
+2010-05-19 initial tests for AOF (and small changes to server.tcl to support these) (Pieter Noordhuis)
+2010-05-19 Merge branch 'master' into integration (Pieter Noordhuis)
+2010-05-19 Fix for 'CONFIG SET appendonly no' (antirez)
+2010-05-19 It's now possible to turn off and on the AOF via CONFIG (antirez)
+2010-05-18 git hash 00000000 in reelase.h when git is not found enabled again after some shell scripting fix that is now compatible with most shells (antirez)
+2010-05-18 build fixed when simpler shells are used to create release.h (antirez)
+2010-05-18 use git diff when generating release.h to check for dirty status (antirez)
+2010-05-18 Solaris fixes (antirez)
+2010-05-18 html doc rebuild (antirez)
+2010-05-18 buliding of release.h moved into an external script. Avoided recompialtion of redis.c if git sha1 is the same as the previous one (antirez)
+2010-05-17 create release.h in make process and add this information to INFO listing (Pieter Noordhuis)
2010-05-16 Redis version is now 1.3.12 (antirez)
2010-05-16 redis version is now 1.3.11 (antirez)
2010-05-16 random refactoring and speedups (antirez)
2010-05-16 faster INCR with very little efforts... (antirez)
+2010-05-15 print warnings in redis log when a test raises an exception (very likely to be caused by something like a failed assertion) (Pieter Noordhuis)
2010-05-15 Merge branch 'redis-cli-fix' of http://github.com/tizoc/redis (antirez)
2010-05-15 added pid info to the check memory leaks test, so that those tests don't appear to be duplicated (antirez)
2010-05-15 Merge branch 'integration' of git://github.com/pietern/redis (antirez)
2010-05-14 Don't rely on cliReadReply being able to return on shutdown (Bruno Deferrari)
2010-05-14 If command is a shutdown, ignore errors on reply (Bruno Deferrari)
2010-05-14 DEBUG DIGEST implemented, in order to improve the ability to test persistence and replication consistency (antirez)
+2010-05-13 Add SIGTERM shutdown handling. (Ashley Martens)
2010-05-13 makefile deps updated (antirez)
2010-05-13 conflicts resolved (antirez)
2010-05-13 feed SETEX as SET and EXPIREAT to AOF (Pieter Noordhuis)
<div class="narrow">
#sidebar <a href="ListCommandsSidebar.html">ListCommandsSidebar</a><h3><a name="RPUSH _key_ _string_">RPUSH _key_ _string_</a></h3>
<h3><a name="LPUSH _key_ _string_">LPUSH _key_ _string_</a></h3>
-<i>Time complexity: O(1)</i><blockquote>Add the <i>string</i> value to the head (RPUSH) or tail (LPUSH) of the liststored at <i>key</i>. If the key does not exist an empty list is created just beforethe append operation. If the key exists but is not a List an erroris returned.</blockquote>
-<h2><a name="Return value">Return value</a></h2><a href="ReplyTypes.html">Status code reply</a>
+<i>Time complexity: O(1)</i><blockquote>Add the <i>string</i> value to the head (LPUSH) or tail (RPUSH) of the liststored at <i>key</i>. If the key does not exist an empty list is created just beforethe append operation. If the key exists but is not a List an erroris returned.</blockquote>
+<h2><a name="Return value">Return value</a></h2><a href="ReplyTypes.html">Integer reply</a>, specifically, the number of elements inside the list after the push operation.
</div>
exit 1
}
+proc check_valgrind_errors stderr {
+ set fd [open $stderr]
+ set buf [read $fd]
+ close $fd
+
+ if {![regexp -- {ERROR SUMMARY: 0 errors} $buf] ||
+ ![regexp -- {definitely lost: 0 bytes} $buf]} {
+ puts "*** VALGRIND ERRORS ***"
+ puts $buf
+ puts "--- press enter to continue ---"
+ gets stdin
+ }
+}
+
proc kill_server config {
# nevermind if its already dead
if {![is_alive $config]} { return }
catch {exec kill $pid}
after 10
}
+
+ # Check valgrind errors if needed
+ if {$::valgrind} {
+ check_valgrind_errors [dict get $config stderr]
+ }
}
proc is_alive config {
}
}
+proc ping_server {host port} {
+ set retval 0
+ if {[catch {
+ set fd [socket $::host $::port]
+ fconfigure $fd -translation binary
+ puts $fd "PING\r\n"
+ flush $fd
+ set reply [gets $fd]
+ if {[string range $reply 0 4] eq {+PONG} ||
+ [string range $reply 0 3] eq {-ERR}} {
+ set retval 1
+ }
+ close $fd
+ } e]} {
+ puts "Can't PING server at $host:$port... $e"
+ }
+ return $retval
+}
+
set ::global_overrides {}
proc start_server {filename overrides {code undefined}} {
set data [split [exec cat "tests/assets/$filename"] "\n"]
set stdout [format "%s/%s" [dict get $config "dir"] "stdout"]
set stderr [format "%s/%s" [dict get $config "dir"] "stderr"]
- exec ./redis-server $config_file > $stdout 2> $stderr &
- after 500
+
+ if {$::valgrind} {
+ exec valgrind ./redis-server $config_file > $stdout 2> $stderr &
+ after 2000
+ } else {
+ exec ./redis-server $config_file > $stdout 2> $stderr &
+ after 500
+ }
# check that the server actually started
- if {[file size $stderr] > 0} {
+ if {$code ne "undefined" && ![ping_server $::host $::port]} {
error_and_quit $config_file [exec cat $stderr]
}
# find out the pid
- regexp {^\[(\d+)\]} [exec head -n1 $stdout] _ pid
+ while {![info exists pid]} {
+ regexp {^\[(\d+)\]} [exec head -n1 $stdout] _ pid
+ after 100
+ }
# setup properties to be able to initialize a client object
set host $::host