@@ -195,7 +195,7 @@ impl<T: Timestamp> Builder<T> {
195195 /// default summaries (a serious liveness issue).
196196 ///
197197 /// The optional logger information is baked into the resulting tracker.
198- pub fn build ( self , logger : Option < logging:: TrackerLogger > ) -> ( Tracker < T > , Vec < Vec < Antichain < T :: Summary > > > ) {
198+ pub fn build ( self , logger : Option < logging:: TrackerLogger < T > > ) -> ( Tracker < T > , Vec < Vec < Antichain < T :: Summary > > > ) {
199199
200200 if !self . is_acyclic ( ) {
201201 println ! ( "Cycle detected without timestamp increment" ) ;
@@ -404,7 +404,7 @@ pub struct Tracker<T:Timestamp> {
404404 total_counts : i64 ,
405405
406406 /// Optionally, a unique logging identifier and logging for tracking events.
407- logger : Option < logging:: TrackerLogger > ,
407+ logger : Option < logging:: TrackerLogger < T > > ,
408408}
409409
410410/// Target and source information for each operator.
@@ -503,7 +503,7 @@ impl<T:Timestamp> Tracker<T> {
503503 /// output port.
504504 ///
505505 /// If the optional logger is provided, it will be used to log various tracker events.
506- pub fn allocate_from ( builder : Builder < T > , logger : Option < logging:: TrackerLogger > ) -> ( Self , Vec < Vec < Antichain < T :: Summary > > > ) {
506+ pub fn allocate_from ( builder : Builder < T > , logger : Option < logging:: TrackerLogger < T > > ) -> ( Self , Vec < Vec < Antichain < T :: Summary > > > ) {
507507
508508 // Allocate buffer space for each input and input port.
509509 let mut per_operator =
@@ -577,7 +577,7 @@ impl<T:Timestamp> Tracker<T> {
577577 . collect :: < Vec < _ > > ( ) ;
578578
579579 if !target_changes. is_empty ( ) {
580- logger. log_target_updates ( Box :: new ( target_changes) ) ;
580+ logger. log_target_updates ( target_changes) ;
581581 }
582582
583583 let source_changes =
@@ -587,7 +587,7 @@ impl<T:Timestamp> Tracker<T> {
587587 . collect :: < Vec < _ > > ( ) ;
588588
589589 if !source_changes. is_empty ( ) {
590- logger. log_source_updates ( Box :: new ( source_changes) ) ;
590+ logger. log_source_updates ( source_changes) ;
591591 }
592592 }
593593
@@ -837,25 +837,24 @@ pub mod logging {
837837 use timely_container:: CapacityContainerBuilder ;
838838 use timely_logging:: TypedLogger ;
839839 use crate :: logging_core:: Logger ;
840- use crate :: logging:: ProgressEventTimestampVec ;
841840
842841 /// A container builder for tracker events.
843- pub type TrackerEventBuilder = CapacityContainerBuilder < Vec < ( Duration , TrackerEvent ) > > ;
842+ pub type TrackerEventBuilder < T > = CapacityContainerBuilder < Vec < ( Duration , TrackerEvent < T > ) > > ;
844843
845844 /// A logger with additional identifying information about the tracker.
846- pub struct TrackerLogger {
845+ pub struct TrackerLogger < T : Clone + ' static > {
847846 path : Rc < [ usize ] > ,
848- logger : TypedLogger < TrackerEventBuilder , TrackerEvent > ,
847+ logger : TypedLogger < TrackerEventBuilder < T > , TrackerEvent < T > > ,
849848 }
850849
851- impl TrackerLogger {
850+ impl < T : Clone + ' static > TrackerLogger < T > {
852851 /// Create a new tracker logger from its fields.
853- pub fn new ( path : Rc < [ usize ] > , logger : Logger < TrackerEventBuilder > ) -> Self {
852+ pub fn new ( path : Rc < [ usize ] > , logger : Logger < TrackerEventBuilder < T > > ) -> Self {
854853 Self { path, logger : logger. into ( ) }
855854 }
856855
857856 /// Log source update events with additional identifying information.
858- pub fn log_source_updates ( & mut self , updates : Box < dyn ProgressEventTimestampVec > ) {
857+ pub fn log_source_updates ( & mut self , updates : Vec < ( usize , usize , T , i64 ) > ) {
859858 self . logger . log ( {
860859 SourceUpdate {
861860 tracker_id : self . path . to_vec ( ) ,
@@ -864,7 +863,7 @@ pub mod logging {
864863 } )
865864 }
866865 /// Log target update events with additional identifying information.
867- pub fn log_target_updates ( & mut self , updates : Box < dyn ProgressEventTimestampVec > ) {
866+ pub fn log_target_updates ( & mut self , updates : Vec < ( usize , usize , T , i64 ) > ) {
868867 self . logger . log ( {
869868 TargetUpdate {
870869 tracker_id : self . path . to_vec ( ) ,
@@ -876,55 +875,37 @@ pub mod logging {
876875
877876 /// Events that the tracker may record.
878877 #[ derive( Debug , Clone ) ]
879- pub enum TrackerEvent {
878+ pub enum TrackerEvent < T > {
880879 /// Updates made at a source of data.
881- SourceUpdate ( SourceUpdate ) ,
880+ SourceUpdate ( SourceUpdate < T > ) ,
882881 /// Updates made at a target of data.
883- TargetUpdate ( TargetUpdate ) ,
882+ TargetUpdate ( TargetUpdate < T > ) ,
884883 }
885884
886885 /// An update made at a source of data.
887- #[ derive( Debug ) ]
888- pub struct SourceUpdate {
886+ #[ derive( Debug , Clone ) ]
887+ pub struct SourceUpdate < T > {
889888 /// An identifier for the tracker.
890889 pub tracker_id : Vec < usize > ,
891890 /// Updates themselves, as `(node, port, time, diff)`.
892- pub updates : Box < dyn ProgressEventTimestampVec > ,
893- }
894-
895- impl Clone for SourceUpdate {
896- fn clone ( & self ) -> Self {
897- Self {
898- tracker_id : self . tracker_id . clone ( ) ,
899- updates : self . updates . box_clone ( ) ,
900- }
901- }
891+ pub updates : Vec < ( usize , usize , T , i64 ) > ,
902892 }
903893
904894 /// An update made at a target of data.
905- #[ derive( Debug ) ]
906- pub struct TargetUpdate {
895+ #[ derive( Debug , Clone ) ]
896+ pub struct TargetUpdate < T > {
907897 /// An identifier for the tracker.
908898 pub tracker_id : Vec < usize > ,
909899 /// Updates themselves, as `(node, port, time, diff)`.
910- pub updates : Box < dyn ProgressEventTimestampVec > ,
911- }
912-
913- impl Clone for TargetUpdate {
914- fn clone ( & self ) -> Self {
915- Self {
916- tracker_id : self . tracker_id . clone ( ) ,
917- updates : self . updates . box_clone ( ) ,
918- }
919- }
900+ pub updates : Vec < ( usize , usize , T , i64 ) > ,
920901 }
921902
922- impl From < SourceUpdate > for TrackerEvent {
923- fn from ( v : SourceUpdate ) -> TrackerEvent { TrackerEvent :: SourceUpdate ( v) }
903+ impl < T > From < SourceUpdate < T > > for TrackerEvent < T > {
904+ fn from ( v : SourceUpdate < T > ) -> TrackerEvent < T > { TrackerEvent :: SourceUpdate ( v) }
924905 }
925906
926- impl From < TargetUpdate > for TrackerEvent {
927- fn from ( v : TargetUpdate ) -> TrackerEvent { TrackerEvent :: TargetUpdate ( v) }
907+ impl < T > From < TargetUpdate < T > > for TrackerEvent < T > {
908+ fn from ( v : TargetUpdate < T > ) -> TrackerEvent < T > { TrackerEvent :: TargetUpdate ( v) }
928909 }
929910}
930911
@@ -953,7 +934,7 @@ impl<T: Timestamp> Drop for Tracker<T> {
953934 } )
954935 . collect :: < Vec < _ > > ( ) ;
955936 if !target_changes. is_empty ( ) {
956- logger. log_target_updates ( Box :: new ( target_changes) ) ;
937+ logger. log_target_updates ( target_changes) ;
957938 }
958939
959940 let source_changes = per_operator. sources
@@ -966,7 +947,7 @@ impl<T: Timestamp> Drop for Tracker<T> {
966947 } )
967948 . collect :: < Vec < _ > > ( ) ;
968949 if !source_changes. is_empty ( ) {
969- logger. log_source_updates ( Box :: new ( source_changes) ) ;
950+ logger. log_source_updates ( source_changes) ;
970951 }
971952 }
972953 }
0 commit comments