-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MB-33849 Split control and data processing to different go-routines i…
…n kvdata The control and data processing is split into two go-routines with this patch. genServer() handles the control path and runScatter() handles the datapath. Between the two go-routines only reqTs is shared. runScatter() uses reqTs to update Seqno incase of stream begin messages. As stream begins are not that often, reqTs is protected with reqTs mutex As there are two separate go-routines, there is no ordering in the way the routines can terminate. To make sure both the go-routines exit gracefully, the following channels have been introduced: a. genServerFinCh - Controls the execution of genServer() routine. genServer() will exit when this channel is closed b. runScatterFinCh - Controls the execution of runScatter() routine. runScatter() will exit when this channel is closed c. genServerStopCh - This channel is used to block all incoming requests reaching KVdata. Incoming requests will error out with ErrorClosed when this channel is closed The semantics followed are: a. When runScatter() exits, then close genServerFinCh so that genServer() terminates (In case runScatter() exists first, closing genServerFinCh ensures that genServer() will eventually exit) b. If genServer() exits, then 1. Close genServerStopCh to block all incoming requests to this kvdata instance 2. Close runScatterFinCh so that runScatter() terminates and data processing is stopped for this kvdata instance 3. Publish StreamEnd to feed to clear book-keeping and close all workers Change-Id: Ia619b417d2d1dcaa3acfa874a5e5dca918b7a34d
- Loading branch information
Showing
1 changed file
with
109 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters