code: func NewCheckpointState(stateDir, checkpointName, policyName string) (State, error) {
  	checkpointManager, err := checkpointmanager.NewCheckpointManager(stateDir)
  	if err != nil {
  		return nil, fmt.Errorf("failed to initialize checkpoint manager: %v", err)
  	}
  	stateCheckpoint := &stateCheckpoint{
  		cache:             NewMemoryState(),
  		policyName:        policyName,
  		checkpointManager: checkpointManager,
  		checkpointName:    checkpointName,
  	}
  
  	if err := stateCheckpoint.restoreState(); err != nil {
  		return nil, fmt.Errorf("could not restore state from checkpoint: %v\n"+
  			"Please drain this node and delete the CPU manager checkpoint file %q before restarting Kubelet.",
  			err, path.Join(stateDir, checkpointName))
  	}
  
  	return stateCheckpoint, nil
  }
docs: // NewCheckpointState creates new State for keeping track of cpu/pod assignment with checkpoint backend