| 4726 | } |
| 4727 | |
| 4728 | void DDTeamCollection::addServer(StorageServerInterface newServer, |
| 4729 | ProcessClass processClass, |
| 4730 | Promise<Void> errorOut, |
| 4731 | Version addedVersion, |
| 4732 | DDEnabledState const& ddEnabledState) { |
| 4733 | if (!shouldHandleServer(newServer)) { |
| 4734 | return; |
| 4735 | } |
| 4736 | |
| 4737 | if (!newServer.isTss()) { |
| 4738 | allServers.push_back(newServer.id()); |
| 4739 | } |
| 4740 | |
| 4741 | TraceEvent(newServer.isTss() ? "AddedTSS" : "AddedStorageServer", distributorId) |
| 4742 | .detail("ServerID", newServer.id()) |
| 4743 | .detail("ProcessID", newServer.locality.processId()) |
| 4744 | .detail("ProcessClass", processClass.toString()) |
| 4745 | .detail("WaitFailureToken", newServer.waitFailure.getEndpoint().token) |
| 4746 | .detail("Address", newServer.waitFailure.getEndpoint().getPrimaryAddress()); |
| 4747 | |
| 4748 | auto& r = server_and_tss_info[newServer.id()] = makeReference<TCServerInfo>( |
| 4749 | newServer, |
| 4750 | this, |
| 4751 | processClass, |
| 4752 | includedDCs.empty() || |
| 4753 | std::find(includedDCs.begin(), includedDCs.end(), newServer.locality.dcId()) != includedDCs.end(), |
| 4754 | storageServerSet, |
| 4755 | addedVersion); |
| 4756 | |
| 4757 | if (newServer.isTss()) { |
| 4758 | tss_info_by_pair[newServer.tssPairID.get()] = r; |
| 4759 | |
| 4760 | if (server_info.count(newServer.tssPairID.get())) { |
| 4761 | r->onTSSPairRemoved = server_info[newServer.tssPairID.get()]->onRemoved; |
| 4762 | } |
| 4763 | } else { |
| 4764 | server_info[newServer.id()] = r; |
| 4765 | // Establish the relation between server and machine |
| 4766 | checkAndCreateMachine(r); |
| 4767 | } |
| 4768 | |
| 4769 | r->setTracker(storageServerTracker(cx, r.getPtr(), errorOut, addedVersion, ddEnabledState, newServer.isTss())); |
| 4770 | |
| 4771 | if (!newServer.isTss()) { |
| 4772 | // link and wake up tss' tracker so it knows when this server gets removed |
| 4773 | if (tss_info_by_pair.count(newServer.id())) { |
| 4774 | tss_info_by_pair[newServer.id()]->onTSSPairRemoved = r->onRemoved; |
| 4775 | if (tss_info_by_pair[newServer.id()]->wakeUpTracker.canBeSet()) { |
| 4776 | auto p = tss_info_by_pair[newServer.id()]->wakeUpTracker; |
| 4777 | // This callback could delete tss_info_by_pair[newServer.id()], so use a copy |
| 4778 | p.send(Void()); |
| 4779 | } |
| 4780 | } |
| 4781 | |
| 4782 | doBuildTeams = true; // Adding a new server triggers to build new teams |
| 4783 | restartTeamBuilder.trigger(); |
| 4784 | } |
| 4785 | } |
no test coverage detected