Fix an issue where queries longer than 1 minute get stuck - Container 7.1. #6317 (#6491)

Fix an issue where queries longer than 1 minute get stuck - Container 7.1. #6317
Fix an issue where queries get stuck with auto-completion enabled. #6356
Fix an issue where queries can't complete execution. #6163
This commit is contained in:
Khushboo Vashi
2023-07-04 10:44:46 +05:30
committed by GitHub
parent cba689dcd9
commit 326dc2bbcc
16 changed files with 242 additions and 264 deletions

View File

@@ -39,3 +39,21 @@ def poll_for_query_results(tester, poll_url):
return True, response_data
elif status == 'NotConnected' or status == 'Cancel':
return False, None
def async_poll(tester, poll_url):
while True:
response = tester.get(poll_url)
if response.data:
response_data = json.loads(response.data.decode('utf-8'))
if response_data['success'] == 1 and 'data' in response_data\
and (
response_data['data']['status'] == 'NotInitialised' or
response_data['data']['status'] == 'Busy'
):
pass
else:
return response
else:
return response

View File

@@ -17,6 +17,8 @@ import json
from pgadmin.utils import server_utils
import secrets
import config
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
import async_poll
class TestDownloadCSV(BaseTestGenerator):
@@ -120,10 +122,8 @@ class TestDownloadCSV(BaseTestGenerator):
self.assertEqual(response.status_code, 200)
# Query tool polling
url = '/sqleditor/poll/{0}'.format(trans_id)
response = self.tester.get(url)
return response
return async_poll(tester=self.tester,
poll_url='/sqleditor/poll/{0}'.format(trans_id))
def runTest(self):
@@ -152,8 +152,8 @@ class TestDownloadCSV(BaseTestGenerator):
# Disable the console logging from Flask logger
self.app.logger.disabled = True
if not self.is_valid and self.is_valid_tx:
# The result will be null but status code will be 200
self.assertEqual(res.status_code, 200)
# The result will be null and status code will be 500
self.assertEqual(res.status_code, 500)
elif self.filename is None:
if self.download_as_txt:
with patch('pgadmin.tools.sqleditor.blueprint.'

View File

@@ -8,13 +8,15 @@
#
##########################################################################
import json
import secrets
from pgadmin.utils.route import BaseTestGenerator
from pgadmin.browser.server_groups.servers.databases.tests import utils as \
database_utils
from regression.python_test_utils import test_utils
import json
from pgadmin.utils import server_utils
import secrets
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
import async_poll
class TestEncodingCharset(BaseTestGenerator):
@@ -274,8 +276,9 @@ class TestEncodingCharset(BaseTestGenerator):
response = self.tester.post(url, data=json.dumps({"sql": sql}),
content_type='html/json')
self.assertEqual(response.status_code, 200)
url = '/sqleditor/poll/{0}'.format(self.trans_id)
response = self.tester.get(url)
response = async_poll(tester=self.tester,
poll_url='/sqleditor/poll/{0}'.format(
self.trans_id))
self.assertEqual(response.status_code, 200)
response_data = json.loads(response.data.decode('utf-8'))
self.assertEqual(response_data['data']['rows_fetched_to'], 1)

View File

@@ -15,6 +15,8 @@ from pgadmin.browser.server_groups.servers.databases.tests import utils as \
from pgadmin.utils.route import BaseTestGenerator
from regression import parent_node_dict
from regression.python_test_utils import test_utils as utils
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
import async_poll
class TestExplainPlan(BaseTestGenerator):
@@ -57,9 +59,10 @@ class TestExplainPlan(BaseTestGenerator):
self.assertEqual(response.status_code, 200)
# Query tool polling
url = '/sqleditor/poll/{0}'.format(self.trans_id)
response = self.tester.get(url)
response = async_poll(tester=self.tester,
poll_url='/sqleditor/poll/{0}'.format(
self.trans_id))
self.assertEqual(response.status_code, 200)
response_data = json.loads(response.data.decode('utf-8'))

View File

@@ -15,6 +15,8 @@ from pgadmin.utils.route import BaseTestGenerator
from regression import parent_node_dict
from regression.python_test_utils import test_utils as utils
import secrets
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
import async_poll
class TestPollQueryTool(BaseTestGenerator):
@@ -80,6 +82,7 @@ NOTICE: Hello, world!
url = '/sqleditor/initialize/sqleditor/{0}/{1}/{2}/{3}'.format(
self.trans_id, utils.SERVER_GROUP, self.server_id, self.db_id)
response = self.tester.post(url)
import time
self.assertEqual(response.status_code, 200)
cnt = 0
@@ -92,14 +95,13 @@ NOTICE: Hello, world!
self.assertEqual(response.status_code, 200)
# Query tool polling
url = '/sqleditor/poll/{0}'.format(self.trans_id)
response = self.tester.get(url)
response = async_poll(tester=self.tester,
poll_url='/sqleditor/poll/{0}'.format(
self.trans_id))
self.assertEqual(response.status_code, 200)
response_data = json.loads(response.data.decode('utf-8'))
if self.expected_message[cnt] is not None:
# Check the returned messages
self.assertIn(self.expected_message[cnt],
response_data['data']['additional_messages'])

View File

@@ -16,6 +16,8 @@ from pgadmin.utils import server_utils
from pgadmin.browser.server_groups.servers.databases.tests import utils as \
database_utils
import config
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
import async_poll
class TestSQLASCIIEncoding(BaseTestGenerator):
@@ -105,8 +107,9 @@ class TestSQLASCIIEncoding(BaseTestGenerator):
response = self.tester.post(url, data=json.dumps({"sql": sql}),
content_type='html/json')
self.assertEqual(response.status_code, 200)
url = '/sqleditor/poll/{0}'.format(self.trans_id)
response = self.tester.get(url)
response = async_poll(tester=self.tester,
poll_url='/sqleditor/poll/{0}'.format(
self.trans_id))
self.assertEqual(response.status_code, 200)
response_data = json.loads(response.data)
self.assertEqual(response_data['data']['rows_fetched_to'], 1)

View File

@@ -16,6 +16,8 @@ from pgadmin.browser.server_groups.servers.databases.tests import utils as \
from regression import parent_node_dict
from regression.python_test_utils import test_utils
from unittest.mock import patch
from pgadmin.tools.sqleditor.tests.execute_query_test_utils \
import async_poll
class TestViewData(BaseTestGenerator):
@@ -116,9 +118,9 @@ class TestViewData(BaseTestGenerator):
response = self.tester.get(url)
self.assertEqual(response.status_code, 200)
# Check the query result
url = '/sqleditor/poll/{0}'.format(self.trans_id)
response = self.tester.get(url)
response = async_poll(tester=self.tester,
poll_url='/sqleditor/poll/{0}'.format(
self.trans_id))
self.assertEqual(response.status_code, 200)
response_data = json.loads(response.data.decode('utf-8'))