If multiple attachments are requested simultaneously,
a volume can be attached to an instance more than once.
This fixes this problem by detecting that a race has
occurred in _attachment_reserve, and backing out one of
the invalid attachment records.
This means that if the attachment API is called
repeatedly and quickly for the same volume, some requests
may fail, but this is much better than incorrectly
creating multiple attachments.
Closes-Bug: #1833736
Change-Id: Ic2463338b698c5cf805c0ae06d0229f54f64b3fc
(cherry picked from commit 7f3a77b66f)
(cherry picked from commit eadff0df7e)
Conflicts:
cinder/tests/unit/attachments/test_attachments_api.py
Depends-On: https://review.opendev.org/673851/