TeeTime issueshttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues2015-09-30T16:44:00+02:00https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/179Add pictures to wiki:Ready-to-use-Stages2015-09-30T16:44:00+02:00Christian WulfAdd pictures to wiki:Ready-to-use-StagesPaint with some tooling.
Examples:
- distributor: box with a D
- merger: box with an M
- clock: box with a clock insidePaint with some tooling.
Examples:
- distributor: box with a D
- merger: box with an M
- clock: box with a clock insideVersion 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/180Add links to javadoc at wiki:Ready-to-use-Stages 2015-09-30T16:51:50+02:00Christian WulfAdd links to javadoc at wiki:Ready-to-use-Stages Make the fully qualified class name as link to the javadoc pageMake the fully qualified class name as link to the javadoc pageVersion 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/181 Add descriptions at wiki:Ready-to-use-Stages 2015-09-30T16:40:41+02:00Christian Wulf Add descriptions at wiki:Ready-to-use-Stages Version 2.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/183Add threads to Execution at runtime2015-09-30T15:11:58+02:00Christian WulfAdd threads to Execution at runtimeGoal:
We need an API to add threads to an execution at runtime, e.g., for the ``TaskFarmStage`` or the ``DivideAndConquerStage``..
Problem:
- We have no methods to add threads to an execution at runtime so far
- We need to make t...Goal:
We need an API to add threads to an execution at runtime, e.g., for the ``TaskFarmStage`` or the ``DivideAndConquerStage``..
Problem:
- We have no methods to add threads to an execution at runtime so far
- We need to make the lists of threads thread-safe and they should be changeable while iterating (no ``ConcurrentModificationException``)Version 2.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/191Composite stage needs a context in unit tests2015-07-02T16:14:07+02:00Christian WulfComposite stage needs a context in unit testsStageTester has no capability to pass the context to composite stage.
StageTester has no capability to pass the context to composite stage.
Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/192Merge contexts2015-07-02T16:06:32+02:00Nelson Tavares de SousaMerge contextsContexts should not be passed to ACS within their constructor.
The context needs to be hold in every stage.
In connectPorts, we need to test if there is a "nested context" in one (or both) of the stages and merge them.
Afterwards ->...Contexts should not be passed to ACS within their constructor.
The context needs to be hold in every stage.
In connectPorts, we need to test if there is a "nested context" in one (or both) of the stages and merge them.
Afterwards -> remove final field in ACSVersion 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/194change license2015-07-02T16:11:26+02:00Nelson Tavares de Sousachange licenseAfter the 2.0 release, we need to alter the homepage indicated in the license in order to move the homepage to github.After the 2.0 release, we need to alter the homepage indicated in the license in order to move the homepage to github.Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/195Prevent to share a single configuration across multiple executions2015-07-08T13:26:45+02:00Christian WulfPrevent to share a single configuration across multiple executionsAn example situation that should be prevented:
```java
Configuration c = new MyConfiguration();
e0 = new Execution(c);
e1 = new Execution(c);
```
An example situation that should be prevented:
```java
Configuration c = new MyConfiguration();
e0 = new Execution(c);
e1 = new Execution(c);
```
Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/202Fix PMD UR-anomaly rule2015-07-24T06:00:40+02:00Christian WulfFix PMD UR-anomaly rule**Problem:**
Rule falsely detects a foreach loop as UR-anomaly.
net.sourceforge.pmd.lang.java.rule.controversial.DataflowAnomalyAnalysisRule**Problem:**
Rule falsely detects a foreach loop as UR-anomaly.
net.sourceforge.pmd.lang.java.rule.controversial.DataflowAnomalyAnalysisRuleVersion 2.1Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/204Add runtime service to context2015-08-03T15:45:01+02:00Christian WulfAdd runtime service to contextSuch a runtime service should provide the following functionalities:
- connect two ports
- send signals (init + start)
- create and start a stage within a new thread
Use cases:
- distributor: creates new output port, connects its ...Such a runtime service should provide the following functionalities:
- connect two ports
- send signals (init + start)
- create and start a stage within a new thread
Use cases:
- distributor: creates new output port, connects its and another port, and sends the signals
- merger: creates new input port and connects its and another port
- divide & conquer: duplicates itself, connects the ports, send the signals, and create/starts a new threadVersion 2.1Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/207Add capacity to IPipe2015-07-17T12:24:16+02:00Christian WulfAdd capacity to IPipeTo distinguish current ``size`` and fixed ``capacity``.To distinguish current ``size`` and fixed ``capacity``.Version 2.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/210Add another scheduling concept: thread pool with task queues2017-12-22T10:36:20+01:00Christian WulfAdd another scheduling concept: thread pool with task queuesto compare with pipe scheduling incl. SPSC scenarioto compare with pipe scheduling incl. SPSC scenarioVersion 3.0https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/211Add RuntimeService2015-08-03T14:58:09+02:00Nelson Tavares de SousaAdd RuntimeServiceWe need a RuntimeService which handles things like starting and terminating of an Configuration, as well as the creation of new threads.We need a RuntimeService which handles things like starting and terminating of an Configuration, as well as the creation of new threads.Version 2.0https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/213Add DSL for P&F config2016-06-20T16:46:18+02:00Christian WulfAdd DSL for P&F config``["threadable"] "stage" type (id [ "(" parameter ")" ] )+
([id.]outputPort -> id.inputPort)*``
Some points to consider:
- output -> input
- threadable stage
- constructor parameter
- id on outputPort mandatory if multiple in...``["threadable"] "stage" type (id [ "(" parameter ")" ] )+
([id.]outputPort -> id.inputPort)*``
Some points to consider:
- output -> input
- threadable stage
- constructor parameter
- id on outputPort mandatory if multiple instances
syntactic sugar:
- pipeline: x -> y -> zNelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/217Remove InitializingSignal2015-08-06T15:53:40+02:00Christian WulfRemove InitializingSignalSince init and start do not differ, we can remove one of them.Since init and start do not differ, we can remove one of them.Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/218Unconnected Ports are not reported anymore2015-08-25T14:48:17+02:00Christian WulfUnconnected Ports are not reported anymoreDue to the removal of the algorithm and the replacement by the default assignment of the dummy pipe.Due to the removal of the algorithm and the replacement by the default assignment of the dummy pipe.Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/219Inconsistent consumer/producer declaration2015-08-12T16:18:22+02:00Christian WulfInconsistent consumer/producer declarationCurrently, the runnable stage is chosen according to the termination strategy:
```java
static AbstractRunnableStage create(final Stage stage) {
if (stage.getTerminationStrategy() == TerminationStrategy.BY_SIGNAL) {
return new R...Currently, the runnable stage is chosen according to the termination strategy:
```java
static AbstractRunnableStage create(final Stage stage) {
if (stage.getTerminationStrategy() == TerminationStrategy.BY_SIGNAL) {
return new RunnableConsumerStage(stage);
} else {
return new RunnableProducerStage(stage);
}
}
```
However, this is wrong. A consumer may decide on its own although it has input ports.Version 2.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/220Stages don't check "mayBeTriggered" condition for terminatingSignal2015-08-24T20:24:27+02:00Robin MohrStages don't check "mayBeTriggered" condition for terminatingSignalcompare: AbstractStage lines 55-89
mayBeTriggered applies to all stages inheriting from AbstractStage, that have multiple input portscompare: AbstractStage lines 55-89
mayBeTriggered applies to all stages inheriting from AbstractStage, that have multiple input portsNelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/221Throw exception upon runtime errors2015-09-22T14:03:37+02:00Christian WulfThrow exception upon runtime errorsThe execution should throw an exception if any error occurred at runtime.
First of all, we need a concept for accessing the logged exceptions (of the factory instances).The execution should throw an exception if any error occurred at runtime.
First of all, we need a concept for accessing the logged exceptions (of the factory instances).Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/222Move declareActive to Stage2015-09-22T13:31:46+02:00Nelson Tavares de SousaMove declareActive to StageThe declareActive method is implemented in Configuration.
It is better to move it to Stage as this is Stage-related logic.The declareActive method is implemented in Configuration.
It is better to move it to Stage as this is Stage-related logic.Version 2.1https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/224Unnecessary Stage and AbstractStage2015-09-22T14:47:24+02:00Nelson Tavares de SousaUnnecessary Stage and AbstractStageDo we need two separate classes anymore?
The main target of this separation was the CompositeStage. As this class does not rely on Stage anymore, a separation of both is no longer useful.Do we need two separate classes anymore?
The main target of this separation was the CompositeStage. As this class does not rely on Stage anymore, a separation of both is no longer useful.Version 2.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/225check if stable javadoc is removed2015-09-22T15:34:12+02:00Nelson Tavares de Sousacheck if stable javadoc is removedCheck if the jenkins site upload deletes the javadoc of the stable version...
If so:
git update-index --assume-unchanged *files*Check if the jenkins site upload deletes the javadoc of the stable version...
If so:
git update-index --assume-unchanged *files*Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/226Create github organization2015-09-23T12:39:40+02:00Nelson Tavares de SousaCreate github organizationContact with github support already effectedContact with github support already effectedVersion 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/228Add test for executeBlocking()2015-09-23T15:09:05+02:00Christian WulfAdd test for executeBlocking()We need a test for a failing ``executeBlocking`` call in ``ExecutionTest``.We need a test for a failing ``executeBlocking`` call in ``ExecutionTest``.Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/229Remove ExceptionHandlingTest2015-09-23T15:12:05+02:00Christian WulfRemove ExceptionHandlingTestUses
- ``ExceptionTestConfiguration``
- ``ExceptionTestProducerStage``
- ``ExceptionTestConsumerStage``Uses
- ``ExceptionTestConfiguration``
- ``ExceptionTestProducerStage``
- ``ExceptionTestConsumerStage``Version 2.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/232Remove IPipeFactory2015-10-07T17:30:55+02:00Nelson Tavares de SousaRemove IPipeFactoryWe don't need it anymoreWe don't need it anymoreVersion 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/233Deprecate TerminationStrategy.BY_SIGNAL2017-12-27T22:30:51+01:00Christian WulfDeprecate TerminationStrategy.BY_SIGNALA consumer is identified by its number of input ports. So, we do not need ``TerminationStrategy.BY_SIGNAL``.A consumer is identified by its number of input ports. So, we do not need ``TerminationStrategy.BY_SIGNAL``.Version 3.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/235Make own badges2016-01-06T16:32:23+01:00Nelson Tavares de SousaMake own badgesSVG allows inline JS... we could make some hybrid badges.
They have static values upon homepage building, but can update automatically.
We need to make sure somehow, that they don't update every time the page is loaded.
GitHub API...SVG allows inline JS... we could make some hybrid badges.
They have static values upon homepage building, but can update automatically.
We need to make sure somehow, that they don't update every time the page is loaded.
GitHub API call for releases:
https://api.github.com/repos/teetime-framework/teetime/releasesVersion 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/236Paper: adaptive D&C and adaptive Task Farm2016-04-26T12:29:14+02:00Christian WulfPaper: adaptive D&C and adaptive Task FarmEither both in one full paper or each in a short paper.
improvements/todos for this paper:
- comparison of Fastflow's implementation of D&CEither both in one full paper or each in a short paper.
improvements/todos for this paper:
- comparison of Fastflow's implementation of D&CChristian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/240Set NotEnoughInputException to package private2015-10-05T14:23:53+02:00Nelson Tavares de SousaSet NotEnoughInputException to package privateThis makes it non-accessible for the end userThis makes it non-accessible for the end userVersion 2.1https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/247Add main method2015-11-23T08:42:53+01:00Nelson Tavares de SousaAdd main methodMaybe we should add a main method, which runs a config without the need of an dedicated "Runner Class".
```
java -cp ... teetime.framework.Execution any.arbitrary.Config
```Maybe we should add a main method, which runs a config without the need of an dedicated "Runner Class".
```
java -cp ... teetime.framework.Execution any.arbitrary.Config
```Version 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/248Fix Link in Wiki Main Page 2015-11-04T13:06:41+01:00Marc AdolfFix Link in Wiki Main Page The link in the wiki to the "Runnable example P&F architecture" leads to
https://build.se.informatik.uni-kiel.de/gitlab/chw/teetime/blob/master/src/test/java/teetime/examples/cipher/CipherTest.java
which ends in the nirvana.
The link in the wiki to the "Runnable example P&F architecture" leads to
https://build.se.informatik.uni-kiel.de/gitlab/chw/teetime/blob/master/src/test/java/teetime/examples/cipher/CipherTest.java
which ends in the nirvana.
https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/249Unclear examples in the Wiki2016-01-14T15:36:45+01:00Marc AdolfUnclear examples in the WikiI would suggest, to change the example in "Implementing your own P&F architecture"¹
to something that runs out of the box, after installing TeeTime and copying the example code.
At least it should be mentioned, that Kieker is require...I would suggest, to change the example in "Implementing your own P&F architecture"¹
to something that runs out of the box, after installing TeeTime and copying the example code.
At least it should be mentioned, that Kieker is required for the current example.
Its just a minor issue, but its one that hinders the beginning user in the exploration of TeeTime.
¹ http://teetime-framework.github.io/wiki/Implementing-your-own-Analysishttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/250Incremental Test Execution in Jenkins2016-06-20T16:29:02+02:00Christian WulfIncremental Test Execution in JenkinsInfinitest is an Eclipse-Plugin that executes only those JUnit tests which themselves or their code to be tested were changed.
It would be nice if Jenkins would have such functionality to reduce testing time, especially for our continuo...Infinitest is an Eclipse-Plugin that executes only those JUnit tests which themselves or their code to be tested were changed.
It would be nice if Jenkins would have such functionality to reduce testing time, especially for our continuous job.Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/252"CI build pending"-link references an empty site 2015-12-17T15:19:25+01:00Christian Wulf"CI build pending"-link references an empty site Example of a merge request link:
http://build.se.informatik.uni-kiel.de/jenkins/project/teetime-continuous-check/refs/runner/commits/fded395ac2adc18653a9e23aea7fea1f5ca39444
Example of a merge request link:
http://build.se.informatik.uni-kiel.de/jenkins/project/teetime-continuous-check/refs/runner/commits/fded395ac2adc18653a9e23aea7fea1f5ca39444
Version 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/256A3PipeInstantiation and Capacity of the BoundedSynchedPipe2015-12-03T10:43:38+01:00Marc AdolfA3PipeInstantiation and Capacity of the BoundedSynchedPipeNot sure if its a real bug here, but while choosing the need pipe following code is executed:
```java
if (pipe.capacity() != 0) {
new UnboundedSynchedPipe<T>(pipe.getSourcePort(), pipe.getTargetPort());
if (LOGGER.isDebugEnab...Not sure if its a real bug here, but while choosing the need pipe following code is executed:
```java
if (pipe.capacity() != 0) {
new UnboundedSynchedPipe<T>(pipe.getSourcePort(), pipe.getTargetPort());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Connected (bounded) " + pipe.getSourcePort() + " and " + pipe.getTargetPort());
}
} else {
new BoundedSynchedPipe<T>(pipe.getSourcePort(), pipe.getTargetPort(), pipe.capacity());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Connected (unbounded) " + pipe.getSourcePort() + " and " + pipe.getTargetPort());
}
```
Intuitively I would think that a size of zero (or less) would imply an unbounded pipe and a real capacity could instead be used the instantiate a bounded pipe.
Here it's the other way around.
The second issue affects the capacity.
Looking further in the code of the `BoundedSynchedPipe` I found that the function `getCapacity()` returns the capacity given to the constructor, but the used `ObservableSpScArrayQueue`,(which extends the `ConcurrentCircularArrayQueue`) does this:
```java
public ConcurrentCircularArrayQueue(int capacity) {
int actualCapacity = Pow2.roundToPowerOfTwo(capacity);
mask = actualCapacity - 1;
buffer = SparsePaddedCircularArrayOffsetCalculator.allocate(actualCapacity);
}
```
So the capacity from `getCapacity()` and the real capacity may differ.
A simple example would be:
```java
ObservableSpScArrayQueue<Object> queue = new ObservableSpScArrayQueue<Object>(1);
System.out.println(queue.offer(1));
System.out.println(queue.offer(2));
System.out.println(queue.offer(3));
System.out.println(queue.offer(4));
System.out.println(queue.offer(5));
```
which results in:
* true
* true
* true
* true
* falseVersion 2.1Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/259Get a new hot URL2016-02-22T12:18:02+01:00Nelson Tavares de SousaGet a new hot URLLike teetime-framework.net or suchLike teetime-framework.net or suchhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/262Stage DSL: Add Generic Type Support2016-04-01T16:58:33+02:00Mathis NeumannStage DSL: Add Generic Type SupportThe current implementation of the stage DSL does not allow for Stages to extend from generic class, e.g. ```stage MyStage extends AbstractConsumer<MyDataType>```.The current implementation of the stage DSL does not allow for Stages to extend from generic class, e.g. ```stage MyStage extends AbstractConsumer<MyDataType>```.https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/263Stage DSL: Implement Validation for Java Paths2016-04-28T16:16:00+02:00Mathis NeumannStage DSL: Implement Validation for Java PathsUsing type in handlers will not be validated by the plugin, but Java compilation will fail.
Would also solve that handler can be instantiated multiple times.
the syntax does not allow types to use any generics, so referring to ...Using type in handlers will not be validated by the plugin, but Java compilation will fail.
Would also solve that handler can be instantiated multiple times.
the syntax does not allow types to use any generics, so referring to "param
Iterator<MyClass> myClassIterator" would lead to syntax errors and would not generate
any Java sources.
links to #214 https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/264Stage DSL: Add Validators for Identifier Uniqueness2016-04-01T16:59:19+02:00Mathis NeumannStage DSL: Add Validators for Identifier UniquenessIdentifiers such as ```param MyType myIdentifier``` are not verified by the Eclipse plugin to be unique.
This would lead to Java compilation errors down the line.Identifiers such as ```param MyType myIdentifier``` are not verified by the Eclipse plugin to be unique.
This would lead to Java compilation errors down the line.https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/265Stage DSL: Override Automatic Validators for Descriptive Error Messages2016-04-01T16:58:10+02:00Mathis NeumannStage DSL: Override Automatic Validators for Descriptive Error MessagesCurrently a lot of syntax errors are not verify human-readable, e.g. missing the required ```class``` and ```method``` keywords in execution blocks throws:
required (...)+ did not match anything at input '}'
See for [here](htt...Currently a lot of syntax errors are not verify human-readable, e.g. missing the required ```class``` and ```method``` keywords in execution blocks throws:
required (...)+ did not match anything at input '}'
See for [here](https://eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation) information on how to implement custom messages.
links to #214 https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/266Does Configuration need to be abstract?2016-02-02T13:42:29+01:00Nelson Tavares de SousaDoes Configuration need to be abstract?One reason why it is abstract is the old version of AnalysisConfiguration.
I can't remember why, but somehow it lead to an error.
For now, I can't see any reason, why this class needs to be abstract.One reason why it is abstract is the old version of AnalysisConfiguration.
I can't remember why, but somehow it lead to an error.
For now, I can't see any reason, why this class needs to be abstract.Version 2.1https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/267Remove the "CommentTooLarge" rule2016-02-04T12:39:48+01:00Nelson Tavares de SousaRemove the "CommentTooLarge" ruleThis rule triggers on almost all of our comments.
Either we fix it everywhere or we deactive it, as nowadays short lines are not that important anymore.This rule triggers on almost all of our comments.
Either we fix it everywhere or we deactive it, as nowadays short lines are not that important anymore.https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/269Overhaul merger strategies2016-07-19T12:32:26+02:00Christian WulfOverhaul merger strategiesCurrently, the names of the ``RoundRobinStrategy`` and the ``BusyWaitingRoundRobinStrategy`` do not reflect their corresponding concerns. Moreover, although both use a round-robin style to determine the next input port, they use two diff...Currently, the names of the ``RoundRobinStrategy`` and the ``BusyWaitingRoundRobinStrategy`` do not reflect their corresponding concerns. Moreover, although both use a round-robin style to determine the next input port, they use two different algorithms.
The ``RoundRobinStrategy`` returns the token of the next **non-empty** input port. Hereby, it starts from the last non-empty input port and passes each input port at most one time per ``execute()``.
The ``BusyWaitingRoundRobinStrategy`` returns the token of the currently selected **non-closed** input port. It only passes over to the next non-closed input port, if it has received a non-null token from the previously selected input port or if the previously selected input port has been closed. Thus, this strategy represents a blocking strategy using busy-waiting.Version 3.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/270Rename AStage.terminate()2016-03-11T13:47:29+01:00Nelson Tavares de SousaRename AStage.terminate()I think we should rename this method. All the other methods have more complex names, like ``executeStage()`` or such.
While writing the wiki articles I already thought this may be confusing, as it leaves the impression to be a native ...I think we should rename this method. All the other methods have more complex names, like ``executeStage()`` or such.
While writing the wiki articles I already thought this may be confusing, as it leaves the impression to be a native java method.
I suggest: ``terminateStage()``Version 3.0https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/273Website: Wrong headline for wiki page2016-04-02T11:57:00+02:00Sören HenningWebsite: Wrong headline for wiki pageThe headline is "Write your own consumer with multiple input ports". It should be "output ports".The headline is "Write your own consumer with multiple input ports". It should be "output ports".https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/274Fix CI builds2016-04-11T14:46:02+02:00Nelson Tavares de SousaFix CI buildsWith the new gitlab version, there is no gitlab ci service anymore.
We need to adapt it.With the new gitlab version, there is no gitlab ci service anymore.
We need to adapt it.Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/276Change all URLs directing to gitlab2016-07-18T16:43:10+02:00Nelson Tavares de SousaChange all URLs directing to gitlabWith the new URL, we need to change all hyperlinks....With the new URL, we need to change all hyperlinks....https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/279Move thread instantiation to Execution2016-06-12T20:20:46+02:00Christian WulfMove thread instantiation to ExecutionThis feature then also requires to remove naming of threads via ``declareActive(..)`` and to provide a mechanism to name stages instead. Because, the name of a thread is not fix anymore. If a stage is set passive then its owning thread i...This feature then also requires to remove naming of threads via ``declareActive(..)`` and to provide a mechanism to name stages instead. Because, the name of a thread is not fix anymore. If a stage is set passive then its owning thread is assigned a different stage. Version 3.0https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/280``execute()`` should throw Exception2017-12-23T07:23:29+01:00Christian Wulf``execute()`` should throw ExceptionIt's unhandy to catch checked exceptions in ``execute()``.It's unhandy to catch checked exceptions in ``execute()``.Version 3.0https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/281Change constructor of InitialElementProducer2016-06-13T12:32:26+02:00Christian WulfChange constructor of InitialElementProducer```java
Path path = ...;
new InitialElementProducer(path);
```
Since ``Path`` is an ``Iterable<Path>``, the ``InitialElementProducer`` iterates its path parts. Only the following code snippet allows us to pass a ``Path`` as single o...```java
Path path = ...;
new InitialElementProducer(path);
```
Since ``Path`` is an ``Iterable<Path>``, the ``InitialElementProducer`` iterates its path parts. Only the following code snippet allows us to pass a ``Path`` as single object:
```java
Path path = ...;
new InitialElementProducer(Arrays.asList(path));
```
We should change the constructor from ``Iterable<T>`` to ``Collection<T>``.Version 3.0https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/282Task farm should also be used w/o self-adaptation2017-08-03T12:20:00+02:00Christian WulfTask farm should also be used w/o self-adaptationVersion 3.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/286SuperNotCalledException does not terminate the execution2016-06-21T12:32:33+02:00Christian WulfSuperNotCalledException does not terminate the execution```
15:04:56.593 ERROR teetime.stage.io.ByteArrayFileWriter:ByteArrayFileWriter-0 - Could not trigger signal.
teetime.framework.SuperNotCalledException: The super method onTerminating was not called in ByteArrayFileWriter-0
at teetim...```
15:04:56.593 ERROR teetime.stage.io.ByteArrayFileWriter:ByteArrayFileWriter-0 - Could not trigger signal.
teetime.framework.SuperNotCalledException: The super method onTerminating was not called in ByteArrayFileWriter-0
at teetime.framework.AbstractStage.checkSuperCalls(AbstractStage.java:248)
```
```java
try {
signal.trigger(this);
checkSuperCalls(signal);
} catch (Exception e) {
this.logger.error("Could not trigger signal.", e);
this.getOwningContext().abortConfigurationRun();
}
```Version 3.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/287RunnableConsumerStageTest.testWaitingInfinitely() should terminate gracefully2016-06-21T12:32:33+02:00Christian WulfRunnableConsumerStageTest.testWaitingInfinitely() should terminate gracefullyVersion 3.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/288Custom Pipes lead to an error2016-06-21T12:32:33+02:00Nelson Tavares de SousaCustom Pipes lead to an errorsee teetime.framework.RunnableConsumerStageTest.testWaitingInfinitely() see teetime.framework.RunnableConsumerStageTest.testWaitingInfinitely() Version 3.0https://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/289Remove teetime.framework.AbstractRunnableStage.create(AbstractStage)2016-07-19T12:32:26+02:00Christian WulfRemove teetime.framework.AbstractRunnableStage.create(AbstractStage)Problem:
Due to AbstractRunnableStage.create(AbstractStage), AbstractRunnableStage must know its sub classes.Problem:
Due to AbstractRunnableStage.create(AbstractStage), AbstractRunnableStage must know its sub classes.Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/292Improve message "terminating infinite producers..."2016-09-09T12:32:34+02:00Christian WulfImprove message "terminating infinite producers..."Problems:
- The message is displayed even if the config does not declare any infinite producers.
- The message suggest an ongoing action that has not yet finished.
Solutions:
- Only display the message if there is at elast one infi...Problems:
- The message is displayed even if the config does not declare any infinite producers.
- The message suggest an ongoing action that has not yet finished.
Solutions:
- Only display the message if there is at elast one infinite producer.
- Add a message like "Infinite producers have been terminated."Version 3.0Nelson Tavares de SousaNelson Tavares de Sousahttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/299Execution constructor does not behave correctly according to API description2017-03-22T10:26:18+01:00Nils Christian EhmkeExecution constructor does not behave correctly according to API descriptionAccording to the API description of the constructor `public Execution(final T configuration)`, the port validation is skipped. However, it calls the second constructor with validationEnabled=true and performs the validation of the stages...According to the API description of the constructor `public Execution(final T configuration)`, the port validation is skipped. However, it calls the second constructor with validationEnabled=true and performs the validation of the stages/ports.
(Version is 2.1)Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/300Execution.executeNonBlocking should return a future object2017-08-06T07:23:30+02:00Nils Christian EhmkeExecution.executeNonBlocking should return a future objectIt is currently cumbersome to work with an execution that has been started with executeNonBlocking. I want to provide the caller an object that can be used to cancel the execution or to wait for the execution to be finished. Currently I ...It is currently cumbersome to work with an execution that has been started with executeNonBlocking. I want to provide the caller an object that can be used to cancel the execution or to wait for the execution to be finished. Currently I would have to implement an own class for this task or return the whole execution.
It would probably be better to return a class like this by default. Suggestion: Either let the execution implement a suitable interface and simply return the execution or implement a simple class for this job (preferable with the default Java concurrent API - this would reduce the impact of the TeeTime API on the rest of the application).Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/303Finding producer stages in not connected architecture2016-11-11T11:15:29+01:00Lars Erik BlümkeFinding producer stages in not connected architectureThis issue occurred during the tests of KIEKER's RealtimeRecordDelayFilter (RRDF). The RRDF should consist of two stages: At 1st [a consumer stage](https://build.se.informatik.uni-kiel.de/teetime/kieker-teetime-stages/blob/4fb2f03bc8db7d...This issue occurred during the tests of KIEKER's RealtimeRecordDelayFilter (RRDF). The RRDF should consist of two stages: At 1st [a consumer stage](https://build.se.informatik.uni-kiel.de/teetime/kieker-teetime-stages/blob/4fb2f03bc8db7d0f888c12a9d337edc5b400b78f/src/main/java/kieker/analysis/plugin/filter/record/realtimerecorddelay/components/RealtimeRecordDelayConsumer.java) which simply receives incoming records and stores them in a queue and at 2nd [a producer stage](https://build.se.informatik.uni-kiel.de/teetime/kieker-teetime-stages/blob/4fb2f03bc8db7d0f888c12a9d337edc5b400b78f/src/main/java/kieker/analysis/plugin/filter/record/realtimerecorddelay/components/RealtimeRecordDelayProducer.java) which takes records from the queue, forwards them with a delay according to the record's timestamps and blocks on an empty queue. Both stages, consumer and producer, are kept together in [a composite stage](https://build.se.informatik.uni-kiel.de/teetime/kieker-teetime-stages/blob/4fb2f03bc8db7d0f888c12a9d337edc5b400b78f/src/main/java/kieker/analysis/plugin/filter/record/realtimerecorddelay/RealtimeRecordDelayFilter.java).
**Problem:** With this approach the whole p&f architecture is not connected by ports everywhere. A user of KIEKER will only create a single configuration. TeeTime will now try to find all producer stages starting from an arbitrary stage in the configuration. If the arbitrary stage is located behind the RRDF TeeTime won't be able to find all producer stages in front of the RRDF, if the arbitrary stage is in front of the RRDF TeeTime won't find producer stages behind the RRDF.
See also the [configuration](https://build.se.informatik.uni-kiel.de/teetime/kieker-teetime-stages/blob/4fb2f03bc8db7d0f888c12a9d337edc5b400b78f/src/test/java/kieker/analysis/plugin/filter/record/realtimerecorddelay/RealtimeRecordDelayFilterTestConfiguration.java) of the [abstract RRDF test](https://build.se.informatik.uni-kiel.de/teetime/kieker-teetime-stages/blob/4fb2f03bc8db7d0f888c12a9d337edc5b400b78f/src/test/java/kieker/analysis/plugin/filter/record/realtimerecorddelay/AbstractTestRealtimeRecordDelayFilter.java), [the concrete RRDF test](https://build.se.informatik.uni-kiel.de/teetime/kieker-teetime-stages/blob/4fb2f03bc8db7d0f888c12a9d337edc5b400b78f/src/test/java/kieker/analysis/plugin/filter/record/realtimerecorddelay/TestRealtimeRecordDelayFilterNoAcceleration.java) and issue #304.Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/310Prohibit to create ports for basic stages2017-03-23T07:22:54+01:00Christian WulfProhibit to create ports for basic stagesReason:
For addtional ports, ``execute()`` must be overriden to check for null. This seems to be too complicated and error-prone for novice stage developers.
- AbstractTransformation
- AbstractFilter
- AbstractConsumerReason:
For addtional ports, ``execute()`` must be overriden to check for null. This seems to be too complicated and error-prone for novice stage developers.
- AbstractTransformation
- AbstractFilter
- AbstractConsumerhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/311Switch to Java 1.82017-02-13T07:22:35+01:00Christian WulfSwitch to Java 1.8Guava 22 requires Java 1.8. Moreover, raising the Java version just before the new major release seems to be reasonable.Guava 22 requires Java 1.8. Moreover, raising the Java version just before the new major release seems to be reasonable.Version 3.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/313Remove NotEnoughInputException and returnNoElement()2017-03-16T10:42:00+01:00Christian WulfRemove NotEnoughInputException and returnNoElement()**Current situation:**
If no element was received by any input port, the executing thread checks for termination. The check checks whether all of the stage's input ports are closed.
**Resulting disadvantages:**
Each stage must ...**Current situation:**
If no element was received by any input port, the executing thread checks for termination. The check checks whether all of the stage's input ports are closed.
**Resulting disadvantages:**
Each stage must be implemented so that it invokes `returnNoElement()` if it does not receive any input element. Thus, the stage developer must ensure this contract which cannot statically be analyzed (with low programming effort). Moreover, `returnNoElement()` interrupts the usual control flow although the stage developer has not written a `return` statement and has not thrown an exception by his own. And all of this is only necessary to **check for termination by consumer stage threads**.
**Proposed Improvement:**
Each stage holds a synchronized counter which indicates the current number of its opened input ports. The update of the counter is performed within the synchronized pipes. (a) and (b) are two examples for realization.
```java
public final void close() {
// (a) numOpenInputPorts = getTargetPort().getOwningStage().getOwningThread().getNumOpenInputPorts().decrementAndGet();
// (b) numOpenInputPorts = getTargetPort().getOwningStage().getNumOpenInputPorts().decrementAndGet();
if (numOpenInputPorts == 0) { getTargetPort().getOwningStage().terminateStage(); }
closed = true; // perhaps not necessary anymore
}
```
**Open problem:**
After termination, the stage must consume all remaining elements of its input ports. How to know when the consumption has finished?
Version 3.0Christian WulfChristian Wulfhttps://git.se.informatik.uni-kiel.de/teetime/teetime/-/issues/315DivideAndConquerStageTest runs infinitely2017-03-07T17:19:02+01:00Christian WulfDivideAndConquerStageTest runs infinitelyVersion 3.0Christian WulfChristian Wulf