threaded-logging-20050619
[openafs.git] / src / viced / viced.c
index 5690321..6fe4dd4 100644 (file)
@@ -315,6 +315,18 @@ ResetCheckDescriptors(void)
 #endif
 }
 
+#if defined(AFS_PTHREAD_ENV)
+char *
+threadName(void)
+{
+    char threadid[16];
+    if (LogLevel > 999) {
+       afs_snprintf(threadid, 16, "%d", pthread_getspecific(rx_thread_id_key));
+       return threadid;
+    } else 
+       return NULL;
+}
+#endif
 
 /* proc called by rxkad module to get a key */
 static int
@@ -482,8 +494,8 @@ FsyncCheckLWP()
     assert(pthread_mutex_init(&fsync_glock_mutex, NULL) == 0);
 #endif
 
-    FSYNC_LOCK;
     while (1) {
+       FSYNC_LOCK;
 #ifdef AFS_PTHREAD_ENV
        /* rounding is fine */
        fsync_next.tv_nsec = 0;
@@ -727,6 +739,9 @@ FlagMsg()
     strcat(buffer, "[-rxpck <number of rx extra packets>] ");
     strcat(buffer, "[-rxdbg (enable rx debugging)] ");
     strcat(buffer, "[-rxdbge (enable rxevent debugging)] ");
+#if AFS_PTHREAD_ENV
+    strcat(buffer, "[-vattachpar <number of volume attach threads>] ");
+#endif
 #ifdef AFS_AIX32_ENV
     strcat(buffer, "[-m <min percentage spare in partition>] ");
 #endif
@@ -857,11 +872,19 @@ ParseArgs(int argc, char *argv[])
 
     for (i = 1; i < argc; i++) {
        if (!strcmp(argv[i], "-d")) {
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -d\n"); 
+               return -1; 
+           }
            debuglevel = atoi(argv[++i]);
            LogLevel = debuglevel;
        } else if (!strcmp(argv[i], "-banner")) {
            printBanner = 1;
        } else if (!strcmp(argv[i], "-implicit")) {
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -implicit\n"); 
+               return -1; 
+           }
            implicitAdminRights = ParseRights(argv[++i]);
            if (implicitAdminRights < 0)
                return implicitAdminRights;
@@ -875,6 +898,10 @@ ParseArgs(int argc, char *argv[])
            int lwps_max =
                max_fileserver_thread() - FILESERVER_HELPER_THREADS;
            Sawlwps = 1;
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -p\n"); 
+               return -1; 
+           }
            lwps = atoi(argv[++i]);
            if (lwps > lwps_max)
                lwps = lwps_max;
@@ -882,41 +909,95 @@ ParseArgs(int argc, char *argv[])
                lwps = 6;
        } else if (!strcmp(argv[i], "-b")) {
            Sawbufs = 1;
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -b\n"); 
+               return -1; 
+           }
            buffs = atoi(argv[++i]);
        } else if (!strcmp(argv[i], "-l")) {
            Sawlarge = 1;
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -l\n"); 
+               return -1; 
+           }
            large = atoi(argv[++i]);
        } else if (!strcmp(argv[i], "-vc")) {
            SawVC = 1;
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -vc\n"); 
+               return -1; 
+           }
            volcache = atoi(argv[++i]);
        } else if (!strcmp(argv[i], "-novbc")) {
            novbc = 1;
        } else if (!strcmp(argv[i], "-rxpck")) {
            Sawrxpck = 1;
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -rxpck\n"); 
+               return -1; 
+           }
            rxpackets = atoi(argv[++i]);
+#ifdef AFS_PTHREAD_ENV
+       } else if (!strcmp(argv[i], "-vattachpar")) {
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -vattachpar\n"); 
+               return -1; 
+           }
+           vol_attach_threads = atoi(argv[++i]);
+#endif /* AFS_PTHREAD_ENV */
        } else if (!strcmp(argv[i], "-s")) {
            Sawsmall = 1;
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -s\n"); 
+               return -1; 
+           }
            nSmallVns = atoi(argv[++i]);
        } else if (!strcmp(argv[i], "-abortthreshold")) {
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -abortthreshold\n"); 
+               return -1; 
+           }
            abort_threshold = atoi(argv[++i]);
-       } else if (!strcmp(argv[i], "-k"))
+       } else if (!strcmp(argv[i], "-k")) {
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -k\n"); 
+               return -1; 
+           }
            stack = atoi(argv[++i]);
+       }
 #if defined(AFS_SGI_ENV)
        else if (!strcmp(argv[i], "-lock")) {
            SawLock = 1;
        }
 #endif
        else if (!strcmp(argv[i], "-spare")) {
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -spare\n"); 
+               return -1; 
+           }
            BlocksSpare = atoi(argv[++i]);
            SawSpare = 1;
        } else if (!strcmp(argv[i], "-pctspare")) {
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -pctspare\n"); 
+               return -1; 
+           }
            PctSpare = atoi(argv[++i]);
            BlocksSpare = 0;    /* has non-zero default */
            SawPctSpare = 1;
-       } else if (!strcmp(argv[i], "-w"))
+       } else if (!strcmp(argv[i], "-w")) {
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -w\n"); 
+               return -1; 
+           }
            fiveminutes = atoi(argv[++i]);
-       else if (!strcmp(argv[i], "-hr")) {
-           int hr = atoi(argv[++i]);
+       } else if (!strcmp(argv[i], "-hr")) {
+           int hr;
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -hr\n"); 
+               return -1; 
+           }
+           hr = atoi(argv[++i]);
            if ((hr < 1) || (hr > 36)) {
                printf
                    ("host acl refresh interval of %d hours is invalid; hours must be between 1 and 36\n\n",
@@ -930,6 +1011,10 @@ ParseArgs(int argc, char *argv[])
            eventlog = 1;
        else if (!strcmp(argv[i], "-cb")) {
            Sawcbs = 1;
+            if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -cb\n"); 
+               return -1; 
+           }
            numberofcbs = atoi(argv[++i]);
            if ((numberofcbs < 10000) || (numberofcbs > 2147483647)) {
                printf
@@ -939,6 +1024,10 @@ ParseArgs(int argc, char *argv[])
            }
        } else if (!strcmp(argv[i], "-busyat")) {
            Sawbusy = 1;
+           if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -busyat\n"); 
+               return -1; 
+           }
            busy_threshold = atoi(argv[++i]);
            if (busy_threshold < 10) {
                printf
@@ -951,6 +1040,10 @@ ParseArgs(int argc, char *argv[])
 #ifdef AFS_AIX32_ENV
        else if (!strcmp(argv[i], "-m")) {
            extern int aixlow_water;
+           if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -m\n"); 
+               return -1; 
+           }
            aixlow_water = atoi(argv[++i]);
            if ((aixlow_water < 0) || (aixlow_water > 30)) {
                printf("space reserved %d% invalid; must be between 0-30%\n",
@@ -963,6 +1056,10 @@ ParseArgs(int argc, char *argv[])
            rxJumbograms = 0;
        } else if (!strcmp(argv[i], "-realm")) {
            extern char local_realm[AFS_REALM_SZ];
+           if ((i + 1) >= argc) {
+               fprintf(stderr, "missing argument for -realm\n"); 
+               return -1; 
+           }
            if (strlen(argv[++i]) >= AFS_REALM_SZ) {
                printf
                    ("-realm argument must contain fewer than %d characters.\n",
@@ -1008,6 +1105,10 @@ ParseArgs(int argc, char *argv[])
            serverLogSyslogFacility = atoi(argv[i] + 8);
        }
 #endif
+       else if (strcmp(argv[i], "-mrafslogs") == 0) {
+           /* set syslog logging flag */
+           mrafsStyleLogs = 1;
+       } 
        else {
            return (-1);
        }
@@ -1389,7 +1490,7 @@ Do_VLRegisterRPC()
     if (code) {
        if (code == VL_MULTIPADDR) {
            ViceLog(0,
-                   ("VL_RegisterAddrs rpc failed; The ethernet address exist on a different server; repair it\n"));
+                   ("VL_RegisterAddrs rpc failed; The IP address exists on a different server; repair it\n"));
            ViceLog(0,
                    ("VL_RegisterAddrs rpc failed; See VLLog for details\n"));
            return code;
@@ -1490,6 +1591,7 @@ main(int argc, char *argv[])
     struct rlimit rlim;                /* max number of open file descriptors */
 #endif
     int curLimit;
+    time_t t;
 
 #ifdef AFS_AIX32_ENV
     struct sigaction nsa;
@@ -1628,6 +1730,10 @@ main(int argc, char *argv[])
        V_BreakVolumeCallbacks = BreakVolumeCallBacksLater;
     }
 
+#ifdef AFS_PTHREAD_ENV
+    SetLogThreadNameProgram( threadName );
+#endif
+
     /* initialize libacl routines */
     acl_Initialize(ACL_VERSION);
 
@@ -1794,9 +1900,10 @@ main(int argc, char *argv[])
     TM_GetTimeOfDay(&tp, 0);
 
 #ifndef AFS_QUIETFS_ENV
-    if (console != NULL) {
+    if (console != NULL) { 
+        time_t t = tp.tv_sec;
        fprintf(console, "File server has started at %s\r",
-               afs_ctime(&tp.tv_sec, tbuffer, sizeof(tbuffer)));
+               afs_ctime(&t, tbuffer, sizeof(tbuffer)));
     }
 #endif
 
@@ -1833,9 +1940,10 @@ main(int argc, char *argv[])
     (void)signal(SIGQUIT, ShutDown_Signal);
 #endif
 
+    t = tp.tv_sec;
     ViceLog(0,
            ("File Server started %s",
-            afs_ctime(&tp.tv_sec, tbuffer, sizeof(tbuffer))));
+            afs_ctime(&t, tbuffer, sizeof(tbuffer))));
 #if FS_STATS_DETAILED
     afs_FullPerfStats.det.epoch.tv_sec = StartTime = tp.tv_sec;
 #endif