트렌젝션 오류 문의

문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족한 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.5.0
  • 프로젝트명 : RSD
  • 스테이터스 코드 : 404
  • 에러 코드 : NotFoundException
  • 에러 메시지 : gameInfo not found, gameInfo을(를) 찾을 수 없습니다

Transaction을 통해서 Update와 Delete를 동시에 사용하고 있습니다.
중복 데이터를 제거해주기 위해 사용중인데,
트렌젝션을 사용하고 나서 콘솔을 새로고침하면 정상적으로 반영이 되었는데,
클라에선 위와 같은 에러코드가 발생합니다.

만약 문제가 생겨서 에러가 생기면 콘솔에서도 데이터가 변하지 않아야하는데 변한점과
전혀 문제될 코드가 없는데도 에러가 나오는 점이 이상합니다.

SetUpdate( 테이블, indate , Param )
SetDelete( 테이블, indate )
이 형태로 두개를 TransactionWrite로 보내고 있습니다.
확인 부탁드립니다.

안녕하세요 개발자님.

확인해본 결과, 금일 15시경에 발생한 TransactionWrite 모두 첫 호출에 성공을 한 이후에도 Transaction 함수를 호출하여 에러가 발생한 것으로 확인됩니다.

첫 TransactionWirte의 호출이 성공했음에도 계속 동일한 함수를 호출한만한 로직이 있는지 확인해주시면 감사하겠습니다.

안녕하세요.

전날 15시에 동일 호출이 된 이유가 404 에러가 떠서 발생한것이였습니다.

트렌젝션을 보냈을 경우 에러가 나오면 다시 시도하도록 하는 로직이 있었는데
맨 첫 트렌젝션에서 404 에러가 발생하여 다시 무한적으로 보내고 있었습니다

해당 로직을 제외를 해도 100퍼 404 에러가 발생하는데, 최초 1회만 하였을때 404는 어떤 이유로 나오는건가요?

지금 좀더 테스트 해보니 SetDelete가 문제였습니다.

디버깅을 해보니 분명히 콘솔에도 보이는 indate로 delete를 요청했는데 404에러가 발생합니다.
delete부분을 지우고 테스트해보니 Update는 정상적으로 됩니다.

    List<TransactionValue> transactions = new List<TransactionValue>();
    transactions.Add( TransactionValue.SetUpdate( "UserInventory", updateResourceInfo.indate, updateResourceInfo.FormatJsonData() ) );
    transactions.Add( TransactionValue.SetDelete( "UserInventory", removeResourceInfo.indate ) ); // 이부분 제거시에 정상적으로 실행.

    SendQueue.Enqueue( Backend.GameData.TransactionWrite, transactions, _update =>
    {
        if( _update.IsSuccess() )
        {
            SyncSelectInventoryInfos(); // 성공시에 테이블 전체 Select
        }
        else
        {
            Debug.LogError( _update );
            MError.Ins.Show( _update.GetStatusCode(), _update.GetErrorCode() );
            OnSelectInventoryInfos.OnNext( false );
        }
    } );

확인 부탁드립니다.

안녕하세요 개발자님.

확인되는 로그는 존재하지 않는 inDate에 대한 수정/삭제 요청시 발생하는 'gameInfo not found, gameInfo을(를) 찾을 수 없습니다’로 확인이 됩니다.

제공해주신 코드에는 별도의 문제가 없는 것으로 파악됩니다.

테스트시에는 정상적으로 작동하여 현재 문제를 추적하기 어려운 부분에 있습니다.
번거로우시겠지만 해당 코드를 통해서도 에러가 발생하는지 확인해주실수 있으실까요?

  1. 트랜잭션에 문제가 있는지 확인
    List<TransactionValue> transactions = new List<TransactionValue>();
    transactions.Add( TransactionValue.SetDelete( "UserInventory", removeResourceInfo.indate ) ); 
    SendQueue.Enqueue( Backend.GameData.TransactionWrite, transactions, _update =>
    {
        if( _update.IsSuccess() )
        {
            SyncSelectInventoryInfos(); // 성공시에 테이블 전체 Select
        }
        else
        {
            Debug.LogError( _update );
            MError.Ins.Show( _update.GetStatusCode(), _update.GetErrorCode() );
            OnSelectInventoryInfos.OnNext( false );
        }
    } );
  1. Delete에 문제가 있는지 확인
    SendQueue.Enqueue( Backend.GameData.Delete, "UserInventory", removeResource.indate, _update =>
    {
        if( _update.IsSuccess() )
        {
            SyncSelectInventoryInfos(); // 성공시에 테이블 전체 Select
        }
        else
        {
            Debug.LogError( _update );
            MError.Ins.Show( _update.GetStatusCode(), _update.GetErrorCode() );
            OnSelectInventoryInfos.OnNext( false );
        }
    } );

두 개다 진행해보았는데 둘다 204 Success 정상으로 나옵니다.
이상하게 둘다 들어간 채로 트랜젝션을 하면 오류가 나옵니다.

우선 오늘 빌드가 들어가야해서,
SetUpdate는 지우고 Delete만 하고,
해당 관련 데이터를 로그로 남겨두고 CS 대처하도록 하겠습니다.

혹시 원인파악이 완료되면 공유 부탁드립니다.

네 알겠습니다.

트랜잭션에 올바른 inDate의 SetUpdate와 SetDelete 두개가 포함되어있을 경우, gameinfo를 찾을 수 없는 에러 발생가 발생하며 에러 발생임에도 콘솔에 있는 정보는 수정이 되는 증상은 조사 후 발견되는 부분이 있으면 공유드리도록 하겠습니다.

보다 큰 도움 드리지 못해 죄송합니다.

좋아요 1