diff options
author | antirez <antirez@gmail.com> | 2014-09-05 09:56:26 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2014-09-08 10:57:03 +0200 |
commit | a4ec67290e5dba2152a4e389ce72c14b8926789f (patch) | |
tree | 4139bacc29ac17f2755ed49aa816f2736c57d093 | |
parent | 5bb0da34ba4a743b696a7324632f8e0dfd6817d0 (diff) | |
download | redis-a4ec67290e5dba2152a4e389ce72c14b8926789f.tar.gz |
AOF loading: split handling of format errors from unexpected EOF.
-rw-r--r-- | src/aof.c | 17 | ||||
-rw-r--r-- | tests/integration/aof.tcl | 2 |
2 files changed, 11 insertions, 8 deletions
@@ -645,7 +645,7 @@ int loadAppendOnlyFile(char *filename) { argsds = sdsnewlen(NULL,len); if (len && fread(argsds,len,1,fp) == 0) goto fmterr; argv[j] = createObject(REDIS_STRING,argsds); - if (fread(buf,2,1,fp) == 0) goto fmterr; /* discard CRLF */ + if (fread(buf,2,1,fp) == 0) goto readerr; /* discard CRLF */ } /* Command lookup */ @@ -673,7 +673,7 @@ int loadAppendOnlyFile(char *filename) { /* This point can only be reached when EOF is reached without errors. * If the client is in the middle of a MULTI/EXEC, log error and quit. */ - if (fakeClient->flags & REDIS_MULTI) goto readerr; + if (fakeClient->flags & REDIS_MULTI) goto uxeof; fclose(fp); freeFakeClient(fakeClient); @@ -683,14 +683,17 @@ int loadAppendOnlyFile(char *filename) { server.aof_rewrite_base_size = server.aof_current_size; return REDIS_OK; -readerr: - if (feof(fp)) { - redisLog(REDIS_WARNING,"Unexpected end of file reading the append only file"); - } else { +readerr: /* Read error. If feof(fp) is true, fall through to unexpected EOF. */ + if (!feof(fp)) { redisLog(REDIS_WARNING,"Unrecoverable error reading the append only file: %s", strerror(errno)); + exit(1); } + +uxeof: /* Unexpected AOF end of file. */ + redisLog(REDIS_WARNING,"Unexpected end of file reading the append only file"); exit(1); -fmterr: + +fmterr: /* Format error. */ redisLog(REDIS_WARNING,"Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>"); exit(1); } diff --git a/tests/integration/aof.tcl b/tests/integration/aof.tcl index 9a24a96bd..cbffc812e 100644 --- a/tests/integration/aof.tcl +++ b/tests/integration/aof.tcl @@ -56,7 +56,7 @@ tags {"aof"} { start_server_aof [list dir $server_path] { test "Short read: Server should have logged an error" { - set pattern "*Bad file format reading the append only file*" + set pattern "*Unexpected end of file reading the append only file*" set retry 10 while {$retry} { set result [exec tail -n1 < [dict get $srv stdout]] |