All Downloads are FREE. Search and download functionalities are using the official Maven repository.

in.ashwanthkumar.suuchi.rpc.CachedChannelPool.scala Maven / Gradle / Ivy

The newest version!
package in.ashwanthkumar.suuchi.rpc

import java.util.concurrent.ConcurrentHashMap

import in.ashwanthkumar.suuchi.cluster.MemberAddress
import io.grpc.{ManagedChannel, ManagedChannelBuilder}

import scala.language.existentials

class CachedChannelPool(map: ConcurrentHashMap[String, ManagedChannel]) {
  def get(node: MemberAddress, insecure: Boolean = false): ManagedChannel = {
    val target = node.toExternalForm
    if (map.containsKey(target)) {
      map.get(target)
    } else {
      val builder = builderFrom(target)
      if (insecure) {
        builder.usePlaintext(true)
      }
      val channel = builder.build()
      map.put(target, channel)
      channel
    }
  }

  private[rpc] def builderFrom(key: String): ManagedChannelBuilder[_] = {
    ManagedChannelBuilder.forTarget(key)
  }
}

object CachedChannelPool {
  private val _default = new CachedChannelPool(new ConcurrentHashMap[String, ManagedChannel]())

  def apply(): CachedChannelPool = _default
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy