mirror of
https://github.com/apple/foundationdb.git
synced 2025-06-01 10:45:56 +08:00
do not kill the master unless we have a dbInfo from the current cluster controller
This commit is contained in:
parent
e4613bcdb2
commit
6a38f81269
@ -192,7 +192,7 @@ struct LifetimeToken {
|
||||
LifetimeToken() : count(0) {}
|
||||
|
||||
bool isStillValid( LifetimeToken const& latestToken, bool isLatestID ) const {
|
||||
return (ccID == latestToken.ccID || !latestToken.ccID.isValid()) && (count >= latestToken.count || isLatestID);
|
||||
return ccID == latestToken.ccID && (count >= latestToken.count || isLatestID);
|
||||
}
|
||||
std::string toString() const {
|
||||
return ccID.shortString() + format("#%lld", count);
|
||||
|
@ -717,7 +717,7 @@ ACTOR Future<Void> storageServer(IKeyValueStore* persistentData, StorageServerIn
|
||||
Reference<AsyncVar<ServerDBInfo>> db, std::string folder,
|
||||
Promise<Void> recovered,
|
||||
Reference<ClusterConnectionFile> connFile ); // changes pssi->id() to be the recovered ID); // changes pssi->id() to be the recovered ID
|
||||
ACTOR Future<Void> masterServer(MasterInterface mi, Reference<AsyncVar<ServerDBInfo>> db,
|
||||
ACTOR Future<Void> masterServer(MasterInterface mi, Reference<AsyncVar<ServerDBInfo>> db, Reference<AsyncVar<Optional<ClusterControllerFullInterface>>> ccInterface,
|
||||
ServerCoordinators serverCoordinators, LifetimeToken lifetime, bool forceRecovery);
|
||||
ACTOR Future<Void> masterProxyServer(MasterProxyInterface proxy, InitializeMasterProxyRequest req,
|
||||
Reference<AsyncVar<ServerDBInfo>> db, std::string whitelistBinPaths);
|
||||
|
@ -1619,7 +1619,7 @@ ACTOR Future<Void> masterCore( Reference<MasterData> self ) {
|
||||
throw internal_error();
|
||||
}
|
||||
|
||||
ACTOR Future<Void> masterServer( MasterInterface mi, Reference<AsyncVar<ServerDBInfo>> db, ServerCoordinators coordinators, LifetimeToken lifetime, bool forceRecovery )
|
||||
ACTOR Future<Void> masterServer( MasterInterface mi, Reference<AsyncVar<ServerDBInfo>> db, Reference<AsyncVar<Optional<ClusterControllerFullInterface>>> ccInterface, ServerCoordinators coordinators, LifetimeToken lifetime, bool forceRecovery )
|
||||
{
|
||||
state Future<Void> onDBChange = Void();
|
||||
state PromiseStream<Future<Void>> addActor;
|
||||
@ -1635,8 +1635,8 @@ ACTOR Future<Void> masterServer( MasterInterface mi, Reference<AsyncVar<ServerDB
|
||||
loop choose {
|
||||
when (wait( core )) { break; }
|
||||
when (wait( onDBChange )) {
|
||||
onDBChange = db->onChange();
|
||||
if (!lifetime.isStillValid( db->get().masterLifetime, mi.id()==db->get().master.id() )) {
|
||||
onDBChange = db->onChange() || ccInterface->onChange();
|
||||
if (ccInterface->get().present() && db->get().clusterInterface == ccInterface->get().get() && !lifetime.isStillValid( db->get().masterLifetime, mi.id()==db->get().master.id() )) {
|
||||
TraceEvent("MasterTerminated", mi.id()).detail("Reason", "LifetimeToken").detail("MyToken", lifetime.toString()).detail("CurrentToken", db->get().masterLifetime.toString());
|
||||
TEST(true); // Master replaced, dying
|
||||
if (BUGGIFY) wait( delay(5) );
|
||||
|
@ -1182,7 +1182,7 @@ ACTOR Future<Void> workerServer(
|
||||
DUMPTOKEN( recruited.getCommitVersion );
|
||||
|
||||
//printf("Recruited as masterServer\n");
|
||||
Future<Void> masterProcess = masterServer( recruited, dbInfo, ServerCoordinators( connFile ), req.lifetime, req.forceRecovery );
|
||||
Future<Void> masterProcess = masterServer( recruited, dbInfo, ccInterface, ServerCoordinators( connFile ), req.lifetime, req.forceRecovery );
|
||||
errorForwarders.add( zombie(recruited, forwardError( errors, Role::MASTER, recruited.id(), masterProcess )) );
|
||||
req.reply.send(recruited);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user