Skip to content

Commit 1ed5df7

Browse files
author
Naohiro Yoshida
committed
cancel task on disconnect
Signed-off-by: Naohiro Yoshida <naohiro.yoshida@datachain.jp>
1 parent e0e92c6 commit 1ed5df7

File tree

1 file changed

+36
-38
lines changed

1 file changed

+36
-38
lines changed

server/src/host/single/handler.rs

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,11 @@ use anyhow::Result;
88
use kona_genesis::RollupConfig;
99
use kona_host::single::{SingleChainHintHandler, SingleChainHost};
1010
use kona_host::{MemoryKeyValueStore, OnlineHostBackend, PreimageServer, SplitKeyValueStore};
11-
use kona_preimage::{
12-
BidirectionalChannel, HintReader, HintWriter, OracleReader, OracleServer, PreimageKey,
13-
};
11+
use kona_preimage::{BidirectionalChannel, HintReader, HintWriter, NativeChannel, OracleReader, OracleServer, PreimageKey};
1412
use kona_proof::boot::L2_ROLLUP_CONFIG_KEY;
1513
use kona_proof::HintType;
1614
use std::sync::Arc;
1715
use tokio::sync::RwLock;
18-
use tokio::task;
1916

2017
#[derive(Debug, Clone)]
2118
pub struct DerivationRequest {
@@ -42,6 +39,21 @@ impl DerivationRequest {
4239
)))))
4340
}
4441

42+
async fn run_server(&self, preimage_host: NativeChannel, hint_host: NativeChannel, backend: OnlineHostBackend<SingleChainHost, SingleChainHintHandler>) -> Result<()> {
43+
PreimageServer::new(
44+
OracleServer::new(preimage_host),
45+
HintReader::new(hint_host),
46+
Arc::new(backend),
47+
).start().await.map_err(|e| e.into())
48+
}
49+
50+
async fn run_client(&self, preimage_client: NativeChannel, hint_client: NativeChannel) -> Result<()> {
51+
kona_client::single::run(
52+
OracleReader::new(preimage_client),
53+
HintWriter::new(hint_client),
54+
).await.map_err(|e| e.into())
55+
}
56+
4557
pub async fn start(&self) -> Result<Vec<u8>> {
4658
let hint = BidirectionalChannel::new()?;
4759
let preimage = BidirectionalChannel::new()?;
@@ -62,41 +74,27 @@ impl DerivationRequest {
6274
OnlineHostBackend::new(cfg, kv_store.clone(), providers, SingleChainHintHandler)
6375
.with_proactive_hint(HintType::L2PayloadWitness);
6476

65-
let server_task = task::spawn(
66-
PreimageServer::new(
67-
OracleServer::new(preimage.host),
68-
HintReader::new(hint.host),
69-
Arc::new(backend),
70-
)
71-
.start(),
72-
);
73-
let client_task = task::spawn(kona_client::single::run(
74-
OracleReader::new(preimage.client),
75-
HintWriter::new(hint.client),
76-
));
77+
let server_task = self.run_server(preimage.host, hint.host, backend);
78+
let client_task = self.run_client(preimage.client, hint.client);
79+
tokio::try_join!(server_task, client_task)?;
7780

78-
let (_, client_result) = tokio::try_join!(server_task, client_task)?;
79-
match client_result {
80-
Ok(_) => {
81-
let mut used = {
82-
let mut lock = kv_store.write().await;
83-
std::mem::take(&mut lock.used)
84-
};
85-
let local_key = PreimageKey::new_local(L2_ROLLUP_CONFIG_KEY.to());
86-
let roll_up_config_json = serde_json::to_vec(&self.rollup_config)?;
87-
used.insert(local_key, roll_up_config_json);
81+
// Collect preimages from the kv store
82+
let mut used = {
83+
let mut lock = kv_store.write().await;
84+
std::mem::take(&mut lock.used)
85+
};
86+
let local_key = PreimageKey::new_local(L2_ROLLUP_CONFIG_KEY.to());
87+
let roll_up_config_json = serde_json::to_vec(&self.rollup_config)?;
88+
used.insert(local_key, roll_up_config_json);
8889

89-
let entry_size = used.len();
90-
let preimage = encode_to_bytes(used);
91-
let preimage_bytes: Vec<u8> = preimage.into_vec().unwrap();
92-
tracing::info!(
93-
"Preimage entry: {}, size: {}",
94-
entry_size,
95-
preimage_bytes.len()
96-
);
97-
Ok(preimage_bytes)
98-
}
99-
Err(e) => Err(e.into()),
100-
}
90+
let entry_size = used.len();
91+
let preimage = encode_to_bytes(used);
92+
let preimage_bytes: Vec<u8> = preimage.into_vec().unwrap();
93+
tracing::info!(
94+
"Preimage entry: {}, size: {}",
95+
entry_size,
96+
preimage_bytes.len()
97+
);
98+
Ok(preimage_bytes)
10199
}
102100
}

0 commit comments

Comments
 (0)