Skip to content

Commit daae392

Browse files
authored
Remove time from MergeBatcher (#550)
We can use the time declared by the Merger direction, which always needs to equal the time on MergeBatcher's Batcher implementation. Signed-off-by: Moritz Hoffmann <[email protected]>
1 parent c90b92e commit daae392

File tree

3 files changed

+27
-27
lines changed

3 files changed

+27
-27
lines changed

src/trace/implementations/merge_batcher.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ use crate::trace::{Batcher, Builder};
1616
use crate::Data;
1717

1818
/// Creates batches from unordered tuples.
19-
pub struct MergeBatcher<Input, C, M, T>
19+
pub struct MergeBatcher<Input, C, M>
2020
where
21-
C: ContainerBuilder<Container=M::Chunk> + Default,
22-
M: Merger<Time = T>,
21+
C: ContainerBuilder<Container=M::Chunk>,
22+
M: Merger,
2323
{
2424
/// each power-of-two length list of allocations.
2525
/// Do not push/pop directly but use the corresponding functions
@@ -36,20 +36,20 @@ where
3636
/// Timely operator ID.
3737
operator_id: usize,
3838
/// Current lower frontier, we sealed up to here.
39-
lower: Antichain<T>,
39+
lower: Antichain<M::Time>,
4040
/// The lower-bound frontier of the data, after the last call to seal.
41-
frontier: Antichain<T>,
41+
frontier: Antichain<M::Time>,
4242
_marker: PhantomData<Input>,
4343
}
4444

45-
impl<Input, C, M, T> Batcher for MergeBatcher<Input, C, M, T>
45+
impl<Input, C, M> Batcher for MergeBatcher<Input, C, M>
4646
where
4747
C: ContainerBuilder<Container=M::Chunk> + Default + for<'a> PushInto<&'a mut Input>,
48-
M: Merger<Time = T>,
49-
T: Timestamp,
48+
M: Merger,
49+
M::Time: Timestamp,
5050
{
5151
type Input = Input;
52-
type Time = T;
52+
type Time = M::Time;
5353
type Output = M::Chunk;
5454

5555
fn new(logger: Option<Logger<DifferentialEvent, WorkerIdentifier>>, operator_id: usize) -> Self {
@@ -61,7 +61,7 @@ where
6161
chains: Vec::new(),
6262
stash: Vec::new(),
6363
frontier: Antichain::new(),
64-
lower: Antichain::from_elem(T::minimum()),
64+
lower: Antichain::from_elem(M::Time::minimum()),
6565
_marker: PhantomData,
6666
}
6767
}
@@ -80,7 +80,7 @@ where
8080
// in `upper`. All updates must have time greater or equal to the previously used `upper`,
8181
// which we call `lower`, by assumption that after sealing a batcher we receive no more
8282
// updates with times not greater or equal to `upper`.
83-
fn seal<B: Builder<Input = Self::Output, Time = Self::Time>>(&mut self, upper: Antichain<T>) -> B::Output {
83+
fn seal<B: Builder<Input = Self::Output, Time = Self::Time>>(&mut self, upper: Antichain<M::Time>) -> B::Output {
8484
// Finish
8585
while let Some(chunk) = self.chunker.finish() {
8686
let chunk = std::mem::take(chunk);
@@ -109,22 +109,22 @@ where
109109

110110
self.stash.clear();
111111

112-
let seal = B::seal(&mut readied, self.lower.borrow(), upper.borrow(), Antichain::from_elem(T::minimum()).borrow());
112+
let seal = B::seal(&mut readied, self.lower.borrow(), upper.borrow(), Antichain::from_elem(M::Time::minimum()).borrow());
113113
self.lower = upper;
114114
seal
115115
}
116116

117117
/// The frontier of elements remaining after the most recent call to `self.seal`.
118118
#[inline]
119-
fn frontier(&mut self) -> AntichainRef<T> {
119+
fn frontier(&mut self) -> AntichainRef<M::Time> {
120120
self.frontier.borrow()
121121
}
122122
}
123123

124-
impl<Input, C, M, T> MergeBatcher<Input, C, M, T>
124+
impl<Input, C, M> MergeBatcher<Input, C, M>
125125
where
126126
C: ContainerBuilder<Container=M::Chunk> + Default,
127-
M: Merger<Time = T>,
127+
M: Merger,
128128
{
129129
/// Insert a chain and maintain chain properties: Chains are geometrically sized and ordered
130130
/// by decreasing length.
@@ -189,10 +189,10 @@ where
189189
}
190190
}
191191

192-
impl<Input, C, M, T> Drop for MergeBatcher<Input, C, M, T>
192+
impl<Input, C, M> Drop for MergeBatcher<Input, C, M>
193193
where
194194
C: ContainerBuilder<Container=M::Chunk> + Default,
195-
M: Merger<Time = T>,
195+
M: Merger,
196196
{
197197
fn drop(&mut self) {
198198
// Cleanup chain to retract accounting information.

src/trace/implementations/ord_neu.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::trace::implementations::chunker::{ColumnationChunker, ContainerChunke
1717
use crate::trace::implementations::spine_fueled::Spine;
1818
use crate::trace::implementations::merge_batcher::{MergeBatcher, VecMerger};
1919
use crate::trace::implementations::merge_batcher_col::ColumnationMerger;
20-
use crate::trace::implementations::merge_batcher_flat::{FlatcontainerMerger, MergerChunk};
20+
use crate::trace::implementations::merge_batcher_flat::FlatcontainerMerger;
2121
use crate::trace::rc_blanket_impls::RcBuilder;
2222

2323
use super::{Update, Layout, Vector, TStack, Preferred, FlatLayout};
@@ -28,7 +28,7 @@ pub use self::key_batch::{OrdKeyBatch, OrdKeyBuilder};
2828
/// A trace implementation using a spine of ordered lists.
2929
pub type OrdValSpine<K, V, T, R> = Spine<Rc<OrdValBatch<Vector<((K,V),T,R)>>>>;
3030
/// A batcher using ordered lists.
31-
pub type OrdValBatcher<K, V, T, R> = MergeBatcher<Vec<((K,V),T,R)>, VecChunker<((K,V),T,R)>, VecMerger<((K, V), T, R)>, T>;
31+
pub type OrdValBatcher<K, V, T, R> = MergeBatcher<Vec<((K,V),T,R)>, VecChunker<((K,V),T,R)>, VecMerger<((K, V), T, R)>>;
3232
/// A builder using ordered lists.
3333
pub type RcOrdValBuilder<K, V, T, R> = RcBuilder<OrdValBuilder<Vector<((K,V),T,R)>, Vec<((K,V),T,R)>>>;
3434

@@ -38,14 +38,14 @@ pub type RcOrdValBuilder<K, V, T, R> = RcBuilder<OrdValBuilder<Vector<((K,V),T,R
3838
/// A trace implementation backed by columnar storage.
3939
pub type ColValSpine<K, V, T, R> = Spine<Rc<OrdValBatch<TStack<((K,V),T,R)>>>>;
4040
/// A batcher for columnar storage.
41-
pub type ColValBatcher<K, V, T, R> = MergeBatcher<Vec<((K,V),T,R)>, ColumnationChunker<((K,V),T,R)>, ColumnationMerger<((K,V),T,R)>, T>;
41+
pub type ColValBatcher<K, V, T, R> = MergeBatcher<Vec<((K,V),T,R)>, ColumnationChunker<((K,V),T,R)>, ColumnationMerger<((K,V),T,R)>>;
4242
/// A builder for columnar storage.
4343
pub type ColValBuilder<K, V, T, R> = RcBuilder<OrdValBuilder<TStack<((K,V),T,R)>, TimelyStack<((K,V),T,R)>>>;
4444

4545
/// A trace implementation backed by flatcontainer storage.
4646
pub type FlatValSpine<L> = Spine<Rc<OrdValBatch<L>>>;
4747
/// A batcher for flatcontainer storage.
48-
pub type FlatValBatcher<R, C> = MergeBatcher<C, ContainerChunker<FlatStack<R>>, FlatcontainerMerger<R>, <R as MergerChunk>::TimeOwned>;
48+
pub type FlatValBatcher<R, C> = MergeBatcher<C, ContainerChunker<FlatStack<R>>, FlatcontainerMerger<R>>;
4949
/// A builder for flatcontainer storage.
5050
pub type FlatValBuilder<L, R> = RcBuilder<OrdValBuilder<L, FlatStack<R>>>;
5151

@@ -63,7 +63,7 @@ pub type FlatValBuilderDefault<K, V, T, R> = FlatValBuilder<FlatLayout<<K as Reg
6363
/// A trace implementation using a spine of ordered lists.
6464
pub type OrdKeySpine<K, T, R> = Spine<Rc<OrdKeyBatch<Vector<((K,()),T,R)>>>>;
6565
/// A batcher for ordered lists.
66-
pub type OrdKeyBatcher<K, T, R> = MergeBatcher<Vec<((K,()),T,R)>, VecChunker<((K,()),T,R)>, VecMerger<((K, ()), T, R)>, T>;
66+
pub type OrdKeyBatcher<K, T, R> = MergeBatcher<Vec<((K,()),T,R)>, VecChunker<((K,()),T,R)>, VecMerger<((K, ()), T, R)>>;
6767
/// A builder for ordered lists.
6868
pub type RcOrdKeyBuilder<K, T, R> = RcBuilder<OrdKeyBuilder<Vector<((K,()),T,R)>, Vec<((K,()),T,R)>>>;
6969

@@ -73,14 +73,14 @@ pub type RcOrdKeyBuilder<K, T, R> = RcBuilder<OrdKeyBuilder<Vector<((K,()),T,R)>
7373
/// A trace implementation backed by columnar storage.
7474
pub type ColKeySpine<K, T, R> = Spine<Rc<OrdKeyBatch<TStack<((K,()),T,R)>>>>;
7575
/// A batcher for columnar storage
76-
pub type ColKeyBatcher<K, T, R> = MergeBatcher<Vec<((K,()),T,R)>, ColumnationChunker<((K,()),T,R)>, ColumnationMerger<((K,()),T,R)>, T>;
76+
pub type ColKeyBatcher<K, T, R> = MergeBatcher<Vec<((K,()),T,R)>, ColumnationChunker<((K,()),T,R)>, ColumnationMerger<((K,()),T,R)>>;
7777
/// A builder for columnar storage
7878
pub type ColKeyBuilder<K, T, R> = RcBuilder<OrdKeyBuilder<TStack<((K,()),T,R)>, TimelyStack<((K,()),T,R)>>>;
7979

8080
/// A trace implementation backed by flatcontainer storage.
8181
pub type FlatKeySpine<L> = Spine<Rc<OrdKeyBatch<L>>>;
8282
/// A batcher for flatcontainer storage.
83-
pub type FlatKeyBatcher<R, C> = MergeBatcher<C, ContainerChunker<FlatStack<R>>, FlatcontainerMerger<R>, <R as MergerChunk>::TimeOwned>;
83+
pub type FlatKeyBatcher<R, C> = MergeBatcher<C, ContainerChunker<FlatStack<R>>, FlatcontainerMerger<R>>;
8484
/// A builder for flatcontainer storage.
8585
pub type FlatKeyBuilder<L, R> = RcBuilder<OrdKeyBuilder<L, FlatStack<R>>>;
8686

@@ -96,7 +96,7 @@ pub type FlatKeyBuilderDefault<K, T, R> = FlatKeyBuilder<FlatLayout<<K as Region
9696
/// A trace implementation backed by columnar storage.
9797
pub type PreferredSpine<K, V, T, R> = Spine<Rc<OrdValBatch<Preferred<K,V,T,R>>>>;
9898
/// A batcher for columnar storage.
99-
pub type PreferredBatcher<K, V, T, R> = MergeBatcher<Vec<((<K as ToOwned>::Owned,<V as ToOwned>::Owned),T,R)>, ColumnationChunker<((<K as ToOwned>::Owned,<V as ToOwned>::Owned),T,R)>, ColumnationMerger<((<K as ToOwned>::Owned,<V as ToOwned>::Owned),T,R)>,T>;
99+
pub type PreferredBatcher<K, V, T, R> = MergeBatcher<Vec<((<K as ToOwned>::Owned,<V as ToOwned>::Owned),T,R)>, ColumnationChunker<((<K as ToOwned>::Owned,<V as ToOwned>::Owned),T,R)>, ColumnationMerger<((<K as ToOwned>::Owned,<V as ToOwned>::Owned),T,R)>>;
100100
/// A builder for columnar storage.
101101
pub type PreferredBuilder<K, V, T, R> = RcBuilder<OrdValBuilder<Preferred<K,V,T,R>, TimelyStack<((<K as ToOwned>::Owned,<V as ToOwned>::Owned),T,R)>>>;
102102

src/trace/implementations/rhh.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use self::val_batch::{RhhValBatch, RhhValBuilder};
2525
/// A trace implementation using a spine of ordered lists.
2626
pub type VecSpine<K, V, T, R> = Spine<Rc<RhhValBatch<Vector<((K,V),T,R)>>>>;
2727
/// A batcher for ordered lists.
28-
pub type VecBatcher<K,V,T,R> = MergeBatcher<Vec<((K,V),T,R)>, VecChunker<((K,V),T,R)>, VecMerger<((K, V), T, R)>, T>;
28+
pub type VecBatcher<K,V,T,R> = MergeBatcher<Vec<((K,V),T,R)>, VecChunker<((K,V),T,R)>, VecMerger<((K, V), T, R)>>;
2929
/// A builder for ordered lists.
3030
pub type VecBuilder<K,V,T,R> = RcBuilder<RhhValBuilder<Vector<((K,V),T,R)>, Vec<((K,V),T,R)>>>;
3131

@@ -35,7 +35,7 @@ pub type VecBuilder<K,V,T,R> = RcBuilder<RhhValBuilder<Vector<((K,V),T,R)>, Vec<
3535
/// A trace implementation backed by columnar storage.
3636
pub type ColSpine<K, V, T, R> = Spine<Rc<RhhValBatch<TStack<((K,V),T,R)>>>>;
3737
/// A batcher for columnar storage.
38-
pub type ColBatcher<K,V,T,R> = MergeBatcher<Vec<((K,V),T,R)>, ColumnationChunker<((K,V),T,R)>, ColumnationMerger<((K,V),T,R)>, T>;
38+
pub type ColBatcher<K,V,T,R> = MergeBatcher<Vec<((K,V),T,R)>, ColumnationChunker<((K,V),T,R)>, ColumnationMerger<((K,V),T,R)>>;
3939
/// A builder for columnar storage.
4040
pub type ColBuilder<K,V,T,R> = RcBuilder<RhhValBuilder<TStack<((K,V),T,R)>, TimelyStack<((K,V),T,R)>>>;
4141

0 commit comments

Comments
 (0)