summaryrefslogtreecommitdiffhomepage
path: root/src (follow)
AgeCommit message (Collapse)AuthorFilesLines
2017-12-13Introducing Unit version check in Go package.Max Romanov4-65/+122
To communicate with the Go program, Unit setup environment variable named NXT_GO_PORTS with value contains Unit version, stream id to confirm application is started, and Unit ports information. Go Unit package parses this string and compares runtime version with compile time version. In case of parse error or version mismatch, ListenAndServe() returns with the error.
2017-12-08HTTP parser: improved detection of corrupted request line.Valentin Bartenev1-1/+43
2017-12-08HTTP parser: slightly improved readability of code.Valentin Bartenev1-103/+101
As suggested by Igor Sysoev.
2017-12-07Fixed protocol version string handling in router.Valentin Bartenev1-1/+1
2017-12-06Go: removing request registry.Max Romanov11-244/+96
Passing unsafe.Pointers (void *) from Go to C is complicated by an attempt to make such pointers less unsafe. A straightforward optimization is to replace 'unsafe.Pointer' with 'uintptr' (thanks to Xin Huang for the idea: https://stackoverflow.com/a/44826533 ). As a result, request registry with mutex is gone.
2017-12-05Fixing Go package build in NetBSD.Max Romanov1-1/+1
Bug introduced in 585c8068a6d7.
2017-12-01Making Go package source distributable and renaming to 'nginx/unit'.Max Romanov8-85/+34
All header files are copied to Go package sources. As the result, package can be (re-)build when required. This closes #23 issue on GitHub.
2017-12-01Initializing port_msg fields with zeroes in Go package.Max Romanov2-0/+4
2017-11-29Introducing python virtualenv configuration.Max Romanov4-0/+44
New parameter 'home' for python application allows to configure application-specific virtualenv path. This closes #15 issue on GitHub.
2017-11-02Fixing build on Solaris.Max Romanov2-2/+2
2017-11-27Timer should be marked as it is not in tree after deletion.Igor Sysoev1-0/+1
This closes #64 issue on GitHub.
2017-11-27Removed uncontext.h.Igor Sysoev1-2/+0
This removal was missed the changeset 2aad6a5fac13.
2017-11-27A number of engine connections is decreased on connection close.Igor Sysoev4-4/+12
2017-11-21Tests: move existing tests to "src" folder.Andrey Zelenkov18-0/+3236
2017-11-21Fixed crash on invalid JSON number.Valentin Bartenev1-0/+4
2017-11-20Fixing Coverity warnings.Max Romanov7-10/+23
CID 200496 CID 200494 CID 200490 CID 200489 CID 200483 CID 200482 CID 200472 CID 200465
2017-10-27Fixing racing condition in request.msgs usage.Max Romanov1-8/+8
2017-10-27Fixing Go program crash.Max Romanov1-2/+2
Go request registration should be removed before C request memory freed. C request address used as a key in Go map. Freed memory can be instantly reused for other request and older request registration should removed at this point to avoid collisions.
2017-10-25Checking the result of shared memory buffer allocation.Max Romanov1-0/+3
This closes #57 issue on GitHub.
2017-10-25Avoiding compilation on systems with no working shared memory.Valentin Bartenev1-0/+4
2017-10-20Version bump.Igor Sysoev1-2/+2
2017-10-19Fixing Go package build.Max Romanov5-14/+21
Go package build was broken by change 365:28b2a468be43.
2017-10-19Fixed controller restarting.Valentin Bartenev2-24/+38
Previously, stored configuration wasn't reread on controller process restart, which resulted in segmentation fault.
2017-10-19Keep application worker until response for all requests received.Max Romanov1-1/+4
2017-10-19Filtering process to keep connection.Max Romanov5-13/+58
- Main process should be connected to all other processes. - Controller should be connected to Router. - Router should be connected to Controller and all Workers. - Workers should be connected to Router worker thread ports only. This filtering helps to avoid unnecessary communication and various errors during massive application workers stop / restart.
2017-10-19Introducing mmap_handler to count references to shared memory.Max Romanov3-87/+146
"All problems in computer science can be solved by another level of indirection" Butler Lampson Completion handlers for application response buffers executed after sending the data to client. Application worker can be stopped right after send response buffers to router. Worker stop causes removal of all data structures for the worker. To prevent shared memory segment unmap, need to count the number of buffers which uses it. So instead of direct reference to shared memory, need to reference to intermediate 'handler' structure with use counter and pointer to shared memory.
2017-10-19Supporting concurrent shared memory fd receive in router.Max Romanov6-104/+86
Two different router threads may send different requests to single application worker. In this case shared memory fds from worker to router will be send over 2 different router ports. These fds will be received and processed by different threads in any order. This patch made possible to add incoming shared memory segments in arbitrary order. Additionally, array and memory pool are no longer used to store segments because of pool's single threaded nature. Custom array-like structure nxt_port_mmaps_t introduced.
2017-10-19Introducing src_pid for mmap header for accurate buf completion.Max Romanov3-16/+30
This allows to use shared memory to communicate with main process. This patch changes shared memory segment format and breaks compatibility with older modules.
2017-10-19Fixed matching of empty version.Valentin Bartenev1-0/+4
2017-10-19Fixed the bug introduced in the previous changeset.Igor Sysoev1-4/+9
2017-10-18Added the debug option to module compatibility vector.Igor Sysoev3-3/+3
2017-10-18Router: fixed segfault after configuration change.Igor Sysoev7-193/+258
2017-10-17Storing memory cache slot hint inside nxt_sockaddr_t.Igor Sysoev7-31/+27
2017-10-10Basic validation errors.Valentin Bartenev3-84/+258
2017-10-10Optimized application type handling.Valentin Bartenev6-58/+50
2017-10-05Fixed building with old GCC after the previous change.Valentin Bartenev1-2/+1
2017-10-05Improved applications versions handling.Valentin Bartenev6-16/+144
2017-10-04Added Linux 4.5 EPOLLEXCLUSIVE support.Igor Sysoev1-2/+10
2017-10-04Port message fragmentation supported.Max Romanov9-28/+273
- Each sendmsg() transmits no more than port->max_size payload data. - Longer buffers are fragmented and send using multiple sendmsg() calls. - On receive side, buffers are connected in chain. - Number of handler calls is the same as number of nxt_port_socket_write() calls. - nxt_buf_make_plain() function introduced to make single plain buffer from the chain.
2017-10-04Optimized request<->app link allocation.Max Romanov1-36/+59
Only purpose of request<->app link instance is to be enqueued in application requests queue. It is possible to avoid request<->app link allocation from memory pool in case when spare application port is available. Instance from local stack can be used to prepare and send message to application.
2017-10-04Breaking read loop by nxt_port_read_close().Max Romanov1-0/+1
Port message handler may perform fork() and then close port read file descriptor and enable write on same event fd. Next read attempt in this case may cause different errors in log file.
2017-10-04Introducing process use counter.Max Romanov6-38/+52
This helps to decouple process removal from port memory pool cleanups.
2017-10-04Return error codes for port_hash operations.Max Romanov3-8/+30
2017-10-04Using port 'post' facility to proxy remove pid message to workers.Max Romanov4-86/+30
Remove pid proxying to worker engines implementation was originally overcomplicated. Memory pool and 2 engine posts (there and back again) are optimized out and replaced with band new nxt_port_post() call.
2017-10-04Using request mem pool for req<->app link.Max Romanov2-3/+20
Request <-> application link structure (nxt_req_app_link_t) used to register the request in application request queue (nxt_app_t.requests) and generate application-specific port message. Now it is allocated from request pool. This pool created for request parsing and used to allocate and store information specific to this request.
2017-10-04Fixed error generation during request processing.Max Romanov1-40/+94
Request can be processed in thread different from the thread where the connection originally handled. Because of possible racing conditions, using original connection structures is unsafe. To solve this, error condition is registered in 'ra' (request <-> application link) and traversed back to original connection thread where the error message can be generated and send back to client.
2017-10-04Optimized send message allocations.Max Romanov2-42/+102
For empty write queue cases, it is possible to avoid allocation and enqueue send message structures. Send message initialized on stack and passed to write handler. If immediate write fails, send message allocated from engine pool and enqueued.
2017-10-04Introducing use counters for port and app. Thread safe port write.Max Romanov9-407/+682
Use counter helps to simplify logic around port and application free. Port 'post' function introduced to simplify post execution of particular function to original port engine's thread. Write message queue is protected by mutex which makes port write operation thread safe.
2017-10-04Using engine memiory pool for port write allocations.Max Romanov7-16/+16
To allow use port from different threads, the first step is to avoid using port's memory pool for temporary allocations required to send data through the port. Including but not limited by: - buffers for data; - send message structures; - new mmap fd notifications; It is still safe to use port memory pool for incoming buffers allocations because recieve operation bound to single thread.
2017-10-04Removing mem_pool from port_hash interface.Max Romanov5-45/+30
Memory pool is not used by port_hash and it was a mistake to pass it into 'add' and 'remove' functions. port_hash enrties are allocated from heap.