code: func (manager *basicStateManager) Save() error {
  	defer metrics.MetricsEngineGlobal.RecordStateManagerMetric("SAVE")()
  	manager.saveTimesLock.Lock()
  	defer manager.saveTimesLock.Unlock()
  	if time.Since(manager.lastSave) >= minSaveInterval {
  		// we can just save
  		err := manager.ForceSave()
  		manager.lastSave = time.Now()
  		manager.nextPlannedSave = time.Time{} // re-zero it; assume all pending desires to save are fulfilled
  		return err
  	} else if manager.nextPlannedSave.IsZero() {
  		// No save planned yet, we should plan one.
  		next := manager.lastSave.Add(minSaveInterval)
  		manager.nextPlannedSave = next
  		go func() {
  			time.Sleep(next.Sub(time.Now()))
  			manager.Save()
  		}()
  	}
  	// else nextPlannedSave wasn't Zero so there's a save planned elsewhere that'll
  	// fulfill this
  	return nil
  }
docs: // Save triggers a save to file, though respects a minimum save interval to wait
  // between saves.