summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-08-03ci: Build Docker image for OpenDC web UIFabian Mastenbroek
This change adds a build step for building the OpenDC web UI as Docker image. We forgot this step and found that the image failed to build during previous commits.
2022-08-03fix(web/ui): Fix Docker deploymentFabian Mastenbroek
This change fixes the Docker deployment of the OpenDC web UI. There have been several updates to the build process of the web UI, which have not taken into account the Docker deployment process. This change addresses these discrepancies.
2022-08-03feat(web/server): Implement database migrations using FlywayFabian Mastenbroek
This change updates the Quarkus-based web server to use Flyway for migrating between schema versions. This enables us to evolve the schema and denote it in SQL.
2022-08-03refactor(web/server): Create standalone OpenDC distributionFabian Mastenbroek
This change updates the Quarkus configuration of the OpenDC web server to serve as a fully standalone distribution that is capable of serving the web UI, web API, and experiment runner. Such an approach vastly simplifies local deployments. For Docker deployments, we create a custom Quarkus profile that uses PostgreSQL and disables the web UI.
2022-08-03fix(web/server): Reduce logging output from web runnerFabian Mastenbroek
This change updates the web server configuration to reduce the logging output produced by simulation runs.
2022-08-03feat(web/runner): Avoid REST layer if possibleFabian Mastenbroek
This change updates the Quarkus extension for the OpenDC runner to avoid the REST layer if possible, by providing an implementation of `JobManager` that directly communicates with the `JobService`. This means the runner does not have to traverse the authentication layer.
2022-08-03refactor(web/runner): Support pluggable job managerFabian Mastenbroek
This change introduces a new interface `JobManager` that is responsible for communicating with the backend about the available jobs and updating their status when the runner is simulating a job. This manager can be injected into the `OpenDCRunner` class and allows users to provide different sources for the jobs, not only the current REST API.
2022-08-03feat(web/runner): Automatically compute experiment parallelismFabian Mastenbroek
This change updates the runner configuration to support specifying the parallelism as zero to let the runtime decide the appropriate number of threads based on the available CPU cores on the machine.
2022-08-03fix(web/runner): Prevent reporting NaN valuesFabian Mastenbroek
This change fixes an issue with the OpenDC web runner where it would report NaN values for some of the metrics due to the topology being empty. This in turn causes issues in the frontend.
2022-08-03fix(web/runner): Gracefully exit on interruptFabian Mastenbroek
This change updates the web runner implementation to gracefully exit the current thread when interrupted.
2022-08-03fix(web/runner): Use correct context ClassLoader for ForkJoinPoolFabian Mastenbroek
This change updates the OpenDC web runner implementation to use the correct context ClassLoader for simulation jobs running inside a ForkJoinPool. By default, the ForkJoinPool will use the system class loader which does not have access to the services needed by the web runner.
2022-08-03fix(web/runner): Register all available trace formatsFabian Mastenbroek
This change updates the Quarkus extension to register all the available trace formats that are on the class path during processing time. Without this change, the OpenDC web runner is unable to load any of the available trace formats via Quarkus.
2022-08-03build: Update to Quarkus 2.11.1Fabian Mastenbroek
This change updates Quarkus to version 2.11.1 which fixes an issue with the Gradle development mode where the working directory was incorrect. This meant that the traces failed to be loaded.
2022-07-29fix(trace/api): Do not cache trace formatsFabian Mastenbroek
This change updates the TraceFormat lookup algorithm to prevent caching the available trace format on first access. Since the result of ServiceLoader depends on the Thread's context ClassLoader, they may differ between different threads. Furthermore, ServiceLoader maintains its own thread-local cache, so we can instead utilize that cache and always use the results returned by it.
2022-07-07build(trace/parquet): Ignore reload4j dependencyFabian Mastenbroek
This change updates the build configuration to ignore the reload4j dependency that was recently added to the hadoop-common module. Reload4j replaces the old unmaintained log4j1 module. However, since we expose this module as a library, we do not want to include a logging implementation in the dependencies. Currently, there are already instances where this new dependency leads to duplicate logging implementations on the classpath.
2022-06-28ci: Bump mikepenz/action-junit-report from 3.0.3 to 3.1.0 (#91)dependabot[bot]
Bumps [mikepenz/action-junit-report](https://github.com/mikepenz/action-junit-report) from 3.0.3 to 3.1.0. - [Release notes](https://github.com/mikepenz/action-junit-report/releases) - [Commits](https://github.com/mikepenz/action-junit-report/compare/v3.0.3...v3.1.0) --- updated-dependencies: - dependency-name: mikepenz/action-junit-report dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-23merge: Update build and runtime dependencies (#90)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 * Fix conversion from UUID to Binary
2022-06-23bug(compute/workload): Fix conversion from UUID to BinaryFabian Mastenbroek
This change fixes an issue with the metric exporting code in OpenDC where a UUID is not converted correctly into a `Binary` object that is consumed by the Apache Parquet library.
2022-06-23build: Update simulator dependenciesFabian Mastenbroek
This change updates the simulator dependencies to the latest available version where possible.
2022-06-16merge: Fix distributed strategy for TensorFlow experiment (#89)Fabian Mastenbroek
This pull request fixes an issue where the distributed strategies for the TensorFlow experiments did not work correctly. ## Implementation Notes :hammer_and_pick: * Limit growth rate for trace construction * Derive device statistics directly from SimMachine * Always recompute power usage when a `SImBareMetalMachine` converges * Add a test case for `MirroredStrategy`
2022-06-15fix(sim/compute): Always recompute power usageFabian Mastenbroek
This change fixes an issue in the `SimBareMetalMachine` implementation where the power usage was only updated after a non-zero duration. However, this would mean that OpenDC would possibly report incorrect power usage values when multiple convergence calls occured at the same timestamp.
2022-06-15fix(exp/tf20): Derive device statistics directly from SimMachineFabian Mastenbroek
This change updates the implementation of SimTFDevice to directly use the metrics provided by the `SimBareMetalMachine` class, instead of computing these metrics itself.
2022-06-09fix(sim/compute): Limit growth rate for trace constructionFabian Mastenbroek
This change fixes an issue where the `SimTrace.Builder` would quickly allocate too much memory when constructing a trace, due to doubling the array sizes each time. Instead, we use the approach used by `ArrayList`, where we increase the array size by 50% every step.
2022-06-09merge: Introduce schema for trace API (#88)Fabian Mastenbroek
This pull request updates the OpenDC trace API to support proper specification of a schema of the tables exposed by the traces. This functionality makes it easier for the API consumer to understand the types exposed by the API. ## Implementation Notes :hammer_and_pick: * Introduce type system for trace API * Add benchmarks for odcvm trace format * Add benchmarks for Azure trace format * Add conformance suite for OpenDC trace API ## External Dependencies :four_leaf_clover: * N/A ## Breaking API Changes :warning: * Removal of typed `TableColumn`. Instead, `TableColumn` instances are now used to describe the columns belonging to some table. * `TableReader` and `TableWriter` do not support accessing arbitrary objects anymore. Instead, only the types supported by the type system are exposed.
2022-06-08test(trace): Add conformance suite for OpenDC trace APIFabian Mastenbroek
This change adds a re-usable test suite for the interface of the OpenDC trace API, so implementors can verify whether they match the specification of the interfaces.
2022-06-07perf(trace/azure): Add benchmarks for Azure trace formatFabian Mastenbroek
This change adds JMH benchmarks for the parsing logic of the Azure VM trace format in order to catch performance regressions.
2022-06-07perf(trace/opendc): Add benchmarks for odcvm trace formatFabian Mastenbroek
This change adds JMH benchmarks for the parsing logic of the OpenDC VM trace format in order to catch performance regressions.
2022-06-07refactor(trace/api): Introduce type system for trace APIFabian Mastenbroek
This change updates the trace API by introducing a limited type system for the table columns. Previously, the table columns could have any possible type representable by the JVM. With this change, we limit the available types to a small type system.
2022-05-18merge: Add embedded experiment runner for dev mode (#87)Fabian Mastenbroek
This pull request adds a new Quarkus extension that starts an embedded experiment runner while the user is in development mode. This allows users to deploy the entire OpenDC stack by using the `quarkusDev` command. By default, the experiment runner will only run experiments on one thread. Though, this setting is configurable. ## Implementation Notes :hammer_and_pick: * Use correct group for Gradle modules * Support client construction without AuthController * Move runner CLI into separate configuration * Remove module nesting in Quarkus extension * Add Quarkus extension for OpenDC runner * Add initial server distribution ## Breaking API Changes :warning: * N/A
2022-05-18feat(web/api): Add initial server distributionFabian Mastenbroek
This change adds a distribution that contains the OpenDC web server implementation based on Quarkus. This distribution should be used by advanced users that whish to deploy a custom OpenDC instance.
2022-05-18feat(web/runner): Add Quarkus extension for OpenDC runnerFabian Mastenbroek
This change adds a Quarkus extension that hosts the OpenDC web runner for a (potentially local) OpenDC API instance. This functionality enables a simplified developer experience by allowing users to spawn the complete OpenDC stack with a single command.
2022-05-18refactor(web/ui): Remove module nesting in Quarkus extensionFabian Mastenbroek
This change updates the OpenDC web UI Quarkus extension to live completely in the `opendc-web` directory, as opposed to adding another level of nesting. This also allows us to properly name the artifacts of the Quarkus extension modules.
2022-05-18refactor(web/runner): Move runner CLI into separate configurationFabian Mastenbroek
This change splits the command line interface from the OpenDC web runner into a separate configuration. We plan to re-use the runner code for a Quarkus extension that integrates the runner in development mode.
2022-05-18feat(web/client): Support client construction without AuthControllerFabian Mastenbroek
This change updates the `OpenDCClient` and `OpenDCRunnerClient` to support connecting to an API that is not protected by authorization. This is useful in a local development context where authorization is explicitly disabled.
2022-05-18build: Use correct group for Gradle modulesFabian Mastenbroek
2022-05-16merge: Update build and runtime dependencies (#86)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 * Fix hotkeys support for React 18 * Update dependencies of web UI * Remove unused dependencies ## Breaking API Changes :warning: * N/A
2022-05-16build(web/ui): Update dependencies of web UIFabian Mastenbroek
This change updates the dependencies of the Next.js-based web UI to their latest available versions where possible.
2022-05-16fix(web/ui): Fix hotkeys support in React 18Fabian Mastenbroek
This change fixes an issue where the library for hotkeys that we previously used does not (yet) support React 18. Instead, we switch to a simpler solution based on React Hooks which is compatible with React 18.
2022-05-16build: Update simulator dependenciesFabian Mastenbroek
This change updates the simulator dependencies to the latest available version where possible.
2022-05-15merge: Build Docker images for build pipeline (#85)Fabian Mastenbroek
This pull request updates the CI build pipeline to also build the Docker images in order to catch any regressions in the deployment process via Docker. ## Implementation Notes :hammer_and_pick: * Build Docker images for build pipeline * Reduce build steps for Docker image * Ensure Node.js is downloaded ## Breaking API Changes :warning: N/A
2022-05-15build(web/api): Ensure Node.js is downloadedFabian Mastenbroek
This change updates the build configuration in order to ensure that Node.js is downloaded onto the build system. This drops an explicit dependency on a system installation of Node.js and allows us to ensure that the project is built against the correct Node.js version.
2022-05-15build(web/runner): Reduce build steps for Docker imageFabian Mastenbroek
This change updates the Dockerfile for the web runner to reduce the number of build steps necessary to build the web runner. Previously, the build would also include/build the web API which is not used in the image.
2022-05-15ci: Build Docker images for build pipelineFabian Mastenbroek
This change updates the CI build pipeline to also build the Docker images in order to catch any regressions in the deployment process via Docker.
2022-05-15ci: Bump docker/login-action from 1 to 2 (#84)dependabot[bot]
Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 2. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v1...v2) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-15ci: Bump docker/build-push-action from 2 to 3 (#83)dependabot[bot]
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 3. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-06merge: Restructure experiments and remove legacy harness (#82)Fabian Mastenbroek
This pull request restructures the experiments present in the `opendc-experiments` directory and removes the legacy OpenDC Harness. Previously, the experiments were written against the OpenDC Harness, which facilitates generation and execution of scenarios. However, the OpenDC Harness does not integrate well into the web-based workflow of OpenDC, where users should be able to submit scenarios in the web interface and automatically simulate it in the cloud, since the harness relied on a special Kotlin DSL to specify experiments. In future pull request, we'll attempt to introduce a similar approach for specifying and running experiments as we have done for the Radice experiments, where the entire experiment is described in a serializable (JSON/YAML) format. ## Implementation Notes :hammer_and_pick: * Add helper tools for FaaS simulations * Fix infinite loop due to invalid rounding * Convert experiment into integration test * Add independent Capelin distribution * Remove OpenDC Harness modules * Remove unnecessary dependencies ## Breaking API Changes :warning: * Removal of the OpenDC Harness modules. Instead, we now package each experiment individually. We'll focus in the future on extracting common code from the Capelin and Radice experiments so they can be re-used by other experiments as well.
2022-05-06build(trace/parquet): Remove unnecessary dependenciesFabian Mastenbroek
This change removes several dependencies from the `opendc-trace-parquet` helper module, which are part of Hadoop Common, but are not actually used by the Parquet project.
2022-05-06refactor(harness): Remove OpenDC Harness modulesFabian Mastenbroek
This change removes the OpenDC Harness modules from the main repository. We have made the decision to take a different direction regarding the specification and execution of experiments. The design of the current harness does not integrate well with the specification of experiments in the web interface. The new version focuses on proper integration with the web interface, as well as via the command line interface.
2022-05-06refactor(exp/capelin): Add independent Capelin distributionFabian Mastenbroek
This change updates the Capelin experiments so it can be distributed and executed independently of the main OpenDC distribution. We provide a new command line interface for users to directly run the experiments. Alternatively, the `CapelinRunner` class encapsulates the logic for running the experiments and can be used programmatically.
2022-05-06refactor(exp/tf20): Convert experiment into integration testFabian Mastenbroek
This change removes the `TensorFlowExperiment` in favour of an integration test that can be run during CI invocations. Given that the experiment was not very sophisticated (in terms of data collection), we believe it is better suited as an integration test.