fix(sqllab): infinite fetching status after results are landed (#25814)

This commit is contained in:
JUST.in DO IT 2023-11-01 05:03:03 -07:00 committed by GitHub
parent 1e37f0b417
commit 3f28eebb20
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 10 deletions

View File

@ -667,16 +667,27 @@ export default function sqlLabReducer(state = {}, action) {
[actions.CLEAR_INACTIVE_QUERIES]() {
const { queries } = state;
const cleanedQueries = Object.fromEntries(
Object.entries(queries).filter(([, query]) => {
if (
['running', 'pending'].includes(query.state) &&
Date.now() - query.startDttm > action.interval &&
query.progress === 0
) {
return false;
}
return true;
}),
Object.entries(queries)
.filter(([, query]) => {
if (
['running', 'pending'].includes(query.state) &&
Date.now() - query.startDttm > action.interval &&
query.progress === 0
) {
return false;
}
return true;
})
.map(([id, query]) => [
id,
{
...query,
state:
query.resultsKey && query.results?.status
? query.results.status
: query.state,
},
]),
);
return { ...state, queries: cleanedQueries };
},

View File

@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
import { QueryState } from '@superset-ui/core';
import sqlLabReducer from 'src/SqlLab/reducers/sqlLab';
import * as actions from 'src/SqlLab/actions/sqlLab';
import { table, initialState as mockState } from '../fixtures';
@ -388,4 +389,38 @@ describe('sqlLabReducer', () => {
newState = sqlLabReducer(newState, actions.refreshQueries({}));
});
});
describe('CLEAR_INACTIVE_QUERIES', () => {
let newState;
let query;
beforeEach(() => {
query = {
id: 'abcd',
changed_on: Date.now(),
startDttm: Date.now(),
state: QueryState.FETCHING,
progress: 100,
resultsKey: 'fa3dccc4-c549-4fbf-93c8-b4fb5a6fb8b7',
cached: false,
};
});
it('updates queries that have already been completed', () => {
newState = sqlLabReducer(
{
...newState,
queries: {
abcd: {
...query,
results: {
query_id: 1234,
status: QueryState.SUCCESS,
data: [],
},
},
},
},
actions.clearInactiveQueries(Date.now()),
);
expect(newState.queries.abcd.state).toBe(QueryState.SUCCESS);
});
});
});