Game > GameAnvil > 서버 개발 가이드 > 무정지 패치 방법

이 문서는 무정지 패치를 진행하는 방법을 설명합니다. 그와 더불어 무정지 패치 과정에서 발생할 수 있는 이슈에 관해 정리합니다.

Note

  • NonStopPatch 사용 시 반드시 알파에서 먼저 진행하여 문제가 발생할 수 있는 지 확인하세요.
  • 이 가이드 문서를 반드시 읽어보고 모든 내용을 이해한 후에 사용하세요.


1. NonStopPatch를 사용하면 안되는 상황

  • 패치할 서버 파일와 이미 올라간 서버 파일의 GameAnvil 버전이 다를 경우
  • Packet이 수정되거나 추가되었을 경우
  • Transfer간에 전달되는 Data Class가 변경되었을 경우


2. NonStopPatch를 사용하기 위해 해야 되는 작업

2-1. Match 기능을 사용중이라면

  • 구 버전 서버와 신 버전 서버의 버전정보를 체크하는 로직을 넣어야 한다.

2-2. TransferData

  • 구버전 서버와 신버전 서버의 transferData가 다를 경우, 신버전의 GameUser/GameRoom의 onTranferIn 함수에서 삭제되었거나, 추가되는 transferData에 대한 처리를 해야 한다.
  • proto 객체로 Data를 전달할 경우 kryo에 해당 class를 등록해야 한다. (확인중)


3. NonStopPatch 사용 시 알아야 하는 것들

  • NonStopPatch Report 정보 제공
  • NonStopPatch 강제 종료 기능
    • NonStopPatch가 진행중일 경우 다른 Node의 상태를 변경할 수 없다.
    • NonStopPatch 진행중 문제가 발생하여, 종료가 되지 않을 수 있다.
    • NonStopPatch Report와 로그를 통해 문제점을 파악하고, 강제로 NonStopPatch를 종료할 것인지 결정한다.
    • NonStopPatch-1.png
      • NonStopPatch 강제 종료 버튼을 누르면 NonStopPatch가 강제로 종료된다.
    • Pause된 Node를 처리한다.

4. NonStopPatch 시작

  • NonStopPatch 진행은 Admin으로 한다.

4-1. NonStopPatch를 진행할 Node 선택

  • 출발지 선택
  • NonStopPatch-2.png
  • 도착지 선택
  • NonStopPatch-3.png

4-2. NonStopPatch Report Page를 열어두기

4-3. NonStopPatch 버튼 클릭

  • NonStopPatch 버튼 클릭해서 NonStopPatch 진행
  • NonStopPatch-4.png
  • NonStopPatch-5.png
  • 출발지 Node는 NonStopPatch Src 상태로 변함
    • NonStopPatch가 종료되면 Pause상태가 됨
  • 도착지 Node는 NonStopPatch Dst 상태로 변함
    • NonStopPatch가 종료되면 Ready 상태가 됨

4-4. NonStopPatch 결과 확인

  • NonStopPatch Report 확인
  • NonStopPatch-6.png
  • 현재 GameNode 상태 확인
  • NonStopPatch-7.png

4-5. 서버 종료

  • Pause 중인 서버 종료
  • NonStopPatch-8.png
  • 종료된 서버 확인
  • NonStopPatch-9.png

4-6. 서버 패치

  • 배포된 File을 Clear하고 패치할 서버 파일을 배포
    • 직접 서버 파일 이름을 지정할 경우 Clear하지 않아도 됨.
  • NonStopPatch-10.png

4-7. 서버 다시 시작

  • 서버 다시 시작
  • NonStopPatch-11.png

4-8. 반대쪽 Node도 NonStopPatch 진행

  • 위와 동일하게 반대편 Node도 진행

4-9. 서버 종료

  • 위와 동일하게 반대편 Node도 진행

4-10. 서버 패치

  • 위와 동일하게 반대편 Node도 진행

4-11. 서버 다시 시작

  • 위와 동일하게 반대편 Node도 진행

4-12. NonStopPatch가 잘되었는 지 확인

  • 서버 패치 이후 이슈가 없는 지 확인

5. NonStopPatch 시 함수 호출 순서

5-1. BaseGameRoom

  • 생성 시 호출되는 Callback 함수
    • 경우에 맞추어서 Callback 함수 내용을 채워야 한다.
    • GameRoom 생성
      • onInit -> onCreate
    • NonStopPatch 시 GameRoom 생성
      • onInit -> onTransferIn
  • NonStopPatch 종료 후 호출되는 Callback 함수
    • NonStopPatch 종료 후 GameNode의 State가 변경되면서 GameRoom에서 Callback 함수가 호출된다.
    • 출발지 Node
      • onPause
      • 출발지 Node는 NonStopPatch가 종료되고 pause 상태가 되기 때문에,
    • 도착지 Node
      • X

5-2. BaseUserRoom

  • 생성 시 호출되는 Callback 함수
    • 경우에 맞추어서 Callback 함수 내용을 채워야 한다.
    • GameUser 생성
      • onLogin
    • NonStopPatch 시 GameUser 생성
      • onTransferIn
  • NonStopPatch 종료 후 호출되는 Callback 함수
    • NonStopPatch 종료 후 GameNode의 State가 변경되면서 GameUser에서 Callback 함수가 호출된다.
    • 출발지 Node
      • onPause
      • 출발지 Node는 NonStopPatch가 종료되고 pause 상태가 되기 때문에,
    • 도착지 Node
      • X

5-3. BaseGameNode

  • NonStopPatch 시 호출되는 Callback 함수
  • 출발지 Node일 경우
// NonStopPatch가 시작될 경우 호출
@Override
public boolean onNonStopPatchSrcStart() throws SuspendExecution {
    return true;
}
// NonStopPatch가 종료될 경우 호출
@Override
public boolean onNonStopPatchSrcEnd() throws SuspendExecution {
    return true;
}
// NonStopPatch 종료 체크 함수
@Override
public boolean canNonStopPatchSrcEnd() throws SuspendExecution {
    return true;
}
  • 도착지 Node일 경우
// NonStopPatch가 시작될 경우 호출
@Override
public boolean onNonStopPatchDstStart() throws SuspendExecution {
    return true;
}
// NonStopPatch가 종료될 경우 호출
@Override
public boolean onNonStopPatchDstEnd() throws SuspendExecution {
    return true;
}
// NonStopPatch 종료 체크 함수
@Override
public boolean canNonStopPatchDstEnd() throws SuspendExecution {
    return true;
}
TOP