diff --git a/src/main/java/ru/nbch/credit_tracker/service/task/PipelinePackageManager.java b/src/main/java/ru/nbch/credit_tracker/service/task/PipelinePackageManager.java index 01d4264..0ce6c4e 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/task/PipelinePackageManager.java +++ b/src/main/java/ru/nbch/credit_tracker/service/task/PipelinePackageManager.java @@ -86,7 +86,7 @@ public class PipelinePackageManager { Pipeline pipeline = PipeLineBuilderV2.first(saveSubjectQueueFactory.getObject(), idEnricherQueueFactory.getObject()) .handler(saveSubjectHandler) .poison(SubjectPayload.POISON) - .handlerResult(flagsEnricherV2) +// .handlerResult(flagsEnricherV2) .andThen() .stage(sendSignalQueueFactory.getObject()) .handler(fidIdEnricherHandler) diff --git a/src/main/java/ru/nbch/credit_tracker/service/task/Stage.java b/src/main/java/ru/nbch/credit_tracker/service/task/Stage.java index f585956..3f9ae53 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/task/Stage.java +++ b/src/main/java/ru/nbch/credit_tracker/service/task/Stage.java @@ -124,10 +124,10 @@ public class Stage implements Ru void putQuiet(BlockingQueue q, Z b) { try { - q.put(b); if (consumer != null) { consumer.accept(b); } + q.put(b); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/task/impl/XmlMergeCoordinator.java b/src/main/java/ru/nbch/credit_tracker/service/task/impl/XmlMergeCoordinator.java index 087f6e3..6b495a1 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/task/impl/XmlMergeCoordinator.java +++ b/src/main/java/ru/nbch/credit_tracker/service/task/impl/XmlMergeCoordinator.java @@ -8,7 +8,7 @@ import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CompletableFuture; @@ -39,15 +39,31 @@ public final class XmlMergeCoordinator implements IPipeLineTerminator mergerQueue) { - this.inQueue = mergerQueue; - } - - @Override - public CompletableFuture doneFuture() { - return done; + public void run() { + try { + Files.createDirectories(mergedDir); + } catch (IOException e) { + throw new RuntimeException(e); + } + while (!Thread.currentThread().isInterrupted()) { + try { + PartFilePayload part = inQueue.poll(5, TimeUnit.SECONDS); + if (part == null) { + continue; + } + if (part.isPoison()) { + log.debug("Got poison"); + done.complete(new SignalXmlFilePayload(out)); + return; + } + mergeBatch(Collections.singletonList(part)); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + } catch (Exception e) { + log.error("Error: {}", ExceptionUtils.getStackTrace(e)); + } + } } private void mergeBatch(List inputs) throws Exception { @@ -71,7 +87,7 @@ public final class XmlMergeCoordinator implements IPipeLineTerminator batch = new ArrayList<>(batchSize); - try { - Files.createDirectories(mergedDir); - } catch (IOException e) { - throw new RuntimeException(e); - } - while (!Thread.currentThread().isInterrupted()) { - try { - PartFilePayload part = inQueue.poll(5, TimeUnit.SECONDS); + public void setPollingQueue(BlockingQueue mergerQueue) { + this.inQueue = mergerQueue; + } - if (part == null) { - continue; - } - if (part.isPoison()) { - done.complete(new SignalXmlFilePayload(out)); - return; - } - batch.add(part); - // добираем до batchSize, но не ждём бесконечно - while (batch.size() < batchSize) { - PartFilePayload p = inQueue.poll(1, TimeUnit.SECONDS); - if (p == null) { - break; - } - if (p.isPoison()) { - mergeBatch(batch); - done.complete(new SignalXmlFilePayload(out)); - return; - } - batch.add(p); - } - if (!batch.isEmpty()) { - mergeBatch(batch); - } - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - } catch (Exception e) { - log.error("Error: {}", ExceptionUtils.getStackTrace(e)); - batch.clear(); - } - } + @Override + public CompletableFuture doneFuture() { + return done; } }