Could someone let me know the atscppapi's AsyncHttpFetch and AsyncReceiver
classes can only used in the context of a Transaction or can they be used
like I was using independent of the Transaction. Most of the examples seem
to be using it in the context of a transaction. For my plugin, I'd like it
to be independent of the Transaction since I am using Async to update my
plugin maps. Thanks.

On Thu, Mar 7, 2019 at 6:39 PM Dk Jack <dnj0...@gmail.com> wrote:

> I narrowed down my problem to the async fetcher class which is derived
> from AsyncReceiver class.
> In my plugin, I maintain a few maps which get periodically updated. In my
> plugin, I create a thread
> to constantly (every 30s) poll an external server. When the thread wakes
> up, it uses the async fetcher
> class to retrieve info from an external server to update my maps. The
> following two lines seem
> to be causing the issue:
>
>   AsyncHttpFetch* fetcher = new AsyncHttpFetch(mUrl,
> AsyncHttpFetch::STREAMING_DISABLED);
>   Async::execute<AsyncHttpFetch>(this, fetcher, mMutex);
>
> If I comment them out, there's no leak. My async fetcher class follows a
> similar pattern as some
> of the atscppapi examples. To narrow down the issue, I've created a small
> plugin which models
> my plugin and also creates the issue I am seeing in my plugin. I've
> attached my test-plugin files.
> I would appreciate it if someone can take a look at my implementation and
> let me know I am
> using the API incorrectly.
>
> Thank you.
>
> On Tue, Mar 5, 2019 at 10:52 AM Dk Jack <dnj0...@gmail.com> wrote:
>
>> Thanks Leif,
>> I'd like to understand a bit more before introducing another variable.
>> The thing that puzzles me the most is why the system objects are behaving
>> erratically when I am not modifying them or holding on to them..
>>
>> On Mon, Mar 4, 2019 at 7:11 PM Leif Hedstrom <zw...@apache.org> wrote:
>>
>>> Before going down this rathole, I’d give v7.1.6 or v8.0.2 a spin.
>>> Remember, v6.x is an unsupported version, there is no more development nor
>>> any more releases.
>>>
>>> Cheers,
>>>
>>> — Leif
>>>
>>> > On Mar 4, 2019, at 20:00, Dk Jack <dnj0...@gmail.com> wrote:
>>> >
>>> > I am using atscppapi's for my plugin. I do something like this...
>>> >
>>> > Headers& headers = transaction.getClientRequest().getHeaders();
>>> >
>>> >
>>> >
>>> > On Mon, Mar 4, 2019 at 6:09 PM Pushkar Pradhan
>>> > <pprad...@verizonmedia.com.invalid> wrote:
>>> >
>>> >> I am also trying to learn the TS APIs. I think you are supposed to
>>> call the
>>> >> TS...Release if you get a reference.
>>> >> E.g.
>>> >>    if (TS_SUCCESS == TSHttpTxnClientReqGet(txnp, &buffer, &hdr_loc)) {
>>> >>      TSDebug(PLUGIN_NAME, "Found client request");
>>> >>      txn_info += R"(,"client-request":)" + collect_headers(buffer,
>>> >> hdr_loc, TSHttpTxnClientReqBodyBytesGet(txnp));
>>> >>      TSHandleMLocRelease(buffer, TS_NULL_MLOC, hdr_loc);
>>> >>      buffer = nullptr;
>>> >>    }
>>> >>
>>> >>
>>> >>> On Mon, Mar 4, 2019 at 6:06 PM Dk Jack <dnj0...@gmail.com> wrote:
>>> >>>
>>> >>> Thanks Pushkar, I'll try that...
>>> >>>
>>> >>> On Mon, Mar 4, 2019 at 4:44 PM Pushkar Pradhan
>>> >>> <pprad...@verizonmedia.com.invalid> wrote:
>>> >>>
>>> >>>> Perhaps compiling with LSAN will help:  --enable-lsan
>>>  enable
>>> >>>> stand-alone Leak Sanitizer
>>> >>>>
>>> >>>>
>>> >>>>> On Mon, Mar 4, 2019 at 4:42 PM Bryan Call <bc...@apache.org>
>>> wrote:
>>> >>>>>
>>> >>>>> Looking at the graphs it looks like your headers and http1client
>>> >>> sessions
>>> >>>>> are leaking.  Have you looked at this example to on how to send
>>> back
>>> >>>> error
>>> >>>>> messages using the C++ API:
>>> >>>>>
>>> >>>>
>>> >>>
>>> >>
>>> https://github.com/apache/trafficserver/blob/master/example/cppapi/customresponse/CustomResponse.cc
>>> >>>>>
>>> >>>>> -Bryan
>>> >>>>>
>>> >>>>>> On Mar 4, 2019, at 3:50 PM, Dk Jack <dnj0...@gmail.com> wrote:
>>> >>>>>>
>>> >>>>>> Hi,
>>> >>>>>> I am trying to chase a memory leak issue. I am using ATS version
>>> >>> 6.2.3
>>> >>>>> and
>>> >>>>>> I have a custom plugin written using the c++ API (atscppapi)
>>> >> running
>>> >>> on
>>> >>>>> the
>>> >>>>>> same server. I enabled memory dump in my configuration and sent
>>> >>> traffic
>>> >>>>>> into the ATS with and without my plugin for an hour. Later, I
>>> >>> extracted
>>> >>>>> the
>>> >>>>>> individual memory stats and plotted the stats for each object type
>>> >>>>> against
>>> >>>>>> time. The link shown below contains side-by-side plots for each
>>> ATS
>>> >>>>> object
>>> >>>>>> type without and with my plugin (the right side figures are with
>>> my
>>> >>>>> plugin
>>> >>>>>> enabled).
>>> >>>>>>
>>> >>>>>>
>>> >>>
>>> https://www.dropbox.com/s/rfszd6fnjydm8s7/ats_mem_stats_comparison.pdf
>>> >>>>>>
>>> >>>>>> Without my plugin, the memory consumption increases for various
>>> >>> objects
>>> >>>>> in
>>> >>>>>> the beginning and then tapers off. However, with my plugin
>>> enabled,
>>> >>> the
>>> >>>>>> memory consumption is higher and more erratic. I am not holding on
>>> >> to
>>> >>>> the
>>> >>>>>> request in my plugin. My plugin attaches TransactionPlugin to some
>>> >>>>>> transactions (sending back 4xx response to client). For most
>>> >> others,
>>> >>> it
>>> >>>>>> lets it pass through. My plugin, doesn't allocate much memory. The
>>> >>>> memory
>>> >>>>>> it allocates is sort of semi-static (manages a few maps that are
>>> >>>> updated
>>> >>>>>> periodically). I don't anticipate my plugin's memory consumption
>>> to
>>> >>>>>> increase with the transactions.
>>> >>>>>>
>>> >>>>>> Since the presence of my plugin is the affecting the memory stats
>>> >> of
>>> >>>>>> internal ATS objects, I am suspecting this could result of me not
>>> >>> using
>>> >>>>> the
>>> >>>>>> API correctly. Would appreciate if anyone can venture a guess as
>>> to
>>> >>>> what
>>> >>>>>> could be happening. Thank for help.
>>> >>>>>>
>>> >>>>>> Dk.
>>> >>>>>
>>> >>>>>
>>> >>>>
>>> >>>
>>> >>
>>>
>>>

Reply via email to