Move RestoreWorkerInterface into fdbserver
This commit is contained in:
parent
927a89f28c
commit
594e8944ae
|
@ -35,6 +35,7 @@
|
|||
#include "fdbclient/CoordinationInterface.h"
|
||||
#include "fdbclient/FDBOptions.g.h"
|
||||
#include "fdbclient/TagThrottle.h"
|
||||
#include "fdbclient/Tuple.h"
|
||||
|
||||
#include "fdbclient/ThreadSafeTransaction.h"
|
||||
#include "flow/DeterministicRandom.h"
|
||||
|
|
|
@ -57,7 +57,8 @@ set(FDBCLIENT_SRCS
|
|||
SpecialKeySpace.actor.h
|
||||
ReadYourWrites.actor.cpp
|
||||
ReadYourWrites.h
|
||||
RestoreWorkerInterface.actor.h
|
||||
RestoreInterface.cpp
|
||||
RestoreInterface.h
|
||||
RunTransaction.actor.h
|
||||
RYWIterator.cpp
|
||||
RYWIterator.h
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "fdbclient/DatabaseContext.h"
|
||||
#include "fdbclient/Knobs.h"
|
||||
#include "fdbclient/ManagementAPI.actor.h"
|
||||
#include "fdbclient/RestoreInterface.h"
|
||||
#include "fdbclient/Status.h"
|
||||
#include "fdbclient/SystemData.h"
|
||||
#include "fdbclient/KeyBackedTypes.h"
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* RestoreInterface.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.
|
||||
*/
|
||||
|
||||
#include "fdbclient/RestoreInterface.h"
|
||||
#include "flow/serialize.h"
|
||||
|
||||
const KeyRef restoreRequestDoneKey = "\xff\x02/restoreRequestDone"_sr;
|
||||
const KeyRef restoreRequestTriggerKey = "\xff\x02/restoreRequestTrigger"_sr;
|
||||
const KeyRangeRef restoreRequestKeys("\xff\x02/restoreRequests/"_sr, "\xff\x02/restoreRequests0"_sr);
|
||||
|
||||
// Encode and decode restore request value
|
||||
Value restoreRequestTriggerValue(UID randomID, int numRequests) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreRequestTriggerValue()));
|
||||
wr << numRequests;
|
||||
wr << randomID;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
int decodeRestoreRequestTriggerValue(ValueRef const& value) {
|
||||
int s;
|
||||
UID randomID;
|
||||
BinaryReader reader(value, IncludeVersion());
|
||||
reader >> s;
|
||||
reader >> randomID;
|
||||
return s;
|
||||
}
|
||||
|
||||
Key restoreRequestKeyFor(int index) {
|
||||
BinaryWriter wr(Unversioned());
|
||||
wr.serializeBytes(restoreRequestKeys.begin);
|
||||
wr << index;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
Value restoreRequestValue(RestoreRequest const& request) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreRequestValue()));
|
||||
wr << request;
|
||||
return wr.toValue();
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* RestoreInterface.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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fdbclient/FDBTypes.h"
|
||||
#include "fdbrpc/fdbrpc.h"
|
||||
|
||||
struct RestoreCommonReply {
|
||||
constexpr static FileIdentifier file_identifier = 5808787;
|
||||
UID id; // unique ID of the server who sends the reply
|
||||
bool isDuplicated;
|
||||
|
||||
RestoreCommonReply() = default;
|
||||
explicit RestoreCommonReply(UID id, bool isDuplicated = false) : id(id), isDuplicated(isDuplicated) {}
|
||||
|
||||
std::string toString() const {
|
||||
std::stringstream ss;
|
||||
ss << "ServerNodeID:" << id.toString() << " isDuplicated:" << isDuplicated;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template <class Ar>
|
||||
void serialize(Ar& ar) {
|
||||
serializer(ar, id, isDuplicated);
|
||||
}
|
||||
};
|
||||
|
||||
struct RestoreRequest {
|
||||
constexpr static FileIdentifier file_identifier = 16035338;
|
||||
|
||||
int index;
|
||||
Key tagName;
|
||||
Key url;
|
||||
Version targetVersion;
|
||||
KeyRange range;
|
||||
UID randomUid;
|
||||
|
||||
// Every key in backup will first removePrefix and then addPrefix;
|
||||
// Simulation testing does not cover when both addPrefix and removePrefix exist yet.
|
||||
Key addPrefix;
|
||||
Key removePrefix;
|
||||
|
||||
ReplyPromise<struct RestoreCommonReply> reply;
|
||||
|
||||
RestoreRequest() = default;
|
||||
explicit RestoreRequest(const int index,
|
||||
const Key& tagName,
|
||||
const Key& url,
|
||||
Version targetVersion,
|
||||
const KeyRange& range,
|
||||
const UID& randomUid,
|
||||
Key& addPrefix,
|
||||
Key removePrefix)
|
||||
: index(index), tagName(tagName), url(url), targetVersion(targetVersion), range(range), randomUid(randomUid),
|
||||
addPrefix(addPrefix), removePrefix(removePrefix) {}
|
||||
|
||||
// To change this serialization, ProtocolVersion::RestoreRequestValue must be updated, and downgrades need to be
|
||||
// considered
|
||||
template <class Ar>
|
||||
void serialize(Ar& ar) {
|
||||
serializer(ar, index, tagName, url, targetVersion, range, randomUid, addPrefix, removePrefix, reply);
|
||||
}
|
||||
|
||||
std::string toString() const {
|
||||
std::stringstream ss;
|
||||
ss << "index:" << std::to_string(index) << " tagName:" << tagName.contents().toString()
|
||||
<< " url:" << url.contents().toString() << " targetVersion:" << std::to_string(targetVersion)
|
||||
<< " range:" << range.toString() << " randomUid:" << randomUid.toString()
|
||||
<< " addPrefix:" << addPrefix.toString() << " removePrefix:" << removePrefix.toString();
|
||||
return ss.str();
|
||||
}
|
||||
};
|
||||
|
||||
extern const KeyRef restoreRequestDoneKey;
|
||||
extern const KeyRef restoreRequestTriggerKey;
|
||||
extern const KeyRangeRef restoreRequestKeys;
|
||||
|
||||
Value restoreRequestTriggerValue(UID randomID, int numRequests);
|
||||
int decodeRequestRequestTriggerValue(ValueRef const&);
|
||||
Key restoreRequestKeyFor(int index);
|
||||
Value restoreRequestValue(RestoreRequest const&);
|
|
@ -942,124 +942,8 @@ const KeyRef mustContainSystemMutationsKey = LiteralStringRef("\xff/mustContainS
|
|||
|
||||
const KeyRangeRef monitorConfKeys(LiteralStringRef("\xff\x02/monitorConf/"), LiteralStringRef("\xff\x02/monitorConf0"));
|
||||
|
||||
const KeyRef restoreLeaderKey = LiteralStringRef("\xff\x02/restoreLeader");
|
||||
const KeyRangeRef restoreWorkersKeys(LiteralStringRef("\xff\x02/restoreWorkers/"),
|
||||
LiteralStringRef("\xff\x02/restoreWorkers0"));
|
||||
const KeyRef restoreStatusKey = LiteralStringRef("\xff\x02/restoreStatus/");
|
||||
|
||||
const KeyRef restoreRequestTriggerKey = LiteralStringRef("\xff\x02/restoreRequestTrigger");
|
||||
const KeyRef restoreRequestDoneKey = LiteralStringRef("\xff\x02/restoreRequestDone");
|
||||
const KeyRangeRef restoreRequestKeys(LiteralStringRef("\xff\x02/restoreRequests/"),
|
||||
LiteralStringRef("\xff\x02/restoreRequests0"));
|
||||
|
||||
const KeyRangeRef restoreApplierKeys(LiteralStringRef("\xff\x02/restoreApplier/"),
|
||||
LiteralStringRef("\xff\x02/restoreApplier0"));
|
||||
const KeyRef restoreApplierTxnValue = LiteralStringRef("1");
|
||||
|
||||
// restoreApplierKeys: track atomic transaction progress to ensure applying atomicOp exactly once
|
||||
// Version and batchIndex are passed in as LittleEndian,
|
||||
// they must be converted to BigEndian to maintain ordering in lexical order
|
||||
const Key restoreApplierKeyFor(UID const& applierID, int64_t batchIndex, Version version) {
|
||||
BinaryWriter wr(Unversioned());
|
||||
wr.serializeBytes(restoreApplierKeys.begin);
|
||||
wr << applierID << bigEndian64(batchIndex) << bigEndian64(version);
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
std::tuple<UID, int64_t, Version> decodeRestoreApplierKey(ValueRef const& key) {
|
||||
BinaryReader rd(key, Unversioned());
|
||||
UID applierID;
|
||||
int64_t batchIndex;
|
||||
Version version;
|
||||
rd >> applierID >> batchIndex >> version;
|
||||
return std::make_tuple(applierID, bigEndian64(batchIndex), bigEndian64(version));
|
||||
}
|
||||
|
||||
// Encode restore worker key for workerID
|
||||
const Key restoreWorkerKeyFor(UID const& workerID) {
|
||||
BinaryWriter wr(Unversioned());
|
||||
wr.serializeBytes(restoreWorkersKeys.begin);
|
||||
wr << workerID;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
// Encode restore agent value
|
||||
const Value restoreWorkerInterfaceValue(RestoreWorkerInterface const& cmdInterf) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreWorkerInterfaceValue()));
|
||||
wr << cmdInterf;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
RestoreWorkerInterface decodeRestoreWorkerInterfaceValue(ValueRef const& value) {
|
||||
RestoreWorkerInterface s;
|
||||
BinaryReader reader(value, IncludeVersion());
|
||||
reader >> s;
|
||||
return s;
|
||||
}
|
||||
|
||||
// Encode and decode restore request value
|
||||
// restoreRequestTrigger key
|
||||
const Value restoreRequestTriggerValue(UID randomID, int const numRequests) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreRequestTriggerValue()));
|
||||
wr << numRequests;
|
||||
wr << randomID;
|
||||
return wr.toValue();
|
||||
}
|
||||
int decodeRestoreRequestTriggerValue(ValueRef const& value) {
|
||||
int s;
|
||||
UID randomID;
|
||||
BinaryReader reader(value, IncludeVersion());
|
||||
reader >> s;
|
||||
reader >> randomID;
|
||||
return s;
|
||||
}
|
||||
|
||||
// restoreRequestDone key
|
||||
const Value restoreRequestDoneVersionValue(Version readVersion) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreRequestDoneVersionValue()));
|
||||
wr << readVersion;
|
||||
return wr.toValue();
|
||||
}
|
||||
Version decodeRestoreRequestDoneVersionValue(ValueRef const& value) {
|
||||
Version v;
|
||||
BinaryReader reader(value, IncludeVersion());
|
||||
reader >> v;
|
||||
return v;
|
||||
}
|
||||
|
||||
const Key restoreRequestKeyFor(int const& index) {
|
||||
BinaryWriter wr(Unversioned());
|
||||
wr.serializeBytes(restoreRequestKeys.begin);
|
||||
wr << index;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
const Value restoreRequestValue(RestoreRequest const& request) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreRequestValue()));
|
||||
wr << request;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
RestoreRequest decodeRestoreRequestValue(ValueRef const& value) {
|
||||
RestoreRequest s;
|
||||
BinaryReader reader(value, IncludeVersion());
|
||||
reader >> s;
|
||||
return s;
|
||||
}
|
||||
|
||||
// TODO: Register restore performance data to restoreStatus key
|
||||
const Key restoreStatusKeyFor(StringRef statusType) {
|
||||
BinaryWriter wr(Unversioned());
|
||||
wr.serializeBytes(restoreStatusKey);
|
||||
wr << statusType;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
const Value restoreStatusValue(double val) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreStatusValue()));
|
||||
wr << StringRef(std::to_string(val));
|
||||
return wr.toValue();
|
||||
}
|
||||
const KeyRef healthyZoneKey = LiteralStringRef("\xff\x02/healthyZone");
|
||||
const StringRef ignoreSSFailuresZoneString = LiteralStringRef("IgnoreSSFailures");
|
||||
const KeyRef rebalanceDDIgnoreKey = LiteralStringRef("\xff\x02/rebalanceDDIgnored");
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include "fdbclient/FDBTypes.h"
|
||||
#include "fdbclient/StorageServerInterface.h"
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.h"
|
||||
|
||||
// Don't warn on constants being defined in this file.
|
||||
#pragma clang diagnostic push
|
||||
|
@ -444,31 +443,6 @@ extern const KeyRef mustContainSystemMutationsKey;
|
|||
// Key range reserved for storing changes to monitor conf files
|
||||
extern const KeyRangeRef monitorConfKeys;
|
||||
|
||||
// Fast restore
|
||||
extern const KeyRef restoreLeaderKey;
|
||||
extern const KeyRangeRef restoreWorkersKeys;
|
||||
extern const KeyRef restoreStatusKey; // To be used when we measure fast restore performance
|
||||
extern const KeyRef restoreRequestTriggerKey;
|
||||
extern const KeyRef restoreRequestDoneKey;
|
||||
extern const KeyRangeRef restoreRequestKeys;
|
||||
extern const KeyRangeRef restoreApplierKeys;
|
||||
extern const KeyRef restoreApplierTxnValue;
|
||||
|
||||
const Key restoreApplierKeyFor(UID const& applierID, int64_t batchIndex, Version version);
|
||||
std::tuple<UID, int64_t, Version> decodeRestoreApplierKey(ValueRef const& key);
|
||||
const Key restoreWorkerKeyFor(UID const& workerID);
|
||||
const Value restoreWorkerInterfaceValue(RestoreWorkerInterface const& server);
|
||||
RestoreWorkerInterface decodeRestoreWorkerInterfaceValue(ValueRef const& value);
|
||||
const Value restoreRequestTriggerValue(UID randomUID, int const numRequests);
|
||||
int decodeRestoreRequestTriggerValue(ValueRef const& value);
|
||||
const Value restoreRequestDoneVersionValue(Version readVersion);
|
||||
Version decodeRestoreRequestDoneVersionValue(ValueRef const& value);
|
||||
const Key restoreRequestKeyFor(int const& index);
|
||||
const Value restoreRequestValue(RestoreRequest const& server);
|
||||
RestoreRequest decodeRestoreRequestValue(ValueRef const& value);
|
||||
const Key restoreStatusKeyFor(StringRef statusType);
|
||||
const Value restoreStatusValue(double val);
|
||||
|
||||
extern const KeyRef healthyZoneKey;
|
||||
extern const StringRef ignoreSSFailuresZoneString;
|
||||
extern const KeyRef rebalanceDDIgnoreKey;
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "fdbclient/SystemData.h"
|
||||
#include "fdbserver/BackupInterface.h"
|
||||
#include "fdbserver/BackupProgress.actor.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
#include "fdbserver/LogProtocolMessage.h"
|
||||
#include "fdbserver/LogSystem.h"
|
||||
#include "fdbserver/ServerDBInfo.h"
|
||||
|
|
|
@ -83,6 +83,8 @@ set(FDBSERVER_SRCS
|
|||
RestoreLoader.actor.cpp
|
||||
RestoreWorker.actor.h
|
||||
RestoreWorker.actor.cpp
|
||||
RestoreWorkerInterface.actor.cpp
|
||||
RestoreWorkerInterface.actor.h
|
||||
Resolver.actor.cpp
|
||||
ResolverInterface.h
|
||||
ServerDBInfo.actor.h
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#include "fdbserver/ProxyCommitData.actor.h"
|
||||
#include "fdbserver/RatekeeperInterface.h"
|
||||
#include "fdbserver/RecoveryState.h"
|
||||
#include "fdbserver/RestoreUtil.h"
|
||||
#include "fdbserver/WaitFailure.h"
|
||||
#include "fdbserver/WorkerInterface.actor.h"
|
||||
#include "flow/ActorCollection.h"
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "fdbclient/NativeAPI.actor.h"
|
||||
#include "fdbclient/ReadYourWrites.h"
|
||||
#include "fdbclient/RunTransaction.actor.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
#include "fdbserver/TesterInterface.actor.h"
|
||||
#include "fdbserver/WorkerInterface.actor.h"
|
||||
#include "fdbserver/ServerDBInfo.h"
|
||||
|
|
|
@ -35,10 +35,10 @@
|
|||
#include "fdbrpc/Locality.h"
|
||||
#include "fdbrpc/Stats.h"
|
||||
#include "fdbserver/CoordinationInterface.h"
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbserver/MutationTracking.h"
|
||||
#include "fdbserver/RestoreUtil.h"
|
||||
#include "fdbserver/RestoreRoleCommon.actor.h"
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.h"
|
||||
|
||||
#include "flow/actorcompiler.h" // has to be last include
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include "fdbclient/NativeAPI.actor.h"
|
||||
#include "fdbrpc/IAsyncFile.h"
|
||||
#include "fdbclient/BackupAgent.actor.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
|
||||
#include "flow/actorcompiler.h" // has to be last include
|
||||
|
||||
|
@ -394,4 +395,4 @@ Future<Void> sendBatchRequests(RequestStream<Request> Interface::*channel,
|
|||
}
|
||||
|
||||
#include "flow/unactorcompiler.h"
|
||||
#endif // FDBSERVER_RESTORECOMMON_ACTOR_H
|
||||
#endif // FDBSERVER_RESTORECOMMON_ACTOR_H
|
||||
|
|
|
@ -34,10 +34,10 @@
|
|||
#include "fdbrpc/Stats.h"
|
||||
#include "fdbserver/CoordinationInterface.h"
|
||||
#include "fdbrpc/Locality.h"
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbserver/RestoreUtil.h"
|
||||
#include "fdbserver/RestoreCommon.actor.h"
|
||||
#include "fdbserver/RestoreRoleCommon.actor.h"
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbclient/BackupContainer.h"
|
||||
|
||||
#include "flow/actorcompiler.h" // has to be last include
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "fdbrpc/Locality.h"
|
||||
#include "fdbrpc/Stats.h"
|
||||
#include "fdbserver/CoordinationInterface.h"
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbserver/RestoreUtil.h"
|
||||
|
||||
#include "flow/actorcompiler.h" // has to be last include
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include "fdbclient/Tuple.h"
|
||||
#include "fdbclient/CommitTransaction.h"
|
||||
#include "fdbclient/RestoreInterface.h"
|
||||
#include "flow/flow.h"
|
||||
#include "fdbrpc/TimedRequest.h"
|
||||
#include "fdbrpc/fdbrpc.h"
|
||||
|
@ -88,26 +89,6 @@ std::string getHexString(StringRef input);
|
|||
|
||||
bool debugFRMutation(const char* context, Version version, MutationRef const& mutation);
|
||||
|
||||
struct RestoreCommonReply {
|
||||
constexpr static FileIdentifier file_identifier = 5808787;
|
||||
UID id; // unique ID of the server who sends the reply
|
||||
bool isDuplicated;
|
||||
|
||||
RestoreCommonReply() = default;
|
||||
explicit RestoreCommonReply(UID id, bool isDuplicated = false) : id(id), isDuplicated(isDuplicated) {}
|
||||
|
||||
std::string toString() const {
|
||||
std::stringstream ss;
|
||||
ss << "ServerNodeID:" << id.toString() << " isDuplicated:" << isDuplicated;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
template <class Ar>
|
||||
void serialize(Ar& ar) {
|
||||
serializer(ar, id, isDuplicated);
|
||||
}
|
||||
};
|
||||
|
||||
struct RestoreSimpleRequest : TimedRequest {
|
||||
constexpr static FileIdentifier file_identifier = 16448937;
|
||||
|
||||
|
|
|
@ -33,12 +33,12 @@
|
|||
#include <cstdint>
|
||||
#include <cstdarg>
|
||||
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbserver/RestoreUtil.h"
|
||||
#include "fdbserver/RestoreCommon.actor.h"
|
||||
#include "fdbserver/RestoreRoleCommon.actor.h"
|
||||
#include "fdbserver/RestoreLoader.actor.h"
|
||||
#include "fdbserver/RestoreApplier.actor.h"
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.h"
|
||||
|
||||
// Each restore worker (a process) is assigned for a role.
|
||||
// MAYBE Later: We will support multiple restore roles on a worker
|
||||
|
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* RestoreWorkerInterface.actor.cpp
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.h"
|
||||
#include "flow/actorcompiler.h" // must be last include
|
||||
|
||||
const KeyRef restoreLeaderKey = "\xff\x02/restoreLeader"_sr;
|
||||
const KeyRangeRef restoreWorkersKeys("\xff\x02/restoreWorkers/"_sr, "\xff\x02/restoreWorkers0"_sr);
|
||||
const KeyRef restoreStatusKey = "\xff\x02/restoreStatus/"_sr;
|
||||
const KeyRangeRef restoreApplierKeys("\xff\x02/restoreApplier/"_sr, "\xff\x02/restoreApplier0"_sr);
|
||||
const KeyRef restoreApplierTxnValue = "1"_sr;
|
||||
|
||||
// restoreApplierKeys: track atomic transaction progress to ensure applying atomicOp exactly once
|
||||
// Version and batchIndex are passed in as LittleEndian,
|
||||
// they must be converted to BigEndian to maintain ordering in lexical order
|
||||
const Key restoreApplierKeyFor(UID const& applierID, int64_t batchIndex, Version version) {
|
||||
BinaryWriter wr(Unversioned());
|
||||
wr.serializeBytes(restoreApplierKeys.begin);
|
||||
wr << applierID << bigEndian64(batchIndex) << bigEndian64(version);
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
std::tuple<UID, int64_t, Version> decodeRestoreApplierKey(ValueRef const& key) {
|
||||
BinaryReader rd(key, Unversioned());
|
||||
UID applierID;
|
||||
int64_t batchIndex;
|
||||
Version version;
|
||||
rd >> applierID >> batchIndex >> version;
|
||||
return std::make_tuple(applierID, bigEndian64(batchIndex), bigEndian64(version));
|
||||
}
|
||||
|
||||
// Encode restore worker key for workerID
|
||||
const Key restoreWorkerKeyFor(UID const& workerID) {
|
||||
BinaryWriter wr(Unversioned());
|
||||
wr.serializeBytes(restoreWorkersKeys.begin);
|
||||
wr << workerID;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
// Encode restore agent value
|
||||
const Value restoreWorkerInterfaceValue(RestoreWorkerInterface const& cmdInterf) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreWorkerInterfaceValue()));
|
||||
wr << cmdInterf;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
RestoreWorkerInterface decodeRestoreWorkerInterfaceValue(ValueRef const& value) {
|
||||
RestoreWorkerInterface s;
|
||||
BinaryReader reader(value, IncludeVersion());
|
||||
reader >> s;
|
||||
return s;
|
||||
}
|
||||
|
||||
Value restoreRequestDoneVersionValue(Version readVersion) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreRequestDoneVersionValue()));
|
||||
wr << readVersion;
|
||||
return wr.toValue();
|
||||
}
|
||||
Version decodeRestoreRequestDoneVersionValue(ValueRef const& value) {
|
||||
Version v;
|
||||
BinaryReader reader(value, IncludeVersion());
|
||||
reader >> v;
|
||||
return v;
|
||||
}
|
||||
|
||||
RestoreRequest decodeRestoreRequestValue(ValueRef const& value) {
|
||||
RestoreRequest s;
|
||||
BinaryReader reader(value, IncludeVersion());
|
||||
reader >> s;
|
||||
return s;
|
||||
}
|
||||
|
||||
// TODO: Register restore performance data to restoreStatus key
|
||||
const Key restoreStatusKeyFor(StringRef statusType) {
|
||||
BinaryWriter wr(Unversioned());
|
||||
wr.serializeBytes(restoreStatusKey);
|
||||
wr << statusType;
|
||||
return wr.toValue();
|
||||
}
|
||||
|
||||
const Value restoreStatusValue(double val) {
|
||||
BinaryWriter wr(IncludeVersion(ProtocolVersion::withRestoreStatusValue()));
|
||||
wr << StringRef(std::to_string(val));
|
||||
return wr.toValue();
|
||||
}
|
|
@ -22,11 +22,11 @@
|
|||
// which are RestoreController, RestoreLoader, and RestoreApplier
|
||||
|
||||
#pragma once
|
||||
#if defined(NO_INTELLISENSE) && !defined(FDBCLIENT_RESTORE_WORKER_INTERFACE_ACTOR_G_H)
|
||||
#define FDBCLIENT_RESTORE_WORKER_INTERFACE_ACTOR_G_H
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.g.h"
|
||||
#elif !defined(FDBCLIENT_RESTORE_WORKER_INTERFACE_ACTOR_H)
|
||||
#define FDBCLIENT_RESTORE_WORKER_INTERFACE_ACTOR_H
|
||||
#if defined(NO_INTELLISENSE) && !defined(FDBSERVER_RESTORE_WORKER_INTERFACE_ACTOR_G_H)
|
||||
#define FDBSERVER_RESTORE_WORKER_INTERFACE_ACTOR_G_H
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.g.h"
|
||||
#elif !defined(FDBSERVER_RESTORE_WORKER_INTERFACE_ACTOR_H)
|
||||
#define FDBSERVER_RESTORE_WORKER_INTERFACE_ACTOR_H
|
||||
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
@ -707,57 +707,29 @@ struct RestoreUpdateRateRequest : TimedRequest {
|
|||
}
|
||||
};
|
||||
|
||||
struct RestoreRequest {
|
||||
constexpr static FileIdentifier file_identifier = 16035338;
|
||||
|
||||
int index;
|
||||
Key tagName;
|
||||
Key url;
|
||||
Version targetVersion;
|
||||
KeyRange range;
|
||||
UID randomUid;
|
||||
|
||||
// Every key in backup will first removePrefix and then addPrefix;
|
||||
// Simulation testing does not cover when both addPrefix and removePrefix exist yet.
|
||||
Key addPrefix;
|
||||
Key removePrefix;
|
||||
|
||||
ReplyPromise<struct RestoreCommonReply> reply;
|
||||
|
||||
RestoreRequest() = default;
|
||||
explicit RestoreRequest(const int index,
|
||||
const Key& tagName,
|
||||
const Key& url,
|
||||
Version targetVersion,
|
||||
const KeyRange& range,
|
||||
const UID& randomUid,
|
||||
Key& addPrefix,
|
||||
Key removePrefix)
|
||||
: index(index), tagName(tagName), url(url), targetVersion(targetVersion), range(range), randomUid(randomUid),
|
||||
addPrefix(addPrefix), removePrefix(removePrefix) {}
|
||||
|
||||
// To change this serialization, ProtocolVersion::RestoreRequestValue must be updated, and downgrades need to be
|
||||
// considered
|
||||
template <class Ar>
|
||||
void serialize(Ar& ar) {
|
||||
serializer(ar, index, tagName, url, targetVersion, range, randomUid, addPrefix, removePrefix, reply);
|
||||
}
|
||||
|
||||
std::string toString() const {
|
||||
std::stringstream ss;
|
||||
ss << "index:" << std::to_string(index) << " tagName:" << tagName.contents().toString()
|
||||
<< " url:" << url.contents().toString() << " targetVersion:" << std::to_string(targetVersion)
|
||||
<< " range:" << range.toString() << " randomUid:" << randomUid.toString()
|
||||
<< " addPrefix:" << addPrefix.toString() << " removePrefix:" << removePrefix.toString();
|
||||
return ss.str();
|
||||
}
|
||||
};
|
||||
|
||||
std::string getRoleStr(RestoreRole role);
|
||||
|
||||
////--- Interface functions
|
||||
ACTOR Future<Void> _restoreWorker(Database cx, LocalityData locality);
|
||||
ACTOR Future<Void> restoreWorker(Reference<ClusterConnectionFile> ccf, LocalityData locality, std::string coordFolder);
|
||||
|
||||
extern const KeyRef restoreLeaderKey;
|
||||
extern const KeyRangeRef restoreWorkersKeys;
|
||||
extern const KeyRef restoreStatusKey; // To be used when we measure fast restore performance
|
||||
extern const KeyRangeRef restoreRequestKeys;
|
||||
extern const KeyRangeRef restoreApplierKeys;
|
||||
extern const KeyRef restoreApplierTxnValue;
|
||||
|
||||
const Key restoreApplierKeyFor(UID const& applierID, int64_t batchIndex, Version version);
|
||||
std::tuple<UID, int64_t, Version> decodeRestoreApplierKey(ValueRef const& key);
|
||||
const Key restoreWorkerKeyFor(UID const& workerID);
|
||||
const Value restoreWorkerInterfaceValue(RestoreWorkerInterface const& server);
|
||||
RestoreWorkerInterface decodeRestoreWorkerInterfaceValue(ValueRef const& value);
|
||||
Version decodeRestoreRequestDoneVersionValue(ValueRef const& value);
|
||||
RestoreRequest decodeRestoreRequestValue(ValueRef const& value);
|
||||
const Key restoreStatusKeyFor(StringRef statusType);
|
||||
const Value restoreStatusValue(double val);
|
||||
Value restoreRequestDoneVersionValue(Version readVersion);
|
||||
|
||||
#include "flow/unactorcompiler.h"
|
||||
#endif
|
|
@ -31,6 +31,7 @@
|
|||
#include "flow/UnitTest.h"
|
||||
#include "fdbserver/QuietDatabase.h"
|
||||
#include "fdbserver/RecoveryState.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
#include "fdbclient/JsonBuilder.h"
|
||||
#include "flow/actorcompiler.h" // This must be the last #include.
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "fdbrpc/simulator.h"
|
||||
#include "fdbrpc/Replication.h"
|
||||
#include "fdbrpc/ReplicationUtils.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
#include "fdbserver/RecoveryState.h"
|
||||
#include "fdbserver/LogProtocolMessage.h"
|
||||
#include "flow/actorcompiler.h" // This must be the last #include.
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
#include <boost/interprocess/managed_shared_memory.hpp>
|
||||
|
||||
#include "fdbclient/NativeAPI.actor.h"
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbclient/SystemData.h"
|
||||
#include "fdbclient/versions.h"
|
||||
#include "fdbclient/BuildFlags.h"
|
||||
|
@ -52,6 +51,7 @@
|
|||
#include "fdbserver/IKeyValueStore.h"
|
||||
#include "fdbserver/MoveKeys.actor.h"
|
||||
#include "fdbserver/NetworkTest.h"
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbserver/ServerDBInfo.h"
|
||||
#include "fdbserver/SimulatedCluster.h"
|
||||
#include "fdbserver/Status.h"
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "fdbclient/MonitorLeader.h"
|
||||
#include "fdbserver/CoordinationInterface.h"
|
||||
#include "fdbclient/ManagementAPI.actor.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
#include "fdbserver/WorkerInterface.actor.h"
|
||||
#include "flow/actorcompiler.h" // This must be the last #include.
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include "fdbclient/BackupAgent.actor.h"
|
||||
#include "fdbclient/BackupContainer.h"
|
||||
#include "fdbclient/ManagementAPI.actor.h"
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbclient/RunTransaction.actor.h"
|
||||
#include "fdbserver/RestoreCommon.actor.h"
|
||||
#include "fdbserver/workloads/workloads.actor.h"
|
||||
|
|
|
@ -1,8 +1,29 @@
|
|||
/*
|
||||
* ClientTransactionProfileCorrectness.actor.cpp
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "fdbserver/workloads/workloads.actor.h"
|
||||
#include "fdbserver/ServerDBInfo.h"
|
||||
#include "fdbclient/GlobalConfig.actor.h"
|
||||
#include "fdbclient/ManagementAPI.actor.h"
|
||||
#include "fdbclient/RunTransaction.actor.h"
|
||||
#include "fdbclient/Tuple.h"
|
||||
#include "flow/actorcompiler.h" // has to be last include
|
||||
|
||||
static const Key CLIENT_LATENCY_INFO_PREFIX = LiteralStringRef("client_latency/");
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "fdbserver/TesterInterface.actor.h"
|
||||
#include "fdbclient/ManagementAPI.actor.h"
|
||||
#include "fdbclient/RunTransaction.actor.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
#include "fdbserver/workloads/workloads.actor.h"
|
||||
#include "fdbrpc/simulator.h"
|
||||
#include "flow/actorcompiler.h" // This must be the last #include.
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "fdbclient/BackupContainer.h"
|
||||
#include "fdbserver/workloads/workloads.actor.h"
|
||||
#include "fdbserver/workloads/BulkSetup.actor.h"
|
||||
#include "fdbclient/RestoreWorkerInterface.actor.h"
|
||||
#include "fdbserver/RestoreWorkerInterface.actor.h"
|
||||
#include "flow/actorcompiler.h" // This must be the last #include.
|
||||
|
||||
// A workload which test the correctness of backup and restore process
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "fdbclient/ReadYourWrites.h"
|
||||
#include "fdbclient/Schemas.h"
|
||||
#include "fdbclient/SpecialKeySpace.actor.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
#include "fdbserver/TesterInterface.actor.h"
|
||||
#include "fdbserver/workloads/workloads.actor.h"
|
||||
#include "flow/IRandom.h"
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "fdbclient/NativeAPI.actor.h"
|
||||
#include "fdbclient/TagThrottle.h"
|
||||
#include "fdbserver/Knobs.h"
|
||||
#include "fdbserver/TesterInterface.actor.h"
|
||||
#include "fdbserver/workloads/workloads.actor.h"
|
||||
#include "fdbrpc/simulator.h"
|
||||
|
|
Loading…
Reference in New Issue