code: func (p *Plugin) Register(resyncName string) Registration {
  	p.mu.Lock()
  	defer p.mu.Unlock()
  
  	if _, found := p.registrations[resyncName]; found {
  		p.Log.WithField("resyncName", resyncName).
  			Panic("You are trying to register same resync twice")
  		return nil
  	}
  	// ensure that resync is triggered in the same order as the plugins were registered
  	p.regOrder = append(p.regOrder, resyncName)
  
  	reg := newRegistration(resyncName, make(chan StatusEvent))
  	p.registrations[resyncName] = reg
  
  	return reg
  }
docs: // Register function is supposed to be called in Init() by all VPP Agent plugins.
  // The plugins are supposed to load current state of their objects when newResync() is called.
  // The actual CreateNewObjects(), DeleteObsoleteObjects() and ModifyExistingObjects() will be orchestrated
  // to ensure their proper order. If an error occurs during Resync, then new Resync is planned.