From a2cc65b898980fc5dade68b441a722191b5e0956 Mon Sep 17 00:00:00 2001 From: hzarka Date: Tue, 22 Feb 2022 22:45:10 +0400 Subject: [PATCH] skip JSON over 4kb --- .../maxwell/schema/columndef/JsonColumnDef.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/zendesk/maxwell/schema/columndef/JsonColumnDef.java b/src/main/java/com/zendesk/maxwell/schema/columndef/JsonColumnDef.java index 54a2cd1cd..63d3b169a 100644 --- a/src/main/java/com/zendesk/maxwell/schema/columndef/JsonColumnDef.java +++ b/src/main/java/com/zendesk/maxwell/schema/columndef/JsonColumnDef.java @@ -3,12 +3,15 @@ import com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary; import com.zendesk.maxwell.producer.MaxwellOutputConfig; import com.zendesk.maxwell.row.RawJSONString; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import static com.github.shyiko.mysql.binlog.event.deserialization.ColumnType.*; public class JsonColumnDef extends ColumnDef { + private static final Logger LOGGER = LoggerFactory.getLogger(JsonColumnDef.class); public JsonColumnDef(String name, String type, short pos) { super(name, type, pos); } @@ -22,7 +25,12 @@ public Object asJSON(Object value, MaxwellOutputConfig config) throws ColumnDefC } else if ( value instanceof byte[] ){ try { byte[] bytes = (byte[]) value; - jsonString = bytes.length > 0 ? JsonBinary.parseAsString(bytes) : "null"; + if (bytes.length > 4096) { + LOGGER.warn("Skipping JSON over limit for field: " + name); + jsonString = "null"; + } else { + jsonString = bytes.length > 0 ? JsonBinary.parseAsString(bytes) : "null"; + } return new RawJSONString(jsonString); } catch (IOException e) { throw new RuntimeException(e);