···
use std::collections::{HashMap, HashSet};
use std::time::{Duration, UNIX_EPOCH};
use tokio::net::{TcpListener, ToSocketAddrs};
-
use tokio::task::block_in_place;
use tokio_util::sync::CancellationToken;
use crate::storage::{LinkReader, StorageStats};
···
const INDEX_BEGAN_AT_TS: u64 = 1738083600; // TODO: not this
pub async fn serve<S, A>(store: S, addr: A, stay_alive: CancellationToken) -> anyhow::Result<()>
···
let store = store.clone();
-
move |accept| async { block_in_place(|| hello(accept, store)) }
let store = store.clone();
-
move |accept, query| async { block_in_place(|| count_links(accept, query, store)) }
···
let store = store.clone();
move |accept, query| async {
-
block_in_place(|| count_distinct_dids(accept, query, store))
···
let store = store.clone();
move |accept, query| async {
-
block_in_place(|| get_backlinks(accept, query, store))
···
let store = store.clone();
-
move |accept, query| async { block_in_place(|| get_links(accept, query, store)) }
···
let store = store.clone();
move |accept, query| async {
-
block_in_place(|| get_distinct_dids(accept, query, store))
···
let store = store.clone();
move |accept, query| async {
-
block_in_place(|| count_all_links(accept, query, store))
···
let store = store.clone();
move |accept, query| async {
-
block_in_place(|| explore_links(accept, query, store))
···
use std::collections::{HashMap, HashSet};
use std::time::{Duration, UNIX_EPOCH};
use tokio::net::{TcpListener, ToSocketAddrs};
+
use tokio::task::spawn_blocking;
use tokio_util::sync::CancellationToken;
use crate::storage::{LinkReader, StorageStats};
···
const INDEX_BEGAN_AT_TS: u64 = 1738083600; // TODO: not this
+
fn to500(e: tokio::task::JoinError) -> http::StatusCode {
+
eprintln!("handler join error: {e}");
+
http::StatusCode::INTERNAL_SERVER_ERROR
pub async fn serve<S, A>(store: S, addr: A, stay_alive: CancellationToken) -> anyhow::Result<()>
···
let store = store.clone();
+
spawn_blocking(|| hello(accept, store))
let store = store.clone();
+
move |accept, query| async {
+
spawn_blocking(|| count_links(accept, query, store))
···
let store = store.clone();
move |accept, query| async {
+
spawn_blocking(|| count_distinct_dids(accept, query, store))
···
let store = store.clone();
move |accept, query| async {
+
spawn_blocking(|| get_backlinks(accept, query, store))
···
let store = store.clone();
+
move |accept, query| async {
+
spawn_blocking(|| get_links(accept, query, store))
···
let store = store.clone();
move |accept, query| async {
+
spawn_blocking(|| get_distinct_dids(accept, query, store))
···
let store = store.clone();
move |accept, query| async {
+
spawn_blocking(|| count_all_links(accept, query, store))
···
let store = store.clone();
move |accept, query| async {
+
spawn_blocking(|| explore_links(accept, query, store))