@@ -6,7 +6,7 @@ use std::error::Error;
6
6
use std:: time:: Duration ;
7
7
8
8
use clap:: { App , Arg } ;
9
- use futures:: future:: { join, try_join_all } ;
9
+ use futures:: future:: { join, join_all } ;
10
10
use tokio:: runtime:: Runtime ;
11
11
use tokio:: time:: { delay_for, timeout} ;
12
12
@@ -165,26 +165,26 @@ async fn iterate_channels<A: Adapter + 'static>(args: Args<A>, logger: &Logger)
165
165
let channels = match result {
166
166
Ok ( channels) => channels,
167
167
Err ( e) => {
168
- error ! ( logger, "Failed to get channels {}" , & e; "main" => "iterate_channels" ) ;
168
+ error ! ( logger, "Failed to get channels - {}" , & e; "main" => "iterate_channels" ) ;
169
169
return ;
170
170
}
171
171
} ;
172
172
173
173
let channels_size = channels. len ( ) ;
174
174
175
- let tick = try_join_all (
175
+ let tick_results = join_all (
176
176
channels
177
177
. into_iter ( )
178
178
. map ( |channel| validator_tick ( args. adapter . clone ( ) , channel, & args. config , logger) ) ,
179
179
)
180
180
. await ;
181
181
182
- info ! ( logger, "processed {} channels" , channels_size) ;
183
-
184
- if let Err ( e) = tick {
185
- error ! ( logger, "An occurred while processing channels {}" , & e; "main" => "iterate_channels" ) ;
182
+ for channel_err in tick_results. into_iter ( ) . filter_map ( Result :: err) {
183
+ error ! ( logger, "Error processing channels - {}" , channel_err; "main" => "iterate_channels" ) ;
186
184
}
187
185
186
+ info ! ( logger, "processed {} channels" , channels_size) ;
187
+
188
188
if channels_size >= args. config . max_channels as usize {
189
189
error ! ( logger, "WARNING: channel limit cfg.MAX_CHANNELS={} reached" , & args. config. max_channels; "main" => "iterate_channels" ) ;
190
190
}
@@ -203,22 +203,32 @@ async fn validator_tick<A: Adapter + 'static>(
203
203
204
204
match channel. spec . validators . find ( & whoami) {
205
205
SpecValidator :: Leader ( _) => match timeout ( duration, leader:: tick ( & sentry) ) . await {
206
- Err ( e) => return Err ( ValidatorWorkerError :: Failed ( e. to_string ( ) ) ) ,
207
- Ok ( Err ( e) ) => return Err ( ValidatorWorkerError :: Failed ( e. to_string ( ) ) ) ,
208
- _ => ( ) ,
206
+ Err ( timeout_e) => Err ( ValidatorWorkerError :: Channel (
207
+ channel. id ,
208
+ timeout_e. to_string ( ) ,
209
+ ) ) ,
210
+ Ok ( Err ( tick_e) ) => Err ( ValidatorWorkerError :: Channel (
211
+ channel. id ,
212
+ tick_e. to_string ( ) ,
213
+ ) ) ,
214
+ _ => Ok ( ( ) ) ,
209
215
} ,
210
216
SpecValidator :: Follower ( _) => match timeout ( duration, follower:: tick ( & sentry) ) . await {
211
- Err ( e) => return Err ( ValidatorWorkerError :: Failed ( e. to_string ( ) ) ) ,
212
- Ok ( Err ( e) ) => return Err ( ValidatorWorkerError :: Failed ( e. to_string ( ) ) ) ,
213
- _ => ( ) ,
217
+ Err ( timeout_e) => Err ( ValidatorWorkerError :: Channel (
218
+ channel. id ,
219
+ timeout_e. to_string ( ) ,
220
+ ) ) ,
221
+ Ok ( Err ( tick_e) ) => Err ( ValidatorWorkerError :: Channel (
222
+ channel. id ,
223
+ tick_e. to_string ( ) ,
224
+ ) ) ,
225
+ _ => Ok ( ( ) ) ,
214
226
} ,
215
- SpecValidator :: None => {
216
- return Err ( ValidatorWorkerError :: Failed (
217
- "validatorTick: processing a channel where we are not validating" . to_string ( ) ,
218
- ) )
219
- }
220
- } ;
221
- Ok ( ( ) )
227
+ SpecValidator :: None => Err ( ValidatorWorkerError :: Channel (
228
+ channel. id ,
229
+ "validatorTick: processing a channel which we are not validating" . to_string ( ) ,
230
+ ) ) ,
231
+ }
222
232
}
223
233
224
234
fn logger ( ) -> Logger {
0 commit comments