code: func (l *State) SyncFull() error {
  	// note that we do not acquire the lock here since the methods
  	// we are calling will do that themselves.
  	//
  	// Also note that we don't hold the lock for the entire operation
  	// but release it between the two calls. This is not an issue since
  	// the algorithm is best-effort to achieve eventual consistency.
  	// SyncChanges will sync whatever updateSyncState() has determined
  	// needs updating.
  
  	if err := l.updateSyncState(); err != nil {
  		return err
  	}
  	return l.SyncChanges()
  }
docs: // SyncFull determines the delta between the local and remote state
  // and synchronizes the changes.