Skip to content

Commit 1fe91eb

Browse files
committed
spring-projectsGH-4514 update the "write skip count"
Signed-off-by: Florian Hof <[email protected]>
1 parent 08c4cb1 commit 1fe91eb

File tree

6 files changed

+58
-1
lines changed

6 files changed

+58
-1
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,15 @@ public void incrementWriteSkipCount() {
155155
writeSkipCount++;
156156
}
157157

158+
/**
159+
* Increment the write skip count for this contribution.
160+
* @param count The {@code long} amount to increment by.
161+
* @since 6.0.0
162+
*/
163+
public void incrementWriteSkipCount(long count) {
164+
writeSkipCount += count;
165+
}
166+
158167
/**
159168
*
160169
*/

spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ protected void write(final StepContribution contribution, final Chunk<I> inputs,
347347
stopTimer(sample, contribution.getStepExecution(), "chunk.write", status, "Chunk writing");
348348
}
349349
contribution.incrementWriteCount(outputs.size());
350+
contribution.incrementWriteSkipCount(outputs.getSkipsSize());
350351
}
351352
else {
352353
scan(contribution, inputs, outputs, chunkMonitor, false);

spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleChunkProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ protected void write(StepContribution contribution, Chunk<I> inputs, Chunk<O> ou
309309
stopTimer(sample, contribution.getStepExecution(), "chunk.write", status, "Chunk writing");
310310
}
311311
contribution.incrementWriteCount(outputs.size());
312+
contribution.incrementWriteSkipCount(outputs.getSkipsSize());
312313
}
313314

314315
protected Chunk<O> transform(StepContribution contribution, Chunk<I> inputs) throws Exception {

spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessorTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,25 @@ void testWriteSkipOnException() throws Exception {
230230
assertEquals(0, contribution.getFilterCount());
231231
}
232232

233+
@Test
234+
void testWriteSkipOnIteratorRemove() throws Exception {
235+
processor.setItemWriter(chunk -> {
236+
Chunk<? extends String>.ChunkIterator iterator = chunk.iterator();
237+
while (iterator.hasNext()) {
238+
String item = iterator.next();
239+
if (item.equals("skip")) {
240+
iterator.remove((Exception) null);
241+
}
242+
}
243+
});
244+
Chunk<String> inputs = new Chunk<>(Arrays.asList("3", "skip", "2"));
245+
processor.process(contribution, inputs);
246+
assertEquals(1, contribution.getSkipCount());
247+
assertEquals(2, contribution.getWriteCount());
248+
assertEquals(1, contribution.getWriteSkipCount());
249+
assertEquals(0, contribution.getFilterCount());
250+
}
251+
233252
@Test
234253
void testWriteSkipOnExceptionWithTrivialChunk() throws Exception {
235254
processor.setWriteSkipPolicy(new AlwaysSkipItemSkipPolicy());

spring-batch-core/src/test/java/org/springframework/batch/core/step/item/SimpleChunkProcessorTests.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,15 @@ public void write(Chunk<? extends String> chunk) throws Exception {
5151
if (chunk.getItems().contains("fail")) {
5252
throw new RuntimeException("Planned failure!");
5353
}
54-
list.addAll(chunk.getItems());
54+
Chunk<? extends String>.ChunkIterator iterator = chunk.iterator();
55+
while (iterator.hasNext()) {
56+
String item = iterator.next();
57+
if (item.equals("skip")) {
58+
iterator.remove((Exception) null);
59+
} else {
60+
list.add(item);
61+
}
62+
}
5563
}
5664
});
5765

@@ -88,4 +96,15 @@ void testTransform() throws Exception {
8896
assertTrue(outputs.isEnd());
8997
}
9098

99+
@Test
100+
void testWriteWithSkip() throws Exception {
101+
Chunk<String> inputs = new Chunk<>();
102+
inputs.add("foo");
103+
inputs.add("skip");
104+
inputs.add("bar");
105+
processor.process(contribution, inputs);
106+
assertEquals(2, contribution.getWriteCount());
107+
assertEquals(1, contribution.getWriteSkipCount());
108+
}
109+
91110
}

spring-batch-infrastructure/src/main/java/org/springframework/batch/item/Chunk.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,14 @@ public int size() {
152152
return items.size();
153153
}
154154

155+
/**
156+
* @return the number of skipped items
157+
* @since 6.0.0
158+
*/
159+
public int getSkipsSize() {
160+
return skips.size();
161+
}
162+
155163
/**
156164
* Flag to indicate if the source data is exhausted.
157165
*

0 commit comments

Comments
 (0)