db_dispatcher: delay compute to where needed

This commit is contained in:
Yousong Zhou
2020-11-26 21:18:57 +08:00
parent fd98674c92
commit a57a63bf58
+2 -2
View File
@@ -829,8 +829,6 @@ func getModelItemDetails(manager IModelManager, item IModel, ctx context.Context
func getItemDetails(manager IModelManager, item IModel, ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
metaFields, excludeFields := GetDetailFields(manager, userCred)
fieldFilter := jsonutils.GetQueryStringArray(query, "field")
getFields := mergeFields(metaFields, fieldFilter, IsAllowGet(rbacutils.ScopeSystem, userCred, item))
excludes, _, _ := stringutils2.Split(stringutils2.NewSortedStrings(excludeFields), getFields)
var sortedListFields stringutils2.SSortedStrings
if len(fieldFilter) > 0 {
@@ -841,6 +839,8 @@ func getItemDetails(manager IModelManager, item IModel, ctx context.Context, use
return nil, errors.Wrap(err, "FetchCustomizeColumns")
}
if len(extraRows) == 1 {
getFields := mergeFields(metaFields, fieldFilter, IsAllowGet(rbacutils.ScopeSystem, userCred, item))
excludes, _, _ := stringutils2.Split(stringutils2.NewSortedStrings(excludeFields), getFields)
return extraRows[0].CopyExcludes(excludes...), nil
}
log.Errorf("FetchCustomizeColumns return incorrect number of objects %d", len(extraRows))