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