in service/common/src/main/java/org/apache/polaris/service/admin/PolarisAdminService.java [761:806]
private void validateUpdateCatalogDiffOrThrow(
CatalogEntity currentEntity, CatalogEntity newEntity) {
// TODO: Expand the set of validations if there are other fields for other cloud providers
// that we can't successfully apply changes to.
PolarisStorageConfigurationInfo currentStorageConfig =
currentEntity.getStorageConfigurationInfo();
PolarisStorageConfigurationInfo newStorageConfig = newEntity.getStorageConfigurationInfo();
if (currentStorageConfig == null || newStorageConfig == null) {
return;
}
if (!currentStorageConfig.getClass().equals(newStorageConfig.getClass())) {
throw new BadRequestException(
"Cannot modify storage type of storage config from %s to %s",
currentStorageConfig, newStorageConfig);
}
if (currentStorageConfig instanceof AwsStorageConfigurationInfo currentAwsConfig
&& newStorageConfig instanceof AwsStorageConfigurationInfo newAwsConfig) {
if (!currentAwsConfig.getAwsAccountId().equals(newAwsConfig.getAwsAccountId())) {
throw new BadRequestException(
"Cannot modify Role ARN in storage config from %s to %s",
currentStorageConfig, newStorageConfig);
}
if ((currentAwsConfig.getExternalId() != null
&& !currentAwsConfig.getExternalId().equals(newAwsConfig.getExternalId()))
|| (newAwsConfig.getExternalId() != null
&& !newAwsConfig.getExternalId().equals(currentAwsConfig.getExternalId()))) {
throw new BadRequestException(
"Cannot modify ExternalId in storage config from %s to %s",
currentStorageConfig, newStorageConfig);
}
} else if (currentStorageConfig instanceof AzureStorageConfigurationInfo currentAzureConfig
&& newStorageConfig instanceof AzureStorageConfigurationInfo newAzureConfig) {
if (!currentAzureConfig.getTenantId().equals(newAzureConfig.getTenantId())
|| !newAzureConfig.getTenantId().equals(currentAzureConfig.getTenantId())) {
throw new BadRequestException(
"Cannot modify TenantId in storage config from %s to %s",
currentStorageConfig, newStorageConfig);
}
}
}