Changeset 223132 in webkit
- Timestamp:
- Oct 10, 2017 8:58:42 AM (7 years ago)
- Location:
- trunk/Tools
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r223122 r223132 1 2017-10-10 Jonathan Bedard <jbedard@apple.com> 2 3 run-webkit-tests: upload test results to multiple servers 4 https://bugs.webkit.org/show_bug.cgi?id=178012 5 <rdar://problem/34856501> 6 7 Reviewed by Lucas Forschler. 8 9 Allowing uploading of results to multiple servers makes developing new results 10 databases much easier, and does not complicate uploading logic. 11 12 * Scripts/webkitpy/layout_tests/controllers/manager.py: 13 (Manager.upload_results): Iterate through the list of results server hosts and 14 send results to each one. 15 * Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py: 16 (JSONLayoutResultsGenerator.__init__): Accept a list of test results servers. 17 * Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py: 18 (JSONResultsGenerator.__init__): Accept a list of test results servers. 19 (JSONResultsGenerator.get_json): Pick which server to download from by index. 20 (JSONResultsGenerator.upload_json_files): Upload the JSON to each results server. 21 (JSONResultsGenerator._get_archived_json_results): Pick which server to download from. 22 * Scripts/webkitpy/layout_tests/run_webkit_tests.py: 23 (parse_args): Allow multiple test-results-servers and results-server-hosts to be 24 passed to run-webkit-tests. 25 1 26 2017-10-09 Youenn Fablet <youenn@apple.com> 2 27 -
trunk/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
r217572 r223132 461 461 462 462 def upload_results(self, results_json_path, start_time, end_time): 463 hostname = self._options.results_server_host 464 if not hostname: 463 if not self._options.results_server_host: 465 464 return 466 465 master_name = self._options.master_name … … 479 478 revisions[name] = {'revision': revision, 'timestamp': scm.timestamp_of_native_revision(path, revision)} 480 479 481 _log.info("Uploading JSON files for master: %s builder: %s build: %s slave: %s to %s", master_name, builder_name, build_number, build_slave, hostname) 482 483 attrs = [ 484 ('master', 'build.webkit.org' if master_name == 'webkit.org' else master_name), # FIXME: Pass in build.webkit.org. 485 ('builder_name', builder_name), 486 ('build_number', build_number), 487 ('build_slave', build_slave), 488 ('revisions', json.dumps(revisions)), 489 ('start_time', str(start_time)), 490 ('end_time', str(end_time)), 491 ] 492 493 uploader = FileUploader("http://%s/api/report" % hostname, 360) 494 try: 495 response = uploader.upload_as_multipart_form_data(self._filesystem, [('results.json', results_json_path)], attrs) 496 if not response: 497 _log.error("JSON upload failed; no response returned") 498 return 499 500 if response.code != 200: 501 _log.error("JSON upload failed, %d: '%s'" % (response.code, response.read())) 502 return 503 504 response_text = response.read() 480 for hostname in self._options.results_server_host: 481 _log.info("Uploading JSON files for master: %s builder: %s build: %s slave: %s to %s", master_name, builder_name, build_number, build_slave, hostname) 482 483 attrs = [ 484 ('master', 'build.webkit.org' if master_name == 'webkit.org' else master_name), # FIXME: Pass in build.webkit.org. 485 ('builder_name', builder_name), 486 ('build_number', build_number), 487 ('build_slave', build_slave), 488 ('revisions', json.dumps(revisions)), 489 ('start_time', str(start_time)), 490 ('end_time', str(end_time)), 491 ] 492 493 uploader = FileUploader("http://%s/api/report" % hostname, 360) 505 494 try: 506 response_json = json.loads(response_text) 507 except ValueError, error: 508 _log.error("JSON upload failed; failed to parse the response: %s", response_text) 509 return 510 511 if response_json['status'] != 'OK': 512 _log.error("JSON upload failed, %s: %s", response_json['status'], response_text) 513 return 514 515 _log.info("JSON uploaded.") 516 except Exception, error: 517 _log.error("Upload failed: %s" % error) 518 return 495 response = uploader.upload_as_multipart_form_data(self._filesystem, [('results.json', results_json_path)], attrs) 496 if not response: 497 _log.error("JSON upload failed; no response returned") 498 continue 499 500 if response.code != 200: 501 _log.error("JSON upload failed, %d: '%s'" % (response.code, response.read())) 502 continue 503 504 response_text = response.read() 505 try: 506 response_json = json.loads(response_text) 507 except ValueError, error: 508 _log.error("JSON upload failed; failed to parse the response: %s", response_text) 509 continue 510 511 if response_json['status'] != 'OK': 512 _log.error("JSON upload failed, %s: %s", response_json['status'], response_text) 513 continue 514 515 _log.info("JSON uploaded.") 516 except Exception, error: 517 _log.error("Upload failed: %s" % error) 518 continue 519 519 520 520 def _copy_results_html_file(self, destination_path): -
trunk/Tools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py
r163134 r223132 55 55 results_file_base_path, 56 56 expectations, run_results, 57 test_results_server =None, test_type="", master_name=""):57 test_results_servers=[], test_type="", master_name=""): 58 58 """Modifies the results.json file. Grabs it off the archive directory 59 59 if it is not found locally. … … 65 65 port, builder_name, build_name, build_number, results_file_base_path, 66 66 {}, port.repository_paths(), 67 test_results_server , test_type, master_name)67 test_results_servers, test_type, master_name) 68 68 69 69 self._expectations = expectations -
trunk/Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py
r202362 r223132 194 194 results_file_base_path, 195 195 test_results_map, svn_repositories=None, 196 test_results_server= None,196 test_results_server=[], 197 197 test_type="", 198 198 master_name=""): … … 230 230 self._svn_repositories = {} 231 231 232 self._test_results_server = test_results_server232 self._test_results_servers = test_results_server 233 233 self._test_type = test_type 234 234 self._master_name = master_name … … 251 251 write_json(self._filesystem, times, file_path) 252 252 253 def get_json(self ):253 def get_json(self, server_index=0): 254 254 """Gets the results for the results.json file.""" 255 255 results_json = {} 256 256 257 257 if not results_json: 258 results_json, error = self._get_archived_json_results( )258 results_json, error = self._get_archived_json_results(server_index=server_index) 259 259 if error: 260 260 # If there was an error don't write a results.json … … 300 300 """Uploads the given json_files to the test_results_server (if the 301 301 test_results_server is given).""" 302 if not self._test_results_server :302 if not self._test_results_servers: 303 303 return 304 304 … … 315 315 for file in json_files] 316 316 317 url = "http://%s/testfile/upload" % self._test_results_server 318 # Set uploading timeout in case appengine server is having problems. 319 # 120 seconds are more than enough to upload test results. 320 uploader = FileUploader(url, 120) 321 try: 322 response = uploader.upload_as_multipart_form_data(self._filesystem, files, attrs) 323 if response: 324 if response.code == 200: 325 _log.info("JSON uploaded.") 317 for test_results_server in self._test_results_servers: 318 url = "http://%s/testfile/upload" % test_results_server 319 # Set uploading timeout in case appengine server is having problems. 320 # 120 seconds are more than enough to upload test results. 321 uploader = FileUploader(url, 120) 322 try: 323 response = uploader.upload_as_multipart_form_data(self._filesystem, files, attrs) 324 if response: 325 if response.code == 200: 326 _log.info("JSON uploaded.") 327 else: 328 _log.debug("JSON upload failed, %d: '%s'" % (response.code, response.read())) 326 329 else: 327 _log.debug("JSON upload failed, %d: '%s'" % (response.code, response.read())) 328 else: 329 _log.error("JSON upload failed; no response returned") 330 except Exception, err: 331 _log.error("Upload failed: %s" % err) 332 return 330 _log.error("JSON upload failed; no response returned") 331 except Exception, err: 332 _log.error("Upload failed: %s" % err) 333 continue 333 334 334 335 def _get_test_timing(self, test_name): … … 391 392 return "" 392 393 393 def _get_archived_json_results(self ):394 def _get_archived_json_results(self, server_index=0): 394 395 """Download JSON file that only contains test 395 396 name list from test-results server. This is for generating incremental … … 404 405 error = None 405 406 406 if not self._test_results_server:407 if len(self._test_results_servers) <= server_index: 407 408 return {}, None 408 409 409 410 results_file_url = (self.URL_FOR_TEST_LIST_JSON % 410 (urllib2.quote(self._test_results_server ),411 (urllib2.quote(self._test_results_servers[server_index]), 411 412 urllib2.quote(self._builder_name), 412 413 self.RESULTS_FILENAME, -
trunk/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
r222709 r223132 332 332 optparse.make_option("--build-number", default="DUMMY_BUILD_NUMBER", 333 333 help=("The build number of the builder running this script.")), 334 optparse.make_option("--test-results-server", default="",334 optparse.make_option("--test-results-server", action="append", default=[], 335 335 help=("If specified, upload results json files to this appengine server.")), 336 optparse.make_option("--results-server-host", default="",336 optparse.make_option("--results-server-host", action="append", default=[], 337 337 help=("If specified, upload results JSON file to this results server.")), 338 338 optparse.make_option("--additional-repository-name",
Note: See TracChangeset
for help on using the changeset viewer.