aboutsummaryrefslogtreecommitdiff
path: root/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClientConfig.cs
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-07-13 13:20:25 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2023-07-13 13:20:25 -0400
commit2f674e79d42e7d36225fa9ac7ecefbc5bc62d325 (patch)
treec58999489f5391bc044e7a9bb3e557afe2860415 /lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClientConfig.cs
parent1a8ab1457244d15b19ddcc94958f645f5ec2abc7 (diff)
Checkpoint, kind of working clustering
Diffstat (limited to 'lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClientConfig.cs')
-rw-r--r--lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClientConfig.cs59
1 files changed, 27 insertions, 32 deletions
diff --git a/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClientConfig.cs b/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClientConfig.cs
index 64d3e07..73fb70f 100644
--- a/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClientConfig.cs
+++ b/lib/VNLib.Plugins.Extensions.VNCache/src/VnCacheClientConfig.cs
@@ -23,9 +23,9 @@
*/
using System;
+using System.Linq;
using System.Text.Json.Serialization;
-using VNLib.Data.Caching.Extensions;
using VNLib.Plugins.Extensions.Loading;
namespace VNLib.Plugins.Extensions.VNCache
@@ -40,7 +40,7 @@ namespace VNLib.Plugins.Extensions.VNCache
/// cache server. This value will be negotiated with the server
/// during a connection upgrade
/// </summary>
- [JsonPropertyName("max_message_size")]
+ [JsonPropertyName("max_object_size")]
public int? MaxMessageSize { get; set; }
/// <summary>
@@ -82,7 +82,18 @@ namespace VNLib.Plugins.Extensions.VNCache
/// The initial peers to connect to
/// </summary>
[JsonPropertyName("initial_nodes")]
- public InitialNode[]? InitialNodes { get; set; }
+ public string[]? InitialNodes { get; set; }
+
+ /// <summary>
+ /// Gets the initial nodes as a collection of URIs
+ /// </summary>
+ /// <returns>The nodes as a collection of URIs</returns>
+ /// <exception cref="InvalidOperationException"></exception>
+ public Uri[] GetInitialNodeUris()
+ {
+ _ = InitialNodes ?? throw new InvalidOperationException("Initial nodes have not been set");
+ return InitialNodes.Select(x => new Uri(x)).ToArray();
+ }
void IOnConfigValidation.Validate()
{
@@ -108,37 +119,21 @@ namespace VNLib.Plugins.Extensions.VNCache
throw new ArgumentException("You must specify at least one initial peer", "initial_peers");
}
- foreach (InitialNode peer in InitialNodes)
- {
- _ = peer.ConnectEndpoint ?? throw new ArgumentException("You must specify a connect endpoint for each initial node", "initial_nodes");
- _ = peer.NodeId ?? throw new ArgumentException("You must specify a node id for each initial node", "initial_nodes");
- }
- }
-
- public sealed record class InitialNode : ICacheNodeAdvertisment
- {
- [JsonIgnore]
- public Uri ConnectEndpoint { get; private set; }
-
- [JsonIgnore]
- public Uri? DiscoveryEndpoint { get; private set; }
-
- [JsonPropertyName("node_id")]
- public string? NodeId { get; set; }
-
- [JsonPropertyName("connect_endpoint")]
- public string? ConnectEndpointString
- {
- get => ConnectEndpoint.ToString();
- set => ConnectEndpoint = new Uri(value!);
- }
-
- [JsonPropertyName("discovery_endpoint")]
- public string? DiscoveryEndpointString
+ //Validate initial nodes
+ foreach (Uri peer in GetInitialNodeUris())
{
- get => DiscoveryEndpoint?.ToString();
- set => DiscoveryEndpoint = value == null ? null : new Uri(value);
+ if (!peer.IsAbsoluteUri)
+ {
+ throw new ArgumentException("You must specify an absolute URI for each initial node", "initial_nodes");
+ }
+
+ //Verify http connection
+ if(peer.Scheme != Uri.UriSchemeHttp || peer.Scheme != Uri.UriSchemeHttps)
+ {
+ throw new ArgumentException("You must specify an HTTP or HTTPS URI for each initial node", "initial_nodes");
+ }
}
}
+
}
} \ No newline at end of file