1use columnar::Columnar;
4use serde::{Deserialize, Serialize};
5
6pub type DifferentialEventBuilder = timely::container::CapacityContainerBuilder<Vec<(std::time::Duration, DifferentialEvent)>>;
8
9pub type Logger = ::timely::logging_core::TypedLogger<DifferentialEventBuilder, DifferentialEvent>;
11
12pub fn enable<W>(worker: &mut timely::worker::Worker, writer: W) -> Option<Box<dyn std::any::Any+'static>>
14where
15 W: std::io::Write + 'static,
16{
17 worker.log_register().and_then(|mut log_register| {
18 let writer = ::timely::dataflow::operators::capture::EventWriter::new(writer);
19 let mut logger = ::timely::logging::BatchLogger::new(writer);
20 log_register.insert::<DifferentialEventBuilder,_>("differential/arrange", move |time, data| logger.publish_batch(time, data))
21 })
22}
23
24#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize, Columnar)]
31pub enum DifferentialEvent {
32 Batch(BatchEvent),
34 Merge(MergeEvent),
36 Drop(DropEvent),
38 MergeShortfall(MergeShortfall),
40 TraceShare(TraceShare),
42 Batcher(BatcherEvent),
44}
45
46#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize, Columnar)]
50pub struct BatchEvent {
51 pub operator: usize,
53 pub length: usize,
55}
56
57impl From<BatchEvent> for DifferentialEvent { fn from(e: BatchEvent) -> Self { DifferentialEvent::Batch(e) } }
58
59
60#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize, Columnar)]
62pub struct BatcherEvent {
63 pub operator: usize,
65 pub records_diff: isize,
67 pub size_diff: isize,
69 pub capacity_diff: isize,
71 pub allocations_diff: isize,
73}
74
75impl From<BatcherEvent> for DifferentialEvent { fn from(e: BatcherEvent) -> Self { DifferentialEvent::Batcher(e) } }
76
77#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize, Columnar)]
81pub struct DropEvent {
82 pub operator: usize,
84 pub length: usize,
86}
87
88impl From<DropEvent> for DifferentialEvent { fn from(e: DropEvent) -> Self { DifferentialEvent::Drop(e) } }
89
90#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize, Columnar)]
94pub struct MergeEvent {
95 pub operator: usize,
97 pub scale: usize,
99 pub length1: usize,
101 pub length2: usize,
103 pub complete: Option<usize>,
105}
106
107impl From<MergeEvent> for DifferentialEvent { fn from(e: MergeEvent) -> Self { DifferentialEvent::Merge(e) } }
108
109#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize, Columnar)]
111pub struct MergeShortfall {
112 pub operator: usize,
114 pub scale: usize,
116 pub shortfall: usize,
118}
119
120impl From<MergeShortfall> for DifferentialEvent { fn from(e: MergeShortfall) -> Self { DifferentialEvent::MergeShortfall(e) } }
121
122#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Serialize, Deserialize, Columnar)]
124pub struct TraceShare {
125 pub operator: usize,
127 pub diff: isize,
129}
130
131impl From<TraceShare> for DifferentialEvent { fn from(e: TraceShare) -> Self { DifferentialEvent::TraceShare(e) } }