mrafs logs don't clobber existing logs
authorDerrick Brashear <shadow@dementia.org>
Tue, 18 May 2010 14:42:28 +0000 (10:42 -0400)
committerDerrick Brashear <shadow@dementia.org>
Wed, 19 May 2010 11:59:28 +0000 (04:59 -0700)
if a restart happens too quickly, we can wipe existing log files in
mrafs log mode. cheat. assume we won't have too many sub-second starts.

Change-Id: I86d652410d0f18609d305decff54f122e2b87f10
Reviewed-on: http://gerrit.openafs.org/1984
Tested-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/util/serverLog.c

index 98e5eb0..8bc51af 100644 (file)
@@ -279,6 +279,7 @@ OpenLog(const char *fileName)
 
     if (mrafsStyleLogs) {
         time_t t;
+       struct stat buf;
        FT_GetTimeOfDay(&Start, 0);
         t = Start.tv_sec;      
        TimeFields = localtime(&t);
@@ -286,11 +287,17 @@ OpenLog(const char *fileName)
            if (strncmp(fileName, (char *)&ourName, strlen(fileName)))
                strcpy((char *)&ourName, (char *)fileName);
        }
+    makefilename:
        afs_snprintf(FileName, MAXPATHLEN, "%s.%d%02d%02d%02d%02d%02d",
                     ourName, TimeFields->tm_year + 1900,
                     TimeFields->tm_mon + 1, TimeFields->tm_mday,
                     TimeFields->tm_hour, TimeFields->tm_min,
                     TimeFields->tm_sec);
+       if(lstat(FileName, &buf) == 0) {
+           /* avoid clobbering a log */
+           TimeFields->tm_sec++;
+           goto makefilename;
+       }
        if (!isfifo)
            renamefile(fileName, FileName);     /* don't check error code */
        tempfd = open(fileName, O_WRONLY | O_TRUNC | O_CREAT | (isfifo?O_NONBLOCK:0), 0666);