std::atomic_uint references;
Worker(CephContext *c, WorkerPool *p, int i)
: cct(c), pool(p), done(false), id(i), perf_logger(NULL), center(c), references(0) {
- center.init(InitEventNumber);
+ center.init(InitEventNumber, i);
char name[128];
sprintf(name, "AsyncMessenger::Worker-%d", id);
// initialize perf_logger
thread_local EventCenter* local_center = nullptr;
-int EventCenter::init(int n)
+int EventCenter::init(int n, unsigned i)
{
// can't init multi times
assert(nevent == 0);
+
+ id = i;
+
#ifdef HAVE_EPOLL
driver = new EpollDriver(cct);
#else
int notify_send_fd;
NetHandler net;
EventCallbackRef notify_handler;
+ unsigned id = 10000;
int process_time_events();
FileEvent *_get_file_event(int fd) {
~EventCenter();
ostream& _event_prefix(std::ostream *_dout);
- int init(int nevent);
+ int init(int nevent, unsigned id);
void set_owner();
+ unsigned get_id() { return id; }
// Used by internal thread
int create_file_event(int fd, int mask, EventCallbackRef ctxt);
TEST(EventCenterTest, FileEventExpansion) {
vector<int> sds;
EventCenter center(g_ceph_context);
- center.init(100);
+ center.init(100, 0);
EventCallbackRef e(new FakeEvent());
for (int i = 0; i < 300; i++) {
int sd = ::socket(AF_INET, SOCK_STREAM, 0);
public:
EventCenter center;
- explicit Worker(CephContext *c): cct(c), done(false), center(c) {
- center.init(100);
+ explicit Worker(CephContext *c, int idx): cct(c), done(false), center(c) {
+ center.init(100, idx);
}
void stop() {
done = true;
};
TEST(EventCenterTest, DispatchTest) {
- Worker worker1(g_ceph_context), worker2(g_ceph_context);
+ Worker worker1(g_ceph_context, 0), worker2(g_ceph_context, 1);
atomic_t count(0);
Mutex lock("DispatchTest::lock");
Cond cond;