Yes. Based on those stacks, the problem is that it was being gathered up by the stat synchronizer without the actual stat infrastructure needed.
On Wed, Nov 8, 2017 at 3:00 PM, James Peach <jpe...@apache.org> wrote: > > > On Nov 8, 2017, at 11:22 AM, Zelkowitz, Evan <evan_zelkow...@comcast.com> > wrote: > > > > I think the issue is with using TS_RECORDTYPE_PROCESS (or plugin, I > switched mine to plugin since that’s where Im creating these values). I > changed it to TS_RECORDTYPE_CONFIG and I no longer get that crash. I also > saw this in the docs: > > The management role for a management value. In practice only > TS_RECORDTYPE_CONFIG is usable. > > > > So the only usable type for a MgmtString is CONFIG? > > Looks like TSMgmtStringCreate should check the record type and call either > RecRegisterConfigString or RecRegisterStatString as appropriate. > RecRegisterConfigString should also return an error if it receives an > unsupported record type (currently it just asserts in debug builds). > > > On 11/8/17, 1:26 AM, "Zelkowitz, Evan" <evan_zelkow...@comcast.com> > wrote: > > > > Agreed, if people dont want tsstat to accept strings that should > return an error, can open up an issue for that later > > > > So I got a trace on my linux box that should help a bit, the previous > one was from osx that I mainly just use to test building > > > > #0 0x00007f6f2ee25ccb in ?? () from /lib/x86_64-linux-gnu/libgcc_ > s.so.1 > > #1 0x00007f6f2ee27668 in _Unwind_Backtrace () from > /lib/x86_64-linux-gnu/libgcc_s.so.1 > > #2 0x00007f6f2eb62b0f in __GI___backtrace (array=<optimized out>, > size=<optimized out>) at ../sysdeps/x86_64/backtrace.c:110 > > #3 0x00007f6f30c2a577 in ink_stack_trace_dump () at > ink_stack_trace.cc:63 > > #4 0x00007f6f30c3ba08 in signal_crash_handler (signo=11) at > signals.cc:180 > > #5 0x000000000050e36d in crash_logger_invoke (signo=11, > info=0x7f6f2d2218b0, ctx=0x7f6f2d221780) at Crash.cc:169 > > #6 <signal handler called> > > #7 0x0000000200000002 in ?? () > > #8 0x000000000078b555 in RecExecRawStatSyncCbs () at > RecRawStats.cc:585 > > #9 0x000000000078cf0d in raw_stat_sync_cont::exec_callbacks > (this=0x1cb8730) at RecProcess.cc:146 > > #10 0x00000000005112b2 in Continuation::handleEvent (this=0x1cb8730, > event=2, data=0x1cbea00) > > at /home/evan/projects/trafficserver/iocore/ > eventsystem/I_Continuation.h:153 > > #11 0x0000000000790a5f in EThread::process_event > (this=0x7f6f2d72c010, e=0x1cbea00, calling_code=2) at UnixEThread.cc:122 > > #12 0x0000000000790dc9 in EThread::execute_regular > (this=0x7f6f2d72c010) at UnixEThread.cc:205 > > #13 0x0000000000790fb1 in EThread::execute (this=0x7f6f2d72c010) at > UnixEThread.cc:262 > > #14 0x000000000078fde8 in spawn_thread_internal (a=0x1ca7ed0) at > Thread.cc:91 > > #15 0x00007f6f2f8c36ba in start_thread (arg=0x7f6f2d222700) at > pthread_create.c:333 > > #16 0x00007f6f2eb543dd in clone () at ../sysdeps/unix/sysv/linux/ > x86_64/clone.S:109 > > > > still, pretty much the same, just easier to read > > ________________________________________ > > From: James Peach <jpe...@apache.org> > > Sent: Tuesday, November 7, 2017 8:30 PM > > To: <dev@trafficserver.apache.org> > > Subject: Re: API Proposal - TSStatGet/SetString > > > >> On Nov 7, 2017, at 1:39 PM, Zelkowitz, Evan <evan_zelkow...@comcast.com> > wrote: > >> > >> If that would be picked up by stats that would probably work, but seems > to generate a segv for me: > >> TSMgmtStringCreate(TS_RECORDTYPE_PROCESS, "my.interface.name", > "default value", > >> TS_RECORDUPDATE_DYNAMIC, TS_RECORDCHECK_NULL, NULL /* check_regex */, > TS_RECORDACCESS_READ_ONLY); > >> > >> traffic_server: received signal 11 (Segmentation fault: 11) > >> traffic_server - STACK TRACE: > >> 0 traffic_server 0x0000000107ef361b > _Z19crash_logger_invokeiP9__siginfoPv + 139 > >> 1 libsystem_platform.dylib 0x00007fff977e3b3a _sigtramp + > 26 > >> 2 ??? 0x0000000023500180 0x0 + > 592445824 > >> 3 traffic_server 0x0000000108201b48 > _ZN18raw_stat_sync_cont14exec_callbacksEiP5Event + 24 > >> 4 traffic_server 0x0000000107ef4a60 _ > ZN12Continuation11handleEventEiPv + 112 > >> 5 traffic_server 0x0000000108206616 > _ZN7EThread13process_eventEP5Eventi + 294 > >> 6 traffic_server 0x0000000108206c30 > _ZN7EThread15execute_regularEv + 256 > >> 7 traffic_server 0x0000000108206f95 > _ZN7EThread7executeEv + 213 > >> 8 traffic_server 0x00000001082059ec > _ZL21spawn_thread_internalPv + 156 > >> 9 libsystem_pthread.dylib 0x00007fff977ed93b > _pthread_body + 180 > >> 10 libsystem_pthread.dylib 0x00007fff977ed887 > _pthread_body + 0 > >> 11 libsystem_pthread.dylib 0x00007fff977ed08d thread_start > + 13 > >> > >> only happens with that line added, got it on both osx and linux > > > > Bug? Though that stack trace doesn’t inspire confidence. > > > > At any rate, TSMgmtStringCreate fronts the same subsystem that TSStat > (eventually) does, so this would be the right way to do it today. > TSStatCreate can’t directly support string stats; we should make it check > the data type and fail appropriately. > > > > FWIW, stats and configuration records are all backed by the same > internal subsystem, so they are basically the same thing internally. > Configuration values are either TS_RECORDTYPE_CONFIG or > TS_RECORDTYPE_LOCAL; other record types are metrics. > > > >> > >> On 11/7/17, 10:46 AM, "James Peach" <jpe...@apache.org> wrote: > >> > >> > >>> On Nov 7, 2017, at 8:35 AM, Zelkowitz, Evan < > evan_zelkow...@comcast.com> wrote: > >>> > >>> Proposing adding stat string support > >>> > >>> TSReturnCode TSStatGetString(int id, char *string, int len); > >>> TSReturnCode TSStatSetString(int id, char *string, int len); > >>> > >>> This way we can store stat strings for retrieval by TS stats. Some > examples of things we currently have work arounds for are the interface > name that TS is running on, its negotiated speed, load averages, other proc > values, etc. > >>> > >>> I believe the stats will currently allow you to create a string stat, > there is just no way to interface with it. I will create a plugin that uses > the string functionality since the main reason of this is to be able to > open source a currently proprietary plugin that uses this sort of > functionality. > >> > >> To do this, you'd just create the record directly. > >> > >> TSMgmtStringCreate(TS_RECORDTYPE_PROCESS, "my.great.metric.name", > "default value", > >> TS_RECORDUPDATE_DYNAMIC, TS_RECORDCHECK_NULL, nullptr /* > check_regex */, TS_RECORDACCESS_READ_ONLY); > >> > >> J > >> > >> > >> > >> > > > > > > > > > > > >