{"record":{"id":"15e1273e3aaa7dcd","repo":"weaviate/weaviate","slug":"w-collections-v-are-not-exportable-export-requ","errorCode":null,"errorMessage":"%w: collections %v are not exportable: export requires async replication for every collection with replication factor > 1. This usually means async replication is disabled cluster-wide — unset ASYNC_REPLICATION_DISABLED (or the equivalent runtime override) to re-enable it — but it can also mean the collection is not yet known to this node","messagePattern":"%w: collections (.+?) are not exportable: export requires async replication for every collection with replication factor > 1\\. This usually means async replication is disabled cluster-wide — unset ASYNC_REPLICATION_DISABLED \\(or the equivalent runtime override\\) to re-enable it — but it can also mean the collection is not yet known to this node","errorType":"validation","errorClass":"ErrExportValidation","httpStatus":null,"severity":"error","filePath":"usecases/export/scheduler.go","lineNumber":182,"sourceCode":"\t\t\treturn authorization.Backups(class)[0]\n\t\t},\n\t)\n\n\tif len(classes) == 0 {\n\t\treturn nil, fmt.Errorf(\"%w: no exportable classes\", ErrExportValidation)\n\t}\n\n\t// Require async replication for every exported class with RF > 1. The\n\t// selector also returns false when the class has no local index, so the\n\t// error below keeps both causes in view.\n\tvar noAsync []string\n\tfor _, class := range classes {\n\t\tif !s.selector.IsAsyncReplicationEnabled(ctx, class) {\n\t\t\tnoAsync = append(noAsync, class)\n\t\t}\n\t}\n\tif len(noAsync) > 0 {\n\t\treturn nil, fmt.Errorf(\"%w: collections %v are not exportable: export \"+\n\t\t\t\"requires async replication for every collection with replication \"+\n\t\t\t\"factor > 1. This usually means async replication is disabled \"+\n\t\t\t\"cluster-wide — unset ASYNC_REPLICATION_DISABLED (or the equivalent \"+\n\t\t\t\"runtime override) to re-enable it — but it can also mean the \"+\n\t\t\t\"collection is not yet known to this node\", ErrExportValidation, noAsync)\n\t}\n\n\tbackendStore, err := s.backends.BackupBackend(backend, modulecapabilities.BackendUseCaseExport)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"%w: backend %s not available: %w\", ErrExportValidation, backend, err)\n\t}\n\n\tif err := backendStore.Initialize(ctx, id, bucket, path); err != nil {\n\t\treturn nil, fmt.Errorf(\"%w: initialize backend: %w\", ErrExportValidation, err)\n\t}\n\n\tif err := s.checkIfExportExists(ctx, backendStore, id, bucket, path); err != nil {\n\t\treturn nil, err","sourceCodeStart":164,"sourceCodeEnd":200,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/usecases/export/scheduler.go#L164-L200","documentation":"Validation error from Scheduler.Export (usecases/export/scheduler.go:182): one or more listed collections have replication factor > 1 but async replication is not enabled for them, and export requires async replication to take a consistent shard snapshot. The selector also returns false when the class has no local index, so the message covers both \"async disabled\" and \"collection not known to this node\". Wraps ErrExportValidation.","triggerScenarios":"Export requested while any target collection (RF>1) has async replication disabled — typically because ASYNC_REPLICATION_DISABLED is set cluster-wide or via runtime config — or the collection schema is not yet known to this node.","commonSituations":"Cluster launched with ASYNC_REPLICATION_DISABLED=true (or the runtime override set) while someone attempts an export; collections created before async replication was introduced/upgraded; export hitting a node that has not yet learned about the collection.","solutions":["Unset ASYNC_REPLICATION_DISABLED (and any equivalent runtime override) so async replication is enabled cluster-wide, then retry.","Check per-collection replicationConfig in the schema; ensure RF>1 collections have async replication enabled.","If the collection genuinely exists, verify schema replication/RAFT health so this node knows the class.","As a workaround, export collections with RF=1 or temporarily reduce replication requirements if consistency allows."],"exampleFix":"// before\ndocker: environment: ASYNC_REPLICATION_DISABLED: 'true'\n\n// after: remove the override (or set to 'false') and restart\nENABLE_MODULES: '...'\n# ASYNC_REPLICATION_DISABLED removed","handlingStrategy":"validation","validationCode":"schema, _ := client.Schema().Getter()\nfor _, c := range classes {\n    cls := findClass(schema, c)\n    if cls != nil && cls.ReplicationConfig.Factor > 1 {\n        // ensure async replication is enabled cluster-wide before exporting\n        if asyncDisabled { return fmt.Errorf(\"%s needs async replication enabled\", c) }\n    }\n}","typeGuard":null,"tryCatchPattern":"if err != nil {\n    if errors.Is(err, ErrExportValidation) && strings.Contains(err.Error(), \"not exportable\") {\n        // fix ASYNC_REPLICATION_DISABLED / schema, then retry\n    }\n}","preventionTips":["Do not set ASYNC_REPLICATION_DISABLED on clusters that must support exports.","Audit runtime config overrides before running exports.","For new collections, enable async replication when RF > 1.","Ensure schema is fully replicated to all nodes before exporting from any node."],"tags":["go","validation","export","replication","configuration"],"backgroundTag":"async-replication-disabled","analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}