[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
ojan at chromium.org
ojan at chromium.org
Wed Dec 22 15:06:21 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 2bfd1a1e21f10351bf73f2997804bf06dc5a3a9f
Author: ojan at chromium.org <ojan at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed Oct 27 23:33:26 2010 +0000
2010-10-27 Ojan Vafai <ojan at chromium.org>
Reviewed by Dimitri Glazkov.
[chromium] Make the test results server store which master the bot is on
https://bugs.webkit.org/show_bug.cgi?id=48478
The chromium bots recently changed so that there are multiple slaves with
the same name on different masters. Up till now, the test results server
assumed slave names were unique. Adds a master field to the file in order
to distinguish.
Also, for files that currently lack a master or testtype, set them appropriately.
* TestResultServer/handlers/testfilehandler.py:
* TestResultServer/index.yaml:
* TestResultServer/model/jsonresults.py:
* TestResultServer/model/testfile.py:
* TestResultServer/templates/showfilelist.html:
* TestResultServer/templates/uploadform.html:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@70724 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 86f39dc..431041c 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,24 @@
+2010-10-27 Ojan Vafai <ojan at chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [chromium] Make the test results server store which master the bot is on
+ https://bugs.webkit.org/show_bug.cgi?id=48478
+
+ The chromium bots recently changed so that there are multiple slaves with
+ the same name on different masters. Up till now, the test results server
+ assumed slave names were unique. Adds a master field to the file in order
+ to distinguish.
+
+ Also, for files that currently lack a master or testtype, set them appropriately.
+
+ * TestResultServer/handlers/testfilehandler.py:
+ * TestResultServer/index.yaml:
+ * TestResultServer/model/jsonresults.py:
+ * TestResultServer/model/testfile.py:
+ * TestResultServer/templates/showfilelist.html:
+ * TestResultServer/templates/uploadform.html:
+
2010-10-26 Darin Adler <darin at apple.com>
Reviewed by Sam Weinig.
diff --git a/WebKitTools/TestResultServer/handlers/testfilehandler.py b/WebKitTools/TestResultServer/handlers/testfilehandler.py
index 4d1320f..d817890 100644
--- a/WebKitTools/TestResultServer/handlers/testfilehandler.py
+++ b/WebKitTools/TestResultServer/handlers/testfilehandler.py
@@ -36,6 +36,7 @@ from google.appengine.ext.webapp import template
from model.jsonresults import JsonResults
from model.testfile import TestFile
+PARAM_MASTER = "master"
PARAM_BUILDER = "builder"
PARAM_DIR = "dir"
PARAM_FILE = "file"
@@ -51,25 +52,26 @@ class DeleteFile(webapp.RequestHandler):
def get(self):
key = self.request.get(PARAM_KEY)
+ master = self.request.get(PARAM_MASTER)
builder = self.request.get(PARAM_BUILDER)
test_type = self.request.get(PARAM_TEST_TYPE)
name = self.request.get(PARAM_NAME)
logging.debug(
- "Deleting File, builder: %s, test_type: %s, name: %s, key: %s.",
- builder, test_type, name, key)
+ "Deleting File, master: %s, builder: %s, test_type: %s, name: %s, key: %s.",
+ master, builder, test_type, name, key)
- TestFile.delete_file(key, builder, test_type, name, 100)
+ TestFile.delete_file(key, master, builder, test_type, name, 100)
# Display file list after deleting the file.
- self.redirect("/testfile?builder=%s&testtype=%s&name=%s"
- % (builder, test_type, name))
+ self.redirect("/testfile?master=%s&builder=%s&testtype=%s&name=%s"
+ % (master, builder, test_type, name))
class GetFile(webapp.RequestHandler):
"""Get file content or list of files for given builder and name."""
- def _get_file_list(self, builder, test_type, name):
+ def _get_file_list(self, master, builder, test_type, name):
"""Get and display a list of files that matches builder and file name.
Args:
@@ -79,15 +81,16 @@ class GetFile(webapp.RequestHandler):
"""
files = TestFile.get_files(
- builder, test_type, name, load_data=False, limit=100)
+ master, builder, test_type, name, load_data=False, limit=100)
if not files:
- logging.info("File not found, builder: %s, test_type: %s, name: %s.",
- builder, test_type, name)
+ logging.info("File not found, master: %s, builder: %s, test_type: %s, name: %s.",
+ master, builder, test_type, name)
self.response.out.write("File not found")
return
template_values = {
"admin": users.is_current_user_admin(),
+ "master": master,
"builder": builder,
"test_type": test_type,
"name": name,
@@ -96,7 +99,7 @@ class GetFile(webapp.RequestHandler):
self.response.out.write(template.render("templates/showfilelist.html",
template_values))
- def _get_file_content(self, builder, test_type, name):
+ def _get_file_content(self, master, builder, test_type, name):
"""Return content of the file that matches builder and file name.
Args:
@@ -106,15 +109,15 @@ class GetFile(webapp.RequestHandler):
"""
files = TestFile.get_files(
- builder, test_type, name, load_data=True, limit=1)
+ master, builder, test_type, name, load_data=True, limit=1)
if not files:
- logging.info("File not found, builder: %s, test_type: %s, name: %s.",
- builder, test_type, name)
+ logging.info("File not found, master %s, builder: %s, test_type: %s, name: %s.",
+ master, builder, test_type, name)
return None
return files[0].data
- def _get_test_list_json(self, builder, test_type):
+ def _get_test_list_json(self, master, builder, test_type):
"""Return json file with test name list only, do not include test
results and other non-test-data .
@@ -123,13 +126,14 @@ class GetFile(webapp.RequestHandler):
test_type: type of test results.
"""
- json = self._get_file_content(builder, test_type, "results.json")
+ json = self._get_file_content(master, builder, test_type, "results.json")
if not json:
return None
return JsonResults.get_test_list(builder, json)
def get(self):
+ master = self.request.get(PARAM_MASTER)
builder = self.request.get(PARAM_BUILDER)
test_type = self.request.get(PARAM_TEST_TYPE)
name = self.request.get(PARAM_NAME)
@@ -137,19 +141,19 @@ class GetFile(webapp.RequestHandler):
test_list_json = self.request.get(PARAM_TEST_LIST_JSON)
logging.debug(
- "Getting files, builder: %s, test_type: %s, name: %s.",
- builder, test_type, name)
+ "Getting files, master %s, builder: %s, test_type: %s, name: %s.",
+ master, builder, test_type, name)
# If parameter "dir" is specified or there is no builder or filename
# specified in the request, return list of files, otherwise, return
# file content.
if dir or not builder or not name:
- return self._get_file_list(builder, test_type, name)
+ return self._get_file_list(master, builder, test_type, name)
if name == "results.json" and test_list_json:
- json = self._get_test_list_json(builder, test_type)
+ json = self._get_test_list_json(master, builder, test_type)
else:
- json = self._get_file_content(builder, test_type, name)
+ json = self._get_file_content(master, builder, test_type, name)
if json:
self.response.headers["Content-Type"] = "text/plain; charset=utf-8"
@@ -170,12 +174,13 @@ class Upload(webapp.RequestHandler):
self.response.out.write("FAIL: missing builder parameter.")
return
+ master = self.request.get(PARAM_MASTER)
test_type = self.request.get(PARAM_TEST_TYPE)
incremental = self.request.get(PARAM_INCREMENTAL)
logging.debug(
- "Processing upload request, builder: %s, test_type: %s.",
- builder, test_type)
+ "Processing upload request, master: %s, builder: %s, test_type: %s.",
+ master, builder, test_type)
# There are two possible types of each file_params in the request:
# one file item or a list of file items.
@@ -193,15 +198,15 @@ class Upload(webapp.RequestHandler):
if ((incremental and filename == "results.json") or
(filename == "incremental_results.json")):
# Merge incremental json results.
- saved_file = JsonResults.update(builder, test_type, file.value)
+ saved_file = JsonResults.update(master, builder, test_type, file.value)
else:
saved_file = TestFile.update(
- builder, test_type, file.filename, file.value)
+ master, builder, test_type, file.filename, file.value)
if not saved_file:
errors.append(
- "Upload failed, builder: %s, test_type: %s, name: %s." %
- (builder, test_type, file.filename))
+ "Upload failed, master: %s, builder: %s, test_type: %s, name: %s." %
+ (master, builder, test_type, file.filename))
if errors:
messages = "FAIL: " + "; ".join(errors)
diff --git a/WebKitTools/TestResultServer/index.yaml b/WebKitTools/TestResultServer/index.yaml
index 50284dc..a7d3e48 100644
--- a/WebKitTools/TestResultServer/index.yaml
+++ b/WebKitTools/TestResultServer/index.yaml
@@ -25,6 +25,15 @@ indexes:
- kind: TestFile
properties:
- name: builder
+ - name: master
+ - name: name
+ - name: test_type
+ - name: date
+ direction: desc
+
+- kind: TestFile
+ properties:
+ - name: builder
- name: name
- name: date
direction: desc
@@ -39,6 +48,12 @@ indexes:
- kind: TestFile
properties:
+ - name: master
+ - name: date
+ direction: desc
+
+- kind: TestFile
+ properties:
- name: name
- name: date
direction: desc
diff --git a/WebKitTools/TestResultServer/model/jsonresults.py b/WebKitTools/TestResultServer/model/jsonresults.py
index 4520e96..879cf78 100755
--- a/WebKitTools/TestResultServer/model/jsonresults.py
+++ b/WebKitTools/TestResultServer/model/jsonresults.py
@@ -391,7 +391,7 @@ class JsonResults(object):
return cls._generate_file_data(aggregated_json, sort_keys)
@classmethod
- def update(cls, builder, test_type, incremental):
+ def update(cls, master, builder, test_type, incremental):
"""Update datastore json file data by merging it with incremental json
file.
@@ -405,13 +405,23 @@ class JsonResults(object):
None on failure.
"""
- files = TestFile.get_files(builder, test_type, JSON_RESULTS_FILE)
+ files = TestFile.get_files(master, builder, test_type, JSON_RESULTS_FILE)
if files:
file = files[0]
+
+ # FIXME: This is here to fill in the missing master/test_type for the already uploaded
+ # results files, which all are layout_tests from the chromium master.
+ # Remove this once all the builders upload with the master/test_type field set.
+ if not file.master:
+ file.master = "chromium"
+ if not file.test_type:
+ file.test_type = "layout-tests"
+
new_results = cls.merge(builder, file.data, incremental)
else:
# Use the incremental data if there is no aggregated file to merge.
file = TestFile()
+ file.master = master
file.builder = builder
file.test_type = test_type
file.name = JSON_RESULTS_FILE
diff --git a/WebKitTools/TestResultServer/model/testfile.py b/WebKitTools/TestResultServer/model/testfile.py
index ce92b65..9d57023 100644
--- a/WebKitTools/TestResultServer/model/testfile.py
+++ b/WebKitTools/TestResultServer/model/testfile.py
@@ -35,11 +35,12 @@ from model.datastorefile import DataStoreFile
class TestFile(DataStoreFile):
+ master = db.StringProperty()
builder = db.StringProperty()
test_type = db.StringProperty()
@classmethod
- def delete_file(cls, key, builder, test_type, name, limit):
+ def delete_file(cls, key, master, builder, test_type, name, limit):
if key:
file = db.get(key)
if not file:
@@ -48,10 +49,10 @@ class TestFile(DataStoreFile):
file._delete_all()
else:
- files = cls.get_files(builder, test_type, name, limit)
+ files = cls.get_files(master, builder, test_type, name, limit)
if not files:
logging.warning(
- "File not found, builder: %s, test_type:%s, name: %s.",
+ "File not found, master: %s, builder: %s, test_type:%s, name: %s.",
builder, test_type, name)
return False
@@ -61,8 +62,10 @@ class TestFile(DataStoreFile):
return True
@classmethod
- def get_files(cls, builder, test_type, name, load_data=True, limit=1):
+ def get_files(cls, master, builder, test_type, name, load_data=True, limit=1):
query = TestFile.all()
+ if master:
+ query = query.filter("master =", master)
if builder:
query = query.filter("builder =", builder)
if test_type:
@@ -78,8 +81,9 @@ class TestFile(DataStoreFile):
return files
@classmethod
- def add_file(cls, builder, test_type, name, data):
+ def add_file(cls, master, builder, test_type, name, data):
file = TestFile()
+ file.master = master
file.builder = builder
file.test_type = test_type
file.name = name
@@ -88,24 +92,33 @@ class TestFile(DataStoreFile):
return None
logging.info(
- "File saved, builder: %s, test_type: %s, name: %s, key: %s.",
- builder, test_type, file.name, str(file.data_keys))
+ "File saved, master: %s, builder: %s, test_type: %s, name: %s, key: %s.",
+ master, builder, test_type, file.name, str(file.data_keys))
return file
@classmethod
- def update(cls, builder, test_type, name, data):
- files = cls.get_files(builder, test_type, name)
+ def update(cls, master, builder, test_type, name, data):
+ files = cls.get_files(master, builder, test_type, name)
if not files:
- return cls.add_file(builder, test_type, name, data)
+ return cls.add_file(master, builder, test_type, name, data)
file = files[0]
+
+ # FIXME: This is here to fill in the missing master/test_type for the already uploaded
+ # results files, which all are layout_tests from the chromium master.
+ # Remove this once all the builders upload with the master/test_type field set.
+ if not file.master:
+ file.master = "chromium"
+ if not file.test_type:
+ file.test_type = "layout-tests"
+
if not file.save(data):
return None
logging.info(
- "File replaced, builder: %s, test_type: %s, name: %s, data key: %s.",
- builder, test_type, file.name, str(file.data_keys))
+ "File replaced, master: %s, builder: %s, test_type: %s, name: %s, data key: %s.",
+ master, builder, test_type, file.name, str(file.data_keys))
return file
diff --git a/WebKitTools/TestResultServer/templates/showfilelist.html b/WebKitTools/TestResultServer/templates/showfilelist.html
index fa72b7f..d292fe2 100644
--- a/WebKitTools/TestResultServer/templates/showfilelist.html
+++ b/WebKitTools/TestResultServer/templates/showfilelist.html
@@ -13,6 +13,7 @@
<div>
<table>
<tr>
+ <th>Master</th>
<th>Builder</th>
<th>Test Type</th>
<th>File</th>
@@ -22,6 +23,10 @@
{% endif %}
{% for file in files %}
<tr>{% if file.builder and file.name %}
+ <td><a href="/testfile?master={{ file.master }}" >
+ {{ file.master }}
+ </a>
+ </td>
<td><a href="/testfile?builder={{ file.builder }}" >
{{ file.builder }}
</a>
diff --git a/WebKitTools/TestResultServer/templates/uploadform.html b/WebKitTools/TestResultServer/templates/uploadform.html
index 3506c9c..7427c85 100644
--- a/WebKitTools/TestResultServer/templates/uploadform.html
+++ b/WebKitTools/TestResultServer/templates/uploadform.html
@@ -10,12 +10,16 @@
<br>
<table>
<tr>
+ <td class=label><label>Master:</label></td>
+ <td><input class=inputtext type="text" name="master" placeholder="chromium"/></td>
+ </tr>
+ <tr>
<td class=label><label>Builder:</label></td>
- <td><input class=inputtext type="text" name="builder" value="Webkit"/></td>
+ <td><input class=inputtext type="text" name="builder" placeholder="Webkit"/></td>
</tr>
<tr>
<td class=label><label>Test Type:</label></td>
- <td><input class=inputtext type="text" name="testtype" value=""/></td>
+ <td><input class=inputtext type="text" name="testtype" placeholder="layout-tests"/></td>
</tr>
</table>
<br>
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list