summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-11-26merge: Update build and runtime dependencies (#118)Fabian Mastenbroek
This pull request updates the build and runtime dependencies used by OpenDC to their latest version compatible with the project. ## Implementation Notes :hammer_and_pick: * Update simulator dependency versions * Update Gradle to 7.6 ## External Dependencies :four_leaf_clover: * Gradle * Quarkus * Slf4j * Spotless * Sentry
2022-11-26build: Update simulator dependenciesFabian Mastenbroek
This change updates the simulator dependencies to the latest available version where possible.
2022-11-25build: Update to Gradle 7.6Fabian Mastenbroek
This change updates the Gradle wrapper version to 7.6 in order to support building the project with Java 19.
2022-11-16build(site): Bump loader-utils from 2.0.3 to 2.0.4 (#117)dependabot[bot]
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.3 to 2.0.4. - [Release notes](https://github.com/webpack/loader-utils/releases) - [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.4/CHANGELOG.md) - [Commits](https://github.com/webpack/loader-utils/compare/v2.0.3...v2.0.4) --- updated-dependencies: - dependency-name: loader-utils dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-13merge: Increase minimum Java version to 17 (#115)Fabian Mastenbroek
This pull request increases the minimum version of Java required by OpenDC to 17. This new version of Java introduces several new features compared to our old minimum version (11), which we attempt to apply in this conversion. ## Implementation Notes :hammer_and_pick: * Increase minimum Java version to Java 17 * Use RandomGenerator as randomness source * Add common dispatcher interface * Add compatibility with Kotlin coroutines * Use InstantSource as time source * Re-implement SimulationScheduler as Dispatcher * Replace use of CoroutineContext by Dispatcher ## External Dependencies :four_leaf_clover: * Java 17 ## Breaking API Changes :warning: * The use of `CoroutineContext` and `Clock` as parameters of classes has been replaced by the `Dispatcher` interface. * The use of `Clock` has been replaced by `InstantSource` which does not carry time zone info. * The use of `Random` and `SplittableRandom` as parameter type has been replaced by `RandomGenerator`
2022-11-13test(sim/power): Remove use of Spy object from TestInletFabian Mastenbroek
This change removes the use of a Spy object from the TestInlet class. Since the Spy is not actually used in our tests, we remove it due to the high initialization cost.
2022-11-13docs: Fix links in READMEFabian Mastenbroek
This change fixes the links to the documentation in the project README. These links assumed that the new website was already deployed at opendc.org.
2022-11-13build: Update simulator dependenciesFabian Mastenbroek
This change updates the simulator dependencies to the latest available version where possible.
2022-11-13build: Update to Gradle 7.6-rc3Fabian Mastenbroek
This change updates the Gradle wrapper version to 7.6-rc3 in order to support building the project with Java 19.
2022-11-13build: Make use of Gradle's Java Toolchains featureFabian Mastenbroek
This change updates the build configuration for Gradle to make use of its Java Toolchains feature which enables running/testing multiple Java versions at the same time. This feature can also provision a Java installation if it is not available on the user's system.
2022-11-13refactor: Replace use of CoroutineContext by DispatcherFabian Mastenbroek
This change replaces the use of `CoroutineContext` for passing the `SimulationDispatcher` across the different modules of OpenDC by the lightweight `Dispatcher` interface of the OpenDC common module.
2022-11-13refactor(sim/core): Re-implement SimulationScheduler as DispatcherFabian Mastenbroek
This change updates the `SimulationScheduler` class to implement the `Dispatcher` interface from the OpenDC Common module, so that OpenDC modules only need to depend on the common module for dispatching future task (possibly in simulation).
2022-11-13refactor: Use InstantSource as time sourceFabian Mastenbroek
This change updates the modules of OpenDC to always accept the `InstantSource` interface as source of time. Previously we used `java.time.Clock`, but this class is bound to a time zone which does not make sense for our use-cases. Since `java.time.Clock` implements `java.time.InstantSource`, it can be used in places that require an `InstantSource` as parameter. Conversion from `InstantSource` to `Clock` is also possible by invoking `InstantSource#withZone`.
2022-11-13feat(common): Add compatibility with Kotlin coroutinesFabian Mastenbroek
This change adds support for converting a `Dispatcher` implementation into a `CoroutineDispatcher` instance.
2022-11-13merge: Remove use of Sass (#116)Fabian Mastenbroek
This pull request removes the dependency on Sass for the OpenDC web UI, by converting the existing Sass files into CSS. With the recent updates of CSS, we have no use-case for Sass anymore and sticking to CSS reduces the build infrastructure necessary. ## Implementation Notes :hammer_and_pick: * Drop dependency on Sass * Update web dependencies to latest version
2022-11-13build(web/ui): Update dependencies to latest versionFabian Mastenbroek
This change updates the dependencies of the OpenDC web UI to latest version where possible.
2022-11-13refactor(web/ui): Drop dependency on SassFabian Mastenbroek
This change updates the OpenDC web UI to not rely on Sass for stylesheets. CSS in combination with PostCSS has become powerful enough for our use-cases as indicated by the small differences between the CSS and SCSS versions of our files. By switching to CSS, we can make use of Turbopack to build the project, which is a re-implementation of Webppack in Rust and is able to build projects much faster.
2022-11-09feat(common): Add common dispatcher interfaceFabian Mastenbroek
This change adds a new interface `Dispatcher` that is used throughout OpenDC for scheduling the execution of future tasks. This replaces the `CoroutineContext` and `Clock` that exist on many of the implementations in OpenDC. With this approach, we reduce the dependency on Kotlin Coroutines.
2022-11-09build(site): Bump loader-utils from 2.0.2 to 2.0.3 (#114)dependabot[bot]
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 2.0.2 to 2.0.3. - [Release notes](https://github.com/webpack/loader-utils/releases) - [Changelog](https://github.com/webpack/loader-utils/blob/v2.0.3/CHANGELOG.md) - [Commits](https://github.com/webpack/loader-utils/compare/v2.0.2...v2.0.3) --- updated-dependencies: - dependency-name: loader-utils dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-04refactor: Use RandomGenerator as randomness sourceFabian Mastenbroek
This change updates the modules of OpenDC to always accept the `RandomGenerator` interface as source of randomness. This interface is implemented by the slower `java.util.Random` class, but also by the faster `java.util.SplittableRandom` class
2022-11-04build: Increase minimum Java version to Java 17Fabian Mastenbroek
This change updates the Gradle configuration to target Java 17 (instead of Java 11) as the lowest denominator when running/building OpenDC. This version of Java has been available for more than a year and is the latest LTS release.
2022-10-31merge: Support snapshotting simulated workloads (#113)Fabian Mastenbroek
This pull request adds support for snapshotting simulated workloads in OpenDC, which serves as the basis for virtual machine migration/suspension support. Part of #32 ## Implementation Notes :hammer_and_pick: * Support synchronous update of FlowStage * Report exceptions in onStop as suppressed * Add support for snapshotting workloads
2022-10-31feat(sim/compute): Add support for snapshotting workloadsFabian Mastenbroek
This change updates the interface of `SimWorkload` to support snapshotting workloads. We introduce a new method `snapshot()` to this interface which returns a new `SimWorkload` that can be started at a later point in time and on another `SimMachine`, which continues progress from the moment the workload was snapshotted.
2022-10-31refactor(sim/compute): Report exceptions in onStop as suppressedFabian Mastenbroek
This change updates the implementation of `SimMachineContext` to report exceptions thrown in `onStop` as suppressed exceptions if an exception caused the workload to stop.
2022-10-31feat(sim/flow): Support synchronous update of FlowStageFabian Mastenbroek
This change adds a new method to `FlowStage` called `sync()` which enables users to synchronously update the stage at the current timestamp. This functionality is neccessary to support snapshotting since we need to synchronize the state of the `FlowStage` before creating a snapshot of the workload.
2022-10-28Support custom start-up and clean-up time for VMs (#112)Fabian Mastenbroek
This pull request implements customizable startup and clean-up time for virtual machine. We achieve this by implementing `SimWorkload` chaining and modelling start-up and clean-up time using `SimWorkload` as well. Implements #33 ## Implementation Notes :hammer_and_pick: * Store method parameters in class files * Add completion parameter to startWorkload * Provide workload constructors in SimWorkloads * Add support for resetting machine context * Add support for chaining workloads * Use workload chaining for boot delay * Model host boot time * Do not suspend on guest start * Use static logger field ## Breaking API Changes :warning: * `SimMachine#startWorkload` now has a third parameter `completion` which is invoked when the workload finishes executing (either due to failure or success). * `SimFlopsWorkload` and `SimRuntimeWorkload` can be instantiated via `SimWorkloads`.
2022-10-28perf(compute/sim): Use static logger fieldFabian Mastenbroek
This change updates the `Guest` class implementation to use a static logger field instead of allocation a new logger for every guest.
2022-10-28refactor(compute/service): Do not suspend on guest startFabian Mastenbroek
This change updates the `Host` interface to remove the suspend modifiers to the start, stop, spawn, and delete methods of this interface. We now assume that the host immediately launches the guest on invocation of this method.
2022-10-28feat(compute/sim): Model host boot timeFabian Mastenbroek
This change updates `SimHost` to support modeling the time and resource consumption it takes to boot the host. The boot procedure is modeled as a `SimWorkload`.
2022-10-28refactor(compute/sim): Use workload chaining for boot delayFabian Mastenbroek
This change updates the implementation of `SimHost` to use workload chaining for modelling boot delays. Previously, this was implemented by sleeping 1 millisecond using Kotlin coroutines. With this change, we remove the need for coroutines and instead use the `SimDurationWorkload` to model the boot delay. In the future, we envision a user-supplied stochastic boot model to model the boot delay for VM instances.
2022-10-28feat(sim/compute): Add support for chaining workloadsFabian Mastenbroek
This change adds a new static method `chain` to `SimWorkloads` to chain multiple workloads sequentially.
2022-10-28feat(sim/compute): Add support for resetting machine contextFabian Mastenbroek
This change updates the interface of `SimMachineContext` to allow workloads to reset all resources provided by the machine to the workload. This allows us to implement a `SimWorkload` that can compose multiple workloads.
2022-10-28refactor(sim/compute): Provide workload constructors in SimWorkloadsFabian Mastenbroek
This change introduces a new class SimWorkloads which provides construction methods for the standard workloads available in OpenDC.
2022-10-28feat(sim/compute): Add completion parameter to startWorkloadFabian Mastenbroek
This change updates the interface of `SimMachine#startWorkload` to introduce a parameter `completion` that is invoked when the workload completes either succesfully or due to failure. This functionality has often been implemented by wrapping a `SimWorkload` and catching its exceptions. However, since this functionality is used in all usages of `SimMachine#startWorkload` we instead embed it into `SimMachine` itself.
2022-10-28build: Store method parameters in class filesFabian Mastenbroek
This change updates the build configuration to enable Java to emit method parameter information in the class files. This provides more useful error messages when not enough parameters are given.
2022-10-27merge: Update to Next.js 13 and React 18Fabian Mastenbroek
This pull request updates the web interface to make use of Next.js 13 and React 18. ## Implementation Notes :hammer_and_pick: * Drop dependency on FontAwesome * Update to Next 13 and React 18 * Drop dependency on Roboto font * Make root redirect non-permanent * Do not optimize images for export * Update to Node 18 for the build process * Ensure consistency of build tasks * Update README.md of web UI * Default to anonymous auth domain * Disable configuration of basePath ## External Dependencies :four_leaf_clover: * Next.js 13 * React 18 * PatternFly 4 * Node 18 ## Breaking API Changes :warning: * The base path of the web UI cannot be configured anymore via the Quarkus extension. The previous implementation relied on Next.js internals and this functionality cannot be provided without resorting to hacks. Since this functionality was not actually used, we have removed it for now.
2022-10-27fix(web/ui): Disable configuration of basePathFabian Mastenbroek
This change removes the ability to configure the basePath of the Next.js application using the Quarkus extension. This functionality was brittle due to relying on Next.js internals coping with out replacement strategy. We should wait for Next.js to implement proper support for changing the base path at runtime before making this functionality available again.
2022-10-27fix(web/ui): Default to anonymous auth domainFabian Mastenbroek
This change updates the auth code in the OpenDC web UI to default to the anonymous auth domain if no configuration is provided.
2022-10-27docs(web/ui): Update READMEFabian Mastenbroek
This change updates the README to match the updated build process for the web interface.
2022-10-27build(web/ui): Ensure consistency of build tasksFabian Mastenbroek
This change updates the build script for the web UI to use consistent names for the build tasks.
2022-10-27build(site): Update to Node 18Fabian Mastenbroek
This change updates the build process for the OpenDC website to use Node 18 for building the website.
2022-10-27build(web/ui): Update to Node 18Fabian Mastenbroek
This change updates the build process to use Node 18 for building the web application.
2022-10-27build(web/ui): Do not optimize images for exportFabian Mastenbroek
This change disables optimizing images for exporting, since we do not want to depend on an external service.
2022-10-27fix(web/ui): Make root redirect non-permanentFabian Mastenbroek
This change makes the root redirect to the projects page temporary, to prevent browsers from caching this route indefinitely, while we might add a home page in the future.
2022-10-27fix(web/ui): Drop dependency on Roboto fontFabian Mastenbroek
This change removes the dependency on the Roboto font which was downloaded for every page of OpenDC. Since we do not actually use this font in any of our page, we can safely drop the dependency.
2022-10-27build(web/ui): Update to Next 13 and React 18Fabian Mastenbroek
This change updates the web interface to use Next 13 and React 18. This release has a couple breaking changes (related to links) which we have fixed accordingly.
2022-10-27refactor(web/ui): Drop dependency on FontAwesomeFabian Mastenbroek
This change removes the explicit dependency on FontAwesome. PatternFly also ships with the FontAwesome icons, so use these icons instead to reduce the footprint of the application.
2022-10-21merge: Implement multi-flow stages in simulator (#110)Fabian Mastenbroek
This pull request introduces the new `flow2` multi-flow simulator into the OpenDC codebase and adjust all existing modules to make use of this new simulator. The new simulator models flow as a network of components, which can each receive flow from (potentially) multiple other components. In the previous simulator, the framework itself supported only single flows between components and required re-implementation of many components to support multiplexing flows. Initial benchmarks show performance improvements in the range 2x–4x for large scale experiments such as the Capelin benchmarks. ## Implementation Notes :hammer_and_pick: * Add support for multi-flow stages * Support flow transformations * Add forwarding flow multiplexer * Expose metrics on FlowMultiplexer * Re-implement network sim using flow2 * Re-implement power sim using flow2 * Re-implement compute sim using flow2 * Optimize workload implementation of SimTrace * Remove old flow simulator * Add log4j-core dependency ## External Dependencies :four_leaf_clover: * N/A ## Breaking API Changes :warning: * Removal of the `org.opendc.simulator.flow` package. You should now use the new flow simulator located in `org.opendc.simulator.flow2`. * `PowerModel` interface is replaced by the `CpuPowerModel` interface. * `PowerDriver` interface is replaced by the `SimPsu` and `SimPsuFactory` interfaces. * Removal of `SimTraceWorkload`. Instead, create a workload from a `SimTrace` using `createWorkload(offset)`. * `ScalingGovernor` has been split in a `ScalingGovernor` and `ScalingGovernorFactory`. * All modules in `opendc-simulator` are now written in Java. This means that default parameters are not supported anymore for these modules.
2022-10-21fix: Add log4j-core dependencyFabian Mastenbroek
This change adds the log4j-core dependency to various modules of OpenDC using log4j2, to ensure logging keeps working. The upgrade to SLF4J 2.0 broke the Log4j2 functionality, since the log4j-core artifact is not automatically shipped with the SLF4J implementation.
2022-10-21refactor(sim/flow): Remove old flow simulatorFabian Mastenbroek
This change removes the old version of the flow simulator from the OpenDC repository. The old version has been replaced by the new flow2 framework which is able to simulate flows more efficiently.