foundationdb/fdbclient/BackupContainerAzure.actor.cpp
2020-10-24 16:47:51 -07:00

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 {}; }
};