Skip to content

Commit ebd170f

Browse files
committed
Add some more datastructure tests
1 parent d1aecf5 commit ebd170f

File tree

17 files changed

+164
-41
lines changed

17 files changed

+164
-41
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ In this repository, we present AnyBlob.
44
AnyBlob is a universal download manager that allows to retrieve and upload objects to different cloud object stores.
55
Our download manager uses less CPU resources than cloud-vendor provided libraries while retaining maximum throughput performance.
66
AnyBlob leverages IO\_uring for superior performance per core.
7-
For experimental results, please visit our research paper at [].
7+
For experimental results, please visit our research paper at [PVLDB 16](https://www.vldb.org/pvldb/vol16/p2734-durner.pdf).
88

99
## Building AnyBlob
1010

@@ -42,9 +42,10 @@ For coverage testing you can simply `make coverage` and open the coverage report
4242

4343
## Cite this work
4444

45-
If you are using AnyBlob in our scientific work, please cite:
45+
If you are using AnyBlob in your scientific work, please cite:
4646

4747
```
4848
Exploiting Cloud Object Storage for High-Performance Analytics
4949
Dominik Durner, Viktor Leis, and Thomas Neumann
50+
PVLDB 16, 11 (2023), 49th International Conference on Very Large Data Bases
5051
```

include/cloud/aws.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,21 +111,21 @@ class AWS : public Provider {
111111
/// Builds the http request for downloading a blob or listing the directory
112112
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> getRequest(const std::string& filePath, const std::pair<uint64_t, uint64_t>& range) const override;
113113
/// Builds the http request for putting objects without the object data itself
114-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequestGeneric(const std::string& filePath, const std::string_view object, uint16_t part, const std::string_view uploadId) const override;
114+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequestGeneric(const std::string& filePath, std::string_view object, uint16_t part, std::string_view uploadId) const override;
115115
/// Builds the http request for putting objects without the object data itself
116-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequest(const std::string& filePath, const std::string_view object) const override {
116+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequest(const std::string& filePath, std::string_view object) const override {
117117
return putRequestGeneric(filePath, object, 0, "");
118118
}
119119
// Builds the http request for deleting an objects
120120
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> deleteRequest(const std::string& filePath) const override {
121121
return deleteRequestGeneric(filePath, "");
122122
}
123123
/// Builds the http request for deleting objects
124-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> deleteRequestGeneric(const std::string& filePath, const std::string_view uploadId) const override;
124+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> deleteRequestGeneric(const std::string& filePath, std::string_view uploadId) const override;
125125
/// Builds the http request for creating multipart put objects
126126
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> createMultiPartRequest(const std::string& filePath) const override;
127127
/// Builds the http request for completing multipart put objects
128-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> completeMultiPartRequest(const std::string& filePath, const std::string_view uploadId, const std::vector<std::string>& etags) const override;
128+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> completeMultiPartRequest(const std::string& filePath, std::string_view uploadId, const std::vector<std::string>& etags) const override;
129129

130130
/// Get the address of the server
131131
[[nodiscard]] std::string getAddress() const override;
@@ -135,7 +135,7 @@ class AWS : public Provider {
135135
/// Builds the info http request
136136
[[nodiscard]] static std::unique_ptr<utils::DataVector<uint8_t>> downloadInstanceInfo(const std::string& info = "instance-type");
137137
/// Get the IAM address
138-
[[nodiscard]] static constexpr const char* getIAMAddress() { return "169.254.169.254"; }
138+
[[nodiscard]] static constexpr std::string_view getIAMAddress() { return "169.254.169.254"; }
139139
/// Get the port of the IAM server
140140
[[nodiscard]] static constexpr uint32_t getIAMPort() { return 80; }
141141

include/cloud/azure.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class Azure : public Provider {
7777
/// Builds the http request for downloading a blob or listing the directory
7878
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> getRequest(const std::string& filePath, const std::pair<uint64_t, uint64_t>& range) const override;
7979
/// Builds the http request for putting objects without the object data itself
80-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequest(const std::string& filePath, const std::string_view object) const override;
80+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequest(const std::string& filePath, std::string_view object) const override;
8181
// Builds the http request for deleting an objects
8282
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> deleteRequest(const std::string& filePath) const override;
8383

@@ -89,7 +89,7 @@ class Azure : public Provider {
8989
/// Builds the info http request
9090
[[nodiscard]] static std::unique_ptr<utils::DataVector<uint8_t>> downloadInstanceInfo();
9191
/// Get the IAM address
92-
[[nodiscard]] static constexpr const char* getIAMAddress() {
92+
[[nodiscard]] static constexpr std::string_view getIAMAddress() {
9393
return "169.254.169.254";
9494
}
9595
/// Get the port of the IAM server

include/cloud/gcp.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,21 @@ class GCP : public Provider {
7979
/// Builds the http request for downloading a blob or listing the directory
8080
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> getRequest(const std::string& filePath, const std::pair<uint64_t, uint64_t>& range) const override;
8181
/// Builds the http request for putting objects without the object data itself
82-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequestGeneric(const std::string& filePath, const std::string_view object, uint16_t part, const std::string_view uploadId) const override;
82+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequestGeneric(const std::string& filePath, std::string_view object, uint16_t part, std::string_view uploadId) const override;
8383
/// Builds the http request for putting objects without the object data itself
84-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequest(const std::string& filePath, const std::string_view object) const override {
84+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> putRequest(const std::string& filePath, std::string_view object) const override {
8585
return putRequestGeneric(filePath, object, 0, "");
8686
}
8787
// Builds the http request for deleting an objects
8888
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> deleteRequest(const std::string& filePath) const override {
8989
return deleteRequestGeneric(filePath, "");
9090
}
9191
/// Builds the http request for deleting objects
92-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> deleteRequestGeneric(const std::string& filePath, const std::string_view uploadId) const override;
92+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> deleteRequestGeneric(const std::string& filePath, std::string_view uploadId) const override;
9393
/// Builds the http request for creating multipart put objects
9494
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> createMultiPartRequest(const std::string& filePath) const override;
9595
/// Builds the http request for completing multipart put objects
96-
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> completeMultiPartRequest(const std::string& filePath, const std::string_view uploadId, const std::vector<std::string>& etags) const override;
96+
[[nodiscard]] std::unique_ptr<utils::DataVector<uint8_t>> completeMultiPartRequest(const std::string& filePath, std::string_view uploadId, const std::vector<std::string>& etags) const override;
9797

9898
/// Get the address of the server
9999
[[nodiscard]] std::string getAddress() const override;
@@ -103,7 +103,7 @@ class GCP : public Provider {
103103
/// Builds the info http request
104104
[[nodiscard]] static std::unique_ptr<utils::DataVector<uint8_t>> downloadInstanceInfo(const std::string& info = "machine-type");
105105
/// Get the IAM address
106-
[[nodiscard]] static constexpr const char* getIAMAddress() {
106+
[[nodiscard]] static constexpr std::string_view getIAMAddress() {
107107
return "169.254.169.254";
108108
}
109109
/// Get the port of the IAM server

include/cloud/provider.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class Provider {
7373
/// Builds the http request for downloading a blob or listing a directory
7474
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> getRequest(const std::string& filePath, const std::pair<uint64_t, uint64_t>& range) const = 0;
7575
/// Builds the http request for putting an object without the actual data (header only according to the data and length provided)
76-
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> putRequest(const std::string& filePath, const std::string_view object) const = 0;
76+
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> putRequest(const std::string& filePath, std::string_view object) const = 0;
7777
/// Builds the http request for deleting an object
7878
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> deleteRequest(const std::string& filePath) const = 0;
7979
/// Get the address of the server
@@ -84,13 +84,13 @@ class Provider {
8484
/// Is multipart upload supported, if size > 0?
8585
[[nodiscard]] virtual uint64_t multipartUploadSize() const { return 0; }
8686
/// Builds the http request for putting multipart objects without the object data itself
87-
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> putRequestGeneric(const std::string& /*filePath*/, const std::string_view /*object*/, uint16_t /*part*/, const std::string_view /*uploadId*/) const;
87+
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> putRequestGeneric(const std::string& /*filePath*/, std::string_view /*object*/, uint16_t /*part*/, std::string_view /*uploadId*/) const;
8888
/// Builds the http request for deleting multipart aborted objects
89-
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> deleteRequestGeneric(const std::string& /*filePath*/, const std::string_view /*uploadId*/) const;
89+
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> deleteRequestGeneric(const std::string& /*filePath*/, std::string_view /*uploadId*/) const;
9090
/// Builds the http request for creating multipart put objects
9191
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> createMultiPartRequest(const std::string& /*filePath*/) const;
9292
/// Builds the http request for completing multipart put objects
93-
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> completeMultiPartRequest(const std::string& /*filePath*/, const std::string_view /*uploadId*/, const std::vector<std::string>& /*etags*/) const;
93+
[[nodiscard]] virtual std::unique_ptr<utils::DataVector<uint8_t>> completeMultiPartRequest(const std::string& /*filePath*/, std::string_view /*uploadId*/, const std::vector<std::string>& /*etags*/) const;
9494

9595
/// Initialize secret
9696
virtual void initSecret(network::TaskedSendReceiver& /*sendReceiver*/) {}
@@ -101,17 +101,17 @@ class Provider {
101101
/// Gets the cloud provider type
102102
[[nodiscard]] CloudService getType() { return _type; }
103103
/// Is it a remote file?
104-
[[nodiscard]] static bool isRemoteFile(const std::string_view fileName) noexcept;
104+
[[nodiscard]] static bool isRemoteFile(std::string_view fileName) noexcept;
105105
/// Get the path of the parent dir without the remote info
106106
[[nodiscard]] static std::string getRemoteParentDirectory(std::string fileName) noexcept;
107107
/// Get a region and bucket name
108108
[[nodiscard]] static Provider::RemoteInfo getRemoteInfo(const std::string& fileName);
109109
/// Get the key from a keyFile
110110
[[nodiscard]] static std::string getKey(const std::string& keyFile);
111111
/// Get the etag from the upload header
112-
[[nodiscard]] static std::string getETag(const std::string_view header);
112+
[[nodiscard]] static std::string getETag(std::string_view header);
113113
/// Get the upload id from the multipart request body
114-
[[nodiscard]] static std::string getUploadId(const std::string_view body);
114+
[[nodiscard]] static std::string getUploadId(std::string_view body);
115115

116116
/// Create a provider (keyId is access email for GCP/Azure)
117117
[[nodiscard]] static std::unique_ptr<Provider> makeProvider(const std::string& filepath, bool https = true, const std::string& keyId = "", const std::string& keyFile = "", network::TaskedSendReceiver* sendReceiver = nullptr);

include/network/http_helper.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class HTTPHelper {
4747

4848
private:
4949
/// Detect the protocol
50-
[[nodiscard]] static Info detect(const std::string_view s);
50+
[[nodiscard]] static Info detect(std::string_view s);
5151

5252
public:
5353
/// Retrieve the content without http meta info, note that this changes data

include/network/original_message.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ struct OriginalMessage {
4242
uint64_t putLength;
4343

4444
/// The constructor
45-
OriginalMessage(std::unique_ptr<utils::DataVector<uint8_t>> message, std::string hostname, uint32_t port, uint8_t* receiveBuffer = nullptr, uint64_t bufferSize = 0, uint64_t traceId = 0) : message(std::move(message)), result(receiveBuffer, bufferSize), hostname(hostname), port(port), traceId(traceId), putData(nullptr), putLength() {}
45+
OriginalMessage(std::unique_ptr<utils::DataVector<uint8_t>> message, std::string_view hostname, uint32_t port, uint8_t* receiveBuffer = nullptr, uint64_t bufferSize = 0, uint64_t traceId = 0) : message(std::move(message)), result(receiveBuffer, bufferSize), hostname(hostname), port(port), traceId(traceId), putData(nullptr), putLength() {}
4646

4747
/// The destructor
4848
virtual ~OriginalMessage() = default;
@@ -72,7 +72,7 @@ struct OriginalCallbackMessage : public OriginalMessage {
7272
Callback callback;
7373

7474
/// The constructor
75-
OriginalCallbackMessage(Callback&& callback, std::unique_ptr<utils::DataVector<uint8_t>> message, std::string hostname, uint32_t port, uint8_t* receiveBuffer = nullptr, uint64_t bufferSize = 0, uint64_t traceId = 0) : OriginalMessage(std::move(message), hostname, port, receiveBuffer, bufferSize, traceId), callback(std::forward<Callback>(callback)) {}
75+
OriginalCallbackMessage(Callback&& callback, std::unique_ptr<utils::DataVector<uint8_t>> message, std::string_view hostname, uint32_t port, uint8_t* receiveBuffer = nullptr, uint64_t bufferSize = 0, uint64_t traceId = 0) : OriginalMessage(std::move(message), hostname, port, receiveBuffer, bufferSize, traceId), callback(std::forward<Callback>(callback)) {}
7676

7777
/// The destructor
7878
virtual ~OriginalCallbackMessage() override = default;

src/cloud/aws.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ unique_ptr<utils::DataVector<uint8_t>> AWS::getRequest(const string& filePath, c
228228
return make_unique<utils::DataVector<uint8_t>>(reinterpret_cast<uint8_t*>(httpHeader.data()), reinterpret_cast<uint8_t*>(httpHeader.data() + httpHeader.size()));
229229
}
230230
//---------------------------------------------------------------------------
231-
unique_ptr<utils::DataVector<uint8_t>> AWS::putRequestGeneric(const string& filePath, const string_view object, uint16_t part, const string_view uploadId) const
231+
unique_ptr<utils::DataVector<uint8_t>> AWS::putRequestGeneric(const string& filePath, string_view object, uint16_t part, string_view uploadId) const
232232
// Builds the http request for putting objects without the object data itself
233233
{
234234
if (!validKeys())
@@ -270,7 +270,7 @@ unique_ptr<utils::DataVector<uint8_t>> AWS::putRequestGeneric(const string& file
270270
return make_unique<utils::DataVector<uint8_t>>(reinterpret_cast<uint8_t*>(httpHeader.data()), reinterpret_cast<uint8_t*>(httpHeader.data() + httpHeader.size()));
271271
}
272272
//---------------------------------------------------------------------------
273-
unique_ptr<utils::DataVector<uint8_t>> AWS::deleteRequestGeneric(const string& filePath, const string_view uploadId) const
273+
unique_ptr<utils::DataVector<uint8_t>> AWS::deleteRequestGeneric(const string& filePath, string_view uploadId) const
274274
// Builds the http request for deleting an objects
275275
{
276276
if (!validKeys())
@@ -345,7 +345,7 @@ unique_ptr<utils::DataVector<uint8_t>> AWS::createMultiPartRequest(const string&
345345
return make_unique<utils::DataVector<uint8_t>>(reinterpret_cast<uint8_t*>(httpHeader.data()), reinterpret_cast<uint8_t*>(httpHeader.data() + httpHeader.size()));
346346
}
347347
//---------------------------------------------------------------------------
348-
unique_ptr<utils::DataVector<uint8_t>> AWS::completeMultiPartRequest(const string& filePath, const string_view uploadId, const std::vector<std::string>& etags) const
348+
unique_ptr<utils::DataVector<uint8_t>> AWS::completeMultiPartRequest(const string& filePath, string_view uploadId, const std::vector<std::string>& etags) const
349349
// Builds the http request for completing multipart upload objects
350350
{
351351
if (!validKeys())

src/cloud/azure.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ unique_ptr<utils::DataVector<uint8_t>> Azure::getRequest(const string& filePath,
121121
return make_unique<utils::DataVector<uint8_t>>(reinterpret_cast<uint8_t*>(httpHeader.data()), reinterpret_cast<uint8_t*>(httpHeader.data() + httpHeader.size()));
122122
}
123123
//---------------------------------------------------------------------------
124-
unique_ptr<utils::DataVector<uint8_t>> Azure::putRequest(const string& filePath, const string_view object) const
124+
unique_ptr<utils::DataVector<uint8_t>> Azure::putRequest(const string& filePath, string_view object) const
125125
// Builds the http request for putting objects without the object data itself
126126
{
127127
AzureSigner::Request request;

src/cloud/gcp.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ unique_ptr<utils::DataVector<uint8_t>> GCP::getRequest(const string& filePath, c
104104
return make_unique<utils::DataVector<uint8_t>>(reinterpret_cast<uint8_t*>(httpHeader.data()), reinterpret_cast<uint8_t*>(httpHeader.data() + httpHeader.size()));
105105
}
106106
//---------------------------------------------------------------------------
107-
unique_ptr<utils::DataVector<uint8_t>> GCP::putRequestGeneric(const string& filePath, const string_view object, uint16_t part, const string_view uploadId) const
107+
unique_ptr<utils::DataVector<uint8_t>> GCP::putRequestGeneric(const string& filePath, string_view object, uint16_t part, string_view uploadId) const
108108
// Builds the http request for putting objects without the object data itself
109109
{
110110
GCPSigner::Request request;
@@ -139,7 +139,7 @@ unique_ptr<utils::DataVector<uint8_t>> GCP::putRequestGeneric(const string& file
139139
return make_unique<utils::DataVector<uint8_t>>(reinterpret_cast<uint8_t*>(httpHeader.data()), reinterpret_cast<uint8_t*>(httpHeader.data() + httpHeader.size()));
140140
}
141141
//---------------------------------------------------------------------------
142-
unique_ptr<utils::DataVector<uint8_t>> GCP::deleteRequestGeneric(const string& filePath, const string_view uploadId) const
142+
unique_ptr<utils::DataVector<uint8_t>> GCP::deleteRequestGeneric(const string& filePath, string_view uploadId) const
143143
// Builds the http request for deleting objects
144144
{
145145
GCPSigner::Request request;
@@ -196,7 +196,7 @@ unique_ptr<utils::DataVector<uint8_t>> GCP::createMultiPartRequest(const string&
196196
return make_unique<utils::DataVector<uint8_t>>(reinterpret_cast<uint8_t*>(httpHeader.data()), reinterpret_cast<uint8_t*>(httpHeader.data() + httpHeader.size()));
197197
}
198198
//---------------------------------------------------------------------------
199-
unique_ptr<utils::DataVector<uint8_t>> GCP::completeMultiPartRequest(const string& filePath, const string_view uploadId, const std::vector<std::string>& etags) const
199+
unique_ptr<utils::DataVector<uint8_t>> GCP::completeMultiPartRequest(const string& filePath, string_view uploadId, const std::vector<std::string>& etags) const
200200
// Builds the http request for completing multipart upload objects
201201
{
202202
string content = "<CompleteMultipartUpload>\n";

0 commit comments

Comments
 (0)