diff --git a/Gopkg.lock b/Gopkg.lock index bdc5e9c410..eadd49242f 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -576,7 +576,7 @@ branch = "master" name = "github.com/yunionio/jsonutils" packages = ["."] - revision = "895610f4e0f2f4bf3aebf016604e6fec39992fd8" + revision = "a19572265f525c898629becef50b405afd5e3ec6" [[projects]] branch = "master" diff --git a/Gopkg.toml b/Gopkg.toml index ed3d43e876..7903f00042 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -69,10 +69,6 @@ name = "github.com/ugorji/go" revision = "f3cacc17c85ecb7f1b6a9e373ee85d1480919868" -[[constraint]] - name = "github.com/coreos/etcd" - version = "3.3.5" - [[constraint]] name = "github.com/coredns/coredns" version = "v1.2.0" diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index c3ce3c6b14..4926dcc488 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -665,7 +665,7 @@ func doCreateItem(manager IModelManager, ctx context.Context, userCred mcclient. generateName, _ := dataDict.GetString("generate_name") if len(generateName) > 0 { - dataDict.Remove("generate_name", true) + dataDict.Remove("generate_name") dataDict.Add(jsonutils.NewString(GenerateName(manager, ownerProjId, generateName)), "name") } else { name, _ := data.GetString("name") @@ -756,7 +756,7 @@ func expandMultiCreateParams(data jsonutils.JSONObject, count int) ([]jsonutils. return nil, httperrors.NewInputParameterError("Missing name or generate_name") } jsonDict.Add(jsonutils.NewString(name), "generate_name") - jsonDict.Remove("name", false) + jsonDict.RemoveIgnoreCase("name") } ret := make([]jsonutils.JSONObject, count) for i := 0; i < count; i += 1 { diff --git a/pkg/cloudcommon/db/interface.go b/pkg/cloudcommon/db/interface.go index fee8f2bf21..e9de71647c 100644 --- a/pkg/cloudcommon/db/interface.go +++ b/pkg/cloudcommon/db/interface.go @@ -116,7 +116,7 @@ type IJointModelManager interface { GetMasterManager() IStandaloneModelManager GetSlaveManager() IStandaloneModelManager - FetchByIds(id1 string, id2 string) (IJointModel, error) + FetchByIds(masterId string, slaveId string) (IJointModel, error) AllowListDescendent(ctx context.Context, userCred mcclient.TokenCredential, model IStandaloneModel, query jsonutils.JSONObject) bool AllowAttach(ctx context.Context, userCred mcclient.TokenCredential, master IStandaloneModel, slave IStandaloneModel) bool diff --git a/pkg/cloudcommon/db/jointbase.go b/pkg/cloudcommon/db/jointbase.go index e1cfb323bb..0277563390 100644 --- a/pkg/cloudcommon/db/jointbase.go +++ b/pkg/cloudcommon/db/jointbase.go @@ -65,7 +65,7 @@ func (manager *SJointResourceBaseManager) SlaveField(q *sqlchemy.SQuery) sqlchem return queryField(q, manager.GetSlaveManager()) } -func (manager *SJointResourceBaseManager) FetchByIds(id1 string, id2 string) (IJointModel, error) { +func (manager *SJointResourceBaseManager) FetchByIds(masterId string, slaveId string) (IJointModel, error) { obj, err := NewModelObject(manager) if err != nil { return nil, err @@ -83,9 +83,8 @@ func (manager *SJointResourceBaseManager) FetchByIds(id1 string, id2 string) (IJ if slaveField == nil { return nil, fmt.Errorf("cannot find slave id") } - cond1 := sqlchemy.AND(sqlchemy.Equals(masterField, id1), sqlchemy.Equals(slaveField, id2)) - cond2 := sqlchemy.AND(sqlchemy.Equals(slaveField, id1), sqlchemy.Equals(masterField, id2)) - q = q.Filter(sqlchemy.OR(cond1, cond2)) + cond := sqlchemy.AND(sqlchemy.Equals(masterField, masterId), sqlchemy.Equals(slaveField, slaveId)) + q = q.Filter(cond) count := q.Count() if count > 1 { return nil, sqlchemy.ErrDuplicateEntry @@ -127,14 +126,14 @@ func (joint *SJointResourceBase) GetJointModelManager() IJointModelManager { return joint.SResourceBase.GetModelManager().(IJointModelManager) } -func getFieldValue(joint IJointModel, name1 string, name2 string) string { +func getFieldValue(joint IJointModel, keyword string, alias string) string { jointValue := reflect.Indirect(reflect.ValueOf(joint)) - idStr, find := reflectutils.FindStructFieldInterface(jointValue, fmt.Sprintf("%s_id", name1)) - if find { + idStr, ok := reflectutils.FindStructFieldInterface(jointValue, fmt.Sprintf("%s_id", keyword)) + if ok { return idStr.(string) } - idStr, find = reflectutils.FindStructFieldInterface(jointValue, fmt.Sprintf("%s_id", name2)) - if find { + idStr, ok = reflectutils.FindStructFieldInterface(jointValue, fmt.Sprintf("%s_id", alias)) + if ok { return idStr.(string) } return "" diff --git a/pkg/cloudcommon/db/opslog.go b/pkg/cloudcommon/db/opslog.go index 308ba46c27..2afaef2974 100644 --- a/pkg/cloudcommon/db/opslog.go +++ b/pkg/cloudcommon/db/opslog.go @@ -270,17 +270,17 @@ func (manager *SOpsLogManager) ListItemFilter(ctx context.Context, q *sqlchemy.S } objTypes := jsonutils.GetQueryStringArray(queryDict, "obj_type") if objTypes != nil && len(objTypes) > 0 { - queryDict.Remove("obj_type", false) + queryDict.RemoveIgnoreCase("obj_type") q = q.Filter(sqlchemy.In(q.Field("obj_type"), objTypes)) } objIds := jsonutils.GetQueryStringArray(queryDict, "obj_id") if objIds != nil && len(objIds) > 0 { - queryDict.Remove("obj_id", false) + queryDict.RemoveIgnoreCase("obj_id") q = q.Filter(sqlchemy.OR(sqlchemy.In(q.Field("obj_id"), objIds), sqlchemy.In(q.Field("obj_name"), objIds))) } action := jsonutils.GetQueryStringArray(queryDict, "action") if action != nil && len(action) > 0 { - queryDict.Remove("action", false) + queryDict.RemoveIgnoreCase("action") q = q.Filter(sqlchemy.In(q.Field("action"), action)) } if !userCred.IsSystemAdmin() { diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 7a228421b8..9df09b6a2c 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -198,7 +198,7 @@ func (manager *SGuestManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQ isBMstr, _ := queryDict.GetString("baremetal") if len(isBMstr) > 0 && utils.ToBool(isBMstr) { queryDict.Add(jsonutils.NewString(HYPERVISOR_BAREMETAL), "hypervisor") - queryDict.Remove("baremetal", true) + queryDict.Remove("baremetal") } hypervisor, _ := queryDict.GetString("hypervisor") if len(hypervisor) > 0 { diff --git a/pkg/compute/models/hostwires.go b/pkg/compute/models/hostwires.go index c9b684f9eb..e2e25bf009 100644 --- a/pkg/compute/models/hostwires.go +++ b/pkg/compute/models/hostwires.go @@ -18,8 +18,15 @@ var HostwireManager *SHostwireManager func init() { db.InitManager(func() { - HostwireManager = &SHostwireManager{SHostJointsManager: NewHostJointsManager(SHostwire{}, - "hostwires_tbl", "hostwire", "hostwires", WireManager)} + HostwireManager = &SHostwireManager{ + SHostJointsManager: NewHostJointsManager( + SHostwire{}, + "hostwires_tbl", + "hostwire", + "hostwires", + WireManager, + ), + } }) } diff --git a/pkg/compute/models/storagecachedimages.go b/pkg/compute/models/storagecachedimages.go index 627101bb50..90fac3445f 100644 --- a/pkg/compute/models/storagecachedimages.go +++ b/pkg/compute/models/storagecachedimages.go @@ -36,7 +36,16 @@ var StoragecachedimageManager *SStoragecachedimageManager func init() { db.InitManager(func() { - StoragecachedimageManager = &SStoragecachedimageManager{SJointResourceBaseManager: db.NewJointResourceBaseManager(SStoragecachedimage{}, "storagecachedimages_tbl", "storagecachedimage", "storagecachedimages", StoragecacheManager, CachedimageManager)} + StoragecachedimageManager = &SStoragecachedimageManager{ + SJointResourceBaseManager: db.NewJointResourceBaseManager( + SStoragecachedimage{}, + "storagecachedimages_tbl", + "storagecachedimage", + "storagecachedimages", + StoragecacheManager, + CachedimageManager, + ), + } }) } diff --git a/pkg/mcclient/modules/mod_images.go b/pkg/mcclient/modules/mod_images.go index 5e676bf469..9264241e0d 100644 --- a/pkg/mcclient/modules/mod_images.go +++ b/pkg/mcclient/modules/mod_images.go @@ -119,7 +119,7 @@ func (this *ImageManager) List(session *mcclient.ClientSession, params jsonutils path = fmt.Sprintf("%s/detail", path) } dictparams, _ := params.(*jsonutils.JSONDict) - dictparams.Remove("details", false) + dictparams.RemoveIgnoreCase("details") qs := params.QueryString() if len(qs) > 0 { path = fmt.Sprintf("%s?%s", path, qs) diff --git a/pkg/mcclient/modules/mod_usages.go b/pkg/mcclient/modules/mod_usages.go index 7945dee8e3..ff9daa18ae 100644 --- a/pkg/mcclient/modules/mod_usages.go +++ b/pkg/mcclient/modules/mod_usages.go @@ -20,8 +20,8 @@ func (this *UsageManager) GetGeneralUsage(session *mcclient.ClientSession, param url = fmt.Sprintf("%s/%s/%s", url, range_type, range_id) } dict := params.(*jsonutils.JSONDict) - dict.Remove("range_type", true) - dict.Remove("range_id", true) + dict.Remove("range_type") + dict.Remove("range_id") qs := dict.QueryString() if len(qs) > 0 { url = fmt.Sprintf("%s?%s", url, qs) diff --git a/pkg/scheduler/db/models/base_test.go b/pkg/scheduler/db/models/base_test.go index 4a2deaf646..8c084510be 100644 --- a/pkg/scheduler/db/models/base_test.go +++ b/pkg/scheduler/db/models/base_test.go @@ -155,7 +155,8 @@ func TestGuestDisk(t *testing.T) { if err != nil { t.Fatal(err) } - size, err := gst.(*Guest).DiskSize() + onlyLocal := false + size, err := gst.(*Guest).DiskSize(onlyLocal) if err != nil { t.Fatal(err) } diff --git a/vendor/github.com/yunionio/jsonutils/access.go b/vendor/github.com/yunionio/jsonutils/access.go index 30f63b42a7..57642a0442 100644 --- a/vendor/github.com/yunionio/jsonutils/access.go +++ b/vendor/github.com/yunionio/jsonutils/access.go @@ -53,7 +53,25 @@ func (this *JSONDict) Set(key string, value JSONObject) { this.data[key] = value } -func (this *JSONDict) Remove(key string, caseSensitive bool) bool { +func (this *JSONDict) Remove(key string) bool { + return this.remove(key, true) +} + +func (this *JSONDict) RemoveIgnoreCase(key string) bool { + someRemoved := false + for { + removed := this.remove(key, false) + if !removed { + break + } + if !someRemoved { + someRemoved = true + } + } + return someRemoved +} + +func (this *JSONDict) remove(key string, caseSensitive bool) bool { _, rk, ok := dictGet(this.data, key, caseSensitive) if ok { delete(this.data, rk)