/** * @brief reallocPackets * 重新分配数据包,根据各条链路 * @param {interge} sId * * @return {interge} */ int bulkAgent::reallocPackets(int sId) { slist<bulkPacket>* qsv = getStore(sId); if (qsv->empty()) { return 0; } double sum = qsv->size(); double allWeight = getAllWeight(); double singleWeight; int tag = OUT; slist<bulkLink*>::iterator iter; slist<bulkLink*>* pLink = _node.getOutputLink(); bulkBuffer* pBuf; int* bufSum; int count; //cout<<"sum:"<<sum<<endl; //cout<<"nodeId:"<<_node.getNodeId()<<endl; while (tag != DEFAULT) { for (iter = pLink->begin(); iter != pLink->end(); iter++) { if ((singleWeight = (*iter)->getWeight()) != 0) { count = 0; int index; double proportion = (1/singleWeight) / allWeight; double num = ROUND(sum * proportion); if (tag == OUT) { index = (*iter)->getTailId(); bufSum = &((*iter)->tailBufNum_[sId]); pBuf = &_sendbuf[index]; } else if (tag == IN) { index = (*iter)->getHeadId(); bufSum = &((*iter)->headBufNum_[sId]); pBuf = &_recvbuf[index]; } while (!qsv->empty() && count < num) { bulkPacket& packet = qsv->front(); pBuf->pushPacketsToBuf(sId, packet); qsv->pop_front(); count++; } //cout<<(*iter)->getGraphEdgeSource()<<"->"<<(*iter)->getGraphEdgeSink()<<" num:"<<count<<endl; *bufSum = count; } } pLink = _node.getInputLink(); tag++; } while (!qsv->empty()) { bulkPacket& packet = qsv->front(); pBuf->pushPacketsToBuf(sId, packet); qsv->pop_front(); count++; } *bufSum = count; qsv->~slist(); qsv = NULL; return (int)sum; }
void MigrationVerifyActor::handleVerifyRequest(const idgs::actor::ActorMessagePtr& msg) { pb::MigrationVerifyRequest* request = NULL; if (msg->getPayload()) { request = dynamic_cast<pb::MigrationVerifyRequest*>(msg->getPayload().get()); } if (request && request->has_schema_name() && request->has_store_name()) { auto datastore = idgs::store::idgs_store_module()->getDataStore(); auto store = datastore->getStore(request->schema_name(), request->store_name()); if (!store) { LOG(ERROR) << "store " << request->schema_name() << "." << request->store_name() << " is not found."; auto payload = std::make_shared<pb::MigrationVerifyResponse>(); payload->set_result_code(static_cast<int32_t>(RC_STORE_NOT_FOUND)); auto respMsg = msg->createResponse(); respMsg->setOperationName("VERIFY_RESPONSE"); respMsg->setPayload(payload); idgs::actor::sendMessage(respMsg); return; } if (store->getStoreConfig()->getStoreConfig().partition_type() != idgs::store::pb::PARTITION_TABLE) { LOG(ERROR) << "store " << request->schema_name() << "." << request->store_name() << " is not a partition store."; auto payload = std::make_shared<pb::MigrationVerifyResponse>(); payload->set_result_code(static_cast<int32_t>(RC_STORE_NOT_FOUND)); auto respMsg = msg->createResponse(); respMsg->setOperationName("VERIFY_RESPONSE"); respMsg->setPayload(payload); idgs::actor::sendMessage(respMsg); return; } } clientMsg = msg; auto& members = idgs_application()->getMemberManager()->getMemberTable(); auto it = members.begin(); for (; it != members.end(); ++ it) { if (it->isLocalStore() && (it->getState() == idgs::pb::MS_PREPARED || it->getState() == idgs::pb::MS_ACTIVE)) { auto reqMsg = createActorMessage(); reqMsg->setOperationName("LOCAL_VERIFY_REQUEST"); reqMsg->setDestMemberId(it->getId()); reqMsg->setDestActorId(actorId); reqMsg->setPayload(msg->getPayload()); idgs::actor::sendMessage(reqMsg); ++ memberSize; } } }
ref <store> session::getStore(ref <security::authenticator> auth) { return (getStore(m_props["store.protocol"], auth)); }
void MigrationVerifyActor::handleLocalVerifyRequest(const idgs::actor::ActorMessagePtr& msg) { pb::MigrationVerifyRequest* request = NULL; if (msg->getPayload()) { request = dynamic_cast<pb::MigrationVerifyRequest*>(msg->getPayload().get()); } auto datastore = idgs::store::idgs_store_module()->getDataStore(); std::vector<idgs::store::StorePtr> stores; if (request && request->has_schema_name() && request->has_store_name()) { auto store = datastore->getStore(request->schema_name(), request->store_name()); stores.push_back(store); } else { datastore->getStores(stores); } auto app = idgs_application(); auto cluster = app->getClusterFramework(); auto pcnt = cluster->getPartitionCount(); auto bkcnt = cluster->getClusterConfig()->max_replica_count() - 1; auto local = cluster->getLocalMember()->getId(); auto partitionMgr = app->getPartitionManager(); auto payload = std::make_shared<pb::MigrationVerifyResponse>(); payload->set_result_code(static_cast<int32_t>(RC_SUCCESS)); auto memberData = payload->add_member_data(); memberData->set_member_id(local); for (int32_t i = 0; i < stores.size(); ++ i) { auto& store = stores.at(i); auto& storeConfigWrapper = store->getStoreConfig(); if (storeConfigWrapper->getStoreConfig().partition_type() == idgs::store::pb::PARTITION_TABLE) { auto pstore = dynamic_cast<idgs::store::PartitionedStore*>(store.get()); auto& schemaName = store->getStoreConfig()->getSchema(); auto& storeName = store->getStoreConfig()->getStoreConfig().name(); auto storeData = memberData->add_store_data(); storeData->set_schema_name(schemaName); storeData->set_store_name(storeName); for (int32_t p = 0; p < pcnt; ++ p) { auto partition = partitionMgr->getPartition(p); for (int32_t pos = 0; pos < bkcnt + 1; ++ pos) { if (partition->getMemberId(pos) == local) { auto partitionData = storeData->add_partition_data(); partitionData->set_partition_id(p); partitionData->set_position(pos); partitionData->set_member_id(local); partitionData->set_size(pstore->dataSize(p)); VLOG(0) << schemaName << "." << storeName << " partition " << p << "(" << pos << ") data size " << partitionData->size() << " on member " << local; std::shared_ptr<idgs::store::StoreMap> map; pstore->snapshotStore(p, map); auto it = map->iterator(); while (it->hasNext()) { idgs::store::StoreOption ps; storeConfigWrapper->calculatePartitionInfo(it->key(), &ps); ps.memberId = partitionMgr->getPartition(ps.partitionId)->getMemberId(pos); auto keyPartition = partitionData->add_key_partition(); keyPartition->set_key_partition_id(ps.partitionId); keyPartition->set_key_member_id(ps.memberId); it->next(); } } } } } } auto respMsg = msg->createResponse(); respMsg->setOperationName("VERIFY_RESPONSE"); respMsg->setPayload(payload); idgs::actor::sendMessage(respMsg); }
shared_ptr <store> session::getStore(const shared_ptr <security::authenticator>& auth) { return getStore(m_props["store.protocol"], auth); }