code: func RunGCJob(ctx context.Context, s tikv.Storage, safePoint uint64, identifier string, concurrency int) error {
  	gcWorker := &GCWorker{
  		store: s,
  		uuid:  identifier,
  	}
  
  	err := gcWorker.resolveLocks(ctx, safePoint)
  	if err != nil {
  		return errors.Trace(err)
  	}
  
  	if concurrency <= 0 {
  		return errors.Errorf("[gc worker] gc concurrency should greater than 0, current concurrency: %v", concurrency)
  	}
  	err = gcWorker.doGCInternal(ctx, safePoint, concurrency)
  	if err != nil {
  		return errors.Trace(err)
  	}
  	return nil
  }
docs: // RunGCJob sends GC command to KV. it is exported for kv api, do not use it with GCWorker at the same time.