From cae25f4b5a052b87c7f66f9eccc3ba38ae64bce9 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Mon, 27 Jul 2020 09:41:16 +0000 Subject: [PATCH] Revert "ui: Use `X-Range` header/meta to decide whether to reconcile or not" This reverts commit e9f6361d264a0bece6259ccbb5c438fe463d4c15. --- ui-v2/app/serializers/application.js | 9 +-------- ui-v2/app/services/client/http.js | 2 +- .../services/data-source/protocols/http.js | 19 +++++++++--------- ui-v2/app/services/repository.js | 3 +++ ui-v2/app/services/repository/intention.js | 9 +++++++++ ui-v2/app/services/repository/service.js | 7 +++++++ .../services/repository/type/event-source.js | 20 +++++++++---------- 7 files changed, 40 insertions(+), 29 deletions(-) diff --git a/ui-v2/app/serializers/application.js b/ui-v2/app/serializers/application.js index fb7397df8..af5f1c3d5 100644 --- a/ui-v2/app/serializers/application.js +++ b/ui-v2/app/serializers/application.js @@ -92,11 +92,7 @@ export default Serializer.extend({ // and they need the slug key AND potential namespace in order to // create the correct uid/fingerprint return { - [primaryKey]: this.fingerprint( - primaryKey, - slugKey, - data[DATACENTER_KEY] - )({ + [primaryKey]: this.fingerprint(primaryKey, slugKey, data[DATACENTER_KEY])({ [slugKey]: data[slugKey], [NSPACE_KEY]: data[NSPACE_KEY], })[primaryKey], @@ -155,9 +151,6 @@ export default Serializer.extend({ dc: headers[HTTP_HEADERS_DATACENTER.toLowerCase()], nspace: headers[HTTP_HEADERS_NAMESPACE.toLowerCase()], }; - if (typeof headers['x-range'] !== 'undefined') { - meta.range = headers['x-range']; - } if (requestType === 'query') { meta.date = this.timestamp(); payload.forEach(function(item) { diff --git a/ui-v2/app/services/client/http.js b/ui-v2/app/services/client/http.js index a9525afb3..e98ba07c5 100644 --- a/ui-v2/app/services/client/http.js +++ b/ui-v2/app/services/client/http.js @@ -68,7 +68,7 @@ const parseBody = function(strs, ...values) { return [body, ...values]; }; -const CLIENT_HEADERS = [CACHE_CONTROL, 'X-Request-ID', 'X-Range']; +const CLIENT_HEADERS = [CACHE_CONTROL, 'X-Request-ID']; export default Service.extend({ dom: service('dom'), connections: service('client/connections'), diff --git a/ui-v2/app/services/data-source/protocols/http.js b/ui-v2/app/services/data-source/protocols/http.js index 4dc7070a9..5a51a08f8 100644 --- a/ui-v2/app/services/data-source/protocols/http.js +++ b/ui-v2/app/services/data-source/protocols/http.js @@ -33,17 +33,16 @@ export default Service.extend({ // so we might get urls like //dc/services let find; const repo = this[model]; - configuration.createEvent = function(result = {}, configuration) { - const event = { - type: 'message', - data: result, + if (repo.shouldReconcile(src)) { + configuration.createEvent = function(result = {}, configuration) { + const event = { + type: 'message', + data: result, + }; + repo.reconcile(get(event, 'data.meta')); + return event; }; - const meta = get(event, 'data.meta') || {}; - if (typeof meta.range === 'undefined') { - repo.reconcile(meta); - } - return event; - }; + } let method, slug; switch (model) { case 'datacenters': diff --git a/ui-v2/app/services/repository.js b/ui-v2/app/services/repository.js index a48b4f13e..9e3e13971 100644 --- a/ui-v2/app/services/repository.js +++ b/ui-v2/app/services/repository.js @@ -15,6 +15,9 @@ export default Service.extend({ }, // store: service('store'), + shouldReconcile: function(method) { + return true; + }, reconcile: function(meta = {}) { // unload anything older than our current sync date/time if (typeof meta.date !== 'undefined') { diff --git a/ui-v2/app/services/repository/intention.js b/ui-v2/app/services/repository/intention.js index 72b8a6227..193ed9373 100644 --- a/ui-v2/app/services/repository/intention.js +++ b/ui-v2/app/services/repository/intention.js @@ -12,6 +12,15 @@ export default RepositoryService.extend({ delete obj.Namespace; return this._super(obj); }, + shouldReconcile: function(method) { + // TODO: This is to be switched out for something at an adapter level + // so it works for both methods of interacting with data-sources + switch (true) { + case method === 'findByService' || method.indexOf('for-service') !== -1: + return false; + } + return this._super(...arguments); + }, findByService: function(slug, dc, nspace, configuration = {}) { const query = { dc: dc, diff --git a/ui-v2/app/services/repository/service.js b/ui-v2/app/services/repository/service.js index 82c6f4f2d..a62a70a53 100644 --- a/ui-v2/app/services/repository/service.js +++ b/ui-v2/app/services/repository/service.js @@ -5,6 +5,13 @@ export default RepositoryService.extend({ getModelName: function() { return modelName; }, + shouldReconcile: function(method) { + switch (method) { + case 'findGatewayBySlug': + return false; + } + return this._super(...arguments); + }, findBySlug: function(slug, dc) { return this._super(...arguments).then(function(item) { // TODO: Move this to the Serializer diff --git a/ui-v2/app/services/repository/type/event-source.js b/ui-v2/app/services/repository/type/event-source.js index 6fffd39ad..79683aa39 100644 --- a/ui-v2/app/services/repository/type/event-source.js +++ b/ui-v2/app/services/repository/type/event-source.js @@ -9,17 +9,17 @@ import { cache as createCache, BlockingEventSource } from 'consul-ui/utils/dom/e const createProxy = function(repo, find, settings, cache, serialize = JSON.stringify) { const client = this.client; // custom createEvent, here used to reconcile the ember-data store for each tick - const createEvent = function(result = {}, configuration) { - const event = { - type: 'message', - data: result, + let createEvent; + if (repo.shouldReconcile(find)) { + createEvent = function(result = {}, configuration) { + const event = { + type: 'message', + data: result, + }; + repo.reconcile(get(event, 'data.meta')); + return event; }; - const meta = get(event, 'data.meta') || {}; - if (typeof meta.range === 'undefined') { - repo.reconcile(meta); - } - return event; - }; + } // proxied find*..(id, dc) return function() { const key = `${repo.getModelName()}.${find}.${serialize([...arguments])}`;