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

DROP VIEW IF EXISTS causes server crash (breaking mydumper) #7833

Closed
morgo opened this issue Oct 7, 2018 · 8 comments · Fixed by #7906
Closed

DROP VIEW IF EXISTS causes server crash (breaking mydumper) #7833

morgo opened this issue Oct 7, 2018 · 8 comments · Fixed by #7906
Labels
type/bug The issue is confirmed as a bug.

Comments

@morgo
Copy link
Contributor

morgo commented Oct 7, 2018

Bug Report

Please answer these questions before submitting your issue. Thanks!

  1. What did you do?

myloader tries to drop a table as both a view and a table when restoring with the -o option (overwrite). It crashes tidb, which I managed to reduce to this test case:

MySQL [test]> CREATE TABLE t1 (a int);
DRQuery OK, 0 rows affected (0.53 sec)

MySQL [test]> DROP VIEW IF EXISTS t1;
ERROR 2013 (HY000): Lost connection to MySQL server during query
  1. What did you expect to see?

Not crash.

  1. What did you see instead?

See above.

  1. What version of TiDB are you using (tidb-server -V or run select tidb_version(); on TiDB)?
MySQL [test]> select tidb_version()\G
*************************** 1. row ***************************
tidb_version(): Release Version: v2.1.0-rc.3-5-g99c4a15ce
Git Commit Hash: 99c4a15ce422603a6ad02be8ace19a43f8a26162
Git Branch: newmaster
UTC Build Time: 2018-10-07 04:24:32
GoVersion: go version go1.11 linux/amd64
Race Enabled: false
TiKV Min Version: 2.1.0-alpha.1-ff3dd160846b7d1aed9079c389fc188f7f5ea13e
Check Table Before Drop: false
1 row in set (0.00 sec)
@shenli shenli added the type/bug The issue is confirmed as a bug. label Oct 7, 2018
@shenli
Copy link
Member

shenli commented Oct 7, 2018

We will fix it soon.

@tianjiqx
Copy link
Contributor

I found that this bug seems to be just a simple null pointer problem.Just modify one line to fix it.

snipaste_2018-10-15_19-51-29

@zz-jason
Copy link
Member

@tianjiqx Good! Could you file a PR to fix this issue?

@tianjiqx
Copy link
Contributor

@zz-jason
I checked if I should use the p.Schema() function in other places instead of using p.schema directly?
Or if there are no bugs, it will not change other places.
snipaste_2018-10-15_20-17-18

@zz-jason
Copy link
Member

@tianjiqx I think we forget to set the schema for LogicalTableDual in somewhere, it's better to find out why the schema is empty. BTW, we don't need to replace all the p.schema to p.Schema().

@tianjiqx
Copy link
Contributor

@zz-jason
That's right. Well, I need to continue to look at the relevant code logic.

@tianjiqx
Copy link
Contributor

drop view statement as ast.DoStmt handled in buildDo,I think can set schema at here

--- a/planner/core/planbuilder.go
+++ b/planner/core/planbuilder.go
@@ -227,6 +227,8 @@ func (b *PlanBuilder) buildDo(v *ast.DoStmt) (Plan, error) {
                        RetType:  expr.GetType(),
                })
        }
+       //make dual schema if not
+       var _ = dual.Schema()
        p.SetChildren(dual)
        p.self = p
        p.SetSchema(schema)

BTW,The view function does not seem to be fully implemented yet?

mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from v;
ERROR 1146 (42S02): Table 'test.v' doesn't exist

mysql> drop view if exists v;
Query OK, 0 rows affected (0.00 sec)

@shenli
Copy link
Member

shenli commented Oct 15, 2018

@tianjiqx Actually, TiDB doesn't support View.

tianjiqx added a commit to tianjiqx/tidb that referenced this issue Oct 15, 2018
ngaut pushed a commit that referenced this issue Oct 16, 2018
iamzhoug37 pushed a commit to iamzhoug37/tidb that referenced this issue Oct 25, 2018
bugfix fixed pingcap#7518

expression: MySQL compatible current_user function (pingcap#7801)

plan: propagate constant over outer join (pingcap#7794)

- extract `outerCol = const` from join conditions and filter conditions,
  substitute `outerCol` in join conditions with `const`;
- extract `outerCol = innerCol` from join conditions, derive new join
  conditions based on this column equal condition and `outerCol` related
  expressions in join conditions and filter conditions;

util/timeutil: fix data race caused by forgetting set stats lease to 0 (pingcap#7901)

stats: handle ddl event for partition table (pingcap#7903)

plan: implement Operand and Pattern of cascades planner. (pingcap#7910)

planner: not convert to TableDual if empty range is derived from deferred constants (pingcap#7808)

plan: move projEliminate behind aggEliminate (pingcap#7909)

admin: fix admin check table bug of byte compare (pingcap#7887)

* admin: remove reflect deepEqual

stats: fix panic caused by empty histogram (pingcap#7912)

plan: fix panic caused by empty schema of LogicalTableDual (pingcap#7906)

* fix drop view if exist error (pingcap#7833)

executor: refine `explain analyze` (pingcap#7888)

executor: add an variable to compatible with MySQL insert for OGG (pingcap#7863)

expression: maintain `DeferredExpr` in aggressive constant folding. (pingcap#7915)

stats: fix histogram boundaries overflow error (pingcap#7883)

ddl:support the definition of `null` change to `not null` using `alter table` (pingcap#7771)

* ddl:support the definition of null change to not null using alter table

ddl: add check when create table with foreign key. (pingcap#7885)

* ddl: add check when create table with foreign key

planner: eliminate if null on non null column (pingcap#7924)

executor: fix a bug in point get (pingcap#7934)

planner, executor: refine ColumnPrune for LogicalUnionAll (pingcap#7930)

executor: fix panic when limit is too large (pingcap#7936)

ddl: add TiDB version to metrics (pingcap#7902)

stats: limit the length of sample values (pingcap#7931)

vendor: update tipb (pingcap#7893)

planner: support the Group and GroupExpr for the cascades planner (pingcap#7917)

store/tikv: log more information when other err occurs (pingcap#7948)

types: fix date time parse (pingcap#7933)

ddl: just print error message when ddl job is normal to calcel, to eliminate noisy log (pingcap#7875)

stats: update delta info for partition table (pingcap#7947)

explaintest: add explain test for partition pruning (pingcap#7505)

util: move disjoint set to util package (pingcap#7950)

util: add PreAlloc4Row and Insert for Chunk and List (pingcap#7916)

executor: add the slow log for commit (pingcap#7951)

expression: add builtin json_keys (pingcap#7776)

privilege: add USAGE in `show grants` for mysql compatibility (pingcap#7955)

ddl: fix invailid ddl job panic (pingcap#7940)

*: move ast.NewValueExpr to standalone parser_driver package (pingcap#7952)

Make the ast package get rid of the dependency of types.Datum

server: allow cors http request (pingcap#7939)

*: move `Statement` and `RecordSet` from ast to sqlexec package (pingcap#7970)

pr suggestion update

executor/aggfuncs: split unit tests to corresponding file (pingcap#7993)

store/tikv: fix typo (pingcap#7990)

executor, planner: clone proj schema for different children in buildProj4Union (pingcap#7999)

executor: let information_schema be the first database in ShowDatabases (pingcap#7938)

stats: use local feedback for partition table (pingcap#7963)

executor: add unit test for aggfuncs (pingcap#7966)

server: add log for binary execute statement (pingcap#7987)

admin: refine admin check decoder (pingcap#7862)

executor: improve wide table insert & update performance (pingcap#7935)

ddl: fix reassigned partition id in `truncate table` does not take effect (pingcap#7919)

fix reassigned partition id in truncate table does not take effect

add changelog for 2.1.0 rc4 (pingcap#8020)

*: make parser package dependency as small as possible (pingcap#7989)

parser: support `:=` in the `set` syntax (pingcap#8018)

According to MySQL document, `set` use the = assignment operator,
but the := assignment operator is also permitted

stats: garbage collect stats for partition table (pingcap#7962)

docs: add the proposal for the column pool (pingcap#7988)

expression: refine built-in func truncate to support uint arg (pingcap#8000)

stats: support show stats for partition table (pingcap#8023)

stats: update error rate for partition table (pingcap#8022)

stats: fix estimation for out of range point queries (pingcap#8015)

*: move parser to a separate repository (pingcap#8036)

executor: fix wrong result when index join on union scan. (pingcap#8031)

Do not modify Plan of dataReaderBuilder directly, because it would
impact next batch of outer rows, as well as other concurrent inner
workers. Instead, build a local child builder to store the child plan.

planner: fix a panic of a cached prepared statement with IndexScan (pingcap#8017)

*: fix the issue of executing DDL after executing SQL failure in txn (pingcap#8044)

* ddl, executor: fix the issue of executing DDL after executing SQL failure in txn

add unit test

remove debug info

add like evaluator case sensitive test

ddl, domain: make schema correct after canceling jobs (pingcap#7997)

unit test fix

code format

proposal: maintaining histograms in plan. (pingcap#7605)

support _tidb_rowid for table scan range (pingcap#8047)

var rename fix
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type/bug The issue is confirmed as a bug.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants