Changeset 70724 in webkit


Ignore:
Timestamp:
Oct 27, 2010 4:33:26 PM (13 years ago)
Author:
ojan@chromium.org
Message:

2010-10-27 Ojan Vafai <ojan@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:
Location:
trunk/WebKitTools
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKitTools/ChangeLog

    r70723 r70724  
     12010-10-27  Ojan Vafai  <ojan@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        [chromium] Make the test results server store which master the bot is on
     6        https://bugs.webkit.org/show_bug.cgi?id=48478
     7
     8        The chromium bots recently changed so that there are multiple slaves with
     9        the same name on different masters. Up till now, the test results server
     10        assumed slave names were unique. Adds a master field to the file in order
     11        to distinguish.
     12
     13        Also, for files that currently lack a master or testtype, set them appropriately.
     14
     15        * TestResultServer/handlers/testfilehandler.py:
     16        * TestResultServer/index.yaml:
     17        * TestResultServer/model/jsonresults.py:
     18        * TestResultServer/model/testfile.py:
     19        * TestResultServer/templates/showfilelist.html:
     20        * TestResultServer/templates/uploadform.html:
     21
    1222010-10-26  Darin Adler  <darin@apple.com>
    223
  • trunk/WebKitTools/TestResultServer/handlers/testfilehandler.py

    r65567 r70724  
    3737from model.testfile import TestFile
    3838
     39PARAM_MASTER = "master"
    3940PARAM_BUILDER = "builder"
    4041PARAM_DIR = "dir"
     
    5253    def get(self):
    5354        key = self.request.get(PARAM_KEY)
     55        master = self.request.get(PARAM_MASTER)
    5456        builder = self.request.get(PARAM_BUILDER)
    5557        test_type = self.request.get(PARAM_TEST_TYPE)
     
    5759
    5860        logging.debug(
    59             "Deleting File, builder: %s, test_type: %s, name: %s, key: %s.",
    60             builder, test_type, name, key)
    61 
    62         TestFile.delete_file(key, builder, test_type, name, 100)
     61            "Deleting File, master: %s, builder: %s, test_type: %s, name: %s, key: %s.",
     62            master, builder, test_type, name, key)
     63
     64        TestFile.delete_file(key, master, builder, test_type, name, 100)
    6365
    6466        # Display file list after deleting the file.
    65         self.redirect("/testfile?builder=%s&testtype=%s&name=%s"
    66             % (builder, test_type, name))
     67        self.redirect("/testfile?master=%s&builder=%s&testtype=%s&name=%s"
     68            % (master, builder, test_type, name))
    6769
    6870
     
    7072    """Get file content or list of files for given builder and name."""
    7173
    72     def _get_file_list(self, builder, test_type, name):
     74    def _get_file_list(self, master, builder, test_type, name):
    7375        """Get and display a list of files that matches builder and file name.
    7476
     
    8082
    8183        files = TestFile.get_files(
    82             builder, test_type, name, load_data=False, limit=100)
     84            master, builder, test_type, name, load_data=False, limit=100)
    8385        if not files:
    84             logging.info("File not found, builder: %s, test_type: %s, name: %s.",
    85                          builder, test_type, name)
     86            logging.info("File not found, master: %s, builder: %s, test_type: %s, name: %s.",
     87                         master, builder, test_type, name)
    8688            self.response.out.write("File not found")
    8789            return
     
    8991        template_values = {
    9092            "admin": users.is_current_user_admin(),
     93            "master": master,
    9194            "builder": builder,
    9295            "test_type": test_type,
     
    97100                                                template_values))
    98101
    99     def _get_file_content(self, builder, test_type, name):
     102    def _get_file_content(self, master, builder, test_type, name):
    100103        """Return content of the file that matches builder and file name.
    101104
     
    107110
    108111        files = TestFile.get_files(
    109             builder, test_type, name, load_data=True, limit=1)
     112            master, builder, test_type, name, load_data=True, limit=1)
    110113        if not files:
    111             logging.info("File not found, builder: %s, test_type: %s, name: %s.",
    112                          builder, test_type, name)
     114            logging.info("File not found, master %s, builder: %s, test_type: %s, name: %s.",
     115                         master, builder, test_type, name)
    113116            return None
    114117
    115118        return files[0].data
    116119
    117     def _get_test_list_json(self, builder, test_type):
     120    def _get_test_list_json(self, master, builder, test_type):
    118121        """Return json file with test name list only, do not include test
    119122           results and other non-test-data .
     
    124127        """
    125128
    126         json = self._get_file_content(builder, test_type, "results.json")
     129        json = self._get_file_content(master, builder, test_type, "results.json")
    127130        if not json:
    128131            return None
     
    131134
    132135    def get(self):
     136        master = self.request.get(PARAM_MASTER)
    133137        builder = self.request.get(PARAM_BUILDER)
    134138        test_type = self.request.get(PARAM_TEST_TYPE)
     
    138142
    139143        logging.debug(
    140             "Getting files, builder: %s, test_type: %s, name: %s.",
    141             builder, test_type, name)
     144            "Getting files, master %s, builder: %s, test_type: %s, name: %s.",
     145            master, builder, test_type, name)
    142146
    143147        # If parameter "dir" is specified or there is no builder or filename
     
    145149        # file content.
    146150        if dir or not builder or not name:
    147             return self._get_file_list(builder, test_type, name)
     151            return self._get_file_list(master, builder, test_type, name)
    148152
    149153        if name == "results.json" and test_list_json:
    150             json = self._get_test_list_json(builder, test_type)
     154            json = self._get_test_list_json(master, builder, test_type)
    151155        else:
    152             json = self._get_file_content(builder, test_type, name)
     156            json = self._get_file_content(master, builder, test_type, name)
    153157
    154158        if json:
     
    171175            return
    172176
     177        master = self.request.get(PARAM_MASTER)
    173178        test_type = self.request.get(PARAM_TEST_TYPE)
    174179        incremental = self.request.get(PARAM_INCREMENTAL)
    175180
    176181        logging.debug(
    177             "Processing upload request, builder: %s, test_type: %s.",
    178             builder, test_type)
     182            "Processing upload request, master: %s, builder: %s, test_type: %s.",
     183            master, builder, test_type)
    179184
    180185        # There are two possible types of each file_params in the request:
     
    194199                (filename == "incremental_results.json")):
    195200                # Merge incremental json results.
    196                 saved_file = JsonResults.update(builder, test_type, file.value)
     201                saved_file = JsonResults.update(master, builder, test_type, file.value)
    197202            else:
    198203                saved_file = TestFile.update(
    199                     builder, test_type, file.filename, file.value)
     204                    master, builder, test_type, file.filename, file.value)
    200205
    201206            if not saved_file:
    202207                errors.append(
    203                     "Upload failed, builder: %s, test_type: %s, name: %s." %
    204                     (builder, test_type, file.filename))
     208                    "Upload failed, master: %s, builder: %s, test_type: %s, name: %s." %
     209                    (master, builder, test_type, file.filename))
    205210
    206211        if errors:
  • trunk/WebKitTools/TestResultServer/index.yaml

    r56635 r70724  
    2626  properties:
    2727  - name: builder
     28  - name: master
     29  - name: name
     30  - name: test_type
     31  - name: date
     32    direction: desc
     33
     34- kind: TestFile
     35  properties:
     36  - name: builder
    2837  - name: name
    2938  - name: date
     
    4049- kind: TestFile
    4150  properties:
     51  - name: master
     52  - name: date
     53    direction: desc
     54
     55- kind: TestFile
     56  properties:
    4257  - name: name
    4358  - name: date
  • trunk/WebKitTools/TestResultServer/model/jsonresults.py

    r66953 r70724  
    392392
    393393    @classmethod
    394     def update(cls, builder, test_type, incremental):
     394    def update(cls, master, builder, test_type, incremental):
    395395        """Update datastore json file data by merging it with incremental json
    396396           file.
     
    406406        """
    407407
    408         files = TestFile.get_files(builder, test_type, JSON_RESULTS_FILE)
     408        files = TestFile.get_files(master, builder, test_type, JSON_RESULTS_FILE)
    409409        if files:
    410410            file = files[0]
     411
     412            # FIXME: This is here to fill in the missing master/test_type for the already uploaded
     413            # results files, which all are layout_tests from the chromium master.
     414            # Remove this once all the builders upload with the master/test_type field set.
     415            if not file.master:
     416                file.master = "chromium"
     417            if not file.test_type:
     418                file.test_type = "layout-tests"
     419
    411420            new_results = cls.merge(builder, file.data, incremental)
    412421        else:
    413422            # Use the incremental data if there is no aggregated file to merge.
    414423            file = TestFile()
     424            file.master = master
    415425            file.builder = builder
    416426            file.test_type = test_type
  • trunk/WebKitTools/TestResultServer/model/testfile.py

    r64687 r70724  
    3636
    3737class TestFile(DataStoreFile):
     38    master = db.StringProperty()
    3839    builder = db.StringProperty()
    3940    test_type = db.StringProperty()
    4041
    4142    @classmethod
    42     def delete_file(cls, key, builder, test_type, name, limit):
     43    def delete_file(cls, key, master, builder, test_type, name, limit):
    4344        if key:
    4445            file = db.get(key)
     
    4950            file._delete_all()
    5051        else:
    51             files = cls.get_files(builder, test_type, name, limit)
     52            files = cls.get_files(master, builder, test_type, name, limit)
    5253            if not files:
    5354                logging.warning(
    54                     "File not found, builder: %s, test_type:%s, name: %s.",
     55                    "File not found, master: %s, builder: %s, test_type:%s, name: %s.",
    5556                    builder, test_type, name)
    5657                return False
     
    6263
    6364    @classmethod
    64     def get_files(cls, builder, test_type, name, load_data=True, limit=1):
     65    def get_files(cls, master, builder, test_type, name, load_data=True, limit=1):
    6566        query = TestFile.all()
     67        if master:
     68            query = query.filter("master =", master)
    6669        if builder:
    6770            query = query.filter("builder =", builder)
     
    7982
    8083    @classmethod
    81     def add_file(cls, builder, test_type, name, data):
     84    def add_file(cls, master, builder, test_type, name, data):
    8285        file = TestFile()
     86        file.master = master
    8387        file.builder = builder
    8488        file.test_type = test_type
     
    8993
    9094        logging.info(
    91             "File saved, builder: %s, test_type: %s, name: %s, key: %s.",
    92             builder, test_type, file.name, str(file.data_keys))
     95            "File saved, master: %s, builder: %s, test_type: %s, name: %s, key: %s.",
     96            master, builder, test_type, file.name, str(file.data_keys))
    9397
    9498        return file
    9599
    96100    @classmethod
    97     def update(cls, builder, test_type, name, data):
    98         files = cls.get_files(builder, test_type, name)
     101    def update(cls, master, builder, test_type, name, data):
     102        files = cls.get_files(master, builder, test_type, name)
    99103        if not files:
    100             return cls.add_file(builder, test_type, name, data)
     104            return cls.add_file(master, builder, test_type, name, data)
    101105
    102106        file = files[0]
     107
     108        # FIXME: This is here to fill in the missing master/test_type for the already uploaded
     109        # results files, which all are layout_tests from the chromium master.
     110        # Remove this once all the builders upload with the master/test_type field set.
     111        if not file.master:
     112            file.master = "chromium"
     113        if not file.test_type:
     114            file.test_type = "layout-tests"
     115
    103116        if not file.save(data):
    104117            return None
    105118
    106119        logging.info(
    107             "File replaced, builder: %s, test_type: %s, name: %s, data key: %s.",
    108             builder, test_type, file.name, str(file.data_keys))
     120            "File replaced, master: %s, builder: %s, test_type: %s, name: %s, data key: %s.",
     121            master, builder, test_type, file.name, str(file.data_keys))
    109122
    110123        return file
  • trunk/WebKitTools/TestResultServer/templates/showfilelist.html

    r56635 r70724  
    1414    <table>
    1515        <tr>
     16            <th>Master</th>
    1617            <th>Builder</th>
    1718            <th>Test Type</th>
     
    2324        {% for file in files %}
    2425        <tr>{% if file.builder and file.name %}
     26            <td><a href="/testfile?master={{ file.master }}" >
     27                {{ file.master }}
     28                </a>
     29            </td>
    2530            <td><a href="/testfile?builder={{ file.builder }}" >
    2631                {{ file.builder }}
  • trunk/WebKitTools/TestResultServer/templates/uploadform.html

    r64687 r70724  
    1111    <table>
    1212    <tr>
     13        <td class=label><label>Master:</label></td>
     14        <td><input class=inputtext type="text" name="master" placeholder="chromium"/></td>
     15    </tr>
     16    <tr>
    1317        <td class=label><label>Builder:</label></td>
    14         <td><input class=inputtext type="text" name="builder" value="Webkit"/></td>
     18        <td><input class=inputtext type="text" name="builder" placeholder="Webkit"/></td>
    1519    </tr>
    1620    <tr>
    1721        <td class=label><label>Test Type:</label></td>
    18         <td><input class=inputtext type="text" name="testtype" value=""/></td>
     22        <td><input class=inputtext type="text" name="testtype" placeholder="layout-tests"/></td>
    1923    </tr>
    2024    </table>
Note: See TracChangeset for help on using the changeset viewer.