code: func (d *dynProviderState) commit(client *dynect.Client) error {
  	errs := []error{}
  
  	for _, zone := range d.zones(client) {
  		// extra call if in debug mode to fetch pending changes
  		if log.GetLevel() >= log.DebugLevel {
  			response := ZoneChangesResponse{}
  			err := client.Do("GET", fmt.Sprintf("ZoneChanges/%s/", zone), nil, &response)
  			log.Debugf("Pending changes for zone %s: %+v", zone, errorOrValue(err, &response))
  		}
  
  		h, err := os.Hostname()
  		if err != nil {
  			h = "unknown-host"
  		}
  		notes := fmt.Sprintf("Change by external-dns@%s, DynAPI@%s, %s on %s",
  			d.AppVersion,
  			d.DynVersion,
  			time.Now().Format(time.RFC3339),
  			h,
  		)
  
  		zonePublish := ZonePublishRequest{
  			Publish: true,
  			Notes:   notes,
  		}
  
  		response := ZonePublishResponse{}
  
  		// always retry the commit: don't waste the good work so far
  		err = apiRetryLoop(func() error {
  			return client.Do("PUT", fmt.Sprintf("Zone/%s/", zone), &zonePublish, &response)
  		})
  		log.Infof("Committing changes for zone %s: %+v", zone, errorOrValue(err, &response))
  	}
  
  	switch len(errs) {
  	case 0:
  		return nil
  	case 1:
  		return errs[0]
  	default:
  		return fmt.Errorf("Multiple errors committing: %+v", errs)
  	}
  }
docs: // commit commits all pending changes. It will always attempt to commit, if there are no