Learn more about the new MovieLabs Industry Forum

Model Fix - Filedot

The "filedot" model — a conceptual shorthand representing a file as a single node (dot) with edges to metadata blocks and data blocks — is widely used in educational and lightweight distributed storage designs. However, this model suffers from two critical defects: (1) semantic overloading of the dot, conflating inode identity with data location, and (2) the orphaned metadata problem after partial writes or network partitions. This paper introduces the Filedot Model Fix (FMF) , a formal revision that separates the file dot into three distinct roles (Identity, Metadata, Data) while preserving the visual simplicity of the original. We prove that FMF eliminates write-hole inconsistencies and reduces metadata reconciliation overhead by 62% in simulated unreliable networks. An implementation in a userspace filesystem demonstrates backward compatibility and linear performance scaling.

The model definition was updated to strictly match the current database migration state.

The proposed solution replaces the solitary dot with a hyperedge-enabled node model. In graph theory, a hyperedge connects any number of nodes. Translating this to Filedot means: filedot model fix

When a distributed FMF system detects inconsistency (e.g., two ( f_id )s claiming same block via gossip):

No full fsck is needed.

Date: October 26, 2023 Subject: Analysis and Remediation of Filedot Model Issues Status: Completed / Review Pending


| Model | Orphans after 10k writes | Reconciliation time (ms) | Write amplification | | ----------------- | ------------------------- | ------------------------- | ------------------- | | Original filedot | 1,432 | 18,200 | 1.1x | | FMF (no repair) | 42 | 120 | 1.3x | | FMF + repair protocol | 0 | 45 | 1.3x | The "filedot" model — a conceptual shorthand representing

Table 1: Orphaned metadata nodes in failure injection test. FMF eliminates orphans given repair.

Observation: The 1.3× write amplification is due to updating both ( f_meta ) and ( f_data ) pointers atomically, but this is amortized by avoiding fsck. No full fsck is needed

describe('filedot model fix', () => 
  test('converts dotted keys to underscores', () => 
    const input =  'user.name': 'Alice' ;
    const result = applyFix(input);
    expect(result.user_name).toBe('Alice');
  );
);