Skip to content

Commit 2d2d69e

Browse files
authored
🎨 [Frontend] Enh service calls: avoid request deduplication (#7487)
1 parent 4a00345 commit 2d2d69e

File tree

6 files changed

+49
-36
lines changed

6 files changed

+49
-36
lines changed

services/static-webserver/client/source/class/osparc/dashboard/CardBase.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -526,12 +526,7 @@ qx.Class.define("osparc.dashboard.CardBase", {
526526
});
527527

528528
if (resourceData["resourceType"] === "study" || resourceData["resourceType"] === "template") {
529-
const params = {
530-
url: {
531-
studyId: this.getResourceData()["uuid"]
532-
}
533-
};
534-
osparc.data.Resources.fetch("studies", "getServices", params)
529+
osparc.store.Services.getStudyServices(this.getResourceData()["uuid"])
535530
.then(resp => {
536531
const services = resp["services"];
537532
resourceData["services"] = services;

services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
194194
};
195195
Promise.all([
196196
osparc.data.Resources.fetch("studies", "getOne", params),
197-
osparc.data.Resources.fetch("studies", "getServices", params)
197+
osparc.store.Services.getStudyServices(this.__resourceData["uuid"]),
198198
])
199199
.then(values => {
200200
const updatedStudyData = values[0];

services/static-webserver/client/source/class/osparc/data/Resources.js

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -569,21 +569,6 @@ qx.Class.define("osparc.data.Resources", {
569569
* SERVICES
570570
*/
571571
"services": {
572-
useCache: true,
573-
idField: ["key", "version"],
574-
endpoints: {
575-
pricingPlans: {
576-
useCache: false,
577-
method: "GET",
578-
url: statics.API + "/catalog/services/{key}/{version}/pricing-plan"
579-
}
580-
}
581-
},
582-
583-
/*
584-
* SERVICES V2
585-
*/
586-
"servicesV2": {
587572
useCache: false, // handled in osparc.store.Services
588573
idField: ["key", "version"],
589574
endpoints: {
@@ -598,7 +583,12 @@ qx.Class.define("osparc.data.Resources", {
598583
patch: {
599584
method: "PATCH",
600585
url: statics.API + "/catalog/services/{key}/{version}"
601-
}
586+
},
587+
pricingPlans: {
588+
useCache: false,
589+
method: "GET",
590+
url: statics.API + "/catalog/services/{key}/{version}/pricing-plan"
591+
},
602592
}
603593
},
604594

services/static-webserver/client/source/class/osparc/metadata/ServicesInStudyUpdate.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,7 @@ qx.Class.define("osparc.metadata.ServicesInStudyUpdate", {
5757
});
5858
this._introText.add(introText);
5959
let msg = "";
60-
const params = {
61-
url: {
62-
studyId: this._studyData["uuid"]
63-
}
64-
};
65-
osparc.data.Resources.fetch("studies", "getServices", params)
60+
osparc.store.Services.getStudyServices(this._studyData["uuid"])
6661
.then(resp => {
6762
const services = resp["services"];
6863
if (osparc.study.Utils.getCantExecuteServices(services).length) {

services/static-webserver/client/source/class/osparc/store/Services.js

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ qx.Class.define("osparc.store.Services", {
2020

2121
statics: {
2222
__servicesCached: {},
23+
__servicesPromisesCached: {},
24+
__studyServicesPromisesCached: {},
2325

2426
getServicesLatest: function(useCache = true) {
2527
return new Promise(resolve => {
@@ -30,7 +32,7 @@ qx.Class.define("osparc.store.Services", {
3032
return;
3133
}
3234

33-
osparc.data.Resources.getInstance().getAllPages("servicesV2")
35+
osparc.data.Resources.getInstance().getAllPages("services")
3436
.then(servicesArray => {
3537
const servicesObj = osparc.service.Utils.convertArrayToObject(servicesArray);
3638
this.__addHits(servicesObj);
@@ -99,6 +101,11 @@ qx.Class.define("osparc.store.Services", {
99101
},
100102

101103
getService: function(key, version, useCache = true) {
104+
// avoid request deduplication
105+
if (key in this.__servicesPromisesCached && version in this.__servicesPromisesCached[key]) {
106+
return this.__servicesPromisesCached[key][version];
107+
}
108+
102109
return new Promise((resolve, reject) => {
103110
if (
104111
useCache &&
@@ -109,10 +116,13 @@ qx.Class.define("osparc.store.Services", {
109116
return;
110117
}
111118

119+
if (!(key in this.__servicesPromisesCached)) {
120+
this.__servicesPromisesCached[key] = {};
121+
}
112122
const params = {
113123
url: osparc.data.Resources.getServiceUrl(key, version)
114124
};
115-
osparc.data.Resources.fetch("servicesV2", "getOne", params)
125+
this.__servicesPromisesCached[key][version] = osparc.data.Resources.fetch("services", "getOne", params)
116126
.then(service => {
117127
this.__addHit(service);
118128
this.__addTSRInfo(service);
@@ -121,12 +131,36 @@ qx.Class.define("osparc.store.Services", {
121131
resolve(service);
122132
})
123133
.catch(err => {
134+
// store it in cache to avoid asking again
135+
this.__servicesCached[key][version] = null;
124136
console.error(err);
125137
reject();
138+
})
139+
.finally(() => {
140+
delete this.__servicesPromisesCached[key][version];
126141
});
127142
});
128143
},
129144

145+
getStudyServices: function(studyId) {
146+
// avoid request deduplication
147+
if (studyId in this.__studyServicesPromisesCached) {
148+
return this.__studyServicesPromisesCached[studyId];
149+
}
150+
151+
const params = {
152+
url: {
153+
studyId
154+
}
155+
};
156+
this.__studyServicesPromisesCached[studyId] = osparc.data.Resources.fetch("studies", "getServices", params)
157+
.finally(() => {
158+
delete this.__studyServicesPromisesCached[studyId];
159+
});
160+
161+
return this.__studyServicesPromisesCached[studyId]
162+
},
163+
130164
__getAllVersions: function(key) {
131165
const services = this.__servicesCached;
132166
let versions = [];
@@ -235,7 +269,7 @@ qx.Class.define("osparc.store.Services", {
235269
url: osparc.data.Resources.getServiceUrl(key, version),
236270
data: patchData
237271
};
238-
return osparc.data.Resources.fetch("servicesV2", "patch", params)
272+
return osparc.data.Resources.fetch("services", "patch", params)
239273
.then(() => {
240274
this.__servicesCached[key][version][fieldKey] = value;
241275
serviceData[fieldKey] = value;

services/static-webserver/client/source/class/osparc/study/Utils.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,12 +342,11 @@ qx.Class.define("osparc.study.Utils", {
342342
return Object.values(studyData["workbench"]).filter(nodeData => !osparc.data.model.Node.isFrontend(nodeData));
343343
},
344344

345-
guessIcon: async function(studyData) {
345+
guessIcon: function(studyData) {
346346
if (osparc.product.Utils.isProduct("tis") || osparc.product.Utils.isProduct("tiplite")) {
347-
return this.__guessTIPIcon(studyData);
347+
return new Promise(resolve => resolve(this.__guessTIPIcon(studyData)));
348348
}
349-
const icon = await this.__guessIcon(studyData);
350-
return icon;
349+
return this.__guessIcon(studyData);
351350
},
352351

353352
__guessIcon: function(studyData) {

0 commit comments

Comments
 (0)