Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3354143
D3077.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Referenced Files
None
Subscribers
None
D3077.diff
View Options
diff --git a/services/backup/docker-server/contents/server/src/BackupServiceImpl.h b/services/backup/docker-server/contents/server/src/BackupServiceImpl.h
--- a/services/backup/docker-server/contents/server/src/BackupServiceImpl.h
+++ b/services/backup/docker-server/contents/server/src/BackupServiceImpl.h
@@ -1,52 +1,37 @@
#pragma once
-#include "AwsStorageManager.h"
-#include "Tools.h"
-
#include "../_generated/backup.grpc.pb.h"
#include "../_generated/backup.pb.h"
-#include <aws/core/Aws.h>
-
#include <grpcpp/grpcpp.h>
-#include <memory>
-#include <string>
-#include <unordered_map>
-#include <vector>
-
namespace comm {
namespace network {
class BackupServiceImpl final : public backup::BackupService::Service {
- const std::string bucketName = "commapp-backup";
-
- std::unique_ptr<AwsStorageManager> storageManager;
-
- std::string generateObjectName(
- const std::string &userId,
- const OBJECT_TYPE objectType) const;
public:
BackupServiceImpl();
virtual ~BackupServiceImpl();
- grpc::Status ResetKey(
+ grpc::Status CreateNewBackup(
grpc::ServerContext *context,
- grpc::ServerReader<backup::ResetKeyRequest> *reader,
+ grpc::ServerReader<backup::CreateNewBackupRequest> *reader,
google::protobuf::Empty *response) override;
grpc::Status SendLog(
grpc::ServerContext *context,
- const backup::SendLogRequest *request,
+ grpc::ServerReader<backup::SendLogRequest> *reader,
google::protobuf::Empty *response) override;
grpc::Status PullBackupKey(
grpc::ServerContext *context,
- const backup::PullBackupKeyRequest *request,
- backup::PullBackupKeyResponse *response) override;
+ grpc::ServerReaderWriter<
+ backup::PullBackupKeyResponse,
+ backup::PullBackupKeyRequest> *stream) override;
grpc::Status PullCompaction(
grpc::ServerContext *context,
- const backup::PullCompactionRequest *request,
- grpc::ServerWriter<backup::PullCompactionResponse> *writer) override;
+ grpc::ServerReaderWriter<
+ backup::PullCompactionResponse,
+ backup::PullCompactionRequest> *stream) override;
};
} // namespace network
diff --git a/services/backup/docker-server/contents/server/src/BackupServiceImpl.cpp b/services/backup/docker-server/contents/server/src/BackupServiceImpl.cpp
--- a/services/backup/docker-server/contents/server/src/BackupServiceImpl.cpp
+++ b/services/backup/docker-server/contents/server/src/BackupServiceImpl.cpp
@@ -1,176 +1,46 @@
#include "BackupServiceImpl.h"
-#include <iostream>
+#include <aws/core/Aws.h>
namespace comm {
namespace network {
-std::string BackupServiceImpl::generateObjectName(
- const std::string &userId,
- const OBJECT_TYPE objectType) const {
- if (objectType == OBJECT_TYPE::ENCRYPTED_BACKUP_KEY) {
- return userId + "-backup-key";
- }
- if (objectType == OBJECT_TYPE::TRANSACTION_LOGS) {
- return userId + "-logs";
- }
- if (objectType == OBJECT_TYPE::COMPACTION) {
- return userId + "-compaction";
- }
- throw std::runtime_error("unhandled operation");
-}
-
BackupServiceImpl::BackupServiceImpl() {
Aws::InitAPI({});
- this->storageManager = std::make_unique<AwsStorageManager>();
- if (!this->storageManager->getBucket(this->bucketName).isAvailable()) {
- throw std::runtime_error("bucket " + this->bucketName + " not available");
- }
}
BackupServiceImpl::~BackupServiceImpl() {
Aws::ShutdownAPI({});
}
-grpc::Status BackupServiceImpl::ResetKey(
+grpc::Status BackupServiceImpl::CreateNewBackup(
grpc::ServerContext *context,
- grpc::ServerReader<backup::ResetKeyRequest> *reader,
+ grpc::ServerReader<backup::CreateNewBackupRequest> *reader,
google::protobuf::Empty *response) {
- backup::ResetKeyRequest request;
- std::string id;
- AwsS3Bucket bucket = this->storageManager->getBucket(this->bucketName);
- try {
- while (reader->Read(&request)) {
- if (!id.size()) {
- id = request.userid();
- } else if (id != request.userid()) {
- throw std::runtime_error("id mismatch: " + id + "/" + request.userid());
- }
- const std::string newKey = request.newkey();
- const std::string compactionChunk = request.compactionchunk();
- // the following behavior assumes that the client sends:
- // 1. key + empty chunk
- // 2. empty key + chunk
- // ...
- // N. empty key + chunk
- if (newKey.size()) {
- std::cout << "Backup Service => ResetKey(this log will be removed) "
- "reading key ["
- << newKey << "]" << std::endl;
- bucket.writeObject(
- this->generateObjectName(id, OBJECT_TYPE::ENCRYPTED_BACKUP_KEY),
- newKey);
- bucket.clearObject(
- this->generateObjectName(id, OBJECT_TYPE::COMPACTION));
- } else if (compactionChunk.size()) {
- std::cout << "Backup Service => ResetKey(this log will be removed) "
- "reading chunk ["
- << compactionChunk << "]" << std::endl;
- bucket.appendToObject(
- this->generateObjectName(id, OBJECT_TYPE::COMPACTION),
- compactionChunk);
- }
- }
- bucket.clearObject(
- this->generateObjectName(id, OBJECT_TYPE::TRANSACTION_LOGS));
- } catch (std::runtime_error &e) {
- std::cout << "error: " << e.what() << std::endl;
- return grpc::Status(grpc::StatusCode::INTERNAL, e.what());
- }
- return grpc::Status::OK;
+ return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, "not implemented yet");
}
grpc::Status BackupServiceImpl::SendLog(
grpc::ServerContext *context,
- const backup::SendLogRequest *request,
+ grpc::ServerReader<backup::SendLogRequest> *reader,
google::protobuf::Empty *response) {
- const std::string id = request->userid();
- const std::string data = request->data();
-
- std::cout << "Backup Service => SendLog, id:[" << id << "] data: [" << data
- << "](this log will be removed)" << std::endl;
- try {
- this->storageManager->getBucket(this->bucketName)
- .appendToObject(
- this->generateObjectName(id, OBJECT_TYPE::TRANSACTION_LOGS), data);
- } catch (std::runtime_error &e) {
- std::cout << "error: " << e.what() << std::endl;
- return grpc::Status(grpc::StatusCode::INTERNAL, e.what());
- }
-
- return grpc::Status::OK;
+ return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, "not implemented yet");
}
grpc::Status BackupServiceImpl::PullBackupKey(
grpc::ServerContext *context,
- const backup::PullBackupKeyRequest *request,
- backup::PullBackupKeyResponse *response) {
- const std::string id = request->userid();
- const std::string pakeKey = request->pakekey();
-
- std::cout << "Backup Service => PullBackupKey, id:[" << id << "] pakeKey: ["
- << pakeKey << "](this log will be removed)" << std::endl;
-
- // TODO pake operations - verify user's password with pake's keys
- try {
- std::string key = this->storageManager->getBucket(this->bucketName)
- .getObjectData(this->generateObjectName(
- id, OBJECT_TYPE::ENCRYPTED_BACKUP_KEY));
- response->set_encryptedbackupkey(key);
- } catch (std::runtime_error &e) {
- std::cout << "error: " << e.what() << std::endl;
- return grpc::Status(grpc::StatusCode::INTERNAL, e.what());
- }
-
- return grpc::Status::OK;
+ grpc::ServerReaderWriter<
+ backup::PullBackupKeyResponse,
+ backup::PullBackupKeyRequest> *stream) {
+ return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, "not implemented yet");
}
grpc::Status BackupServiceImpl::PullCompaction(
grpc::ServerContext *context,
- const backup::PullCompactionRequest *request,
- grpc::ServerWriter<backup::PullCompactionResponse> *writer) {
- const std::string id = request->userid();
-
- std::cout << "Backup Service => PullCompaction, id:[" << id
- << "](this log will be removed)" << std::endl;
- AwsS3Bucket bucket = this->storageManager->getBucket(this->bucketName);
- try {
- backup::PullCompactionResponse response;
- std::function<void(const std::string &)> callback =
- [&response, &writer](std::string chunk) {
- response.set_compactionchunk(chunk);
- if (!writer->Write(response)) {
- throw std::runtime_error("writer interrupted sending compaction");
- }
- };
-
- bucket.getObjectDataChunks(
- this->generateObjectName(id, OBJECT_TYPE::COMPACTION),
- callback,
- GRPC_CHUNK_SIZE_LIMIT);
- } catch (std::runtime_error &e) {
- std::cout << "error: " << e.what() << std::endl;
- return grpc::Status(grpc::StatusCode::INTERNAL, e.what());
- }
- try {
- backup::PullCompactionResponse response;
- std::function<void(const std::string &)> callback =
- [&response, &writer](std::string chunk) {
- response.set_logchunk(chunk);
- if (!writer->Write(response)) {
- throw std::runtime_error("writer interrupted sending logs");
- }
- };
-
- bucket.getObjectDataChunks(
- this->generateObjectName(id, OBJECT_TYPE::TRANSACTION_LOGS),
- callback,
- GRPC_CHUNK_SIZE_LIMIT);
- } catch (std::runtime_error &e) {
- std::cout << "error: " << e.what() << std::endl;
- return grpc::Status(grpc::StatusCode::INTERNAL, e.what());
- }
- return grpc::Status::OK;
+ grpc::ServerReaderWriter<
+ backup::PullCompactionResponse,
+ backup::PullCompactionRequest> *stream) {
+ return grpc::Status(grpc::StatusCode::UNIMPLEMENTED, "not implemented yet");
}
} // namespace network
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Nov 24, 12:01 PM (20 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2575493
Default Alt Text
D3077.diff (9 KB)
Attached To
Mode
D3077: [services] Backup - reset implementation
Attached
Detach File
Event Timeline
Log In to Comment