Consider a cache invalidation that races with an actual update:
- serve() refresh starts
- refresh runs cephadm ls
- add_daemon creates a new daemon
- add_daemon returns and invalidates the list (set last_udpate=None)
- serve() stores its ls result in the cache
In such a case the add result will get lost.
Fix this by taking a conservative strategy:
- invalidate adds host to a refresh list
- serve() removes an item from the refresh list and then does the ls,
then stores the result.
Any racing update will invalidate *after* it does it's work, which means
we will always do a final ls afterwards.