If we happen to taste a stale mirror component first, don't reject valid,
newer components that have differing metadata from the stale component
(during STARTING). Instead, update our view of the most recent metadata and
remove any stale disks as new components are tasted.
This could have manifested as a stale mirror component with mismatched
'md_all' causing g_mirror_check_metadata to reject valid mirrors.
Like mediasize beforehand, remove all checks from g_mirror_check_metadata
that reflect mirror metadata that can change over the lifetime of the
mirror. None of them are reason to bounce a good mirror with newer
generation than existing components.
Additionally, add a knob, kern.geom.mirror.launch_mirror_before_timeout, to
force gmirrors to wait out the full timeout (kern.geom.mirror.timeout)
before transitioning from STARTING to RUNNING. This is a kludge to help
ensure all mirror components are tasted before RUNNING a gmirror.
When we are instructed to forget mirror components, bump the generation id
to avoid confusion with such stale components later.
PR: 232835, (related-but-does-not-fix: 232671)
Submitted by: Cindy Yang <cyang AT isilon.com>
Sponsored by: Dell EMC Isilon