public static ISettingsNode Extract([NotNull] ClusterConfigClientState state, ClusterConfigPath path, [CanBeNull] SettingsMergeOptions mergeOptions) { mergeOptions = mergeOptions ?? DefaultMergeOptions; return(state.Cache.Obtain( path, p => { foreach (var prefix in EnumeratePrefixes(p)) { if (state.Cache.TryGetValue(prefix, out var tree)) { return tree.ScopeTo(path.Segments.Skip(prefix.Segments.Count())); } } var remoteSettings = state.RemoteTree?.GetSettings(p); var localSettings = state.LocalTree?.ScopeTo(p.Segments); return SettingsNodeMerger.Merge(remoteSettings, localSettings, mergeOptions); })); }
public void TestSetup() { localTree = new ObjectNode(null, new ISettingsNode[] { new ObjectNode("foo", new ISettingsNode[] { new ObjectNode("baz", new ISettingsNode[] { new ValueNode("key1", "value1"), new ValueNode("key2", "value2") }), new ValueNode("key3", "value3") }), new ObjectNode("bar", new ISettingsNode[] { new ValueNode("key4", "value4") }) }); remoteTree = new ObjectNode(null, new ISettingsNode[] { new ObjectNode("foo", new ISettingsNode[] { new ObjectNode("baz", new ISettingsNode[] { new ValueNode("key5", "value5"), new ValueNode("key6", "value6") }), new ValueNode("key3", "value7") }), new ArrayNode("bar", new ISettingsNode[] { new ValueNode("0", "value8") }) }); state = null; }
private ISettingsNode Extract(ClusterConfigPath path) { if (state == null) { RemoteTree remote; if (remoteTree == null) { remote = null; } else { var writer = new BinaryBufferWriter(64); TreeSerializers.V1.Serialize(remoteTree, writer); remote = new RemoteTree(writer.Buffer.Take(writer.Length).ToArray(), TreeSerializers.V1); } state = new ClusterConfigClientState(localTree, remote, new RecyclingBoundedCache <ClusterConfigPath, ISettingsNode>(10), Int64.MaxValue); } return(TreeExtractor.Extract(state, path, null)); }