@@ -82,30 +82,33 @@ impl_writeable_tlv_based_enum!(Event,
8282 } ;
8383) ;
8484
85- pub struct EventQueue < K : Deref >
85+ pub struct EventQueue < K : Deref , L : Deref >
8686where
8787 K :: Target : KVStore ,
88+ L :: Target : Logger ,
8889{
8990 queue : Mutex < VecDeque < Event > > ,
9091 notifier : Condvar ,
9192 kv_store : K ,
93+ logger : L ,
9294}
9395
94- impl < K : Deref > EventQueue < K >
96+ impl < K : Deref , L : Deref > EventQueue < K , L >
9597where
9698 K :: Target : KVStore ,
99+ L :: Target : Logger ,
97100{
98- pub ( crate ) fn new ( kv_store : K ) -> Self {
101+ pub ( crate ) fn new ( kv_store : K , logger : L ) -> Self {
99102 let queue: Mutex < VecDeque < Event > > = Mutex :: new ( VecDeque :: new ( ) ) ;
100103 let notifier = Condvar :: new ( ) ;
101- Self { queue, notifier, kv_store }
104+ Self { queue, notifier, kv_store, logger }
102105 }
103106
104107 pub ( crate ) fn add_event ( & self , event : Event ) -> Result < ( ) , Error > {
105108 {
106109 let mut locked_queue = self . queue . lock ( ) . unwrap ( ) ;
107110 locked_queue. push_back ( event) ;
108- self . persist_queue ( & locked_queue) ?;
111+ self . write_queue_and_commit ( & locked_queue) ?;
109112 }
110113
111114 self . notifier . notify_one ( ) ;
@@ -122,37 +125,64 @@ where
122125 {
123126 let mut locked_queue = self . queue . lock ( ) . unwrap ( ) ;
124127 locked_queue. pop_front ( ) ;
125- self . persist_queue ( & locked_queue) ?;
128+ self . write_queue_and_commit ( & locked_queue) ?;
126129 }
127130 self . notifier . notify_one ( ) ;
128131 Ok ( ( ) )
129132 }
130133
131- fn persist_queue ( & self , locked_queue : & VecDeque < Event > ) -> Result < ( ) , Error > {
134+ fn write_queue_and_commit ( & self , locked_queue : & VecDeque < Event > ) -> Result < ( ) , Error > {
132135 let mut writer = self
133136 . kv_store
134137 . write ( EVENT_QUEUE_PERSISTENCE_NAMESPACE , EVENT_QUEUE_PERSISTENCE_KEY )
135- . map_err ( |_| Error :: PersistenceFailed ) ?;
136- EventQueueSerWrapper ( locked_queue)
137- . write ( & mut writer)
138- . map_err ( |_| Error :: PersistenceFailed ) ?;
139- writer. commit ( ) . map_err ( |_| Error :: PersistenceFailed ) ?;
138+ . map_err ( |e| {
139+ log_error ! (
140+ self . logger,
141+ "Getting writer for key {}/{} failed due to: {}" ,
142+ EVENT_QUEUE_PERSISTENCE_NAMESPACE ,
143+ EVENT_QUEUE_PERSISTENCE_KEY ,
144+ e
145+ ) ;
146+ Error :: PersistenceFailed
147+ } ) ?;
148+ EventQueueSerWrapper ( locked_queue) . write ( & mut writer) . map_err ( |e| {
149+ log_error ! (
150+ self . logger,
151+ "Writing event queue data to key {}/{} failed due to: {}" ,
152+ EVENT_QUEUE_PERSISTENCE_NAMESPACE ,
153+ EVENT_QUEUE_PERSISTENCE_KEY ,
154+ e
155+ ) ;
156+ Error :: PersistenceFailed
157+ } ) ?;
158+ writer. commit ( ) . map_err ( |e| {
159+ log_error ! (
160+ self . logger,
161+ "Committing event queue data to key {}/{} failed due to: {}" ,
162+ EVENT_QUEUE_PERSISTENCE_NAMESPACE ,
163+ EVENT_QUEUE_PERSISTENCE_KEY ,
164+ e
165+ ) ;
166+ Error :: PersistenceFailed
167+ } ) ?;
140168 Ok ( ( ) )
141169 }
142170}
143171
144- impl < K : Deref > ReadableArgs < K > for EventQueue < K >
172+ impl < K : Deref , L : Deref > ReadableArgs < ( K , L ) > for EventQueue < K , L >
145173where
146174 K :: Target : KVStore ,
175+ L :: Target : Logger ,
147176{
148177 #[ inline]
149178 fn read < R : lightning:: io:: Read > (
150- reader : & mut R , kv_store : K ,
179+ reader : & mut R , args : ( K , L ) ,
151180 ) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
181+ let ( kv_store, logger) = args;
152182 let read_queue: EventQueueDeserWrapper = Readable :: read ( reader) ?;
153183 let queue: Mutex < VecDeque < Event > > = Mutex :: new ( read_queue. 0 ) ;
154184 let notifier = Condvar :: new ( ) ;
155- Ok ( Self { queue, notifier, kv_store } )
185+ Ok ( Self { queue, notifier, kv_store, logger } )
156186 }
157187}
158188
@@ -189,11 +219,11 @@ where
189219 L :: Target : Logger ,
190220{
191221 wallet : Arc < Wallet < bdk:: database:: SqliteDatabase > > ,
192- event_queue : Arc < EventQueue < K > > ,
222+ event_queue : Arc < EventQueue < K , L > > ,
193223 channel_manager : Arc < ChannelManager > ,
194224 network_graph : Arc < NetworkGraph > ,
195225 keys_manager : Arc < KeysManager > ,
196- payment_store : Arc < PaymentInfoStorage < K > > ,
226+ payment_store : Arc < PaymentInfoStorage < K , L > > ,
197227 tokio_runtime : Arc < tokio:: runtime:: Runtime > ,
198228 logger : L ,
199229 _config : Arc < Config > ,
@@ -205,9 +235,9 @@ where
205235 L :: Target : Logger ,
206236{
207237 pub fn new (
208- wallet : Arc < Wallet < bdk:: database:: SqliteDatabase > > , event_queue : Arc < EventQueue < K > > ,
238+ wallet : Arc < Wallet < bdk:: database:: SqliteDatabase > > , event_queue : Arc < EventQueue < K , L > > ,
209239 channel_manager : Arc < ChannelManager > , network_graph : Arc < NetworkGraph > ,
210- keys_manager : Arc < KeysManager > , payment_store : Arc < PaymentInfoStorage < K > > ,
240+ keys_manager : Arc < KeysManager > , payment_store : Arc < PaymentInfoStorage < K , L > > ,
211241 tokio_runtime : Arc < tokio:: runtime:: Runtime > , logger : L , _config : Arc < Config > ,
212242 ) -> Self {
213243 Self {
@@ -555,12 +585,13 @@ where
555585#[ cfg( test) ]
556586mod tests {
557587 use super :: * ;
558- use crate :: test:: utils:: TestStore ;
588+ use crate :: test:: utils:: { TestLogger , TestStore } ;
559589
560590 #[ test]
561591 fn event_queue_persistence ( ) {
562592 let store = Arc :: new ( TestStore :: new ( ) ) ;
563- let event_queue = EventQueue :: new ( Arc :: clone ( & store) ) ;
593+ let logger = Arc :: new ( TestLogger :: new ( ) ) ;
594+ let event_queue = EventQueue :: new ( Arc :: clone ( & store) , Arc :: clone ( & logger) ) ;
564595
565596 let expected_event = Event :: ChannelReady { channel_id : [ 23u8 ; 32 ] , user_channel_id : 2323 } ;
566597 event_queue. add_event ( expected_event. clone ( ) ) . unwrap ( ) ;
@@ -577,7 +608,7 @@ mod tests {
577608 . get_persisted_bytes ( EVENT_QUEUE_PERSISTENCE_NAMESPACE , EVENT_QUEUE_PERSISTENCE_KEY )
578609 . unwrap ( ) ;
579610 let deser_event_queue =
580- EventQueue :: read ( & mut & persisted_bytes[ ..] , Arc :: clone ( & store) ) . unwrap ( ) ;
611+ EventQueue :: read ( & mut & persisted_bytes[ ..] , ( Arc :: clone ( & store) , logger ) ) . unwrap ( ) ;
581612 assert_eq ! ( deser_event_queue. next_event( ) , expected_event) ;
582613 assert ! ( !store. get_and_clear_did_persist( ) ) ;
583614
0 commit comments