code: func onDropTablePartition(t *meta.Meta, job *model.Job) (ver int64, _ error) {
  	var partName string
  	if err := job.DecodeArgs(&partName); err != nil {
  		job.State = model.JobStateCancelled
  		return ver, errors.Trace(err)
  	}
  	tblInfo, err := getTableInfoAndCancelFaultJob(t, job, job.SchemaID)
  	if err != nil {
  		return ver, errors.Trace(err)
  	}
  	// If an error occurs, it returns that it cannot delete all partitions or that the partition doesn't exist.
  	err = checkDropTablePartition(tblInfo, partName)
  	if err != nil {
  		job.State = model.JobStateCancelled
  		return ver, errors.Trace(err)
  	}
  	physicalTableID := removePartitionInfo(tblInfo, partName)
  	ver, err = updateVersionAndTableInfo(t, job, tblInfo, true)
  	if err != nil {
  		return ver, errors.Trace(err)
  	}
  
  	// Finish this job.
  	job.FinishTableJob(model.JobStateDone, model.StateNone, ver, tblInfo)
  	// A background job will be created to delete old partition data.
  	job.Args = []interface{}{physicalTableID}
  	return ver, nil
  }
docs: // onDropTablePartition deletes old partition meta.