snleee commented on a change in pull request #8422:
URL: https://github.com/apache/pinot/pull/8422#discussion_r838863260
##########
File path:
pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixResourceManager.java
##########
@@ -1757,6 +1758,10 @@ public void deleteOfflineTable(String tableName) {
HelixHelper.removeResourceFromBrokerIdealState(_helixZkManager,
offlineTableName);
LOGGER.info("Deleting table {}: Removed from broker resource",
offlineTableName);
+ // Drop the table on servers
+ deleteTableOnServer(offlineTableName);
Review comment:
I see that we don't send the message if `externalview` is null from
`deleteTableOnServer()`. If we send without filtering, the helix side will
throw the exception? Or, you mention that we explicitly throw the exception?
I think that one main difference between waiting on the controller vs server
is that we will not delete table resource (which is a safety check for avoiding
race condition in table re-create) if we wait for externalview to converge on
the controller side.
If we offload the waiting to happen on the server side, we now have another
race condition when the external view gets updated with some significant delay.
In that case, we will delete the table config on the following code block but
the server side may not have done deleting and waiting for the external view to
converge. If the new table creation request comes in, we will have some issues.
```
// Remove table config
// this should always be the last step for deletion to avoid race
condition in table re-create.
ZKMetadataProvider.removeResourceConfigFromPropertyStore(_propertyStore,
offlineTableName);
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]