/** * Creates a MasterInfo protobuf from the process's UPID. * * This is only used by the `StandaloneMasterDetector` (used in tests * and outside tests when ZK is not used). * * For example, when we start a slave with * `[email protected]:5050`, since the slave (and consequently * its detector) doesn't have enough information about `MasterInfo`, it * tries to construct it based on the only available information * (`UPID`). * * @param pid The process's assigned untyped PID. * @return A fully formed `MasterInfo` with the IP/hostname information * as derived from the `UPID`. */ MasterInfo createMasterInfo(const UPID& pid) { MasterInfo info; info.set_id(stringify(pid) + "-" + id::UUID::random().toString()); // NOTE: Currently, we store the ip in network order, which should // be fixed. See MESOS-1201 for more details. // TODO(marco): `ip` and `port` are deprecated in favor of `address`; // remove them both after the deprecation cycle. info.set_ip(pid.address.ip.in()->s_addr); info.set_port(pid.address.port); info.mutable_address()->set_ip(stringify(pid.address.ip)); info.mutable_address()->set_port(pid.address.port); info.set_pid(pid); Try<string> hostname = net::getHostname(pid.address.ip); if (hostname.isSome()) { // Hostname is deprecated; but we need to update it // to maintain backward compatibility. // TODO(marco): Remove once we deprecate it. info.set_hostname(hostname.get()); info.mutable_address()->set_hostname(hostname.get()); } foreach (const MasterInfo::Capability& capability, mesos::internal::master::MASTER_CAPABILITIES()) { info.add_capabilities()->CopyFrom(capability); }
int ReplicationImpl::InitFakeMaster() { MasterInfo info; int ret = master_manager_->GetMasterInfo(&info); if (ret) { ColorLogError("%s get master info fail, ret %d", __func__, ret); return ret; } string ip = Utils::GetIP(info.svr_id()); if (info.svr_id() == option_->GetBinLogSvrConfig()->GetEngineSvrID()) { LogVerbose("%s get other ip %s", __func__, ip.c_str()); } else { ctx_->SelfConn(false); } MySqlManager* mysql_manager = MySqlManager::GetGlobalMySqlManager(option_); if (mysql_manager->IsReplicaProcess()) { ip = Utils::GetIP(option_->GetBinLogSvrConfig()->GetEngineSvrID()); ctx_->SelfConn(true); } LogVerbose("%s connect ip %s port %d", __func__, ip.c_str(), info.port()); int master_fd = NetIO::Connect(ip.c_str(), info.port()); if (master_fd < 0) { STATISTICS(ReplMySqlConnectFail()); return SOCKET_FAIL; } return master_fd; }
bool operator == (const MasterInfo& left, const MasterInfo& right) { return left.id() == right.id() && left.ip() == right.ip() && left.port() == right.port() && left.pid() == right.pid() && left.hostname() == right.hostname(); }
void reregistered( SchedulerDriver* driver, const MasterInfo& masterInfo) override { LOG(INFO) << "Reregistered with " << masterInfo.pid(); if (generator == nullptr) { LOG(INFO) << "Starting LoadGenerator at QPS: " << qps; generator = new LoadGenerator(driver, qps, duration); } }
virtual void registered(SchedulerDriver* driver, const FrameworkID&, const MasterInfo& masterInfo) { LOG(INFO) << "Registered with " << masterInfo.pid(); if (generator == NULL) { LOG(INFO) << "Starting LoadGenerator at QPS: " << qps; generator = new LoadGenerator(driver, qps, duration); } }
TEST_F(RegistrarTest, recover) { Registrar registrar(state); SlaveInfo slave; slave.set_hostname("localhost"); SlaveID id; id.set_value("1"); slave.mutable_id()->CopyFrom(id); // Operations preceding recovery will fail. AWAIT_EXPECT_FAILED(registrar.admit(slave)); AWAIT_EXPECT_FAILED(registrar.readmit(slave)); AWAIT_EXPECT_FAILED(registrar.remove(slave)); MasterInfo info; info.set_id("foobar"); info.set_ip(0); info.set_port(5050); info.set_pid("0:5050"); Future<Registry> registry = registrar.recover(info); // Before waiting for the recovery to complete, invoke some // operations to ensure they do not fail. Future<bool> admit = registrar.admit(slave); Future<bool> readmit = registrar.readmit(slave); Future<bool> remove = registrar.remove(slave); AWAIT_READY(registry); EXPECT_EQ(info, registry.get().master().info()); AWAIT_EQ(true, admit); AWAIT_EQ(true, readmit); AWAIT_EQ(true, remove); }
jobject convert(JNIEnv* env, const MasterInfo& masterInfo) { string data; masterInfo.SerializeToString(&data); // byte[] data = ..; jbyteArray jdata = env->NewByteArray(data.size()); env->SetByteArrayRegion(jdata, 0, data.size(), (jbyte*) data.data()); // MasterInfo masterInfo = MasterInfo.parseFrom(data); jclass clazz = FindMesosClass(env, "org/apache/mesos/Protos$MasterInfo"); jmethodID parseFrom = env->GetStaticMethodID(clazz, "parseFrom", "([B)Lorg/apache/mesos/Protos$MasterInfo;"); jobject jmasterInfo = env->CallStaticObjectMethod(clazz, parseFrom, jdata); return jmasterInfo; }
MasterInfo createMasterInfo(const process::UPID& pid) { MasterInfo info; info.set_id(stringify(pid) + "-" + UUID::random().toString()); info.set_ip(pid.address.ip); info.set_port(pid.address.port); info.set_pid(pid); Try<string> hostname = net::getHostname(pid.address.ip); if (hostname.isSome()) { info.set_hostname(hostname.get()); } return info; }
/** * Creates a MasterInfo protobuf from the process's UPID. * * This is only used by the `StandaloneMasterDetector` (used in tests * and outside tests when ZK is not used). * * For example, when we start a slave with * `[email protected]:5050`, since the slave (and consequently * its detector) doesn't have enough information about `MasterInfo`, it * tries to construct it based on the only available information * (`UPID`). * * @param pid The process's assigned untyped PID. * @return A fully formed `MasterInfo` with the IP/hostname information * as derived from the `UPID`. */ MasterInfo createMasterInfo(const process::UPID& pid) { MasterInfo info; info.set_id(stringify(pid) + "-" + UUID::random().toString()); // NOTE: Currently, we store the ip in network order, which should // be fixed. See MESOS-1201 for more details. info.set_ip(pid.address.ip.in().get().s_addr); info.set_port(pid.address.port); info.set_pid(pid); Try<string> hostname = net::getHostname(pid.address.ip); if (hostname.isSome()) { info.set_hostname(hostname.get()); } return info; }