- Address seg fault in "storageRecruiter" actor
This commit is contained in:
parent
b8fbd18199
commit
706164d8ae
|
@ -2631,7 +2631,11 @@ public:
|
||||||
.detail("TSSID", tssId)
|
.detail("TSSID", tssId)
|
||||||
.detail("Reason",
|
.detail("Reason",
|
||||||
self->zeroHealthyTeams->get() ? "ZeroHealthyTeams" : "TooMany");
|
self->zeroHealthyTeams->get() ? "ZeroHealthyTeams" : "TooMany");
|
||||||
|
Promise<Void> shutdown = self->shutdown;
|
||||||
killPromise.send(Void());
|
killPromise.send(Void());
|
||||||
|
if (!shutdown.canBeSet()) {
|
||||||
|
return Void(); // "self" got destroyed, so return.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3582,6 +3586,8 @@ DDTeamCollection::DDTeamCollection(Database const& cx,
|
||||||
|
|
||||||
DDTeamCollection::~DDTeamCollection() {
|
DDTeamCollection::~DDTeamCollection() {
|
||||||
TraceEvent("DDTeamCollectionDestructed", distributorId).detail("Primary", primary);
|
TraceEvent("DDTeamCollectionDestructed", distributorId).detail("Primary", primary);
|
||||||
|
// Signal that the object is being destroyed.
|
||||||
|
shutdown.send(Void());
|
||||||
|
|
||||||
// Cancel the teamBuilder to avoid creating new teams after teams are cancelled.
|
// Cancel the teamBuilder to avoid creating new teams after teams are cancelled.
|
||||||
teamBuilder.cancel();
|
teamBuilder.cancel();
|
||||||
|
|
|
@ -272,6 +272,12 @@ class DDTeamCollection : public ReferenceCounted<DDTeamCollection> {
|
||||||
|
|
||||||
LocalityMap<UID> machineLocalityMap; // locality info of machines
|
LocalityMap<UID> machineLocalityMap; // locality info of machines
|
||||||
|
|
||||||
|
// A mechanism to tell actors that reference a DDTeamCollection object through a direct
|
||||||
|
// pointer (without doing reference counting) that the object is being destroyed.
|
||||||
|
// (Introduced to solve the problem of "self" getting destroyed from underneath the
|
||||||
|
// "storageRecruiter" actor).
|
||||||
|
Promise<Void> shutdown;
|
||||||
|
|
||||||
// Randomly choose one machine team that has chosenServer and has the correct size
|
// Randomly choose one machine team that has chosenServer and has the correct size
|
||||||
// When configuration is changed, we may have machine teams with old storageTeamSize
|
// When configuration is changed, we may have machine teams with old storageTeamSize
|
||||||
Reference<TCMachineTeamInfo> findOneRandomMachineTeam(TCServerInfo const& chosenServer) const;
|
Reference<TCMachineTeamInfo> findOneRandomMachineTeam(TCServerInfo const& chosenServer) const;
|
||||||
|
|
Loading…
Reference in New Issue