Skip to content

Commit e03ee00

Browse files
committed
Improve Component trait usage and ergonomics
1 parent 05214ee commit e03ee00

File tree

4 files changed

+317
-268
lines changed

4 files changed

+317
-268
lines changed

crates/common/src/actor/data_actor.rs

Lines changed: 29 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ pub trait DataActor:
581581
fn handle_time_event(&mut self, event: &TimeEvent) {
582582
log_received(&event);
583583

584-
if let Err(e) = self.on_time_event(event) {
584+
if let Err(e) = DataActor::on_time_event(self, event) {
585585
log_error(&e);
586586
}
587587
}
@@ -590,7 +590,7 @@ pub trait DataActor:
590590
fn handle_event(&mut self, event: &dyn Any) {
591591
log_received(&event);
592592

593-
if let Err(e) = self.on_event(event) {
593+
if let Err(e) = DataActor::on_event(self, event) {
594594
log_error(&e);
595595
}
596596
}
@@ -1370,69 +1370,48 @@ where
13701370
self.state
13711371
}
13721372

1373+
fn transition_state(&mut self, trigger: ComponentTrigger) -> anyhow::Result<()> {
1374+
self.state = self.state.transition(&trigger)?;
1375+
log::info!("{}", self.state);
1376+
Ok(())
1377+
}
1378+
13731379
fn register(
13741380
&mut self,
13751381
trader_id: TraderId,
13761382
clock: Rc<RefCell<dyn Clock>>,
13771383
cache: Rc<RefCell<Cache>>,
13781384
) -> anyhow::Result<()> {
1379-
DataActorCore::register(self, trader_id, clock, cache)
1385+
DataActorCore::register(self, trader_id, clock, cache)?;
1386+
self.initialize()
13801387
}
13811388

1382-
fn start(&mut self) -> anyhow::Result<()> {
1383-
self.transition_state(ComponentTrigger::Start)?; // -> Starting
1384-
1385-
if let Err(e) = DataActor::on_start(self) {
1386-
log_error(&e);
1387-
return Err(e); // Halt state transition
1388-
}
1389-
1390-
self.transition_state(ComponentTrigger::StartCompleted)?;
1391-
1392-
Ok(())
1389+
fn on_start(&mut self) -> anyhow::Result<()> {
1390+
DataActor::on_start(self)
13931391
}
13941392

1395-
fn stop(&mut self) -> anyhow::Result<()> {
1396-
self.transition_state(ComponentTrigger::Stop)?; // -> Stopping
1397-
1398-
if let Err(e) = DataActor::on_stop(self) {
1399-
log_error(&e);
1400-
return Err(e); // Halt state transition
1401-
}
1402-
1403-
self.transition_state(ComponentTrigger::StopCompleted)?;
1404-
1405-
Ok(())
1393+
fn on_stop(&mut self) -> anyhow::Result<()> {
1394+
DataActor::on_stop(self)
14061395
}
14071396

1408-
fn reset(&mut self) -> anyhow::Result<()> {
1409-
self.transition_state(ComponentTrigger::Reset)?; // -> Resetting
1410-
1411-
if let Err(e) = DataActor::on_reset(self) {
1412-
log_error(&e);
1413-
return Err(e); // Halt state transition
1414-
}
1415-
1416-
self.transition_state(ComponentTrigger::ResetCompleted)?;
1417-
1418-
Ok(())
1397+
fn on_resume(&mut self) -> anyhow::Result<()> {
1398+
DataActor::on_resume(self)
14191399
}
14201400

1421-
fn dispose(&mut self) -> anyhow::Result<()> {
1422-
self.transition_state(ComponentTrigger::Dispose)?; // -> Disposing
1423-
1424-
if let Err(e) = DataActor::on_dispose(self) {
1425-
log_error(&e);
1426-
return Err(e); // Halt state transition
1427-
}
1401+
fn on_degrade(&mut self) -> anyhow::Result<()> {
1402+
DataActor::on_degrade(self)
1403+
}
14281404

1429-
self.transition_state(ComponentTrigger::DisposeCompleted)?;
1405+
fn on_fault(&mut self) -> anyhow::Result<()> {
1406+
DataActor::on_fault(self)
1407+
}
14301408

1431-
Ok(())
1409+
fn on_reset(&mut self) -> anyhow::Result<()> {
1410+
DataActor::on_reset(self)
14321411
}
14331412

1434-
fn handle_event(&mut self, event: TimeEvent) {
1435-
DataActor::handle_time_event(self, &event)
1413+
fn on_dispose(&mut self) -> anyhow::Result<()> {
1414+
DataActor::on_dispose(self)
14361415
}
14371416
}
14381417

@@ -1488,28 +1467,6 @@ impl DataActorCore {
14881467
}
14891468
}
14901469

1491-
fn default_actor_id(config: &DataActorConfig) -> ActorId {
1492-
let memory_address = std::ptr::from_ref(config) as *const _ as usize;
1493-
ActorId::from(format!("{}-{memory_address}", stringify!(DataActor)))
1494-
}
1495-
1496-
fn transition_state(&mut self, trigger: ComponentTrigger) -> anyhow::Result<()> {
1497-
self.state = self.state.transition(&trigger)?;
1498-
log::info!("{}", self.state);
1499-
Ok(())
1500-
}
1501-
1502-
// TODO: TBD initialization flow (potentially remove initialize())
1503-
1504-
/// Initializes the actor.
1505-
///
1506-
/// # Errors
1507-
///
1508-
/// Returns an error if the initialization state transition fails.
1509-
pub fn initialize(&mut self) -> anyhow::Result<()> {
1510-
self.transition_state(ComponentTrigger::Initialize)
1511-
}
1512-
15131470
/// Returns the trader ID this actor is registered to.
15141471
pub fn trader_id(&self) -> Option<TraderId> {
15151472
self.trader_id
@@ -1519,42 +1476,9 @@ impl DataActorCore {
15191476
self.actor_id
15201477
}
15211478

1522-
// TODO: Extract this common state logic and handling out to some component module
1523-
pub fn state(&self) -> ComponentState {
1524-
self.state
1525-
}
1526-
1527-
/// Resume the actor.
1528-
///
1529-
/// # Errors
1530-
///
1531-
/// Returns an error if the resume state transition fails.
1532-
pub fn resume(&mut self) -> anyhow::Result<()> {
1533-
self.transition_state(ComponentTrigger::Resume)?; // -> Resuming
1534-
self.transition_state(ComponentTrigger::ResumeCompleted)?; // -> Running
1535-
Ok(())
1536-
}
1537-
1538-
/// Degrade the actor.
1539-
///
1540-
/// # Errors
1541-
///
1542-
/// Returns an error if the degrade state transition fails.
1543-
pub fn degrade(&mut self) -> anyhow::Result<()> {
1544-
self.transition_state(ComponentTrigger::Degrade)?; // -> Degrading
1545-
self.transition_state(ComponentTrigger::DegradeCompleted)?; // -> Degraded
1546-
Ok(())
1547-
}
1548-
1549-
/// Fault the actor.
1550-
///
1551-
/// # Errors
1552-
///
1553-
/// Returns an error if the fault state transition fails.
1554-
pub fn fault(&mut self) -> anyhow::Result<()> {
1555-
self.transition_state(ComponentTrigger::Fault)?; // -> Faulting
1556-
self.transition_state(ComponentTrigger::FaultCompleted)?; // -> Faulted
1557-
Ok(())
1479+
fn default_actor_id(config: &DataActorConfig) -> ActorId {
1480+
let memory_address = std::ptr::from_ref(config) as *const _ as usize;
1481+
ActorId::from(format!("{}-{memory_address}", stringify!(DataActor)))
15581482
}
15591483

15601484
pub fn timestamp_ns(&self) -> UnixNanos {
@@ -1601,8 +1525,6 @@ impl DataActorCore {
16011525
self.clock = Some(clock);
16021526
self.cache = Some(cache);
16031527

1604-
self.transition_state(ComponentTrigger::Initialize)?;
1605-
16061528
log::info!("Registered {} with trader {trader_id}", self.actor_id);
16071529
Ok(())
16081530
}

0 commit comments

Comments
 (0)