{"action":"closed","issue":{"url":"https://api.github.com/repos/natsys/tempesta/issues/159","labels_url":"https://api.github.com/repos/natsys/tempesta/issues/159/labels{/name}","comments_url":"https://api.github.com/repos/natsys/tempesta/issues/159/comments","events_url":"https://api.github.com/repos/natsys/tempesta/issues/159/events","html_url":"https://github.com/natsys/tempesta/issues/159","id":96256151,"number":159,"title":"Incorrect processing of pipelined messages","user":{"login":"keshonok","id":6352580,"avatar_url":"https://avatars.githubusercontent.com/u/6352580?v=3","gravatar_id":"","url":"https://api.github.com/users/keshonok","html_url":"https://github.com/keshonok","followers_url":"https://api.github.com/users/keshonok/followers","following_url":"https://api.github.com/users/keshonok/following{/other_user}","gists_url":"https://api.github.com/users/keshonok/gists{/gist_id}","starred_url":"https://api.github.com/users/keshonok/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keshonok/subscriptions","organizations_url":"https://api.github.com/users/keshonok/orgs","repos_url":"https://api.github.com/users/keshonok/repos","events_url":"https://api.github.com/users/keshonok/events{/privacy}","received_events_url":"https://api.github.com/users/keshonok/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/natsys/tempesta/labels/bug","name":"bug","color":"eb6420"}],"state":"closed","locked":false,"assignee":{"login":"keshonok","id":6352580,"avatar_url":"https://avatars.githubusercontent.com/u/6352580?v=3","gravatar_id":"","url":"https://api.github.com/users/keshonok","html_url":"https://github.com/keshonok","followers_url":"https://api.github.com/users/keshonok/followers","following_url":"https://api.github.com/users/keshonok/following{/other_user}","gists_url":"https://api.github.com/users/keshonok/gists{/gist_id}","starred_url":"https://api.github.com/users/keshonok/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keshonok/subscriptions","organizations_url":"https://api.github.com/users/keshonok/orgs","repos_url":"https://api.github.com/users/keshonok/repos","events_url":"https://api.github.com/users/keshonok/events{/privacy}","received_events_url":"https://api.github.com/users/keshonok/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/natsys/tempesta/milestones/2","html_url":"https://github.com/natsys/tempesta/milestones/0.4.0%20Web%20Server","labels_url":"https://api.github.com/repos/natsys/tempesta/milestones/2/labels","id":1015682,"number":2,"title":"0.4.0 Web Server","description":"","creator":{"login":"krizhanovsky","id":884694,"avatar_url":"https://avatars.githubusercontent.com/u/884694?v=3","gravatar_id":"","url":"https://api.github.com/users/krizhanovsky","html_url":"https://github.com/krizhanovsky","followers_url":"https://api.github.com/users/krizhanovsky/followers","following_url":"https://api.github.com/users/krizhanovsky/following{/other_user}","gists_url":"https://api.github.com/users/krizhanovsky/gists{/gist_id}","starred_url":"https://api.github.com/users/krizhanovsky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/krizhanovsky/subscriptions","organizations_url":"https://api.github.com/users/krizhanovsky/orgs","repos_url":"https://api.github.com/users/krizhanovsky/repos","events_url":"https://api.github.com/users/krizhanovsky/events{/privacy}","received_events_url":"https://api.github.com/users/krizhanovsky/received_events","type":"User","site_admin":false},"open_issues":20,"closed_issues":27,"state":"open","created_at":"2015-03-10T23:30:59Z","updated_at":"2015-07-31T06:23:41Z","due_on":"2015-08-30T21:00:00Z","closed_at":null},"comments":2,"created_at":"2015-07-21T08:13:40Z","updated_at":"2015-07-31T06:23:41Z","closed_at":"2015-07-31T06:23:41Z","body":"Currently, when a pipelined request is encountered, the relevant SKB is cloned and attached to the new, pipelined message. As requests are sent out to a server, that leads to all sorts of issues. For instance, when an SKB contains exactly two requests, these requests are duplicated in the new SKB, and server receives four requests instead of two. It's even more troubling when pipelined requests are split between SKBs, and server receives half-formed requests.\r\n\r\nDue to logic of inner working, this new message and SKB cloning operation needs to be done right after the current message is parsed and before it's processed further. That's because the current message may be deleted as result of further processing, and then the SKB containing the pipelined message will be lost.\r\n\r\nOn another note, currently schedulers don't know anything about pipelined messages and treat each message equally. However, it may be required to send a set of pipelined messages to the same server.\r\n\r\nThe main goals are:\r\n1. No HTTP messages should be sent to a server in duplicate or malformed.\r\n2. It must be possible to send pipelined messages to a single server or to different servers, based on settings and/or HTTP message contents.\r\n\r\nWhile these goals sound simple, they may require certain architecture changes.\r\n\r\nThe relevant, or rather paired issue here is #160. Issues that are raised here are very similar to issues described there."}}