in common/scala/src/main/scala/org/apache/openwhisk/core/service/WatcherService.scala [126:167]
private def watchBehavior(watcher: KvClient.Watch): Receive = {
case request: WatchEndpoint =>
logging.info(this, s"watch endpoint: $request")
val watcherKey = WatcherKey(request.key, request.name)
if (request.listenEvents.contains(PutEvent))
if (request.isPrefix)
prefixPutWatchers.update(watcherKey, sender())
else
putWatchers.update(watcherKey, sender())
if (request.listenEvents.contains(DeleteEvent))
if (request.isPrefix)
prefixDeleteWatchers.update(watcherKey, sender())
else
deleteWatchers.update(watcherKey, sender())
case request: UnwatchEndpoint =>
logging.info(this, s"unwatch endpoint: $request")
val watcherKey = WatcherKey(request.watchKey, request.watchName)
if (request.isPrefix) {
prefixPutWatchers.remove(watcherKey)
prefixDeleteWatchers.remove(watcherKey)
} else {
putWatchers.remove(watcherKey)
deleteWatchers.remove(watcherKey)
}
// always send WatcherClosed back to sender if it need a feedback
if (request.needFeedback)
sender ! WatcherClosed(request.watchKey, request.isPrefix)
case RestartWatcher =>
watcher.close()
context.become(watchBehavior(startWatch()))
case GracefulShutdown =>
watcher.close()
putWatchers.clear()
deleteWatchers.clear()
prefixPutWatchers.clear()
prefixDeleteWatchers.clear()
}