func (t *FileTest) SetUp(ti *TestInfo) { t.ctx = ti.Ctx t.clock.SetTime(time.Date(2012, 8, 15, 22, 56, 0, 0, time.Local)) t.leaser = lease.NewFileLeaser("", math.MaxInt32, math.MaxInt64) t.bucket = gcsfake.NewFakeBucket(&t.clock, "some_bucket") // Set up the backing object. var err error t.initialContents = "taco" t.backingObj, err = gcsutil.CreateObject( t.ctx, t.bucket, fileInodeName, t.initialContents) AssertEq(nil, err) // Create the inode. t.in = inode.NewFileInode( fileInodeID, t.backingObj, fuseops.InodeAttributes{ Uid: uid, Gid: gid, Mode: fileMode, }, math.MaxUint64, // GCS chunk size t.bucket, t.leaser, gcsproxy.NewObjectSyncer( 1, // Append threshold ".gcsfuse_tmp/", t.bucket), &t.clock) t.in.Lock() }
// Implementation detail of lookUpOrCreateInodeIfNotStale; do not use outside // of that function. // // LOCKS_REQUIRED(fs.mu) func (fs *fileSystem) mintInode(name string, o *gcs.Object) (in inode.Inode) { // Choose an ID. id := fs.nextInodeID fs.nextInodeID++ // Create the inode. switch { // Explicit directories case o != nil && inode.IsDirName(o.Name): in = inode.NewExplicitDirInode( id, o, fuseops.InodeAttributes{ Uid: fs.uid, Gid: fs.gid, Mode: fs.dirMode, }, fs.implicitDirs, fs.dirTypeCacheTTL, fs.bucket, fs.clock) // Implicit directories case inode.IsDirName(name): in = inode.NewDirInode( id, name, fuseops.InodeAttributes{ Uid: fs.uid, Gid: fs.gid, Mode: fs.dirMode, }, fs.implicitDirs, fs.dirTypeCacheTTL, fs.bucket, fs.clock) case inode.IsSymlink(o): in = inode.NewSymlinkInode( id, o, fuseops.InodeAttributes{ Uid: fs.uid, Gid: fs.gid, Mode: fs.fileMode | os.ModeSymlink, }) default: in = inode.NewFileInode( id, o, fuseops.InodeAttributes{ Uid: fs.uid, Gid: fs.gid, Mode: fs.fileMode, }, fs.gcsChunkSize, fs.bucket, fs.leaser, fs.objectSyncer, fs.clock) } // Place it in our map of IDs to inodes. fs.inodes[in.ID()] = in return }