From b1ea9feb973d9e20f0404dabd83f2fb6ba6471e3 Mon Sep 17 00:00:00 2001 From: Christian Wulf <chw@informatik.uni-kiel.de> Date: Thu, 26 Jun 2014 13:22:18 +0200 Subject: [PATCH] added DirWith*2RecordFilter --- hints.txt | 6 +++ ...ecordFilter.java => Dir2RecordFilter.java} | 6 +-- .../stage/kieker/DirWithBin2RecordFilter.java | 40 +++++++++++++++++++ .../stage/kieker/DirWithDat2RecordFilter.java | 40 +++++++++++++++++++ .../recordReader/RecordReaderAnalysis.java | 4 +- 5 files changed, 91 insertions(+), 5 deletions(-) rename src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/{File2RecordFilter.java => Dir2RecordFilter.java} (96%) create mode 100644 src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java create mode 100644 src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java diff --git a/hints.txt b/hints.txt index 44162609..1785a5d5 100644 --- a/hints.txt +++ b/hints.txt @@ -1,4 +1,10 @@ -a pipeline needs to be a stage, too, to allow the composition of stages -instead of using work-stealing, sort the input in desc order to process the most computationally intensive elements first (load-balancing) -for a novice programmer, it is difficult to select the best choice and combination of patterns to maximize performance +-switch vs. farm: + -switch: different branch logics + -farm: same branch logics +-if executed send() method, execute the corresponding successor stage at once to avoid scheduling, i.e., waste of performance + -same thread: send = put to pipe & execute corresponding successor stage + -different thread: send = put to pipe (only) - \ No newline at end of file diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java similarity index 96% rename from src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java rename to src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java index 6132236d..65c5dad6 100644 --- a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java +++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java @@ -38,14 +38,14 @@ import kieker.common.util.filesystem.FSUtil; * * @since 1.10 */ -public class File2RecordFilter extends Pipeline<File, IMonitoringRecord> { +public class Dir2RecordFilter extends Pipeline<File, IMonitoringRecord> { private ClassNameRegistryRepository classNameRegistryRepository; /** * @since 1.10 */ - public File2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) { + public Dir2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) { this.classNameRegistryRepository = classNameRegistryRepository; // FIXME does not yet work with more than one thread due to classNameRegistryRepository: classNameRegistryRepository is set after the ctor @@ -91,7 +91,7 @@ public class File2RecordFilter extends Pipeline<File, IMonitoringRecord> { /** * @since 1.10 */ - public File2RecordFilter() { + public Dir2RecordFilter() { this(null); } diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java new file mode 100644 index 00000000..9d63b583 --- /dev/null +++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java @@ -0,0 +1,40 @@ +package teetime.variant.methodcallWithPorts.stage.kieker; + +import java.io.File; + +import teetime.variant.methodcallWithPorts.framework.core.Pipeline; +import teetime.variant.methodcallWithPorts.stage.io.Directory2FilesFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryCreationFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository; +import teetime.variant.methodcallWithPorts.stage.kieker.fileToRecord.BinaryFile2RecordFilter; + +import kieker.common.record.IMonitoringRecord; + +public class DirWithBin2RecordFilter extends Pipeline<File, IMonitoringRecord> { + + private ClassNameRegistryRepository classNameRegistryRepository; + + public DirWithBin2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) { + this.classNameRegistryRepository = classNameRegistryRepository; + + final ClassNameRegistryCreationFilter classNameRegistryCreationFilter = new ClassNameRegistryCreationFilter(classNameRegistryRepository); + final Directory2FilesFilter directory2FilesFilter = new Directory2FilesFilter(); + final BinaryFile2RecordFilter binaryFile2RecordFilter = new BinaryFile2RecordFilter(classNameRegistryRepository); + + this.setFirstStage(classNameRegistryCreationFilter); + this.addIntermediateStage(directory2FilesFilter); + this.setLastStage(binaryFile2RecordFilter); + } + + public DirWithBin2RecordFilter() { + this(null); + } + + public ClassNameRegistryRepository getClassNameRegistryRepository() { + return this.classNameRegistryRepository; + } + + public void setClassNameRegistryRepository(final ClassNameRegistryRepository classNameRegistryRepository) { + this.classNameRegistryRepository = classNameRegistryRepository; + } +} diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java new file mode 100644 index 00000000..e41429e2 --- /dev/null +++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java @@ -0,0 +1,40 @@ +package teetime.variant.methodcallWithPorts.stage.kieker; + +import java.io.File; + +import teetime.variant.methodcallWithPorts.framework.core.Pipeline; +import teetime.variant.methodcallWithPorts.stage.io.Directory2FilesFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryCreationFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository; +import teetime.variant.methodcallWithPorts.stage.kieker.fileToRecord.DatFile2RecordFilter; + +import kieker.common.record.IMonitoringRecord; + +public class DirWithDat2RecordFilter extends Pipeline<File, IMonitoringRecord> { + + private ClassNameRegistryRepository classNameRegistryRepository; + + public DirWithDat2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) { + this.classNameRegistryRepository = classNameRegistryRepository; + + final ClassNameRegistryCreationFilter classNameRegistryCreationFilter = new ClassNameRegistryCreationFilter(classNameRegistryRepository); + final Directory2FilesFilter directory2FilesFilter = new Directory2FilesFilter(); + final DatFile2RecordFilter datFile2RecordFilter = new DatFile2RecordFilter(classNameRegistryRepository); + + this.setFirstStage(classNameRegistryCreationFilter); + this.addIntermediateStage(directory2FilesFilter); + this.setLastStage(datFile2RecordFilter); + } + + public DirWithDat2RecordFilter() { + this(null); + } + + public ClassNameRegistryRepository getClassNameRegistryRepository() { + return this.classNameRegistryRepository; + } + + public void setClassNameRegistryRepository(final ClassNameRegistryRepository classNameRegistryRepository) { + this.classNameRegistryRepository = classNameRegistryRepository; + } +} diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java index c9551b0a..8a1b3397 100644 --- a/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java +++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java @@ -25,7 +25,7 @@ import teetime.variant.methodcallWithPorts.framework.core.RunnableStage; import teetime.variant.methodcallWithPorts.framework.core.pipe.SingleElementPipe; import teetime.variant.methodcallWithPorts.framework.core.pipe.SpScPipe; import teetime.variant.methodcallWithPorts.stage.CollectorSink; -import teetime.variant.methodcallWithPorts.stage.kieker.File2RecordFilter; +import teetime.variant.methodcallWithPorts.stage.kieker.Dir2RecordFilter; import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository; import kieker.common.record.IMonitoringRecord; @@ -53,7 +53,7 @@ public class RecordReaderAnalysis extends Analysis { private Pipeline<File, Object> buildProducerPipeline() { this.classNameRegistryRepository = new ClassNameRegistryRepository(); // create stages - File2RecordFilter file2RecordFilter = new File2RecordFilter(this.classNameRegistryRepository); + Dir2RecordFilter file2RecordFilter = new Dir2RecordFilter(this.classNameRegistryRepository); CollectorSink<IMonitoringRecord> collector = new CollectorSink<IMonitoringRecord>(this.elementCollection); final Pipeline<File, Object> pipeline = new Pipeline<File, Object>(); -- GitLab