code: func (s *schemaVersionSyncer) Restart(ctx context.Context) error {
  	startTime := time.Now()
  	var err error
  	defer func() {
  		metrics.DeploySyncerHistogram.WithLabelValues(metrics.SyncerRestart, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds())
  	}()
  
  	logPrefix := fmt.Sprintf("[%s] %s", ddlPrompt, s.selfSchemaVerPath)
  	// NewSession's context will affect the exit of the session.
  	session, err := owner.NewSession(ctx, logPrefix, s.etcdCli, owner.NewSessionRetryUnlimited, SyncerSessionTTL)
  	if err != nil {
  		return errors.Trace(err)
  	}
  	s.storeSession(session)
  
  	childCtx, cancel := context.WithTimeout(ctx, keyOpDefaultTimeout)
  	defer cancel()
  	err = PutKVToEtcd(childCtx, s.etcdCli, putKeyRetryUnlimited, s.selfSchemaVerPath, InitialVersion,
  		clientv3.WithLease(s.loadSession().Lease()))
  
  	return errors.Trace(err)
  }
docs: // Restart implements SchemaSyncer.Restart interface.