Node: allow invalid block errors to be stored

This commit is contained in:
Milo Davis 2017-10-31 17:59:02 +01:00 committed by Benjamin Canou
parent 059e4cac79
commit 42e29c8f4a
5 changed files with 15 additions and 9 deletions

View File

@ -152,7 +152,7 @@ module Block = struct
type invalid_block = { type invalid_block = {
level: int32 ; level: int32 ;
(* errors: Error_monad.error list ; *) errors: Error_monad.error list ;
} }
module Invalid_block = module Invalid_block =
@ -166,9 +166,9 @@ module Block = struct
let encoding = let encoding =
let open Data_encoding in let open Data_encoding in
conv conv
(fun { level } -> (level)) (fun { level ; errors } -> (level, errors))
(fun (level) -> { level }) (fun (level, errors) -> { level ; errors })
int32 (tup2 int32 (list Error_monad.error_encoding))
end)) end))
let register s = let register s =

View File

@ -115,7 +115,7 @@ module Block : sig
type invalid_block = { type invalid_block = {
level: int32 ; level: int32 ;
(* errors: Error_monad.error list ; *) errors: Error_monad.error list ;
} }
module Invalid_block : MAP_STORE module Invalid_block : MAP_STORE

View File

@ -792,9 +792,9 @@ let commit_block net_db hash header operations result =
clear_block net_db hash header.shell.validation_passes ; clear_block net_db hash header.shell.validation_passes ;
return res return res
let commit_invalid_block net_db hash header _err = let commit_invalid_block net_db hash header errors =
assert (Block_hash.equal hash (Block_header.hash header)) ; assert (Block_hash.equal hash (Block_header.hash header)) ;
State.Block.store_invalid net_db.net_state header >>=? fun res -> State.Block.store_invalid net_db.net_state header errors >>=? fun res ->
clear_block net_db hash header.shell.validation_passes ; clear_block net_db hash header.shell.validation_passes ;
return res return res

View File

@ -376,6 +376,10 @@ module Block = struct
Shared.use net_state.block_store begin fun store -> Shared.use net_state.block_store begin fun store ->
Store.Block.Invalid_block.known store hash Store.Block.Invalid_block.known store hash
end end
let read_invalid net_state hash =
Shared.use net_state.block_store begin fun store ->
Store.Block.Invalid_block.read_opt store hash
end
let known net_state hash = let known net_state hash =
Shared.use net_state.block_store begin fun store -> Shared.use net_state.block_store begin fun store ->
@ -478,7 +482,7 @@ module Block = struct
end end
end end
let store_invalid net_state block_header = let store_invalid net_state block_header errors =
let bytes = Block_header.to_bytes block_header in let bytes = Block_header.to_bytes block_header in
let hash = Block_header.hash_raw bytes in let hash = Block_header.hash_raw bytes in
Shared.use net_state.block_store begin fun store -> Shared.use net_state.block_store begin fun store ->
@ -489,7 +493,7 @@ module Block = struct
return false return false
else else
Store.Block.Invalid_block.store store hash Store.Block.Invalid_block.store store hash
{ level = block_header.shell.level } >>= fun () -> { level = block_header.shell.level ; errors } >>= fun () ->
return true return true
end end

View File

@ -97,6 +97,7 @@ module Block : sig
val known: Net.t -> Block_hash.t -> bool Lwt.t val known: Net.t -> Block_hash.t -> bool Lwt.t
val known_valid: Net.t -> Block_hash.t -> bool Lwt.t val known_valid: Net.t -> Block_hash.t -> bool Lwt.t
val known_invalid: Net.t -> Block_hash.t -> bool Lwt.t val known_invalid: Net.t -> Block_hash.t -> bool Lwt.t
val read_invalid: Net.t -> Block_hash.t -> Store.Block.invalid_block option Lwt.t
val read: Net.t -> Block_hash.t -> block tzresult Lwt.t val read: Net.t -> Block_hash.t -> block tzresult Lwt.t
val read_opt: Net.t -> Block_hash.t -> block option Lwt.t val read_opt: Net.t -> Block_hash.t -> block option Lwt.t
@ -112,6 +113,7 @@ module Block : sig
val store_invalid: val store_invalid:
Net.t -> Net.t ->
Block_header.t -> Block_header.t ->
error list ->
bool tzresult Lwt.t bool tzresult Lwt.t
val compare: t -> t -> int val compare: t -> t -> int