WEB / WEB-18.04
Object storage, filesystem ve persistence flow
Public note bytes’ı, store key’i ve database reference’ını ayrı izle; write, flush ve commit’in hangi owner’da sonuç verdiğini ayır.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Store + reference
- Public bytes hazır
Application, Çay ve newline içeren public note text’ini notes/tea.txt key’i altında yazmayı hazırlar. File bytes ve SQLite reference farklı owner’lardır; henüz write veya reference commit yapılmamıştır.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Mapping seçilmedi
- Owned file bytes
- Content/reference kararı yok
- SQLite reference
- Committed reference yok
- Mapping/encode
Adapter notes/tea.txt logical key’ini sabit tea.txt backing file’a eşler. Çay newline text’i dört character, UTF-8 c38761790a ise beş byte’tır; contentType=text/plain bu byte’ları değiştirmez.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- Content/reference kararı yok
- SQLite reference
- Committed reference yok
- Buffered write
Python buffered file write, 5 byte’ı kabul eder. Language buffer’a yazılmış olması, kalıcı storage completion’ı ile aynı sonuç değildir.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- Buffered write: 5 octet kabul
- SQLite reference
- Committed reference yok
- Flush buffer
flush language-level write buffers’ını underlying stream’e iter; gerçek crash recovery bu adımda ölçülmez.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- Underlying stream’e aktarıldı
- SQLite reference
- Committed reference yok
- fsync completion
os.fsync çağrısı tamamlanmıştır; seçilen file readback’i c38761790a ile eşleşir. Bu normal readback, power-loss recovery veya directory metadata durability garantisi değildir.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- fsync tamamlandı; byte’lar okunabilir
- SQLite reference
- Committed reference yok
- Reference write
SQLite reference write ve explicit COMMIT başarılıdır: noteId=tea, key=notes/tea.txt, octets=5. Başka connection bu row’u okuyabilir; file write ile database commit tek atomic transaction değildir.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- fsync tamamlandı; byte’lar okunabilir
- SQLite reference
- tea/key/5 octet reference commit edildi
- Application sonucu
Application, file ve database owner’larının tamamlanmış sonuçlarını birlikte değerlendirir. Bu adım client’a HTTP varışını veya power-loss durability’yi göstermez.
- Application
- Available; readback eşleşti
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- fsync tamamlandı; byte’lar okunabilir
- SQLite reference
- tea/key/5 octet reference commit edildi
Orphan bytes
- Public bytes hazır
Application, Çay ve newline içeren public note text’ini notes/tea.txt key’i altında yazmayı hazırlar. File bytes ve SQLite reference farklı owner’lardır; henüz write veya reference commit yapılmamıştır.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Mapping seçilmedi
- Owned file bytes
- Content/reference kararı yok
- SQLite reference
- Committed reference yok
- Mapping/encode
Adapter notes/tea.txt logical key’ini sabit tea.txt backing file’a eşler. Çay newline text’i dört character, UTF-8 c38761790a ise beş byte’tır; contentType=text/plain bu byte’ları değiştirmez.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- Content/reference kararı yok
- SQLite reference
- Committed reference yok
- Buffered write
Python buffered file write, 5 byte’ı kabul eder. Language buffer’a yazılmış olması, kalıcı storage completion’ı ile aynı sonuç değildir.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- Buffered write: 5 octet kabul
- SQLite reference
- Committed reference yok
- Flush buffer
flush language-level write buffers’ını underlying stream’e iter; gerçek crash recovery bu adımda ölçülmez.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- Underlying stream’e aktarıldı
- SQLite reference
- Committed reference yok
- fsync completion
os.fsync çağrısı tamamlanmıştır; seçilen file readback’i c38761790a ile eşleşir. Bu normal readback, power-loss recovery veya directory metadata durability garantisi değildir.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- fsync tamamlandı; byte’lar okunabilir
- SQLite reference
- Committed reference yok
- Reference write
Reference candidate NOT NULL constraint’ine takılır; metadataCommitted=false ve transaction açıktır. Önceden yazılmış beş file byte’ı kalır; explicit rollback sonraki yerel adımdır.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- fsync tamamlandı; byte’lar okunabilir
- SQLite reference
- NOT NULL hatası; transaction açık
- Rollback reference
Database rollback, candidate reference’ı geri alır. Daha önce file’a yazılmış byte’lar silinmez; orphan state ayrı kalır.
- Application
- Public note byte’ları hazır
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- fsync tamamlandı; byte’lar okunabilir
- SQLite reference
- Açık rollback; referenceRows=0
- Application sonucu
Application, file ve database owner’larının tamamlanmış sonuçlarını birlikte değerlendirir. Bu adım client’a HTTP varışını veya power-loss durability’yi göstermez.
- Application
- Unavailable; orphan byte’lar kaldı
- Local storage adapter
- Key → tea.txt; UTF-8: 5 octet
- Owned file bytes
- fsync tamamlandı; byte’lar okunabilir
- SQLite reference
- Açık rollback; referenceRows=0
Missing backing
- Note read hazır
Application, noteId=tea için mevcut reference ve backing content’i okumak ister. Bu dal yeni Çay byte’ları yazmaz; lookup öncesinde reference veya file’ın varlığı henüz bilinmez.
- Application
- tea read hazır; content henüz yok
- Local storage adapter
- Read mapping seçilmedi
- Owned file bytes
- Backing file henüz okunmadı
- SQLite reference
- Reference henüz okunmadı
- Mapping/encode
Read adapter, noteId=tea için notes/tea.txt key’ini sabit tea.txt backing file’a eşler. Bu read mapping’idir; UTF-8 encode veya file write yapılmaz ve byte’ların bulunduğu varsayılmaz.
- Application
- tea read hazır; content henüz yok
- Local storage adapter
- notes/tea.txt → tea.txt; read mapping
- Owned file bytes
- Backing file henüz okunmadı
- SQLite reference
- Reference henüz okunmadı
- Reference read
Metadata lookup, reference row’unu bulur. İçerik byte’larının backing file’da bulunduğu henüz kanıtlanmış değildir.
- Application
- tea read hazır; content henüz yok
- Local storage adapter
- notes/tea.txt → tea.txt; read mapping
- Owned file bytes
- Backing file henüz okunmadı
- SQLite reference
- Committed tea reference var
- Backing read
Örneğin backing file’ı bulunamadığı için FileNotFoundError oluşur. Metadata lookup başarısı, content read başarısına dönüşmez.
- Application
- tea read hazır; content henüz yok
- Local storage adapter
- notes/tea.txt → tea.txt; read mapping
- Owned file bytes
- File yok; read hatası
- SQLite reference
- Committed tea reference var
- Explicit failure
Application inconsistent reference sonucunu açık tutar ve public content available olduğunu iddia etmez.
- Application
- Unavailable; dangling reference
- Local storage adapter
- notes/tea.txt → tea.txt; read mapping
- Owned file bytes
- File yok; read hatası
- SQLite reference
- Committed tea reference var
ROLLER · STATE · VERİ AKIŞI
Bir note’un bytes’ı ve kimliği nerede?
Application’ın public note’u hem içerik bytes’ı hem de title, media type ve storage reference gibi metadata taşır. Object storage bir object’i seçilmiş namespace içindeki key ile adresler. Amazon S3 örneğinde bucket+key object adını belirler; versioning etkinse hangi version’ın seçildiği ayrıca önemlidir. Key’deki slash prefix’i directory hierarchy olmak zorunda değildir: S3’ün object modeli flat’tir, console logical folders gösterebilir. Filesystem path ise işletim sisteminin directory/file namespace’inde çözülür. İkisinin string’e benzemesi aynı mekanizma olduklarını göstermez.
Örnekte object kimliği public-notes / notes/tea.txt olarak seçilmiştir; local adapter bunu tea.txt dosyasına eşler. S3 request veya SDK çalışmaz. Çay ve newline’dan oluşan metnin UTF-8 karşılığı 5 octet’tir; dört karakter ile byte uzunluğu aynı değildir. contentType=text/plain metadata’sı byte’ları dönüştürmez veya parse sonucunu kanıtlamaz. S3 user-defined metadata, object yaratılırken verilir; değiştirilmesi copy gerektirir. Bu davranışı bütün metadata türlerine genelleme. Örnekte metadata local dictionary’de, application reference ise ayrı SQLite row’da tutulur.
Application → bytes → database farklı completion’lar
Normal akışta application, public text’i encode eder ve buffered binary file’a yazar. flush, language-level buffer’ı underlying stream’e aktarır; ardından os.fsync(file descriptor) çağrılır. Python write sonucu kabul edilen byte sayısını verir. Write, flush ve fsync farklı aşamalardır; fsync’in başarı dönmesi bir power-loss recovery gözlemi değildir. Durability, işletim sistemi, filesystem, device ve directory metadata sınırlarını da içerir; bu örnek bütün platformlar için garanti vermez.
Ardından application, prepared statement ve bound values ile note ID, key ve length’i SQLite metadata table’a yazar. Explicit COMMIT sonrasında başka bir connection reference’ı okuyabilir. File operation ile SQLite transaction tek atomic transaction değildir. Metadata insert NOT NULL nedeniyle başarısız olduğunda açık rollback, candidate reference’ı geri alır; daha önce yazılmış byte’lar ise kalır. Bu orphaned bytes durumudur. Reference var ama backing file yoksa dangling reference oluşur. Application yalnız iki owner’ın gerekli sonuçları başarıyla tamamlandığında available üretir; aradaki boşluk compensation ve reconciliation gerektirir.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Orphan bytes
- İki storage owner ayrıldı
orphan kaydında filePresent=true, metadataCommitted=false’tur. File bytes ve application reference farklı owner’ların state’idir; biri diğerinin commit sonucunu tamamlamaz.
- Storage owner state
- File present=true
- Reference/content gate
- Metadata commit=false
- Application availability
- Availability pending
- Identity mapping context’i okundu
noteId=tea, object key=notes/tea.txt ve fixedBackingFile=tea.txt farklı namespace değerleridir. Sabit mapping bytes ile reference’ın doğru eşleşmesini gerektirir.
- Storage owner state
- Object key: notes/tea.txt
- Reference/content gate
- Backing: tea.txt
- Application availability
- Mapping distinct from availability
- Partial failure sonucu belirlendi
Reference candidate NOT NULL constraint’e takılmış ve explicit rollback yapılmıştır. referenceRows=0 kalır; database rollback daha önceki file write’ını geri almamıştır.
- Storage owner state
- Reference rows=0
- Reference/content gate
- File write not rolled back
- Application availability
- Partial state known
- Availability gate kapalı kaldı
available=false’tur. Bytes’ın okunabilir olması, committed application reference yokken public resource başarı sonucu üretmeye yetmez.
- Storage owner state
- Owner states inconsistent
- Reference/content gate
- Available=false
- Application availability
- No false success
- Recovery kararı atomic commit sayılmadı
Sonradan orphan cleanup yapılabilir, ama bu önceki iki write’ı tek transaction yapmaz. crossStoreAtomic=false sınırı bu partial completion’ı açıklamak için korunur.
- Storage owner state
- Cross-store atomic=false
- Reference/content gate
- Recovery separate
- Application availability
- Availability withheld
- Public delivery sonucu eklenmedi
Bu persistence kaydı application availability kararını gösterir. HTTP response veya browser receipt gözlemi olmadığı için consumer’ın gerçek teslim sonucu ayrıca bilinmezdir.
- Storage owner state
- Availability=false known
- Reference/content gate
- HTTP receipt unobserved
- Application availability
- No delivery guarantee
Dangling reference
- İki storage owner ayrıldı
dangling kaydında referenceRows=1 fakat filePresent=false’tur. Metadata row’unun bulunması backing bytes’ın mevcut olduğunu garanti etmez.
- Storage owner state
- Reference rows=1
- Reference/content gate
- File present=false
- Application availability
- Availability pending
- Identity mapping context’i okundu
noteId=tea, object key=notes/tea.txt ve fixedBackingFile=tea.txt farklı namespace değerleridir. Sabit mapping bytes ile reference’ın doğru eşleşmesini gerektirir.
- Storage owner state
- Object key: notes/tea.txt
- Reference/content gate
- Backing: tea.txt
- Application availability
- Mapping distinct from availability
- Partial failure sonucu belirlendi
Fixed file read, FileNotFoundError verir. Bu read error, reference’ın yokluğu değil reference ile bytes owner’ı arasındaki tutarsızlıktır.
- Storage owner state
- Reference rows=1
- Reference/content gate
- Read: FileNotFoundError
- Application availability
- Partial state known
- Availability gate kapalı kaldı
available=false’tur. Metadata-only lookup, full content read başarısızken consumer’a mevcut content sözü vermez.
- Storage owner state
- Owner states inconsistent
- Reference/content gate
- Available=false
- Application availability
- No false success
- Recovery kararı atomic commit sayılmadı
Sonradan orphan cleanup yapılabilir, ama bu önceki iki write’ı tek transaction yapmaz. crossStoreAtomic=false sınırı bu partial completion’ı açıklamak için korunur.
- Storage owner state
- Cross-store atomic=false
- Reference/content gate
- Recovery separate
- Application availability
- Availability withheld
- Public delivery sonucu eklenmedi
Bu persistence kaydı application availability kararını gösterir. HTTP response veya browser receipt gözlemi olmadığı için consumer’ın gerçek teslim sonucu ayrıca bilinmezdir.
- Storage owner state
- Availability=false known
- Reference/content gate
- HTTP receipt unobserved
- Application availability
- No delivery guarantee
VARSAYIM · SINIR · KONTROL
Tek success alanına bütün state’i sığdırma
Controlled persistence ledger’da write success, fsync completion ve metadata commit ayrı gözlemlerdir. File bytes mevcutken reference transaction rollback etmiş olabilir. Bu koşul storage’da bir orphan bırakır; application’ın public result’u unavailable olur. File’ın okunması reference’ın committed olduğunu göstermez, database row’unun bulunması da file bytes’ın mevcut veya beklenen representation’da olduğunu kanıtlamaz. İnceleme iki owner’ı bağımsız doğrular.
Object key, file path ve note ID farklı namespaces’e aittir. Yanlış eşleme public resource’u başka backing record’a bağlayabilir; key’in slash içermesi bunu doğru directory’ye dönüştürmez. Bu fixture yalnız sabit key/path mapping kullanır ve kendi geçici dosyalarını okur. Gerçek upload, arbitrary client pathname veya kullanıcı filesystem’i yoktur. Ders named metadata’nın data validity ve application permission yerine sayılmaması gerektiğini vurgular.
Recovery sınırı görünür kalmalı
Orderly reopen sonrası aynı bytes’ı okumak normal lifecycle kanıtıdır; elektrik kesilmesi, hardware cache veya filesystem recovery için ayrı kanıt gerekir. fsync callback/completion’ın tek başına bütün deployment topology’sinde durability olarak etiketlenmesi öğrencinin yanlış boundary öğrenmesine yol açar. Aynı şekilde S3 metadata dokumentasyonuyla local file’ın S3 durability’sini ölçtüğünü söylemek yanlıştır.
Failure branch’te candidate reference NOT NULL constraint’e takılır; imported query veya malformed input çalıştırılmaz. Amaç persistence ownership’i göstermek: database rollback file’ın geçmiş write’ını geri almaz. Cleanup policy sonradan orphan’ı kaldırabilir; bunu atomic commit olarak adlandırma. Public response hazırlanması da client’ın onu aldığını kanıtlamaz; bu ders HTTP transfer veya Browser capture göstermez.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Byte ve reference
- Representation byte sayısı seçildi
Çay newline text’i dört character içerir ama UTF-8 c38761790a ile beş byte’tır. Reference octets=5 character count’tan ayrı hesaplanır.
- Persistence observation
- Characters=4
- Tuple/selector review
- Octets=5
- Evidence conclusion
- Reference review pending
- File operation sınırları okundu
Normal record writtenOctets=5, flushCompleted=true ve fsyncCompleted=true içerir. Buffered write, flush ve syscall completion ayrı observation’lardır.
- Persistence observation
- Write=5 bytes
- Tuple/selector review
- Flush/fsync completed
- Evidence conclusion
- Metadata commit pending
- Metadata reference tuple’ı eşleştirildi
metadataCommitted=true olan reference noteId=tea, key=notes/tea.txt ve octets=5 taşır. File byte identity ve application identity bu tuple ile bağlanır.
- Persistence observation
- Metadata committed=true
- Tuple/selector review
- Reference octets=5
- Evidence conclusion
- Mapping matched
- Readback ayrı kontrol edildi
readbackHex=c38761790a, beklenen encoded bytes ile aynıdır. Bu readback ve reference birlikte available=true sonucunu destekler; metadata etiketi tek başına yeterli değildir.
- Persistence observation
- Readback bytes match
- Tuple/selector review
- Available=true
- Evidence conclusion
- Content/reference linked
- Durability iddiası sınırlandı
crashRecoveryTested=false’tur. Fsync completion ve orderly readback, power loss, directory sync veya bütün deployment topology’si için durability ölçümü değildir.
- Persistence observation
- Syscall/readback known
- Tuple/selector review
- Crash recovery untested
- Evidence conclusion
- No universal durability claim
- Object service scope’u ayrıldı
actualS3Executed=false korunur. Object metadata kavramı local dictionary ve file örneğinde anlatılır; S3 replication veya service durability sonucu verilmez.
- Persistence observation
- Local persistence tuple known
- Tuple/selector review
- S3 not executed
- Evidence conclusion
- Service guarantees unobserved
Availability testi
- Persistence selector koşulu açıldı
Selector metadataCommitted=false ve available=true olan observation’ları sayar. Bu condition application availability ile reference commit tutarlılığını inceler.
- Persistence observation
- No commit + available condition
- Tuple/selector review
- Selector review pending
- Evidence conclusion
- Publication review pending
- Normal negative tuple okundu
XML metadataCommitted=false ve available=false içerir, expected=0’dır. Bu no-match tek observation içindeki güvenli unavailable kararına bağlıdır.
- Persistence observation
- Metadata commit=false
- Tuple/selector review
- Available=false
- Evidence conclusion
- Expected=0
- Pozitif comparison ayrı tutuldu
positiveFixtureXml metadataCommitted=false ve available=true içerir; positiveExpected=1’dir. Bu inconsistent tuple gerçek publication olayı diye sunulmaz.
- Persistence observation
- Comparison expected=1
- Tuple/selector review
- Inconsistent fixture
- Evidence conclusion
- No incident claim
- Orphan ile dangling ayrımı korundu
Orphan’da bytes var, reference yoktur; dangling’de reference var, bytes yoktur. Aynı unavailable sonuç iki owner’ın farklı eksikliğinden doğabilir.
- Persistence observation
- Orphan: bytes only
- Tuple/selector review
- Dangling: reference only
- Evidence conclusion
- Unavailable causes differ
- Missing observation bilinmez kaldı
Commit veya available field’ı eksikse sıfır eşleşme doğru publication control kanıtı olmaz. File state ve reference state için aynı resource bağı gerekir.
- Persistence observation
- Coverage may be missing
- Tuple/selector review
- Publication UNKNOWN
- Evidence conclusion
- Resource binding required
- Recovery observation ayrı istendi
Orphan reconciliation sonucu için kimin hangi key’i temizlediği veya reference’ı tamamladığı ayrıca görülmelidir. Selector’ın sıfırı cleanup veya cross-store atomicity kanıtı değildir.
- Persistence observation
- Recovery evidence separate
- Tuple/selector review
- Cross-store atomic=false
- Evidence conclusion
- No invented cleanup result
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Reference contract ve data contract’ını birlikte kaydet
Application note ID’sinden fixed store identity’ye mapping seçer; database row’unun aynı key ve byte length’i taşıdığını independent read ile kontrol eder. Adapter içerik için bytes, metadata için açık fields döndürür. Fixture media type text/plain ve synthetic public content kullanır; schema validation ve authorization başka application kararlarıdır. Object key’i local pathname’e rastgele birleştirmek yerine bu dersin bounded mapping’ini okuyarak namespace farkını gör.
Encode edilmiş byte’ları file’dan okunan raw byte’larla karşılaştır; byte count’u character count’tan ayrı hesapla. Buffered write, flush, fsync ve close sonrası orderly reopen farklı gözlemlerdir. os.fsync’in başarı dönmesi ve readback’in eşleşmesi, crash durability, directory sync veya object service replication hakkında sonuç vermez. Artifact’te her completion’ın neyi kanıtladığı bu yüzden ayrı tutulmalıdır.
Partial completion’ı temizlenebilir state olarak tasarla
File-store başarısından sonra database failure olduğunda application false success dönmez. Reference’ın rollback edilmesi ile byte’ların kalması ayrı sonuçlardır; kalan orphan byte’lar ayrıca okunabilir. Cleanup veya reconciliation kararı, hangi owner’ın hangi key’i yönettiğini bilmelidir. Local örneğin geçici klasörünü silmek, production orphan scanner’ın davranışını veya kullanıcı dosyaları için uygun cleanup policy’sini göstermez.
Backing missing case’te database reference var ama fixed file read FileNotFoundError verir; available yerine explicit inconsistent/unavailable result üretilir. Metadata-only lookup ile full content read farklı işlerdir. Bu dersin application→database konusu bytes’ın database’e zorunlu konması anlamına gelmez: database relational reference’ı, file/object owner bytes’ı tutabilir. Cross-owner atomicity, recovery ve public exposure kararları ayrı gereksinimlerdir.
ŞİMDİ VAKAYA UYGULA
Bytes veya reference mevcutken neden resource unavailable kalabilir?
Çay newline representation’ı file owner’da, note reference’ı database owner’da tutulur. İki owner’ın partial completion’ı availability ve recovery için ayrı değerlendirilir.
Vakadaki cached representation’ı authoritative data owner’la karşılaştır. Stored value, revision, transaction ve cache copy için aynı completion sonucunu kullanma.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Public note bytes/reference ledger
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"identity": {
"namespace": "public-notes",
"key": "notes/tea.txt",
"fixedBackingFile": "tea.txt",
"objectMetadata": {
"contentType": "text/plain"
},
"actualS3Executed": false
},
"bytes": {
"text": "Çay\n",
"utf8Hex": "c38761790a",
"octets": 5,
"characters": 4
},
"normal": {
"writtenOctets": 5,
"flushCompleted": true,
"fsyncCompleted": true,
"metadataCommitted": true,
"reference": {
"noteId": "tea",
"key": "notes/tea.txt",
"octets": 5
},
"readbackHex": "c38761790a",
"available": true,
"crashRecoveryTested": false
},
"orphan": {
"filePresent": true,
"metadataCommitted": false,
"referenceRows": 0,
"available": false,
"failure": "benign NOT NULL reference candidate; explicit rollback",
"fileWriteRolledBackByDatabase": false
},
"dangling": {
"referenceRows": 1,
"filePresent": false,
"readError": "FileNotFoundError",
"available": false
},
"atomicity": {
"crossStoreAtomic": false,
"actualStorage": "owned temporary fixed files + sqlite3 references; local metadata dictionary"
},
"selector": {
"language": "XPath",
"xml": "<audit><persistence metadataCommitted=\"false\" available=\"false\"/></audit>",
"xpath": "count(/audit/persistence[@metadataCommitted='false' and @available='true'])",
"expected": 0,
"positiveFixtureXml": "<audit><persistence metadataCommitted=\"false\" available=\"true\"/></audit>",
"positiveExpected": 1,
"scope": "Only authored protocol-decision observations, not product log field names or a live HTTP capture.",
"missingFieldBehavior": "Missing observation is insufficient evidence; zero matches is not proof of correct runtime behavior."
}
}- identity
- Object key ve fixed owned file ayrı namespaces.
- bytes
- UTF-8 byte/character bağımsız sayımı.
- normal/orphan/dangling
- Ayrı store/reference completion outcomes.
- selector
- Synthetic cross-owner false-success kararı.
Yalnız fixed synthetic content ve kendi temporary file/SQLite reference’ı. S3, upload, user files veya power-loss testi yok.
İki yanlış kanı
Object key’de slash varsa gerçek filesystem directory’sidir.
S3 flat object model’inde prefix logical hierarchy olabilir; filesystem namespace ayrı mekanizmadır.
File write ve database COMMIT tek atomic persistence adımıdır.
Seçilmiş ayrı owners partial completion bırakabilir; rollback file write’ını geri almaz, crash durability ayrıca kanıt ister.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
File yazıldı, fakat metadata transaction’ı rollback oldu. Note kullanılabilir sayılır mı?
- Hayır. Orphan file kalabilir, fakat referenceRows=0.
- Evet. filePresent=true bütün yayınlama koşullarını sağlar.
Gerekçeli cevabı oku
Hayır. Orphan file kalabilir, fakat referenceRows=0. — Bu örnekte kullanılabilirlik için commit edilmiş metadata gerekir. Database rollback, daha önce yapılan file write işlemini geri almaz.
Reference kaydı var, fakat file yok. notes/tea.txt key’i bu örnekte keyfi bir filesystem path’i mi seçiyor?
Dersten seçilen artifact alanları; öğretim örneği
- dangling
- {"referenceRows":1,"filePresent":false,"readError":"FileNotFoundError","available":false}
- identity.key
- notes/tea.txt
- identity.fixedBackingFile
- tea.txt
- Key’deki slash bütün filesystem path’lerine erişim sağlar.
- Hayır. Backing filename tea.txt; read hatası available=false üretir.
Gerekçeli cevabı oku
Hayır. Backing filename tea.txt; read hatası available=false üretir. — Object key metadata kimliğidir. Bu örnekte mapping önceden belirlenmiştir; S3 çalıştırılmaz ve keyfi fiziksel path kullanılmaz.
Flush/fsync ve metadata commit tamamlandı. Neden bundan cross-store atomic crash recovery garantisi çıkaramayız?
Gerekçeli cevabı oku
Normal readback, bu işlemde yazılan byte’ların okunabildiğini gösterir; crashRecoveryTested=false. Database transaction’ı file/object write işlemiyle kendiliğinden tek atomic birim oluşturmaz. Orphan ve dangling örnekleri farklı kısmi sonuçları gösterir. Recovery veya compensation policy’si ayrıca tasarlanmalı ve doğrulanmalıdır.
□ Başarılı readback sonucunu crash testi saymadım.
□ İki store arasındaki atomicity için ayrı kanıt gerektiğini açıkladım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- Amazon S3 — Working with object metadataWorking with object metadata · User-defined metadata
- Amazon S3 — Naming objectsNaming Amazon S3 objects · Choosing object key names
- Python 3.14 — ioI/O Base Classes: flush() · BufferedWriter: flush() · BufferedWriter: write(b)
- Python 3.14 — osos.fsync(fd)
- SQLite — Transaction2. Transactions · 2.1. Read transactions versus write transactions · 2.2. DEFERRED, IMMEDIATE, and EXCLUSIVE transactions · 2.3. Implicit versus explicit transactions
- Python 3.14 — sqlite3Tutorial · sqlite3.connect · Cursor.execute · How to use placeholders to bind values in SQL queries · Transaction control via the isolation_level attribute · How to use the connection context manager