siyuan-note/siyuan · error
Conf.Language(84), Conf.Language(154)
Error message
Conf.Language(84), Conf.Language(154)
What it means
After the underlying repo.UploadTagIndex fails with dejavu.ErrCloudBackupCountExceeded, UploadCloudSnapshot rewraps it as fmt.Errorf(Conf.Language(84), Conf.Language(154)): 'Backup failed: The cloud can only support backup up to 12 snapshots'. SiYuan's cloud service enforces a quota of at most 12 snapshots per backup; exceeding it makes the upload fail with this specific error before any other handling.
Source
Thrown at kernel/model/repository.go:1532
switch Conf.Sync.Provider {
case conf.ProviderSiYuan:
if !IsSubscriber() {
util.PushErrMsg(Conf.Language(29), 5000)
return
}
case conf.ProviderWebDAV, conf.ProviderS3, conf.ProviderLocal:
if !IsPaidUser() {
util.PushErrMsg(Conf.Language(214), 5000)
return
}
}
util.PushEndlessProgress(Conf.Language(116))
defer util.PushClearProgress()
uploadFileCount, uploadChunkCount, uploadBytes, err := repo.UploadTagIndex(tag, id, map[string]any{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBarAndProgress})
if err != nil {
if errors.Is(err, dejavu.ErrCloudBackupCountExceeded) {
err = fmt.Errorf(Conf.Language(84), Conf.Language(154))
return
}
handleCloudError(err)
err = fmt.Errorf(Conf.Language(84), formatRepoErrorMsg(err))
return
}
msg := fmt.Sprintf(Conf.Language(152), uploadFileCount, uploadChunkCount, humanize.BytesCustomCeil(uint64(uploadBytes), 2))
util.PushMsg(msg, 5000)
util.PushStatusBar(msg)
return
}
func RemoveCloudRepoTag(tag string) (err error) {
assetDownloadSourceMu.RLock()
defer assetDownloadSourceMu.RUnlock()
if 1 > len(Conf.Repo.Key) {
err = errors.New(Conf.Language(26))
returnView on GitHub (pinned to 8641553a1f)
Solutions
- Delete old cloud snapshots first (Settings - Account & Sync - Cloud backup / snapshot management, or /api/repo/removeCloudRepoTag) then retry the upload
- Change the snapshot tag to one whose snapshot count is under the 12-snapshot quota
- Upgrade the SiYuan membership if a higher cloud snapshot quota is available
Example fix
// before
await fetchPost('/api/repo/uploadCloudSnapshot', {tag: 'daily', id: id});
// after: prune before uploading
const logs = (await fetchSyncPost('/api/repo/getCloudRepoTagSnapshots', {tag: 'daily'})).data.logs;
if (logs.length >= 12) {
await fetchPost('/api/repo/removeCloudRepoTag', {tag: 'daily'}); // or remove individual snapshots
}
await fetchPost('/api/repo/uploadCloudSnapshot', {tag: 'daily', id: id}); Defensive patterns
Strategy: validation
Validate before calling
const logs = (await fetchSyncPost('/api/repo/getCloudRepoTagSnapshots', {tag})).data.logs;
if (logs.length >= 12) {
throw new Error('Cloud snapshot quota (12) reached for tag ' + tag);
} Type guard
function isQuotaExceeded(err) {
return err instanceof Error && /12 snapshots/i.test(err.message);
} Try / catch
try {
await fetchPost('/api/repo/uploadCloudSnapshot', {tag, id});
} catch (e) {
if (isQuotaExceeded(e)) { await pruneOldCloudSnapshots(tag); await retry(); }
else { throw e; }
} Prevention
- Prune or rotate old cloud snapshots before automated uploads
- Check snapshot counts per tag periodically in maintenance scripts
- Use distinct tags so per-tag snapshot counts stay below the 12-snapshot quota
When it happens
Trigger: Calling uploadCloudSnapshot when the cloud backup already holds 12 snapshots and no old snapshot is removed; repeated automated snapshot uploads against a free cloud account that has hit the retention limit.
Common situations: Long-running workspaces with many manual or tag-based cloud snapshots; scripts or plugins that upload cloud snapshots on a schedule without pruning; users who upgraded devices but not their cloud snapshot quota.
Understand the failure class
Background: "File too large" / "file size exceeds limit" errors: why libraries cap file sizes and how to fix them — this error's family across 46 libraries.
Related errors
- Conf.Language(84), formatRepoErrorMsg(err)
- symlink resolves into encrypted notebook [%s]
- get block failed: %s
- load tree failed: %s
- view not found
AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11).
Data as JSON: /api/errors/473c0b401a15d800.
Report an issue: GitHub.