Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Store + reference

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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

  1. 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ı
  2. 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ı
  3. 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
  4. 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
  5. 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

  1. İ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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. İ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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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ı?

  1. Hayır. Orphan file kalabilir, fakat referenceRows=0.
  2. 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
  1. Key’deki slash bütün filesystem path’lerine erişim sağlar.
  2. 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