Skip to content

fix(cfapi): sync mort dans les deux sens après #157 DISABLE_ON_DEMAND_POPULATION (#158) #158

Description

@CCoupel

Régression critique (#158)

Commit responsable : ada6568 (fix #157)
Symptôme : Après le fix #157, la sync est totalement morte dans les deux sens :

  • LOCAL → GhD: : New File, Copy, Rename, Delete — OK localement, rien ne se propage
  • GhD: → LOCAL : New File, Copy, Rename, Delete — OK sur GhD:, rien ne se propage

Root cause

Le fix #157 utilisait CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAG_DISABLE_ON_DEMAND_POPULATION dans ghd_cf_ack_placeholders. Ce flag modifie le reparse point CF du répertoire via CfExecute, ce qui interfère avec ReadDirectoryChangesW (fsnotify) et/ou bloque les opérations de fichiers CF dans la sync root.

Analyse

Commit Bug Verdict
c960386 (#152) placeholderOK guard Bénin — n'affecte que le badge CF, pas le download
e96c48d (#153) filepath.ToSlash(evt.Path) No-op — le watcher relativise déjà en forward-slash
e99fedb (#154) SHChangeNotify trailing sep Bénin — n'affecte pas la sync engine
007e813 Tests #153-155 Bénin
80d618b (#156) hrAlreadyPlaceholder no-op Bénin — ne touche pas CF state
ada6568 (#157) DISABLE_ON_DEMAND_POPULATION ROOT CAUSE #158

Fix

  • cgo_cfapi_windows.c : Revert → CF_OPERATION_TRANSFER_PLACEHOLDERS_FLAG_NONE (pas de modification du reparse point)
  • provider.go : Ajout cooldown dedup 30s dans ghdOnFetchPlaceholders
    • 1ère invocation par path : OnFetchPlaceholders → backend.List() → CfCreatePlaceholders → store timestamp
    • Invocations suivantes dans la fenêtre 30s : ack immédiat (S_OK, FLAG_NONE) sans appeler backend.List()
  • SyncProvider : Ajout populatedDirs sync.Map pour tracking des timestamps

Tests

Test Vérifie
TestRegression158_AckFlag_None Le flag ack est FLAG_NONE (pas DISABLE_ON_DEMAND)
TestRegression157_TransferFlags_ConstantValues Valeurs SDK Windows exactes
TestRegression158_Cooldown_NeverPopulated 1ère invocation non skippée
TestRegression158_Cooldown_WithinWindow Invocation dans 30s skippée
TestRegression158_Cooldown_AtBoundary Exactement 30s → non skippé
TestRegression158_Cooldown_AfterExpiry Après expiry → non skippé
TestRegression158_Cooldown_DifferentPaths Cooldown indépendant par path

18/18 packages PASS — race detector ✓

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions