Reuse a single Activation per actor: this merges RunningActor with Activation
This commit is contained in:
parent
b7d4bd4b58
commit
f4a4b4d595
|
@ -177,7 +177,7 @@ async fn main() -> ActorResult {
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
if let PingPongMode::Ping(c) = &config.mode {
|
if let PingPongMode::Ping(c) = &config.mode {
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
let turn_count = c.turn_count;
|
let turn_count = c.turn_count;
|
||||||
let action_count = c.action_count;
|
let action_count = c.action_count;
|
||||||
let account = Arc::clone(t.account());
|
let account = Arc::clone(t.account());
|
||||||
|
|
|
@ -28,7 +28,7 @@ async fn main() -> ActorResult {
|
||||||
let (i, o) = TcpStream::connect("127.0.0.1:9001").await?.into_split();
|
let (i, o) = TcpStream::connect("127.0.0.1:9001").await?.into_split();
|
||||||
Actor::top(None, |t| {
|
Actor::top(None, |t| {
|
||||||
relay::connect_stream(t, i, o, false, sturdyref, (), move |_state, t, ds| {
|
relay::connect_stream(t, i, o, false, sturdyref, (), move |_state, t, ds| {
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
let padding = AnyValue::new(&vec![0u8; config.bytes_padding][..]);
|
let padding = AnyValue::new(&vec![0u8; config.bytes_padding][..]);
|
||||||
let action_count = config.action_count;
|
let action_count = config.action_count;
|
||||||
let account = Account::new(None, None);
|
let account = Account::new(None, None);
|
||||||
|
|
|
@ -22,7 +22,7 @@ async fn main() -> ActorResult {
|
||||||
let (i, o) = TcpStream::connect("127.0.0.1:9001").await?.into_split();
|
let (i, o) = TcpStream::connect("127.0.0.1:9001").await?.into_split();
|
||||||
Actor::top(None, |t| {
|
Actor::top(None, |t| {
|
||||||
relay::connect_stream(t, i, o, false, sturdyref, (), move |_state, t, ds| {
|
relay::connect_stream(t, i, o, false, sturdyref, (), move |_state, t, ds| {
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
let account = Account::new(None, None);
|
let account = Account::new(None, None);
|
||||||
t.linked_task(Some(AnyValue::symbol("sender")), async move {
|
t.linked_task(Some(AnyValue::symbol("sender")), async move {
|
||||||
let presence = rec![AnyValue::symbol("Present"), AnyValue::new(std::process::id())];
|
let presence = rec![AnyValue::symbol("Present"), AnyValue::new(std::process::id())];
|
||||||
|
|
|
@ -297,7 +297,7 @@ impl Entity<noise::Packet> for ResponderState {
|
||||||
let transport = ResponderTransport { relay_input, c_recv };
|
let transport = ResponderTransport { relay_input, c_recv };
|
||||||
let initiator_session = Arc::clone(&details.initiator_session);
|
let initiator_session = Arc::clone(&details.initiator_session);
|
||||||
let relay_output_name = Some(AnyValue::symbol("relay_output"));
|
let relay_output_name = Some(AnyValue::symbol("relay_output"));
|
||||||
let transport_facet = t.facet.clone();
|
let transport_facet = t.facet_ref();
|
||||||
t.linked_task(relay_output_name.clone(), async move {
|
t.linked_task(relay_output_name.clone(), async move {
|
||||||
let account = Account::new(relay_output_name, trace_collector);
|
let account = Account::new(relay_output_name, trace_collector);
|
||||||
let cause = TurnCause::external("relay_output");
|
let cause = TurnCause::external("relay_output");
|
||||||
|
|
|
@ -35,7 +35,7 @@ pub fn run_io_relay(
|
||||||
initial_ref: Arc<Cap>,
|
initial_ref: Arc<Cap>,
|
||||||
) -> ActorResult {
|
) -> ActorResult {
|
||||||
let exit_listener = t.create(ExitListener);
|
let exit_listener = t.create(ExitListener);
|
||||||
t.state.add_exit_hook(&exit_listener);
|
t.add_exit_hook(&exit_listener);
|
||||||
relay::TunnelRelay::run(t, i, o, Some(initial_ref), None, false);
|
relay::TunnelRelay::run(t, i, o, Some(initial_ref), None, false);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,7 +184,7 @@ fn run(
|
||||||
let mut watcher = watcher(tx, Duration::from_millis(100)).map_err(convert_notify_error)?;
|
let mut watcher = watcher(tx, Duration::from_millis(100)).map_err(convert_notify_error)?;
|
||||||
watcher.watch(&env.path, RecursiveMode::Recursive).map_err(convert_notify_error)?;
|
watcher.watch(&env.path, RecursiveMode::Recursive).map_err(convert_notify_error)?;
|
||||||
|
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
let trace_collector = t.trace_collector();
|
let trace_collector = t.trace_collector();
|
||||||
let span = tracing::Span::current();
|
let span = tracing::Span::current();
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
|
|
|
@ -41,7 +41,7 @@ fn supervise_daemon(
|
||||||
lifecycle::on_service_restart(t, &config_ds, &spec, enclose!(
|
lifecycle::on_service_restart(t, &config_ds, &spec, enclose!(
|
||||||
(config_ds, root_ds, spec) move |t| {
|
(config_ds, root_ds, spec) move |t| {
|
||||||
tracing::info!(id = ?spec.id, "Terminating to restart");
|
tracing::info!(id = ?spec.id, "Terminating to restart");
|
||||||
t.stop_facet_and_continue(t.facet.facet_id, Some(
|
t.stop_facet_and_continue(t.facet_id(), Some(
|
||||||
enclose!((config_ds, root_ds, spec) move |t: &mut Activation| {
|
enclose!((config_ds, root_ds, spec) move |t: &mut Activation| {
|
||||||
supervise_daemon(t, config_ds, root_ds, spec)
|
supervise_daemon(t, config_ds, root_ds, spec)
|
||||||
})))
|
})))
|
||||||
|
@ -176,7 +176,7 @@ impl DaemonInstance {
|
||||||
fn handle_exit(self, t: &mut Activation, error_message: Option<String>) -> ActorResult {
|
fn handle_exit(self, t: &mut Activation, error_message: Option<String>) -> ActorResult {
|
||||||
let delay =
|
let delay =
|
||||||
std::time::Duration::from_millis(if let None = error_message { 200 } else { 1000 });
|
std::time::Duration::from_millis(if let None = error_message { 200 } else { 1000 });
|
||||||
t.stop_facet_and_continue(t.facet.facet_id, Some(move |t: &mut Activation| {
|
t.stop_facet_and_continue(t.facet_id(), Some(move |t: &mut Activation| {
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum NextStep {
|
enum NextStep {
|
||||||
SleepAndRestart,
|
SleepAndRestart,
|
||||||
|
@ -230,7 +230,7 @@ impl DaemonInstance {
|
||||||
kind: &str
|
kind: &str
|
||||||
) -> ActorResult {
|
) -> ActorResult {
|
||||||
t.facet(|t| {
|
t.facet(|t| {
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
let log_ds = self.log_ds.clone();
|
let log_ds = self.log_ds.clone();
|
||||||
let service = self.service.clone();
|
let service = self.service.clone();
|
||||||
let kind = AnyValue::symbol(kind);
|
let kind = AnyValue::symbol(kind);
|
||||||
|
@ -290,7 +290,7 @@ impl DaemonInstance {
|
||||||
let pid = child.id();
|
let pid = child.id();
|
||||||
tracing::debug!(?pid, cmd = ?self.cmd, "started");
|
tracing::debug!(?pid, cmd = ?self.cmd, "started");
|
||||||
|
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
|
|
||||||
if let Some(r) = child.stderr.take() {
|
if let Some(r) = child.stderr.take() {
|
||||||
self.log(t, pid, r, "stderr")?;
|
self.log(t, pid, r, "stderr")?;
|
||||||
|
@ -401,7 +401,7 @@ fn run(
|
||||||
Ok(config) => {
|
Ok(config) => {
|
||||||
tracing::info!(?config);
|
tracing::info!(?config);
|
||||||
let config = config.elaborate();
|
let config = config.elaborate();
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
t.linked_task(Some(AnyValue::symbol("subprocess")), async move {
|
t.linked_task(Some(AnyValue::symbol("subprocess")), async move {
|
||||||
let mut cmd = config.process.build_command().ok_or("Cannot start daemon process")?;
|
let mut cmd = config.process.build_command().ok_or("Cannot start daemon process")?;
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ fn run(t: &mut Activation, ds: Arc<Cap>, spec: TcpRelayListener) -> ActorResult
|
||||||
};
|
};
|
||||||
let host = addr.host.clone();
|
let host = addr.host.clone();
|
||||||
let port = u16::try_from(&addr.port).map_err(|_| "Invalid TCP port number")?;
|
let port = u16::try_from(&addr.port).map_err(|_| "Invalid TCP port number")?;
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
let trace_collector = t.trace_collector();
|
let trace_collector = t.trace_collector();
|
||||||
t.linked_task(Some(AnyValue::symbol("listener")), async move {
|
t.linked_task(Some(AnyValue::symbol("listener")), async move {
|
||||||
let listen_addr = format!("{}:{}", host, port);
|
let listen_addr = format!("{}:{}", host, port);
|
||||||
|
@ -85,7 +85,7 @@ fn run(t: &mut Activation, ds: Arc<Cap>, spec: TcpRelayListener) -> ActorResult
|
||||||
&account, cause, enclose!((trace_collector, httpd) move |t| {
|
&account, cause, enclose!((trace_collector, httpd) move |t| {
|
||||||
t.spawn(name, move |t| {
|
t.spawn(name, move |t| {
|
||||||
Ok(t.linked_task(None, {
|
Ok(t.linked_task(None, {
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
async move {
|
async move {
|
||||||
detect_protocol(trace_collector,
|
detect_protocol(trace_collector,
|
||||||
facet,
|
facet,
|
||||||
|
|
|
@ -39,7 +39,7 @@ pub fn on_demand(t: &mut Activation, ds: Arc<Cap>) {
|
||||||
fn run(t: &mut Activation, ds: Arc<Cap>, spec: UnixRelayListener) -> ActorResult {
|
fn run(t: &mut Activation, ds: Arc<Cap>, spec: UnixRelayListener) -> ActorResult {
|
||||||
lifecycle::terminate_on_service_restart(t, &ds, &spec);
|
lifecycle::terminate_on_service_restart(t, &ds, &spec);
|
||||||
let path_str = spec.addr.path.clone();
|
let path_str = spec.addr.path.clone();
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
let trace_collector = t.trace_collector();
|
let trace_collector = t.trace_collector();
|
||||||
t.linked_task(Some(AnyValue::symbol("listener")), async move {
|
t.linked_task(Some(AnyValue::symbol("listener")), async move {
|
||||||
let listener = bind_unix_listener(&PathBuf::from(path_str)).await?;
|
let listener = bind_unix_listener(&PathBuf::from(path_str)).await?;
|
||||||
|
@ -71,7 +71,7 @@ fn run(t: &mut Activation, ds: Arc<Cap>, spec: UnixRelayListener) -> ActorResult
|
||||||
&account, cause, enclose!((trace_collector) move |t| {
|
&account, cause, enclose!((trace_collector) move |t| {
|
||||||
t.spawn(name, |t| {
|
t.spawn(name, |t| {
|
||||||
Ok(t.linked_task(None, {
|
Ok(t.linked_task(None, {
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet_ref();
|
||||||
async move {
|
async move {
|
||||||
tracing::info!(protocol = %"unix");
|
tracing::info!(protocol = %"unix");
|
||||||
let (i, o) = stream.into_split();
|
let (i, o) = stream.into_split();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -175,7 +175,7 @@ where
|
||||||
t.on_stop_notify(&r);
|
t.on_stop_notify(&r);
|
||||||
}
|
}
|
||||||
if should_register_exit_hook {
|
if should_register_exit_hook {
|
||||||
t.state.add_exit_hook(&r);
|
t.add_exit_hook(&r);
|
||||||
}
|
}
|
||||||
r
|
r
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,8 +112,8 @@ struct TunnelRefEntity {
|
||||||
relay_ref: TunnelRelayRef,
|
relay_ref: TunnelRelayRef,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ActivatedMembranes<'a, 'activation, 'm> {
|
struct ActivatedMembranes<'a, 'm> {
|
||||||
turn: &'a mut Activation<'activation>,
|
turn: &'a mut Activation,
|
||||||
tr_ref: &'m TunnelRelayRef,
|
tr_ref: &'m TunnelRelayRef,
|
||||||
membranes: &'m mut Membranes,
|
membranes: &'m mut Membranes,
|
||||||
}
|
}
|
||||||
|
@ -234,7 +234,7 @@ impl TunnelRelay {
|
||||||
t.linked_task(Some(AnyValue::symbol("writer")),
|
t.linked_task(Some(AnyValue::symbol("writer")),
|
||||||
output_loop(o, output_rx));
|
output_loop(o, output_rx));
|
||||||
t.linked_task(Some(AnyValue::symbol("reader")),
|
t.linked_task(Some(AnyValue::symbol("reader")),
|
||||||
input_loop(t.trace_collector(), t.facet.clone(), i, tr_ref));
|
input_loop(t.trace_collector(), t.facet_ref(), i, tr_ref));
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,7 +269,7 @@ impl TunnelRelay {
|
||||||
|io| Arc::clone(&tr.membranes.import_oid(t, &tr_ref, io).inc_ref().obj));
|
|io| Arc::clone(&tr.membranes.import_oid(t, &tr_ref, io).inc_ref().obj));
|
||||||
dump_membranes!(tr.membranes);
|
dump_membranes!(tr.membranes);
|
||||||
*tr_ref.lock() = Some(tr);
|
*tr_ref.lock() = Some(tr);
|
||||||
t.state.add_exit_hook(&self_entity);
|
t.add_exit_hook(&self_entity);
|
||||||
(result, tr_ref, output_rx)
|
(result, tr_ref, output_rx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -604,7 +604,7 @@ impl Membranes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'activation, 'm> DomainDecode<Arc<Cap>> for ActivatedMembranes<'a, 'activation, 'm> {
|
impl<'a, 'm> DomainDecode<Arc<Cap>> for ActivatedMembranes<'a, 'm> {
|
||||||
fn decode_embedded<'de, 'src, S: BinarySource<'de>>(
|
fn decode_embedded<'de, 'src, S: BinarySource<'de>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
src: &'src mut S,
|
src: &'src mut S,
|
||||||
|
|
|
@ -13,6 +13,7 @@ use preserves_schema::Codec;
|
||||||
use super::actor::{self, AnyValue, Ref, Cap};
|
use super::actor::{self, AnyValue, Ref, Cap};
|
||||||
use super::language;
|
use super::language;
|
||||||
|
|
||||||
|
use std::num::NonZeroU64;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
|
||||||
|
@ -27,8 +28,8 @@ pub struct TraceCollector {
|
||||||
impl<M> From<&Ref<M>> for Target {
|
impl<M> From<&Ref<M>> for Target {
|
||||||
fn from(v: &Ref<M>) -> Target {
|
fn from(v: &Ref<M>) -> Target {
|
||||||
Target {
|
Target {
|
||||||
actor: ActorId(AnyValue::new(v.mailbox.actor_id)),
|
actor: v.mailbox.actor_id.into(),
|
||||||
facet: FacetId(AnyValue::new(u64::from(v.facet_id))),
|
facet: v.facet_id.into(),
|
||||||
oid: Oid(AnyValue::new(v.oid())),
|
oid: Oid(AnyValue::new(v.oid())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,7 +52,7 @@ impl TraceCollector {
|
||||||
let _ = self.tx.send(TraceEntry {
|
let _ = self.tx.send(TraceEntry {
|
||||||
timestamp: SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)
|
timestamp: SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)
|
||||||
.expect("Time after Unix epoch").as_secs_f64().into(),
|
.expect("Time after Unix epoch").as_secs_f64().into(),
|
||||||
actor: ActorId(AnyValue::new(id)),
|
actor: id.into(),
|
||||||
item: a,
|
item: a,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -159,3 +160,15 @@ impl From<actor::Name> for Name {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<NonZeroU64> for ActorId {
|
||||||
|
fn from(v: NonZeroU64) -> Self {
|
||||||
|
ActorId(AnyValue::new(u64::from(v)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<NonZeroU64> for FacetId {
|
||||||
|
fn from(v: NonZeroU64) -> Self {
|
||||||
|
FacetId(AnyValue::new(u64::from(v)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue