This is an automated email from the ASF dual-hosted git repository. zwoop pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit de76e1ed2b4390e597e2895e86e6c731564bb6eb Author: Leif Hedstrom <[email protected]> AuthorDate: Fri May 31 15:10:52 2019 -0600 Step 20: Removes incVersion/inc_version from Filemanager etc. --- doc/developer-guide/api/types/TSMgmtTypes.en.rst | 2 -- lib/records/I_RecCore.h | 17 +++++------- lib/records/I_RecEvents.h | 1 - lib/records/P_RecCore.cc | 35 ++++++++++-------------- lib/records/P_RecCore.h | 4 +-- lib/records/RecConfigParse.cc | 4 +-- lib/records/RecCore.cc | 2 +- mgmt/BaseManager.h | 2 +- mgmt/FileManager.cc | 11 ++++---- mgmt/FileManager.h | 4 +-- mgmt/LocalManager.cc | 15 ++++------ mgmt/LocalManager.h | 2 +- mgmt/ProcessManager.cc | 1 - mgmt/Rollback.cc | 2 +- src/traffic_manager/AddConfigFilesHere.cc | 2 +- src/traffic_manager/traffic_manager.cc | 4 +-- src/traffic_server/EventName.cc | 2 -- src/traffic_server/HostStatus.cc | 2 +- src/traffic_server/traffic_server.cc | 2 +- 19 files changed, 48 insertions(+), 66 deletions(-) diff --git a/doc/developer-guide/api/types/TSMgmtTypes.en.rst b/doc/developer-guide/api/types/TSMgmtTypes.en.rst index 854163b..6e18fd9 100644 --- a/doc/developer-guide/api/types/TSMgmtTypes.en.rst +++ b/doc/developer-guide/api/types/TSMgmtTypes.en.rst @@ -76,8 +76,6 @@ Management Events .. c:macro:: MGMT_EVENT_LIBRECORDS -.. c:macro:: MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION - .. c:macro:: MGMT_EVENT_STORAGE_DEVICE_CMD_OFFLINE .. c:macro:: MGMT_EVENT_LIFECYCLE_MESSAGE diff --git a/lib/records/I_RecCore.h b/lib/records/I_RecCore.h index 7609e32..0fd60ef 100644 --- a/lib/records/I_RecCore.h +++ b/lib/records/I_RecCore.h @@ -43,11 +43,10 @@ int RecSetDiags(Diags *diags); //------------------------------------------------------------------------- // Config File Parsing //------------------------------------------------------------------------- -typedef void (*RecConfigEntryCallback)(RecT rec_type, RecDataT data_type, const char *name, const char *value, RecSourceT source, - bool inc_version); +typedef void (*RecConfigEntryCallback)(RecT rec_type, RecDataT data_type, const char *name, const char *value, RecSourceT source); void RecConfigFileInit(); -int RecConfigFileParse(const char *path, RecConfigEntryCallback handler, bool inc_version); +int RecConfigFileParse(const char *path, RecConfigEntryCallback handler); // Return a copy of the system's configuration directory. std::string RecConfigReadConfigDir(); @@ -140,13 +139,11 @@ RecErrT RecRegisterRawStatUpdateFunc(const char *name, RecRawStatBlock *rsb, int // already been taken out for the callback. // RecSetRecordConvert -> WebMgmtUtils.cc::varSetFromStr() -RecErrT RecSetRecordConvert(const char *name, const RecString rec_string, RecSourceT source, bool lock = true, - bool inc_version = true); -RecErrT RecSetRecordInt(const char *name, RecInt rec_int, RecSourceT source, bool lock = true, bool inc_version = true); -RecErrT RecSetRecordFloat(const char *name, RecFloat rec_float, RecSourceT source, bool lock = true, bool inc_version = true); -RecErrT RecSetRecordString(const char *name, const RecString rec_string, RecSourceT source, bool lock = true, - bool inc_version = true); -RecErrT RecSetRecordCounter(const char *name, RecCounter rec_counter, RecSourceT source, bool lock = true, bool inc_version = true); +RecErrT RecSetRecordConvert(const char *name, const RecString rec_string, RecSourceT source, bool lock = true); +RecErrT RecSetRecordInt(const char *name, RecInt rec_int, RecSourceT source, bool lock = true); +RecErrT RecSetRecordFloat(const char *name, RecFloat rec_float, RecSourceT source, bool lock = true); +RecErrT RecSetRecordString(const char *name, const RecString rec_string, RecSourceT source, bool lock = true); +RecErrT RecSetRecordCounter(const char *name, RecCounter rec_counter, RecSourceT source, bool lock = true); RecErrT RecGetRecordInt(const char *name, RecInt *rec_int, bool lock = true); RecErrT RecGetRecordFloat(const char *name, RecFloat *rec_float, bool lock = true); diff --git a/lib/records/I_RecEvents.h b/lib/records/I_RecEvents.h index d73200a..3e3c476 100644 --- a/lib/records/I_RecEvents.h +++ b/lib/records/I_RecEvents.h @@ -33,6 +33,5 @@ #define REC_EVENT_PLUGIN_CONFIG_UPDATE 10006 #define REC_EVENT_ROLL_LOG_FILES 10008 #define REC_EVENT_LIBRECORDS 10009 -#define REC_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION 10010 #define REC_EVENT_CACHE_DISK_CONTROL 10011 diff --git a/lib/records/P_RecCore.cc b/lib/records/P_RecCore.cc index 5b43866..b2f1550 100644 --- a/lib/records/P_RecCore.cc +++ b/lib/records/P_RecCore.cc @@ -359,8 +359,7 @@ RecRegisterConfigCounter(RecT rec_type, const char *name, RecCounter data_defaul // RecSetRecordXXX //------------------------------------------------------------------------- RecErrT -RecSetRecord(RecT rec_type, const char *name, RecDataT data_type, RecData *data, RecRawStat *data_raw, RecSourceT source, bool lock, - bool inc_version) +RecSetRecord(RecT rec_type, const char *name, RecDataT data_type, RecData *data, RecRawStat *data_raw, RecSourceT source, bool lock) { RecErrT err = REC_ERR_OKAY; RecRecord *r1; @@ -389,10 +388,6 @@ RecSetRecord(RecT rec_type, const char *name, RecDataT data_type, RecData *data, if (rec_updated_p) { r1->sync_required = REC_SYNC_REQUIRED; - if (inc_version) { - r1->sync_required |= REC_INC_CONFIG_VERSION; - } - if (REC_TYPE_IS_CONFIG(r1->rec_type)) { r1->config_meta.update_required = REC_UPDATE_REQUIRED; } @@ -457,43 +452,43 @@ Ldone: } RecErrT -RecSetRecordConvert(const char *name, const RecString rec_string, RecSourceT source, bool lock, bool inc_version) +RecSetRecordConvert(const char *name, const RecString rec_string, RecSourceT source, bool lock) { RecData data; data.rec_string = rec_string; - return RecSetRecord(RECT_NULL, name, RECD_NULL, &data, nullptr, source, lock, inc_version); + return RecSetRecord(RECT_NULL, name, RECD_NULL, &data, nullptr, source, lock); } RecErrT -RecSetRecordInt(const char *name, RecInt rec_int, RecSourceT source, bool lock, bool inc_version) +RecSetRecordInt(const char *name, RecInt rec_int, RecSourceT source, bool lock) { RecData data; data.rec_int = rec_int; - return RecSetRecord(RECT_NULL, name, RECD_INT, &data, nullptr, source, lock, inc_version); + return RecSetRecord(RECT_NULL, name, RECD_INT, &data, nullptr, source, lock); } RecErrT -RecSetRecordFloat(const char *name, RecFloat rec_float, RecSourceT source, bool lock, bool inc_version) +RecSetRecordFloat(const char *name, RecFloat rec_float, RecSourceT source, bool lock) { RecData data; data.rec_float = rec_float; - return RecSetRecord(RECT_NULL, name, RECD_FLOAT, &data, nullptr, source, lock, inc_version); + return RecSetRecord(RECT_NULL, name, RECD_FLOAT, &data, nullptr, source, lock); } RecErrT -RecSetRecordString(const char *name, const RecString rec_string, RecSourceT source, bool lock, bool inc_version) +RecSetRecordString(const char *name, const RecString rec_string, RecSourceT source, bool lock) { RecData data; data.rec_string = rec_string; - return RecSetRecord(RECT_NULL, name, RECD_STRING, &data, nullptr, source, lock, inc_version); + return RecSetRecord(RECT_NULL, name, RECD_STRING, &data, nullptr, source, lock); } RecErrT -RecSetRecordCounter(const char *name, RecCounter rec_counter, RecSourceT source, bool lock, bool inc_version) +RecSetRecordCounter(const char *name, RecCounter rec_counter, RecSourceT source, bool lock) { RecData data; data.rec_counter = rec_counter; - return RecSetRecord(RECT_NULL, name, RECD_COUNTER, &data, nullptr, source, lock, inc_version); + return RecSetRecord(RECT_NULL, name, RECD_COUNTER, &data, nullptr, source, lock); } // check the version of the snap file to remove records.snap or not @@ -620,13 +615,13 @@ RecSyncStatsFile() // Consume a parsed record, pushing it into the records hash table. static void -RecConsumeConfigEntry(RecT rec_type, RecDataT data_type, const char *name, const char *value, RecSourceT source, bool inc_version) +RecConsumeConfigEntry(RecT rec_type, RecDataT data_type, const char *name, const char *value, RecSourceT source) { RecData data; memset(&data, 0, sizeof(RecData)); RecDataSetFromString(data_type, &data, value); - RecSetRecord(rec_type, name, data_type, &data, nullptr, source, false, inc_version); + RecSetRecord(rec_type, name, data_type, &data, nullptr, source, false); RecDataZero(data_type, &data); } @@ -634,7 +629,7 @@ RecConsumeConfigEntry(RecT rec_type, RecDataT data_type, const char *name, const // RecReadConfigFile //------------------------------------------------------------------------- RecErrT -RecReadConfigFile(bool inc_version) +RecReadConfigFile() { RecDebug(DL_Note, "Reading '%s'", g_rec_config_fpath); @@ -642,7 +637,7 @@ RecReadConfigFile(bool inc_version) ink_rwlock_wrlock(&g_records_rwlock); // Parse the actual file and hash the values. - RecConfigFileParse(g_rec_config_fpath, RecConsumeConfigEntry, inc_version); + RecConfigFileParse(g_rec_config_fpath, RecConsumeConfigEntry); // release our hash table ink_rwlock_unlock(&g_records_rwlock); diff --git a/lib/records/P_RecCore.h b/lib/records/P_RecCore.h index 7825ae0..9a0424a 100644 --- a/lib/records/P_RecCore.h +++ b/lib/records/P_RecCore.h @@ -70,7 +70,7 @@ RecRecord *RecForceInsert(RecRecord *record); //------------------------------------------------------------------------- RecErrT RecSetRecord(RecT rec_type, const char *name, RecDataT data_type, RecData *data, RecRawStat *raw_stat, RecSourceT source, - bool lock = true, bool inc_version = true); + bool lock = true); RecErrT RecGetRecord_Xmalloc(const char *name, RecDataT data_type, RecData *data, bool lock = true); @@ -79,7 +79,7 @@ RecErrT RecGetRecord_Xmalloc(const char *name, RecDataT data_type, RecData *data //------------------------------------------------------------------------- RecErrT RecReadStatsFile(); RecErrT RecSyncStatsFile(); -RecErrT RecReadConfigFile(bool inc_version); +RecErrT RecReadConfigFile(); //------------------------------------------------------------------------- // Misc diff --git a/lib/records/RecConfigParse.cc b/lib/records/RecConfigParse.cc index 1fa8e0f..1d84416 100644 --- a/lib/records/RecConfigParse.cc +++ b/lib/records/RecConfigParse.cc @@ -133,7 +133,7 @@ RecConfigOverrideFromEnvironment(const char *name, const char *value) // RecParseConfigFile //------------------------------------------------------------------------- int -RecConfigFileParse(const char *path, RecConfigEntryCallback handler, bool inc_version) +RecConfigFileParse(const char *path, RecConfigEntryCallback handler) { char *fbuf; int fsize; @@ -254,7 +254,7 @@ RecConfigFileParse(const char *path, RecConfigEntryCallback handler, bool inc_ve // OK, we parsed the record, send it to the handler ... value_str = RecConfigOverrideFromEnvironment(name_str, data_str); - handler(rec_type, data_type, name_str, value_str, value_str == data_str ? REC_SOURCE_EXPLICIT : REC_SOURCE_ENV, inc_version); + handler(rec_type, data_type, name_str, value_str, value_str == data_str ? REC_SOURCE_EXPLICIT : REC_SOURCE_ENV); // update our g_rec_config_contents_xxx cfe = (RecConfigFileEntry *)ats_malloc(sizeof(RecConfigFileEntry)); diff --git a/lib/records/RecCore.cc b/lib/records/RecCore.cc index 68dd6fa..7c1f8ab 100644 --- a/lib/records/RecCore.cc +++ b/lib/records/RecCore.cc @@ -224,7 +224,7 @@ RecCoreInit(RecModeT mode_type, Diags *_diags) } if (file_exists) { - RecReadConfigFile(true); + RecReadConfigFile(); } } diff --git a/mgmt/BaseManager.h b/mgmt/BaseManager.h index 853acee..322b654 100644 --- a/mgmt/BaseManager.h +++ b/mgmt/BaseManager.h @@ -49,7 +49,7 @@ #define MGMT_EVENT_PLUGIN_CONFIG_UPDATE 10006 #define MGMT_EVENT_ROLL_LOG_FILES 10008 #define MGMT_EVENT_LIBRECORDS 10009 -#define MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION 10010 +// 10010 is unused // cache storage operations - each is a distinct event. // this is done because the code paths share nothing but boilerplate logic // so it's easier to do this than to try to encode an opcode and yet another diff --git a/mgmt/FileManager.cc b/mgmt/FileManager.cc index 6aa30bb..af7eba5 100644 --- a/mgmt/FileManager.cc +++ b/mgmt/FileManager.cc @@ -139,7 +139,7 @@ FileManager::getRollbackObj(const char *fileName, Rollback **rbPtr) // // void -FileManager::fileChanged(const char *fileName, const char *configName, bool incVersion) +FileManager::fileChanged(const char *fileName, const char *configName) { callbackListable *cb; char *filenameCopy, *confignameCopy; @@ -151,7 +151,7 @@ FileManager::fileChanged(const char *fileName, const char *configName, bool incV // defensive in case it's modified when it's not supposed to be confignameCopy = ats_strdup(configName); filenameCopy = ats_strdup(fileName); - (*cb->func)(filenameCopy, confignameCopy, incVersion); + (*cb->func)(filenameCopy, confignameCopy); ats_free(filenameCopy); ats_free(confignameCopy); } @@ -216,17 +216,18 @@ FileManager::rereadConfig() n = parentFileNeedChange.size(); for (size_t i = 0; i < n; i++) { if (std::find(changedFiles.begin(), changedFiles.end(), parentFileNeedChange[i]) == changedFiles.end()) { - fileChanged(parentFileNeedChange[i]->getFileName(), parentFileNeedChange[i]->getConfigName(), true); + fileChanged(parentFileNeedChange[i]->getFileName(), parentFileNeedChange[i]->getConfigName()); } } // INKqa11910 // need to first check that enable_customizations is enabled bool found; int enabled = (int)REC_readInteger("proxy.config.body_factory.enable_customizations", &found); + if (found && enabled) { - fileChanged("proxy.config.body_factory.template_sets_dir", "proxy.config.body_factory.template_sets_dir", true); + fileChanged("proxy.config.body_factory.template_sets_dir", "proxy.config.body_factory.template_sets_dir"); } - fileChanged("proxy.config.ssl.server.ticket_key.filename", "proxy.config.ssl.server.ticket_key.filename", true); + fileChanged("proxy.config.ssl.server.ticket_key.filename", "proxy.config.ssl.server.ticket_key.filename"); } bool diff --git a/mgmt/FileManager.h b/mgmt/FileManager.h index a667504..f1f3b53 100644 --- a/mgmt/FileManager.h +++ b/mgmt/FileManager.h @@ -31,7 +31,7 @@ class ExpandingArray; class Rollback; -typedef void (*FileCallbackFunc)(char *, char *, bool); +typedef void (*FileCallbackFunc)(char *, char *); struct callbackListable { public: @@ -84,7 +84,7 @@ public: unsigned flags = 0); bool getRollbackObj(const char *fileName, Rollback **rbPtr); void registerCallback(FileCallbackFunc func); - void fileChanged(const char *fileName, const char *configName, bool incVersion); + void fileChanged(const char *fileName, const char *configName); void rereadConfig(); bool isConfigStale(); void configFileChild(const char *parent, const char *child, unsigned int options); diff --git a/mgmt/LocalManager.cc b/mgmt/LocalManager.cc index a834e68..8673cf4 100644 --- a/mgmt/LocalManager.cc +++ b/mgmt/LocalManager.cc @@ -605,7 +605,6 @@ LocalManager::sendMgmtMsgToProcesses(MgmtMessageHdr *mh) mgmt_log("[LocalManager::SendMgmtMsgsToProcesses]Event is being constructed .\n"); break; case MGMT_EVENT_CONFIG_FILE_UPDATE: - case MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION: bool found; char *fname = nullptr; Rollback *rb; @@ -691,13 +690,10 @@ LocalManager::sendMgmtMsgToProcesses(MgmtMessageHdr *mh) } void -LocalManager::signalFileChange(const char *var_name, bool incVersion) +LocalManager::signalFileChange(const char *var_name) { - if (incVersion) { - signalEvent(MGMT_EVENT_CONFIG_FILE_UPDATE, var_name); - } else { - signalEvent(MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION, var_name); - } + signalEvent(MGMT_EVENT_CONFIG_FILE_UPDATE, var_name); + return; } @@ -753,11 +749,10 @@ LocalManager::processEventQueue() auto payload = mh->payload().rebind<char>(); // check if we have a local file update - if (mh->msg_id == MGMT_EVENT_CONFIG_FILE_UPDATE || mh->msg_id == MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION) { + if (mh->msg_id == MGMT_EVENT_CONFIG_FILE_UPDATE) { // records.config if (!(strcmp(payload.begin(), REC_CONFIG_FILE))) { - bool incVersion = mh->msg_id == MGMT_EVENT_CONFIG_FILE_UPDATE; - if (RecReadConfigFile(incVersion) != REC_ERR_OKAY) { + if (RecReadConfigFile() != REC_ERR_OKAY) { mgmt_elog(errno, "[fileUpdated] Config update failed for records.config\n"); } else { RecConfigWarnIfUnregistered(); diff --git a/mgmt/LocalManager.h b/mgmt/LocalManager.h index 0f4faff..4c9cb37 100644 --- a/mgmt/LocalManager.h +++ b/mgmt/LocalManager.h @@ -68,7 +68,7 @@ public: void sendMgmtMsgToProcesses(int msg_id, const char *data_raw, int data_len); void sendMgmtMsgToProcesses(MgmtMessageHdr *mh); - void signalFileChange(const char *var_name, bool incVersion = true); + void signalFileChange(const char *var_name); void signalEvent(int msg_id, const char *data_str); void signalEvent(int msg_id, const char *data_raw, int data_len); void signalAlarm(int alarm_id, const char *desc = nullptr, const char *ip = nullptr); diff --git a/mgmt/ProcessManager.cc b/mgmt/ProcessManager.cc index 4636429..f7e0888 100644 --- a/mgmt/ProcessManager.cc +++ b/mgmt/ProcessManager.cc @@ -471,7 +471,6 @@ ProcessManager::handleMgmtMsgFromLM(MgmtMessageHdr *mh) } } break; case MGMT_EVENT_CONFIG_FILE_UPDATE: - case MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION: /* librecords -- we don't do anything in here because we are traffic_server and we are not the owner of proxy.config.* variables. diff --git a/mgmt/Rollback.cc b/mgmt/Rollback.cc index 70fe2b0..d0e3308 100644 --- a/mgmt/Rollback.cc +++ b/mgmt/Rollback.cc @@ -117,7 +117,7 @@ Rollback::checkForUserUpdate() if (fileLastModified < TS_ARCHIVE_STAT_MTIME(fileInfo)) { fileLastModified = TS_ARCHIVE_STAT_MTIME(fileInfo); - configFiles->fileChanged(fileName, configName, true); + configFiles->fileChanged(fileName, configName); mgmt_log("User has changed config file %s\n", fileName); result = true; diff --git a/src/traffic_manager/AddConfigFilesHere.cc b/src/traffic_manager/AddConfigFilesHere.cc index 6ac388b..30be5a6 100644 --- a/src/traffic_manager/AddConfigFilesHere.cc +++ b/src/traffic_manager/AddConfigFilesHere.cc @@ -36,7 +36,7 @@ extern FileManager *configFiles; ****************************************************************************/ void -testcall(char *foo, char * /*configName */, bool /* incVersion */) +testcall(char *foo, char * /*configName */) { Debug("lm", "Received Callback that %s has changed", foo); } diff --git a/src/traffic_manager/traffic_manager.cc b/src/traffic_manager/traffic_manager.cc index 4768a51..99b7466 100644 --- a/src/traffic_manager/traffic_manager.cc +++ b/src/traffic_manager/traffic_manager.cc @@ -71,7 +71,7 @@ using namespace std::literals; LocalManager *lmgmt = nullptr; FileManager *configFiles; -static void fileUpdated(char *fname, char *configName, bool incVersion); +static void fileUpdated(char *fname, char *configName); static void runAsUser(const char *userName); #if defined(freebsd) @@ -948,7 +948,7 @@ SigChldHandler(int /* sig ATS_UNUSED */) } void -fileUpdated(char *fname, char *configName, bool incVersion) +fileUpdated(char *fname, char *configName) { // If there is no config name recorded, assume this file is not reloadable // Just log a message diff --git a/src/traffic_server/EventName.cc b/src/traffic_server/EventName.cc index 1eb9b58..ae0c5993 100644 --- a/src/traffic_server/EventName.cc +++ b/src/traffic_server/EventName.cc @@ -125,8 +125,6 @@ event_int_to_string(int event, int blen, char *buffer) return "MGMT_EVENT_BOUNCE"; case MGMT_EVENT_CONFIG_FILE_UPDATE: return "MGMT_EVENT_CONFIG_FILE_UPDATE"; - case MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION: - return "MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION"; case MGMT_EVENT_CLEAR_STATS: return "MGMT_EVENT_CLEAR_STATS"; case MGMT_EVENT_HOST_STATUS_UP: diff --git a/src/traffic_server/HostStatus.cc b/src/traffic_server/HostStatus.cc index c931be4..9c23103 100644 --- a/src/traffic_server/HostStatus.cc +++ b/src/traffic_server/HostStatus.cc @@ -341,7 +341,7 @@ HostStatus::setHostStatus(const char *name, HostStatus_t status, const unsigned if (result == REC_ERR_OKAY) { std::stringstream status_rec; status_rec << *host_stat; - RecSetRecordString(stat_name.c_str(), const_cast<char *>(status_rec.str().c_str()), REC_SOURCE_EXPLICIT, true, false); + RecSetRecordString(stat_name.c_str(), const_cast<char *>(status_rec.str().c_str()), REC_SOURCE_EXPLICIT, true); if (status == HostStatus_t::HOST_STATUS_UP) { Debug("host_statuses", "set status up for name: %s, status: %d, stat_name: %s", name, status, stat_name.c_str()); } else { diff --git a/src/traffic_server/traffic_server.cc b/src/traffic_server/traffic_server.cc index 74b91ba..fe17392 100644 --- a/src/traffic_server/traffic_server.cc +++ b/src/traffic_server/traffic_server.cc @@ -867,7 +867,7 @@ cmd_verify(char * /* cmd ATS_UNUSED */) fprintf(stderr, "INFO: Successfully loaded remap.config\n\n"); } - if (RecReadConfigFile(false) != REC_ERR_OKAY) { + if (RecReadConfigFile() != REC_ERR_OKAY) { exitStatus |= (1 << 1); fprintf(stderr, "ERROR: Failed to load records.config, exitStatus %d\n\n", exitStatus); } else {
