483 | | = ''dybbin'' Approach Under Discussion = |
484 | | |
485 | | |
486 | | * '''dybbin''' allows a NuWa installation to be copied to another location |
487 | | |
488 | | == email to David, Jiajie == |
489 | | |
490 | | {{{ |
491 | | I like the elimination of a separate build in this dybbin |
492 | | approach however I see several problems with usage of update builds |
493 | | and externally imposed cron dybbin, my suggested solutions : |
494 | | |
495 | | * Update build |
496 | | Are promoting usage of an update build, |
497 | | which is prone to breakage on data model changes and is generally |
498 | | the subject of negative prejudice. |
499 | | |
500 | | Can eliminate this issue by making the dybinst command used by the slave |
501 | | "./dybinst -c trunk project dybgaudi" |
502 | | do a refresh when data model changes are detected. |
503 | | |
504 | | Enforcing external cron cut-off times introduces issues (and leads to |
505 | | complicated workarounds) : |
506 | | |
507 | | * A build can be in-progress at cron dybbin time or the last build |
508 | | can be broken ... meaning there is no valid build to copy. |
509 | | |
510 | | * Uncoordinated between sites, the prevalent build at dybbin time |
511 | | may differ between sites according to speed/breakage differences between slaves. |
512 | | |
513 | | To avoid these issues (and complicated workarounds), |
514 | | I suggest not to impose an external cron job but rather to to add a |
515 | | final step to the dybinst slave build that (if the tests succeeded) |
516 | | performs a dybbin copy "installation" into a directory named after the revision. |
517 | | And performs purging to remove excess revision directories. |
518 | | |
519 | | > One possible problem with this scheme is that our 'daily' might not match the |
520 | | > 'daily' elsewhere, but I think that could be handled, perhaps by having the master |
521 | | > define the revision number corresponding to the current 'daily'. |
522 | | |
523 | | |
524 | | Concerning coordination between slaves (although I have implemented |
525 | | such a system in the ad-hoc daily.bash) I think supporting and explaining |
526 | | complex procedures for this is not worth the effort/confusion. |
527 | | |
528 | | Simply referring to builds by their real name : '''the revision number''' |
529 | | and not the date eliminates the issue and benefits from direct |
530 | | correspondence between the state of builds reported in the web interface |
531 | | (including the timeline). |
532 | | |
533 | | Users will want to use a build after a particular |
534 | | feature has been added (or bug removed) ... thus they should |
535 | | know the minimum revision they want. |
536 | | They can then look for a corresponding build that the slave on |
537 | | their cluster succeeded to build at : |
538 | | http://dayabay.ihep.ac.cn/tracs/dybsvn/build/dybinst |
539 | | |
540 | | Yours, Simon |
541 | | }}} |
542 | | |
543 | | |
544 | | |
| 480 | = dybinst copy step = |
| 481 | |
| 482 | The final copy step of builds allows the update build directory to be |
| 483 | copied ( using ''dybbin pack/unpack/setup'' ) into a revision named directory. |
| 484 | |
| 485 | When enabled this prevents breakage of trunk from hindering progress by allowing |
| 486 | users to trivially shift a recent prior revision. |
| 487 | |
| 488 | == when builds/tests fail == |
| 489 | |
| 490 | If a build fails (eg dybgaudi fails to compile) then the copy step is not reached |
| 491 | and no copy is made. However if the build completes but some of the tests fail then |
| 492 | the copy is still done by the name of the copied directory is changed to indicate the |
| 493 | number of failed tests. |
| 494 | |
| 495 | == configuration of the copy step == |
| 496 | |
| 497 | The copy is configured by means of variables '''dyb_copy..''' in envfiles |
| 498 | such as '''~/.dybinstrc'''. |
| 499 | To allow separate configuration for debug and opt builds variants of the config vars ending |
| 500 | with '''_opt''' or '''_dbg''' are accepted that take precendence over the generic vars. |
| 501 | |
| 502 | * '''dyb_copybase''' : directory to which revision directories are copyied, not configuring this or the '''_dbg/_opt''' variant prevents the copying from being done |
| 503 | * '''dyb_copykeep''' : number of revision directories to be retained (defaults to 10, can have different opt/dbg settings using '''_dbg/_opt'''), others are purged |
| 504 | |
| 505 | Currently the purge algorithm decides what to purge/retain based on |
| 506 | * modification time of the revision directory |
| 507 | * number of symbolic links within '''dyb_copybase''' that point to the revision directory |
| 508 | |
| 509 | |
| 510 | |
| 511 | |
| 512 | |
| 513 | |
| 514 | |
| 515 | |
| 516 | |
| 517 | |