Համակարգերի կառուցման ձախողումներ՝ GitHub-ում արխիվային ստուգաչափերի փոփոխությունների պատճառով

GitHub-ը փոխել է թողարկման էջերում ավտոմատ գեներացվող «.tar.gz» և «.tgz» արխիվների ստեղծման եղանակը, ինչը հանգեցրել է դրանց ստուգման գումարների փոփոխության և զանգվածային ձախողումների ավտոմատացված կառուցման համակարգերում, որոնք ստուգում են GitHub-ից ներբեռնված արխիվները նախորդների համեմատ՝ ամբողջականությունը հաստատելու համար: Պահպանված չեկային գումարներ, օրինակ՝ տեղադրված փաթեթի մետատվյալներում կամ build սկրիպտներում:

2.38 թողարկումից սկսած՝ Git գործիքակազմը լռելյայն ներառում էր gzip-ի ներկառուցված ներդրում, ինչը հնարավորություն տվեց միավորել այս սեղմման մեթոդի աջակցությունը օպերացիոն համակարգերում և բարելավել արխիվների ստեղծման աշխատանքը: GitHub-ն ընդունեց փոփոխությունը՝ իր ենթակառուցվածքում git-ի տարբերակը թարմացնելուց հետո: Խնդիրն առաջացել է նրանով, որ ներկառուցված zlib-ի վրա հիմնված gzip ներդրման արդյունքում ստեղծված սեղմված արխիվները երկուական տարբերվում են gzip կոմունալ ծրագրի կողմից ստեղծված արխիվներից, ինչը հանգեցրել է արխիվների տարբեր ստուգումների, որոնք ստեղծվել են git-ի տարբեր տարբերակների կողմից՝ գործարկելիս: «git archive» հրամանը։

Համապատասխանաբար, GitHub-ում git-ը թարմացնելուց հետո թողարկման էջերում սկսեցին ցուցադրվել մի փոքր այլ արխիվներ, որոնք չեն անցել ստուգումը՝ օգտագործելով հին ստուգումների գումարները: Խնդիրը դրսևորվեց տարբեր կառուցման համակարգերում, շարունակական ինտեգրման համակարգերում և սկզբնական կոդից փաթեթներ կառուցելու գործիքներում: Օրինակ՝ մոտ 5800 FreeBSD նավահանգիստների հավաքումը, որոնց սկզբնական կոդերը ներբեռնվել են GitHub-ից, խափանվել է։

Ի պատասխան խափանումների վերաբերյալ նախնական բողոքների, GitHub-ը սկզբում մեջբերեց այն փաստը, որ արխիվների մշտական ​​ստուգման գումարները երբեք երաշխավորված չեն եղել: Այն բանից հետո, երբ ցույց տվեցին, որ հսկայական աշխատանք կպահանջվի տարբեր էկոհամակարգերի մետատվյալների թարմացման համար՝ ազդակիր կառուցապատման համակարգերի գործունակությունը վերականգնելու համար, GitHub-ի ներկայացուցիչները փոխեցին իրենց միտքը, հետ դարձրին փոփոխությունը և վերադարձրին արխիվների ստեղծման հին մեթոդը:

Git-ի մշակողները դեռ որոշում չեն կայացրել և միայն քննարկում են հնարավոր գործողությունները։ Դիտարկվող տարբերակները ներառում էին կանխադրված gzip կոմունալ ծրագրին օգտագործելու վերադարձը. ավելացնելով «--կայուն» դրոշը՝ հին արխիվների հետ համատեղելիությունը պահպանելու համար. ներկառուցված իրականացումը կապել առանձին արխիվի ձևաչափի հետ. օգտագործելով gzip կոմունալ ծրագիրը հին commit-ների համար և inline իրականացումը որոշակի ամսաթվից սկսած պարտավորությունների համար. երաշխավորելով ձևաչափի կայունությունը միայն չսեղմված արխիվների համար:

Որոշում կայացնելու դժվարությունը բացատրվում է նրանով, որ արտաքին կոմունալ ծառայության զանգին վերադառնալը ամբողջությամբ չի լուծում ստուգիչ գումարի անփոփոխության խնդիրը, քանի որ արտաքին gzip ծրագրի փոփոխությունը կարող է նաև հանգեցնել արխիվի ձևաչափի փոփոխության: Ներկայումս վերանայման համար առաջարկվել է մի շարք patches, որոնք վերադարձնում են հին վարքագիծը լռելյայն (կոչելով արտաքին gzip կոմունալ) և օգտագործում են ներկառուցված իրականացումը համակարգում gzip կոմունալ ծրագրի բացակայության դեպքում: Կարկատները փաստաթղթերին ավելացնում են նաև նշում, որ «git archive»-ի ելքի կայունությունը երաշխավորված չէ, և ձևաչափը կարող է փոխվել ապագայում:

Source: opennet.ru

Добавить комментарий