code: func (m *Meta) GetDDLReorgHandle(job *model.Job) (startHandle, endHandle, physicalTableID int64, err error) {
  	startHandle, err = m.txn.HGetInt64(mDDLJobReorgKey, m.reorgJobStartHandle(job.ID))
  	if err != nil {
  		err = errors.Trace(err)
  		return
  	}
  	endHandle, err = m.txn.HGetInt64(mDDLJobReorgKey, m.reorgJobEndHandle(job.ID))
  	if err != nil {
  		err = errors.Trace(err)
  		return
  	}
  	physicalTableID, err = m.txn.HGetInt64(mDDLJobReorgKey, m.reorgJobPhysicalTableID(job.ID))
  	if err != nil {
  		err = errors.Trace(err)
  		return
  	}
  	// endHandle or physicalTableID may be 0, because older version TiDB (without table partition) doesn't store them.
  	// update them to table's in this case.
  	if endHandle == 0 || physicalTableID == 0 {
  		if job.ReorgMeta != nil {
  			endHandle = job.ReorgMeta.EndHandle
  		} else {
  			endHandle = math.MaxInt64
  		}
  		physicalTableID = job.TableID
  		logutil.Logger(context.Background()).Warn("new TiDB binary running on old TiDB DDL reorg data",
  			zap.Int64("partition ID", physicalTableID),
  			zap.Int64("startHandle", startHandle),
  			zap.Int64("endHandle", endHandle))
  	}
  	return
  }
docs: // GetDDLReorgHandle gets the latest processed DDL reorganize position.