Doküman menüsü

Sürüm 3.0.0

Ön Kontroller

Ön kontroller (preflight) referansı: Veri hareketi öncesi denetimler, komut bazlı kontroller ve uyarı mekanizmaları.

Ön kontroller (preflight checks), herhangi bir takip kaydı yazılmadan önce ve kopyalama ya da silme için tek bir satır bile okunmadan önce çalışır. archive, purge ve copy-only komutları ön kontrolleri başlangıçta, kendi kullanıcı hesaplarıyla yürütür. validate (tüm görevler için ya da --job ile tek bir görev için) ve dry-run ise ön kontrolleri istendiği anda çalıştırır. Başarılı bir validate sonucu sonraki bir çalıştırmaya aktarılmaz.

Ön kontroller (preflight); tüm şema, kullanıcı yetkisi ve replikasyon verilerini, DBS Medya’nın MySQL olgu kütüphanesi (fact library) dbsgomysql üzerinden okur. GoArchive bu verilere kendi kurallarını uygular.

Ön Kontroller Nasıl Çalışır?

Hangi kontrollerin çalışacağı, validate ve dry-run altında da görevin job_type değerine göre belirlenir: Örneğin bir kalıcı silme (purge) görevi için hedef tablolar hiçbir zaman aranmaz. Kontroller sabit bir sırayla çalışır ve ilk hatada durur; bu nedenle bir hatayı düzelttiğinizde bir sonraki hata ortaya çıkabilir. validate, her görevi PASSED veya FAILED olarak raporlar ve sonraki göreve geçer.

Bir hata mesajı kontrolün adını verir, sorunu açıklar ve ilgili tabloları listeler:

PK_COLUMN_CHECK: The configured primary_key must list the PRIMARY KEY's columns, all of them, in
key order (tables: [order_lines(primary_key (id) but the PRIMARY KEY is (order_id, line_no))])

Ön kontroller ayrıca anahtar üzerinden çalışan (key-addressed) her sorgunun taşıyabileceği en fazla anahtar sayısını, yani sorgu sınırını (statement cap) hesaplar. Bir sınır hesaplanamazsa ön kontroller başarısız olur. validate ve dry-run bu sınırları yazdırır; bir çalıştırma ise her sorgu için günlüğe bir Statement cap: satırı yazar.

Hangi Komut Hangi Kontrolleri Çalıştırır?

Kontroller çalışma sırasına göre listelenmiştir. ✅ = uygulanır, ❌ = çalıştırılmaz. validate ve dry-run, görevin türüne ait kolondaki kontrolleri çalıştırır.

Checkarchivepurgecopy-only
TABLE_EXISTENCE_CHECK✅✅✅
PRIMARY_KEY_CHECK✅✅✅
KEY_TYPE_UNSUPPORTED✅✅✅
PK_COLUMN_CASE_CHECK✅✅✅
PK_COLUMN_CHECK✅✅✅
STORAGE_ENGINE_CHECK✅✅✅
RELATION_KEY_CHECK✅✅✅
FK_INDEX_CHECK✅✅✅
JOB_SCHEMA_PERMISSION_CHECK✅✅✅
DEST_TABLE_EXISTENCE_CHECK✅❌✅
DEST_STORAGE_ENGINE_CHECK✅❌✅
COLUMN_CHARSET_CHECK✅✅✅
DEST_KEY_IDENTITY_CHECK✅❌✅
DEST_SCHEMA_COMPATIBILITY_CHECK✅❌✅
DEST_WRITE_PERMISSION_CHECK✅❌✅
DEST_INSERT_TRIGGER_VISIBILITY_CHECK✅❌✅
DEST_INSERT_TRIGGER_CHECK✅❌✅
FK_COVERAGE_VISIBILITY_CHECK✅✅❌
FK_COVERAGE_CHECK✅✅✅
INTERNAL_FK_COVERAGE✅✅✅
FK_PAIRING_CHECK✅✅✅
SELF_FK_DELETE_RULE_CHECK✅✅❌
SOURCE_SELECT_PERMISSION_CHECK✅✅✅
SOURCE_DELETE_PERMISSION_CHECK✅✅❌
DELETE_TRIGGER_VISIBILITY_CHECK✅✅❌
DELETE_TRIGGER_CHECK✅✅❌
MAX_ALLOWED_PACKET_CHECK✅✅✅
  • Kalıcı silme (purge) görevleri hiçbir veri kopyalamaz; ancak takip tabloları hedefin job_schema şemasında bulunduğu için yine hedefe bağlanır ve JOB_SCHEMA_PERMISSION_CHECK kontrolünü çalıştırır.
  • Salt kopyalama (copy-only) görevleri hiçbir veri silmediği için zincirleme silme (cascade) tetiklenemez. Bu nedenle yabancıl anahtar görünürlük kanıtını, öz başvurulu (self-reference) silme kuralını, silme yetkisini ve DELETE tetikleyici kontrollerini atlar. FK_COVERAGE_CHECK yine çalışır; ancak PROCESS yetkisi olmadan bu kontrol yalnızca hesabın okuyabildiği yabancıl anahtarları görür.
  • Bağlantı kontrolleri , veritabanına bağlanan her komut için (archive, purge, copy-only, validate, dry-run) ön kontrollerden önce çalışır.

Ön kontroller konularına göre şu alt bölümlerde ayrıntılı olarak ele alınmıştır: Bağlantı Kontrolleri , Kaynak Yapısı ve Anahtar Kontrolleri , Hedef Ortam Kontrolleri , Yabancıl Anahtar Kontrolleri ve Yetki, Tetikleyici ve Sunucu Ayarı Kontrolleri .

Uyarılar

Bu uyarılar günlüğe kaydedilir ve hiçbir zaman çalıştırmayı durdurmaz:

  • İki görev tablosu arasında ON DELETE CASCADE (arşivleme ve kalıcı silme görevlerinde). GoArchive alt kayıtları zaten önce kendisi siler; bu nedenle zincirleme silme, GoArchive’ın silme sırası dışında gereksiz bir iş yükü oluşturur. Bunun bilinçli bir tercih olduğunu doğrulayın.
  • Aynı kolonlar ve aynı eşleştirmeyle birden fazla yabancıl anahtar tarafından tanımlanan bir ilişki: Bu anahtarları adıyla belirten tek bir bilgilendirme (advisory) yazdırılır. Bu durum gereksizdir, ancak göreve zarar vermez.
  • Şema bilgilendirmeleri: Anahtarlar ve hedefteki benzersiz indeksler dışındaki karşılaştırma kuralı (collation) farkları, sha256 doğrulamasındaki karakter seti farkları, yalnızca büyük/küçük harf açısından farklı kolon adları ve kaynaktakinden farklı kolon sırası için bilgilendirme mesajları üretilir (Hedef Ortam Kontrolleri ).
  • verification: count veya none altında bir JSON kolonu (arşivleme ve salt kopyalama görevlerinde): Tek bir WARNING: yazdırılır. Bu uyarı, görevin kaynak tablolarındaki tüm JSON kolonlarını ve aynı adlı kaynak kolonu JSON olmadığı halde JSON olan tüm hedef kolonlarını adıyla belirtir. JSON değeri metin biçiminde kopyalandığı için iç alanların veri tipi korunmaz ve bazı değerler değişebilir; bu iki mod da değerleri karşılaştırmaz. Çalıştırma devam eder. Böyle bir değişikliğin reddedilmesini istiyorsanız verification: sha256 kullanın.

Ön kontroller bu uyarıları her komutta uyarı (warning) seviyesinde günlüğe yazar; bu nedenle logging.level: error ayarı onları gizler. JSON uyarısı bunun istisnasıdır: Diğer çalıştırma öncesi uyarılar gibi, günlük seviyesinden bağımsız olarak stderr’e yazdırılır.

Kontrol Olmayan Hata Önekleri

Aşağıdaki önekler ön kontrol çıktısında görülebilir. Bunlar birer kontrol değildir ve şemanıza ya da yetkilerinize işaret etmez: GoArchive ile olgu kütüphanesinin uyuşmadığını gösterir. Ön kontroller bu durumda tahmin yürütmek yerine işlemi reddeder. Bu hataları mesajın tamamıyla birlikte bildirin.

ÖnekAnlamı
PREFLIGHT_INSPECTION_INTEGRITYBir inceleme (inspection) sonucu kendi içinde tutarsız
PREFLIGHT_UNEXPECTED_FACTSBir kontrol, yanlış türde bilgi (facts) taşıyarak geldi
PREFLIGHT_UNKNOWN_FINDINGKütüphane, GoArchive’ın tanımadığı bir kontrol döndürdü
PREFLIGHT_UNEXPECTED_DIFFGoArchive incelemesinin üretemeyeceği bir şema farkı
PREFLIGHT_UNKNOWN_DIFFGoArchive’ın tanımadığı bir şema farkı türü

preflight <stage> inspection failed: <cause> ise farklıdır: Bilgiler okunurken oluşan bir veritabanı hatasını (örneğin kopan bir bağlantı veya bir sorgu hatası) belirtir. Hatanın nedenini inceleyin.

Aşağıdaki çalışma zamanı (run-time) hataları da ön kontrol değildir ve ön kontroller atlandığında da etkin kalır:

TanımlayıcıAnlamı
TEMPORAL_READ_CONTRACTBir zaman (temporal) değeri, bu değerin üst verisi (metadata) veya bir anahtar kimliği belirlenemedi (Sınırlar ve Kısıtlamalar )
INSERT_DIAGNOSTIC_REJECTEDBir INSERT, GoArchive’ın kabul etmediği bir durum (condition) üretti; mesaj bu durumun kodunu, seviyesini ve sınırlı bir ön izlemesini içerir (Yığın İşleme )
INSERT_DIAGNOSTICS_UNPROVENBir INSERT işleminin tanılama bilgileri eksiksiz okunamadı

Ön Kontrolleri Atlama

--skip-dangerously-validate-preflight-allow-experimental parametresi archive, purge, copy-only ve dry-run komutlarında yalnızca komut satırından kabul edilir: Bu ayarı yapan bir yapılandırma anahtarı yoktur. Çalıştırma başlamadan önce bir uyarı yazdırılır:

WARNING: --skip-dangerously-validate-preflight-allow-experimental: preflight's policy checks are skipped (storage
engines, permissions, triggers, foreign-key coverage, destination compatibility, packet size).
The keys are still read from MySQL; a run still checks the job's log key and binding. A misspelled
foreign_key column fails as a statement-caps error instead of RELATION_KEY_CHECK.

Ön kontroller atlandığında dahi her çalıştırmada şu denetimler uygulanır: Bağlantı kontrolleri , PRIMARY_KEY_CHECK, KEY_TYPE_UNSUPPORTED, COLUMN_CHARSET_CHECK, sorgu sınırları (kaynak anahtarlarından ve archive ile copy-only için ayrıca hedef anahtarlarından hesaplanır; bu anahtarlar okunabilir olmalıdır), görevin başlangıç kontrolleri ve yukarıdaki çalışma zamanı korumaları. Sorgu sınırları kaynak anahtarlardan, arşivleme ve salt kopyalama görevlerinde ise ayrıca hedef anahtarlardan hesaplanır; bu nedenle hedef anahtarların okunabilir olması gerekir. JSON uyarısı da yine yazdırılır. Yukarıdaki tablodaki diğer tüm kontroller atlanır; TABLE_EXISTENCE_CHECK, PK_COLUMN_CHECK, RELATION_KEY_CHECK ve FK_INDEX_CHECK de bunlara dahildir.

dry-run aynı uyarıyı yazdırır; ancak takip tablolarını hiçbir zaman okumadığı için görevin kaydını (registration) veya bağlamasını (binding) test etmez: Başarılı bir dry-run, çalıştırmanın başlayacağını garanti etmez. validate komutunun atlama parametresi yoktur.

Bu parametre yetki kontrollerini atlar, yetki ihtiyacını ortadan kaldırmaz: Eksik bir SELECT, DELETE veya INSERT yetkisi bu durumda çalıştırma sırasında hataya yol açar. Eksik bir TRIGGER yetkisi ise hiçbir hataya yol açmaz ve çalıştırma, göremediği tetikleyicilerle devam eder.

Bu parametreyi yalnızca bir olay (incident) sonrasında kurtarma amacıyla ve şemayı elle doğruladıktan sonra kullanın. InnoDB dışında bir hedef depolama motoruyla çalışmanın tek yolu da budur; GoArchive bu motorları test etmez ve desteklemez. Böyle bir tablo, yığın geri alındığında (rollback) satırlarını korur; bu nedenle başarısız bir yığın hedefte sahipsiz (orphan) satırlar bırakır. Eski parametre adı olan --skip-validate-preflight reddedilir.