Пример #1
0
        void native_linux_aio_provider::get_event()
        {
            struct io_event events[1];
            int ret;

            const char* name = ::dsn::tools::get_service_node_name(node());
            char buffer[128];
            sprintf(buffer, "%s.aio", name);
            task_worker::set_name(buffer);

            while (true)
            {
                ret = io_getevents(_ctx, 1, 1, events, NULL);
                if (ret > 0) // should be 1
                {
                    dassert(ret == 1, "");
                    struct iocb *io = events[0].obj;
                    complete_aio(io, static_cast<int>(events[0].res), static_cast<int>(events[0].res2));
                }
                else
                {
                    dwarn("io_getevents returns %d, you probably want to try on another machine:-(", ret);
                }
            }
        }
Пример #2
0
hpc_aio_provider::hpc_aio_provider(disk_engine* disk, aio_provider* inner_provider)
    : aio_provider(disk, inner_provider)
{
    _callback = [this](
        int native_error,
        uint32_t io_size,
        uintptr_t lolp_or_events
        )
    {
        auto e = (struct kevent*)lolp_or_events;
        auto io = (struct aiocb*)(e->ident);
        complete_aio(io);
    };

    _looper = nullptr;
}