8. Result Processor
The Result Processor manages the following tasks:
Check / Read StaticFS Requests
Check / Read AS POST Results
Result Send Thread Processor
8.1. Read StaticFS Requests
If Lock::get_read_data (Server Main Loop) == 1, SHM Data with StaticFS requests is ready to read.
Loop on all GET requests and feed into ResultProcessor::ResultOrder::appendData(ClientFD, DataPointer).
Workflow diagram see: 15. Graphical Workflows Section 1.4.1.
8.2. Read AS Results
Check all AS Instances if WriteReady == 1.
If WriteReady == 1 (Existing result):
ResultProcessor::ResultOrder::appendData(ClientFD, DataPointer)
Reset AS Instance Properties to default (CanRead == 1, WriteReady = 0)
Workflow diagram see: 15. Graphical Workflows Section 1.4.2.
8.3. Result Scheduler
Result for HTTP/1.1 must be synchronous / ordered.
Result Scheduler Class definition see: 9. ResultScheduler
8.4. Main Loop
Main Loop Layout.
loop:
workdone = 0
- if StaticFSLock == 1
append GET static FS requests into ResultProcessor::ResultOrder
StaticFSLock = 0
workdone = 1
- get_post_results()
if AS::Index1::WriteReady == 1
append POST result into ResultProcessor::ResultOrder::appendData(ClientFD, DataPointer)
set CanRead = 1, WriteReady = 0
workdone = 1
if AS::IndexX::WriteReady == 1
append POST result into ResultProcessor::ResultOrder::appendData(ClientFD, DataPointer)
workdone = 1
set CanRead = 1, WriteReady = 0
- if fds_to_process
ThreadProcessor::processThreads
workdone = 1
- if workdone == 0:
sleep Config::Microseconds
Workflow diagram see: 15. Graphical Workflows Section 1.4.3.
8.4.1. On Idle
If workdone == 0 (no work done), micro-sleep.
8.5. Result Send Thread Processor
+-------------+-----------+------------------------------+
| ClientFD | RequestNr | Request |
+-------------+-----------+------------------------------+
| 212 | 1 | GET /bla/one.jpg |
+-------------+-----------+------------------------------+
| 212 | 2 | GET /bla/two.jpg |
+-------------+-----------+------------------------------+
| 212 | 3 | GET /bla/one.html |
+-------------+-----------+------------------------------+
| 403 | 1 | GET /bla/one.jpg |
+-------------+-----------+------------------------------+
| 403 | 2 | GET /bla/two.jpg |
+-------------+-----------+------------------------------+
| 403 | 3 | GET /bla/one.html |
+-------------+-----------+------------------------------+
| 403 | 4 | POST /test.py |
+-------------+-----------+------------------------------+
Workflow diagram see: 15. Graphical Workflows Section 1.4.4.
1.5.1. Thread 1 (detached)
Thread 1 will sendfile() three results to ClientFD 212 socket.
+-------------+-----------+------------------------------+
| ClientFD | RequestNr | Request |
+-------------+-----------+------------------------------+
| 212 | 1 | GET /bla/one.jpg |
+-------------+-----------+------------------------------+
| 212 | 2 | GET /bla/two.jpg |
+-------------+-----------+------------------------------+
| 212 | 3 | GET /bla/one.html |
+-------------+-----------+------------------------------+
Thread sets terminate flag to 1 after execution and waits to be terminated.
Workflow diagram see: 15. Graphical Workflows Section 1.4.5.
1.5.2. Thread 2 (detached)
If AS result has been processed in time, Thread2 will sendfile() the first 3 results and afterwards write() the AS result to ClientFD 403 socket.
+-------------+-----------+------------------------------+
| ClientFD | RequestNr | Request |
+-------------+-----------+------------------------------+
| 403 | 1 | GET /bla/one.jpg |
+-------------+-----------+------------------------------+
| 403 | 2 | GET /bla/two.jpg |
+-------------+-----------+------------------------------+
| 403 | 3 | GET /bla/one.html |
+-------------+-----------+------------------------------+
| 403 | 4 | POST /test.py |
+-------------+-----------+------------------------------+
Thread sets terminate flag to 1 after execution and waits to be terminated.