mirror of
https://github.com/apple/foundationdb.git
synced 2025-05-15 02:18:39 +08:00
125 lines
5.4 KiB
C++
125 lines
5.4 KiB
C++
/*
|
|
* BackupContainerAzure.actor.cpp
|
|
*
|
|
* This source file is part of the FoundationDB open source project
|
|
*
|
|
* Copyright 2013-2020 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 <cstdlib>
|
|
|
|
#include "storage_credential.h"
|
|
#include "storage_account.h"
|
|
#include "blob/blob_client.h"
|
|
|
|
#include "fdbclient/BackupContainer.h"
|
|
#include "flow/actorcompiler.h" // has to be last include
|
|
|
|
class BackupContainerAzureBlobStore final : public IBackupContainer, ReferenceCounted<BackupContainerAzureBlobStore> {
|
|
|
|
azure::storage_lite::blob_client client;
|
|
|
|
using Self = BackupContainerAzureBlobStore;
|
|
|
|
ACTOR static Future<Reference<IBackupFile>> writeLogFile_impl(Self* self, Version beginVersion, Version endVersion,
|
|
int blockSize) {
|
|
wait(delay(0.0));
|
|
return Reference<IBackupFile>(new BackupFile("test"));
|
|
}
|
|
|
|
ACTOR static Future<Reference<IBackupFile>> writeRangeFile_impl(Self* self, Version snapshotBeginVersion,
|
|
int snapshotFileCount, Version fileVersion,
|
|
int blockSize) {
|
|
wait(delay(0.0));
|
|
return Reference<IBackupFile>(new BackupFile("test"));
|
|
}
|
|
|
|
ACTOR static Future<Reference<IBackupFile>> writeTaggedLogFile_impl(Self* self, Version beginVersion,
|
|
Version endVersion, int blockSize,
|
|
uint16_t tagId, int totalTags) {
|
|
wait(delay(0.0));
|
|
return Reference<IBackupFile>(new BackupFile("test"));
|
|
}
|
|
|
|
public:
|
|
void addref() override { return ReferenceCounted<BackupContainerAzureBlobStore>::addref(); }
|
|
void delref() override { return ReferenceCounted<BackupContainerAzureBlobStore>::delref(); }
|
|
|
|
Future<Void> create() override {
|
|
std::string account_name = std::getenv("AZURE_TESTACCOUNT"); //"devstoreaccount1";
|
|
std::string account_key = std::getenv("AZURE_TESTKEY");
|
|
bool use_https = true;
|
|
// std::string blob_endpoint = "https://127.0.0.1:10000/devstoreaccount1/";
|
|
int connection_count = 2;
|
|
|
|
auto credential = std::make_shared<azure::storage_lite::shared_key_credential>(account_name, account_key);
|
|
auto storage_account =
|
|
std::make_shared<azure::storage_lite::storage_account>(account_name, credential, use_https);
|
|
|
|
client = azure::storage_lite::blob_client(storage_account, connection_count);
|
|
return Void();
|
|
}
|
|
|
|
Future<bool> exists() override { return true; }
|
|
|
|
class BackupFile : public IBackupFile, ReferenceCounted<BackupFile> {
|
|
public:
|
|
BackupFile(std::string fileName) : IBackupFile(fileName) {}
|
|
Future<Void> append(const void* data, int len) override { return Void(); }
|
|
Future<Void> finish() override { return Void(); }
|
|
void addref() override { ReferenceCounted<BackupFile>::addref(); }
|
|
void delref() override { ReferenceCounted<BackupFile>::delref(); }
|
|
};
|
|
|
|
Future<Reference<IBackupFile>> writeLogFile(Version beginVersion, Version endVersion, int blockSize) override {
|
|
return writeLogFile_impl(this, beginVersion, endVersion, blockSize);
|
|
}
|
|
Future<Reference<IBackupFile>> writeRangeFile(Version snapshotBeginVersion, int snapshotFileCount,
|
|
Version fileVersion, int blockSize) override {
|
|
return writeRangeFile_impl(this, snapshotBeginVersion, snapshotFileCount, fileVersion, blockSize);
|
|
}
|
|
|
|
Future<Reference<IBackupFile>> writeTaggedLogFile(Version beginVersion, Version endVersion, int blockSize,
|
|
uint16_t tagId, int totalTags) override {
|
|
return writeTaggedLogFile_impl(this, beginVersion, endVersion, blockSize, tagId, totalTags);
|
|
}
|
|
|
|
Future<Void> writeKeyspaceSnapshotFile(const std::vector<std::string>& fileNames,
|
|
const std::vector<std::pair<Key, Key>>& beginEndKeys,
|
|
int64_t totalBytes) override {
|
|
return delay(0.0);
|
|
}
|
|
Future<Reference<IAsyncFile>> readFile(std::string name) override { return Reference<IAsyncFile>(); }
|
|
Future<KeyRange> getSnapshotFileKeyRange(const RangeFile& file) override { return KeyRange(normalKeys); }
|
|
|
|
Future<Void> expireData(Version expireEndVersion, bool force = false, ExpireProgress* progress = nullptr,
|
|
Version restorableBeginVersion = std::numeric_limits<Version>::max()) override {
|
|
return Void();
|
|
}
|
|
|
|
Future<Void> deleteContainer(int* pNumDeleted = nullptr) override { return Void(); }
|
|
|
|
Future<BackupDescription> describeBackup(bool deepScan = false,
|
|
Version logStartVersionOverride = invalidVersion) override {
|
|
return {};
|
|
}
|
|
|
|
Future<BackupFileList> dumpFileList(Version begin = 0, Version end = std::numeric_limits<Version>::max()) override {
|
|
return {};
|
|
}
|
|
|
|
Future<Optional<RestorableFileSet>> getRestoreSet(Version targetVersion) { return {}; }
|
|
};
|