eiffel-community / eiffel-gerrit-herald Goto Github PK
View Code? Open in Web Editor NEWService for emitting Eiffel messages over RabbitMQ, triggered by Gerrit events.
License: Apache License 2.0
Service for emitting Eiffel messages over RabbitMQ, triggered by Gerrit events.
License: Apache License 2.0
Periodic builds are setup for this project on Nordix Infrastructure as part of Eiffel Infrastructure and CI/CD establishment work Phase 1.
It is important the builds are reviewed by the project to ensure the build process is correct.
It would also be good if the artifact is fetched from Nordix Registry and verify it works.
Here are more details.
Build process.
podman build --log-level error --tag registry.nordix.org/eiffel/eiffel-gerrit-herald:latest .
podman pull registry.nordix.org/eiffel/eiffel-gerrit-herald:latest
docker pull registry.nordix.org/eiffel/eiffel-gerrit-herald:latest
What we need from you is
podman pull registry.nordix.org/eiffel/eiffel-gerrit-herald:latest
docker pull registry.nordix.org/eiffel/eiffel-gerrit-herald:latest
and anything else you may think if.
Please note that upcoming phases will enable testing as well and we will reach out to you when the time comes.
Setup builds for the project
N/A
Project will have builds available
N/A
The log message emitted when a required configuration file propery is unset isn't helpful:
07:33:58.542 [main] WARN com.axis.eiffel.gerrit.herald.Service - All values in the config file must be set. null
The message should obviously include the name of the missing property. Also, since it indicates a fatal error condition it shouldn't just be warning.
Log messages should be clear and actionable.
The service becomes easier to operate and debug.
None.
This service is currently self-contained and uses a Redis cache to keep track of ids of past events. This is great from a dependency-reduction perspective but carries other limitations.
We should refactor the service to drop the Redis cache and the outbound RabbitMQ code and instead rely on REMReM Publish for publishing messages. Publish relies on REMReM Generate which has a lookup feature that allows it to look up event ids for links against the configured event repository and insert them in the event that a client wants to submit.
I'm planning to use Eiffel as the source of truth for source control changes, including historical changes, i.e. there will be a significant backfill operation. This is partially driven by a desire to compare historical releases but also because I want this service to be able to produce correct data from the start. Right now, only events that Gerrit Herald has sent itself can ever be the target of PREVIOUS_VERSION links. Since some git repos change rarely it can take quite some time before all SCC events have a complete set of links. Backfilling the Redis cache would probably be a workaround.
The current dockerfile has a few problems that are easy to address:
java -jar eiffel-gerrit-herald-1.0.0.jar
command is in the CMD statement which is easily replaced to e.g. add -D
and -Xmx
JVM options, but then you add a dependency to the exact jar filename in the deployment configuration. We can improve this by adding support for an environment variable whose contents is included in the Java command.Reducing the size of the Docker image is obviously a good thing. Providing a standard method of passing JVM options reduces coupling between the source repository and the deployment configuration.
I want to be able to set system properties for the JVM. This is currently inconvenient.
See Motivation.
None, except a slightly increased dockerfile complexity.
SLF4J is used for the logging, which is good. However, we're not declaring a dependency to that library but relying on it to arrive transitively. We're also not including a concrete logging library so the only reason we're getting logs at all is that eiffel-remrem-semantics includes logback (which I think is a bug in that library; see comment thread in eiffel-community/eiffel-remrem-semantics#69). This means that the inclusion of log4j.properties is misleading since that file is never used.
I think we should:
Logging is important and we should make it easy for people who deploy the service to change the logging configuration. Adding missing dependencies is good house keeping.
The configuration properties are currently only loaded from a config.properties file in the jar file's resources (via getResourceAsStream()). There doesn't seem to be a way to externalize this file, i.e. the only way to change the default configuration (something all users will do) is to rebuild the jar file to include the desired configuration. This might be acceptable if you're following the readme file's instruction of cloning the git, modifying the configuration, and running docker-compose up
, but that's not how most sites prefer to operate things.
There should be a way to load the properties from an alternate file. A common pattern is to read a system property that contains the file path (or URL) of the property file to load.
Storing configuration files in the file system rather than welding them into the executable binary is standard practice for most production deployments.
Eiffel Gerrit Herald would be a more viable option for users.
None.
The channel declarations are always active. This rarely works in production settings since it requires the user to have the configure permission for the exchange. Normal users rarely have that permission. It's still useful to be able to declare exchange actively but there must be a configuration option to be able to do passive declarations instead.
By always making active declarations Gerrit Herald will be unable to connect to many real-world RabbitMQ instances.
None.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.