alfred: Allow out-of-order TXEND
Get series with b4
b4 am 4404358.R7R4S15M79@sven-edgeVersions newest first
- v1 Latest7 patches 1 replyIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/7 | alfred: Avoid hash search for transaction cleanupalfred.h recv.c | +1 | 0 replies | |
| 2/7 | alfred: Move tx finish functionality in extra functionrecv.c | +39 | 0 replies | |
| 3/7 | alfred: Remove checks for committed/dropped transactionrecv.c | +0 | 0 replies | |
| 4/7 | alfred: Don't force cleanup of transaction on TXENDalfred.h recv.c | +6 | 0 replies | |
| 5/7 | alfred: Use expected packet count to finished transactionsalfred.h recv.c unix_sock.c | +13 | 0 replies | |
| 6/7 | alfred: Allow PUSH_DATA to finish transactionsrecv.c | +2 | 0 replies | |
| 7/7 | alfred: Allow TXEND to start new transactionrecv.c | +17 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [B.A.T.M.A.N.] [PATCH 0/7] alfred: Allow out-of-order TXEND
Hi,
alfred allows to have out-of-order push data packet delivery. But these push data packets are only accepted when they finish with an TXEND that has as its seqno the amount of packets alfred received for this transaction. A TXEND packet which is received before the last push data frame was received would therefore cause the complete transaction to be canceled on the receiver side.
It was observed on a TP-Link TL-WR841N/ND v8 [1] that after the upgrade to Gluon 2016.2 many (if not the most) transaction were out of order. The TXEND was received before the actual push data was submitted. The master server reacted to this by:
1. TXEND packet received to unknown transaction with seqno != 0 -> TXEND packet was dropped
2. PUSH_DATA packet received with seqno 0 received
-> new transaction was created
3. transaction timeout happened
-> transaction was dropped
This patchset now changes the behavior to automatically create transactions when TXEND packets are received. The routines to decode TXEND and PUSH_DATA packets will check if all frames of a transaction were received and commit the data when the check was successful.
This stabilized the statistics [2] for the previously mentioned node.
Kind regards,
Sven
[1] https://stats.freifunk-vogtland.net/dashboard/db/node?var-node=10feedb73eb2&from=1478782587039&to=1478902771655
[2] https://stats.freifunk-vogtland.net/dashboard/db/node?var-node=10feedb73eb2&from=1478902641027&to=1478938850519
Sven Eckelmann (7):
alfred: Avoid hash search for transaction cleanup
alfred: Move tx finish functionality in extra function
alfred: Remove checks for committed/dropped transaction
alfred: Don't force cleanup of transaction on TXEND
alfred: Use expected packet count to finished transactions
alfred: Allow PUSH_DATA to finish transactions
alfred: Allow TXEND to start new transaction
alfred.h | 11 +++++--- recv.c | 84 +++++++++++++++++++++++++++++++------------------------------ unix_sock.c | 2 +- 3 files changed, 51 insertions(+), 46 deletions(-)