diff options
Diffstat (limited to 'plugins/ObjectCacheServer')
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); |