blob: 24cb8c6085e6237e9fa2505fd4ace3d7368f7e21 [file] [log] [blame]
-----------------------------------------------------------------------------
Coding convention and formatting in VS Code:
Using below config and store it in settings.json :
{
"C_Cpp.clang_format_path": "oathto/trafficserver-7.1.1/.git/fmt/20160415/clang-format/clang-format.linux",
"editor.formatOnSave": true,
"editor.formatOnType": true,
"C_Cpp.intelliSenseEngine": "Default"
}
Download the ATS clang-format binary ,find the url from path/to/trafficserver/tools/git/pre-commit
Extract the file and set the flag "C_Cpp.clang_format_path" to file path.
2. Adding pre-commit hook :
Copy the file path/to/trafficserver/tools/git/pre-commit under .git/hook/ directory.
This will does the formatting every time does a commit.
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
Build and Install cmd =
#building CPP ats_fastcgi.so
```bash
set -e
# Update the path below for your system
ats_dir="/path/to/trafficserver-source/"
tsxs -o ats_fastcgi.so \
-c ats_fastcgi.cc \
-L "${ats_dir}lib/" \
-I "${ats_dir}lib" \
-I "${ats_dir}lib/cppapi/include/" \
-c ats_fcgi_client.cc \
-latscppapi
# Remember the tsxs path here and use it below
# (for the case where the sudo context doesn't know about tsxs)
mtsxs=$(which tsxs)
sudo $mtsxs -o ats_fastcgi.so -i
```
OR Build and install using Makefile utility:
Before doing make Plz set below directories.
# 1. ATS_SRC --either set or export env variable path to traffic server src directory
# 2. ATS_EXEC --either set or export env variable path to traffic server exec directory
Afterwords command, $> make && sudo -E make install
For example:
make ATS_SRC=/home/oschaaf/code/apache/trafficserver ATS_EXEC=/usr/local/ CPPFLAGS=-std=c++11
------------------------------------------------------------------------------
ATS (Apache Traffic Server) FastCGI Plugin
------------------------------------------------------------------------------
This plugin collapses connections with identical CacheUrl/EffectiveUrl.
If an entry was created for a given CacheUrl/EffectiveUrl in our global hashTable,
successive GET requests with identical CacheUrl/EffectiveUrl will be blocked in
POST_REMAP hook until the hash entry was removed. (POST_REMAP hook is the last
hook before 'cache lookup')
For requests going into 'cache lookup' stage,
if CacheLookupStatus is HIT_FRESH,
hash entry will be removed at earliest possible time.
For requests going into 'read server response header' stage,
if response is not 200 OK,
hash entry will be removed at earliest possible time.
if response is public cacheable, (by checking 'Expires' header and 'Cache-Control' header with 'public' & 'max-age=...' values),
if proxy.config.cache.enable_read_while_writer is enabled,
hash entry will be removed at earliest possible time.
else
hash entry will be removed in TXN_CLOSE hook.
if response is not public cacheable,
we will update hash entry with a special value to let successive requests pass collapsed check,
this special hash entry will be removed in TXN_CLOSE hook if value of keep_pass_record_time is 0,
else it will be added into a list with timeout and removed by later collapsed requests.
To view full state diagram, please view state.png
CONFIGURATION
To have trafficserver use this plugin, add a line for 'ats_fastcgi.so' in the 'plugin.config' file.
The plugin can be configured with only 1 argument, which is location of its configuration file.
Example plugin.config:
ats_fastcgi.so conf/ats_fastcgi/ats_fastcgi_XXXNAME.config
This plugin can be added in remap.config as well.
Thus, it can have different configurations or only be enabled/disabled for specific remap rules.
If the only argument for this plugin is "0" or "1", it means just "disable" or "enable" this plugin with default config value.
Example remap.config:
map http://no-collapse1.www.example.com/ http://www.example.com/ @plugin=ats_fastcgi.so @pparam=0
map http://no-collapse2.www.example.com/ http://www.example.com/ @plugin=ats_fastcgi.so @pparam=conf/collapsed_connection/disable.config
Its configuration file can have 5 configurable options:
CONFIG proxy.config.http.fcgi.enabled INT 1
CONFIG proxy.config.http.fcgi.host.hostname STRING localhost
CONFIG proxy.config.http.fcgi.host.server_ip STRING 127.0.0.1
CONFIG proxy.config.http.fcgi.host.server_port STRING 60000
CONFIG proxy.config.http.fcgi.host.root_directory STRING /
CONFIG proxy.config.http.fcgi.host.min_connections INT 2
CONFIG proxy.config.http.fcgi.host.max_connections INT 16
CONFIG proxy.config.http.fcgi.host.max_requests INT 1000
CONFIG proxy.config.http.fcgi.host.request_queue_size INT 250
Meaning of these configurable options:
enabled
enable fcgi Server or not, useful in remap rules if we want to disable/enable specific remap rules.
hostname
hostname of the fcgi server in string format e.g localhost
server_ip
IP of the fcgi server machine in string format e.g 127.0.0.1
server_port
fcgi server port number in string format e.g 60000
root_directory
root directory path from where fcgi server will server resources/web_contents
min_connections
min number of connections plugin will open to the php server
max_connections
max number of connections plugin will make to the php server
max_requests
max number of requests per connection plugin will allow to the php server
request_queue_size
max requests queue size limit
PHP REQUIREMENTS
This section outlines build requirements for different OS
distributions. This may be out of date compared to the on-line
requirements at
<https://cwiki.apache.org/confluence/display/TS/Building>.
As of ATS v7.0.0 and later, gcc 4.8.1 or later is required, since we now use
and require the C++11 standard.
a. download libfcgi-dev package :i.e libfcgi-dev_2.4.0-8.4+b1_arm64.deb from https://packages.debian.org/sid/arm64/libfcgi-dev/download
b. download php7.0-cli php7.0-fpm with : sudo apt-get install php7.0-cli php7.0-fpm
Starting the php fastcgi server:
$ > ./bin/php-fastcgi start //this will start the server on port 60000
Note: Place sample scripts from ./examples/* files to /var/www/ directory to access php scripts from browser. As php server uses default location as /var/www/html/*.php
Using Profiler:
1. To use profiler, set the ATS_FCGI_PROFILER flag to true inside ats_fastcgi.h file.
2. Place below piece of code inside functions to record profiling.
#if ATS_FCGI_PROFILER
ats_plugin::ProfileTaker profile_taker(&profiler, "functinName", (std::size_t)&plugin, "B");
#endif