Can anyone explain why DDLTask creates WriteEntity objects after the operation
completes?
Here is 1 concrete example (of many):
private void dropTable(Hive db, Table tbl, DropTableDesc dropTbl) throws
HiveException {
//bunch of stuff omitted
// drop the table
db.dropTable(dropTbl.getTableName(), dropTbl.getIfPurge());
if (tbl != null) {
// We have already locked the table in DDLSemanticAnalyzer, don't do it
again here
work.getOutputs().add(new WriteEntity(tbl,
WriteEntity.WriteType.DDL_NO_LOCK));
}
}
DDLSemanticAnalyzer.analyzeDropTable() has already added a WriteEntity for this
table object,
so the effect of adding another one with the same name, replaces one with the
new one since the collection that
contains them is a Set and WriteEntity.equals() only pays attention to the name
(I.e. db@table@partition).
(This collection is the same object as you get from QueryPlan.getOutputs())
What useful semantics does this have?
What could the intent have been?
Thanks,
Eugene