This project is designed to evaluate and benchmark the performance of EngFlow's remote execution and caching services. It specifically focuses on testing scenarios involving cyclical-like structures in the dependency graph, which are handled through interfaces and constructor injection.
The primary objectives of this project are to:
- Generate Performance Data: Create examples with cyclical-like dependencies to test and gather performance data for EngFlow’s remote caching and execution services.
- Benchmark Analysis: Compare the performance of local versus remote execution and caching to evaluate the efficiency and effectiveness of the service.
- Support Automation Development: Contribute to the development of automation algorithms for resource assignment by providing valuable data on how cyclical dependencies impact performance.
The project is organized into several packages, each representing different components of the cyclical dependency example:
class_a: ContainsClassAwhich depends onClassBthrough an interface.class_b: ContainsClassBwhich implementsInterfaceBand depends onClassC.class_c: ContainsClassCwhich implementsInterfaceAand can be initialized with a reference toClassA.interface_a: Defines the interfaceInterfaceAimplemented byClassAandClassC.interface_b: Defines the interfaceInterfaceBimplemented byClassB.main: Contains theMainclass which processes the input file.input: Contains the input text file used by theMainclass.
The program takes a text input file and recursively prints each word with each class (ClassA prints a word, then ClassB, and so on) until the string is empty. The input file should be specified in the data attribute of the java_binary rule in the BUILD file.
To run the tests and gather performance data, use the following Bazel command:
bazel test //java/com/engflow/internship/cycleexample/class_a:class_a_test