diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java index 6b85fe771..a85deeea7 100755 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java @@ -137,7 +137,7 @@ public class FaultTolerantChunkProcessor extends SimpleChunkProcessor data = (UserData) inputs.getUserData(); if (data == null) { - data = new UserData(inputs.size()); + data = new UserData(); inputs.setUserData(data); data.setOutputs(new Chunk()); } @@ -147,7 +147,7 @@ public class FaultTolerantChunkProcessor extends SimpleChunkProcessor inputs, Chunk outputs) { @SuppressWarnings("unchecked") UserData data = (UserData) inputs.getUserData(); - return data.size() - outputs.size() - inputs.getSkips().size(); + return data.filterCount; } @Override @@ -192,7 +192,7 @@ public class FaultTolerantChunkProcessor extends SimpleChunkProcessor outputs = new Chunk(); @SuppressWarnings("unchecked") - UserData data = (UserData) inputs.getUserData(); + final UserData data = (UserData) inputs.getUserData(); final Chunk cache = data.getOutputs(); final Iterator cacheIterator = cache.isEmpty() ? null : new ArrayList(cache.getItems()).iterator(); final AtomicInteger count = new AtomicInteger(0); @@ -253,6 +253,7 @@ public class FaultTolerantChunkProcessor extends SimpleChunkProcessor extends SimpleChunkProcessor { - private final int size; - private Chunk outputs; - public UserData(int size) { - this.size = size; - } + private int filterCount = 0; - public int size() { - return size; + public void incrementFilterCount() { + filterCount++; } public Chunk getOutputs() { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessorTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessorTests.java index 8e5f3f16e..faad7430a 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessorTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessorTests.java @@ -151,6 +151,7 @@ public class FaultTolerantChunkProcessorTests { } assertEquals(1, contribution.getSkipCount()); assertEquals(1, contribution.getWriteCount()); + assertEquals(0, contribution.getFilterCount()); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRollbackTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRollbackTests.java index 8c4a767e2..ce3a78e67 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRollbackTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBeanRollbackTests.java @@ -391,6 +391,11 @@ public class FaultTolerantStepFactoryBeanRollbackTests { assertEquals("[1, 2, 3, 5]", writer.getCommitted().toString()); assertEquals("[1, 2, 3, 4, 1, 2, 3, 4, 5]", writer.getWritten().toString()); assertEquals("[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]", processor.getProcessed().toString()); + + assertEquals(1, stepExecution.getWriteSkipCount()); + assertEquals(5, stepExecution.getReadCount()); + assertEquals(4, stepExecution.getWriteCount()); + assertEquals(0, stepExecution.getFilterCount()); } @Test @@ -440,6 +445,11 @@ public class FaultTolerantStepFactoryBeanRollbackTests { assertEquals("[1, 2, 1, 2, 3, 4, 5]", writer.getWritten().toString()); assertEquals("[1, 3, 5]", processor.getCommitted().toString()); assertEquals("[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]", processor.getProcessed().toString()); + + assertEquals(2, stepExecution.getWriteSkipCount()); + assertEquals(5, stepExecution.getReadCount()); + assertEquals(3, stepExecution.getWriteCount()); + assertEquals(0, stepExecution.getFilterCount()); } @Test