aboutsummaryrefslogtreecommitdiff
path: root/plugins/ObjectCacheServer
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2024-03-24 21:26:44 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2024-03-24 21:26:44 -0400
commit49c3641def5ae1b7557ed61ed7bb28bbf425ccc9 (patch)
tree4eb1bd863074e64922e35ff730f354ac40528698 /plugins/ObjectCacheServer
parente5bb0ee302e789cb96e7ecfe839cbbcc8e3fd5d7 (diff)
Squashed commit of the following:
commit a504435151efbe1d19404fa44859b15c629f6d5d Author: vnugent <public@vaughnnugent.com> Date: Sun Mar 24 20:55:01 2024 -0400 chore: Updated compose and added some more logging commit c74440ff12daa03cc4b7792d0c3baad46a11a465 Author: vnugent <public@vaughnnugent.com> Date: Mon Mar 18 21:57:57 2024 -0400 feat: message checksum support & dynamic serializers commit 9983582db08d3e6c456295ea96e482cbb4f31f42 Author: vnugent <public@vaughnnugent.com> Date: Sun Mar 10 21:58:28 2024 -0400 source tree project location updated commit 60f09bde87b5c59ef937c62ef64b7745bc3711b5 Merge: 2f75659 e5bb0ee Author: vnugent <public@vaughnnugent.com> Date: Sun Mar 10 16:50:09 2024 -0400 Merge remote-tracking branch 'origin/master' into develop commit 2f7565976472f0f056db60520bf253a776112c10 Merge: 323ff67 6b87785 Author: vnugent <public@vaughnnugent.com> Date: Sun Mar 10 16:45:23 2024 -0400 merge master commit 323ff67badfc46ad638d75f059d60d9425ccb2fa Author: vnugent <public@vaughnnugent.com> Date: Sun Mar 10 15:50:07 2024 -0400 ci(server): Conainerize and add vncache server packages commit 5d4192880654fd6e00e587814169415b42621327 Author: vnugent <public@vaughnnugent.com> Date: Sat Mar 9 19:13:21 2024 -0500 chore: #2 Minor fixes and polish before release commit a4b3504bb891829074d1efde0433eae010862181 Author: vnugent <public@vaughnnugent.com> Date: Sat Mar 9 16:30:44 2024 -0500 package updates commit 4d8cfc10382105b0acbd94df93ad3d05ff91db54 Author: vnugent <public@vaughnnugent.com> Date: Wed Mar 6 21:30:58 2024 -0500 refactor: #2 Centralize server state, default discovery endpoints & more commit 016a96a80cce025a86c6cf26707738f6a2eb2658 Author: vnugent <public@vaughnnugent.com> Date: Thu Feb 29 21:22:38 2024 -0500 feat: add future support for memory diagnostics, and some docs commit 456ead9bc8b0f61357bae93152ad0403c4940101 Author: vnugent <public@vaughnnugent.com> Date: Tue Feb 13 14:46:35 2024 -0500 fix: #1 shared cluster index on linux & latested core updates commit a481d63f964a5d5204cac2e95141f37f9a28d573 Author: vnugent <public@vaughnnugent.com> Date: Tue Jan 23 15:43:50 2024 -0500 cache extension api tweaks
Diffstat (limited to 'plugins/ObjectCacheServer')
-rw-r--r--plugins/ObjectCacheServer/server/container/Dockerfile1
-rw-r--r--plugins/ObjectCacheServer/server/container/config-templates/ObjectCacheServer-template.json3
-rw-r--r--plugins/ObjectCacheServer/server/container/docker-compose.yaml10
-rw-r--r--plugins/ObjectCacheServer/server/taskfile.yaml12
-rw-r--r--plugins/ObjectCacheServer/src/Cache/CacheMemoryConfiguration.cs3
-rw-r--r--plugins/ObjectCacheServer/src/Endpoints/ConnectEndpoint.cs4
-rw-r--r--plugins/ObjectCacheServer/src/ObjectCacheServer.csproj4
-rw-r--r--plugins/ObjectCacheServer/src/ObjectCacheSystemState.cs20
8 files changed, 39 insertions, 18 deletions
diff --git a/plugins/ObjectCacheServer/server/container/Dockerfile b/plugins/ObjectCacheServer/server/container/Dockerfile
index 6c466d4..725b9d1 100644
--- a/plugins/ObjectCacheServer/server/container/Dockerfile
+++ b/plugins/ObjectCacheServer/server/container/Dockerfile
@@ -55,6 +55,7 @@ ENV MAX_ENTRIES=10000
ENV CACHE_BUCKETS=100
ENV CACHE_MAX_MESSAGE=20480
ENV MAX_CONCURRENT_CONNECTIONS=1000
+ENV ENABLE_CHECKSUMS=true
ENV VERIFY_IP=true
ENV MAX_PEER_NODES=10
diff --git a/plugins/ObjectCacheServer/server/container/config-templates/ObjectCacheServer-template.json b/plugins/ObjectCacheServer/server/container/config-templates/ObjectCacheServer-template.json
index 765c3d7..564039a 100644
--- a/plugins/ObjectCacheServer/server/container/config-templates/ObjectCacheServer-template.json
+++ b/plugins/ObjectCacheServer/server/container/config-templates/ObjectCacheServer-template.json
@@ -45,7 +45,8 @@
"buffer_recv_min": 8192, //min of 8k transfer buffer
"buffer_header_max": 2048, //2k max header buffer size
"buffer_header_min": 128, //128 byte min request header buffer size
- "max_message_size": ${CACHE_MAX_MESSAGE} //Absolute maxium message size allowed, also the maxium size of cache entires
+ "max_message_size": ${CACHE_MAX_MESSAGE}, //Absolute maxium message size allowed, also the maxium size of cache entires
+ "enable_checksums": ${ENABLE_CHECKSUMS} //Enable checksums for cache entries
},
//Known peers array, must point to well-known endpoint for discovery
diff --git a/plugins/ObjectCacheServer/server/container/docker-compose.yaml b/plugins/ObjectCacheServer/server/container/docker-compose.yaml
index c1b61fa..5aa494e 100644
--- a/plugins/ObjectCacheServer/server/container/docker-compose.yaml
+++ b/plugins/ObjectCacheServer/server/container/docker-compose.yaml
@@ -10,6 +10,7 @@ services:
restart: unless-stopped
hostname: vncache-server
volumes:
+ - ./data/:/app/data:rw #optional writes log files to the host (may be required in the future)
- ./assets:/app/usr/assets:ro #optional if assets are required
- ./ssl:/app/ssl:ro #optional only if SSL is enabled (currently not a feature)
ports:
@@ -18,18 +19,19 @@ services:
#System memory consumption is calculated as follows:
# MAX_ENTIRES x CACHE_BUCKETS x CACHE_MAX_MESSAGE = max memory consumption
- MAX_CONCURRENT_CONNECTIONS: "1000" #max number of concurrent connections
+ MAX_CONCURRENT_CONNECTIONS: "1000" #max number of concurrent client connections
MAX_ENTRIES: "10000" #max number of cache entries per bucket
CACHE_BUCKETS: "100" #number of cache buckets for load balancing
CACHE_MAX_MESSAGE: "20480" #20KB
VERIFY_IP: "true" #verfies the IP address of clients during negotiation (recommended)
MAX_PEER_NODES: "10" #max number of other peer nodes this node shoud connect to
DISCOVERY_INTERVAL: "360" #time (in seconds) between peer node discovery
- KNOWN_PEERS: '[]' #array of known peer nodes in the cluster
+ KNOWN_PEERS: '[]' #array of known peer nodes in the cluster
+ ENABLE_CHECKSUMS: "true" #enables checksums for messages
#SECRETS (must be JWK formatted keys)
- CACHE_PRIV_KEY: "" #REQUIRED local private key used to identify and sign messages to clients and other nodes
- CLIENT_PUB_KEY: "" #REQUIRED used to verify client messages
+ CACHE_PRIV_KEY: '' #REQUIRED local private key used to identify and sign messages to clients and other nodes
+ CLIENT_PUB_KEY: '' #REQUIRED used to verify client messages
#HC vault
#HC_VAULT_ADDR: ""
diff --git a/plugins/ObjectCacheServer/server/taskfile.yaml b/plugins/ObjectCacheServer/server/taskfile.yaml
index 38eae79..9455451 100644
--- a/plugins/ObjectCacheServer/server/taskfile.yaml
+++ b/plugins/ObjectCacheServer/server/taskfile.yaml
@@ -38,12 +38,12 @@ tasks:
VNLIB_SHARED_HEAP_FILE_PATH: lib/libvn_rpmalloc
cmds:
- - cmd: dotnet webserver/VNLib.WebServer.dll --config config/config.json --input-off --inline-scheduler {{.ARGS}}
+ - cmd: dotnet webserver/VNLib.WebServer.dll --config config/config.json --input-off --inline-scheduler {{.CLI_ARGS}}
#setup sever environment
- setup-debian:
- desc: "Performs initial setup on Debian x64 based machines"
+ setup-apt:
+ desc: "Performs initial setup on Debian/APT x64 based machines"
silent: true
cmds:
- apt update
@@ -51,8 +51,8 @@ tasks:
- task: setup
- echo "Setup complete"
- setup-fedora:
- desc: "Performs initial setup on Fedora/Redhat x64 (dnf) based machines"
+ setup-dnf:
+ desc: "Performs initial setup on Fedora using DNF x64 (dnf) based machines"
silent: true
cmds:
- dnf update
@@ -61,7 +61,7 @@ tasks:
- echo "Setup complete"
setup-alpine:
- desc: "Performs initial setup on Alpine x64 based machines"
+ desc: "Performs initial setup on Alpine using APK x64 based machines"
silent: true
cmds:
- apk update
diff --git a/plugins/ObjectCacheServer/src/Cache/CacheMemoryConfiguration.cs b/plugins/ObjectCacheServer/src/Cache/CacheMemoryConfiguration.cs
index c404cc5..0b81447 100644
--- a/plugins/ObjectCacheServer/src/Cache/CacheMemoryConfiguration.cs
+++ b/plugins/ObjectCacheServer/src/Cache/CacheMemoryConfiguration.cs
@@ -54,5 +54,8 @@ namespace VNLib.Data.Caching.ObjectCache.Server.Cache
[JsonPropertyName("memory_lib_path")]
public string? ExternLibPath { get; set; }
+
+ [JsonPropertyName("enable_checksums")]
+ public bool EnableChecksums { get; set; } = true;
}
}
diff --git a/plugins/ObjectCacheServer/src/Endpoints/ConnectEndpoint.cs b/plugins/ObjectCacheServer/src/Endpoints/ConnectEndpoint.cs
index 8368d3a..42f406a 100644
--- a/plugins/ObjectCacheServer/src/Endpoints/ConnectEndpoint.cs
+++ b/plugins/ObjectCacheServer/src/Endpoints/ConnectEndpoint.cs
@@ -244,6 +244,8 @@ namespace VNLib.Data.Caching.ObjectCache.Server.Endpoints
{
WsUserState state = wss.UserState!;
+ Log.Debug("Client established websocket connection {sid}", wss.SocketID);
+
//Notify peers of new connection
Peers.OnPeerConnected(state);
@@ -307,7 +309,7 @@ namespace VNLib.Data.Caching.ObjectCache.Server.Endpoints
//Notify monitor of disconnect
Peers.OnPeerDisconnected(state);
- Log.Debug("Server websocket exited");
+ Log.Debug("Client websocket disconnected {sid}", wss.SocketID);
}
diff --git a/plugins/ObjectCacheServer/src/ObjectCacheServer.csproj b/plugins/ObjectCacheServer/src/ObjectCacheServer.csproj
index c903511..009e905 100644
--- a/plugins/ObjectCacheServer/src/ObjectCacheServer.csproj
+++ b/plugins/ObjectCacheServer/src/ObjectCacheServer.csproj
@@ -48,8 +48,8 @@
</PackageReference>
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\..\..\..\..\core\lib\Plugins.PluginBase\src\VNLib.Plugins.PluginBase.csproj" />
- <ProjectReference Include="..\..\..\..\Extensions\lib\VNLib.Plugins.Extensions.Loading\src\VNLib.Plugins.Extensions.Loading.csproj" />
+ <ProjectReference Include="..\..\..\..\core\lib\Plugins.PluginBase\src\VNLib.Plugins.PluginBase.csproj" />
+ <ProjectReference Include="..\..\..\..\VNLib.Plugins.Extensions\lib\VNLib.Plugins.Extensions.Loading\src\VNLib.Plugins.Extensions.Loading.csproj" />
<ProjectReference Include="..\..\..\lib\VNLib.Data.Caching.Extensions\src\VNLib.Data.Caching.Extensions.csproj" />
<ProjectReference Include="..\..\..\lib\VNLib.Data.Caching.ObjectCache\src\VNLib.Data.Caching.ObjectCache.csproj" />
</ItemGroup>
diff --git a/plugins/ObjectCacheServer/src/ObjectCacheSystemState.cs b/plugins/ObjectCacheServer/src/ObjectCacheSystemState.cs
index cd5bf1b..3b3e2c0 100644
--- a/plugins/ObjectCacheServer/src/ObjectCacheSystemState.cs
+++ b/plugins/ObjectCacheServer/src/ObjectCacheSystemState.cs
@@ -187,15 +187,27 @@ namespace VNLib.Data.Caching.ObjectCache.Server
CacheListenerPubQueue queue = new(plugin, PeerEventQueue);
- //Must register background worker to listen for changes
+ //Must register the queue background worker to listen for changes
_ = plugin.ObserveWork(queue, 150);
+ BlobCacheListenerConfig conf = new()
+ {
+ Log = plugin.Log.CreateScope(CacheConstants.LogScopes.BlobCacheListener),
+ MemoryManager = new SharedHeapFBMMemoryManager(SharedCacheHeap),
+ EnableMessageChecksums = MemoryConfiguration.EnableChecksums,
+ LogTransactions = plugin.IsDebug() || plugin.HostArgs.HasArgument("--log-cache-events")
+ };
+
+ if (conf.LogTransactions)
+ {
+ plugin.Log.Information("Verbose cache event logging enabled");
+ }
+
//Endpoint only allows for a single reader
Listener = new(
plugin.LoadMemoryCacheSystem(config, manager, MemoryConfiguration),
- queue,
- plugin.Log.CreateScope(CacheConstants.LogScopes.BlobCacheListener),
- new SharedHeapFBMMemoryManager(SharedCacheHeap)
+ conf,
+ queue
);
InternalStore = new CacheStore(Listener.Cache);