Skip to content

Commit 8b29d2d

Browse files
authored
Exporter: Don't list directories in the incremental mode (#3569)
* Exporter: Don't list directories in the incremental mode Instead, rely on behavior or them emitted as dependencies for notebooks * Emit directories only if service is enabled * Add a note about directories listing in incremental mode
1 parent 41b58eb commit 8b29d2d

File tree

4 files changed

+26
-4
lines changed

4 files changed

+26
-4
lines changed

docs/guides/experimental-exporter.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Services are just logical groups of resources used for filtering and organizatio
6464

6565
* `access` - [databricks_permissions](../resources/permissions.md), [databricks_instance_profile](../resources/instance_profile.md), [databricks_ip_access_list](../resources/ip_access_list.md), [databricks_mws_permission_assignment](../resources/mws_permission_assignment.md) and [databricks_access_control_rule_set](../resources/access_control_rule_set.md).
6666
* `compute` - **listing** [databricks_cluster](../resources/cluster.md).
67-
* `directories` - **listing** [databricks_directory](../resources/directory.md).
67+
* `directories` - **listing** [databricks_directory](../resources/directory.md). *Please note that directories aren't listed when running in the incremental mode! Only directories with updated notebooks will be emitted.*
6868
* `dlt` - **listing** [databricks_pipeline](../resources/pipeline.md).
6969
* `groups` - **listing** [databricks_group](../data-sources/group.md) with [membership](../resources/group_member.md) and [data access](../resources/group_instance_profile.md).
7070
* `jobs` - **listing** [databricks_job](../resources/job.md). Usually, there are more automated workflows than interactive clusters, so they get their own file in this tool's output. *Please note that workflows deployed and maintained via [Databricks Asset Bundles](https://docs.databricks.com/en/dev-tools/bundles/index.html) aren't exported!*

exporter/importables.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2053,6 +2053,9 @@ var resourcesMap map[string]importable = map[string]importable{
20532053
// TODO: think if we really need this, we need directories only for permissions,
20542054
// and only when they are different from parents & notebooks
20552055
List: func(ic *importContext) error {
2056+
if ic.incremental {
2057+
return nil
2058+
}
20562059
directoryList := ic.getAllDirectories()
20572060
for offset, directory := range directoryList {
20582061
if strings.HasPrefix(directory.Path, "/Repos") {

exporter/util.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,9 @@ func (ic *importContext) emitSqlParentDirectory(parent string) {
10871087
}
10881088

10891089
func (ic *importContext) shouldSkipWorkspaceObject(object workspace.ObjectStatus, updatedSinceMs int64) bool {
1090+
if ic.incremental && object.ObjectType == workspace.Directory {
1091+
return true
1092+
}
10901093
if !(object.ObjectType == workspace.Notebook || object.ObjectType == workspace.File) ||
10911094
strings.HasPrefix(object.Path, "/Repos") {
10921095
// log.Printf("[DEBUG] Skipping unsupported entry %v", object)
@@ -1155,8 +1158,10 @@ func listNotebooksAndWorkspaceFiles(ic *importContext) error {
11551158
updatedSinceMs := ic.getUpdatedSinceMs()
11561159
allObjects := ic.getAllWorkspaceObjects(func(objects []workspace.ObjectStatus) {
11571160
for _, object := range objects {
1158-
if object.ObjectType == workspace.Directory && object.Path != "/" && !ic.incremental {
1159-
objectsChannel <- object
1161+
if object.ObjectType == workspace.Directory {
1162+
if !ic.incremental && object.Path != "/" && ic.isServiceEnabled("directories") {
1163+
objectsChannel <- object
1164+
}
11601165
} else {
11611166
if ic.shouldSkipWorkspaceObject(object, updatedSinceMs) {
11621167
continue
@@ -1179,7 +1184,11 @@ func listNotebooksAndWorkspaceFiles(ic *importContext) error {
11791184
if ic.shouldSkipWorkspaceObject(object, updatedSinceMs) {
11801185
continue
11811186
}
1182-
emitWorkpaceObject(ic, object)
1187+
if object.ObjectType == workspace.Directory && !ic.incremental && ic.isServiceEnabled("directories") && object.Path != "/" {
1188+
emitWorkpaceObject(ic, object)
1189+
} else if (object.ObjectType == workspace.Notebook || object.ObjectType == workspace.File) && ic.isServiceEnabled("notebooks") {
1190+
emitWorkpaceObject(ic, object)
1191+
}
11831192
}
11841193
}
11851194
return nil

exporter/util_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,3 +429,13 @@ func TestEmitWorkspaceObjectParentDirectory(t *testing.T) {
429429
assert.True(t, exists)
430430
assert.Equal(t, dirPath, dir)
431431
}
432+
433+
func TestDirectoryIncrementalMode(t *testing.T) {
434+
ic := importContextForTest()
435+
ic.incremental = true
436+
437+
// test direct listing
438+
assert.Nil(t, resourcesMap["databricks_directory"].List(ic))
439+
// test emit during workspace listing
440+
assert.True(t, ic.shouldSkipWorkspaceObject(workspace.ObjectStatus{ObjectType: workspace.Directory}, 111111))
441+
}

0 commit comments

Comments
 (0)