View Issue Details

IDProjectCategoryView StatusLast Update
0003196SymmetricDSBugpublic2017-10-27 08:24
ReporterarsreedhAssigned Tokstojanovska 
PriorityhighSeveritycrashReproducibilityalways
Status resolvedResolutionfixed 
Product Version3.8.27 
Target Version3.9.1Fixed in Version3.9.0 
Summary0003196: Behaviour changed for `sym_trigger` `use_stream_lobs` and `use_capture_lobs` fields
DescriptionCompared to 3.7.x version in 3.8.x the behaviour for the use_stream_lobs and use_capture_lobs have changed.

When we attempted an upgrade from 3.7.x to 3.8.x the tables with binary column as primary key throw an error extract failed. Is there a way to retain the 3.7.x behaviour in this scenario for 3.8.x ?

java.lang.RuntimeException: java.lang.NullPointerException
        at org.jumpmind.symmetric.service.impl.DataExtractorService.extract(DataExtractorService.java:664)
        at org.jumpmind.symmetric.service.impl.DataExtractorService.extract(DataExtractorService.java:537)
        at org.jumpmind.symmetric.web.PullUriHandler.pull(PullUriHandler.java:130)
        at org.jumpmind.symmetric.web.PullUriHandler.handleWithCompression(PullUriHandler.java:100)
        at org.jumpmind.symmetric.web.AbstractCompressionUriHandler.handle(AbstractCompressionUriHandler.java:84)
        at org.jumpmind.symmetric.web.SymmetricServlet.service(SymmetricServlet.java:114)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
        at org.jumpmind.symmetric.web.HttpMethodFilter.doFilter(HttpMethodFilter.java:62)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:499)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
        at org.jumpmind.symmetric.io.data.writer.StagingDataWriter.print(StagingDataWriter.java:116)
        at org.jumpmind.symmetric.io.data.writer.AbstractProtocolDataWriter.println(AbstractProtocolDataWriter.java:253)
        at org.jumpmind.symmetric.io.data.writer.AbstractProtocolDataWriter.write(AbstractProtocolDataWriter.java:182)
        at org.jumpmind.symmetric.io.data.writer.NestedDataWriter.write(NestedDataWriter.java:64)
        at org.jumpmind.symmetric.model.ProcessInfoDataWriter.write(ProcessInfoDataWriter.java:65)
        at org.jumpmind.symmetric.io.data.writer.NestedDataWriter.write(NestedDataWriter.java:64)
        at org.jumpmind.symmetric.io.data.writer.TransformWriter.write(TransformWriter.java:207)
        at org.jumpmind.symmetric.io.data.DataProcessor.forEachDataInTable(DataProcessor.java:200)
        at org.jumpmind.symmetric.io.data.DataProcessor.forEachTableInBatch(DataProcessor.java:170)
        at org.jumpmind.symmetric.io.data.DataProcessor.process(DataProcessor.java:116)
        at org.jumpmind.symmetric.service.impl.DataExtractorService.extractOutgoingBatch(DataExtractorService.java:897)
        at org.jumpmind.symmetric.service.impl.DataExtractorService.extractBatch(DataExtractorService.java:774)
        at org.jumpmind.symmetric.service.impl.DataExtractorService$1.call(DataExtractorService.java:604)
        at org.jumpmind.symmetric.service.impl.DataExtractorService$1.call(DataExtractorService.java:602)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        ... 1 more
[corp-000] - DataExtractorService - Failed to extract batch 001-66


Steps To ReproduceExtending the corp-store example add a new table :

CREATE TABLE `corp`.`bin_test` (
  `bin_uuid` BINARY(16) NOT NULL,
  `description` VARCHAR(45) NULL,
  PRIMARY KEY (`bin_uuid`));



CREATE TABLE `store`.`bin_test` (
  `bin_uuid` BINARY(16) NOT NULL,
  `description` VARCHAR(45) NULL,
  PRIMARY KEY (`bin_uuid`));



INSERT INTO `corp`.`sym_trigger`
    (`trigger_id`, `source_table_name`, `channel_id`,
    last_update_time, create_time) VALUES ('bin_test', 'bin_test',
    'sale_transaction', current_timestamp, current_timestamp);


INSERT INTO `corp`.`sym_trigger_router`
    (`trigger_id`, `router_id`, `initial_load_order`, `create_time`,
    `last_update_time`) VALUES ('bin_test', 'corp_2_store', '100',
    current_timestamp, current_timestamp);



UPDATE `corp`.`sym_channel` SET `contains_big_lob`='1' WHERE `channel_id`='sale_transaction';
UPDATE `corp`.`sym_trigger` SET `use_stream_lobs`='1', `use_capture_lobs`='1' WHERE `trigger_id`='bin_test';



Now when you do an insert into this table:

insert into corp.bin_test(bin_uuid,description) values('9fad5e9eefdfb449', 'abc!');

It throws the above stated exception. Where as in 3.7.x this never threw an error.




TagsNo tags attached.

Activities

arsreedh

2017-07-11 16:32

reporter   ~0001060

The database used is mysql 5.7 for both the nodes.

chenson

2017-07-12 13:02

administrator   ~0001061

This is because a change was put into 3.8 to treat binary fields like lob fields.

arsreedh

2017-07-13 01:44

reporter   ~0001063

Is there a workaround in 3.8 to have the 3.7 behaviour?

chenson

2017-07-18 12:40

administrator   ~0001066

There isn't. We will fix this in 3.8.29

Issue History

Date Modified Username Field Change
2017-07-11 16:28 arsreedh New Issue
2017-07-11 16:32 arsreedh Note Added: 0001060
2017-07-12 13:02 chenson Note Added: 0001061
2017-07-12 13:49 chenson Target Version => 3.8.28
2017-07-12 13:49 chenson Steps to Reproduce Updated View Revisions
2017-07-13 01:44 arsreedh Note Added: 0001063
2017-07-18 09:53 chenson Target Version 3.8.28 => 3.8.29
2017-07-18 09:53 chenson Assigned To => maxwellpettit
2017-07-18 09:53 chenson Status new => assigned
2017-07-18 12:40 chenson Note Added: 0001066
2017-08-01 09:47 chenson Assigned To maxwellpettit => gwilmer
2017-08-14 08:18 chenson Target Version 3.8.29 => 3.8.30
2017-09-22 10:55 chenson Target Version 3.8.30 => 3.9.0
2017-09-26 15:42 chenson Assigned To gwilmer => chenson
2017-10-05 11:01 chenson Target Version 3.9.0 => 3.9.1
2017-10-27 08:24 kstojanovska Assigned To chenson => kstojanovska
2017-10-27 08:24 kstojanovska Status assigned => resolved
2017-10-27 08:24 kstojanovska Resolution open => fixed
2017-10-27 08:24 kstojanovska Fixed in Version => 3.9.0