I have a transformation plugin which contains a block of code as shown below 
(Exhibit A).  The code is dying with an error showing up in the traffic server 
logs as shown in exhibit B.  As near as I can tell from reading the code in 
line 538 of InkIOCoreAPI.cc.  the assertion is testing to see if the bufp 
pointer passed in is null.

My question is under what conditions might this pointer be null.  The behavior 
I am seeing is that the transform returns the first part of the content, but 
then dies.  Presumably because some state is not correct.  But I don't 
understand what could be going wrong.

I noticed that the same stack trace also appears in 
https://issues.apache.org/jira/browse/TS-1517.

So I don't know if this is a bug in ATS or if this is a problem in the way I am 
using the API.

Any thoughts?

------------ Exhibit A -------------------------
/* Determine how much data we have left to read. For this null
         * transform plugin this is also the amount of data we have left
         * to write to the output connection.
         */
        int64_t upstream_todo = TSVIONTodoGet(input_vio);
        if (upstream_todo > 0) {
                /* The amount of data left to read needs to be truncated by
                 * the amount of data actually in the read buffer.
                 */
                int64_t upstream_avail = TSIOBufferReaderAvail(
                                TSVIOReaderGet(input_vio));
                int64_t towrite = upstream_todo;
                if (towrite > upstream_avail) {
                        towrite = upstream_avail;
                }


                if (towrite > 0) {
                        TSIOBufferReader readerp = TSVIOReaderGet(input_vio);
                        TSIOBuffer bufp = TSVIOBufferGet(data->output_vio);
                        if(readerp == NULL || bufp == NULL) {
                                TSDebug(DEBUG_NAME,
                                "Danger Will Robinson! We are probably going to 
crash because readerp = %d and bufp = %d"
                                " and towrite = %d and upstream_todo = %d and 
upstream_avail = %d",
                                readerp, bufp, towrite);
                        }

                        /* Copy the data from the read buffer to the output 
buffer. */
                        bytesWritten += TSIOBufferCopy(bufp, readerp, towrite, 
0);

                        /* Tell the read buffer that we have read 'towrite' 
bytes of data
                         * and are no longer interested in it.
                         */
                        TSIOBufferReaderConsume(readerp, bytesWritten);

                        /* Increment the input VIO nDone value to reflect how 
much
                         * data we've copied from the upstream and written to 
the
                         * downstream.
                         */
                        TSVIONDoneSet(input_vio, TSVIONDoneGet(input_vio) + 
bytesWritten);
                }
        }
------------------------ End of Exhibit A ---------------------------

----------------- Exhibit B -------------------------------
[Mar 13 16:12:32.579] Server {0x421fa940} DIAG: 
(ApiMgmtPlugin.AssertionHandler.DEBUG) Executing
FATAL: InkIOCoreAPI.cc:538: failed assert 
`sdk_sanity_check_iocore_structure(bufp) == TS_SUCCESS`
/usr/local/bin/traffic_server - STACK TRACE:
/usr/local/lib/libtsutil.so.3(ink_fatal+0x88)[0x2afc06ace7a8]
/usr/local/lib/libtsutil.so.3(_ink_assert+0x1f)[0x2afc06accf6f]
/usr/local/bin/traffic_server(_TSReleaseAssert+0x9)[0x49b3f9]
/usr/local/bin/traffic_server(TSIOBufferCopy+0xa1)[0x4b7a71]
/usr/local/lib/trafficserver/plugins/libJsonPTransformationHandlerPlugin.so(_ZN11apim_plugin26JsonPTransformationHandler30handleMiddleTransformOperationEPNS_18TransformationDataEP9tsapi_vio+0xfe)[0x2aaab44458d8]
/usr/local/lib/trafficserver/plugins/libJsonPTransformationHandlerPlugin.so(_ZN11apim_plugin26JsonPTransformationHandler24handleTransformOperationEP10tsapi_cont+0x1da)[0x2aaab4445b08]
/usr/local/lib/trafficserver/plugins/libJsonPTransformationHandlerPlugin.so(_ZN11apim_plugin26JsonPTransformationHandler15callbackHandlerEP10tsapi_cont7TSEventPv+0x12c)[0x2aaab4445dcc]
/usr/local/bin/traffic_server(_ZN7EThread13process_eventEP5Eventi+0x22f)[0x6b9c0f]
/usr/local/bin/traffic_server(_ZN7EThread7executeEv+0x1aa)[0x6ba10a]
/usr/local/bin/traffic_server[0x6b905e]
/lib64/libpthread.so.0[0x337140677d]
/lib64/libc.so.6(clone+0x6d)[0x3370cd3c1d]
----------------- End of Exhibit B -------------------------------------

Reply via email to