@@ -31,10 +31,10 @@ public void testEmpty() throws IOException {
3131 XContentParser parser = createParser (builder );
3232 Map <String , Object > properties = parser .map ();
3333 assertTrue (properties .containsKey (Fields .TOTAL ));
34+ assertTrue (properties .containsKey (Fields .FORECASTED_JOBS ));
3435 assertFalse (properties .containsKey (Fields .MEMORY ));
3536 assertFalse (properties .containsKey (Fields .RECORDS ));
3637 assertFalse (properties .containsKey (Fields .RUNTIME ));
37- assertFalse (properties .containsKey (Fields .JOBS ));
3838 assertFalse (properties .containsKey (Fields .STATUSES ));
3939 }
4040
@@ -82,7 +82,7 @@ public void testMerge() {
8282
8383 Map <String , Object > mergedStats = forecastStats .asMap ();
8484
85- assertEquals (2L , mergedStats .get (Fields .JOBS ));
85+ assertEquals (2L , mergedStats .get (Fields .FORECASTED_JOBS ));
8686 assertEquals (5L , mergedStats .get (Fields .TOTAL ));
8787
8888 @ SuppressWarnings ("unchecked" )
@@ -119,6 +119,98 @@ public void testMerge() {
119119 assertEquals (1 , mergedCountStats .get ("scheduled" ).longValue ());
120120 }
121121
122+ public void testChainedMerge () {
123+ StatsAccumulator memoryStats = new StatsAccumulator ();
124+ memoryStats .add (1000 );
125+ memoryStats .add (45000 );
126+ memoryStats .add (2300 );
127+ StatsAccumulator recordStats = new StatsAccumulator ();
128+ recordStats .add (10 );
129+ recordStats .add (0 );
130+ recordStats .add (20 );
131+ StatsAccumulator runtimeStats = new StatsAccumulator ();
132+ runtimeStats .add (0 );
133+ runtimeStats .add (0 );
134+ runtimeStats .add (10 );
135+ CountAccumulator statusStats = new CountAccumulator ();
136+ statusStats .add ("finished" , 2L );
137+ statusStats .add ("failed" , 5L );
138+ ForecastStats forecastStats = new ForecastStats (3 , memoryStats , recordStats , runtimeStats , statusStats );
139+
140+ StatsAccumulator memoryStats2 = new StatsAccumulator ();
141+ memoryStats2 .add (10 );
142+ memoryStats2 .add (30 );
143+ StatsAccumulator recordStats2 = new StatsAccumulator ();
144+ recordStats2 .add (10 );
145+ recordStats2 .add (0 );
146+ StatsAccumulator runtimeStats2 = new StatsAccumulator ();
147+ runtimeStats2 .add (96 );
148+ runtimeStats2 .add (0 );
149+ CountAccumulator statusStats2 = new CountAccumulator ();
150+ statusStats2 .add ("finished" , 2L );
151+ statusStats2 .add ("scheduled" , 1L );
152+ ForecastStats forecastStats2 = new ForecastStats (2 , memoryStats2 , recordStats2 , runtimeStats2 , statusStats2 );
153+
154+ StatsAccumulator memoryStats3 = new StatsAccumulator ();
155+ memoryStats3 .add (500 );
156+ StatsAccumulator recordStats3 = new StatsAccumulator ();
157+ recordStats3 .add (50 );
158+ StatsAccumulator runtimeStats3 = new StatsAccumulator ();
159+ runtimeStats3 .add (32 );
160+ CountAccumulator statusStats3 = new CountAccumulator ();
161+ statusStats3 .add ("finished" , 1L );
162+ ForecastStats forecastStats3 = new ForecastStats (1 , memoryStats3 , recordStats3 , runtimeStats3 , statusStats3 );
163+
164+ ForecastStats forecastStats4 = new ForecastStats ();
165+
166+ // merge 4 into 3
167+ forecastStats3 .merge (forecastStats4 );
168+
169+ // merge 3 into 2
170+ forecastStats2 .merge (forecastStats3 );
171+
172+ // merger 2 into 1
173+ forecastStats .merge (forecastStats2 );
174+
175+ Map <String , Object > mergedStats = forecastStats .asMap ();
176+
177+ assertEquals (3L , mergedStats .get (Fields .FORECASTED_JOBS ));
178+ assertEquals (6L , mergedStats .get (Fields .TOTAL ));
179+
180+ @ SuppressWarnings ("unchecked" )
181+ Map <String , Double > mergedMemoryStats = (Map <String , Double >) mergedStats .get (Fields .MEMORY );
182+
183+ assertTrue (mergedMemoryStats != null );
184+ assertThat (mergedMemoryStats .get (StatsAccumulator .Fields .AVG ), equalTo (8140.0 ));
185+ assertThat (mergedMemoryStats .get (StatsAccumulator .Fields .MAX ), equalTo (45000.0 ));
186+ assertThat (mergedMemoryStats .get (StatsAccumulator .Fields .MIN ), equalTo (10.0 ));
187+
188+ @ SuppressWarnings ("unchecked" )
189+ Map <String , Double > mergedRecordStats = (Map <String , Double >) mergedStats .get (Fields .RECORDS );
190+
191+ assertTrue (mergedRecordStats != null );
192+ assertThat (mergedRecordStats .get (StatsAccumulator .Fields .AVG ), equalTo (15.0 ));
193+ assertThat (mergedRecordStats .get (StatsAccumulator .Fields .MAX ), equalTo (50.0 ));
194+ assertThat (mergedRecordStats .get (StatsAccumulator .Fields .MIN ), equalTo (0.0 ));
195+
196+ @ SuppressWarnings ("unchecked" )
197+ Map <String , Double > mergedRuntimeStats = (Map <String , Double >) mergedStats .get (Fields .RUNTIME );
198+
199+ assertTrue (mergedRuntimeStats != null );
200+ assertThat (mergedRuntimeStats .get (StatsAccumulator .Fields .AVG ), equalTo (23.0 ));
201+ assertThat (mergedRuntimeStats .get (StatsAccumulator .Fields .MAX ), equalTo (96.0 ));
202+ assertThat (mergedRuntimeStats .get (StatsAccumulator .Fields .MIN ), equalTo (0.0 ));
203+
204+ @ SuppressWarnings ("unchecked" )
205+ Map <String , Long > mergedCountStats = (Map <String , Long >) mergedStats .get (Fields .STATUSES );
206+
207+ assertTrue (mergedCountStats != null );
208+ assertEquals (3 , mergedCountStats .size ());
209+ assertEquals (5 , mergedCountStats .get ("finished" ).longValue ());
210+ assertEquals (5 , mergedCountStats .get ("failed" ).longValue ());
211+ assertEquals (1 , mergedCountStats .get ("scheduled" ).longValue ());
212+ }
213+
122214 public void testUniqueCountOfJobs () {
123215 ForecastStats forecastStats = createForecastStats (5 , 10 );
124216 ForecastStats forecastStats2 = createForecastStats (2 , 8 );
@@ -131,7 +223,7 @@ public void testUniqueCountOfJobs() {
131223 forecastStats .merge (forecastStats4 );
132224 forecastStats .merge (forecastStats5 );
133225
134- assertEquals (3L , forecastStats .asMap ().get (Fields .JOBS ));
226+ assertEquals (3L , forecastStats .asMap ().get (Fields .FORECASTED_JOBS ));
135227 }
136228
137229 @ Override
0 commit comments