Updated Branches: refs/heads/master 354fbc267 -> 853722820
TS-2420: Remove STAT_SYNC, CONF_SYNC, and REM_SYNC threads and schedule those continuations in ET_TASK Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/85372282 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/85372282 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/85372282 Branch: refs/heads/master Commit: 853722820d0b36a540ae1ee069e73fbbcc488fc4 Parents: 354fbc2 Author: Phil Sorber <[email protected]> Authored: Thu Dec 5 20:23:55 2013 -0700 Committer: Phil Sorber <[email protected]> Committed: Thu Dec 5 20:23:55 2013 -0700 ---------------------------------------------------------------------- CHANGES | 3 ++ lib/records/I_RecProcess.h | 2 +- lib/records/RecProcess.cc | 73 ++++++++++++++++++++++++----------------- proxy/Main.cc | 2 +- 4 files changed, 48 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/85372282/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index a11ebca..03a04c6 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,9 @@ Changes with Apache Traffic Server 4.2.0 + *) [TS-2420] Remove STAT_SYNC, CONF_SYNC, and REM_SYNC threads and schedule those + continuations in ET_TASK + *) [TS-2372] Enable TLS perfect forward security with ECDHE. *) [TS-2416] Make TLS the session timeout threshold configurable. http://git-wip-us.apache.org/repos/asf/trafficserver/blob/85372282/lib/records/I_RecProcess.h ---------------------------------------------------------------------- diff --git a/lib/records/I_RecProcess.h b/lib/records/I_RecProcess.h index bc780ac..8faffe7 100644 --- a/lib/records/I_RecProcess.h +++ b/lib/records/I_RecProcess.h @@ -33,7 +33,7 @@ //------------------------------------------------------------------------- int RecProcessInit(RecModeT mode_type, Diags * diags = NULL); int RecProcessInitMessage(RecModeT mode_type); -int RecProcessStart(size_t stacksize=DEFAULT_STACKSIZE); +int RecProcessStart(void); //------------------------------------------------------------------------- // Setters for manipulating internal sleep intervals http://git-wip-us.apache.org/repos/asf/trafficserver/blob/85372282/lib/records/RecProcess.cc ---------------------------------------------------------------------- diff --git a/lib/records/RecProcess.cc b/lib/records/RecProcess.cc index f5606cc..75b5829 100644 --- a/lib/records/RecProcess.cc +++ b/lib/records/RecProcess.cc @@ -23,6 +23,8 @@ #include "libts.h" +#include "I_Tasks.h" + #include "P_EventSystem.h" #include "P_RecCore.h" #include "P_RecProcess.h" @@ -39,6 +41,9 @@ static EventNotify g_force_req_notify; static int g_rec_raw_stat_sync_interval_ms = REC_RAW_STAT_SYNC_INTERVAL_MS; static int g_rec_config_update_interval_ms = REC_CONFIG_UPDATE_INTERVAL_MS; static int g_rec_remote_sync_interval_ms = REC_REMOTE_SYNC_INTERVAL_MS; +static Event *raw_stat_sync_cont_event; +static Event *config_update_cont_event; +static Event *sync_cont_event; //------------------------------------------------------------------------- // i_am_the_record_owner, only used for librecprocess.a @@ -85,14 +90,28 @@ void RecProcess_set_raw_stat_sync_interval_ms(int ms) { Debug("statsproc", "g_rec_raw_stat_sync_interval_ms -> %d", ms); g_rec_raw_stat_sync_interval_ms = ms; + if (raw_stat_sync_cont_event) { + Debug("statsproc", "Rescheduling raw-stat syncer"); + raw_stat_sync_cont_event->schedule_every(HRTIME_MSECONDS(g_rec_raw_stat_sync_interval_ms)); + } } void RecProcess_set_config_update_interval_ms(int ms) { + Debug("statsproc", "g_rec_config_update_interval_ms -> %d", ms); g_rec_config_update_interval_ms = ms; + if (config_update_cont_event) { + Debug("statsproc", "Rescheduling config syncer"); + config_update_cont_event->schedule_every(HRTIME_MSECONDS(g_rec_config_update_interval_ms)); + } } void RecProcess_set_remote_sync_interval_ms(int ms) { + Debug("statsproc", "g_rec_remote_sync_interval_ms -> %d", ms); g_rec_remote_sync_interval_ms = ms; + if (sync_cont_event) { + Debug("statsproc", "Rescheduling remote syncer"); + sync_cont_event->schedule_every(HRTIME_MSECONDS(g_rec_remote_sync_interval_ms)); + } } //------------------------------------------------------------------------- @@ -317,12 +336,10 @@ struct raw_stat_sync_cont: public Continuation int exec_callbacks(int event, Event *e) { - while (true) { - RecExecRawStatSyncCbs(); - Debug("statsproc", "raw_stat_sync_cont() processed"); - usleep(g_rec_raw_stat_sync_interval_ms * 1000); - } - return EVENT_DONE; + RecExecRawStatSyncCbs(); + Debug("statsproc", "raw_stat_sync_cont() processed"); + + return EVENT_CONT; } }; @@ -340,12 +357,10 @@ struct config_update_cont: public Continuation int exec_callbacks(int event, Event *e) { - while (true) { - RecExecConfigUpdateCbs(REC_PROCESS_UPDATE_REQUIRED); - Debug("statsproc", "config_update_cont() processed"); - usleep(g_rec_config_update_interval_ms * 1000); - } - return EVENT_DONE; + RecExecConfigUpdateCbs(REC_PROCESS_UPDATE_REQUIRED); + Debug("statsproc", "config_update_cont() processed"); + + return EVENT_CONT; } }; @@ -374,20 +389,18 @@ struct sync_cont: public Continuation int sync(int event, Event *e) { - while (true) { - send_push_message(); - RecSyncStatsFile(); - if (RecSyncConfigToTB(m_tb) == REC_ERR_OKAY) { - int nbytes; - RecDebug(DL_Note, "Writing '%s'", g_rec_config_fpath); - RecHandle h_file = RecFileOpenW(g_rec_config_fpath); - RecFileWrite(h_file, m_tb->bufPtr(), m_tb->spaceUsed(), &nbytes); - RecFileClose(h_file); - } - Debug("statsproc", "sync_cont() processed"); - usleep(g_rec_remote_sync_interval_ms * 1000); + send_push_message(); + RecSyncStatsFile(); + if (RecSyncConfigToTB(m_tb) == REC_ERR_OKAY) { + int nbytes; + RecDebug(DL_Note, "Writing '%s'", g_rec_config_fpath); + RecHandle h_file = RecFileOpenW(g_rec_config_fpath); + RecFileWrite(h_file, m_tb->bufPtr(), m_tb->spaceUsed(), &nbytes); + RecFileClose(h_file); } - return EVENT_DONE; + Debug("statsproc", "sync_cont() processed"); + + return EVENT_CONT; } }; @@ -468,24 +481,24 @@ RecProcessInitMessage(RecModeT mode_type) // RecProcessStart //------------------------------------------------------------------------- int -RecProcessStart(size_t stacksize) +RecProcessStart(void) { if (g_started) { return REC_ERR_OKAY; } - Debug("statsproc", "Starting sync processors:"); + Debug("statsproc", "Starting sync continuations:"); raw_stat_sync_cont *rssc = NEW(new raw_stat_sync_cont(new_ProxyMutex())); Debug("statsproc", "\traw-stat syncer"); - eventProcessor.spawn_thread(rssc, "[STAT_SYNC]", stacksize); + raw_stat_sync_cont_event = eventProcessor.schedule_every(rssc, HRTIME_MSECONDS(g_rec_raw_stat_sync_interval_ms), ET_TASK); config_update_cont *cuc = NEW(new config_update_cont(new_ProxyMutex())); Debug("statsproc", "\tconfig syncer"); - eventProcessor.spawn_thread(cuc, "[CONF_SYNC]", stacksize); + config_update_cont_event = eventProcessor.schedule_every(cuc, HRTIME_MSECONDS(g_rec_config_update_interval_ms), ET_TASK); sync_cont *sc = NEW(new sync_cont(new_ProxyMutex())); Debug("statsproc", "\tremote syncer"); - eventProcessor.spawn_thread(sc, "[REM_SYNC]", stacksize); + sync_cont_event = eventProcessor.schedule_every(sc, HRTIME_MSECONDS(g_rec_remote_sync_interval_ms), ET_TASK); g_started = true; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/85372282/proxy/Main.cc ---------------------------------------------------------------------- diff --git a/proxy/Main.cc b/proxy/Main.cc index 318e825..aed6058 100644 --- a/proxy/Main.cc +++ b/proxy/Main.cc @@ -1532,7 +1532,7 @@ main(int /* argc ATS_UNUSED */, char **argv) } } else { remapProcessor.start(num_remap_threads, stacksize); - RecProcessStart(stacksize); + RecProcessStart(); initCacheControl(); initCongestionControl(); IpAllow::startup();
