技術的自由への長い道

日々学んでいきます。

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()
}