private def watchBehavior()

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()
  }