mirror of
https://github.com/apple/foundationdb.git
synced 2025-05-14 18:02:31 +08:00
Extend `Endpoint` class to take multiple NetworkAddresses instead of just one. Hence, to talk to an endpoint instead of one IP:PORT, we'll have multiple IP:PORT pairs. This patch simply adds the field and makes changes to compile the codebase. The first element of of `address` field is used everywhere. Hence the way we talk to remains same with this patch. NOTE: Directly accessing the first memeber of Endpoint::address is unsafe as Endpoint() doesn't enforces non-empty address list. However, since the correctness test pass for now and are anyway replacing all those unsafe accesses with ones considering the whole vector, this patch ignores to access them in safe way.
87 lines
2.3 KiB
C++
87 lines
2.3 KiB
C++
/*
|
|
* ClientWorkerInterface.h
|
|
*
|
|
* This source file is part of the FoundationDB open source project
|
|
*
|
|
* Copyright 2013-2018 Apple Inc. and the FoundationDB project authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef FDBCLIENT_CLIENTWORKERINTERFACE_H
|
|
#define FDBCLIENT_CLIENTWORKERINTERFACE_H
|
|
#pragma once
|
|
|
|
#include "fdbclient/FDBTypes.h"
|
|
#include "fdbrpc/FailureMonitor.h"
|
|
#include "fdbclient/Status.h"
|
|
#include "fdbclient/ClientDBInfo.h"
|
|
|
|
// Streams from WorkerInterface that are safe and useful to call from a client.
|
|
// A ClientWorkerInterface is embedded as the first element of a WorkerInterface.
|
|
struct ClientWorkerInterface {
|
|
RequestStream< struct RebootRequest > reboot;
|
|
RequestStream< struct ProfilerRequest > profiler;
|
|
|
|
bool operator == (ClientWorkerInterface const& r) const { return id() == r.id(); }
|
|
bool operator != (ClientWorkerInterface const& r) const { return id() != r.id(); }
|
|
UID id() const { return reboot.getEndpoint().token; }
|
|
NetworkAddress address() const { return reboot.getEndpoint().address[0]; }
|
|
|
|
template <class Ar>
|
|
void serialize( Ar& ar ) {
|
|
ar & reboot & profiler;
|
|
}
|
|
};
|
|
|
|
struct RebootRequest {
|
|
bool deleteData;
|
|
bool checkData;
|
|
|
|
explicit RebootRequest(bool deleteData = false, bool checkData = false) : deleteData(deleteData), checkData(checkData) {}
|
|
|
|
template <class Ar>
|
|
void serialize(Ar& ar) {
|
|
ar & deleteData & checkData;
|
|
}
|
|
};
|
|
|
|
struct ProfilerRequest {
|
|
ReplyPromise<Void> reply;
|
|
|
|
enum class Type : std::int8_t {
|
|
GPROF = 1,
|
|
FLOW = 2
|
|
};
|
|
|
|
enum class Action : std::int8_t {
|
|
DISABLE = 0,
|
|
ENABLE = 1,
|
|
RUN = 2
|
|
};
|
|
|
|
Type type;
|
|
Action action;
|
|
int duration;
|
|
Standalone<StringRef> outputFile;
|
|
|
|
template<class Ar>
|
|
void serialize( Ar& ar ) {
|
|
ar & reply & type & action & duration & outputFile;
|
|
}
|
|
};
|
|
BINARY_SERIALIZABLE( ProfilerRequest::Type );
|
|
BINARY_SERIALIZABLE( ProfilerRequest::Action );
|
|
|
|
#endif
|