summaryrefslogtreecommitdiffstats
path: root/logforwarder
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2017-10-13 10:30:00 +0000
committerArne Juul <arnej@yahoo-inc.com>2017-10-13 13:17:05 +0000
commitf54a1254b36a02d909ed7c59605d8ea317a05218 (patch)
tree038fdfb43c23c87f5391c15c586ed443409f0f44 /logforwarder
parent141768384af166828c96193d9bd09187f08272a7 (diff)
always do restart
* for the case where splunk was started earlier * also do debug logging
Diffstat (limited to 'logforwarder')
-rw-r--r--logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp
index d7c7a923ddb..6abf807ec8b 100644
--- a/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp
+++ b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp
@@ -20,8 +20,9 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0)
const char *argv[] = { 0, a1, a2, 0 };
vespalib::string path = prefix + "/bin/splunk";
argv[0] = path.c_str();
- fprintf(stdout, "starting splunk forwarder with command: '%s' '%s'\n",
- argv[0], argv[1]);
+ LOG(debug, "starting splunk forwarder with command: '%s' '%s' '%s'",
+ argv[0], argv[1], argv[2]);
+ fflush(stdout);
pid_t child = fork();
if (child == -1) {
perror("fork()");
@@ -31,12 +32,14 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0)
vespalib::string env = "SPLUNK_HOME=" + prefix;
char *cenv = const_cast<char *>(env.c_str()); // safe cast
putenv(cenv);
+ LOG(debug, "added to environment: '%s'", cenv);
char **cargv = const_cast<char **>(argv); // safe cast
execv(argv[0], cargv);
// if execv fails:
perror(argv[0]);
exit(1);
}
+ LOG(debug, "child running with pid %d", (int)child);
int waitStatus = 0;
if (waitpid(child, &waitStatus, 0) == -1) {
perror("waitpid()");
@@ -44,17 +47,18 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0)
}
if (WIFEXITED(waitStatus) && WEXITSTATUS(waitStatus) == 0) {
// all OK
+ LOG(debug, "child ran ok, exit status 0");
return;
}
if (WIFEXITED(waitStatus)) {
- fprintf(stderr, "failed starting splunk forwarder (exit status %d)\n",
- WEXITSTATUS(waitStatus));
+ LOG(warning, "failed starting splunk forwarder (exit status %d)",
+ WEXITSTATUS(waitStatus));
} else if (WIFSIGNALED(waitStatus)) {
- fprintf(stderr, "failed starting splunk forwarder (exit on signal %d)\n",
- WTERMSIG(waitStatus));
+ LOG(warning, "failed starting splunk forwarder (exit on signal %d)",
+ WTERMSIG(waitStatus));
} else {
- fprintf(stderr, "failed starting splunk forwarder (abnormal exit status %d)\n",
- waitStatus);
+ LOG(warning, "failed starting splunk forwarder (abnormal exit status %d)",
+ waitStatus);
}
}
@@ -64,10 +68,13 @@ runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0)
void
ChildHandler::startChild(const vespalib::string &prefix)
{
- if (_childRunning) {
- runSplunk(prefix, "restart");
- } else {
+ if (! _childRunning) {
runSplunk(prefix, "start", "--accept-license");
_childRunning = true;
+ // it is possible that splunk was already running, and
+ // then the above won't do anything, so we need to
+ // *also* do the restart below, after a small delay.
+ sleep(1);
}
+ runSplunk(prefix, "restart");
}