Tailscale உறுதிப்படுத்தியபடி, SQLite-ன் Write-Ahead Logging (WAL) முறையில் இருந்த 16 ஆண்டு காலக் குறைபாடு தரவுத்தளங்களை (databases) அமைதியாகவும் தெரியாமலும் சிதைக்கக்கூடும். இதற்கான தீர்வை SQLite-ன் பராமரிப்பாளர்களுடன் இணைந்து பதிப்பு 3.46.1-இல் வழங்க நிறுவனம் நடவடிக்கை எடுத்துள்ளது. பல நவீன சேவைகள் இன்னும் SQLite-ஐ WAL முறையில் பயன்படுத்துவதால் இந்த கண்டுபிடிப்பு முக்கியமானது; கண்டறியப்படாத தரவுச் சிதைவு, உள்ளமைவுத் தரவை (configuration data) அழித்து நெட்வொர்க் நோட்களை (network nodes) முடக்கிவிடக்கூடும்.
இந்த பிழை எவ்வாறு தப்பியது
இந்த பிழை 2010 முதல் WAL முறையில் இருந்தது. அதிகப்படியான ஒரே நேரத்தில் அணுகும் முறைகளுக்கும் (high-concurrency access patterns), சில கோப்பு முறைமை (file-system) நடத்தல்களுக்கும் இடையிலான அரிதான தொடர்பானது, தரவுச் சிதைவை ஏற்படுத்தியது; ஆனால் வழக்கமான சரிபார்ப்புகள் (health checks) இதைக் கண்டறியத் தவறிவிட்டன.
Tailscale பொறியாளர்கள் முதலில் சில நோட்கள் (nodes) எந்தத் தெளிவான பிழைச் செய்தியும் இன்றித் தங்கள் சேமிக்கப்பட்ட நிலையை (stored state) இழப்பதைக் கவனித்தனர். "தரவுத்தளம் இயங்குகிறதா?" என்று கேட்கும் சோதனைகள் (probes) வெற்றிகரமாகவே பதிலளித்தன, ஆனால் உள்ளமைவுப் பதிவுகள் (configuration entries) காணாமல் போயின. இந்தச் சிக்கலை மீண்டும் உருவாக்க, WAL பாதையைச் சோதிக்கும் மற்றும் கோப்பு முறைமை நேரத்தைச் (file-system timing) சரிசெய்யும் பிரத்யேகக் கருவிகள் தேவைப்பட்டன; இதனால்தான் இந்தப் பிரச்சனை ஒரு தசாப்தத்திற்கும் மேலாக மறைந்திருந்தது.
யார் கவலைப்பட வேண்டும்
- WAL வசதி செயல்படுத்தப்பட்ட நிலையில் SQLite-ஐ இயக்கும் எந்தவொரு பயன்பாடு (application), குறிப்பாகப் பல செயல்முறைகள் (processes) அல்லது திரைகள் (threads) ஒரே நேரத்தில் தரவை எழுதும்போது.
- தரவு தாமதம் (latency) மற்றும் கேச்சிங் (caching) காரணமாக நேரச் சிக்கல்கள் (timing edge cases) அதிகமாகும் வழக்கத்திற்குப் புறம்பான அல்லது நெட்வொர்க் கோப்பு முறைமைகளில் (networked file systems) உள்ள பயன்பாடுகள்.
- ஒரு SQLite கோப்பு சரியாகத் தெரிவதையே தரவுத் தன்மையின் (data integrity) உத்தரவாதமாகக் கருதும் உள்கட்டமைப்புச் சேவைகள் (infrastructure services).
தணிப்பு நடவடிக்கைகள்
- SQLite-ஐ மேம்படுத்தவும் (Upgrade) – பதிப்பு 3.46.1 அல்லது அதற்குப் பிந்தைய பதிப்பிற்கு மாறவும்; WAL பிழை அங்கு சரிசெய்யப்பட்டுள்ளது.
- நேர்மைச் சோதனைகளை (integrity checks) இயக்கவும் – தரவுத்தளத்தின் உள் கட்டமைப்புகளைச் சரிபார்க்க அவ்வப்போது
PRAGMA integrity_check;அல்லது வேகமானPRAGMA quick_check;கட்டளையை இயக்கவும். - WAL பயன்பாட்டினைத் தணிக்கை செய்யவும் (Audit) –
journal_mode=WALஅமைப்புகளைக் கண்டறியக் குறியீட்டுத் தொகுப்புகளை (codebases) ஸ்கேன் செய்து, அதன் ஒரே நேர அணுகல் அளவு (concurrency level) அவசியமானதா என்பதைத் தீர்மானிக்கவும். - கண்காணிப்பை வலுப்படுத்தவும் – வெறும் அணுகலை (reachability) மட்டும் உறுதிப்படுத்தாமல், எதிர்பார்க்கப்படும் தரவு முறைகள் (data patterns) அல்லது வரிசை எண்ணிக்கையை (row counts) ஒப்பிடும் சோதனைகளைச் சேர்க்கவும்.
- தொடர்ச்சியாகப் காப்புப்பிரதி (Back up) எடுக்கவும் – தரவுச் சிதைவு ஏற்பட்டால் பாதுகாப்பளிக்க, SQLite மாற்றங்களை நிகழ்நேரத்தில் (real time) பிரதிபலிக்கும் Litestream போன்ற கருவிகளைப் பயன்படுத்தவும்.
இந்தச் சம்பவம் கற்பிக்கும் பாடங்கள்
- பழைய பிழைகள் புதிய சுமைகளின் கீழ் வெளிப்படலாம் – சேவைகள் விரிவடையும் போது, ஒரு காலத்தில் அரிதாக இருந்த முறைகள் பொதுவானதாக மாறி, பழைய குறைபாடுகளை வெளிச்சத்திற்கு கொண்டு வரும்.
- அமைதியான தரவுச் சிதைவு, ஒரு செயலிழப்பை (crash) விட ஆபத்தானது – ஒரு செயலிழப்பு மறுதொடக்கம் செய்யத் தூண்டும் மற்றும் பொதுவாக எச்சரிக்கைகளைத் தரும்; ஆனால் அமைதியான தரவு இழப்பு வாரக்கணக்கில் கவனிக்கப்படாமல் போகலாம்.
- திறந்தநிலை ஆய்வுகள் (Open post-mortems) சூழலுக்கு உதவுகின்றன – Tailscale-ன் விரிவான அறிக்கை, மற்ற குழுக்கள் தங்கள் பயன்பாடுகளை விரைவாகத் தணிக்கை செய்யத் தேவையான தகவல்களை வழங்கியது.
அடுத்து கவனிக்க வேண்டியவை
செய்தியைப் பகிர்வதற்கு முன்பே சரிசெய்யும் முறை தயாராக இருப்பதை உறுதி செய்ய Tailscale, SQLite குழுவுடன் இணைந்து பணியாற்றியது.
சுருக்கமாக: 16 ஆண்டுகளாகக் கவனிக்கப்படாமல் இருந்த ஒரு பிழை, நவீனப் பணிச்சுமைகள் (workloads) SQLite-ஐ அதன் அசல் உருவாக்குநர்கள் கற்பனை செய்யாத வழிகளில் பயன்படுத்தியதால் மீண்டும் வெளிப்பட்டது. நூலகத்தைப் (library) புதுப்பித்தல், நேர்மைச் சோதனைகளை இயக்குதல் மற்றும் கண்காணிப்புத் திறனை (observability) மேம்படுத்துதல் ஆகியவை இத்தகைய மறைமுகத் தோல்விகளிலிருந்து பாதுகாப்பதற்கான விரைவான வழிகளாகும்.
