Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Un-Graceful exit when table with 'real' datatype is created #65

Closed
akshayi1 opened this issue Jun 18, 2015 · 4 comments
Closed

Un-Graceful exit when table with 'real' datatype is created #65

akshayi1 opened this issue Jun 18, 2015 · 4 comments

Comments

@akshayi1
Copy link

Similar to #64, Maxwell chokes when it encounters a field with real type.

Maxwell error with real datatype:

22:39:47,906 DEBUG SchemaChange - SQL_PARSE <- "create table max_test2 (col1 int, col2 tinyint, col3 bigint, col4 decimal, col5 float, col6 real)"
java.lang.IllegalArgumentException: unsupported column type real
at com.zendesk.maxwell.schema.columndef.ColumnDef.build(ColumnDef.java:73)
at com.zendesk.maxwell.schema.ddl.MysqlParserListener.exitColumn_definition(MysqlParserListener.java:273)
at com.zendesk.maxwell.schema.ddl.mysqlParser$Column_definitionContext.exitRule(mysqlParser.java:4362)
at org.antlr.v4.runtime.tree.ParseTreeWalker.exitRule(ParseTreeWalker.java:71)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:54)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at com.zendesk.maxwell.schema.ddl.SchemaChange.parse(SchemaChange.java:65)
at com.zendesk.maxwell.MaxwellParser.processQueryEvent(MaxwellParser.java:206)
at com.zendesk.maxwell.MaxwellParser.getEvent(MaxwellParser.java:192)
at com.zendesk.maxwell.MaxwellParser.getEvent(MaxwellParser.java:198)
at com.zendesk.maxwell.MaxwellParser.run(MaxwellParser.java:98)
at com.zendesk.maxwell.Maxwell.run(Maxwell.java:69)
at com.zendesk.maxwell.Maxwell.main(Maxwell.java:75)
2015-06-18 05:39:47,952 FATAL Unable to register shutdown hook because JVM is shutting down.

After error with real, subsequent runs fail:

bin/maxwell --user='root' --password='root' --host='127.0.0.1' --producer=stdout
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar 
22:47:29,260 INFO  Maxwell - Maxwell is booting, starting at BinlogPosition[mysql-logs.000002:11877]
22:47:29,262 DEBUG SchemaStore - looking to restore schema at target position BinlogPosition[mysql-logs.000002:11877]
22:47:29,263 INFO  SchemaStore - Restoring schema id 5 (last modified at BinlogPosition[mysql-logs.000002:9053])
22:47:29,305 INFO  TransportImpl - connecting to host: 127.0.0.1, port: 3306
22:47:29,323 INFO  TransportImpl - connected to host: 127.0.0.1, port: 3306, context: AbstractTransport.Context[threadId=28,scramble=\\9IAJ3[TpYMS<o="0kK,protocolVersion=10,serverHost=127.0.0.1,serverPort=3306,serverStatus=2,serverCollation=8,serverVersion=5.6.24-0ubuntu2-log,serverCapabilities=63487]
22:47:29,324 INFO  AuthenticatorImpl - start to login, user: root, host: 127.0.0.1, port: 3306
22:47:29,332 INFO  AuthenticatorImpl - login successfully, user: root, detail: OKPacket[packetMarker=0,affectedRows=0,insertId=0,serverStatus=2,warningCount=0,message=<null>]
22:47:29,550 DEBUG SchemaChange - SQL_PARSE <- "create table max_test2 (col1 int, col2 tinyint, col3 bigint, col4 decimal, col5 float, col6 real)"
java.lang.IllegalArgumentException: unsupported column type real
at com.zendesk.maxwell.schema.columndef.ColumnDef.build(ColumnDef.java:73)
at com.zendesk.maxwell.schema.ddl.MysqlParserListener.exitColumn_definition(MysqlParserListener.java:273)
at com.zendesk.maxwell.schema.ddl.mysqlParser$Column_definitionContext.exitRule(mysqlParser.java:4362)
at org.antlr.v4.runtime.tree.ParseTreeWalker.exitRule(ParseTreeWalker.java:71)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:54)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)
at com.zendesk.maxwell.schema.ddl.SchemaChange.parse(SchemaChange.java:65)
at com.zendesk.maxwell.MaxwellParser.processQueryEvent(MaxwellParser.java:206)
at com.zendesk.maxwell.MaxwellParser.getEvent(MaxwellParser.java:192)
at com.zendesk.maxwell.MaxwellParser.getEvent(MaxwellParser.java:198)
at com.zendesk.maxwell.MaxwellParser.run(MaxwellParser.java:98)
at com.zendesk.maxwell.Maxwell.run(Maxwell.java:69)
at com.zendesk.maxwell.Maxwell.main(Maxwell.java:75)
@akshayi1
Copy link
Author

Not sure if this was the right way to fix it, but made the following changes to ColumnDef.java and FloatColumnDef.java.

ColumnDef.java:

case "float":
case "real":
case "double":
        return new FloatColumnDef(tableName, name, type, pos);

FloatColumnDef.java

public boolean matchesMysqlType(int type) {
        if ( getType().equals("float") || getType().equals("real"))
            return type == MySQLConstants.TYPE_FLOAT;
        else
            return type == MySQLConstants.TYPE_DOUBLE;
    }

It seems to solve the problem and Maxwell accepts it without a hitch. Not sure about best practices though. Please take a look and see if this is a suitable solution.

@osheroff
Copy link
Collaborator

looks fine, can you do this as a PR (with a test) & I'll merge it?

@akshayi1
Copy link
Author

I have no idea of how to do that. Sorry :(

@osheroff osheroff mentioned this issue Jun 18, 2015
@akshayi1
Copy link
Author

#68 fixes this. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants