From: antirez Date: Tue, 4 Jan 2011 18:03:23 +0000 (+0100) Subject: handle end of space on device in a better way X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/1190c6cbf7f240691fee0d8fb21a7c19938116be handle end of space on device in a better way --- diff --git a/src/diskstore.c b/src/diskstore.c index 3e0ad406..7250390e 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);