-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathats-projects.en.html
269 lines (261 loc) · 14.6 KB
/
ats-projects.en.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Traffic Server Projects — AMC Traffic Server Documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/sphinxdoc.css" />
<link rel="stylesheet" type="text/css" href="_static/graphviz.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Cache Tool" href="cache-tool.en.html" />
<link rel="prev" title="Solid Wall Of Code Documents" href="index.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="cache-tool.en.html" title="Cache Tool"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="index.html" title="Solid Wall Of Code Documents"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">SWOC Docs</a> »</li>
<li class="nav-item nav-item-this"><a href="">Traffic Server Projects</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="traffic-server-projects">
<span id="ats-projects"></span><h1>Traffic Server Projects<a class="headerlink" href="#traffic-server-projects" title="Permalink to this headline">¶</a></h1>
<p>These are my personal projects for Traffic Server. These vary from very personal ones to collaborative work. A
large diagram of the projects and their dependencies is <a class="reference external" href="_images/ts-projects.png">here</a>.</p>
<section id="projects">
<h2>Projects<a class="headerlink" href="#projects" title="Permalink to this headline">¶</a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="cache-tool.en.html">Cache Tool</a></li>
<li class="toctree-l1"><a class="reference internal" href="testing.en.html">Testing</a></li>
<li class="toctree-l1"><a class="reference internal" href="errata.en.html">Errata</a></li>
<li class="toctree-l1"><a class="reference internal" href="body-factory.en.html">Body Factory Refactoring</a></li>
<li class="toctree-l1"><a class="reference internal" href="l4r.en.html">Layer 4 Proxying</a></li>
<li class="toctree-l1"><a class="reference internal" href="plugin-coordination.en.html">Plugin Coordination</a></li>
<li class="toctree-l1"><a class="reference internal" href="RPC.en.html">Administrative JSON RPC</a></li>
<li class="toctree-l1"><a class="reference internal" href="delain.en.html">Delain</a></li>
</ul>
</div>
</section>
<section id="less-detailed-projects">
<h2>Less Detailed Projects<a class="headerlink" href="#less-detailed-projects" title="Permalink to this headline">¶</a></h2>
<p>Most these should be in separate pages but I have not yet had time to properly document them.</p>
<section id="layer-7-routing">
<h3>Layer 7 Routing<a class="headerlink" href="#layer-7-routing" title="Permalink to this headline">¶</a></h3>
<p>Select upstream target based on the HTTP header information.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Need to consider the ability to bypass upstream selection for non-caching objects (e.g., skip a second caching layer for requests that will always end up at the origin anyway).</p>
</div>
</section>
<section id="logging-tags-from-plugins">
<h3>Logging tags from plugins<a class="headerlink" href="#logging-tags-from-plugins" title="Permalink to this headline">¶</a></h3>
<p>This has been a desire for a long time but the implementation is a bit tricky with regard to timing,
due to logging being done as the transaction is being terminated and data may have already
disappeared. I have some ideas but those would require some additional infrastructure such as better
arenas.</p>
</section>
<section id="c-abi-to-core">
<h3>C++ ABI to Core<a class="headerlink" href="#c-abi-to-core" title="Permalink to this headline">¶</a></h3>
<p>There is currently a C++ API for plugins but this is really a wrapper on the C API. It would be good
to be able to have actual C++ APIs in to the core. There are a number of core features that should
be made available to plugins, such as the network address handling code and the string view classes.
The primary problem is the fragility of the C++ ABI, some mechanism would be needed to deal with
this.</p>
</section>
<section id="plugin-c-api">
<h3>Plugin C++ API<a class="headerlink" href="#plugin-c-api" title="Permalink to this headline">¶</a></h3>
<p>The plugin C++ API needs a lot of polishing and updating.</p>
</section>
<section id="bijection">
<h3>Bijection<a class="headerlink" href="#bijection" title="Permalink to this headline">¶</a></h3>
<p>Bijection is a class I wrote for my own product software long ago, but it depends on some
sophisticated Boost library support and so could not be easily ported to Traffic Server. It was a very useful
class, particularly for configuration work and enumeration support. It is a goal of mine because
building will create a good amount of powerful infrastructure which will be useful in other
situations.</p>
<section id="replace-tcl-hash-maps">
<h4>Replace TCL hash maps<a class="headerlink" href="#replace-tcl-hash-maps" title="Permalink to this headline">¶</a></h4>
<p>There is currently a templated hash map table but it requires externally allocated memory. This has
its benefits in complex situations but is simply annoying for basic hash table use. Adding the
compacting arena to the current <code class="code docutils literal notranslate"><span class="pre">TSHashTable</span></code> would yield an easily usable hash table with the
desired memory allocation properties.</p>
</section>
<section id="id1">
<h4>Bijection<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h4>
<p>Given the compacting arena and <code class="code docutils literal notranslate"><span class="pre">TSHashTable</span></code> buidling the bijection class is straightforward.
Two hash tables (or a hash table an arra) can easily be constructed on the same elements which is
the essential technique.</p>
</section>
</section>
<section id="utilities">
<h3>Utilities<a class="headerlink" href="#utilities" title="Permalink to this headline">¶</a></h3>
<p>There are a number of utility classes that would be useful, particularly in replacing old and
increasingly inadequate containers.</p>
<dl class="simple">
<dt>SplitVector</dt><dd><p>This would have an API very similar to <code class="code docutils literal notranslate"><span class="pre">std::vector</span></code> but would take a template size
parameter and statically allocate that many elements. This is a pattern used in several places in
Traffic Server frequently in an ad hoc way. The <code class="code docutils literal notranslate"><span class="pre">DynArray</span></code> class does this but has other defects.
<code class="code docutils literal notranslate"><span class="pre">SplitVector</span></code> would replace all of these uses.</p>
</dd>
</dl>
</section>
<section id="traffic-server-core">
<h3>Traffic Server Core<a class="headerlink" href="#traffic-server-core" title="Permalink to this headline">¶</a></h3>
<p>Restructure the overridable configs to remove cyclic dependencies. Already discussed with community
and I have a design.</p>
<p>Potentially the “proxy-protocol” extension.</p>
<p>Internal version of the <a class="reference external" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0218r0.html">C++17 filesystem library</a>.</p>
<p>Fix <code class="code docutils literal notranslate"><span class="pre">TSNetConnect</span></code> to have options instead of a multiplying set of API calls.</p>
<p>Make remap rules be pure first match (long term).</p>
<p>The crypto hash support needs to be cleaned up.</p>
<p>Add log tags to dump transaction headers in full. This would be useful for the operations teams. The
idea is a custom log is setup that logs the full headers but is filtered by error return codes. The
result is a log of full headers only for failed transactions. We had originally looked at doing this
with a plugin but Dan Xu discovered that it would be easier to add these tags and use the existing
logging mechanisms.</p>
<p>Use <code class="code docutils literal notranslate"><span class="pre">std::chrono</span></code>.</p>
<p>Prevent restart on cache failure (bad disks).</p>
<p>Transaction arenas for plugin use.</p>
<p>Pending event counting at base event loop / continuation.</p>
<p>Look at allocating SDK Handles from the transaction arena instead of a global allocator, to avoid
cleanup issues.</p>
<section id="tls-extensions">
<h4>TLS Extensions<a class="headerlink" href="#tls-extensions" title="Permalink to this headline">¶</a></h4>
<p>It would be interesting in terms of L4 routing to be enable TLS clients to send a Traffic Server specialized
TLS extension to provide addition L4 routing information or other control data. This needs to be
design carefully to avoid security issues but I think it could be very powerful.</p>
</section>
</section>
<section id="cache-api-toolkit">
<h3>Cache API Toolkit<a class="headerlink" href="#cache-api-toolkit" title="Permalink to this headline">¶</a></h3>
<p>This is a restructuring of how the cache to enable fine grained control by plugins. Put in a
reference to the summit presentation on this.</p>
</section>
<section id="live-restart">
<h3>Live Restart<a class="headerlink" href="#live-restart" title="Permalink to this headline">¶</a></h3>
<p>A long running request is to be able to do a live restart of Traffic Server. The mechanism would be</p>
<ul class="simple">
<li><p>Start new Traffic Server process.</p></li>
<li><p>New process starts accepting connections.</p></li>
<li><p>Old process stops accepting connections.</p></li>
<li><p>Old process shuts down.</p>
<ul>
<li><p>When all inbound connections have terminated.</p></li>
<li><p>When there are less than a specified number of inbound connections.</p></li>
<li><p>After a specific amount of time.</p></li>
<li><p>When explicitly requested by the administrator.</p></li>
</ul>
</li>
</ul>
<p>The main difficulty for this is handling the cache. To some extent the cache would need to be
multi-process. To make this more feasible the access would be single writer and the control of
writing would pass from the old process to the new process. This may mean terminating cache writes
in the old process.</p>
<div class="toctree-wrapper compound">
</div>
</section>
</section>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="index.html">
<img class="logo" src="_static/balcora-gate-400x400.jpg" alt="Logo"/>
</a></p>
<h3><a href="index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Traffic Server Projects</a><ul>
<li><a class="reference internal" href="#projects">Projects</a></li>
<li><a class="reference internal" href="#less-detailed-projects">Less Detailed Projects</a><ul>
<li><a class="reference internal" href="#layer-7-routing">Layer 7 Routing</a></li>
<li><a class="reference internal" href="#logging-tags-from-plugins">Logging tags from plugins</a></li>
<li><a class="reference internal" href="#c-abi-to-core">C++ ABI to Core</a></li>
<li><a class="reference internal" href="#plugin-c-api">Plugin C++ API</a></li>
<li><a class="reference internal" href="#bijection">Bijection</a><ul>
<li><a class="reference internal" href="#replace-tcl-hash-maps">Replace TCL hash maps</a></li>
<li><a class="reference internal" href="#id1">Bijection</a></li>
</ul>
</li>
<li><a class="reference internal" href="#utilities">Utilities</a></li>
<li><a class="reference internal" href="#traffic-server-core">Traffic Server Core</a><ul>
<li><a class="reference internal" href="#tls-extensions">TLS Extensions</a></li>
</ul>
</li>
<li><a class="reference internal" href="#cache-api-toolkit">Cache API Toolkit</a></li>
<li><a class="reference internal" href="#live-restart">Live Restart</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="index.html"
title="previous chapter">Solid Wall Of Code Documents</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="cache-tool.en.html"
title="next chapter">Cache Tool</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/ats-projects.en.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="cache-tool.en.html" title="Cache Tool"
>next</a> |</li>
<li class="right" >
<a href="index.html" title="Solid Wall Of Code Documents"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">SWOC Docs</a> »</li>
<li class="nav-item nav-item-this"><a href="">Traffic Server Projects</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
© Copyright 2017, [email protected].
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.1.2.
</div>
</body>
</html>