diff --git a/pkg/apihelper/reflect.go b/pkg/apihelper/reflect.go index 10e3cd7013..3c80a67b16 100644 --- a/pkg/apihelper/reflect.go +++ b/pkg/apihelper/reflect.go @@ -57,50 +57,11 @@ func GetModels(opts *GetModelsOptions) error { tstr := timeutils.MysqlTime(time) return fmt.Sprintf("updated_at.ge('%s')", tstr) } - setNextListParams := func(params *jsonutils.JSONDict, lastUpdatedAt time.Time, lastResult *printutils.ListResult) (time.Time, error) { + setNextListParams := func(params *jsonutils.JSONDict, lastResult *printutils.ListResult) error { // NOTE: the updated_at field has second-level resolution. // If they all have the same date... - var max time.Time - nmax := 0 - n := len(lastResult.Data) - - // find out the max updated_at date in the result set, and how - // many in the set has this date - for i := n - 1; i >= 0; i-- { - j := lastResult.Data[i] - updatedAt, err := j.GetTime("updated_at") - if err != nil { - log.Warningf("%s: updated_at field: %s, %s", - manKeyPlural, err, j.String()) - continue - } - if max.IsZero() { - max = updatedAt - } - if max.Equal(updatedAt) { - nmax += 1 - } - } - // error if we do not have valid date - if max.IsZero() { - return time.Time{}, fmt.Errorf("%s: cannot find next updated_at after '%q'", - manKeyPlural, lastUpdatedAt) - } - - var newTime time.Time - var newOffset int - // if not all updated_at date are the same, then we can - // continue to the next age. - if nmax < n || (!max.Equal(lastUpdatedAt) && !max.Equal(PseudoZeroTime)) { - newTime = max - newOffset = nmax - } else { - newTime = lastUpdatedAt - newOffset = lastResult.Offset + n - } - params.Set("filter.0", jsonutils.NewString(minUpdatedAtFilter(newTime))) - params.Set("offset", jsonutils.NewInt(int64(newOffset))) - return newTime, nil + params.Set("offset", jsonutils.NewInt(int64(lastResult.Offset+len(lastResult.Data)))) + return nil } listOptions := options.BaseListOptions{ @@ -112,7 +73,7 @@ func GetModels(opts *GetModelsOptions) error { Filter: []string{ minUpdatedAtFilter(minUpdatedAt), // order matters, filter.0 }, - OrderBy: []string{"updated_at"}, + OrderBy: []string{"updated_at", "created_at", "id"}, Order: "asc", Limit: options.Int(opts.BatchListSize), Offset: options.Int(0), @@ -161,7 +122,7 @@ func GetModels(opts *GetModelsOptions) error { if listResult.Offset+len(listResult.Data) >= listResult.Total { break } - minUpdatedAt, err = setNextListParams(params, minUpdatedAt, listResult) + err = setNextListParams(params, listResult) if err != nil { return fmt.Errorf("%s: %s", manKeyPlural, err) } diff --git a/pkg/vpcagent/ovn/keeper.go b/pkg/vpcagent/ovn/keeper.go index 242498209c..c5be675cb3 100644 --- a/pkg/vpcagent/ovn/keeper.go +++ b/pkg/vpcagent/ovn/keeper.go @@ -26,6 +26,7 @@ import ( "yunion.io/x/ovsdb/types" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/netutils" + "yunion.io/x/pkg/util/regutils" "yunion.io/x/pkg/utils" apis "yunion.io/x/onecloud/pkg/apis/compute" @@ -436,6 +437,21 @@ func (keeper *OVNNorthboundKeeper) ClaimVpcEipgw(ctx context.Context, vpc *agent return keeper.cli.Must(ctx, "ClaimVpcEipgw", args) } +func formatNtpServers(srvs string) string { + srv := make([]string, 0) + for _, part := range strings.Split(srvs, ",") { + part = strings.TrimSpace(part) + if len(part) > 0 { + if regutils.MatchIPAddr(part) { + srv = append(srv, part) + } else { + srv = append(srv, "\""+part+"\"") + } + } + } + return strings.Join(srv, ",") +} + func generateDhcpOptions(ctx context.Context, guestnetwork *agentmodels.Guestnetwork, opts *options.Options) *ovn_nb.DHCPOptions { var ( network = guestnetwork.Network @@ -527,7 +543,7 @@ func generateDhcpOptions(ctx context.Context, guestnetwork *agentmodels.Guestnet } if len(ntpSrvs) > 0 { // bug on OVN, should not use ntp server: QiuJian - // dhcpopts.Options["ntp_server"] = "{" + ntpSrvs + "}" + dhcpopts.Options["ntp_server"] = "{" + formatNtpServers(ntpSrvs) + "}" } } return dhcpopts @@ -964,7 +980,7 @@ func (keeper *OVNNorthboundKeeper) ClaimVpcGuestDnsRecords(ctx context.Context, for _, guestnetwork := range network.Guestnetworks { if guest := guestnetwork.Guest; guest != nil { var ( - name = guest.Name + name = guest.Hostname ip = guestnetwork.IpAddr ) grs[name] = append(grs[name], ip)