-
Notifications
You must be signed in to change notification settings - Fork 260
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Release pipeline times out syncing artifacts #2704
Comments
From a quick look
One possibility would be to see if we can issue calls to the blocking sync curl op in parallel -- unclear what limiting jfrog may apply. Some techniques for bash parallel jobs are at https://unix.stackexchange.com/questions/103920/parallelize-a-bash-for-loop It's likely 3-4 retries should work - so at a minimum a parallel level of 4 may work (if we use true parallel) or a little more if batching. I'd be inclined to go with a value like 8. @bramwelt any other ideas? I'll complete manually for this release (1.5) but aim to address for 1.6 following the above idea if nothing better surfaces! |
When executing the parallel loop we probably want to continue even a failure occurs, as any issue is likely to be for a specific artifact. At the end of the loop it would be useful to summarize what was processed ok, and what failed, and set the final return code to success only if EVERY sync worked correctly. |
For reference here is the current script from the pipeline definition
|
Obviously adding a '&' at the end of the sync package could work, but more likely bintray might object to >200 at once (untested). Also it's not the clearest way to collect results. GNU Parallels is interesting, but the license /attribution may be problematic. |
Tried some basic parallelism (without summarizing final status based on http response)
The sync gets launched as I expected. However jfrog api starts returning errors. I am guessing it cannot handle parallel requests - even though the temporary repo is unique ie:
|
Reverted the parallelism to N=1 (ie left code in place) - seems to cause additional issues over and above the prior kind of sync issues we've had (JCenter, poms etc) |
@bramwelt did you find any official documentation for this API? I wonder if there's any other parms that may affect the behaviour, such as the identity of the staging repo. Currently it looks as if one is automatically created when the api call is made... but it's not safe when calls overlap. If we can control it, having a single repo for the 'run' and then only 'committing' if EVERY package got updated would give us the transactionality I referred to above and stop a new release dribbling out over many days as we fight any issues, or simply wait for the slow sync to complete |
ie
|
On the transactionality/staging repository issues, as per https://help.sonatype.com/repomanager2/staging-releases/managing-staging-repositories it looks like our current process will open maven central staging repos for each ip/UA/org combo. For the next release I'm inclined to try with close:0 in our script - it may be all our artifacts will then go into a single staging repo. That might a) allow all to be released at once and b) address issues with parallelism. |
This went through with 2 attempts in R1.6 which is a lot better. Moving to 1.7 to monitor |
will summarise current issues in 1.8 timeframe and request assistance from LF team |
Have requested LF help -> https://jira.linuxfoundation.org/servicedesk/customer/portal/2/IT-19687 |
Will track in #3914 |
The final step of our release pipeline is to synchronize artifacts from bintray to maven central
However this is very slow, and with our number of artifacts (200 or so) it times out, since the Virtual Machine is terminated after 6 hours.
Need to investigate
The step can be restarted and will continue from where it left but requires human intervention.
Finally it's worth noting that there is no 'transactionality' on this sync from bintray to maven central. If instead it was possible to sync from bintray to a staging area at maven central, we could at least hold back on the final commit until all artifacts are synced. Currently we have hours or days where we have an incomplete release on Maven Central, which could cause confusion.
IN MORE DETAIL
Example: https://dev.azure.com/ODPi/Egeria/_releaseProgress?_a=release-environment-logs&releaseId=116&environmentId=348
Error reported (by pipelines)
Failing step: Sync Missing Package to Maven-Central
Progress log:
From this we can see we didn't get that far (alphabetical) and each package at this stage is taking 4 minutes
Mitigation
To kick off the step again, open up the pipeline, click on this step in the graphical view and select 'redeploy' Accept the defaults, and the step will start running again, and sync will pick up where it left off. This may be needed a number of times. Each time will run for 6 hours then stop.
The text was updated successfully, but these errors were encountered: