How sync the Integration/Bug_Fix/DEV stream
2 answers
Each developer that performs emergency bug-fixes has their own bug-fix workspace on the integration stream.
When a bug-fix needs to be performed, the integration stream is locked down so that only a given bug-fix developer can deliver.
A developer that is assigned the bug-fix goes to their bug-fix workspace (creating one if they don't have one yet).
They accept any incoming changes, which catches them up to the latest state of the integration stream.
They make their bug fix, and run all the builds/tests that are required directly out of the workspace (using "personal builds").
Once all testing has taken place, they deliver their changes to the integration stream from their bug-fix workspace, and the integration stream can be opened up for regular deliveries.
To deliver the bug-fix to the development stream, the bug-fix developer just goes to their regular development workspace, and points it at the integration stream, which allows them to accept the bug-fix change sets, and then they switch back to the development stream as the current target. They accept any incoming changes from the development stream, do any merging they might need to do, and then deliver the result to the development stream.
If the bug-fix is taking too long, or if there are multiple emergency bug-fixes, then you might need to open up the integration stream for delivery by someone else. Once that delivery is complete, the integration stream is again reserved for the bug-fix developer, and the bug-fix developer will have to accept those changes into their bug-fix workspace, and restart their testing.
Comments
Thanks Geoffrey! We will consider your recommendation! Here is a quick question: how to locked down the INT stream quickly? I remember there is no lock for stream...I guess you may mean restrict the deliver behavior with one per-condition?
Yes, I meant via a process pre-condition. Probably the easiest way to do this in RTC-4.0 is:
- Create an "emergency-bug-fixer" role.
- In the project/team area that owns the stream, in the process_configuration -> team_configuration, operation_behavior, select the source_control -> deliver(server) operation, for the Everyone role, add the "restrict who can deliver to the components in the stream" precondition. Select the appropriate roles for your organization.
- When you need an emergency bug-fix, give the person doing the fix the emergency-bug-fixer role.
- Configure the "who can deliver" precondition for all the components in the stream (you can multi-select, to do them all in one request), so that only the emergency-bug-fix role is selected.
When you are ready to unlock the stream, configure that precondition back to let the other roles deliver to the stream.
There probably is a way to make this even faster by writing a program that uses the Java API, but I've never tried to do that myself.
https://jazz.net/library/article/599
"Using Side Streams" is basically the same as bug_fix. As for #3, I expect that Bug_Fix stream and INT steam can be different because Bug_Fix tend to be off from previous release(s). So in this case, check baselines of each components are valid. As for #5 step, I think just deliver bug_fix to DEV stream should be enough. Because, the bug_fix itself may conflict with current development.
Practically, some projects prefer "patch" in stead of deliver/accept for defect fixes due to too much conflicts caused to current development. Creating "patch" is available in "Pending Changes" view. (right mouse click -> New .. -> Patch..)
Comments
Thanks Amano. I will read the article carefully.
For #3 your comments: yes, BUG_FIX is diff with INT stream, I just say at the time to fix but, scm should ensure the BUG_FIX is the same version of the INT stream which has the bugs. I agree with you check the baseline, but one by one check maybe time-consumed..
For #5 your comments: The test environment build is from the INT stream, I think the bug_fix change sets are urgent which can not wait 1 min to deliver to INT stream. It is why need deliver twice to INT and DEV. So complex..
For your information of patch, I know patch are your changeset modifier and can be transfer offline with RTC. But there may be one problem: If you apply the patch to DEV and deliver to INT, if BUG_FIX target to INT to accept change sets, there maybe conflict. But if I do not change BUG_FIX target to INT, I only replace the BUG_FIX comp baseline with INT, the patch should be work fine!
Amano, do you have any more comments? Or do you suggestion what is the process?
Geoffrey Clemm also posted good idea for urgent bug fix issue. Thanks Geoff !