From d1bdb55302f77ded252c92d2d691f0e63302aedd Mon Sep 17 00:00:00 2001 From: Mingyu Chen Date: Wed, 2 Jan 2019 09:51:06 +0800 Subject: [PATCH] Fix bug that schema change on restored table will lose data (#489) In TabletInvertedIndex calss, The instance of TabletMeta in 'tabletMetaMap' and 'tabletMetaTable' should be same. Otherwise when we change the schema hash info of TabletMeta in 'tabletMetaMap', TabletMeta in 'tabletMetaTable' left unchanged, which will cause inconsistency of meta. --- .../java/org/apache/doris/backup/RestoreJob.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/fe/src/main/java/org/apache/doris/backup/RestoreJob.java b/fe/src/main/java/org/apache/doris/backup/RestoreJob.java index cb793ad97a..2aadf74af6 100644 --- a/fe/src/main/java/org/apache/doris/backup/RestoreJob.java +++ b/fe/src/main/java/org/apache/doris/backup/RestoreJob.java @@ -615,9 +615,9 @@ public class RestoreJob extends AbstractJob { int schemaHash = localTbl.getSchemaHashByIndexId(restoredIdx.getId()); KeysType keysType = localTbl.getKeysType(); List columns = localTbl.getSchemaByIndexId(restoredIdx.getId()); + TabletMeta tabletMeta = new TabletMeta(db.getId(), localTbl.getId(), restorePart.getId(), + restoredIdx.getId(), schemaHash); for (Tablet restoreTablet : restoredIdx.getTablets()) { - TabletMeta tabletMeta = new TabletMeta(db.getId(), localTbl.getId(), - restorePart.getId(), restoredIdx.getId(), schemaHash); Catalog.getCurrentInvertedIndex().addTablet(restoreTablet.getId(), tabletMeta); for (Replica restoreReplica : restoreTablet.getReplicas()) { Catalog.getCurrentInvertedIndex().addReplica(restoreTablet.getId(), restoreReplica); @@ -650,9 +650,9 @@ public class RestoreJob extends AbstractJob { int schemaHash = restoreTbl.getSchemaHashByIndexId(index.getId()); KeysType keysType = restoreTbl.getKeysType(); List columns = restoreTbl.getSchemaByIndexId(index.getId()); + TabletMeta tabletMeta = new TabletMeta(db.getId(), restoreTbl.getId(), restorePart.getId(), + index.getId(), schemaHash); for (Tablet tablet : index.getTablets()) { - TabletMeta tabletMeta = new TabletMeta(db.getId(), restoreTbl.getId(), - restorePart.getId(), index.getId(), schemaHash); Catalog.getCurrentInvertedIndex().addTablet(tablet.getId(), tabletMeta); for (Replica replica : tablet.getReplicas()) { Catalog.getCurrentInvertedIndex().addReplica(tablet.getId(), replica); @@ -926,9 +926,9 @@ public class RestoreJob extends AbstractJob { // modify tablet inverted index for (MaterializedIndex restoreIdx : restorePart.getMaterializedIndices()) { int schemaHash = localTbl.getSchemaHashByIndexId(restoreIdx.getId()); + TabletMeta tabletMeta = new TabletMeta(db.getId(), localTbl.getId(), restorePart.getId(), + restoreIdx.getId(), schemaHash); for (Tablet restoreTablet : restoreIdx.getTablets()) { - TabletMeta tabletMeta = new TabletMeta(db.getId(), localTbl.getId(), - restorePart.getId(), restoreIdx.getId(), schemaHash); Catalog.getCurrentInvertedIndex().addTablet(restoreTablet.getId(), tabletMeta); for (Replica restoreReplica : restoreTablet.getReplicas()) { Catalog.getCurrentInvertedIndex().addReplica(restoreTablet.getId(), restoreReplica); @@ -944,9 +944,9 @@ public class RestoreJob extends AbstractJob { for (Partition restorePart : restoreTbl.getPartitions()) { for (MaterializedIndex restoreIdx : restorePart.getMaterializedIndices()) { int schemaHash = restoreTbl.getSchemaHashByIndexId(restoreIdx.getId()); + TabletMeta tabletMeta = new TabletMeta(db.getId(), restoreTbl.getId(), restorePart.getId(), + restoreIdx.getId(), schemaHash); for (Tablet restoreTablet : restoreIdx.getTablets()) { - TabletMeta tabletMeta = new TabletMeta(db.getId(), restoreTbl.getId(), - restorePart.getId(), restoreIdx.getId(), schemaHash); Catalog.getCurrentInvertedIndex().addTablet(restoreTablet.getId(), tabletMeta); for (Replica restoreReplica : restoreTablet.getReplicas()) { Catalog.getCurrentInvertedIndex().addReplica(restoreTablet.getId(), restoreReplica);