Distributed_db: add primitive for sending 'message'.
This commit is contained in:
parent
e98e175c21
commit
d866b1bfa5
@ -849,15 +849,6 @@ let clear_block net_db hash n =
|
|||||||
Raw_operation_hashes.clear_all net_db.operation_hashes_db.table hash n ;
|
Raw_operation_hashes.clear_all net_db.operation_hashes_db.table hash n ;
|
||||||
Raw_block_header.Table.clear_or_cancel net_db.block_header_db.table hash
|
Raw_block_header.Table.clear_or_cancel net_db.block_header_db.table hash
|
||||||
|
|
||||||
let broadcast_head net_db head mempool =
|
|
||||||
let net_id = State.Net.id net_db.net_state in
|
|
||||||
assert (Net_id.equal net_id (State.Block.net_id head)) ;
|
|
||||||
let msg : Message.t =
|
|
||||||
Current_head (net_id, State.Block.header head, mempool) in
|
|
||||||
P2p.Peer_id.Table.iter
|
|
||||||
(fun _peer_id state ->
|
|
||||||
ignore (P2p.try_send net_db.global_db.p2p state.conn msg))
|
|
||||||
net_db.active_connections
|
|
||||||
|
|
||||||
let watch_block_header { block_input } =
|
let watch_block_header { block_input } =
|
||||||
Watcher.create_stream block_input
|
Watcher.create_stream block_input
|
||||||
@ -958,3 +949,50 @@ module Protocol =
|
|||||||
let proj db = db.protocol_db.table
|
let proj db = db.protocol_db.table
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
let broadcast net_db msg =
|
||||||
|
P2p.Peer_id.Table.iter
|
||||||
|
(fun _peer_id state ->
|
||||||
|
ignore (P2p.try_send net_db.global_db.p2p state.conn msg))
|
||||||
|
net_db.active_connections
|
||||||
|
|
||||||
|
let try_send net_db peer_id msg =
|
||||||
|
try
|
||||||
|
let conn = P2p.Peer_id.Table.find net_db.active_connections peer_id in
|
||||||
|
ignore (P2p.try_send net_db.global_db.p2p conn.conn msg : bool)
|
||||||
|
with Not_found -> ()
|
||||||
|
|
||||||
|
let send net_db ?peer msg =
|
||||||
|
match peer with
|
||||||
|
| Some peer -> try_send net_db peer msg
|
||||||
|
| None -> broadcast net_db msg
|
||||||
|
|
||||||
|
module Request = struct
|
||||||
|
|
||||||
|
let current_head net_db ?peer () =
|
||||||
|
let net_id = State.Net.id net_db.net_state in
|
||||||
|
send net_db ?peer @@ Get_current_head net_id
|
||||||
|
|
||||||
|
let current_branch net_db ?peer () =
|
||||||
|
let net_id = State.Net.id net_db.net_state in
|
||||||
|
send net_db ?peer @@ Get_current_branch net_id
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
module Advertise = struct
|
||||||
|
|
||||||
|
let current_head net_db ?peer ?(mempool = []) head =
|
||||||
|
let net_id = State.Net.id net_db.net_state in
|
||||||
|
assert (Net_id.equal net_id (State.Block.net_id head)) ;
|
||||||
|
send net_db ?peer @@
|
||||||
|
Current_head (net_id, State.Block.header head, mempool)
|
||||||
|
|
||||||
|
let current_branch net_db ?peer head =
|
||||||
|
let net_id = State.Net.id net_db.net_state in
|
||||||
|
assert (Net_id.equal net_id (State.Block.net_id head)) ;
|
||||||
|
Block_locator.compute head 200 >>= fun locator ->
|
||||||
|
send net_db ?peer @@ Current_branch (net_id, locator) ;
|
||||||
|
Lwt.return_unit
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
@ -38,9 +38,6 @@ val deactivate: net_db -> unit Lwt.t
|
|||||||
|
|
||||||
val disconnect: net_db -> P2p.Peer_id.t -> unit Lwt.t
|
val disconnect: net_db -> P2p.Peer_id.t -> unit Lwt.t
|
||||||
|
|
||||||
val broadcast_head:
|
|
||||||
net_db -> State.Block.t -> Operation_hash.t list -> unit
|
|
||||||
|
|
||||||
type operation =
|
type operation =
|
||||||
| Blob of Operation.t
|
| Blob of Operation.t
|
||||||
| Hash of Operation_hash.t
|
| Hash of Operation_hash.t
|
||||||
@ -135,3 +132,18 @@ module Raw : sig
|
|||||||
val encoding: Message.t P2p.Raw.t Data_encoding.t
|
val encoding: Message.t P2p.Raw.t Data_encoding.t
|
||||||
val supported_versions: P2p_types.Version.t list
|
val supported_versions: P2p_types.Version.t list
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module Request : sig
|
||||||
|
val current_branch: net_db -> ?peer:P2p.Peer_id.t -> unit -> unit
|
||||||
|
val current_head: net_db -> ?peer:P2p.Peer_id.t -> unit -> unit
|
||||||
|
end
|
||||||
|
|
||||||
|
module Advertise : sig
|
||||||
|
val current_head:
|
||||||
|
net_db -> ?peer:P2p.Peer_id.t ->
|
||||||
|
?mempool:Operation_hash.t list -> State.Block.t -> unit
|
||||||
|
val current_branch:
|
||||||
|
net_db -> ?peer:P2p.Peer_id.t ->
|
||||||
|
State.Block.t -> unit Lwt.t
|
||||||
|
end
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ let create net_db =
|
|||||||
Lwt.return_unit in
|
Lwt.return_unit in
|
||||||
|
|
||||||
let broadcast_operation ops =
|
let broadcast_operation ops =
|
||||||
Distributed_db.broadcast_head net_db !head ops in
|
Distributed_db.Advertise.current_head net_db ~mempool:ops !head in
|
||||||
|
|
||||||
let handle_unprocessed () =
|
let handle_unprocessed () =
|
||||||
if Operation_hash.Set.is_empty !unprocessed then
|
if Operation_hash.Set.is_empty !unprocessed then
|
||||||
|
@ -113,7 +113,7 @@ let rec may_set_head v (block: State.Block.t) =
|
|||||||
Chain.test_and_set_head v.net ~old:head block >>= function
|
Chain.test_and_set_head v.net ~old:head block >>= function
|
||||||
| false -> may_set_head v block
|
| false -> may_set_head v block
|
||||||
| true ->
|
| true ->
|
||||||
Distributed_db.broadcast_head v.net_db block [] ;
|
Distributed_db.Advertise.current_head v.net_db block ;
|
||||||
Prevalidator.flush v.prevalidator block ;
|
Prevalidator.flush v.prevalidator block ;
|
||||||
begin
|
begin
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user