in sdk/src/Core/Sampling/RuleCache.cs [143:179]
public void LoadRules(List<SamplingRule> newRules)
{
IDictionary<string, SamplingRule> oldRules;
IDictionary<string, SamplingRule> tempCache = new Dictionary<string, SamplingRule>();
newRules.Sort((x, y) => x.CompareTo(y)); // Sort by priority and rule name
_cacheLock.EnterReadLock();
try
{
oldRules = new Dictionary<string, SamplingRule>(_cache);
}
finally
{
_cacheLock.ExitReadLock();
}
foreach (var newRule in newRules)
{
var key = newRule.RuleName;
tempCache[key] = newRule;
if (oldRules.TryGetValue(key, out SamplingRule oldRule))
{
newRule.Merge(oldRule);
}
}
_cacheLock.EnterWriteLock();
try
{
_cache = tempCache; // update cache
}
finally
{
_cacheLock.ExitWriteLock();
}
}