[
https://issues.apache.org/jira/browse/HIVE-18942?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16396929#comment-16396929
]
kalyan kumar kalvagadda commented on HIVE-18942:
------------------------------------------------
[~akolb] That may not be the case.
AddPartitionEvent that is generated here is different from the
NotificationEvent that is inserted in the NOTIFICATION_LOG table.
{noformat}
public void onAlterTable(AlterTableEvent tableEvent) throws MetaException {
Table before = tableEvent.getOldTable();
Table after = tableEvent.getNewTable();
NotificationEvent event =
new NotificationEvent(0, now(), EventType.ALTER_TABLE.toString(),
msgFactory
.buildAlterTableMessage(before, after,
tableEvent.getIsTruncateOp()).toString());
event.setDbName(after.getDbName());
event.setTableName(after.getTableName());
process(event, tableEvent);
}
{noformat}
This is how later table JSON is constructed as sentry is interested in below
things in the alter table notification
# Old Db Name
# New Db Name
# Old Table Name
# New Table Name
# Old Location
# New Location
{noformat}
public JSONAlterTableMessage(String server, String servicePrincipal, Table
tableObjBefore, Table tableObjAfter, Long timestamp) {
this.server = server;
this.servicePrincipal = servicePrincipal;
this.db = tableObjBefore.getDbName();
this.table = tableObjBefore.getTableName();
this.timestamp = timestamp;
try {
this.tableObjBeforeJson =
JSONMessageFactory.createTableObjJson(tableObjBefore);
this.tableObjAfterJson =
JSONMessageFactory.createTableObjJson(tableObjAfter);
} catch (TException var7) {
throw new IllegalArgumentException("Could not serialize: ", var7);
}
this.checkValid();
}
{noformat}
I think the NotificationEvent inserted in NOTIFICATION_LOG table may not have
details of the partitions.
> ALTER TABLE may generate huge event (with all partitions)
> ---------------------------------------------------------
>
> Key: HIVE-18942
> URL: https://issues.apache.org/jira/browse/HIVE-18942
> Project: Hive
> Issue Type: Bug
> Components: Metastore
> Affects Versions: 3.0.0
> Reporter: Alexander Kolbasov
> Priority: Major
>
> ALTER TABLE handler in HiveAlterHandler has this code:
> {code:java}
> if (isPartitionedTable) {
> parts = msdb.getPartitions(newt.getDbName(), newt.getTableName(), -1);
> MetaStoreListenerNotifier.notifyEvent(transactionalListeners,
> EventMessage.EventType.ADD_PARTITION,
> new AddPartitionEvent(newt, parts, true, handler),
> environmentContext);
> }{code}
> The problem is that table may contain huge number of partitions and the event
> will contain all of them. Partition object itself isn't very small either, so
> we may end up with huge events which would be stored and then transmitted
> over the wire to consumers.
> [~spena] [~kkalyan] [~lina.li] [~vaidyand] FYI.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)