[FAQ] 다음과 같은 서버 로그는 어떨 때 발생하나요? "failed to return: kExpired: event_name=, error=" (2016-05-30, ifunengine)

asked 2016-11-30 17:04:31 +0900

inkeun.kim gravatar image

아이펀 엔진에서는 분산 서버 상황에서의 분산 락 처리를 Leasing 이라는 방식으로 처리합니다. 일종의 lock 인데 timeout 이 걸려 있는 락이라고 생각하시면 됩니다. 그래야 lock 을 빌려간 서버에서 뭐가 잘못되더라도 lock 을 빌려준 쪽에서 그것을 회수 하고 다른 서버들에게 락을 빌려줄 수 있기 때문입니다. 안 그러면 lock 이 필요한 다른 게임 서버들이 한도 끝도 없기 기다려야되는 상황이 발생할 수 있습니다.

이 에러 로그는 오브젝트를 빌려간 서버에서 발생하는데, lock을 다 쓰고 반환하려고 했는데 lock을 빌려준 쪽에서 "너 너무 오래 걸려서 내가 그냥 취소 처리했다. 네가 처리한 것은 롤백하고 다시 처리해. 락 빌려가는 것부터 다시.." 라는 응답을 받았다는 뜻입니다. 일반적으로는 자동으로 재시도 처리되기 때문에 큰 문제는 없지만, 해당 로그 메시지는 게임 서버 안에서 처리에 오래 걸리는 부분이 있다는 뜻이기 때문에 한번 살펴보시는 것이 좋습니다.

lock 을 빌려간 서버에서는 lock 을 반환할 때 위의 로그 메시지가 발생하는데, 이와 짝을 이루어서 lock 을 빌려준 서버에서는 "Denying a return request(1). Lease expired. 2016-05be the leasee was busy" 라는 로그가 찍히게 됩니다. "상대가 오래 걸려서 락 빌려준거 강제로 취소 처리해버렸는데 락을 반환한다길래 그냥 무시했어" 라는 뜻입니다.

위의 로그 메시지에서는 어떤 이벤트에서 발생했는지에 대한 정보를 담고 있는 event_name= 가 비어있는데, 이는 event handler 시작지점에서 DebugSetEventName(...) 이라는 함수로 이벤트 이름을 지정해주시면 해당 event_name= 이 제대로 표시되게 됩니다. 보다 자세한 내용은 아이펀 엔진 문서에서 이벤트 디버깅 부분에서 찾으실 수 있습니다.

언제나 게임 개발자 여러분을 응원합니다. 아이펀 엔진

edit retag flag offensive close merge delete