idgs::store::ListenerResultCode RddStoreListener::insert(idgs::store::ListenerContext* context) { if (!rddLocal) { LOG(ERROR) << "RDD is not found."; return idgs::store::LRC_CONTINUE; } auto& key = * context->getKey(); auto& value = * context->getValue(); if (rddLocal->isReplicatedRdd()) { auto partitions = rddLocal->getLocalPartitions(); auto it = partitions.begin(); for (; it != partitions.end(); ++ it) { auto partitionActor = rddLocal->getPartitionActor(* it); idgs::actor::ActorMessagePtr message = std::make_shared<idgs::actor::ActorMessage>(); message->setOperationName(RDD_STORE_LISTENER); message->setSourceActorId(partitionActor.actor_id()); message->setSourceMemberId(partitionActor.member_id()); message->setDestActorId(partitionActor.actor_id()); message->setDestMemberId(partitionActor.member_id()); message->setPayload(std::make_shared<pb::RddRequest>()); message->setAttachment(RE_PARTITION_KEY, key); message->setAttachment(RE_PARTITION_VALUE, value); idgs::actor::postMessage(message); } } else { auto partitionId = context->getPartitionId(); auto partitionActor = rddLocal->getPartitionActor(partitionId); idgs::actor::ActorMessagePtr message = std::make_shared<idgs::actor::ActorMessage>(); message->setOperationName(RDD_STORE_LISTENER); message->setSourceActorId(partitionActor.actor_id()); message->setSourceMemberId(partitionActor.member_id()); message->setDestActorId(partitionActor.actor_id()); message->setDestMemberId(partitionActor.member_id()); message->setPayload(std::make_shared<pb::RddRequest>()); message->setAttachment(RE_PARTITION_KEY, key); message->setAttachment(RE_PARTITION_VALUE, value); idgs::actor::sendMessage(message); } return idgs::store::LRC_CONTINUE; }
void MembershipTableMgr::handleMemberStatusEvent(const std::shared_ptr<ActorMessage>& actor_msg_ptr) { function_footprint(); if (members.empty() || !getLocalMember()) { return; } auto payload = dynamic_cast<MemberStatusEvent*>(actor_msg_ptr->getPayload().get()); uint32_t pos = payload->member_id(); auto status = payload->status(); auto member = getMember(pos); if (!member) { return; } setMemberStatus(member, status); if(member->isPrepared()) { DVLOG(0) << toSimpleString(); joining.store(false); } }