Closed yunkon-kim closed 5 days ago
@yunkon-kim 감사합니다! 내부적으로 어떻게 동작하게 되는지 간략히 설명해주실 수 있으실까요? ^^
@yunkon-kim cloud-migrator 릴리스 등 시급성을 고려하여, 우선 승인하겠습니다. ^^
/approve
@yunkon-kim defer unlock()이 있는데, 명시적으로 unlock을 다시 하는 특별한 이유가 있을까요?
@seokho-son
Case: SharedResource로 활용되는 vNet의 유무를 체크하고 -> 없으면 -> OnDemand 조건인 경우 SharedResource인 vNet을 생성하는데요.
상위 함수에서 func checkCommonResAvailableForVmDynamicReq(req *model.TbVmDynamicReq) error {}
를 병렬로 호출하고 있어 정상적으로 동작하지 않았습니다. 자세한 사항은 #1925참고하시면 될 것 같습니다.
그래서, 위 case 를 Critical Section으로 보고, 앞 뒤에 Lock, unlock을 추가하여 정상 동작하게 만들었습니다.
@sykim-etri
vNet 유무 확인 및 생성 이후에, SshKey 유무 확인 및 생성, SecurityGroup 유무 확인 및 생성 프로세스가 수행됩니다.
defer lock.Unlock()만 사용할 시 해당 영역까지 Lock을 잡고 있게 됩니다. 그래서, Critical Section인 vNet에 유무 확인 및 생성 이후에 명시적으로 Unlock 하였습니다.
별도로, defer lock.Unlock()을 설정한 이유는 Critical Section 내에서 Error 발생 등으로 인해 Deadlock에 빠지지 않도록 추가되었습니다. 관련해서 etcd 쪽 에러가 발생해도 무시하면 될 것으로 판단했지만, 필요 시에 Exception 처리 추가가 필요할 것 같습니다.
Note - Distributed-lock is applied, considering that multiple CB-Tumblebugs could be running.
Related to #1925