Repository: trafficserver Updated Branches: refs/heads/master f6b5c389f -> b3ec3c568
TS-3575 Add support to show the ink_config.h features the system was compiled with Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/b3ec3c56 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/b3ec3c56 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/b3ec3c56 Branch: refs/heads/master Commit: b3ec3c5684d8efa4113546112464139fd8cfd5d9 Parents: f6b5c38 Author: Leif Hedstrom <[email protected]> Authored: Tue Jul 7 18:42:19 2015 -0600 Committer: Leif Hedstrom <[email protected]> Committed: Tue Jul 7 18:42:22 2015 -0600 ---------------------------------------------------------------------- cmd/traffic_layout/traffic_layout.cc | 157 +++++++++++++++++++++++++----- iocore/hostdb/HostDB.cc | 1 - lib/ts/ink_config.h.in | 10 +- proxy/hdrs/MIME.h | 1 - 4 files changed, 138 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b3ec3c56/cmd/traffic_layout/traffic_layout.cc ---------------------------------------------------------------------- diff --git a/cmd/traffic_layout/traffic_layout.cc b/cmd/traffic_layout/traffic_layout.cc index 331ded0..72d92c6 100644 --- a/cmd/traffic_layout/traffic_layout.cc +++ b/cmd/traffic_layout/traffic_layout.cc @@ -23,20 +23,145 @@ #include "libts.h" #include "ink_args.h" +#include "ink_config.h" #include "I_Version.h" #include "I_Layout.h" #include "I_RecProcess.h" #include "RecordsConfig.h" -const ArgumentDescription argument_descriptions[] = {HELP_ARGUMENT_DESCRIPTION(), VERSION_ARGUMENT_DESCRIPTION()}; +// Command line arguments (parsing) +struct CommandLineArgs { + int layout; + int features; + int json; +}; + +static CommandLineArgs cl; + +const ArgumentDescription argument_descriptions[] = { + {"layout", 'l', "Show the layout (this is the default with no options given)", "T", &cl.layout, NULL, NULL}, + {"features", 'f', "Show the compiled features", "T", &cl.features, NULL, NULL}, + {"json", 'j', "Produce output in JSON format (when supported)", "T", &cl.json, NULL, NULL}, + + HELP_ARGUMENT_DESCRIPTION(), + VERSION_ARGUMENT_DESCRIPTION()}; + + +// Produce output about compile time features, useful for checking how things were built, as well +// as for our TSQA test harness. +static void +print_feature(const char *name, int value, bool json, bool last = false) +{ + if (json) { + printf(" \"%s\": %d%s", name, value, last ? "\n" : ",\n"); + } else { + printf("#define %s %d\n", name, value); + } +} + +static void +print_feature(const char *name, const char *value, bool json, bool last = false) +{ + if (json) { + printf(" \"%s\": \"%s\"%s", name, value, last ? "\n" : ",\n"); + } else { + printf("#define %s \"%s\"\n", name, value); + } +} + +static void +produce_features(bool json) +{ + if (json) { + printf("{\n"); + } + print_feature("BUILD_MACHINE", BUILD_MACHINE, json); + print_feature("BUILD_PERSON", BUILD_PERSON, json); + print_feature("BUILD_GROUP", BUILD_GROUP, json); + print_feature("BUILD_NUMBER", BUILD_NUMBER, json); + print_feature("TS_HAS_LIBZ", TS_HAS_LIBZ, json); + print_feature("TS_HAS_LZMA", TS_HAS_LZMA, json); + print_feature("TS_HAS_JEMALLOC", TS_HAS_JEMALLOC, json); + print_feature("TS_HAS_TCMALLOC", TS_HAS_TCMALLOC, json); + print_feature("TS_HAS_IN6_IS_ADDR_UNSPECIFIED", TS_HAS_IN6_IS_ADDR_UNSPECIFIED, json); + print_feature("TS_HAS_BACKTRACE", TS_HAS_BACKTRACE, json); + print_feature("TS_HAS_PROFILER", TS_HAS_PROFILER, json); + print_feature("TS_USE_FAST_SDK", TS_USE_FAST_SDK, json); + print_feature("TS_USE_DIAGS", TS_USE_DIAGS, json); + print_feature("TS_USE_EPOLL", TS_USE_EPOLL, json); + print_feature("TS_USE_KQUEUE", TS_USE_KQUEUE, json); + print_feature("TS_USE_PORT", TS_USE_PORT, json); + print_feature("TS_USE_POSIX_CAP", TS_USE_POSIX_CAP, json); + print_feature("TS_USE_TPROXY", TS_USE_TPROXY, json); + print_feature("TS_HAS_SO_MARK", TS_HAS_SO_MARK, json); + print_feature("TS_HAS_SPDY", TS_HAS_SPDY, json); + print_feature("TS_HAS_IP_TOS", TS_HAS_IP_TOS, json); + print_feature("TS_USE_HWLOC", TS_USE_HWLOC, json); + print_feature("TS_USE_FREELIST", TS_USE_FREELIST, json); + print_feature("TS_USE_TLS_NPN", TS_USE_TLS_NPN, json); + print_feature("TS_USE_TLS_ALPN", TS_USE_TLS_ALPN, json); + print_feature("TS_USE_TLS_SNI", TS_USE_TLS_SNI, json); + print_feature("TS_USE_CERT_CB", TS_USE_CERT_CB, json); + print_feature("TS_USE_SET_RBIO", TS_USE_SET_RBIO, json); + print_feature("TS_USE_TLS_ECKEY", TS_USE_TLS_ECKEY, json); + print_feature("TS_USE_LINUX_NATIVE_AIO", TS_USE_LINUX_NATIVE_AIO, json); + print_feature("TS_HAS_SO_PEERCRED", TS_HAS_SO_PEERCRED, json); + print_feature("TS_USE_REMOTE_UNWINDING", TS_USE_REMOTE_UNWINDING, json); + print_feature("GETHOSTBYNAME_R_GLIBC2", GETHOSTBYNAME_R_GLIBC2, json); + print_feature("SIZEOF_VOID_POINTER", SIZEOF_VOID_POINTER, json); + print_feature("TS_IP_TRANSPARENT", TS_IP_TRANSPARENT, json); + print_feature("TS_HAS_128BIT_CAS", TS_HAS_128BIT_CAS, json); + print_feature("TS_HAS_TESTS", TS_HAS_TESTS, json); + print_feature("TS_HAS_WCCP", TS_HAS_WCCP, json); + print_feature("TS_MAX_THREADS_IN_EACH_THREAD_TYPE", TS_MAX_THREADS_IN_EACH_THREAD_TYPE, json); + print_feature("TS_MAX_NUMBER_EVENT_THREADS", TS_MAX_NUMBER_EVENT_THREADS, json); + print_feature("TS_MAX_HOST_NAME_LEN", TS_MAX_HOST_NAME_LEN, json); + print_feature("TS_MAX_API_STATS", TS_MAX_API_STATS, json); + print_feature("SPLIT_DNS", SPLIT_DNS, json); + print_feature("HTTP_CACHE", HTTP_CACHE, json); + print_feature("TS_PKGSYSUSER", TS_PKGSYSUSER, json); + print_feature("TS_PKGSYSGROUP", TS_PKGSYSGROUP, json, true); + if (json) { + printf("}\n"); + } +} + static void -printvar(const char *name, char *val) +print_var(const char *name, char *val) { printf("%s: %s\n", name, val); ats_free(val); } +static void +produce_layout() +{ + Layout::create(); + + RecProcessInit(RECM_STAND_ALONE, NULL /* diags */); + LibRecordsConfigInit(); + + printf("%s: %s\n", "PREFIX", Layout::get()->prefix); + print_var("BINDIR", RecConfigReadBinDir()); + print_var("SYSCONFDIR", RecConfigReadConfigDir()); + print_var("LIBDIR", Layout::get()->libdir); + print_var("LOGDIR", RecConfigReadLogDir()); + print_var("RUNTIMEDIR", RecConfigReadRuntimeDir()); + print_var("PLUGINDIR", RecConfigReadPrefixPath("proxy.config.plugin.plugin_dir")); + print_var("INCLUDEDIR", Layout::get()->includedir); + print_var("SNAPSHOTDIR", RecConfigReadSnapshotDir()); + + print_var("records.config", RecConfigReadConfigPath(NULL, REC_CONFIG_FILE)); + print_var("remap.config", RecConfigReadConfigPath("proxy.config.url_remap.filename")); + print_var("plugin.config", RecConfigReadConfigPath(NULL, "plugin.config")); + print_var("ssl_multicert.config", RecConfigReadConfigPath("proxy.config.ssl.server.multicert.filename")); + print_var("storage.config", RecConfigReadConfigPath("proxy.config.cache.storage_filename")); + print_var("hosting.config", RecConfigReadConfigPath("proxy.config.cache.hosting_filename")); + print_var("volume.config", RecConfigReadConfigPath("proxy.config.cache.volume_filename")); + print_var("ip_allow.config", RecConfigReadConfigPath("proxy.config.cache.ip_allow.filename")); +} + int main(int /* argc ATS_UNUSED */, const char **argv) { @@ -47,28 +172,10 @@ main(int /* argc ATS_UNUSED */, const char **argv) // Process command line arguments and dump into variables process_args(&appVersionInfo, argument_descriptions, countof(argument_descriptions), argv); - Layout::create(); - RecProcessInit(RECM_STAND_ALONE, NULL /* diags */); - LibRecordsConfigInit(); - - printf("%s: %s\n", "PREFIX", Layout::get()->prefix); - printvar("BINDIR", RecConfigReadBinDir()); - printvar("SYSCONFDIR", RecConfigReadConfigDir()); - printvar("LIBDIR", Layout::get()->libdir); - printvar("LOGDIR", RecConfigReadLogDir()); - printvar("RUNTIMEDIR", RecConfigReadRuntimeDir()); - printvar("PLUGINDIR", RecConfigReadPrefixPath("proxy.config.plugin.plugin_dir")); - printvar("INCLUDEDIR", Layout::get()->includedir); - printvar("SNAPSHOTDIR", RecConfigReadSnapshotDir()); - - printvar("records.config", RecConfigReadConfigPath(NULL, REC_CONFIG_FILE)); - printvar("remap.config", RecConfigReadConfigPath("proxy.config.url_remap.filename")); - printvar("plugin.config", RecConfigReadConfigPath(NULL, "plugin.config")); - printvar("ssl_multicert.config", RecConfigReadConfigPath("proxy.config.ssl.server.multicert.filename")); - printvar("storage.config", RecConfigReadConfigPath("proxy.config.cache.storage_filename")); - printvar("hosting.config", RecConfigReadConfigPath("proxy.config.cache.hosting_filename")); - printvar("volume.config", RecConfigReadConfigPath("proxy.config.cache.volume_filename")); - printvar("ip_allow.config", RecConfigReadConfigPath("proxy.config.cache.ip_allow.filename")); - + if (cl.features) { + produce_features(0 != cl.json); + } else { + produce_layout(); + } exit(0); } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b3ec3c56/iocore/hostdb/HostDB.cc ---------------------------------------------------------------------- diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc index eb33f7f..ec4c463 100644 --- a/iocore/hostdb/HostDB.cc +++ b/iocore/hostdb/HostDB.cc @@ -2390,7 +2390,6 @@ struct ShowHostDB : public ShowCont { ShowHostDB(Continuation *c, HTTPHdr *h) : ShowCont(c, h), name(0), port(0), force(0) { - ats_ip_invalidate(&ip); SET_HANDLER(&ShowHostDB::showMain); } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b3ec3c56/lib/ts/ink_config.h.in ---------------------------------------------------------------------- diff --git a/lib/ts/ink_config.h.in b/lib/ts/ink_config.h.in index 9ae0160..ca4c69e 100644 --- a/lib/ts/ink_config.h.in +++ b/lib/ts/ink_config.h.in @@ -28,6 +28,8 @@ // Note: All "defines" should be prefixed with TS_ when appropriate, please // don't use ATS_ any more. +// Note 2: If you make changes here, please update the traffic_layout.cc file as well. + /* GENERATED FILE WARNING! DO NOT EDIT ink_config.h * * You must modify ink_config.h.in instead. @@ -92,15 +94,15 @@ #define TS_HAS_WCCP @has_wccp@ #define TS_MAX_THREADS_IN_EACH_THREAD_TYPE @max_threads_per_type@ -#define TS_MAX_NUMBER_EVENT_THREADS @max_event_threads@ +#define TS_MAX_NUMBER_EVENT_THREADS @max_event_threads@ #define TS_MAX_HOST_NAME_LEN @max_host_name_len@ -# define TS_MAX_API_STATS @max_api_stats@ +#define TS_MAX_API_STATS @max_api_stats@ -# define SPLIT_DNS 1 -# define HTTP_CACHE 1 +#define SPLIT_DNS 1 +#define HTTP_CACHE 1 /* Defaults for user / group */ #define TS_PKGSYSUSER "@pkgsysuser@" http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b3ec3c56/proxy/hdrs/MIME.h ---------------------------------------------------------------------- diff --git a/proxy/hdrs/MIME.h b/proxy/hdrs/MIME.h index 4d9b2b6..eb57f88 100644 --- a/proxy/hdrs/MIME.h +++ b/proxy/hdrs/MIME.h @@ -1330,7 +1330,6 @@ MIMEHdr::field_value_append(MIMEField *field, const char *value_str, int value_l } - inline void MIMEHdr::field_combine_dups(MIMEField *field, bool prepend_comma, const char separator) {
