ہم آہنگی
bae کی ہم آہنگی coven کی ہم آہنگی ہے: bae اپنی جدولیں اور blobs بتاتا ہے، اور coven باقی کرتا ہے۔ یہ صفحہ طریقہ کار کو bae پر لاگو ہوتے ہوئے بیان کرتا ہے؛ coven کی اپنی دستاویزات ہر حصے کو پوری گہرائی میں بیان کرتی ہیں۔
گرفت
اس حصے کا ربطcoven SQLite connection کا مالک ہے، اس لیے bae کی ہر commit کی گئی تحریر اسی سے گزرتی ہے۔ جب ہم آہنگ جدولیں بدلنے والا transaction commit ہوتا ہے، coven اسی transaction میں ہر قطار کی تبدیلی، اس کے چھوئے ہوئے ستونوں سمیت، درج کرتا ہے، اس لیے commit ہوئی تبدیلی کبھی گم نہیں ہوتی، چاہے ایپ اگلے ہی لمحے crash ہو جائے۔ کوئی diffing نہیں، کوئی dirty flags نہیں: capture connection کی خاصیت ہے، اور کوئی تحریر چھوٹ نہیں سکتی۔ تبدیلی آلے پر انتظار کرتی ہے اور صرف بھیجتے وقت رمز بند اور دستخط شدہ ہوتی ہے، اس لیے لکھنے کے لیے کلید یا نیٹ ورک نہیں چاہیے۔
ترتیب
اس حصے کا ربطکلاؤڈ گھر میں لائبریری کی پوری تاریخ اشیا کی ایک شمار شدہ ترتیب ہے۔ ہر ایک میں ایک آلے کی تبدیلیوں کا مجموعہ، ایک admin entry، کسی رکن کے لیے مہر بند کلید، یا snapshot کا اعلان ہوتا ہے۔ ہر آلہ انہیں ترتیب سے لاگو کرتا ہے اور کوئی نہیں چھوڑتا، اس لیے سب آلات متفق ہوتے ہیں کہ کیا اور کب ہوا۔ آلہ پہلے کی ہر شے لاگو کرنے کے بعد ہی اگلی شے شامل کرتا ہے۔
ہم آہنگی کا ایک دور آلے کی آخری لاگو کی گئی شے کے بعد سے پڑھتا ہے جب تک کوئی غائب نہ ملے، ہر ایک کا دستخط جانچ کر لاگو کرتا ہے، اس آلے کی قطار میں موجود تبدیلیاں ایک نئی شے کے طور پر بھیجتا ہے، پھر نئی حالت جو کام مانگے وہ کرتا ہے: رسائی بانٹنا یا ہٹانا، snapshots لینا، پرانی تاریخ مٹانا۔ پرسکون لائبریری پر ایک دور دو درخواستیں لیتا ہے، سائز جو بھی ہو۔
دور مقامی تبدیلیوں کے بعد، idle timer پر، اور Sync Now پر فوراً چلتے ہیں۔ ناکامیاں ایک ہی backoff منصوبے سے دوبارہ کوشش کرتی ہیں، اور جو آگے نہ بڑھ سکے وہ بتاتا ہے کہ کس کا انتظار ہے، جسے bae اپنی ہم آہنگی کی حالت والی سطر میں دکھاتا ہے۔
ملان
اس حصے کا ربطدو آلات کا الگ رہتے ہوئے ایک ہی لائبریری میں ترمیم کرنا عام حالت ہے، استثنا نہیں۔ جب ان کی تبدیلیاں ملتی ہیں:
- مختلف قطاروں یا مختلف ستونوں کی ترمیمات دونوں لاگو ہوتی ہیں۔ laptop پر اجرا کا year بدلنا اور ڈیسک ٹاپ پر اس کا label بدلنا دونوں نتیجہ دیتے ہیں۔
- اسی قطار کے اسی ستون کی ترمیمات timestamp سے ترتیب پاتی ہیں: بعد والی ترمیم جیتتی ہے، مقرر طور پر اور ہر آلے پر ایک ہی طرح۔
- ہم وقت ترمیمات پر حذف جیتتا ہے: بعد میں حذف کی گئی قطار پر کی گئی ترمیم جب بھی پہنچے ہارتی ہے، اس لیے ایک آلے پر حذف شدہ اجرا حذف ہی رہتا ہے، چاہے اسی وقفے میں کسی دوسرے آلے نے اس میں ترمیم کی ہو۔
coven ہر پیچھے رہ جانے والی قدر کو کھوئی ہوئی قدر کے طور پر رکھتا ہے؛ bae ان میں سے کوئی نہیں دکھاتا اور نہ حذف کرتا ہے، اس لیے ٹکراؤ کا UI نہیں ہے۔ پہنچنے کی ترتیب جو بھی ہو، ہر آلہ اسی نتیجے پر پہنچتا ہے۔
اسنیپ شاٹ
اس حصے کا ربطشامل ہونے یا بحال ہونے والا آلہ تاریخ شروع سے replay نہیں کرتا۔ آلات snapshots لیتے ہیں، یعنی ترتیب کے ایک نقطے پر لائبریری کی مکمل حالت، اور لائبریری اور ہر نجی circle کے پاس ایک ہو جانے کے بعد اس سے پہلے کی تاریخ مٹا دی جاتی ہے۔ نیا آلہ تازہ ترین snapshot لوڈ کرتا ہے، پھر صرف اس کے بعد آیا ہوا لاگو کرتا ہے۔ رکھی گئی تاریخ سے زیادہ دیر دور رہنے والا آلہ بھی یہی کرتا ہے، اور اپنی نہ بھیجی گئی ترمیمات رکھتا ہے۔
خاکہ versions
اس حصے کا ربطbae کا خاکہ ایک ہی migration ہے، اور آلے کی بھیجی ہر تبدیلی وہ خاکہ ورژن درج کرتی ہے جس سے وہ بنی۔ اپنے سے نئے خاکہ کی تبدیلی تک پہنچنے والا آلہ وہیں رک جاتا ہے، ایپ تازہ ہونے تک اس کے بعد کچھ لاگو نہیں کرتا؛ کچھ گم نہیں ہوتا اور کچھ غلط لاگو نہیں ہوتا۔
خاکہ version سے وسیع تر compatibility era ہے: ہر binary میں پکی ہوئی pinned coven revision۔ دو builds صرف ایک era کے اندر ہم آہنگی کرتے ہیں؛ coven wire شکل ٹوٹنا نیا era اور ہر ایپ میں major version bump ہے۔ Pre-1.0 میں ہر build era zero ہے اور شکلیں migration کے بغیر بدلتی ہیں۔
فراہم کنندہ کیا دیکھتا ہے
اس حصے کا ربطفراہم کنندہ رمز بند تبدیلیاں، snapshots، رکنیت ریکارڈ اور فائلیں رکھتا ہے؛ یہ اشیا گن سکتا ہے، سائز اور وقت دیکھ سکتا ہے، اور دیکھ سکتا ہے کہ کون سا اکاؤنٹ ہر شے لکھتا ہے، مگر مواد میں سے کچھ نہیں پڑھ سکتا۔ آلے کی لائی ہر شے database کو چھونے سے پہلے دستخط اور رکنیت دونوں سے جانچی جاتی ہے: ذخیرہ ایک غیر فعال، ناقابل اعتماد ڈاک خانہ ہے۔ Encryption اور شناخت اور رکنیت دیکھیں۔