.. _buffer-upload-plugin:

Buffer Upload Plugin
********************

.. Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
 
   http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.

The Buffer Upload plugin offers the following features

Installation
============

Configuration can be explicitly specified as a parameter in ``plugin.config`` ::

    buffer_upload.so /FOOBAR/upload.conf

Memory buffering (buffer the entire POST data in IOBuffer before connecting to OS)
==================================================================================

Memory buffer size is configured with "mem_buffer_size" in config file. Default and minimum value is 32K. You can
increase it in the config file. If the size of a request is larger than the "mem_buffer_size" value specifiied in the
config file, then the upload proxy feature will be disabled for this particular request

Disk buffering (buffer the entire POST data on disk before connecting to OS)
============================================================================

1. Disk async IO is used. AIO api call only involves certain amount of threads. The number of threads is configurable in
plugin's config file (default is 4)

2. Directories and files are generated on disk . Base directory is /FOOBAR/var/buffer_upload_tmp/ (configurable in
config file). Number of subdirectories is 64 (configurable in config file). Filename are randomly generated. Files will
be removed when the entire data have been sent out to OS . At startup time, dangling files are removed (left on disk due
to transaction interruption or traffic server crash)

3. Default chunk size when reading from disk is 16K, configurable in config file

Trigger POST buffering on certain URLs
======================================

1. Certain URLs will be provided in a plain text file (one URL each line) 
2. Specify filename in config file by "url_list_file" 
3. max length of each URL is 4096 (configurable in config file) 
4. use exact match, don't support regex for now

Other Features 
==============

1. Default buffering mode is disk aio buffering mode. To turn off disk buffering, add a "use_disk_buffer 0" line in
config file

2. All request headers inlcuding cookies plus the entire POST data will be buffered (either in memory or on disk)

Configuration File
==================

sample config file ::

    use_disk_buffer 1 
    convert_url 1 
    chunk_size 1024 
    url_list_file /tmp/url_list.conf 
    max_url_length 10000 
    base_dir /tmp/test1
    subdir_num 100 
    thread_num 10 
    mem_buffer_size 40000

