서버 에러 관련

에러가 발생한 경우 아래 정보를 모두 제공해주시면 보다 정확한 답변이 가능합니다!

  • SDK 버전 :
  • 에러 코드 : 400
  • 스테이터스 코드 :
  • 에러메시지 :
    프로젝트 명 : ErrandSaga_Live

수정하려는 컬럼의 갯수가 총 290개를 넘을 경우
statusCode : 400
errorCode : ValidationException
message : Invalid UpdateExpression: Expression size has exceeded the maximum allowed size;

위의 에러가 명시하는게 해당 테이블 컬럼의 리스트 갯수가 290개 이상인 경우인가요 아니면 말 그대로 컬럼의 갯수를 명시하는 건가요?
예를 들어, equip 이라는 컬럼이 있고 해당 컬럼 row에 있는 데이터의 갯수가 290개 이상일 경우에 발생하는 건지, 아니면 그냥 테이블에서 정의하는 컬럼이 290개 이상일 경우에 발생하는 건지 문의 드립니다.

안녕하세요. 개발자님

수정하려는 컬럼이 290개 이상일 경우 문제가 발생하는 것으로,
컬럼의 데이터 안에 있는 리스트의 갯수는 영향이 없습니다.

코드로 표현하면 아래와 같은 상황일 경우 에러가 발생할 수 있습니다.

Param param = new Param();
param.Add("컬럼1", "데이터1");
param.Add("컬럼2", "데이터2");
param.Add("컬럼3", "데이터3");
... // 컬럼 4~289번째 삽입
param.Add("컬럼290", "데이터290");

Backend.GameData.Update("tableName","inDate", param);

해당 이슈와 동일한 내용의 글이 있어서 링크 첨부하였습니다.

참고 부탁드리겠습니다.
감사합니다.

sdk 버전은 5.4.3 입니다.
업데이트 하는 컬럼은 1개 이며,
해당 컬럼 안에 데이터가 1000개 이상 이었을 때 해당 에러가 발생하는 것 같습니다.
해당 컬럼의 데이터를 260개로 줄이니 에러가 발생 하지 않았습니다.
컬럼이 1개 임에도 해당 에러가 발생하여 문의 드립니다.

에러코드는 400이며,
에러 메시지는 다음과 같습니다.
“Item size to update has exceeded the maximum allowed size”

트랜잭션이 아닌 일반 수정일 경우 1회에 최대 400kb까지만 수정이 가능합니다.
확인해보니 오류가 발생한 요청에서 데이터의 양이 460,167 byte로 확인이 됩니다.

확인 감사합니다.
데이터 수정 방법을 트랜잭션으로 변경하려고 하는데,
Backend.GameData.TransactionWrite 함수를 사용할 경우 DB 수정이 안되는 것 같아서 문의 드립니다.

    Param param = new Param();
    param.Add("equipItem", JsonUtility.ToJson(data));
    List<TransactionValue> tran = new List<TransactionValue>();
    tran.Add(TransactionValue.SetUpdate("equipItem", BackEndServerManager.Instance.myIndate, param));
    Backend.InitializeAsync(true, callback =>
    {
        if (callback.IsSuccess())
        {
            Debug.Log("callback is success");
            Backend.GameData.TransactionWrite(tran, callback2 =>
            {
                if (callback2.IsSuccess())
                    Debug.Log("callback2 is success");
                else
                    Debug.Log("callback2 is Fail");
            });
        }
        else
        {
            Debug.Log("callback is Fail");
        }
    });

현재 코드는 위와 같이 작성하였습니다.
혹시 이 부분에서 문제 되는 부분이 있을까요? 현재는 fail이 발생합니다.

callback2의 에러메세지를 확인해주시면 감사하겠습니다.

코드로 보았을 때에는
뒤끝이 초기화 한 후에, 로그인 없이 보내어 에러가 발생할 가능성도 있으며,
뒤끝 초기화는 클라이언트를 시작할때 한번만 호출해도 됩니다.

    Param param = new Param();
    param.Add("equipItem", JsonUtility.ToJson(data));
    List<TransactionValue> tran = new List<TransactionValue>();
    tran.Add(TransactionValue.SetUpdate("Equip_Item", "2021-07-23T06:48:15.688Z", param));

    Backend.GameData.TransactionWrite(tran, callback2 =>
    {
        if (callback2.IsSuccess())
            Debug.Log("callback2 is success");
        else
            Debug.Log("callback2 is Fail");
    });

코드는 이렇게 수정했고, callback2 로그 보니 이런 메세지가 뜨네요.
“statusCode : 400\nerrorCode : ValidationException\nmessage : Item size to update has exceeded the maximum allowed size\n”

개발 문서 보면 트랜잭션으로는 4MB까지는 가능한 걸로 되어있는데 혹시 현재 데이터가 4MB가 넘은건가요?

기존 460,167byte 로 확인 된 데이터와 동일한 양으로 진행해도
해당 에러가 발생합니다.
일반 수정일 경우에 400kb 이라 하셨고,
개발문서에서 트랜잭션일 경우에는 4mb라고 되어 있는데, 그게 아닌건가요?
아니면 함수 사용방법이 다른건가요?

안녕하세요.
param의 크기는 몇 kb인지 알 수 있을까요?

트랜잭션인 경우, 여러 작업들 ( 수정, 삭제, 생성 ) 이 포함되어, (서로 다른 테이블의 컬럼을 대상으로) 4MB로 제공이 되고 있습니다.
1개의 테이블, 컬럼에 대해서는 트랜잭션일 경우라 하더라도 400kb를 넘으면 오류가 발생합니다.

1개의 row, column 크기를 작게 쪼개어 사용하시는 것을 추천드립니다.

컬럼도 1개이며 한 테이블에서만 사용하는거라서 트랜잭션도 한 작업밖에 없습니다.

1개의 테이블, 컬럼에 대해서는 트랜잭션일 경우라 하더라도 400kb를 넘으면 오류가 발생합니다.

컬럼이 1개이고 한테이블에서만 작업을 하시면 위에 말씀드린 것처럼 트랜잭션이라도 문제가 발생합니다.
해당 오류가 발생한 요청에 대해서 로그를 확인해 본 결과 1개의 컬럼으로 보내시는 데이터의 크기가 400kb가 넘는것으로 확인이 됩니다.

이 문서도 한번 참고해보시면 도움이 될 수 있을 것 같습니다.