weaviate/weaviate · error
backup: %s not found
Error message
backup: %s not found
What it means
BackupBackend resolves a backup-capable module by name for backup/restore operations. If Provider.GetByName finds no module registered under the given name, it returns "backup: %s not found". The backend string must exactly match a registered module name (e.g. backup-s3, backup-gcs, backup-filesystem).
Source
Thrown at usecases/modules/modules.go:1119
return metaInfos, nil
}
func (p *Provider) getClass(className string) (*models.Class, error) {
class := p.schemaGetter.ReadOnlyClass(className)
if class == nil {
return nil, errors.Errorf("class %q not found in schema", className)
}
return class, nil
}
func (p *Provider) HasMultipleVectorizers() bool {
return p.hasMultipleVectorizers
}
func (p *Provider) BackupBackend(backend string, useCase modulecapabilities.BackendUseCase) (modulecapabilities.BackupBackend, error) {
module := p.GetByName(backend)
if module == nil {
return nil, errors.Errorf("backup: %s not found", backend)
}
if module.Type() != modulecapabilities.Backup {
return nil, errors.Errorf("backup: %s is not a backup backend type", backend)
}
bb, ok := module.(modulecapabilities.BackupBackend)
if !ok {
return nil, errors.Errorf("backup: %s is not a backup backend (actual type: %T)", backend, module)
}
if useCase == modulecapabilities.BackendUseCaseExport {
if ep, ok := module.(modulecapabilities.ExportBackendProvider); ok {
return ep.ExportBackend(), nil
}
}
return bb, nil
}
func (p *Provider) OffloadBackend(backend string) (modulecapabilities.OffloadCloud, bool) {
if module := p.GetByName(backend); module != nil {View on GitHub (pinned to 75aa4b6d11)
Solutions
- Use the full module name in the backup URL: /v1/backups/backup-s3/... not /v1/backups/s3/... (depending on Weaviate version).
- Enable the backup module: add backup-s3 (or backup-gcs/backup-azure/backup-filesystem) to ENABLE_MODULES and set its config (bucket, env vars).
- Confirm enabled modules via GET /v1/meta.
- In Go code calling BackupBackend, check Provider.GetByName(backend) != nil first.
Example fix
// before
client.backup.creator().withBackend("s3").withBackupId("snap1").do(ctx)
// after
client.backup.creator().withBackend("backup-s3").withBackupId("snap1").do(ctx) Defensive patterns
Strategy: validation
Validate before calling
const meta = await weaviate.metagetter().do();
const backends = ['backup-filesystem','backup-s3','backup-gcs','backup-azure'];
const enabled = Object.keys(meta.modules || {});
if (!enabled.some(m => backends.includes(m))) throw new Error('no backup module enabled in ENABLE_MODULES'); Try / catch
try {
await client.backup.creator().withBackend(backend).withBackupId(id).do(ctx);
} catch (e) {
if (String(e).includes('backup:') && String(e).includes('not found')) {
throw new Error(`Backup backend "${backend}" not enabled — check ENABLE_MODULES`);
}
throw e;
} Prevention
- Always use the full module name (backup-s3, not s3) in backup API paths
- Add backup modules to ENABLE_MODULES in every environment where backups run
- Smoke-test a dry backup after deployment
When it happens
Trigger: Starting a backup (POST /v1/backups/{backend}) or restore with a backend path segment that isn't an enabled module — e.g. /v1/backups/s3 when only backup-filesystem is enabled, or a misspelled backend name.
Common situations: backup-<provider> module missing from ENABLE_MODULES; URL path uses the provider ("s3") instead of the full module name ("backup-s3"); deployment where backup modules are disabled by default.
Related errors
- local filesystem backend is not viable for backing up a node
- 'includeUsers' was set but dynamic DB users are not enabled
- 'includeRoles' was set but RBAC is not enabled
- no modules defined
- no modules defined
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/aee37721851696e3.
Report an issue: GitHub.