dble
dble copied to clipboard
Using date algorithm,default node is not useful for the values which is greater than the boundary with no 'sEndDate'
<tableRule name="auto-sharding-long4">
<rule>
<columns>current</columns>
<algorithm>sharding-date-alg</algorithm>
</rule>
</tableRule>
<function name="sharding-date-alg" class="Date">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2000-01-01</property>
<property name="sPartionDay">15</property>
<property name="defaultNode">1</property>
</function>
mysql> insert into history values('2000-01-31',1,'aa');
ERROR 1064 (HY000): Index: 2, Size: 2
mysql> insert into history values('1000-01-31',1,'aa');
Query OK, 1 row affected (0.03 sec)
2017-12-01 14:13:24.997 WARN [$_NIOREACTOR-0-RW] (com.actiontech.dble.server.ServerConnection.executeException(ServerConnection.java:367)) - ServerConnection [id=1, schema=testdb, host=127.0.0.1, user=test,txIsolation=2, autocommit=true, schema=testdb]insert into history values('2000-01-31',1,'aa') err:java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.rangeCheck(ArrayList.java:657) ~[?:1.8.0_151]
at java.util.ArrayList.get(ArrayList.java:433) ~[?:1.8.0_151]
at com.actiontech.dble.route.parser.druid.impl.DruidInsertParser.parserSingleInsert(DruidInsertParser.java:205) ~[dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.route.parser.druid.impl.DruidInsertParser.visitorParse(DruidInsertParser.java:102) ~[dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.route.parser.druid.impl.DefaultDruidParser.parser(DefaultDruidParser.java:47) ~[dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.route.util.RouterUtil.routeFromParser(RouterUtil.java:119) ~[dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.route.impl.DefaultRouteStrategy.routeNormalSqlWithAST(DefaultRouteStrategy.java:59) ~[dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.route.impl.AbstractRouteStrategy.route(AbstractRouteStrategy.java:60) ~[dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.route.RouteService.route(RouteService.java:108) ~[dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.server.ServerConnection.routeEndExecuteSQL(ServerConnection.java:306) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.server.ServerConnection.execute(ServerConnection.java:250) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.server.ServerQueryHandler.query(ServerQueryHandler.java:137) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.FrontendConnection.query(FrontendConnection.java:314) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.FrontendConnection.query(FrontendConnection.java:332) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.handler.FrontendCommandHandler.handleData(FrontendCommandHandler.java:51) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.handler.FrontendCommandHandler.handle(FrontendCommandHandler.java:40) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.FrontendConnection.rawHandle(FrontendConnection.java:469) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.FrontendConnection.handle(FrontendConnection.java:451) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.AbstractConnection.onReadData(AbstractConnection.java:297) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.NIOSocketWR.asyncRead(NIOSocketWR.java:175) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.AbstractConnection.asyncRead(AbstractConnection.java:256) [dble-2.17.11.0-dev.jar:?]
at com.actiontech.dble.net.NIOReactor$RW.run(NIOReactor.java:73) [dble-2.17.11.0-dev.jar:?]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
algorithm design problem, keep it intact