watcher with retry