Go言語による分散サービス 第三章修正点
第三章 index.goのClose()
下記のようにi.mmap.Syncではなく、i.mmap.UnsafeUnmapをしないとi.file.Truncateでエラーが出てしまう
func (i *index) Close() error { // //mmap上のファイルデータをメモリ上のファイルデータに同期 // if err := i.mmap.Sync(gommap.MS_SYNC); err != nil { // return err // } // //UnsafeUnmapをしないとTruncateがうまく働かないっぽい?,unmapはsyncを含んでいるのでunmapのみでよい if err := i.mmap.UnsafeUnmap(); err != nil { return err } //メモリ上のファイルデータをディスクに同期 if err := i.file.Sync(); err != nil { return err } //newIndexでTruncateした分を元に戻している.unmapしてないとTruncateでエラーが出る if err := i.file.Truncate(int64(i.size)); err != nil { return err } return i.file.Close() }