{"record":{"id":"fa0da81e95cbfdb9","repo":"apache/seatunnel","slug":"google-sheets-01","errorCode":"GOOGLE-SHEETS-01","errorMessage":"Fail to deserialize Google Sheets '<payload>'","messagePattern":"Fail to deserialize Google Sheets '<payload>'","errorType":"error_code","errorClass":"org.apache.seatunnel.common.exception.SeaTunnelRuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-google-sheets/src/main/java/org/apache/seatunnel/connectors/seatunnel/google/sheets/deserialize/GoogleSheetsDeserializer.java","lineNumber":60,"sourceCode":"        this.deserializationSchema = deserializationSchema;\n    }\n\n    @Override\n    public SeaTunnelRow deserializeRow(List<Object> row) {\n        Map<String, Object> map = new HashMap<>();\n        for (int i = 0; i < row.size(); i++) {\n            if (i < fields.length) {\n                map.put(fields[i], row.get(i));\n            }\n        }\n\n        try {\n            String rowStr = objectMapper.writeValueAsString(map);\n            return deserializationSchema.deserialize(rowStr.getBytes());\n        } catch (JsonProcessingException e) {\n            throw CommonError.jsonOperationError(\"GoogleSheets\", map.toString(), e);\n        } catch (IOException e) {\n            throw GoogleSheetsError.deserializeError(map.toString(), e);\n        }\n    }\n}\n","sourceCodeStart":42,"sourceCodeEnd":64,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-google-sheets/src/main/java/org/apache/seatunnel/connectors/seatunnel/google/sheets/deserialize/GoogleSheetsDeserializer.java#L42-L64","documentation":"GoogleSheetsDeserializer.deserializeRow catches java.io.IOException (other than JsonProcessingException) while converting the row map to JSON and rethrows it as the connector-specific Google Sheets deserialize error (GOOGLE-SHEETS-01) including the row payload. It signals an I/O-level failure during deserialization of a Google Sheets row.","triggerScenarios":"An IOException (not a Jackson JsonProcessingException) is thrown during writeValueAsString or while the deserialization schema processes the row bytes in GoogleSheetsDeserializer.deserializeRow.","commonSituations":"Underlying stream closed mid-read; low-level I/O failures from the Jackson data source; wrapped I/O errors from custom deserializationSchema implementations.","solutions":["Check the wrapped cause in the error for the real I/O failure (stream state, disk, network)","Retry the job/sync; transient I/O issues often resolve on rerun","Verify the deserializationSchema implementation does not close shared streams","Report a bug if it reproduces consistently with normal sheet data"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// Ensure row map is non-null and complete before deserialization\nif (rowMap == null || rowMap.isEmpty()) {\n    throw new IllegalArgumentException(\"Empty Google Sheets row\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    deserializer.deserializeRow(rowMap);\n} catch (SeaTunnelException e) {\n    if (isGoogleSheetsDeserializeError(e)) {\n        log.warn(\"Transient IO failure deserializing row, retrying\", e);\n        // retry once, then dead-letter\n    } else { throw e; }\n}","preventionTips":["Check the wrapped cause in the exception for the true I/O failure","Avoid custom deserializationSchema implementations that close shared streams","Retry failed sync jobs before investigating data","Monitor disk/stream health on worker nodes"],"tags":["io","deserialization","google-sheets"],"backgroundTag":"file-read-failed","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}