aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-21 16:17:47 +0200
committerStefan Boberg <[email protected]>2021-05-21 16:17:47 +0200
commitc37f22d2d48fbda1c10df475e2ed01d5f44dd7cb (patch)
tree1829df5804aa392b9456699395e953780748bf95
parentWIP structured cache endpoints - tactical check-in not fully functional yet (diff)
parentAdded support for package additional files. Added io hash chunk id to… (#2) (diff)
downloadzen-c37f22d2d48fbda1c10df475e2ed01d5f44dd7cb.tar.xz
zen-c37f22d2d48fbda1c10df475e2ed01d5f44dd7cb.zip
Merge branch 'main' into jupiter-structured
-rw-r--r--.editorconfig3
-rw-r--r--README.md14
-rw-r--r--scripts/installdeps.bat2
-rw-r--r--vcpkg_overlay-ports/asio/CMakeLists.txt28
-rw-r--r--vcpkg_overlay-ports/asio/asio-config.cmake6
-rw-r--r--vcpkg_overlay-ports/asio/portfile.cmake31
-rw-r--r--vcpkg_overlay-ports/asio/vcpkg.json27
-rw-r--r--zen/zen.vcxproj2
-rw-r--r--zencore-test/zencore-test.vcxproj2
-rw-r--r--zencore/zencore.vcxproj2
-rw-r--r--zenserver-test/zenserver-test.vcxproj2
-rw-r--r--zenserver/projectstore.cpp132
-rw-r--r--zenserver/projectstore.h21
-rw-r--r--zenserver/upstream/jupiter.cpp51
-rw-r--r--zenserver/upstream/jupiter.h6
-rw-r--r--zenserver/zenserver.vcxproj2
-rw-r--r--zenstore/zenstore.vcxproj2
-rw-r--r--zentest-appstub/zentest-appstub.vcxproj7
-rw-r--r--zentestutil/zentestutil.vcxproj2
19 files changed, 228 insertions, 114 deletions
diff --git a/.editorconfig b/.editorconfig
index 11e36773f..b75247496 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -67,3 +67,6 @@ cpp_space_around_assignment_operator = insert
cpp_space_pointer_reference_alignment = left
cpp_space_around_ternary_operator = insert
cpp_wrap_preserve_blocks = one_liners
+
+indent_style = tab
+indent_size = 4
diff --git a/README.md b/README.md
index 6854e99c4..a4ec951fd 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,8 @@ which has decayed, hopefully it can be revisited at some point.
## Setup
+We currently only support building and running the server on Windows. Linux and Mac will be supported before UE5 release
+
To build the code you will need Visual Studio 2019 (we use c++20 features), git and vcpkg.
* Install Visual Studio 2019 Version 16.9.4 or later (16.10 is recommended as it contains improvements to debug codegen which have a pretty significant impact when iterating in debug mode)
@@ -18,9 +20,9 @@ basis and requires manual bootstrap so you will need to do the following at leas
* open up a command line window
* create a `git`/`github` directory somewhere for you to clone repos into
- * issue `git clone https://github.com/bionicbeagle/vcpkg.git` and build it using the `bootstrap-vcpkg.bat` script. This git repo is temporary and will change in the future but it should be an easy upgrade when the time comes
+ * issue `git clone https://github.com/microsoft/vcpkg.git` and build it using the `bootstrap-vcpkg.bat` script
* optional: add the `vcpkg` directory you cloned to your PATH to allow invoking vcpkg on the command line
-* issue `vcpkg integrate install`
+* issue `vcpkg integrate install` to make sure you can build from Visual Studio using package manifests
Now you are ready to start building!
@@ -46,6 +48,14 @@ Now you are ready to start building!
will be tightened up in the future to require some degree of authentication to satisfy security
requirements
+# Contributing Code
+
+We rely on clang-format for consistent code formatting. You can install version 12 or later from https://llvm.org/builds/
+
+The helper scripts also depend on Python 3.x, which you may install from https://www.python.org/downloads/windows/
+
+Once you have those dependencies, you can simply run `prepare_commit.bat` to ensure the code is properly formatted and has the Epic copyright header comment
+
# Testing
* There are some test projects
diff --git a/scripts/installdeps.bat b/scripts/installdeps.bat
index dab9c2c67..f8ec42608 100644
--- a/scripts/installdeps.bat
+++ b/scripts/installdeps.bat
@@ -1 +1 @@
-vcpkg --x-manifest-root=%~dp0.. --triplet=x64-windows-static install
+vcpkg --x-manifest-root=%~dp0.. --overlay-ports=%~dp0..\vcpkg_overlay-ports --triplet=x64-windows-static install \ No newline at end of file
diff --git a/vcpkg_overlay-ports/asio/CMakeLists.txt b/vcpkg_overlay-ports/asio/CMakeLists.txt
new file mode 100644
index 000000000..6bdb490ba
--- /dev/null
+++ b/vcpkg_overlay-ports/asio/CMakeLists.txt
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.8)
+project(asio)
+
+add_library(asio INTERFACE)
+
+# Export target
+install(TARGETS asio
+ EXPORT asio
+ INCLUDES DESTINATION include/
+)
+
+install(EXPORT asio
+ DESTINATION "share/asio"
+ FILE asio-targets.cmake
+)
+
+install(DIRECTORY
+ asio/include/asio
+ DESTINATION include/
+ FILES_MATCHING
+ PATTERN "*.hpp"
+ PATTERN "*.ipp"
+)
+
+install(FILES
+ asio/include/asio.hpp
+ DESTINATION include/
+)
diff --git a/vcpkg_overlay-ports/asio/asio-config.cmake b/vcpkg_overlay-ports/asio/asio-config.cmake
new file mode 100644
index 000000000..6e5325003
--- /dev/null
+++ b/vcpkg_overlay-ports/asio/asio-config.cmake
@@ -0,0 +1,6 @@
+include ("${CMAKE_CURRENT_LIST_DIR}/asio-targets.cmake")
+add_library(asio::asio INTERFACE IMPORTED)
+target_link_libraries(asio::asio INTERFACE asio)
+
+get_target_property(_ASIO_INCLUDE_DIR asio INTERFACE_INCLUDE_DIRECTORIES)
+set(ASIO_INCLUDE_DIR "${_ASIO_INCLUDE_DIR}")
diff --git a/vcpkg_overlay-ports/asio/portfile.cmake b/vcpkg_overlay-ports/asio/portfile.cmake
new file mode 100644
index 000000000..08cf98e24
--- /dev/null
+++ b/vcpkg_overlay-ports/asio/portfile.cmake
@@ -0,0 +1,31 @@
+#header-only library
+
+vcpkg_from_git(
+ OUT_SOURCE_PATH SOURCE_PATH
+ URL https://github.com/chriskohlhoff/asio.git
+ REPO chriskohlhoff/asio
+ REF 57577c6db46a4e2de5351af2b185bf52696699a9
+ HEAD_REF master
+)
+
+# Always use "ASIO_STANDALONE" to avoid boost dependency
+vcpkg_replace_string("${SOURCE_PATH}/asio/include/asio/detail/config.hpp" "defined(ASIO_STANDALONE)" "!defined(VCPKG_DISABLE_ASIO_STANDALONE)")
+
+# CMake install
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+)
+vcpkg_install_cmake()
+
+vcpkg_fixup_cmake_targets(CONFIG_PATH "share/asio")
+file(INSTALL
+ ${CMAKE_CURRENT_LIST_DIR}/asio-config.cmake
+ DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT}
+)
+file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug)
+
+# Handle copyright
+file(INSTALL ${SOURCE_PATH}/asio/LICENSE_1_0.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
+
diff --git a/vcpkg_overlay-ports/asio/vcpkg.json b/vcpkg_overlay-ports/asio/vcpkg.json
new file mode 100644
index 000000000..38140acc5
--- /dev/null
+++ b/vcpkg_overlay-ports/asio/vcpkg.json
@@ -0,0 +1,27 @@
+{
+ "name": "asio",
+ "version": "1.18.1",
+ "description": "Asio is a cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach.",
+ "homepage": "https://github.com/chriskohlhoff/asio",
+ "documentation": "https://think-async.com/Asio/asio-1.18.0/doc/",
+ "features": {
+ "coroutine": {
+ "description": "Boost.Coroutine (optional) if you use spawn() to launch coroutines",
+ "dependencies": [
+ "boost-coroutine"
+ ]
+ },
+ "openssl": {
+ "description": "OpenSSL (optional) if you use Asio's SSL support.",
+ "dependencies": [
+ "openssl"
+ ]
+ },
+ "regex": {
+ "description": "Boost.Regex (optional) if you use any of the read_until() or async_read_until() overloads that take a boost::regex parameter.",
+ "dependencies": [
+ "boost-regex"
+ ]
+ }
+ }
+}
diff --git a/zen/zen.vcxproj b/zen/zen.vcxproj
index 2614405d7..06c08e49f 100644
--- a/zen/zen.vcxproj
+++ b/zen/zen.vcxproj
@@ -56,10 +56,12 @@
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
diff --git a/zencore-test/zencore-test.vcxproj b/zencore-test/zencore-test.vcxproj
index 77a4397fe..42e373ab6 100644
--- a/zencore-test/zencore-test.vcxproj
+++ b/zencore-test/zencore-test.vcxproj
@@ -54,10 +54,12 @@
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
diff --git a/zencore/zencore.vcxproj b/zencore/zencore.vcxproj
index c68e922c5..c9d51e0bb 100644
--- a/zencore/zencore.vcxproj
+++ b/zencore/zencore.vcxproj
@@ -58,10 +58,12 @@
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
diff --git a/zenserver-test/zenserver-test.vcxproj b/zenserver-test/zenserver-test.vcxproj
index 8cf7df84d..3d5a37ac8 100644
--- a/zenserver-test/zenserver-test.vcxproj
+++ b/zenserver-test/zenserver-test.vcxproj
@@ -58,10 +58,12 @@
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp
index 0d7ad0f16..8753d50fc 100644
--- a/zenserver/projectstore.cpp
+++ b/zenserver/projectstore.cpp
@@ -276,9 +276,9 @@ ProjectStore::Oplog::FindChunk(Oid ChunkId)
return m_CasStore.FindChunk(ChunkIt->second);
}
- if (auto FileIt = m_ServerFileMap.find(ChunkId); FileIt != m_ServerFileMap.end())
+ if (auto FileIt = m_FileMap.find(ChunkId); FileIt != m_FileMap.end())
{
- std::filesystem::path FilePath = m_OuterProject->RootDir / FileIt->second;
+ std::filesystem::path FilePath = m_OuterProject->RootDir / FileIt->second.ServerPath;
return IoBufferBuilder::MakeFromFile(FilePath.native().c_str());
}
@@ -296,20 +296,35 @@ ProjectStore::Oplog::IterateFileMap(std::function<void(const Oid&, const std::st
{
for (const auto& Kv : m_FileMap)
{
- Fn(Kv.first, Kv.second);
+ Fn(Kv.first, Kv.second.ClientPath);
}
}
-void
-ProjectStore::Oplog::AddFileMapping(Oid FileId, std::string_view Path)
+bool
+ProjectStore::Oplog::AddFileMapping(Oid FileId, IoHash Hash, std::string_view ServerPath, std::string_view ClientPath)
{
- m_FileMap.emplace(FileId, Path);
-}
+ if (ServerPath.empty() || ClientPath.empty())
+ {
+ return false;
+ }
-void
-ProjectStore::Oplog::AddServerFileMapping(Oid FileId, std::string_view Path)
-{
- m_ServerFileMap.emplace(FileId, Path);
+ if (ServerPath[0] == '/')
+ {
+ ServerPath = ServerPath.substr(1);
+ }
+
+ FileMapEntry Entry;
+ Entry.ServerPath = ServerPath;
+ Entry.ClientPath = ClientPath;
+
+ m_FileMap.emplace(FileId, std::move(Entry));
+
+ if (Hash != IoHash::Zero)
+ {
+ m_ChunkMap.emplace(FileId, Hash);
+ }
+
+ return true;
}
void
@@ -356,93 +371,30 @@ ProjectStore::Oplog::RegisterOplogEntry(CbObject Core, const OplogEntry& OpEntry
Log().debug("bulkdata {} -> {}", BulkDataId, BulkDataHash);
}
- if (CbFieldView FilesArray = Core["files"sv])
+ if (Core["files"sv])
{
- int FileCount = 0;
- int ServerFileCount = 0;
-
- std::atomic<bool> InvalidOp{false};
-
Stopwatch Timer;
+ int32_t FileCount = 0;
- std::future<void> f0 = std::async(std::launch::async, [&] {
- for (CbFieldView& Entry : FilesArray)
- {
- CbObjectView FileObj = Entry.AsObjectView();
- const Oid FileId = FileObj["id"sv].AsObjectId();
-
- if (auto PathField = FileObj["path"sv])
- {
- AddFileMapping(FileId, PathField.AsString());
-
- // Log().debug("file {} -> {}", FileId, PathString);
-
- ++FileCount;
- }
- else
- {
- // Every file entry needs to specify a path
- InvalidOp = true;
- break;
- }
-
- if (InvalidOp.load(std::memory_order::relaxed))
- {
- break;
- }
- }
- });
-
- std::future<void> f1 = std::async(std::launch::async, [&] {
- CbArrayView ServerFilesArray = Core["serverfiles"sv].AsArrayView();
+ for (CbFieldView& Entry : Core["files"sv])
+ {
+ CbObjectView FileObj = Entry.AsObjectView();
+ const Oid FileId = FileObj["id"sv].AsObjectId();
+ IoHash FileDataHash = FileObj["data"sv].AsBinaryAttachment();
+ std::string_view ServerPath = FileObj["serverpath"sv].AsString();
+ std::string_view ClientPath = FileObj["clientpath"sv].AsString();
- for (CbFieldView& Entry : ServerFilesArray)
+ if (AddFileMapping(FileId, FileDataHash, ServerPath, ClientPath))
{
- CbObjectView FileObj = Entry.AsObjectView();
- const Oid FileId = FileObj["id"sv].AsObjectId();
-
- if (auto PathField = FileObj["path"sv])
- {
- AddServerFileMapping(FileId, PathField.AsString());
-
- // m_log.debug("file {} -> {}", FileId, PathString);
-
- ++ServerFileCount;
- }
- else
- {
- // Every file entry needs to specify a path
- InvalidOp = true;
- break;
- }
-
- if (InvalidOp.load(std::memory_order::relaxed))
- {
- break;
- }
+ ++FileCount;
}
- });
-
- f0.wait();
- f1.wait();
-
- if (InvalidOp)
- {
- return kInvalidOp;
- }
-
- if (FileCount || ServerFileCount)
- {
- Log().debug("{} files registered, {} server files (took {})",
- FileCount,
- ServerFileCount,
- NiceTimeSpanMs(Timer.getElapsedTimeMs()));
-
- if (FileCount != ServerFileCount)
+ else
{
- Log().warn("client/server file list mismatch: {} vs {}", FileCount, ServerFileCount);
+ Log().warn("invalid file");
}
}
+
+ Log().debug("added {} file(s) in {}", FileCount, NiceTimeSpanMs(Timer.getElapsedTimeMs()));
}
for (CbFieldView& Entry : Core["meta"sv])
@@ -1114,7 +1066,7 @@ HttpProjectService::HttpProjectService(CasStore& Store, ProjectStore* Projects)
// the prep step rejected the chunk. This should be fixed since there's
// a performance cost associated with any file system activity
- bool IsValid = true;
+ bool IsValid = true;
std::vector<IoHash> MissingChunks;
CbPackage::AttachmentResolver Resolver = [&](const IoHash& Hash) -> SharedBuffer {
diff --git a/zenserver/projectstore.h b/zenserver/projectstore.h
index 38c53ea6e..72b8a1cd6 100644
--- a/zenserver/projectstore.h
+++ b/zenserver/projectstore.h
@@ -99,6 +99,12 @@ public:
uint64_t Size;
};
+ struct FileMapEntry
+ {
+ std::string ServerPath;
+ std::string ClientPath;
+ };
+
template<class V>
using OidMap = tsl::robin_map<Oid, V, Oid::Hasher>;
@@ -108,18 +114,17 @@ public:
std::filesystem::path m_BasePath;
std::filesystem::path m_TempPath;
- OidMap<IoHash> m_ChunkMap; // output data chunk id -> CAS address
- OidMap<IoHash> m_MetaMap; // meta chunk id -> CAS address
- OidMap<std::string> m_FileMap; // file id -> client file
- OidMap<std::string> m_ServerFileMap; // file id -> server file
- std::map<int, OplogEntryAddress> m_OpAddressMap; // Index LSN -> op data in ops blob file
- OidMap<int> m_LatestOpMap; // op key -> latest op LSN for key
+ OidMap<IoHash> m_ChunkMap; // output data chunk id -> CAS address
+ OidMap<IoHash> m_MetaMap; // meta chunk id -> CAS address
+ OidMap<FileMapEntry> m_FileMap; // file id -> file map entry
+ int32_t m_ManifestVersion; // File system manifest version
+ std::map<int, OplogEntryAddress> m_OpAddressMap; // Index LSN -> op data in ops blob file
+ OidMap<int> m_LatestOpMap; // op key -> latest op LSN for key
RefPtr<OplogStorage> m_Storage;
std::string m_OplogId;
- void AddFileMapping(Oid FileId, std::string_view Path);
- void AddServerFileMapping(Oid FileId, std::string_view Path);
+ bool AddFileMapping(Oid FileId, IoHash Hash, std::string_view ServerPath, std::string_view ClientPath);
void AddChunkMapping(Oid ChunkId, IoHash Hash);
void AddMetaMapping(Oid ChunkId, IoHash Hash);
};
diff --git a/zenserver/upstream/jupiter.cpp b/zenserver/upstream/jupiter.cpp
index 88a164fbd..363ebcd61 100644
--- a/zenserver/upstream/jupiter.cpp
+++ b/zenserver/upstream/jupiter.cpp
@@ -3,6 +3,7 @@
#include "jupiter.h"
#include <fmt/format.h>
+#include <zencore/compactbinary.h>
#include <zencore/iobuffer.h>
#include <zencore/iohash.h>
#include <zencore/string.h>
@@ -108,26 +109,54 @@ CloudCacheSession::Put(std::string_view BucketId, std::string_view Key, IoBuffer
}
}
-//////////////////////////////////////////////////////////////////////////
-
-IoBuffer
-CloudCacheSession::Get(std::string_view BucketId, const IoHash& Key)
+void
+CloudCacheSession::Put(std::string_view BucketId, std::string_view Key, CbObjectView Data)
{
- StringBuilder<64> KeyString;
- Key.ToHexString(KeyString);
+ ExtendableStringBuilder<256> Uri;
+ Uri << m_CacheClient->ServiceUrl();
+ Uri << "/api/v1/c/ddc/" << m_CacheClient->Namespace() << "/" << BucketId << "/" TESTING_PREFIX << Key;
- return Get(BucketId, KeyString);
+ auto& Session = m_SessionState->Session;
+
+ IoHash Hash = Data.GetHash();
+ MemoryView DataView = Data.GetView();
+
+ std::string Auth;
+ m_CacheClient->AcquireAccessToken(Auth);
+ Session.SetOption(cpr::Url{Uri.c_str()});
+ Session.SetOption(
+ cpr::Header{{"Authorization", Auth}, {"X-Jupiter-IoHash", Hash.ToHexString()}, {"Content-Type", "application/x-ue-cb"}});
+ Session.SetOption(cpr::Body{(const char*)DataView.GetData(), DataView.GetSize()});
+
+ cpr::Response Response = Session.Put();
+
+ if (Response.error)
+ {
+ spdlog::warn("PUT failed: '{}'", Response.error.message);
+ }
}
-void
-CloudCacheSession::Put(std::string_view BucketId, const IoHash& Key, IoBuffer Data, HttpContentType ContentType)
+std::vector<IoHash>
+CloudCacheSession::Filter(std::string_view BucketId, const std::vector<IoHash>& ChunkHashes)
{
- ZEN_UNUSED(ContentType);
+ ExtendableStringBuilder<256> Uri;
+ Uri << m_CacheClient->ServiceUrl();
+ Uri << "/api/v1/s/" << m_CacheClient->Namespace();
+
+ ZEN_UNUSED(BucketId, ChunkHashes);
+ return {};
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+IoBuffer
+CloudCacheSession::Get(std::string_view BucketId, const IoHash& Key)
+{
StringBuilder<64> KeyString;
Key.ToHexString(KeyString);
- return Put(BucketId, KeyString, Data);
+ return Get(BucketId, KeyString);
}
//////////////////////////////////////////////////////////////////////////
diff --git a/zenserver/upstream/jupiter.h b/zenserver/upstream/jupiter.h
index c17ffb047..a0dbefa3c 100644
--- a/zenserver/upstream/jupiter.h
+++ b/zenserver/upstream/jupiter.h
@@ -9,6 +9,7 @@
#include <atomic>
#include <list>
#include <memory>
+#include <vector>
namespace zen {
namespace detail {
@@ -18,6 +19,7 @@ namespace detail {
class IoBuffer;
class CloudCacheClient;
struct IoHash;
+class CbObjectView;
/**
* Cached access token, for use with `Authorization:` header
@@ -54,7 +56,9 @@ public:
// Structured cache operations
IoBuffer Get(std::string_view BucketId, const IoHash& Key);
- void Put(std::string_view BucketId, const IoHash& Key, IoBuffer Data, HttpContentType ContentType);
+ void Put(std::string_view BucketId, std::string_view Key, CbObjectView Data);
+
+ std::vector<IoHash> Filter(std::string_view BucketId, const std::vector<IoHash>& ChunkHashes);
private:
RefPtr<CloudCacheClient> m_CacheClient;
diff --git a/zenserver/zenserver.vcxproj b/zenserver/zenserver.vcxproj
index b47ec2f04..2ba6bd551 100644
--- a/zenserver/zenserver.vcxproj
+++ b/zenserver/zenserver.vcxproj
@@ -58,10 +58,12 @@
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
diff --git a/zenstore/zenstore.vcxproj b/zenstore/zenstore.vcxproj
index 4a39e826d..06cb9db32 100644
--- a/zenstore/zenstore.vcxproj
+++ b/zenstore/zenstore.vcxproj
@@ -77,10 +77,12 @@
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
diff --git a/zentest-appstub/zentest-appstub.vcxproj b/zentest-appstub/zentest-appstub.vcxproj
index cf8fd3c5e..efbe86b47 100644
--- a/zentest-appstub/zentest-appstub.vcxproj
+++ b/zentest-appstub/zentest-appstub.vcxproj
@@ -82,7 +82,12 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
- <PropertyGroup Label="Vcpkg" />
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
+ </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
diff --git a/zentestutil/zentestutil.vcxproj b/zentestutil/zentestutil.vcxproj
index 8213763fc..cf8b02dc1 100644
--- a/zentestutil/zentestutil.vcxproj
+++ b/zentestutil/zentestutil.vcxproj
@@ -58,9 +58,11 @@
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgAdditionalInstallOptions>--overlay-ports=$(SolutionDir)vcpkg_overlay-ports</VcpkgAdditionalInstallOptions>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>