v2.4.0beta3 "Chimera" (2017-Sep-01) ----------------------------------- Simplifications to the code structure for streamlined use. This work requires Java 8+ as it relies on static methods in interfaces. * CalculatorConfig singleton: fix execution of all tests, run time back to previous level. * Split Analysis.java into three parts: - The Analysis interface that also provides static methods for simple execution of analyses. - The abstract class AbstractAnalysis holds member variables for the network, the configurations and the results. All analyses in de.uni_kl.cs.disco.nc.analyses extend AbstractAnalysis and implement Analysis. * Split ArrivalBound.java into three parts: - The minimal ArrivalBound interface. - The abstract class ArrivalBoundDispatch that applies the configured arrival boundings. - The abstract class AbstractArrivalBound holds member variables for the network and the configurations. All arrival bounds in de.uni_kl.cs.disco.nc.arrivalbounds extend AbstractArrivalBound, all but the sink-tree version also implement ArrivalBound. - Reworked the arrival bound dispatcher to reuse a single object per arrival bound alternative instead of creating a new one for every call. * Merge Interface, Factory and Utils classes where possible: - CurvePwAffine, incl. DNC and MPA_RTC Curves. - LinearSegments. - Num and all its implementations. * Disco (min,+)-algebraic operations: - Moved to new package de.uni_kl.cs.disco.minplus.dnc - All convolutions and deconvolutions are called via a dispatcher, MinPlusDispatch.java. - Extension to manipulate MPA RTC curves with their native operations is not yet tested. * CurvePwAffineUtilsDispatch was not a dispatcher but an utils class: - Renamed to CurvePwAffineUtils. - Made it an abstract class. * LinearSegmentFactoryDispatch is not dispatching but a factory itself; renamed to LinearSegmentFactory. * Merge of MinPlusInputChecks and MinPlusDispatch to MinPlus. v2.4.0beta2 "Chimera" (2017-Aug-17) ----------------------------------- * Interface and Dispatcher naming: interfaces do not have a suffix, dispatchers now suffixed with "Dispatch". - CurvePwAffineFactory renamed to CurvePwAffineFactoryDispatch - CurvePwAffineFactoryInterface renamed to CurvePwAffineFactory - CurvePwAffineUtils renamed to CurvePwAffineUtilsDispatch - LinearSegmentFactory renamed to LinearSegmentFactoryDispatch - NumFactory renamed to NumFactoryDispatch - NumFactoryInterface renamed to NumFactory - NumUtils renamed to NumUtilsDispatch - NumUtilsInterface renamed to NumUtils * Dispatch classes are all abstract now. * Renamed OperatorInputChecks to MinPlusInputChecks. * Made LinearSegmentUtils an abstract class (it only provides static methods). * Reworked CalculatorConfig.java to singleton pattern (improves tests run time considerably). v2.4.0beta1 "Chimera" (2017-Aug-02) ----------------------------------- * An alternative curve backend for the DiscoDNC analyses: This release wraps the MPA RTC Toolbox's curve implementation to be used with the DiscoDNC. It continues the work presented at ECRTS 2017: Philipp Schon and Steffen Bondorf, Towards Unified Tool Support for Real-time Calculus & Deterministic Network Calculus. The required MPA RTC library is available at www.mpa.ethz.ch/Rtctoolbox/ * Package naming now complies with the Java rules. Our domain disco.cs.uni-kl.de translates to the package prefix de.uni_kl.cs.disco. v2.3.5 "Centaur" (2017-Jun-25) ------------------------------ * Network.java: - Reduced amount of arrival curve copies. - SaveAs won't fail if the directory already exists. * AnalysisResult.java: - Reduced visibility of delay and backlog bound variables from public to protected. - Get methods are public, set are protected (and overwritten by extending classes) so they are only accessed by the respective analysis. * OutputTest.java: Catch and print potential exceptions thrown when loading and instantiating the just compiled test network class. * Test documentation 2.0beta2 - Update to new file naming scheme (see v2.3.3 changes). - Sources: LyX files updated to version 508 (requires LyX 2.2+). v2.3.4 "Centaur" (2017-May-19) ------------------------------ * Added Flow Prolongation to the PMOO Analysis (but not the functional tests). See: Better Bounds by Worse Assumptions – Improving Network Calculus Accuracy by Adding Pessimism to the Network Model (Steffen Bondorf), In Proceedings of the IEEE International Conference on Communications (ICC 2017), May 2017. * DncTestResults: Added missing copyright header. v2.3.3 "Centaur" (2017-Apr-22) ------------------------------ * Analysis Result: Removed obsolete flag "succeeded". * Enum Multiplexing was moved from Server to AnalysisConfig. * InNetwork was renamed to NetworkFactory as well as extended for this purpose. * Convolution.java, convolve_SC_SC_RLs: Fix for the case that two rate-latency service curves should be convolved, yet, two null objects are given. * FunctionalTests, renamed to DncTests: - New naming scheme including more information. - Separated networks from the tests and expected results. - Reduced complexity of individual tests classes by moving code to the super class DncTest. - Replaced System.out.println( e.toString() ) with e.printStackTrace(). - Converted the output test to a JUnit test automatically compiling the generated class. - Performance improvements. v2.3.2 "Centaur" (2017-Mar-13) ------------------------------ * Advanced the structure of package unikl.disco.nc (sub-)packages for analyses, arrivalBounds and operations. * OutputBound.java: New class in unikl.disco.nc.operations providing the DNC output bound computation (reduces code duplication). * LeftOverService: A generic compute(...) method dispatches according to the analysis configuratoin's multiplexing flag. Used in SFA and PbooAB. * Fix: PBOO Arrival Bounding with per-hop left-over service now uses each server's max SC instead of an overly pessimistic entire common path's one. * Fix: PMOO Arrival Bounding's shortcut for single-hop subpaths was actually dead code before. * Added findbugs library. v2.3.1 "Centaur" (2017-Feb-28) ------------------------------ * Evolved the factory pattern for Num implementations to a (kind of) abstract factory pattern for simplified code and improved extensibility. * Package minplus: Improved stability by handling distorted input (null or empty sets). * Deconvolution: Renamed private method deconvolveGeneric to deconvolve_mTB_mRL to better reflect its capabilities. v2.3.0 "Centaur" (2017-Jan-11) ------------------------------ * Rework of the number abstraction layer in unikl.disco.numbers: The DiscoDNC is now built on a factory pattern with four implementations -- the lower body and the four legs of our new Centaur release. - Num.java is now an interface to be implemented by the actual number representations in unikl.disco.numbers.implementations. - NumFactory.java provides methods to create a number, takes care of the representation given in the CalculatorConfig. - NumUtils.java provides methods to work with objects implementing the Num interface. - unikl.disco.numbers.implementations provides four implementations: - Real numbers with single precision or double precision. - Both provide a flag to account for potential rounding errors when comparing numbers (comparison_epsilon). - Rational numbers based on Integer or BigInteger (requires Apache Commons Math 3 and special values in unikl.disco.numbers.values). * Convolution.java: Improvements for convolution involving \delta_T. * Functional Tests: Further streamlined test configuration generation. * Curve.java: isBurstDelay() was removed, functionality is provided by isDelayedInfiniteBurst() since version 2.2.7. * Network.java: Fixed getting a server by its ID (had an offset of +1 before). * Removed methods that were deprecated in v2.2. * Path.java: Renamed createNullPath to createEmptyPath. * Updated the output tests (also serves as the demo for saving a network and reusing it). * Better distinction between number zero and null objects: - Renamed *null{Segment,Curve,ArrivalCurve,ServiceCurve,MaxServiceCurve}* to *zero{Segment,Curve,ArrivalCurve,ServiceCurve,MaxServiceCurve} * - Convolution of an arrival curve with a null object now returns the arrival curve instead of a zeroArrival curve. * CalculatorConfig.java: NUM_CLASS is now only accessible via get and set. * Various fixes , performance improvements (e.g., suggested by Coverity Scan and FindBugs), reduced code duplication, improved parameter naming, etc. v2.2.8 "Heavy Ion" (2016-Dec-06) -------------------------------- * Fixed bugs concerning the delay and backlog bounding with \delta_T, T>0, service curves (delayed infinite burst). * Improved JavaDocs for use_gamma and use_extra_gamma Thanks to Mathias Kreider from the GSI Helmholtz Centre for Heavy Ion Research for reporting these bugs. This release was code named "Heavy Ion". v2.2.7 "Hydra" (2016-Nov-17) ---------------------------- * Fixed a bug when convolving \delta_T with T>0 (delayed infinite burst). * Curve.java: - is_zero_delay_infinite_burst was replaced by the more general is_delayed_infinite_burst. - Visibility was restricted, reading the value is enabled by isDelayedInfiniteBurst(). * LinearSegment.java: Constructors that accept primitive double arguments were added. * FunctionalTests: - Streamlined test config generation. - assertEquals based on double values now considers the internal number representation's rounding error safety margin epsilon. v2.2.6 "Hydra" (2016-Mar-31) ---------------------------- * Added the arrival bound burstiness reduction of the MMB & DFT 2016 paper "Improving Cross-Traffic Bounds in Feed-Forward Networks - There is a Job for Everyone". It can be switched on in the analysis configuration by setting the flag ab_consider_tfa_nodeBacklog to true. * Apache Commons Math version updated to 3.6.1. v2.2.5 "Hydra" (2015-Sep-29) ---------------------------- * Fixed deconvolution for delivering too optimistic results for some combinations of multi token buckets and multi rate latencies. Remember: The DiscoDNC is only tested for token-bucket arrivals and rate-latency service. Any other offering will is best effort. Please report encountered bugs. * Curves: Creating a curve with specified segments count: All but the first segment will be leftopen. * Changed constructor visibility in NumDouble from protected to public. * Demo4: Removed unused server and link. v2.2.4 "Hydra" (2015-Aug-15) ---------------------------- * ArrivalCurve: Performance improvement computing an arrival curve's burst. * Network: Increased robustness against potential null pointers. * JavaDocs cleanup: Existing documentation can now be compiled without any warnings or errors. * Curve.java: Unified function names: {create,initialize}BurstDelay renamed to {create,initialize}DelayedInfiniteBurst. * Curve.java: Reduced code duplication. * Curves: Deprecated unused functions for later removal and easier maintenance. * Ant build script to generate the DiscoDNC library. * Minor cleanups, better variable naming and other improvements. v2.2.3 "Hydra" (2015-Jul-11) ---------------------------- * Removal of the arrival bounding with the output arrival curve (PbooArrivalBound_Output_PerHop). Besides being deprecated since v2.0.0, it was broken by now. * The rejoining flows fix has been improved. * AnalysisResults classes used for internal storage of results have been moved into Analysis.java. * Analysis.java now offers convenient static methods to start an analysis that return an object of the respective analysis. * Minor improvements to comments. * Functional Test Documentation: Layout bug in FeedForward.pdf fixed. v2.2.2 "Hydra" (2015-Jul-02) ---------------------------- * Bugfix: Arrival bounding of flows at the servers they rejoin the flow of interest was fixed. * NumDouble: Improved stability by catching double rounding error preventing a subtraction to result in exactly 0. * PmooAnalysis: Improved checking the stability constraint and returning a null service curve if violated. Thanks to Paul Nikolaus for pointing out potential problems with the previous version. * Convolution: Added a shortcut for the case that at least one of the service curves to convolve is zero. * Curve.getTBBurst() now correctly handles rate functions. * Network: Stability improvements. * Demos: Code cleanups and simplifications. * Functional tests: FeedForward test documentation was updated to version 2.0beta. v2.2.1 "Hydra" (2015-Jun-15) ---------------------------- * Bugfix: Deconvolution with the zero delay, infinite burst-service curve (delta_0) always yielded delta_0 as result. Thanks to Fabien Geyer for discovering this bug. * Added functions de-/convolving sets of curves. * Improved saving of large networks (see unikl.disco.tests.output.TestNetwork): - Functions creating serves, links and flows have been split up to be smaller than 65536 bytes. - Remaining problem for large networks: Constant pool (i.e., total amount of servers, links, flows) exceeding 65536 entries results in a failure. * Minor clean ups and efficiency improvements. v2.2.0 "Hydra" (2015-May-15) ---------------------------- * This is the first version checked with Coverity Scan (incl. FindBugs). We fixed all the uncovered performance issues and now pass the checks with 0 defects. * Reworked the Num classes in order to allow switching the number representation with a flag in CalculatorConfig (see below): - Num is now an abstract class that coordinates creation of and calls to the right number representation. * CalculatorConfig: New flag NUM_CLASS to set the internal number representation: - Replaces previous need to copy the respective classes content of Num. - Be careful: Switching the number representation while the calculator is running will result in casting exceptions! * Package structure: All number related classes have been moved to unikl.disco.numbers. * Num_Fraction: - Adapted structure to Num_double, i.e., it now holds a Fraction object instead of extending Fraction. - Check for special value representation (infinity, NaN) is now done once at creation time instead of on demand before every operation. - Rewrote some operators to use Fraction's functionality more. * Functional tests now run with both number classes each. * unikl.disco.network.*: Reworked the to*String methods to remove dependency on the static calculator configuration. * Dependencies: - Java 8 is now strictly required: We call static hash code functionality on Double, Boolean, and maybe others. - Apache Commons Math: - Update of bundled version to 3.5. - It is not a hard dependency anymore. - hamcrest-core 1.3 was updated to java-hamcrest 2.0.0.0. * Bugfix in PmooArrivalBound's shortcut for cross-traffic tandems of a single hop (not spotted by functional tests). * Bugfix in Network's createPath for single hop paths. * Bugfix for per-flow arrival boundings restoring tightness of results (correctness was not compromised). * Various performance and stability improvements. v2.1.1 "Hydra" (2015-Mar-23) ---------------------------- * Network: - Version in SaveAs output changed to 2.1. - Added numLinks() and numFlows(). - Added a copy() function returning a deep copy. * Analysis classes: - getServerAlphasMapString() returns readable version of the map. - TbRl specific de-/convolution setting is now taken into account correctly. - Rework to use a results object internally. * Arrival bounding: - In case of no left-over service, a zero delay infinite burst arrival curve will be returned instead of raising an exception. - Improved sanity checks. - TbRl specific de-/convolution setting is now taken into account correctly. - Sub-classes of ArrivalBound do not call its static functions anymore. * Deconvolution: Removed unused functions. * Functional tests: Test names now include the test configuration, i.e., the output of FunctionalTestConfig's toString(). * Dependencies: Apache Commons Math as now a hard dependency. * Obsolete class unikl.disco.nc.Configuration was removed. * Various minor improvements. v2.1.0 "Hydra" (2015-Feb-25) ---------------------------- * Notable API break (non-exhaustive list) - performAnalysisOnPath, performEnd2EndAnalysis -> performAnalysis (path determined by input parameters) - createBurstDelay -> createDelayedInfiniteBurst, createZeroDelayBurst -> createZeroDelayInfiniteBurst * INFOCOM 2015 SensorNC paper results - Efficient PMOO cross-traffic arrival bounds in sink trees with token bucket arrivals and rate-latency service curves. * Configuring the calculator has been reworked - AnalysisConfig holds all parameters relevant to an analysis and its arrival bounding. It is instantiated and handed to the analysis. - CalculatorConfig holds static flags for enabling internal checks during the computation etc. - FunctionalTestConfig extends AnalysisConfig by additional parameters tested. * New class for almost concave maximum service curves (MaxServiceCurve). * Network: Improved saving of big networks. Previously the output easily exceeded Java's 64KB method size limit. - SaveAs and toString now produce different outputs: reusable code and simple string representation. - The code output of SaveAs now produces distinct methods for adding servers, links, and flows to the network. - toString methods of network components was also improved. - Added a test package with three simple classes for the new saving code. * Curve: Removed unused methods. * Functional Tests: - Removed maximum service curve. Neither is it included in the documentation not did it have any influence. - Removed tests including deprecated PbooArrivalBound_Output_PerHop. - Streamlined tests and remove code duplication. - Increased test coverage to include BacklogBound.derivePmooSinkTreeTbRl where applicable. - Total amount of tests is now at 21120. * SeparateFlowAnalysis, PmooAnalysis: The end-to-end service curve now be computed for a given aggregate of flows. * Various minor improvements. v2.0.4 "Hydra" (2015-Jan-30) ---------------------------- * Server: Replaced boolean-based multiplexing definition with an enum. * LeftOverService, bounds: Fixed derivations with zero delay, infinite burst service curves. * Functional tests: - Improved the structure. - Extended tests to consider both multiplexing settings, globally defined and server locally defined. * Configuration: defaultArrivalBoundMethods() now correctly sets the arrival_bounding to PBOO_CONCATENATION instead of PBOO_PER_HOP. * Streamlined sanity checks in LeftOverSerice's fifoMux(...) and Deconvolution's deconvolve(...). * Demos: Extended output to match the more comprehensive one or the functional tests. * JavaDocs - Added documentation to Network and Path about their interpretation and the behavior of analyses using them. - Minor clarifications in other parts. * Test documentation: Fixed layout of Tree.pdf such that everything is visible again. * Updated bundled libraries: - Apache Commons Math version updated to 3.4.1. - JUnit version 4.12. v2.0.3 "Hydra" (2014-Dec-30) ---------------------------- * Curve, LinearSegment: Moved static methods working on linear segments from Curve to LinearSegment. * Num, Num_double, Functional tests: - Account for rounding errors when using the double based number representation. - Functional tests now also succeed with the double number representation. - Changed the default number representation to doubles. * Functional tests: - Make console output optional. - Minor code rework, unified variable naming. * ArrivalBound: - Improvements to make the class static. - Reduced overhead in case there's only a single arrival bounding method configured. * Network: - Add missing addServer method with signature ( String alias, ServiceCurve service_curve, boolean arbitrary_mux, boolean use_gamma, boolean use_extra_gamma ). - Reduced amount of internal copies of parameters. * PMOO-AB, PBOO_Concat-AB, PBOO_PerHop-AB: Throw Exception if there's no service left during arrival bounding. * PMOO-AB: Shortcut for PMOO left-over service curve derivation if the path only consists of a single server. * PBOO-OutputBound-AB, Configuration, Tests: Pushed deprecation of PbooArrivalBound_Output_PerHop by moving its rec/iter-configuration option from Configuration to the class itself. * Test documentation: - Update naming scheme to match latest publications (prev. nomenclature). - Documentation files contain a version number and possibly a changelog and acknowledgements. - Started adapting PMOO's T^{l.o.} computation to be closer to the code (only in FeedForward as of now). - Minor fixes in the single server documentation. * Apache Commons Math: Updated bundled version to 3.4. v2.0.2 "Hydra" (2014-Nov-19) ---------------------------- * New feature: Network configurations can now be saved in a format that allows for reuse: - Curves, LinearSegment, Num: Added constructors parsing a string representation of curves. - Curves, Num_double: Reduced code duplication. - Path: Changed visibility of constructor Path( Server single_hop ) to public (see comment there for reasoning). - Network: Improved creation of paths from lists of servers or links, saving functionality. * Arrival bounds: Removed duplicate local variables. * Functional tests: - Extended functional tests to check for unexpected exceptions. - Moved remaining static configuration options to FunctionalTests to reduce code duplication. * Curve: Improved decomposition of curves into rate latencies or token buckets for PMOO. * ServiceCurve: Removed effectively dead sanity check. * Minor improvements of the documentation and naming of internal variables. v2.0.1 "Hydra" (2014-Oct-16) ---------------------------- * Bugfix in ArrivalBound. Removed bad sanity checks always resulting in false. * Server, Flow: Removed internal ID from string output. * Flow: Removed unnecessary throws declaration from getServersOnPath(), string representation does not convert alias to lower case anymore. * Path: Cleaned up usage of LinkedList instead of List, removed “throws Exception” from constructors. * Network: Reworked toString to produce pseudo-code close to the creation of a network, renamed parameter in getFlowsPerServer and getFlowsPerSubPath to use application-agnostic vocabulary. * LinearSegment, curves: Added toString() method to LinearSegment and call it from when converting curves to strings rather than using internal conversion code, reduced code duplication across the toString() methods. * Curve: Added a patch to the shiftRight-method to handle rounding errors with the double-based number representation that can lead to violating the f(0)=0 requirement. * Configuration: Consistent naming (defaultArrivalBoundCalculations -> defaultArrivalBoundMethods), Changed default arrival boding method from PBOO_PER_HOP to PBOO_CONCATENATION. * Demos: Made sure all intermediate results will be printed with information about which server they belong to (TFA, SFA), renamed instances of the analyses to match functional tests (sf -> sfa and tf -> tfa). * Functional tests: Completed combinations of code paths that can be tested and reduced code duplication while doing so. The number of functional tests increased from 1800 to 8200. * Apache Commons Math: Updated bundled version to 3.3. * Minor improvements of the documentation and naming of internal variables. v2.0.0 "Hydra" (2014-Oct-02) ---------------------------- Please see http://disco.cs.uni-kl.de/index.php/88-projects/169-discodnc-20-dev