@@ -25,10 +25,10 @@ use timely_logging::LoggerBatch;
25
25
type LogMessage = ( u64 , EventsSetup , LogEvent ) ;
26
26
type CommsMessage = ( u64 , CommsSetup , CommsEvent ) ;
27
27
28
- /// TODO(andreal)
28
+ /// A log writer.
29
29
pub type Logger = Rc < BufferingLogger < EventsSetup , LogEvent > > ;
30
30
31
- /// TODO(andreal)
31
+ /// A log writer that does not log anything.
32
32
pub fn new_inactive_logger ( ) -> Logger {
33
33
BufferingLogger :: < ( ) , ( ) > :: new_inactive ( )
34
34
}
@@ -83,37 +83,22 @@ impl LogManager {
83
83
}
84
84
}
85
85
86
- struct SharedVec {
87
- inner : Arc < Mutex < Vec < u8 > > > ,
86
+ struct SharedEventWriter < T , D , W : Write > {
87
+ inner : Arc < Mutex < EventWriter < T , D , W > > > ,
88
88
}
89
89
90
- impl SharedVec {
91
- pub fn new ( inner : Arc < Mutex < Vec < u8 > > > ) -> Self {
92
- SharedVec {
93
- inner : inner,
90
+ impl < T , D , W : Write > Clone for SharedEventWriter < T , D , W > {
91
+ fn clone ( & self ) -> Self {
92
+ Self {
93
+ inner : self . inner . clone ( ) ,
94
94
}
95
95
}
96
96
}
97
97
98
- impl Write for SharedVec {
99
- fn write ( & mut self , data : & [ u8 ] ) -> Result < usize , :: std:: io:: Error > {
100
- self . inner . lock ( ) . unwrap ( ) . extend_from_slice ( data) ;
101
- Ok ( data. len ( ) )
102
- }
103
-
104
- fn flush ( & mut self ) -> Result < ( ) , :: std:: io:: Error > {
105
- Ok ( ( ) )
106
- }
107
- }
108
-
109
- struct SharedEventWriter < T , D , W : Write > {
110
- inner : Mutex < EventWriter < T , D , W > > ,
111
- }
112
-
113
98
impl < T , D , W : Write > SharedEventWriter < T , D , W > {
114
99
fn new ( w : W ) -> Self {
115
100
SharedEventWriter {
116
- inner : Mutex :: new ( EventWriter :: new ( w) ) ,
101
+ inner : Arc :: new ( Mutex :: new ( EventWriter :: new ( w) ) ) ,
117
102
}
118
103
}
119
104
}
@@ -125,16 +110,18 @@ impl<T: Abomonation+Debug, D: Abomonation+Debug, W: Write> EventPusher<T, D> for
125
110
}
126
111
}
127
112
128
- /// TODO(andreal)
113
+ /// An handle to the LogManager that constructs a filter for the log records.
129
114
pub struct FilteredLogManager < S , E > {
130
115
log_manager : Arc < Mutex < LogManager > > ,
131
116
filter : Arc < Fn ( & S ) ->bool +Send +Sync > ,
132
117
_e : :: std:: marker:: PhantomData < E > ,
133
118
}
134
119
135
120
impl FilteredLogManager < EventsSetup , LogEvent > {
136
- /// TODO(andreal)
137
- pub fn to_tcp_socket ( & mut self ) {
121
+ /// Send the selected timely events to one tcp socket per log sender.
122
+ ///
123
+ /// Destination can be set with the TIMELY_COMM_LOG_TARGET environment variable.
124
+ pub fn to_tcp_sockets ( & mut self ) {
138
125
let target: String = :: std:: env:: var ( "TIMELY_LOG_TARGET" ) . expect ( "no $TIMELY_LOG_TARGET, e.g. 127.0.0.1:34254" ) ;
139
126
140
127
// let writer = SharedEventWriter::new(writer);
@@ -145,24 +132,20 @@ impl FilteredLogManager<EventsSetup, LogEvent> {
145
132
self . log_manager . lock ( ) . unwrap ( ) . add_timely_subscription ( self . filter . clone ( ) , pusher) ;
146
133
}
147
134
148
- // /// TODO(andreal)
149
- // pub fn to_bufs(&mut self) -> Vec<Arc<Mutex<Vec<u8>>>> {
150
- // let mut vecs = Vec::new();
151
-
152
- // for i in 0..4 {
153
- // let buf = Arc::new(Mutex::new(Vec::<u8>::with_capacity(4_000_000_000)));
154
- // let writer = SharedEventWriter::new(SharedVec::new(buf.clone()));
155
- // let pusher: Arc<EventPusher<Product<RootTimestamp, u64>, LogMessage>+Send+Sync> = Arc::new(writer);
156
- // self.log_manager.lock().unwrap().add_timely_subscription(Arc::new(move |s| s.index == i), pusher);
157
- // vecs.push(buf);
158
- // }
159
-
160
- // vecs
161
- // }
135
+ /// Send the selected timely events to a shared tcp socket.
136
+ ///
137
+ /// Destination can be set with the TIMELY_COMM_LOG_TARGET environment variable.
138
+ pub fn to_shared_tcp_socket ( & mut self ) {
139
+ let target: String = :: std:: env:: var ( "TIMELY_LOG_TARGET" ) . expect ( "no $TIMELY_LOG_TARGET, e.g. 127.0.0.1:34254" ) ;
140
+ let pusher = Box :: new ( SharedEventWriter :: new ( TcpStream :: connect ( target. clone ( ) ) . expect ( "failed to connect to logging destination" ) ) ) ;
141
+ self . log_manager . lock ( ) . unwrap ( ) . add_timely_subscription ( self . filter . clone ( ) , Arc :: new ( move || pusher. clone ( ) ) ) ;
142
+ }
162
143
}
163
144
164
145
impl FilteredLogManager < CommsSetup , CommsEvent > {
165
- /// TODO(andreal)
146
+ /// Send the selected communication events to a tcp socket.
147
+ ///
148
+ /// Destination can be set with the TIMELY_COMM_LOG_TARGET environment variable.
166
149
pub fn to_tcp_socket ( & mut self ) {
167
150
let comm_target = :: std:: env:: var ( "TIMELY_COMM_LOG_TARGET" ) . expect ( "no $TIMELY_COMM_LOG_TARGET, e.g. 127.0.0.1:34255" ) ;
168
151
@@ -175,7 +158,7 @@ impl FilteredLogManager<CommsSetup, CommsEvent> {
175
158
}
176
159
177
160
impl LogManager {
178
- /// TODO(andreal)
161
+ /// Constructs a new LogManager.
179
162
pub fn new ( ) -> Arc < Mutex < Self > > {
180
163
Arc :: new ( Mutex :: new ( LogManager {
181
164
timely_logs : HashMap :: new ( ) ,
@@ -186,17 +169,16 @@ impl LogManager {
186
169
}
187
170
}
188
171
189
- /// TODO(andreal)
172
+ /// Functions to construct log filters.
190
173
pub trait LogFilter {
191
- /// TODO(andreal)
174
+ /// Get a `FilteredLogManager` for all workers.
192
175
fn workers ( & mut self ) -> FilteredLogManager < EventsSetup , LogEvent > ;
193
176
194
- /// TODO(andreal)
177
+ /// Get a `FilteredLogManager` for all communication threads.
195
178
fn comms ( & mut self ) -> FilteredLogManager < CommsSetup , CommsEvent > ;
196
179
}
197
180
198
181
impl LogFilter for Arc < Mutex < LogManager > > {
199
- /// TODO(andreal)
200
182
#[ inline] fn workers ( & mut self ) -> FilteredLogManager < EventsSetup , LogEvent > {
201
183
FilteredLogManager {
202
184
log_manager : self . clone ( ) ,
@@ -205,7 +187,6 @@ impl LogFilter for Arc<Mutex<LogManager>> {
205
187
}
206
188
}
207
189
208
- /// TODO(andreal)
209
190
#[ inline] fn comms ( & mut self ) -> FilteredLogManager < CommsSetup , CommsEvent > {
210
191
FilteredLogManager {
211
192
log_manager : self . clone ( ) ,
@@ -215,11 +196,11 @@ impl LogFilter for Arc<Mutex<LogManager>> {
215
196
}
216
197
}
217
198
218
- /// TODO(andreal)
199
+ /// Shared wrapper for log writer constructors.
219
200
pub struct LoggerConfig {
220
- /// TODO(andreal)
201
+ /// Log writer constructors.
221
202
pub timely_logging : Arc < Fn ( EventsSetup ) ->Rc < BufferingLogger < EventsSetup , LogEvent > > +Send +Sync > ,
222
- /// TODO(andreal)
203
+ /// Log writer constructors for communication.
223
204
pub communication_logging : Arc < Fn ( CommsSetup ) ->Rc < BufferingLogger < CommsSetup , CommsEvent > > +Send +Sync > ,
224
205
}
225
206
@@ -249,23 +230,21 @@ impl LoggerConfig {
249
230
event_manager
250
231
}
251
232
252
- /// TODO(andreal)
233
+ /// Makes a new `LoggerConfig` wrapper from a `LogManager`.
253
234
pub fn new ( log_manager : Arc < Mutex < LogManager > > ) -> Self {
254
235
let timely_logging_manager = log_manager. clone ( ) ;
255
236
let communication_logging_manager = log_manager;
256
237
LoggerConfig {
257
238
timely_logging : Arc :: new ( move |events_setup : EventsSetup | {
258
239
let subscription_manager = LoggerConfig :: register_timely_logger (
259
240
& mut timely_logging_manager. lock ( ) . unwrap ( ) , events_setup) ;
260
- //eprintln!("registered timely logger: {:?}", events_setup);
261
241
Rc :: new ( BufferingLogger :: new ( events_setup, Box :: new ( move |data| {
262
242
subscription_manager. lock ( ) . expect ( "cannot lock mutex" ) . publish_batch ( data) ;
263
243
} ) ) )
264
244
} ) ,
265
245
communication_logging : Arc :: new ( move |comms_setup : CommsSetup | {
266
246
let subscription_manager = LoggerConfig :: register_comms_logger (
267
247
& mut communication_logging_manager. lock ( ) . unwrap ( ) , comms_setup) ;
268
- //eprintln!("registered comm logger: {:?}", comms_setup);
269
248
Rc :: new ( BufferingLogger :: new ( comms_setup, Box :: new ( move |data| {
270
249
subscription_manager. lock ( ) . expect ( "cannot lock mutex" ) . publish_batch ( data) ;
271
250
} ) ) )
0 commit comments