code: func (s *schemaVersionSyncer) Init(ctx context.Context) error {
  	startTime := time.Now()
  	var err error
  	defer func() {
  		metrics.DeploySyncerHistogram.WithLabelValues(metrics.SyncerInit, metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds())
  	}()
  
  	_, err = s.etcdCli.Txn(ctx).
  		If(clientv3.Compare(clientv3.CreateRevision(DDLGlobalSchemaVersion), "=", 0)).
  		Then(clientv3.OpPut(DDLGlobalSchemaVersion, InitialVersion)).
  		Commit()
  	if err != nil {
  		return errors.Trace(err)
  	}
  	logPrefix := fmt.Sprintf("[%s] %s", ddlPrompt, s.selfSchemaVerPath)
  	session, err := owner.NewSession(ctx, logPrefix, s.etcdCli, owner.NewSessionDefaultRetryCnt, SyncerSessionTTL)
  	if err != nil {
  		return errors.Trace(err)
  	}
  	s.storeSession(session)
  
  	s.mu.Lock()
  	s.mu.globalVerCh = s.etcdCli.Watch(ctx, DDLGlobalSchemaVersion)
  	s.mu.Unlock()
  
  	err = PutKVToEtcd(ctx, s.etcdCli, keyOpDefaultRetryCnt, s.selfSchemaVerPath, InitialVersion,
  		clientv3.WithLease(s.loadSession().Lease()))
  	return errors.Trace(err)
  }
docs: // Init implements SchemaSyncer.Init interface.