Updated Branches: refs/heads/master 0f4c7b8ff -> 6215bf9e9
TS-1606: Log buffers are not flushed periodically when TS is launched with NO_REMOTE_MANAGEMENT flag Also fix wrong check in Log::flush_thread_main. Credit to Yakov Markovitch <ymarkovi...@gmail.com> for pinpointing the problem. Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/6215bf9e Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/6215bf9e Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/6215bf9e Branch: refs/heads/master Commit: 6215bf9e9dc3bf21f9507ce6856891e8168331c2 Parents: 0f4c7b8 Author: Uri Shachar <ushac...@apache.org> Authored: Sun Jan 26 18:13:01 2014 +0200 Committer: Uri Shachar <ushac...@apache.org> Committed: Sun Jan 26 18:13:01 2014 +0200 ---------------------------------------------------------------------- CHANGES | 3 ++ proxy/logging/Log.cc | 79 ++++++++++++++++++----------------------------- proxy/logging/Log.h | 4 +-- 3 files changed, 34 insertions(+), 52 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6215bf9e/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index 7d24d27..81e8e6e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache Traffic Server 4.2.0 + *) [TS-1606] Log buffers are not flushed periodically when TS is launched + with NO_REMOTE_MANAGEMENT flag + *) [TS-2481] Incorrect origin server port used sometimes (with keep-alive). Author: Dimitry Andric <dimi...@andric.com> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6215bf9e/proxy/logging/Log.cc ---------------------------------------------------------------------- diff --git a/proxy/logging/Log.cc b/proxy/logging/Log.cc index 6f326c9..ebf0233 100644 --- a/proxy/logging/Log.cc +++ b/proxy/logging/Log.cc @@ -938,15 +938,6 @@ Log::init(int flags) REC_RegisterConfigUpdateFunc("proxy.local.log.collation_mode", &Log::handle_logging_mode_change, NULL); - // we must create the flush thread since it takes care of the - // periodic events (should this behavior be reversed ?) - // - create_threads(); - - eventProcessor.schedule_every(NEW (new PeriodicWakeup(collation_preproc_threads, 1)), - HRTIME_SECOND, ET_CALL); - init_status |= PERIODIC_WAKEUP_SCHEDULED; - // Clear any stat values that need to be reset on startup // RecSetRawStatSum(log_rsb, log_stat_log_files_open_stat, 0); @@ -997,13 +988,9 @@ Log::init_when_enabled() Log::config->rolling_size_mb)); // create the flush thread and the collation thread - // create_threads(); - - // schedule periodic wakeup - // ToDo: Why was this removed?? - // - // eventProcessor.schedule_every (NEW (new PeriodicWakeup()), HRTIME_SECOND, ET_CALL); + eventProcessor.schedule_every(NEW (new PeriodicWakeup(collation_preproc_threads, 1)), + HRTIME_SECOND, ET_CALL); init_status |= FULLY_INITIALIZED; } @@ -1017,39 +1004,35 @@ Log::init_when_enabled() void Log::create_threads() { - if (!(init_status & THREADS_CREATED)) { - - char desc[64]; - preproc_notify = new EventNotify[collation_preproc_threads]; + char desc[64]; + preproc_notify = new EventNotify[collation_preproc_threads]; - size_t stacksize; - REC_ReadConfigInteger(stacksize, "proxy.config.thread.default.stacksize"); + size_t stacksize; + REC_ReadConfigInteger(stacksize, "proxy.config.thread.default.stacksize"); - // start the preproc threads - // - // no need for the conditional var since it will be relying on - // on the event system. - for (int i = 0; i < collation_preproc_threads; i++) { - Continuation *preproc_cont = NEW(new LoggingPreprocContinuation(i)); - sprintf(desc, "[LOG_PREPROC %d]", i); - eventProcessor.spawn_thread(preproc_cont, desc, stacksize); - } + // start the preproc threads + // + // no need for the conditional var since it will be relying on + // on the event system. + for (int i = 0; i < collation_preproc_threads; i++) { + Continuation *preproc_cont = NEW(new LoggingPreprocContinuation(i)); + sprintf(desc, "[LOG_PREPROC %d]", i); + eventProcessor.spawn_thread(preproc_cont, desc, stacksize); + } - // Now, only one flush thread is supported. - // TODO: Enable multiple flush threads, such as - // one flush thread per file. - // - flush_notify = new EventNotify; - flush_data_list = new InkAtomicList; + // Now, only one flush thread is supported. + // TODO: Enable multiple flush threads, such as + // one flush thread per file. + // + flush_notify = new EventNotify; + flush_data_list = new InkAtomicList; - sprintf(desc, "Logging flush buffer list"); - ink_atomiclist_init(flush_data_list, desc, 0); - Continuation *flush_cont = NEW(new LoggingFlushContinuation(0)); - sprintf(desc, "[LOG_FLUSH]"); - eventProcessor.spawn_thread(flush_cont, desc, stacksize); + sprintf(desc, "Logging flush buffer list"); + ink_atomiclist_init(flush_data_list, desc, 0); + Continuation *flush_cont = NEW(new LoggingFlushContinuation(0)); + sprintf(desc, "[LOG_FLUSH]"); + eventProcessor.spawn_thread(flush_cont, desc, stacksize); - init_status |= THREADS_CREATED; - } } /*------------------------------------------------------------------------- @@ -1323,12 +1306,10 @@ Log::flush_thread_main(void * /* args ATS_UNUSED */) // Time to work on periodic events?? // now = ink_get_hrtime() / HRTIME_SECOND; - if (now > last_time) { - if ((now % (PERIODIC_TASKS_INTERVAL)) == 0) { - Debug("log-preproc", "periodic tasks for %" PRId64, (int64_t)now); - periodic_tasks(now); - } - last_time = (now = ink_get_hrtime() / HRTIME_SECOND); + if (now >= last_time + PERIODIC_TASKS_INTERVAL) { + Debug("log-preproc", "periodic tasks for %" PRId64, (int64_t)now); + periodic_tasks(now); + last_time = ink_get_hrtime() / HRTIME_SECOND; } // wait for more work; a spurious wake-up is ok since we'll just http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6215bf9e/proxy/logging/Log.h ---------------------------------------------------------------------- diff --git a/proxy/logging/Log.h b/proxy/logging/Log.h index 92c4525..843c1d3 100644 --- a/proxy/logging/Log.h +++ b/proxy/logging/Log.h @@ -374,9 +374,7 @@ public: enum InitFlags { FIELDS_INITIALIZED = 1, - THREADS_CREATED = 2, - PERIODIC_WAKEUP_SCHEDULED = 4, - FULLY_INITIALIZED = 8 + FULLY_INITIALIZED = 2 }; enum ConfigFlags