diff --git a/.codegen/_openapi_sha b/.codegen/_openapi_sha index 73633aa1e..037327042 100755 --- a/.codegen/_openapi_sha +++ b/.codegen/_openapi_sha @@ -1 +1 @@ -bd6e15a1d13c8bf0fcaa1675bde0fd8fa37df2d0 \ No newline at end of file +0555d6a59265799ed8ea12f355eee662e739430d \ No newline at end of file diff --git a/.gitattributes b/.gitattributes index 6c402aa3c..ab4d15cbc 100755 --- a/.gitattributes +++ b/.gitattributes @@ -1404,6 +1404,7 @@ databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/ListSortOrder.j databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/ListUsersRequest.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/ListUsersResponse.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/ListWorkspaceAssignmentRequest.java linguist-generated=true +databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/MeRequest.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/MigratePermissionsRequest.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/MigratePermissionsResponse.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/Name.java linguist-generated=true @@ -2507,6 +2508,8 @@ databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/SyncedTabl databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/SyncedTableSyncedTableSpec.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/SyncedTableSyncedTableSpecSyncedTableSchedulingPolicy.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/SyncedTableSyncedTableStatus.java linguist-generated=true +databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteBranchOperation.java linguist-generated=true +databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteBranchRequest.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteProjectOperation.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteProjectRequest.java linguist-generated=true databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UpdateBranchOperation.java linguist-generated=true diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md old mode 100644 new mode 100755 index 4cde6fca1..835569c98 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -15,3 +15,16 @@ ### Internal Changes ### API Changes +* Add `undeleteBranch()` method for `workspaceClient.postgres()` service. +* Add `attributes` and `excludedAttributes` fields for `com.databricks.sdk.service.iam.MeRequest`. +* Add `includeTriggerState` field for `com.databricks.sdk.service.jobs.GetJobRequest`. +* Add `deleteTime` and `purgeTime` fields for `com.databricks.sdk.service.postgres.BranchStatus`. +* Add `purge` field for `com.databricks.sdk.service.postgres.DeleteBranchRequest`. +* Add `showDeleted` field for `com.databricks.sdk.service.postgres.ListBranchesRequest`. +* Add `DELETED` enum value for `com.databricks.sdk.service.postgres.BranchStatusState`. +* [Breaking] Change `actionType` and `resourceId` fields for `com.databricks.sdk.service.bundle.Operation` to be required. +* Change `actionType` and `resourceId` fields for `com.databricks.sdk.service.bundle.Operation` to be required. +* Change `cliVersion` field for `com.databricks.sdk.service.bundle.Version` to be required. +* [Breaking] Change `cliVersion` field for `com.databricks.sdk.service.bundle.Version` to be required. +* [Breaking] Change `tags` field for `com.databricks.sdk.service.marketplace.ListListingsRequest` to type `com.databricks.sdk.service.marketplace.ListingTag` class. +* [Breaking] Change pagination for `workspaceClient.clusters().events()` method. \ No newline at end of file diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/bundle/Operation.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/bundle/Operation.java index cb9298c97..ea8faae37 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/bundle/Operation.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/bundle/Operation.java @@ -37,10 +37,7 @@ public class Operation { @JsonProperty("name") private String name; - /** - * ID reference for the actual resource in the workspace (e.g. the job ID, pipeline ID). Should be - * unset for delete operations. - */ + /** ID reference for the actual resource in the workspace (e.g. the job ID, pipeline ID). */ @JsonProperty("resource_id") private String resourceId; diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/catalog/SecurableKind.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/catalog/SecurableKind.java index e53628277..2b1fdebed 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/catalog/SecurableKind.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/catalog/SecurableKind.java @@ -4,12 +4,7 @@ import com.databricks.sdk.support.Generated; -/** - * Specific variant of a SecurableType: identifies the concrete implementation or backing system for - * a UC securable (e.g. CATALOG_STANDARD vs CATALOG_DELTASHARING; MEMORY_STORE_STANDARD for - * Conversations-backed memory stores). Used to dispatch type-specific handling in the entity model. - * Latest kind: MEMORY_STORE_STANDARD = 330; Next id: 331 - */ +/** Latest kind: MODEL_SERVICE_SYSTEM_DELTASHARING = 330; Next id: 331 */ @Generated public enum SecurableKind { TABLE_DB_STORAGE, diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/compute/Environment.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/compute/Environment.java index ed2aff3d6..4c9b5894d 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/compute/Environment.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/compute/Environment.java @@ -22,7 +22,10 @@ public class Environment { * Databricks-provided base environment ID (e.g., `workspace-base-environments/databricks_ai_v4`) * and workspace base environment ID (e.g., * `workspace-base-environments/dbe_b849b66e-b31a-4cb5-b161-1f2b10877fb7`) is in Beta. Either - * `environment_version` or `base_environment` can be provided. For more information, see + * `environment_version` or `base_environment` can be provided. For more information about + * Databricks-provided base environments, see the [list workspace base + * environments](:method:Environments/ListWorkspaceBaseEnvironments) API. For more information, + * see */ @JsonProperty("base_environment") private String baseEnvironment; diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/environments/EnvironmentsAPI.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/environments/EnvironmentsAPI.java index 6f37f8f89..c00f8101c 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/environments/EnvironmentsAPI.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/environments/EnvironmentsAPI.java @@ -91,7 +91,21 @@ public WorkspaceBaseEnvironment getWorkspaceBaseEnvironment( return impl.getWorkspaceBaseEnvironment(request); } - /** Lists all WorkspaceBaseEnvironments in the workspace. */ + /** + * Lists all WorkspaceBaseEnvironments in the workspace. + * + *

Databricks provides the following base environments: + * + *

- `workspace-base-environments/databricks_ai_...`: includes popular AI and deep learning + * packages for serverless GPU compute. + * + *

- `workspace-base-environments/databricks_ml_...`: includes popular ML packages for + * serverless compute. + * + *

Databricks-provided base environments are versioned. For example, + * `workspace-base-environments/databricks_ml_v5` corresponds to the ML environment built on + * environment version 5. + */ public Iterable listWorkspaceBaseEnvironments( ListWorkspaceBaseEnvironmentsRequest request) { return new Paginator<>( diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/environments/EnvironmentsService.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/environments/EnvironmentsService.java index 3016ef103..945f703d8 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/environments/EnvironmentsService.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/environments/EnvironmentsService.java @@ -50,7 +50,21 @@ DefaultWorkspaceBaseEnvironment getDefaultWorkspaceBaseEnvironment( WorkspaceBaseEnvironment getWorkspaceBaseEnvironment( GetWorkspaceBaseEnvironmentRequest getWorkspaceBaseEnvironmentRequest); - /** Lists all WorkspaceBaseEnvironments in the workspace. */ + /** + * Lists all WorkspaceBaseEnvironments in the workspace. + * + *

Databricks provides the following base environments: + * + *

- `workspace-base-environments/databricks_ai_...`: includes popular AI and deep learning + * packages for serverless GPU compute. + * + *

- `workspace-base-environments/databricks_ml_...`: includes popular ML packages for + * serverless compute. + * + *

Databricks-provided base environments are versioned. For example, + * `workspace-base-environments/databricks_ml_v5` corresponds to the ML environment built on + * environment version 5. + */ ListWorkspaceBaseEnvironmentsResponse listWorkspaceBaseEnvironments( ListWorkspaceBaseEnvironmentsRequest listWorkspaceBaseEnvironmentsRequest); diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserAPI.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserAPI.java index 302fcff03..9434e2b50 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserAPI.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserAPI.java @@ -26,8 +26,8 @@ public CurrentUserAPI(CurrentUserService mock) { } /** Get details about the current method caller's identity. */ - public User me() { - return impl.me(); + public User me(MeRequest request) { + return impl.me(request); } public CurrentUserService impl() { diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserImpl.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserImpl.java index 8c22d2f91..8b04e6aae 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserImpl.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserImpl.java @@ -17,11 +17,12 @@ public CurrentUserImpl(ApiClient apiClient) { } @Override - public User me() { + public User me(MeRequest request) { String path = "/api/2.0/preview/scim/v2/Me"; try { Request req = new Request("GET", path); + ApiClient.setQuery(req, request); req.withHeader("Accept", "application/json"); if (apiClient.workspaceId() != null) { req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId()); diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserService.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserService.java index ae5466cce..b34451e8f 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserService.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/CurrentUserService.java @@ -13,5 +13,5 @@ @Generated public interface CurrentUserService { /** Get details about the current method caller's identity. */ - User me(); + User me(MeRequest meRequest); } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/MeRequest.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/MeRequest.java new file mode 100755 index 000000000..83cb7525b --- /dev/null +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/MeRequest.java @@ -0,0 +1,62 @@ +// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT. + +package com.databricks.sdk.service.iam; + +import com.databricks.sdk.support.Generated; +import com.databricks.sdk.support.QueryParam; +import com.databricks.sdk.support.ToStringer; +import com.fasterxml.jackson.annotation.JsonIgnore; +import java.util.Objects; + +@Generated +public class MeRequest { + /** Comma-separated list of attributes to return in response. */ + @JsonIgnore + @QueryParam("attributes") + private String attributes; + + /** Comma-separated list of attributes to exclude in response. */ + @JsonIgnore + @QueryParam("excludedAttributes") + private String excludedAttributes; + + public MeRequest setAttributes(String attributes) { + this.attributes = attributes; + return this; + } + + public String getAttributes() { + return attributes; + } + + public MeRequest setExcludedAttributes(String excludedAttributes) { + this.excludedAttributes = excludedAttributes; + return this; + } + + public String getExcludedAttributes() { + return excludedAttributes; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MeRequest that = (MeRequest) o; + return Objects.equals(attributes, that.attributes) + && Objects.equals(excludedAttributes, that.excludedAttributes); + } + + @Override + public int hashCode() { + return Objects.hash(attributes, excludedAttributes); + } + + @Override + public String toString() { + return new ToStringer(MeRequest.class) + .add("attributes", attributes) + .add("excludedAttributes", excludedAttributes) + .toString(); + } +} diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/jobs/GetJobRequest.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/jobs/GetJobRequest.java index 782000d0b..2496d1d02 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/jobs/GetJobRequest.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/jobs/GetJobRequest.java @@ -10,6 +10,11 @@ @Generated public class GetJobRequest { + /** Flag that indicates that trigger state should be included in the response. */ + @JsonIgnore + @QueryParam("include_trigger_state") + private Boolean includeTriggerState; + /** The canonical identifier of the job to retrieve information about. This field is required. */ @JsonIgnore @QueryParam("job_id") @@ -23,6 +28,15 @@ public class GetJobRequest { @QueryParam("page_token") private String pageToken; + public GetJobRequest setIncludeTriggerState(Boolean includeTriggerState) { + this.includeTriggerState = includeTriggerState; + return this; + } + + public Boolean getIncludeTriggerState() { + return includeTriggerState; + } + public GetJobRequest setJobId(Long jobId) { this.jobId = jobId; return this; @@ -46,17 +60,20 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; GetJobRequest that = (GetJobRequest) o; - return Objects.equals(jobId, that.jobId) && Objects.equals(pageToken, that.pageToken); + return Objects.equals(includeTriggerState, that.includeTriggerState) + && Objects.equals(jobId, that.jobId) + && Objects.equals(pageToken, that.pageToken); } @Override public int hashCode() { - return Objects.hash(jobId, pageToken); + return Objects.hash(includeTriggerState, jobId, pageToken); } @Override public String toString() { return new ToStringer(GetJobRequest.class) + .add("includeTriggerState", includeTriggerState) .add("jobId", jobId) .add("pageToken", pageToken) .toString(); diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/marketplace/ListListingsRequest.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/marketplace/ListListingsRequest.java index 2cc8fd092..c6a6cdc6d 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/marketplace/ListListingsRequest.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/marketplace/ListListingsRequest.java @@ -51,10 +51,10 @@ public class ListListingsRequest { @QueryParam("provider_ids") private Collection providerIds; - /** Matches any of the following tags */ + /** Matches listings with this tag */ @JsonIgnore @QueryParam("tags") - private Collection tags; + private ListingTag tags; public ListListingsRequest setAssets(Collection assets) { this.assets = assets; @@ -128,12 +128,12 @@ public Collection getProviderIds() { return providerIds; } - public ListListingsRequest setTags(Collection tags) { + public ListListingsRequest setTags(ListingTag tags) { this.tags = tags; return this; } - public Collection getTags() { + public ListingTag getTags() { return tags; } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/BranchStatus.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/BranchStatus.java index 584b6ebcf..9b4dde230 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/BranchStatus.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/BranchStatus.java @@ -29,6 +29,10 @@ public class BranchStatus { @JsonProperty("default") private Boolean defaultValue; + /** A timestamp indicating when the branch was deleted. Empty if the branch is not deleted. */ + @JsonProperty("delete_time") + private Timestamp deleteTime; + /** Absolute expiration time for the branch. Empty if expiration is disabled. */ @JsonProperty("expire_time") private Timestamp expireTime; @@ -45,6 +49,13 @@ public class BranchStatus { @JsonProperty("pending_state") private BranchStatusState pendingState; + /** + * A timestamp indicating when the branch is scheduled to be purged. Empty if the branch is not + * deleted, otherwise set to a timestamp in the future. + */ + @JsonProperty("purge_time") + private Timestamp purgeTime; + /** * The name of the source branch from which this branch was created. Format: * projects/{project_id}/branches/{branch_id} @@ -91,6 +102,15 @@ public Boolean getDefault() { return defaultValue; } + public BranchStatus setDeleteTime(Timestamp deleteTime) { + this.deleteTime = deleteTime; + return this; + } + + public Timestamp getDeleteTime() { + return deleteTime; + } + public BranchStatus setExpireTime(Timestamp expireTime) { this.expireTime = expireTime; return this; @@ -127,6 +147,15 @@ public BranchStatusState getPendingState() { return pendingState; } + public BranchStatus setPurgeTime(Timestamp purgeTime) { + this.purgeTime = purgeTime; + return this; + } + + public Timestamp getPurgeTime() { + return purgeTime; + } + public BranchStatus setSourceBranch(String sourceBranch) { this.sourceBranch = sourceBranch; return this; @@ -171,10 +200,12 @@ public boolean equals(Object o) { return Objects.equals(branchId, that.branchId) && Objects.equals(currentState, that.currentState) && Objects.equals(defaultValue, that.defaultValue) + && Objects.equals(deleteTime, that.deleteTime) && Objects.equals(expireTime, that.expireTime) && Objects.equals(isProtected, that.isProtected) && Objects.equals(logicalSizeBytes, that.logicalSizeBytes) && Objects.equals(pendingState, that.pendingState) + && Objects.equals(purgeTime, that.purgeTime) && Objects.equals(sourceBranch, that.sourceBranch) && Objects.equals(sourceBranchLsn, that.sourceBranchLsn) && Objects.equals(sourceBranchTime, that.sourceBranchTime) @@ -187,10 +218,12 @@ public int hashCode() { branchId, currentState, defaultValue, + deleteTime, expireTime, isProtected, logicalSizeBytes, pendingState, + purgeTime, sourceBranch, sourceBranchLsn, sourceBranchTime, @@ -203,10 +236,12 @@ public String toString() { .add("branchId", branchId) .add("currentState", currentState) .add("defaultValue", defaultValue) + .add("deleteTime", deleteTime) .add("expireTime", expireTime) .add("isProtected", isProtected) .add("logicalSizeBytes", logicalSizeBytes) .add("pendingState", pendingState) + .add("purgeTime", purgeTime) .add("sourceBranch", sourceBranch) .add("sourceBranchLsn", sourceBranchLsn) .add("sourceBranchTime", sourceBranchTime) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/BranchStatusState.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/BranchStatusState.java index a617f80a0..ff89f0cc7 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/BranchStatusState.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/BranchStatusState.java @@ -8,6 +8,7 @@ @Generated public enum BranchStatusState { ARCHIVED, + DELETED, IMPORTING, INIT, READY, diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/DeleteBranchRequest.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/DeleteBranchRequest.java index 00f0f3460..f65faca4a 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/DeleteBranchRequest.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/DeleteBranchRequest.java @@ -3,6 +3,7 @@ package com.databricks.sdk.service.postgres; import com.databricks.sdk.support.Generated; +import com.databricks.sdk.support.QueryParam; import com.databricks.sdk.support.ToStringer; import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.Objects; @@ -15,6 +16,11 @@ public class DeleteBranchRequest { */ @JsonIgnore private String name; + /** If true, permanently delete the branch; if false, soft delete. */ + @JsonIgnore + @QueryParam("purge") + private Boolean purge; + public DeleteBranchRequest setName(String name) { this.name = name; return this; @@ -24,21 +30,33 @@ public String getName() { return name; } + public DeleteBranchRequest setPurge(Boolean purge) { + this.purge = purge; + return this; + } + + public Boolean getPurge() { + return purge; + } + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; DeleteBranchRequest that = (DeleteBranchRequest) o; - return Objects.equals(name, that.name); + return Objects.equals(name, that.name) && Objects.equals(purge, that.purge); } @Override public int hashCode() { - return Objects.hash(name); + return Objects.hash(name, purge); } @Override public String toString() { - return new ToStringer(DeleteBranchRequest.class).add("name", name).toString(); + return new ToStringer(DeleteBranchRequest.class) + .add("name", name) + .add("purge", purge) + .toString(); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/ListBranchesRequest.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/ListBranchesRequest.java index 4957cac59..86988f9c3 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/ListBranchesRequest.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/ListBranchesRequest.java @@ -23,6 +23,14 @@ public class ListBranchesRequest { /** The Project that owns this collection of branches. Format: projects/{project_id} */ @JsonIgnore private String parent; + /** + * Whether to include soft-deleted branches in the response. When true, deleted branches are + * included alongside active branches. Purged branches are never returned. + */ + @JsonIgnore + @QueryParam("show_deleted") + private Boolean showDeleted; + public ListBranchesRequest setPageSize(Long pageSize) { this.pageSize = pageSize; return this; @@ -50,6 +58,15 @@ public String getParent() { return parent; } + public ListBranchesRequest setShowDeleted(Boolean showDeleted) { + this.showDeleted = showDeleted; + return this; + } + + public Boolean getShowDeleted() { + return showDeleted; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -57,12 +74,13 @@ public boolean equals(Object o) { ListBranchesRequest that = (ListBranchesRequest) o; return Objects.equals(pageSize, that.pageSize) && Objects.equals(pageToken, that.pageToken) - && Objects.equals(parent, that.parent); + && Objects.equals(parent, that.parent) + && Objects.equals(showDeleted, that.showDeleted); } @Override public int hashCode() { - return Objects.hash(pageSize, pageToken, parent); + return Objects.hash(pageSize, pageToken, parent, showDeleted); } @Override @@ -71,6 +89,7 @@ public String toString() { .add("pageSize", pageSize) .add("pageToken", pageToken) .add("parent", parent) + .add("showDeleted", showDeleted) .toString(); } } diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresAPI.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresAPI.java index abe5c04ec..255b88164 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresAPI.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresAPI.java @@ -333,6 +333,12 @@ public Iterable listRoles(ListRolesRequest request) { }); } + /** Undeletes the specified database branch. */ + public UndeleteBranchOperation undeleteBranch(UndeleteBranchRequest request) { + Operation operation = impl.undeleteBranch(request); + return new UndeleteBranchOperation(impl, operation); + } + /** Undeletes a soft-deleted project. */ public UndeleteProjectOperation undeleteProject(UndeleteProjectRequest request) { Operation operation = impl.undeleteProject(request); diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresImpl.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresImpl.java index b6981a62d..396c52f34 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresImpl.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresImpl.java @@ -500,6 +500,24 @@ public ListRolesResponse listRoles(ListRolesRequest request) { } } + @Override + public Operation undeleteBranch(UndeleteBranchRequest request) { + String path = String.format("/api/2.0/postgres/%s/undelete", request.getName()); + try { + Request req = new Request("POST", path, apiClient.serialize(request)); + + ApiClient.setQuery(req, request); + req.withHeader("Accept", "application/json"); + req.withHeader("Content-Type", "application/json"); + if (apiClient.workspaceId() != null) { + req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId()); + } + return apiClient.execute(req, Operation.class); + } catch (IOException e) { + throw new DatabricksException("IO error: " + e.getMessage(), e); + } + } + @Override public Operation undeleteProject(UndeleteProjectRequest request) { String path = String.format("/api/2.0/postgres/%s/undelete", request.getName()); diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresService.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresService.java index 4c767cb90..a728f5e23 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresService.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/PostgresService.java @@ -124,6 +124,9 @@ DatabaseCredential generateDatabaseCredential( /** Returns a paginated list of Postgres roles in the branch. */ ListRolesResponse listRoles(ListRolesRequest listRolesRequest); + /** Undeletes the specified database branch. */ + Operation undeleteBranch(UndeleteBranchRequest undeleteBranchRequest); + /** Undeletes a soft-deleted project. */ Operation undeleteProject(UndeleteProjectRequest undeleteProjectRequest); diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteBranchOperation.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteBranchOperation.java new file mode 100755 index 000000000..b02c73fb5 --- /dev/null +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteBranchOperation.java @@ -0,0 +1,162 @@ +// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT. +package com.databricks.sdk.service.postgres; + +import com.databricks.sdk.core.DatabricksException; +import com.databricks.sdk.core.logging.Logger; +import com.databricks.sdk.core.logging.LoggerFactory; +import com.databricks.sdk.core.utils.SerDeUtils; +import com.databricks.sdk.service.common.lro.LroOptions; +import com.databricks.sdk.support.Generated; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.time.Duration; +import java.util.Optional; +import java.util.concurrent.TimeoutException; + +/** + * Wrapper for interacting with a long-running undeleteBranch operation. Provides methods to wait + * for completion, check status, cancel, and access metadata. + */ +@Generated +public class UndeleteBranchOperation { + private static final Logger LOG = LoggerFactory.getLogger(UndeleteBranchOperation.class); + + private final PostgresService impl; + private Operation operation; + private final ObjectMapper objectMapper; + + public UndeleteBranchOperation(PostgresService impl, Operation operation) { + this.impl = impl; + this.operation = operation; + this.objectMapper = SerDeUtils.createMapper(); + } + + /** + * Wait for the operation to complete and return the resulting . Waits indefinitely if no timeout + * is specified. + * + * @return the created + * @throws TimeoutException if the operation doesn't complete within the timeout + * @throws DatabricksException if the operation fails + */ + public void waitForCompletion() throws TimeoutException { + waitForCompletion(Optional.empty()); + } + + /** + * Wait for the operation to complete and return the resulting . + * + * @param options the options for configuring the wait behavior, can be empty for defaults + * @return the created + * @throws TimeoutException if the operation doesn't complete within the timeout + * @throws DatabricksException if the operation fails + */ + public void waitForCompletion(Optional options) throws TimeoutException { + Optional timeout = options.flatMap(LroOptions::getTimeout); + long deadline = + timeout.isPresent() + ? System.currentTimeMillis() + timeout.get().toMillis() + : Long.MAX_VALUE; + String statusMessage = "polling operation..."; + int attempt = 1; + + while (System.currentTimeMillis() < deadline) { + // Refresh the operation state + refreshOperation(); + + if (operation.getDone() != null && operation.getDone()) { + // Operation completed, check for success or failure + if (operation.getError() != null) { + String errorMsg = "unknown error"; + if (operation.getError().getMessage() != null + && !operation.getError().getMessage().isEmpty()) { + errorMsg = operation.getError().getMessage(); + } + + if (operation.getError().getErrorCode() != null) { + errorMsg = String.format("[%s] %s", operation.getError().getErrorCode(), errorMsg); + } + + throw new DatabricksException("Operation failed: " + errorMsg); + } + + // Operation completed successfully, unmarshal response + if (operation.getResponse() == null) { + throw new DatabricksException("Operation completed but no response available"); + } + + try { + JsonNode responseJson = objectMapper.valueToTree(operation.getResponse()); + objectMapper.treeToValue(responseJson, Void.class); + return; + } catch (JsonProcessingException e) { + throw new DatabricksException("Failed to unmarshal response: " + e.getMessage(), e); + } + } + + // Operation still in progress, wait before polling again + String prefix = String.format("operation=%s", operation.getName()); + int sleep = Math.min(attempt, 10); // sleep 10s max per attempt + LOG.info("{}: operation in progress (sleeping ~{}s)", prefix, sleep); + + try { + Thread.sleep((long) (sleep * 1000L + Math.random() * 1000)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new DatabricksException("Current thread was interrupted", e); + } + attempt++; + } + + String timeoutMessage = + timeout.isPresent() + ? String.format("Operation timed out after %s: %s", timeout.get(), statusMessage) + : String.format("Operation timed out: %s", statusMessage); + throw new TimeoutException(timeoutMessage); + } + + /** + * Get the operation name. + * + * @return the operation name + */ + public String getName() { + return operation.getName(); + } + + /** + * Get the operation metadata. + * + * @return the operation metadata, or null if not available + * @throws DatabricksException if the metadata cannot be deserialized + */ + public BranchOperationMetadata getMetadata() { + if (operation.getMetadata() == null) { + return null; + } + + try { + JsonNode metadataJson = objectMapper.valueToTree(operation.getMetadata()); + return objectMapper.treeToValue(metadataJson, BranchOperationMetadata.class); + } catch (JsonProcessingException e) { + throw new DatabricksException("Failed to unmarshal operation metadata: " + e.getMessage(), e); + } + } + + /** + * Check if the operation is done. This method refreshes the operation state before checking. + * + * @return true if the operation is complete, false otherwise + * @throws DatabricksException if the status check fails + */ + public boolean isDone() { + refreshOperation(); + return operation.getDone() != null && operation.getDone(); + } + + /** Refresh the operation state by polling the server. */ + private void refreshOperation() { + operation = impl.getOperation(new GetOperationRequest().setName(operation.getName())); + } +} diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteBranchRequest.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteBranchRequest.java new file mode 100755 index 000000000..1431d082b --- /dev/null +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/service/postgres/UndeleteBranchRequest.java @@ -0,0 +1,44 @@ +// Code generated from OpenAPI specs by Databricks SDK Generator. DO NOT EDIT. + +package com.databricks.sdk.service.postgres; + +import com.databricks.sdk.support.Generated; +import com.databricks.sdk.support.ToStringer; +import com.fasterxml.jackson.annotation.JsonIgnore; +import java.util.Objects; + +@Generated +public class UndeleteBranchRequest { + /** + * The full resource path of the branch to undelete. Format: + * projects/{project_id}/branches/{branch_id} + */ + @JsonIgnore private String name; + + public UndeleteBranchRequest setName(String name) { + this.name = name; + return this; + } + + public String getName() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + UndeleteBranchRequest that = (UndeleteBranchRequest) o; + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + return new ToStringer(UndeleteBranchRequest.class).add("name", name).toString(); + } +}