diff options
author | antirez <antirez@gmail.com> | 2011-01-04 19:03:23 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2011-01-04 19:03:23 +0100 |
commit | 1190c6cbf7f240691fee0d8fb21a7c19938116be (patch) | |
tree | 9c4d8d30e9a730f2552315cafbc1d5d20abc1eb7 | |
parent | 418d5eaf500935e77e29fdd9335aaca845e6c5cd (diff) | |
download | redis-1190c6cbf7f240691fee0d8fb21a7c19938116be.tar.gz |
handle end of space on device in a better way
-rw-r--r-- | src/diskstore.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/diskstore.c b/src/diskstore.c index 3e0ad406f..7250390eb 100644 --- a/src/diskstore.c +++ b/src/diskstore.c @@ -191,7 +191,16 @@ int dsSet(redisDb *db, robj *key, robj *val) { len = dsKeyToPath(db,buf,key); memcpy(buf2,buf,len); snprintf(buf2+len,sizeof(buf2)-len,"_%ld_%ld",(long)time(NULL),(long)val); - fp = fopen(buf2,"w"); + while ((fp = fopen(buf2,"w")) == NULL) { + if (errno == ENOSPC) { + redisLog(REDIS_WARNING,"Diskstore: No space left on device. Please make room and wait 30 seconds for Redis to continue."); + sleep(30); + } else { + redisLog(REDIS_WARNING,"diskstore error opening %s: %s", + buf2, strerror(errno)); + redisPanic("Unrecoverable diskstore error. Exiting."); + } + } if ((retval = rdbSaveKeyValuePair(fp,db,key,val,time(NULL))) == -1) return REDIS_ERR; fclose(fp); |