You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@trafficserver.apache.org by Jan Algermissen <ja...@nordsc.com> on 2011/10/07 22:29:22 UTC

append-transform plugin question

Hi,

I am looking at the source code of the append-transform plugin.

I have a question regarding the load function below:

Is my understanding correct that each call to 

  TSIOBufferProduce(append_buffer, err) 

appends a read chunk to the static append_buffer causing the buffer to generate an event (that will in turn lead TS to invoke another function of the plugin)?

Is the use of a static variable the common approach to keep buffer state? Or is it just to simplify the example?

I'd think that multiple invocations of the plugin could interfere with each other. E.g. when more that one request is handled by the thread in question.

Or are requests handled sequentially by each thread, causing the static buffer to only be in use for one request at a time. (??).

Jan

static int
load(const char *filename)
{
  TSFile fp;
  TSIOBufferBlock blk;
  char *p;
  int64_t avail;
  int err;

  fp = TSfopen(filename, "r");
  if (!fp) {
    return 0;
  }

  append_buffer = TSIOBufferCreate();
  append_buffer_reader = TSIOBufferReaderAlloc(append_buffer);

  for (;;) {
    blk = TSIOBufferStart(append_buffer);
    p = TSIOBufferBlockWriteStart(blk, &avail);

    err = TSfread(fp, p, avail);
    if (err > 0) {
      TSIOBufferProduce(append_buffer, err);
    } else {
      break;
    }
  }

  append_buffer_length = TSIOBufferReaderAvail(append_buffer_reader);

  TSfclose(fp);
  return 1;
}