void TaskManager::dump_tablets(const char *file) { FILE * f = fopen(file, "w"); char *key_buf = NULL; if (NULL == f) { TBSYS_LOG(ERROR, "can't write tablets list file, %s", file); return; } key_buf = new (std::nothrow) char[2 * OB_MAX_ROW_KEY_LENGTH]; if (NULL == key_buf) { TBSYS_LOG(ERROR, "can't allocate memory"); fclose(f); return; } map<uint64_t, TaskInfo>::iterator itr = wait_queue_.begin(); while (itr != wait_queue_.end()) { TabletLocation loc = itr->second.get_location(); fprintf(f, "TaskId:%ld, ReplicaSize=%ld, TableId:%ld\n", itr->first, loc.size(), itr->second.get_table_id()); const ObRange *range = itr->second.get_param().get_range(); int len = hex_to_str(range->start_key_.ptr(), range->start_key_.length(), key_buf, 2 * OB_MAX_ROW_KEY_LENGTH); key_buf[2 * len] = 0; fprintf(f, "S:%s\n", key_buf); len = hex_to_str(range->end_key_.ptr(), range->end_key_.length(), key_buf, 2 * OB_MAX_ROW_KEY_LENGTH); key_buf[2 * len] = 0; fprintf(f, "E:%s\n", key_buf); for (int i = 0;i < loc.size();i++) { loc[i].chunkserver_.to_string(key_buf, 2 * OB_MAX_ROW_KEY_LENGTH); fprintf(f, "MergeServer=%s\n", key_buf); } fprintf(f, "\n"); itr++; } fclose(f); delete [] key_buf; }
// add a new task int TaskManager::insert_task(const TabletLocation & location, TaskInfo & task) { int ret = OB_SUCCESS; task.set_location(location); task.set_token(task_token_); int64_t timestamp = tbsys::CTimeUtil::getTime(); task.set_timestamp(timestamp); std::map<ObServer, int64_t>::const_iterator it; tbsys::CThreadGuard lock(&lock_); task.set_id(++task_id_alloc_); ++total_task_count_; wait_queue_.insert(pair<uint64_t, TaskInfo>(task.get_id(), task)); for (int64_t i = 0; i < location.size(); ++i) { // TODO server counter for select task it = server_manager_.find(location[i].chunkserver_); if (it != server_manager_.end()) { server_manager_[location[i].chunkserver_] = it->second + 1; } else { server_manager_.insert(pair<ObServer, int64_t>(location[i].chunkserver_, 1)); } } TBSYS_LOG(DEBUG, "insert task succ:id[%lu], count[%lu]", task_id_alloc_, total_task_count_); return ret; }
int TaskFactory::insert_new_task(const TabletLocation & list, TaskInfo & task) { int ret = OB_SUCCESS; // alarm instantly if (0 == list.size()) { TBSYS_LOG(ERROR, "check task server list count failed:task[%lu], count[%lu]", task.get_id(), list.size()); } // remain do insert task ret = task_manager_->insert_task(list, task); if (ret != OB_SUCCESS) { TBSYS_LOG(ERROR, "insert a new task failed:ret[%d]", ret); } return ret; }
int TaskFactory::insert_new_task(const TabletLocation & list, TaskInfo & task) { int ret = OB_SUCCESS; // alarm instantly if (0 == list.size()) { TBSYS_LOG(ERROR, "check task server list count failed:task[%lu], count[%lu]", task.get_id(), list.size()); } // remain do insert task ret = task_manager_->insert_task(list, task); if (ret != OB_SUCCESS) { TBSYS_LOG(ERROR, "insert a new task failed:ret[%d]", ret); } else { TBSYS_LOG(TRACE, "insert a new task succ:task[%lu], table_name[%.*s], tablet[%s]", task.get_id(), task.get_param().get_table_name().length(), task.get_param().get_table_name().ptr(), to_cstring(*task.get_param().get_range())); } return ret; }
// add a new task int TaskManager::insert_task(const TabletLocation & location, TaskInfo & task) { int ret = OB_SUCCESS; task.set_location(location); task.set_token(task_token_); int64_t timestamp = tbsys::CTimeUtil::getTime(); task.set_timestamp(timestamp); std::map<ObServer, int64_t>::const_iterator it; tbsys::CThreadGuard lock(&lock_); task.set_id(++task_id_alloc_); ++total_task_count_; wait_queue_.insert(pair<uint64_t, TaskInfo>(task.get_id(), task)); for (int64_t i = 0; i < location.size(); ++i) { // TODO server counter for select task it = server_manager_.find(location[i].chunkserver_); if (it != server_manager_.end()) { server_manager_[location[i].chunkserver_] = it->second + 1; } else { server_manager_.insert(pair<ObServer, int64_t>(location[i].chunkserver_, 1)); } } TBSYS_LOG(DEBUG, "insert task succ:id[%lu], table_name[%.*s], range[%s], count[%lu]", task_id_alloc_, task.get_param().get_table_name().length(), task.get_param().get_table_name().ptr(), to_cstring(*task.get_param().get_range()), total_task_count_); #if false std::map<uint64_t, TaskInfo>::iterator temp_it; for (temp_it = wait_queue_.begin(); temp_it != wait_queue_.end(); ++temp_it) { TBSYS_LOG(TRACE, "dump task range:task[%ld], range[%p:%s], key_obj[%p:%p]", temp_it->first, temp_it->second.get_param().get_range(), to_cstring(*temp_it->second.get_param().get_range()), temp_it->second.get_param().get_range()->start_key_.ptr(), temp_it->second.get_param().get_range()->end_key_.ptr()); } #endif return ret; }