Databricks CLI
Go to file
Pieter Noordhuis 16bb224108
Add directory tracking to sync (#425)
## Changes

This change replaces usage of the `repofiles` package with the `filer`
package to consolidate WSFS code paths.

The `repofiles` package implemented the following behavior. If a file at
`foo/bar.txt` was created and removed, the directory `foo` was kept
around because we do not perform directory tracking. If subsequently, a
file at `foo` was created, it resulted in an `fs.ErrExist` because it is
impossible to overwrite a directory. It would then perform a recursive
delete of the path if this happened and retry the file write.

To make this use case work without resorting to a recursive delete on
conflict, we need to implement directory tracking as part of sync. The
approach in this commit is as follows:

1. Maintain set of directories needed for current set of files. Compare
to previous set of files. This results in mkdir of added directories and
rmdir of removed directories.
2. Creation of new directories should happen prior to writing files.
Otherwise, many file writes may race to create the same parent
directories, resulting in additional API calls. Removal of existing
directories should happen after removing files.
3. Making new directories can be deduped across common prefixes where
only the longest prefix is created recursively.
4. Removing existing directories must happen sequentially, starting with
the longest prefix.
5. Removal of directories is a best effort. It fails only if the
directory is not empty, and if this happens we know something placed a
file or directory manually, outside of sync.

## Tests

* Existing integration tests pass (modified where it used to assert
directories weren't cleaned up)
* New integration test to confirm the inability to remove a directory
doesn't fail the sync run
2023-06-12 11:44:00 +00:00
.codegen Do not generate prompts for certain commands (#438) 2023-06-05 19:38:45 +02:00
.github Rename bricks -> databricks (#389) 2023-05-16 18:35:39 +02:00
.vscode Rename bricks -> databricks (#389) 2023-05-16 18:35:39 +02:00
bundle Check for nil environment before accessing it (#453) 2023-06-08 20:55:49 +00:00
cmd Tweak profile prompt (#454) 2023-06-09 13:56:35 +02:00
docs Rename bricks -> databricks (#389) 2023-05-16 18:35:39 +02:00
folders Don't depend on working directory in folders.FindDirWithLeaf (#54) 2022-09-14 15:08:55 +02:00
internal Add directory tracking to sync (#425) 2023-06-12 11:44:00 +00:00
libs Add directory tracking to sync (#425) 2023-06-12 11:44:00 +00:00
python Update setup.py (#397) 2023-05-23 11:39:57 +02:00
.codegen.json Added OpenAPI command coverage (#357) 2023-04-26 13:06:16 +02:00
.gitattributes Update to Go SDK v0.9.0 (#396) 2023-05-22 21:27:22 +02:00
.gitignore Rename bricks -> databricks (#389) 2023-05-16 18:35:39 +02:00
.goreleaser.yaml Rename bricks -> databricks (#389) 2023-05-16 18:35:39 +02:00
CHANGELOG.md Release v0.100.2 (#410) 2023-05-26 13:28:38 +02:00
Makefile goreleaser deprecated --rm-dist in favor of --clean (#349) 2023-04-20 11:59:34 +02:00
README.md Rename: bricks -> databricks (#393) 2023-05-22 16:40:50 +02:00
go.mod Bump github.com/mattn/go-isatty from 0.0.18 to 0.0.19 (#412) 2023-06-01 09:45:54 +02:00
go.sum Bump github.com/mattn/go-isatty from 0.0.18 to 0.0.19 (#412) 2023-06-01 09:45:54 +02:00
main.go Rename bricks -> databricks (#389) 2023-05-16 18:35:39 +02:00
main_test.go Rename bricks -> databricks (#389) 2023-05-16 18:35:39 +02:00

README.md

Databricks CLI

build

This project is in private preview.

Documentation about the full REST API coverage is avaialbe in the docs folder.

Documentation is available at https://docs.databricks.com/dev-tools/cli/databricks-cli.html.

Installation

This CLI is packaged as a dependency-free binary executable and may be located in any directory.

For convenient access, copy the databricks binary to any directory listed in $PATH.

Confirm the binary works by executing databricks version.

Authentication

This CLI follows the Databricks Unified Authentication principles.

You can find a detailed description at https://github.com/databricks/databricks-sdk-go#authentication.