All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
apiary-gluesync-listener: per-event observability via a newglue_listener_eventMicrometer counter, tagged withoperation(e.g.create_table),result(success,failure,ignored), andoutcome(e.g.created,updated,deleted,not_found,renamed, exception class name). Covers all 8 HMS event handlers. Aglue_listener_table_rename_durationtimer is also recorded on every table rename.kafka-metastore-receiver: Kafka consumer metrics via MicrometerKafkaClientMetrics. Bind a registry at build time withKafkaMessageReaderBuilder.withMeterRegistry(registry).
apiary-gluesync-listener: fallback Glue operations (update-after-AlreadyExistsException, create-after-EntityNotFoundException) that previously escaped their catch blocks unhandled are now consistently caught, logged, and metered by the outer exception handler.
- Bump Micrometer from
1.9.9to1.14.14.
- Revert
Change kafka listener hashing for ALTER_TABLE events (#133).ALTER_TABLEevents now hash on the current table name again. The reverted change caused ordering discrepancies in the event flow.
apiary-gluesync-listener: glue sync metrics were silently dropped in HMS deployments; counters are now exported via JMX. In framework deployments (e.g. Dronefly/Spring Boot), metrics continue to flow to the existing registry (e.g. Prometheus) unchanged.
apiary-gluesync-listener: newGLUE_SKIP_ARCHIVEenvironment variable to set the default value ofSkipArchiveon AWS GlueUpdateTablerequests (triggered by HiveALTER TABLEevents). Acceptstrueorfalse(case-insensitive). When unset, the existing built-in default (true) is used. Any other value fails at startup. The per-table Hive propertyapiary.gluesync.skipArchivestill takes precedence.
- When sending the events we hash based on db and table name. By default we are taking the newest table name. We realised this could potentially break the order of operations because it will send the event to a different kafka partition.
- Remove metric relocations for apiary-gluesync-listener because Spring doesn't find those in bean initialisation.
- Upgrade maven shade plugin to
3.6.1(was3.1.1). - Upgrade AWS Java SDK in
apiary-gluesync-listenerto1.12.792(was1.12.276) - Send view original texts in
apiary-gluesync-listener. - Add possibility to only sync views in
apiary-gluesync-listenerCLI/ - Shade micrometer libraries into glue-sync CLI.
- GlueSyncCli with fat jar for on-demand syncing.
- Add classification support for
parquet,avroandorctable formats inglue-event-listener. - Fixed Glue Classification NPE exception when SerDes library are not found in Hive table properties.
- Table and partition locations s3 prefixes are changed to
s3://because platforms like Databricks and AWS Cleanrooms, do not support other prefixes.
- Update Hive version for hive-hooks to
3.1.3(was2.3.7) - Update Hadoop version for hive-hooks to
3.1.0(was2.7.1) - Updated parent pom to deploy to sonatype central.
- Update exceptions thrown from
JsonMetaStoreEventSerDeto include the cause.
- Update metrics to use micrometer instead of Codahale in glue-event-listener.
- Upgrading kafka-clients dependency to 3.9.0 which is the latest 3.x version. Also upgraded kafka-junit4 to latest version, dependency which we use for Kafka integration testing.
- Glue sync failures are now handled silently.
- Metrics added to glue-sync-listener.
- Improved performance when cleaning column comments in glue listener.
- Since Glue support Iceberg renames, it has been excluded from the ApiaryGluePreEventListener (tested using Spark client).
- Add env variable
ENABLE_HIVE_TO_GLUE_RENAME_OPERATIONto enable Hive rename workaround in Glue. - Remove non-unicode characters when syncing into Glue.
- New functionality to allow renames in Glue Event Listener. The table will be crated with the new name, all existing partitions from the old table will be copied to the new table, and finally the old table will be dropped.
- Hive version validation when multiple listeners are used.
- Support for MSK Kafka clusters.
ApiaryGlueSyncoverrideskipArchiveto betrueby default. Backward incompatible behavior that turns off table archiving by default. Allows for per table overrides if needed. If you don't rely on Glue table version it is safe to upgrade to this version of the glue listener without making changes.
- Upgrade aws version from
1.11.520to1.12.276inapiary-receiver-sqs.
- Add
aws-java-sdk-ststo enable IRSA authentication inapiary-receiver-sqs.
- Add
aws-java-sdk-ststo enable IRSA authentication inapiary-metastore-listener.
max.request.sizeKafka property inkafka-metastore-listener.
compression.typeKafka property inkafka-metastore-listener.
apiary-gluesync-listenerwhen getting nullSortOrderin Hive & Iceberg tables.
apiary-gluesync-listenerwhen getting last access time in Hive & Iceberg tables.
- Add
aws-java-sdk-ststo enable IRSA authentication inapiary-gluesync-listener.
aws-java-sdkversion to1.12.276(was1.11.333) so we can switch from KIAM to IRSA.
hive-hooks- Logging table name when no conversion can take place.
hive-hooks- Fixing potential NullPointerException inApiaryMetastoreFilterandPathConverter.
hive-event-listeners/apiary-gluesync-listener- Added implementation for Glue database sync.
hive-event-listeners/apiary-gluesync-listeneradded fix for NullPointerException on unpartitioned tables.
log4jmanaged dependencies to overwrite transitive dependencies with log4j security issues being pulled in. These dependencies come from Hive and are provided but they break our tests.
- Same as
7.2.2. Released while configuring GitHub actions workflow.
- Same as
7.2.2. Released while configuring GitHub actions workflow.
hive-hookscomponent to convert Storage Descriptor Info 'path' parameter (instead of Storage Descriptor).
hive-hookscomponent to convert Storage Descriptor 'path' parameter.hive-hookscomponent to convert table parameter 'avro.schema.url'.
- Excluded
org.pentaho:pentaho-aggdesigner-algorithmfromkafka-metastore-events,apiary-gluesync-listener,apiary-metastore-authandapiary-ranger-metastore-plugin.
- Added
hive-hookscomponent for generic path and table location modification.
- Relocated Kafka libraries in
kafka-metastore-listenerundercom.expediagroup.apiary.extensions.shaded.org.apache.kafkato avoid clashes when moving other components to a newer version of Kafka. eg-oss-parentversion updated to 2.3.2 (was 1.2.0).jdk.toolsexcluded as a transitive dependency everywhere to allow compilation on Java 11.- A few transitive dependencies made explicit to allow compilation on Java 11.
- Renamed
hive-metastore-eventssubmodule tohive-event-listeners.
- Upgraded version of
hive.versionto2.3.7(was2.3.3). Allows apiary-extensions to be used on JDK>=9.
- Bug in
privileges-grantor-lambdawhere Apiary Events were not being deserialized properly.
client.idis now required to configure Listener.topicKafka configuration parameter is now calledtopic.name.- No longer sending MetaStore uris with Kafka message.
- Kafka Receiver is now configured using a builder.
eg-oss-parentversion updated to 1.2.0 (was 1.1.0).
sns-metastore-eventSNS message attribute:qualifiedTableName.
- Upgraded Solr version to
7.7.1(was5.5.4) to fix issue where Ranger plugin jar (version2.0.0) could not instantiate Solr client correctly.
- Moved
apiary-gluesync-listener,apiary-metastore-authandapiary-ranger-metastore-plugin(all previously top-level modules) to be submodules under a new top-level module namedhive-metastore-events. - Grouped
apiary-metastore-consumers,apiary-metastore-listenerandapiary-receivers(all previously submodules inapiary-metastore-events) in a new module namedsns-metastore-events, itself a submodule ofapiary-metastore-events. - Updated
apiary-ranger-metastore-pluginto use Ranger 2.0.0 (was 1.1.0). - Changed parent to
com.expediagroup:eg-oss-parent:1.1.0(wascom.hotels:hotels-oss-parent:4.0.1).
apiary-ranger-metastore-pluginmodule has anApiaryRangerAuthAllAccessPolicyProviderclass that can be configured inranger-hive-security.xmlto allow for an audit-only Ranger pre-event listener. Intent is to configure it on the Apiary read-only HMS instances.
privileges-grantor-lambdasupports granting access to tables that were renamed.apiary-metastore-consumerssub-module ofapiary-metastore-events.metastore-consumer-commonmodule that contains common metastore consumer classes.privileges-grantor-coremodule that grants "SELECT" privileges on a table.privileges-grantor-lambdamodule that triggersprivileges-grantor-corelogic from an AWS Lambda.DbNameandTableNameas additional message attributes for SNS.
apiary-metastore-eventsmodule and movedapiary-metastore-listenerandapiary-receiversinto this.
apiary-metastore-listenerandapiary-receiverspackage paths renamed fromcom.expediagroup.apiary.extensionstocom.expediagroup.apiary.extensions.events(if you refer to these classes by fully qualified name downstream you will need to update these references before upgrading to this version).
apiary-metastore-listenernow serializes metastore table properties as a Map instead of a String.
- Maven group ID is now
com.expediagroup.apiary(wascom.expedia.apiary). - All Java classes moved to
com.expediagroup.apiary(wascom.expedia.apiary). hotels-oss-parentversion updated to 4.0.1 (was 2.3.5).
MessageReader.read()now returnsMessageEvent, wrappingListenerEventandMessageProperty.
SqsMessageReader.read()no longer deletes messages. Instead,SqsMessageReader.delete()has been added to give more control over inflight messages.
aws-java-sdkdependency fromapiary-receiver-sqs.
apiary-receiversparent module andapiary-receiver-sqssub-module, a library to poll Apiary SQS messaging infrastructure for Hive events.
- Metastore events not published to SNS due to the Message Attribute type being undefined.
- Filtering of the SNS messages produced in ApiarySNSListener using the
eventTypeMessage Attribute.
- Filtering of the SNS messages produced in ApiarySNSListener using the
eventTypeMessage Attribute.
- Old locations for Table and Partitions to ApiarySNSListener events.
- Table parameters with a configurable regular expression to control which table parameters will be added to the ApiarySNSListener message. Default will be none.
- Apiary ReadOnly Auth Event Listener.
- Upgraded
hotels-oss-parentversion to 2.3.5 (was 2.3.3).
- Transitive dependency on
org.apache.hbasehbase-client. See #18.
- Partition Keys with Data types added to the JSON Events from ApiarySNSListener.
partitionis renamed topartitionValuesandoldPartitiontooldPartitionValuesin the JSON Events from ApiarySNSListener.
- JSON Events from ApiarySNSListener now marshals list as a JSONArray.
apiary-gluesync-listenersub-module.apiary-metastore-metricssub-module.apiary-ranger-metastore-pluginsub-module.
- Apiary SNS listener now configured using standard AWS configuration mechanisms. See #4.
- A
protocolVersionfield to the SNS messages generated byApiarySnsListener. See #2. - Support for
INSERTmetastore events. See #6.
- Initial version to test that releases to Maven Central work.