[jbosstools-dev] Tests error during local build

Max Andersen manderse at redhat.com
Wed Aug 14 00:48:14 EDT 2013


Just to say I agree with Denis overall idea and on nicks specifics. 
This approach about updating the ci-builds composite to keep ongoing builds running is what we discussed at the f2f.

/max (sent from my phone)
N

> On 14/08/2013, at 02.32, Denis Golovin <dgolovin at exadel.com> wrote:
> 
> On 08/13/2013 12:24 PM, Nick Boldt wrote:
>>>> The stated workflow is already being done [0], except that today:
>>>> * the current (N) and previous (N-1) are composited together into a
>>>> single site [1]
>>>> * the project's previous build is NOT then removed from the composite
>>>> & deleted once the new build is done publishing
>>> What I am trying to tell for a while is having names
>>> staging/staging.previous in update site and physically move content of
>>> staging to staging.previous after every build is not working. In fact
>>> with this approach local/jenkins build failures are unpredictable, when
>>> dev/jenkins runs a long build lets say javaee and suddenly on remote
>>> server publis.sh L585 moves bits like that
>>>  mv \
>>> $DESTINATION/builds/staging/${JOB_NAME} \
>>> $DESTINATION/builds/staging.previous/${JOB_NAME}
>>> 
>>> build fails.
>> 
>> What it actually does is:
>> 
>> 1. rsync new build into staging/${JOB_NAME}.next (slow)
>> 2. delete staging.previous/${JOB_NAME} (slow)
>> 3. move staging/${JOB_NAME} to staging.previous/${JOB_NAME} (fast)
>> 4. move staging/${JOB_NAME}.next to staging/${JOB_NAME} (fast)
>> 
>> Therefore the impact on the composite site is only a few seconds' 
>> outage, unless your build was depending on content in the 
>> *staging.previous site*, in which case, yes, you will likely end up 
>> broken.
>> 
>> This mechanism allows builds in progress, which depend on the CURRENT 
>> Nth build to continue to work even after the new N build replaces the 
>> previous one.
> I am not following you here. While builds in progress is not affected 
> here? If build downloaded metadata from composite update site and picked 
> up latest one (which is staging/${JOB_NAME}) and started downloading 
> artifacts it would fail in case of (3).
>> 
>> For example, if you kick a mvn build, which pings the composite site 
>> to resolve dependencies and sees that staging = B123 and 
>> staging.previous = B122, your build begins fine. But if while you're 
>> building/resolving a new B124 gets published, you'll STILL be fine to 
>> depend on B123 bits, just not the now-deleted B122 bits. Restarting 
>> your job will always cause the dep resolution to restart, whereupon 
>> the metadata will be scanned again and you'll then be building against 
>> staging = B124 and staging.previous = B123.
>> 
>>> Considering it takes couple hours to execute and you have
>>> to do that again and sometimes again until it works, it is not really
>>> convenient.
>> 
>> So are you proposing that instead of an in-place move which reuses 
>> generic folder names like "staging" and "staging.previous", we 
>> composite build output using unique names like 
>> 2013-08-09_05-05-26-B7222/ or 2013-08-13_10-05-28-B7255?
> yes
>> 
>> If so, we would need:
>> 
>> a) to regenerate the composite site each time there's a new build 
>> published, in order to remove the oldest and add the newest (keeping 
>> only the Nth and N-1rst builds)
>> 
>> (I have a script that might already work for this, or would need 
>> tweaking.)
> yes, would be good to be able pass number builds to keep as a parameter.
>> 
>> b) heuristics to determine when an older (N-2, N-3, ... N-z) build is 
>> no longer needed, perhaps simply by assuming no one needs it after 24hrs?
>> 
>> (Once we agree, this is trivial.)
> 24 ours should be more that enough.
>> 
>> c) a cleanup script which can purge all but the builds which are no 
>> more than 1 day old, keeping at all times at least two builds (N and N-1)
>> 
>> (I have a script that already does this for folders like 
>> http://download.jboss.org/jbosstools/builds/nightly/core/trunk/ but 
>> might need to be tweaked to work for a new pattern of 
>> staging/${JOB_NAME}/<BUILD_ID>/ .)
> 
> yes
> 
>> 
>> 
>>>> * the composite*.xml metadata files are not regenerated when
>>>> publishing, but are *manually* updated if/when a new component is
>>>> added or job is renamed
>>> well, they should be updated because:
>>> 1. It would let to avoid moving huge p2repos around and wait while they
>>> are in sync with download.jboss.org
>>> 2. It would take much less time for *.xml files to be available on
>>> download.jboss.org
>> 
>> Actually, the time to publish the bits from Jenkins to 
>> download.jboss.org would not change. We would still need to push bits 
>> to the server, and perform cleanup of old builds. Generating the 
>> composite*.xml files would add some (negligible) time to the process, 
>> but would guarantee that a p2 or tycho user would always get a fresh 
>> timestamp.
>> 
>> Currently, as the composite*.xml files do not change regularly, there 
>> is NO time required to make them available. So, this would actually 
>> introduce some delay, but as I said you'd get fresher files, so it's 
>> perhaps an improvement.
>> 
>>> bing! builds would stop failing so often.
>> 
>> We can certainly try this and verify your hypothesis. :)
>> 
>>> In fact for the future we can even save space by publishing only changed
>>> bits (need to fix qualifier for features/plugins) and it would let to:
>>> 1. Decrease time for syncing with download.jboss.org;
>>> 2. Have installation history actually working and let people use nightly
>>> updates and roll back to previous version if something is wrong;
>>> 3. Increase speed of local/jenkins builds, because no more full
>>> downloads for dependencies
>> 
>> Publishing only changes to a repo would be nice except that it would 
>> mean publishing *destructively on top of existing snapshots*, rather 
>> than creating new ones. So anyone who was currently building against 
>> the N build would probably end up with a broken build as new IUs were 
>> pushed into that build's repo, and its metadata overwritten.
> 
> publishing on top should not be required.
> 
>> 
>> That's definitely worse than what we have today. And would, instead of 
>> having timestamped folders which are unique and don't overlap, put us 
>> back where we are today with reusable, generic folder names like 
>> "staging/${JOB_NAME}".
>> 
>> So, I'm all for a new approach to compositing with regenerated 
>> composite*.xml files, pointing to UNIQUELY VERSIONED folders (rather 
>> than generic reusable ones), then doing cleanup of older N-2, N-3 
>> builds, but I disagree that publishing changed bits into existing 
>> repos is a good idea (even if you use rsync --delete to purge the 
>> orphaned IUs, you'll still end up breaking more builds this way), 
>> which is why we moved AWAY from this approach by implementing the 
>> staging.next/staging/staging.previous shell game.
> 
> This incremental update is tricky to implement and not a priority for us 
> IMO.
> 
> Denis
> 
>> 
>> N
>> 
>>>> 
>>>> [0]
>>>> https://github.com/jbosstools/jbosstools-build-ci/blob/master/publish/publish.sh#L541 
>>>> 
>>>> 
>>>> [1]
>>>> http://download.jboss.org/jbosstools/builds/staging/_composite_/core/trunk/compositeArtifacts.xml 
>>>> 
>>>> 
>>>> This is done because:
>>>> 
>>>> * after the publish of the N build is done, before the bits are
>>>> visible on download.jboss.org, the lag seems to vary from seconds to
>>>> minutes.
>>>> 
>>>> * a build-in-progress which resolved against the N-1 bits will fail if
>>>> those bits suddenly vanish.
>>>> 
>>>> ---
>>>> 
>>>> For the stable branch, the same push-then-rename approach [0] is used
>>>> (rather than destructively pushing on top of an existing build, as we
>>>> did a few years ago), but we only composite [2] the latest (N) because:
>>>> 
>>>> * stable branch builds change less often and
>>>> * we want to guarantee that we're using the latest.
>>>> 
>>>> [2]
>>>> http://download.jboss.org/jbosstools/builds/staging/_composite_/core/4.1.kepler/compositeArtifacts.xml 
>>>> 
>>>> 
>>>> Hope that makes sense. If you think something can be improved w/o
>>>> causing new problems (such as updating the timestamp in the
>>>> composite*.xml files dynamically w/ every published build, so p2 sees
>>>> it as "new" more often), please don't hesitate to open a JIRA w/
>>>> details on what you'd change, and how.
>>>> 
>>>> Cheers,
>>>> 
>>>> Nick
>>>> 
>>>>> On 05/21/2013 02:12 PM, Denis Golovin wrote:
>>>>>> On 05/21/2013 10:32 AM, Mickael Istria wrote:
>>>>>>> On 05/21/2013 06:56 PM, Denis Golovin wrote:
>>>>>>> The problem is org.jboss.tools.tests is not part of
>>>>>>> 
>>>>>>> http://download.jboss.org/jbosstools/updates/nightly/core/trunk/plugins/
>>>>>> That's right. However it's part of
>>>>>> http://download.jboss.org/jbosstools/updates/nightly/integrationtests/trunk 
>>>>>> 
>>>>>> 
>>>>>> site, so when enabling no profile, the default nightly sites (core 
>>>>>> and
>>>>>> integration tests) are used, so it should resolve this bundle.
>>>>>> Is this something you can reproduce at every build? It could happen
>>>>>> when your build tries to get content at the same time aggregation is
>>>>>> getting published.
>>>>> 
>>>>> Pushing process can be implemented different way to avoid this 
>>>>> issue, I
>>>>> saw it many times and it is a bit annoying. I remember we spend some
>>>>> time with Nick to tackle it, but problem seems still here.
>>>>> 
>>>>> Idea behind this fix is really simple:
>>>>> 1. Leave old published bits as is on the server side and just 
>>>>> upload new
>>>>> ones
>>>>> 2. Update compositeArtifacts.xml first and include uploaded update 
>>>>> site
>>>>> from step 1
>>>>> 3. Update compositeContent.xml: include new uploaded update site from
>>>>> step 1 and remove oldest one
>>>>> 4. Update compositeArtifacts.xml and remove oldest one
>>>>> 5. Remove oldest update site folder
>>>>> 
>>>>> Note there are no operations related to renaming/moving previously
>>>>> uploaded update sites and that the key point to have previously 
>>>>> uploaded
>>>>> sites available while new one is in uploading stage.
>>>>> 
>>>>> It should significantly reduce amount of errors because we keep two
>>>>> update sites for each jbosstools-module, so at least one update 
>>>>> site is
>>>>> always available through composite update site for module. There could
>>>>> be still problems for builds with slow connection, but connection 
>>>>> should
>>>>> be slow enough to live through at least two builds for jbosstools
>>>>> module. This could be implemented as maven plug-n and number of builds
>>>>> to keep in composite could be a good candidate for configuration
>>>>> parameters.
>>>>> 
>>>>> It is not really critical but nice to have.
>>>>> 
>>>>> Denis
>>>>> 
>>>>>> -- 
>>>>>> Mickael Istria
>>>>>> Eclipse developer at JBoss, by Red Hat <http://www.jboss.org/tools>
>>>>>> My blog <http://mickaelistria.wordpress.com> - My Tweets
>>>>>> <http://twitter.com/mickaelistria>
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> jbosstools-dev mailing list
>>>>>> jbosstools-dev at lists.jboss.org
>>>>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>>>> 
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> jbosstools-dev mailing list
>>>>> jbosstools-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
> 
> _______________________________________________
> jbosstools-dev mailing list
> jbosstools-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/jbosstools-dev



More information about the jbosstools-dev mailing list