havenask icon indicating copy to clipboard operation
havenask copied to clipboard

索引数据挂载在分布式存储searcher无法正常启动

Open breeent opened this issue 1 year ago • 4 comments

将构建好的索引数据挂载到分布式存储后searcher一直无法成功启动,查看ha3.log发现如下ERROR: [ERROR] [201, build/release64/indexlib/file_system/mmap_file_node.cpp -- LoadData():309] [lock file:[/home/xxx/cases/normal/workdir/local_search_12000/in0_0/runtimedata/in0/generation_0/partition_0_65535/segment_14_level_0/index/title/bitmap_posting] FAILED, errno: 12, errmsg: Cannot allocate memory] 查看代码是mmap_file_node.cpp中的mlock报错

            if (mlock(base + offset, lockLen) < 0)
            {
                INDEXLIB_FATAL_ERROR(FileIO, "lock file: [%s] FAILED"
                        ", errno: %d, errmsg: %s",
                        GetPath().c_str(), errno, strerror(errno));
            }

查看mlock相关文档时认为是 ENOMEM (mlock(), mlock2(), and munlock()) Some of the specified address range does not correspond to mapped pages in the address space of the process. 这个问题导致的,目前通过cp的方式将数据拷贝进来后searcher才能过成功启动。 请问这个问题有没有更好的解决方式呢?

breeent avatar Mar 17 '23 06:03 breeent

引擎可以通过 fslib 组件来统一对下层不同文件系统的访问,对于在分布式存储上的索引来说:

  1. 如果需要类似 lock 的效果,可以在 fslib 中重载 mmap 来实现
  2. 不需要 lock 性质,可以在 fslib 中实现对应的 read/pread 接口,配合引擎的 block cache 使用

foreverhy avatar Mar 20 '23 02:03 foreverhy

现在fslib等底层代码还在逐步开源,目前远端访问的话只支持cache的形式,如果是mmap的话确实是需要先下载到本地才能成功。

xuxijie avatar Mar 20 '23 02:03 xuxijie

现在fslib等底层代码还在逐步开源,目前远端访问的话只支持cache的形式,如果是mmap的话确实是需要先下载到本地才能成功。

嗯嗯明白了,期待这些代码的进一步开源。

breeent avatar Mar 21 '23 03:03 breeent

这个问题是影响线上大规模使用的,等待进一步解决

troycheng avatar Mar 21 '23 03:03 troycheng