Hello.
My app needs Map[K, V] as simple cache for business data, which needs to be
invalidated periodically, lets say once per day.
Right now I'm using rather naive approach which is

trait Dictionary[K, V] extends Serializable {
  @volatile private var cache: Map[K, V] = Map()
  def lookup(id: K): Option[V] = cache.get(id)
  private def fetchDictionary: Map[K, V] = ???
  private def updateDictionary() = {
    cache = fetchDictionary
  }
  val invalidate = new Runnable with Serializable {
    override def run(): Unit = updateDictionary()
  }
  Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(invalidate,
oncePerDay)
}

This seems wrong, because I guess I should do such thing `inside`
Flink, and when I stop Flink job, nobody's gonna stop scheduled
invalidation tasks.
What will be idomatic Flink way to approach this problem? How can I
schedule tasks and make Flink aware of them?

Thanks,
Michal

Reply via email to