Langkau ke kandungan

Naik taraf tanpa waktu henti

Naik taraf Quire kendiri tanpa waktu henti.

Peraturannya terdapat dalam docs/architecture/23-ops.md seksyen 7 dan docs/architecture/07-data.md seksyen 4.1. Ini ialah prosedurnya.

Jaminan yang menjadikannya selamat

Keluaran R berjalan dengan betul terhadap skema R dan skema R tolak satu. Setiap perubahan skema dipecahkan kepada kembang, peralihan dan kontrak:

  1. Kembang: tambah lajad, jadual atau indeks baharu. Kod lama mengabaikannya.
  2. Peralihan, untuk sekurang-kurangnya satu keluaran: kod baharu menulis kedua-dua bentuk dan membaca yang baharu; satu tugas boleh disambung semula mengisi baris lama.
  3. Kontrak: buang bentuk lama, dalam keluaran kemudian, bersendirian.

Jadi pada setiap masa dalam satu naik taraf berperingkat, proses lama dan baharu boleh berkongsi satu pangkalan data. Tiada migrasi ke bawah: satu migrasi yang membuang satu lajad satu jam yang lepas tidak dapat memberikan semula baris yang ditulis dalam jam itu.

Tugas CI schema-compat menyemak jaminan itu pada setiap keluaran dengan menjalankan ujian keluaran sebelumnya terhadap skema baharu.

Sebelum anda bermula

  1. Baca nota keluaran. Sebuah keluaran yang memerlukan satu tetingkap penyelenggaraan menyatakan demikian, dengan anggarannya; paling banyak satu setiap keluaran.
  2. Jalankan latihan pemulihan, atau sahkan ia berjalan hijau untuk keluaran ini (backup-restore.md). Sebuah latihan yang gagal menyekat naik taraf itu.
  3. Buat satu sandaran asas: docker compose -f docker/compose.yaml --profile backup run --rm backup.

Docker Compose, satu hos

export QUIRE_RELEASE=2026.10.0            # or set it in docker/.env
docker compose -f docker/compose.yaml pull   # or build
docker compose -f docker/compose.yaml run --rm migrate
docker compose -f docker/compose.yaml up -d --no-deps web content collab
docker compose -f docker/compose.yaml up -d --no-deps worker scheduler

Urutannya adalah disengajakan:

  1. Migrate dahulu, semasa keluaran lama melayani trafik. Migrasi kembang tidak kelihatan kepadanya.
  2. Lapisan web seterusnya. Pada SIGTERM, setiap proses web menukar /readyz kepada draining, menyiapkan permintaan yang sedang berjalan dalam masa 30 saat, menutup strim dengan satu panduan sambung semula, dan keluar. stop_grace_period ialah 40 saat supaya Compose tidak pernah memotong satu drain yang sihat.
  3. Pekerja terakhir, supaya bentuk peristiwa terbaharu dihasilkan sebelum pengguna terbaharu menjangkakannya. Pekerja berhenti mengambil serta-merta dan diberi 120 saat; satu tugas yang tidak dapat siap diambil semula di tempat lain, yang selamat kerana setiap tugas adalah idempoten. Perancang menyerahkan kepimpinan pada detik seterusnya.

Pada satu hos, Compose menggantikan setiap bekas bergilir-gilir, jadi terdapat sedikit jurang setiap perkhidmatan. Untuk tiada langsung jurang, jalankan lapisan web sebagai dua bekas di belakang proksi anda sendiri (satu fail override yang menambah perkhidmatan web kedua tanpa port yang diterbitkan), dan cipta semula mereka satu demi satu, menunggu setiap satu melaporkan sihat sebelum yang seterusnya.

Beberapa hos atau satu pengatur orkestra

Gunakan urutan yang sama: migrate sekali daripada satu tugas tunggal, kemudian rollingkan lapisan web dengan surge satu dan unavailable sifar, kemudian para pekerja. Tunjukkan probe kesediaan ke /readyz dan probe kelayakan hidup ke /healthz.

Dengan pangkalan data penyewa khusus, langkah migrate melakukan kedua-duanya: ia migrate pangkalan data kawalan terlebih dahulu, kemudian setiap pangkalan data yang disenaraikan dalam ops.tenant_database, satu demi satu, setiap satu di bawah kunci sendirinya. Kegagalan dalam satu pangkalan data penyewa tidak menghentikan yang lain. Apabila setiap pangkalan data selesai, ia membandingkan leger migrasi dan keluar dengan bukan sifar melainkan setiap pangkalan data telah memohon tepat migrasi yang telah dipohon oleh pangkalan data kawalan, dengan menamakan setiap satu yang tertinggal atau terkehadapan. Arahan yang sama memasang jadual giliran dalam setiap pangkalan data, kerana pekerja menghabiskan tugas penyewa yang disemat di tempat ia ditulis.

bun apps/worker/src/migrate.ts   # what the Compose step runs
bun run db:migrate:all                            # the same, from a checkout

Migrasi biasa dan persediaan pertama juga memasang dokumen undang-undang Inggeris kanonis operator Quire ke dalam ops.platform_policy_version. Pemasang adalah idempoten: hanya bodi Inggeris yang hilang dan tepat bodi pemegang tempat yang dicipta oleh migrasi digantikan. Benih diarkibkan dan versi terbitan baharu disisipkan; rujukan penerimaan bersejarah dan bodi dikekalkan. Sebarang versi tulen yang ditulis oleh operator, termasuk draf, dikekalkan dan mesti diurus melalui konsol Dasar platform. Dokumen, versi dan persetujuan dasar penyewa tidak pernah diubah oleh peralihan ini. Ini ialah penerbitan teks operator, bukan pensijilan undang-undang atau pemenuhan automatik janji-janjinya.

Setiap pangkalan data khusus dicapai melalui nama ia didaftarkan. Sebuah pangkalan data yang didaftarkan sebagai env:QUIRE_DB_NORTHWIND_URL memerlukan:

Pemboleh ubah Digunakan untuk
QUIRE_DB_NORTHWIND_URL Peranan aplikasi, untuk lapisan web dan pekerja
QUIRE_DB_NORTHWIND_URL_MIGRATOR Peranan migrator, untuk arahan ini dan untuk perpindahan
QUIRE_DB_NORTHWIND_URL_SUPERUSER Pilihan: memohon semula bootstrap (peranan, skema, pembantu) sebelum migrate

Sebuah pangkalan data berdaftar tanpa sambungan _MIGRATOR dilaporkan sebagai kegagalan, tidak pernah dilepaskan. Lapisan web boleh rolling sebaik sahaja pangkalan data kawalan selesai. Sebuah pangkalan data penyewa yang tertinggal satu jam memberi amaran; sethari ia mengejarkan.

pgvector

Daripada migrasi 0264, korpus grounding menggunakan satu indeks pgvector HNSW di mana pelayan mempunyai sambungan tambahan itu; perkhidmatan postgres dalam Compose dibina dengannya (docker/postgres.Dockerfile). migrate pertama selepas menukar imej mencipta sambungan tambahan itu melalui bootstrap superuser, dan 0264 kemudian menambah satu lajad vektor yang dijana dan membina indeks itu. Menambah lajad itu menulis semula app.ai_chunk sekali di bawah satu kunci eksklusif, jadi permintaan grounding menunggunya; tiada apa-apa yang lain menyentuh jadual itu.

Pada sebuah pelayan tanpa pgvector, 0264 mencatat satu notis dan tidak mengubah apa-apa, dan pengambilan kekal tepat. Dengan pgvector yang lebih lama daripada 0.8, lajad dan indeks dibina tetapi pengambilan kekal tepat sehingga sambungan tambahan dinaik taraf (alter extension vector update), kerana imbasan HNSW berpenapis memerlukan imbasan berulang 0.8. Untuk menghidupkannya kemudian pada sebuah pelayan tanpanya, pasang sambungan tambahan itu, jalankan bootstrap sekali lagi (atau create extension vector sebagai superuser), kemudian sebagai quire_migrator:

set maintenance_work_mem = '1GB';  -- the HNSW build is much faster in memory
select ops.ai_chunk_enable_vector_index();

Ia adalah idempoten dan memulangkan enabled atau unavailable. Jalankannya pada setiap pangkalan data penyewa khusus juga.

Mengundur

Mengundur kod sentiasa tersedia: tetapkan QUIRE_RELEASE kepada tag sebelumnya dan up -d sekali lagi. Itu berfungsi kerana skema adalah serasi dalam kedua-dua arah dalam sesebuah keluaran.

Mengundur skema tidak ditawarkan. Apa yang tidak dapat dibatalkan, dan cara pulih daripadanya:

Tidak boleh diterbalikkan Pemulihan
Satu migrasi kontrak yang membuang satu lajad Pemulihan pada titik masa ke sebelum pembuangan ke dalam satu pangkalan data baharu, ekstrak, gabung
Satu perubahan data di tempat Yang sama, kemudian selaraskan tulisan sejak itu
Webhook dan peristiwa yang dihantar Peristiwa kompensasi, bukan sekali-kali pemadaman
E-mel yang dihantar Seorang manusia menulis susulannya
Rantai hash audit Tidak pernah ditulis semula; tambah satu entri pembetulan

Itulah sebabnya satu migrasi kontrak dihantar bersendirian: satu pemulihan kemudian mempunyai sempadan yang bersih.

Memeriksa naik taraf

docker compose -f docker/compose.yaml ps           # every service healthy
curl -fsS http://localhost:8080/readyz             # ready, and what is configured
docker compose -f docker/compose.yaml logs migrate # the migrations applied
Navigasi

Taip untuk mencari…

↑↓ navigasi↵ pilihEsc tutup