@@ -10,12 +10,12 @@ use chainhook_event_observer::{
10
10
use threadpool:: ThreadPool ;
11
11
12
12
use crate :: {
13
- config:: Config ,
13
+ config:: { Config , PredicatesApi } ,
14
14
scan:: {
15
15
bitcoin:: scan_bitcoin_chainstate_via_rpc_using_predicate,
16
16
stacks:: scan_stacks_chainstate_via_rocksdb_using_predicate,
17
17
} ,
18
- storage:: open_readonly_stacks_db_conn,
18
+ storage:: open_readonly_stacks_db_conn, service :: { PredicateStatus , update_predicate_status , open_readwrite_predicates_db_conn_or_panic } ,
19
19
} ;
20
20
21
21
pub fn start_stacks_scan_runloop (
@@ -50,13 +50,22 @@ pub fn start_stacks_scan_runloop(
50
50
& moved_config,
51
51
& moved_ctx,
52
52
) ;
53
- let last_block_scanned = match hiro_system_kit:: nestable_block_on ( op) {
53
+ let res = hiro_system_kit:: nestable_block_on ( op) ;
54
+ let last_block_scanned = match res {
54
55
Ok ( last_block_scanned) => last_block_scanned,
55
56
Err ( e) => {
56
57
error ! (
57
58
moved_ctx. expect_logger( ) ,
58
59
"Unable to evaluate predicate on Stacks chainstate: {e}" ,
59
60
) ;
61
+
62
+ // Update predicate status in redis
63
+ if let PredicatesApi :: On ( ref api_config) = moved_config. http_api {
64
+ let status = PredicateStatus :: Interrupted ( "Unable to evaluate predicate on Stacks chainstate: {e}" . to_string ( ) ) ;
65
+ let mut predicates_db_conn = open_readwrite_predicates_db_conn_or_panic ( api_config, & moved_ctx) ;
66
+ update_predicate_status ( & predicate_spec. key ( ) , status, & mut predicates_db_conn, & moved_ctx) ;
67
+ }
68
+
60
69
return ;
61
70
}
62
71
} ;
0 commit comments