planetarium / NineChronicles

Unity client application for Nine Chronicles, a fully decentralized idle RPG powered by the community.
https://nine-chronicles.com/
GNU Affero General Public License v3.0
371 stars 156 forks source link

[실행] 간헐적으로 블록 진행이 되지 않는 현상 #5539

Closed QgamesGeonPyoNoh closed 2 months ago

QgamesGeonPyoNoh commented 3 months ago

APV version info

v200210

Client version info

v210.0.3

Device

Windows, Android, iOS

detailed device info

Windows 10, Android 12, iOS 17

account address info

0x3146FE0E47A1998e14cd8a33640e3648A5A90276

avatar address info

No response

purchase receipt info

No response

What happened?

[내용] 간헐적으로 블록 진행이 되지 않는 현상 -헤임달 체인에서 발생 확인했습니다.

Image

해당 현상 발생 당시 Log 파일 첨부드립니다.

Log.zip

How to reproduce the issue

[재현 스텝]

  1. 클라이언트 실행
  2. 로딩 지속 등 이상현상 발생
  3. 블록 확인 시 블록 진행이 되지 않는 현상 확인

[Should be] 블록 진행이 정지하지 않아야 합니다.

Relevant log output

No response

ipdae commented 3 months ago

확인한 로그에선 재접속 시도 처리중에 클라이언트가 종료된것처럼보이는데, 네트워크통신 오류나 노드 상황때문에 연결이 끊길수있고, 그 경우에 재접속 시도를 하는데, 혹시 재접속 처리가 아예 안됐을까요? 가능하면 영상첨부해주시면 좋을 것 같습니다.

QgamesGeonPyoNoh commented 3 months ago

해당 현상 재 발생 시 재 접속 대기 및 영상 촬영하도록 하겠습니다. 금일 테스트 중 약 4회 정도 해당 현상 발생하였으며 블록이 정지된 상태가 지속되거나 RPC 에러 팝업이 출력되었습니다.

QgamesGeonPyoNoh commented 3 months ago

해당 현상 금일 발생하여 공유드립니다.

  1. Android - 헤임달 블록 정지 후 RPC 에러 팝업이 출력되었습니다.

Image

  1. iOS - 오딘 블록 정지 이후 약 5분 간 진행되지 않아 종료했습니다.

https://github.com/user-attachments/assets/4fda7bf6-fede-41e2-a5ad-77fa6dde9a4b

확인 부탁드립니다.

[테스트 환경] Android.v200210-210.0.4 iOS.v210.0.4(99)

QgamesGeonPyoNoh commented 3 months ago

PC - 헤임달 체인에서 해당 현상 발생하여 재현 영상 및 로그 공유 드립니다. 시즌 패스 보상 수령이 되지 않아 확인 시 Block이 진행되지 않는 부분 확인하였으며, 이후 정찰 보상 획득 진행했으나 획득되지 않았습니다.

https://github.com/user-attachments/assets/78d969eb-41dc-4399-a5fb-f8d0854273f0

Log.zip

eugene-doobu commented 3 months ago

Game.InitializeMessagePackResolver

eugene-doobu commented 3 months ago

MagicOnion.Generated

eugene-doobu commented 3 months ago

RPCAgent -> _Service

eugene-doobu commented 3 months ago

ActionManager ->ProcessAction _agent.EnqueueAction(actionBase);

RPCAgent._queuedActions.Enqueue(actionBase); RPCAgent.CoTxProcessor RPCAgent.MakeTransaction { await _service.PutTransaction(tx.Serialize()); }

eugene-doobu commented 3 months ago

https://qiita.com/nikaera/items/9f9319432134b30f4afe

eugene-doobu commented 3 months ago

image

eugene-doobu commented 3 months ago

https://grpc.github.io/grpc/core/md_doc_connectivity-semantics-and-api.html

eugene-doobu commented 3 months ago

Ready -> Idle No RPC activity on channel for IDLE_TIMEOUT OR upon receiving a GOAWAY while there are no pending RPCs.

eugene-doobu commented 3 months ago

https://qiita.com/KN_on_Qiita/items/34d7d517ccb4f9283af6#wireshark--http

eugene-doobu commented 3 months ago

Best HTTP2 Logger

eugene-doobu commented 3 months ago

특정 주기마다 grpc channel 상태 체크하여 IDLE상태로 전환되면 rpc reconnect -> reflection으로 GrpcChannelx 내부 필드 검사하는거 아니면 체크 불가능

eugene-doobu commented 3 months ago

패킷 뜯어 보려했는데 저희가 C#으로만 자체구현된 데이터 패킹하는 친구들(Bencodex, BlockMarshaler)이 있어가지고.. 자체적으로 디섹터 다 구현하는거 아니면 외부 툴 상에서 패킷 뜯어보는건 불가능해보이네요.. 일단 주고받는 데이터 카피해서 아래 Bencodex Viewer에 값 넣어봤는데 아무 응답이 없었습니다.(아무런 로그도 안찍힙니다)

eugene-doobu commented 3 months ago

image

jonny-jeahyunchoi commented 2 months ago

@ipdae 노드가 불안정했던 이슈와 겹쳐보이는데 해당이슈 닫으면될까요?

ipdae commented 2 months ago

@jonny-jeahyunchoi 네 당시에 조사하다 멈춘 이슈처럼 보입니다. 나중에 재진행할때 다시 열거나 새로 만드는게 좋을것같습니다.