mysql-binlog-connector-java icon indicating copy to clipboard operation
mysql-binlog-connector-java copied to clipboard

Can't process binlog for JSON partial update #1290

Open Shukla-Ankur opened this issue 6 years ago • 0 comments

Steps to re-produce:

CREATE TABLE

CREATE TABLE `user_series` (
  `id` varchar(255) NOT NULL,
  `document` json DEFAULT NULL,
  `auth_meta` json DEFAULT NULL,
  `created_time` bigint(20) DEFAULT NULL,
  `updated_time` bigint(20) DEFAULT NULL,
  `doc_version` bigint(20) DEFAULT NULL,
  `tenant_id` varchar(255) NOT NULL,
  `bgCgrAcSKp` varchar(32) GENERATED ALWAYS AS (json_unquote(json_extract(`document`,_utf8mb3'$.user_id'))) VIRTUAL NOT NULL,
  `WwlQjQvibH` varchar(32) GENERATED ALWAYS AS (json_unquote(json_extract(`document`,_utf8mb3'$.series_id'))) VIRTUAL NOT NULL,
  `LtiXgnqHAz` varchar(32) GENERATED ALWAYS AS (json_unquote(json_extract(`document`,_utf8mb3'$.company_id'))) VIRTUAL NOT NULL,
  PRIMARY KEY (`id`,`tenant_id`),
  KEY `tenant` (`tenant_id`),
  KEY `createdTime` (`created_time`),
  KEY `updatedTime` (`updated_time`),
  KEY `WCWxZSSwtL` (`bgCgrAcSKp`),
  KEY `kTmJVryonn` (`WwlQjQvibH`),
  KEY `fxpvzPiZiZ` (`LtiXgnqHAz`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT

insert into user_series (id, document, auth_meta, created_time, updated_time, doc_version, tenant_id)values ('377a4635dec723531001727801708045584',    '{"pinned": false, "user_id": "377a4635dec72353", "series_id": "1001727801708045584", "company_id": "benaam", "series_access": true, "series_access_time": 1527666772}',    '{"auth_id": "migration", "global_context_id": "migration"}',    1426603179,    1560414856,    10,    'benaam');

UPDATE

UPDATE user_series SET document = JSON_SET(document,'$.relevance', 'REQUIRED'),auth_meta = '{"global_context_id":"1142824752011481088","auth_id":"377a4635dec72353"}',updated_time = 1561305629 ,doc_version = 1  WHERE id = '377a4635dec723531001727801708045584' AND tenant_id = 'benaam';

UPDATE

UPDATE user_series SET document = JSON_SET(document,'$.relevance', 'NONE'),auth_meta = '{"global_context_id":"1142824752011481088","auth_id":"377a4635dec72353"}',updated_time = 1561305629 ,doc_version = 1  WHERE id = '377a4635dec723531001727801708045584' AND tenant_id = 'benaam';

Essentially, when I change the JSON_SET, it throws an exception

07:50:19,944 INFO  TaskManager - Stopping 4 tasks
07:50:19,944 ERROR TaskManager - cause:
java.lang.RuntimeException: java.io.EOFException
	at com.zendesk.maxwell.schema.columndef.JsonColumnDef.asJSON(JsonColumnDef.java:27) ~[classes/:?]
	at com.zendesk.maxwell.replication.BinlogConnectorEvent.writeData(BinlogConnectorEvent.java:111) ~[classes/:?]
	at com.zendesk.maxwell.replication.BinlogConnectorEvent.buildRowMap(BinlogConnectorEvent.java:161) ~[classes/:?]
	at com.zendesk.maxwell.replication.BinlogConnectorEvent.jsonMaps(BinlogConnectorEvent.java:190) ~[classes/:?]
	at com.zendesk.maxwell.replication.BinlogConnectorReplicator.getTransactionRows(BinlogConnectorReplicator.java:477) ~[classes/:?]
	at com.zendesk.maxwell.replication.BinlogConnectorReplicator.getRow(BinlogConnectorReplicator.java:592) ~[classes/:?]
	at com.zendesk.maxwell.replication.BinlogConnectorReplicator.work(BinlogConnectorReplicator.java:175) ~[classes/:?]
	at com.zendesk.maxwell.util.RunLoopProcess.runLoop(RunLoopProcess.java:34) ~[classes/:?]
	at com.zendesk.maxwell.Maxwell.startInner(Maxwell.java:222) ~[classes/:?]
	at com.zendesk.maxwell.Maxwell.start(Maxwell.java:156) ~[classes/:?]
	at com.zendesk.maxwell.Maxwell.main(Maxwell.java:243) ~[classes/:?]
Caused by: java.io.EOFException
	at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.read(ByteArrayInputStream.java:190) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at java.io.InputStream.read(InputStream.java:170) ~[?:1.8.0_212]
	at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.fill(ByteArrayInputStream.java:96) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.read(ByteArrayInputStream.java:89) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parseString(JsonBinary.java:638) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parse(JsonBinary.java:247) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parseObject(JsonBinary.java:400) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parse(JsonBinary.java:211) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parse(JsonBinary.java:205) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parse(JsonBinary.java:181) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parseAsString(JsonBinary.java:168) ~[mysql-binlog-connector-java-0.20.0.jar:0.20.0]
	at com.zendesk.maxwell.schema.columndef.JsonColumnDef.asJSON(JsonColumnDef.java:25) ~[classes/:?]
	... 10 more
07:50:19,947 INFO  TaskManager - Stopping: com.zendesk.maxwell.schema.PositionStoreThread@18ab3f9a
07:50:19,947 INFO  StoppableTaskState - com.zendesk.maxwell.schema.PositionStoreThread requestStop() called (in state: RUNNING)
07:50:19,947 INFO  TaskManager - Stopping: com.zendesk.maxwell.producer.MaxwellKafkaProducerWorker@3f74dd89
07:50:19,947 INFO  StoppableTaskState - MaxwellKafkaProducerWorker requestStop() called (in state: RUNNING)
07:50:19,949 INFO  KafkaProducer - [Producer clientId=producer-1] Closing the Kafka producer with timeoutMillis = 9223372036854775807 ms.
07:50:19,955 INFO  TaskManager - Stopping: com.zendesk.maxwell.bootstrap.BootstrapController@1bbfb4bc
07:50:19,955 INFO  StoppableTaskState - com.zendesk.maxwell.bootstrap.BootstrapController requestStop() called (in state: RUNNING)
07:50:19,955 INFO  TaskManager - Stopping: com.zendesk.maxwell.replication.BinlogConnectorReplicator@1285fae5
07:50:19,955 INFO  StoppableTaskState - com.zendesk.maxwell.replication.BinlogConnectorReplicator requestStop() called (in state: STOPPED)
java.lang.RuntimeException: java.io.EOFException
	at com.zendesk.maxwell.schema.columndef.JsonColumnDef.asJSON(JsonColumnDef.java:27)
	at com.zendesk.maxwell.replication.BinlogConnectorEvent.writeData(BinlogConnectorEvent.java:111)
	at com.zendesk.maxwell.replication.BinlogConnectorEvent.buildRowMap(BinlogConnectorEvent.java:161)
	at com.zendesk.maxwell.replication.BinlogConnectorEvent.jsonMaps(BinlogConnectorEvent.java:190)
	at com.zendesk.maxwell.replication.BinlogConnectorReplicator.getTransactionRows(BinlogConnectorReplicator.java:477)
	at com.zendesk.maxwell.replication.BinlogConnectorReplicator.getRow(BinlogConnectorReplicator.java:592)
	at com.zendesk.maxwell.replication.BinlogConnectorReplicator.work(BinlogConnectorReplicator.java:175)
	at com.zendesk.maxwell.util.RunLoopProcess.runLoop(RunLoopProcess.java:34)
	at com.zendesk.maxwell.Maxwell.startInner(Maxwell.java:222)
	at com.zendesk.maxwell.Maxwell.start(Maxwell.java:156)
	at com.zendesk.maxwell.Maxwell.main(Maxwell.java:243)
Caused by: java.io.EOFException
	at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.read(ByteArrayInputStream.java:190)
	at java.io.InputStream.read(InputStream.java:170)
	at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.fill(ByteArrayInputStream.java:96)
	at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.read(ByteArrayInputStream.java:89)
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parseString(JsonBinary.java:638)
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parse(JsonBinary.java:247)
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parseObject(JsonBinary.java:400)
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parse(JsonBinary.java:211)
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parse(JsonBinary.java:205)
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parse(JsonBinary.java:181)
	at com.github.shyiko.mysql.binlog.event.deserialization.json.JsonBinary.parseAsString(JsonBinary.java:168)
	at com.zendesk.maxwell.schema.columndef.JsonColumnDef.asJSON(JsonColumnDef.java:25)
	... 10 more
07:50:21,362 INFO  TaskManager - Stopped all tasks

Shukla-Ankur avatar Jul 10 '19 09:07 Shukla-Ankur