code: func (s *service) update(svc *service) {
  	if s.serviceKey != svc.serviceKey {
  		log.Fatalf("%v: can't update service %v using %v: serviceKey mismatch: %v != %v",
  			s.vserver, s, svc, s.serviceKey, svc.serviceKey)
  	}
  	log.Infof("%v: updating service %v", s.vserver, s)
  
  	updateIPVS := s.active && !s.ipvsEqual(svc)
  	svc.active = s.active
  	svc.healthy = s.healthy
  	svc.stats = s.stats
  	svc.dests = s.dests
  	*s = *svc
  
  	if !updateIPVS {
  		return
  	}
  
  	log.Infof("%v: %v updating IPVS service", s.vserver, s)
  	ncc := s.vserver.ncc
  	if err := ncc.Dial(); err != nil {
  		log.Fatalf("%v: failed to connect to NCC: %v", s.vserver, err)
  	}
  	defer ncc.Close()
  
  	if err := ncc.IPVSUpdateService(s.ipvsSvc); err != nil {
  		log.Fatalf("%v: failed to update service %v: %v", s.vserver, s, err)
  	}
  }
docs: // update updates a service while preserving its running state.