File tree Expand file tree Collapse file tree 2 files changed +19
-5
lines changed Expand file tree Collapse file tree 2 files changed +19
-5
lines changed Original file line number Diff line number Diff line change @@ -70,7 +70,7 @@ pub struct InnerClient {
70
70
impl InnerClient {
71
71
pub fn send ( & self , messages : RequestMessages ) -> Result < Responses , Error > {
72
72
let ( sender, receiver) = mpsc:: channel ( 1 ) ;
73
- let request = Request { messages, sender } ;
73
+ let request = Request { messages : messages , sender : Some ( sender ) } ;
74
74
self . sender
75
75
. unbounded_send ( request)
76
76
. map_err ( |_| Error :: closed ( ) ) ?;
@@ -81,6 +81,18 @@ impl InnerClient {
81
81
} )
82
82
}
83
83
84
+ // Send a message for the existing entry in the pipeline; don't
85
+ // create a new entry in the pipeline. This is needed for CopyBoth
86
+ // mode (i.e. streaming replication), where the client may send a
87
+ // new message that is part of the existing request.
88
+ pub fn unpipelined_send ( & self , messages : RequestMessages ) -> Result < ( ) , Error > {
89
+ let request = Request { messages : messages, sender : None } ;
90
+ self . sender
91
+ . unbounded_send ( request)
92
+ . map_err ( |_| Error :: closed ( ) ) ?;
93
+ Ok ( ( ) )
94
+ }
95
+
84
96
pub fn typeinfo ( & self ) -> Option < Statement > {
85
97
self . state . lock ( ) . typeinfo . clone ( )
86
98
}
Original file line number Diff line number Diff line change @@ -25,7 +25,7 @@ pub enum RequestMessages {
25
25
26
26
pub struct Request {
27
27
pub messages : RequestMessages ,
28
- pub sender : mpsc:: Sender < BackendMessages > ,
28
+ pub sender : Option < mpsc:: Sender < BackendMessages > > ,
29
29
}
30
30
31
31
pub struct Response {
@@ -183,9 +183,11 @@ where
183
183
match self . receiver . poll_next_unpin ( cx) {
184
184
Poll :: Ready ( Some ( request) ) => {
185
185
trace ! ( "polled new request" ) ;
186
- self . responses . push_back ( Response {
187
- sender : request. sender ,
188
- } ) ;
186
+ if let Some ( sender) = request. sender {
187
+ self . responses . push_back ( Response {
188
+ sender : sender,
189
+ } ) ;
190
+ }
189
191
Poll :: Ready ( Some ( request. messages ) )
190
192
}
191
193
Poll :: Ready ( None ) => Poll :: Ready ( None ) ,
You can’t perform that action at this time.
0 commit comments