Releases: atlanhq/atlan-java
v4.2.0
🎉 New features
- Adds latest typedefs by @cmgrote in #1191
- Adds creator for Procedure by @ErnestoLoma in #1194
- Optimizes cache refreshing to minimize unnecessary cache thrashing by @cmgrote in #1198
🐞 Bug fixes
- Fixes table partition creators by @cmgrote in #1191
- Adds more meaningful error message on invalid enum values by @cmgrote in #1187
- Fixes attempts to send empty payloads when no tag is found by @cmgrote in #1188
- Fixes deadlock on data domain caching by @cmgrote in #1195
- Fixes creation details for multi-valued custom metadata attributes by @cmgrote in #1197
Full Changelog: v4.1.1...v4.2.0
v4.1.1
🎉 New features
- Adds dynamic wait based on rate-limit response header by @cmgrote in #1166
- Adds
SnowflakeDynamicTable
as possible parentType for columns by @ErnestoLoma in #1132 - Adds
get
operation to retrieve selective relationships and attributes by @cmgrote in #1170 - Adds support for
Anaplan
assets by @prateekrai-atlan in #1177 - Adds four new AWS connectors by @rupeshatlan in #1179
🐞 Bug fixes
- Modifies workflow
findByType
to use regular expression to avoid false positive results by @ErnestoLoma in #1183
📦 Packages
- Fixes typedef toolkit to generate appropriate AttributeDefs on RelationshipDefs by @cmgrote in #1174
- Allows OpenAPI spec loader to support loading multiple JSON files by @pavanmanishd in #1113
- Adds interchangeable Excel and CSV options for export packages by @cmgrote in #1181
- Changes Python package rendering to support Open Telemetry logging by @ErnestoLoma in #1182
New Contributors
- @pavanmanishd made their first contribution in #1113
Full Changelog: v4.1.0...v4.1.1
v4.1.0
🎉 New features
- Adds logging of underlying causes for back-end errors by @cmgrote in #1098
- Adds new connector BIGID by @rupeshatlan in #1112
📦 Packages
- Adds OpenTelemetry logging for all Kotlin-based packages by @cmgrote in #1114
- Adds an uncaught exception handler so any unexpected errors are caught and logged by @cmgrote
- Fixes cyclical relationship detection in asset import by @cmgrote in #1107
- Fixes persistent connection cache population by @cmgrote in #1110
- Improves logging on any CSV decoding errors by @cmgrote in #1109
- Updates packages to use latest version of image by @ErnestoLoma in #1131
🥗 QOL improvements
New Contributors
- @rupeshatlan made their first contribution in #1112
Full Changelog: v4.0.3...v4.1.0
v4.0.3
📦 Packages
- Fixes bug where URL-based ingestion of OpenAPI spec would fail by @cmgrote in #1097
- Changes level to
DEBUG
for logger_root in Python packages by @ErnestoLoma in #1094
Full Changelog: v4.0.2...v4.0.3
v4.0.2
v4.0.1
This is essentially a rerelease of 4.0.0, so full release notes included here for simplicity:
⛑️ Breaking changes
- Removes a number of static objects, in particular the "default" Atlan client that was accessible through
Atlan.getDefaultClient()
by @cmgrote in #1072. Every operation that interacts with Atlan (ultimately sending it an API request) must now be explicitly passed anAtlanClient
. This change was made for two primary reasons:- It makes explicit which operations will interact with Atlan (those that require an
AtlanClient
to be passed) vs those that only operate on information locally in-memory (those that do not require anAtlanClient
to be passed). - It removes concurrency limitations and risks with shared static resources across the entire JVM (including all threads therein). This applies not only to the default client but also to some of the caches that were being automatically managed.
- It makes explicit which operations will interact with Atlan (those that require an
- Packages developed using this release of the package toolkit will now need to make use of a broader
PackageContext
object that similarly encapsulates the client and any extra caches specific to packages.
🧪 Experimental
🐞 Bug fixes
📦 Packages
- Adds multi-pass handling of cyclical relationships to asset import package by @cmgrote in #1061
- Fixes Python outputs generated by package toolkit by @ErnestoLoma in #1068
- Adds the ability in the package toolkit to set default values into the configuration objects by defining a
fallback
for any inputs in thepackage.pkl
by @cmgrote in #1072 - Fixes impersonation within packages by @cmgrote in #1084
- Adds further type-checking on input CSVs by @cmgrote in #1086
- Fixes potential NPE in user iteration listing by @cmgrote in #1087
🥗 QOL improvements
Full Changelog: v3.1.2...v4.0.1
AtlanClient changes
As mentioned in the breaking changes, this release introduces a complete revamp of the way the AtlanClient
is managed and passed around to operations that actually call Atlan APIs behind-the-scenes.
Resource-isolated
Previously the client itself and some caches were managed statically across the entire JVM. This could cause non-obvious and very difficult reproduce issues when heavy concurrency exists. With this release, all caches are managed within the AtlanClient
directly, and there is no longer a JVM-wide static client. Instead, you can create a new client and have it "live" only for as long as you need it:
try (AtlanClient client = new AtlanClient()) {
// Do anything you need against Atlan within this block
}
// Once you exit the block, the client and all its internal caches will be removed
Must be explicitly passed
Furthermore, any operation that actually interacts with Atlan directly (ultimately via its APIs behind-the-scenes) must now be explicitly passed such a client:
GlossaryTerm term = GlossaryTerm.findByName(client, "A", "B");
term.trimToRequired().userDescription("Hi there!").build().save(client);
This means there is an extensive set of changes to many of the methods across the SDK — if you're planning to adopt this release (and higher), rather than reading a huge list of such operations it'll probably be simplest to update your dependency to this latest release in your codebase and then look for any compilation breakages. The explicit AtlanClient
is almost always expected as the new first parameter in any methods that now require it.
Package toolkit
Introduction of PackageContext
In the same way we have resource-isolated the client and its caches for the SDK, we have resource-isolated the context of a running package and its further caches in this release. The full context needed for running a package is now bundled into an object called a PackageContext
, which can be created from a package's configuration using Utils.initializeContext()
and passing it te configuration. Where you previously may have just used this pattern:
@JvmStatic
fun main(args: Array<String>) {
val config = Utils.setPackageOps<OpenAPISpecLoaderCfg>()
// Receive inputs from the config to decide what to do in your logic
}
You should now use this pattern:
@JvmStatic
fun main(args: Array<String>) {
Utils.initializeContext<OpenAPISpecLoaderCfg>().use { ctx ->
// Receive inputs from the config to decide what to do in your logic
val url = ctx.config.specUrl // config items will be available nested under ctx.config
val client = ctx.client // the AtlanClient will be nested under ctx.client
val termCache = ctx.termCache // a number of lazy-load-managed caches are also available in the context
}
}
v4.0.0
⛑️ Breaking changes
- Removes a number of static objects, in particular the "default" Atlan client that was accessible through
Atlan.getDefaultClient()
by @cmgrote in #1072. Every operation that interacts with Atlan (ultimately sending it an API request) must now be explicitly passed anAtlanClient
. This change was made for two primary reasons:- It makes explicit which operations will interact with Atlan (those that require an
AtlanClient
to be passed) vs those that only operate on information locally in-memory (those that do not require anAtlanClient
to be passed). - It removes concurrency limitations and risks with shared static resources across the entire JVM (including all threads therein). This applies not only to the default client but also to some of the caches that were being automatically managed.
- It makes explicit which operations will interact with Atlan (those that require an
- Packages developed using this release of the package toolkit will now need to make use of a broader
PackageContext
object that similarly encapsulates the client and any extra caches specific to packages.
🧪 Experimental
🐞 Bug fixes
📦 Packages
- Adds multi-pass handling of cyclical relationships to asset import package by @cmgrote in #1061
- Fixes Python outputs generated by package toolkit by @ErnestoLoma in #1068
- Adds the ability in the package toolkit to set default values into the configuration objects by defining a
fallback
for any inputs in thepackage.pkl
by @cmgrote in #1072
🥗 QOL improvements
Full Changelog: v3.1.2...v4.0.0
AtlanClient changes
As mentioned in the breaking changes, this release introduces a complete revamp of the way the AtlanClient
is managed and passed around to operations that actually call Atlan APIs behind-the-scenes.
Resource-isolated
Previously the client itself and some caches were managed statically across the entire JVM. This could cause non-obvious and very difficult reproduce issues when heavy concurrency exists. With this release, all caches are managed within the AtlanClient
directly, and there is no longer a JVM-wide static client. Instead, you can create a new client and have it "live" only for as long as you need it:
try (AtlanClient client = new AtlanClient()) {
// Do anything you need against Atlan within this block
}
// Once you exit the block, the client and all its internal caches will be removed
Must be explicitly passed
Furthermore, any operation that actually interacts with Atlan directly (ultimately via its APIs behind-the-scenes) must now be explicitly passed such a client:
GlossaryTerm term = GlossaryTerm.findByName(client, "A", "B");
term.trimToRequired().userDescription("Hi there!").build().save(client);
This means there is an extensive set of changes to many of the methods across the SDK — if you're planning to adopt this release (and higher), rather than reading a huge list of such operations it'll probably be simplest to update your dependency to this latest release in your codebase and then look for any compilation breakages. The explicit AtlanClient
is almost always expected as the new first parameter in any methods that now require it.
Package toolkit
Introduction of PackageContext
In the same way we have resource-isolated the client and its caches for the SDK, we have resource-isolated the context of a running package and its further caches in this release. The full context needed for running a package is now bundled into an object called a PackageContext
, which can be created from a package's configuration using Utils.initializeContext()
and passing it te configuration. Where you previously may have just used this pattern:
@JvmStatic
fun main(args: Array<String>) {
val config = Utils.setPackageOps<OpenAPISpecLoaderCfg>()
// Receive inputs from the config to decide what to do in your logic
}
You should now use this pattern:
@JvmStatic
fun main(args: Array<String>) {
Utils.initializeContext<OpenAPISpecLoaderCfg>().use { ctx ->
// Receive inputs from the config to decide what to do in your logic
val url = ctx.config.specUrl // config items will be available nested under ctx.config
val client = ctx.client // the AtlanClient will be nested under ctx.client
val termCache = ctx.termCache // a number of lazy-load-managed caches are also available in the context
}
}
v3.1.2
v3.1.1
🎉 New features
- Adds
immediateNeighbors
to FluentLineage to simplify lineage retrieval by @pavanmanish-atlan in #1048
🐞 Bug fixes
📦 Packages
- Corrects downloads for GCS and ADLS deltas by @cmgrote in #1041
- Adds full delta calculation logic for relational and cube assets builders by @cmgrote in #1044
- Prevents renaming of connections as part of the enrichment migrator by @ErnestoLoma in #1049
New Contributors
- @pavanmanish-atlan made their first contribution in #1048
Full Changelog: v3.0.1...v3.1.0
v3.0.1
🎉 New features
🧪 Experimental
🐞 Bug fixes
- Corrects typo that caused CategoryCache to be loaded incorrectly by @cmgrote in #1030
- Avoids page overruns in edge cases where total results is very nearly the limit before query rewriting needs to happen by @cmgrote in #1033
📦 Packages
- Adds case insensitivity and table view agnosticism options to enrichment migrator by @ErnestoLoma in #1032
- Fixes bug where a purpose with no tag could cause admin export to fail by @cmgrote in #1036
Full Changelog: v3.0.0...v3.0.1