@@ -7,9 +7,7 @@ use crate::payment_store::{
7
7
PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
8
8
} ;
9
9
10
- use crate :: io:: {
11
- KVStore , TransactionalWrite , EVENT_QUEUE_PERSISTENCE_KEY , EVENT_QUEUE_PERSISTENCE_NAMESPACE ,
12
- } ;
10
+ use crate :: io:: { KVStore , EVENT_QUEUE_PERSISTENCE_KEY , EVENT_QUEUE_PERSISTENCE_NAMESPACE } ;
13
11
use crate :: logger:: { log_error, log_info, Logger } ;
14
12
15
13
use lightning:: chain:: chaininterface:: { BroadcasterInterface , ConfirmationTarget , FeeEstimator } ;
@@ -108,23 +106,21 @@ impl_writeable_tlv_based_enum!(Event,
108
106
} ;
109
107
) ;
110
108
111
- pub struct EventQueue < K : Deref , L : Deref >
109
+ pub struct EventQueue < K : KVStore + Sync + Send , L : Deref >
112
110
where
113
- K :: Target : KVStore ,
114
111
L :: Target : Logger ,
115
112
{
116
113
queue : Mutex < VecDeque < Event > > ,
117
114
notifier : Condvar ,
118
- kv_store : K ,
115
+ kv_store : Arc < K > ,
119
116
logger : L ,
120
117
}
121
118
122
- impl < K : Deref , L : Deref > EventQueue < K , L >
119
+ impl < K : KVStore + Sync + Send , L : Deref > EventQueue < K , L >
123
120
where
124
- K :: Target : KVStore ,
125
121
L :: Target : Logger ,
126
122
{
127
- pub ( crate ) fn new ( kv_store : K , logger : L ) -> Self {
123
+ pub ( crate ) fn new ( kv_store : Arc < K > , logger : L ) -> Self {
128
124
let queue: Mutex < VecDeque < Event > > = Mutex :: new ( VecDeque :: new ( ) ) ;
129
125
let notifier = Condvar :: new ( ) ;
130
126
Self { queue, notifier, kv_store, logger }
@@ -134,7 +130,7 @@ where
134
130
{
135
131
let mut locked_queue = self . queue . lock ( ) . unwrap ( ) ;
136
132
locked_queue. push_back ( event) ;
137
- self . write_queue_and_commit ( & locked_queue) ?;
133
+ self . persist_queue ( & locked_queue) ?;
138
134
}
139
135
140
136
self . notifier . notify_one ( ) ;
@@ -156,58 +152,37 @@ where
156
152
{
157
153
let mut locked_queue = self . queue . lock ( ) . unwrap ( ) ;
158
154
locked_queue. pop_front ( ) ;
159
- self . write_queue_and_commit ( & locked_queue) ?;
155
+ self . persist_queue ( & locked_queue) ?;
160
156
}
161
157
self . notifier . notify_one ( ) ;
162
158
Ok ( ( ) )
163
159
}
164
160
165
- fn write_queue_and_commit ( & self , locked_queue : & VecDeque < Event > ) -> Result < ( ) , Error > {
166
- let mut writer = self
167
- . kv_store
168
- . write ( EVENT_QUEUE_PERSISTENCE_NAMESPACE , EVENT_QUEUE_PERSISTENCE_KEY )
161
+ fn persist_queue ( & self , locked_queue : & VecDeque < Event > ) -> Result < ( ) , Error > {
162
+ let data = EventQueueSerWrapper ( locked_queue ) . encode ( ) ;
163
+ self . kv_store
164
+ . write ( EVENT_QUEUE_PERSISTENCE_NAMESPACE , EVENT_QUEUE_PERSISTENCE_KEY , & data )
169
165
. map_err ( |e| {
170
166
log_error ! (
171
167
self . logger,
172
- "Getting writer for key {}/{} failed due to: {}" ,
168
+ "Write for key {}/{} failed due to: {}" ,
173
169
EVENT_QUEUE_PERSISTENCE_NAMESPACE ,
174
170
EVENT_QUEUE_PERSISTENCE_KEY ,
175
171
e
176
172
) ;
177
173
Error :: PersistenceFailed
178
174
} ) ?;
179
- EventQueueSerWrapper ( locked_queue) . write ( & mut writer) . map_err ( |e| {
180
- log_error ! (
181
- self . logger,
182
- "Writing event queue data to key {}/{} failed due to: {}" ,
183
- EVENT_QUEUE_PERSISTENCE_NAMESPACE ,
184
- EVENT_QUEUE_PERSISTENCE_KEY ,
185
- e
186
- ) ;
187
- Error :: PersistenceFailed
188
- } ) ?;
189
- writer. commit ( ) . map_err ( |e| {
190
- log_error ! (
191
- self . logger,
192
- "Committing event queue data to key {}/{} failed due to: {}" ,
193
- EVENT_QUEUE_PERSISTENCE_NAMESPACE ,
194
- EVENT_QUEUE_PERSISTENCE_KEY ,
195
- e
196
- ) ;
197
- Error :: PersistenceFailed
198
- } ) ?;
199
175
Ok ( ( ) )
200
176
}
201
177
}
202
178
203
- impl < K : Deref , L : Deref > ReadableArgs < ( K , L ) > for EventQueue < K , L >
179
+ impl < K : KVStore + Sync + Send , L : Deref > ReadableArgs < ( Arc < K > , L ) > for EventQueue < K , L >
204
180
where
205
- K :: Target : KVStore ,
206
181
L :: Target : Logger ,
207
182
{
208
183
#[ inline]
209
184
fn read < R : lightning:: io:: Read > (
210
- reader : & mut R , args : ( K , L ) ,
185
+ reader : & mut R , args : ( Arc < K > , L ) ,
211
186
) -> Result < Self , lightning:: ln:: msgs:: DecodeError > {
212
187
let ( kv_store, logger) = args;
213
188
let read_queue: EventQueueDeserWrapper = Readable :: read ( reader) ?;
@@ -244,14 +219,13 @@ impl Writeable for EventQueueSerWrapper<'_> {
244
219
}
245
220
}
246
221
247
- pub ( crate ) struct EventHandler < K : Deref + Clone , L : Deref >
222
+ pub ( crate ) struct EventHandler < K : KVStore + Sync + Send , L : Deref >
248
223
where
249
- K :: Target : KVStore ,
250
224
L :: Target : Logger ,
251
225
{
252
226
wallet : Arc < Wallet < bdk:: database:: SqliteDatabase > > ,
253
227
event_queue : Arc < EventQueue < K , L > > ,
254
- channel_manager : Arc < ChannelManager > ,
228
+ channel_manager : Arc < ChannelManager < K > > ,
255
229
network_graph : Arc < NetworkGraph > ,
256
230
keys_manager : Arc < KeysManager > ,
257
231
payment_store : Arc < PaymentStore < K , L > > ,
@@ -260,14 +234,13 @@ where
260
234
_config : Arc < Config > ,
261
235
}
262
236
263
- impl < K : Deref + Clone , L : Deref > EventHandler < K , L >
237
+ impl < K : KVStore + Sync + Send + ' static , L : Deref > EventHandler < K , L >
264
238
where
265
- K :: Target : KVStore ,
266
239
L :: Target : Logger ,
267
240
{
268
241
pub fn new (
269
242
wallet : Arc < Wallet < bdk:: database:: SqliteDatabase > > , event_queue : Arc < EventQueue < K , L > > ,
270
- channel_manager : Arc < ChannelManager > , network_graph : Arc < NetworkGraph > ,
243
+ channel_manager : Arc < ChannelManager < K > > , network_graph : Arc < NetworkGraph > ,
271
244
keys_manager : Arc < KeysManager > , payment_store : Arc < PaymentStore < K , L > > ,
272
245
runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , _config : Arc < Config > ,
273
246
) -> Self {
0 commit comments