···55```bash
66RUST_LOG=info,slingshot=trace ulimit -n 4096 && RUST_LOG=info cargo run -- --jetstream us-east-1 --cache-dir ./foyer
77```
88+99+the identity cache uses a lot of files so you probably need to bump ulimit
1010+1111+on macos:
1212+1313+```bash
1414+ulimit -n 4096
1515+```
···2626 handle::{AtprotoHandleResolver, AtprotoHandleResolverConfig, DnsTxtResolver},
2727};
2828use atrium_oauth::DefaultHttpClient; // it's probably not worth bringing all of atrium_oauth for this but
2929-use foyer::{BlockEngineConfig, DeviceBuilder, FileDeviceBuilder, HybridCache, HybridCacheBuilder};
2929+use foyer::{
3030+ BlockEngineConfig, DeviceBuilder, FsDeviceBuilder, HybridCache, HybridCacheBuilder,
3131+ PsyncIoEngineConfig,
3232+};
3033use serde::{Deserialize, Serialize};
3134use time::UtcDateTime;
3235···202205 http_client: http_client.clone(),
203206 });
204207205205- let device = FileDeviceBuilder::new(cache_dir)
208208+ let device = FsDeviceBuilder::new(cache_dir)
206209 .with_capacity(disk_gb * 2_usize.pow(30))
207210 .build()?;
208211 let engine = BlockEngineConfig::new(device).with_block_size(2_usize.pow(20)); // note: this does limit the max cached item size
···212215 .memory(memory_mb * 2_usize.pow(20))
213216 .with_weighter(|k: &IdentityKey, v: &IdentityVal| k.weight() + v.weight())
214217 .storage()
218218+ .with_io_engine_config(PsyncIoEngineConfig::default())
215219 .with_engine_config(engine)
216220 .build()
217221 .await?;
+2-1
slingshot/src/main.rs
···44use slingshot::{
55 Identity, Repo, consume, error::MainTaskError, firehose_cache, healthcheck, serve,
66};
77+use std::net::SocketAddr;
78use std::path::PathBuf;
89910use clap::Parser;
···3031 /// cannot be used with acme -- if you need ipv6 see --acme-ipv6
3132 #[arg(long, env = "SLINGSHOT_BIND")]
3233 #[clap(default_value = "0.0.0.0:8080")]
3333- bind: std::net::SocketAddr,
3434+ bind: SocketAddr,
3435 /// memory cache size in megabytes for records
3536 #[arg(long, env = "SLINGSHOT_RECORD_CACHE_MEMORY_MB")]
3637 #[clap(default_value_t = 64)]
+1-1
slingshot/src/server.rs
···713713 .server(if let Some(ref h) = acme_domain {
714714 format!("https://{h}")
715715 } else {
716716- "http://localhost:3000".to_string()
716716+ format!("http://{bind}") // yeah should probably fix this for reverse-proxy scenarios but it's ok for dev for now
717717 })
718718 .url_prefix("/xrpc")
719719 .contact(