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))
		return

View on GitHub (pinned to 8641553a1f)

Solutions

  1. Delete old cloud snapshots first (Settings - Account & Sync - Cloud backup / snapshot management, or /api/repo/removeCloudRepoTag) then retry the upload
  2. Change the snapshot tag to one whose snapshot count is under the 12-snapshot quota
  3. 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

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


AI-assisted analysis of siyuan-note/siyuan@8641553a1f (2026-09-11). Data as JSON: /api/errors/473c0b401a15d800. Report an issue: GitHub.