in finagle-toggle/src/main/scala/com/twitter/finagle/toggle/StandardToggleMap.scala [82:143]
def apply(
libraryName: String,
statsReceiver: StatsReceiver,
duplicateHandling: JsonToggleMap.DuplicateHandling = JsonToggleMap.FailParsingOnDuplicateId
): ToggleMap.Mutable =
apply(
libraryName,
statsReceiver,
ToggleMap.newMutable(s"Mutable($libraryName)"),
ServerInfo(),
libs,
duplicateHandling = duplicateHandling
)
/** exposed for testing */
private[toggle] def apply(
libraryName: String,
statsReceiver: StatsReceiver,
mutable: ToggleMap.Mutable,
serverInfo: ServerInfo,
registry: ConcurrentMap[String, ToggleMap.Mutable],
duplicateHandling: JsonToggleMap.DuplicateHandling
): ToggleMap.Mutable = {
Toggle.validateId(libraryName)
val svcsJson =
loadJsonConfig(
s"$libraryName-service",
serverInfo,
JsonToggleMap.DescriptionIgnored,
JsonToggleMap.FailParsingOnDuplicateId)
val libsJson = loadJsonConfig(
libraryName,
serverInfo,
JsonToggleMap.DescriptionRequired,
JsonToggleMap.FailParsingOnDuplicateId)
val stacked = ToggleMap.of(
mutable,
ToggleMap.flags,
svcsJson,
ServiceLoadedToggleMap(libraryName),
libsJson
)
val observed = ToggleMap.observed(
stacked,
statsReceiver
.scope("toggles")
.hierarchicalScope(libraryName)
.label("library", libraryName)
)
val toggleMap = new ToggleMap.Mutable with ToggleMap.Proxy {
def underlying: ToggleMap = observed
def put(id: String, fraction: Double): Unit = mutable.put(id, fraction)
def remove(id: String): Unit = mutable.remove(id)
}
val prev = registry.putIfAbsent(libraryName, toggleMap)
if (prev == null)
toggleMap
else
prev
}