in internal/fs/fs.go [501:548]
func (fs *fileSystem) checkInvariantsForLocalFileInodes() {
// INVARIANT: For each k/v, v.Name() == k
for k, v := range fs.localFileInodes {
if !(v.Name() == k) {
panic(fmt.Sprintf(
"Unexpected name: \"%s\" vs. \"%s\"",
v.Name(),
k))
}
}
// INVARIANT: For each value v, inodes[v.ID()] == v
for _, v := range fs.localFileInodes {
if fs.inodes[v.ID()] != v {
panic(fmt.Sprintf(
"Mismatch for ID %v: %v %v",
v.ID(),
fs.inodes[v.ID()],
v))
}
}
// INVARIANT: For each value v, v is not fileInode
for _, v := range fs.localFileInodes {
if _, ok := v.(*inode.FileInode); !ok {
panic(fmt.Sprintf(
"Unexpected file inode %d, type %T",
v.ID(),
v))
}
}
// INVARIANT: For each f in inodes that is local fileInode
// localFileInodes[d.Name()] == f
for _, in := range fs.inodes {
fileInode, ok := in.(*inode.FileInode)
if ok && fileInode.IsLocal() && !fileInode.IsUnlinked() {
if !(fs.localFileInodes[in.Name()] == in) {
panic(fmt.Sprintf(
"localFileInodes mismatch: %q %v %v",
in.Name(),
fs.localFileInodes[in.Name()],
in))
}
}
}
}