diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java index c5d526d..b19ac49 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java @@ -1877,10 +1877,9 @@ private int msck(Hive db, MsckDesc msckDesc) { apd.addPartition(Warehouse.makeSpecFromName(part.getPartitionName()), null); repairOutput.add("Repair: Added partition to metastore " + msckDesc.getTableName() + ':' + part.getPartitionName()); - if (counter == batch_size) { + if (counter % batch_size == 0 || counter == partsNotInMs.size()) { db.createPartitions(apd); apd = new AddPartitionDesc(table.getDbName(), table.getTableName(), false); - counter = 0; } } } else { diff --git ql/src/test/queries/clientpositive/msck_repair_batchsize.q ql/src/test/queries/clientpositive/msck_repair_batchsize.q index 60970e2..06e4507 100644 --- ql/src/test/queries/clientpositive/msck_repair_batchsize.q +++ ql/src/test/queries/clientpositive/msck_repair_batchsize.q @@ -1,4 +1,4 @@ -set hive.msck.repair.batch.size=1; +set hive.msck.repair.batch.size=2; DROP TABLE IF EXISTS repairtable; @@ -8,7 +8,10 @@ MSCK TABLE repairtable; dfs ${system:test.dfs.mkdir} ${system:test.warehouse.dir}/repairtable/p1=a/p2=a; dfs ${system:test.dfs.mkdir} ${system:test.warehouse.dir}/repairtable/p1=b/p2=a; +dfs ${system:test.dfs.mkdir} ${system:test.warehouse.dir}/repairtable/p1=c/p2=a; +dfs -touchz ${system:test.warehouse.dir}/repairtable/p1=a/p2=a/datafile; dfs -touchz ${system:test.warehouse.dir}/repairtable/p1=b/p2=a/datafile; +dfs -touchz ${system:test.warehouse.dir}/repairtable/p1=c/p2=a/datafile; MSCK TABLE default.repairtable; diff --git ql/src/test/results/clientpositive/msck_repair_batchsize.q.out ql/src/test/results/clientpositive/msck_repair_batchsize.q.out index 86ac031..0300f20 100644 --- ql/src/test/results/clientpositive/msck_repair_batchsize.q.out +++ ql/src/test/results/clientpositive/msck_repair_batchsize.q.out @@ -18,14 +18,15 @@ PREHOOK: query: MSCK TABLE default.repairtable PREHOOK: type: MSCK POSTHOOK: query: MSCK TABLE default.repairtable POSTHOOK: type: MSCK -Partitions not in metastore: repairtable:p1=a/p2=a repairtable:p1=b/p2=a +Partitions not in metastore: repairtable:p1=a/p2=a repairtable:p1=b/p2=a repairtable:p1=c/p2=a PREHOOK: query: MSCK REPAIR TABLE default.repairtable PREHOOK: type: MSCK POSTHOOK: query: MSCK REPAIR TABLE default.repairtable POSTHOOK: type: MSCK -Partitions not in metastore: repairtable:p1=a/p2=a repairtable:p1=b/p2=a +Partitions not in metastore: repairtable:p1=a/p2=a repairtable:p1=b/p2=a repairtable:p1=c/p2=a Repair: Added partition to metastore default.repairtable:p1=a/p2=a Repair: Added partition to metastore default.repairtable:p1=b/p2=a +Repair: Added partition to metastore default.repairtable:p1=c/p2=a PREHOOK: query: MSCK TABLE repairtable PREHOOK: type: MSCK POSTHOOK: query: MSCK TABLE repairtable