[Webkit-unassigned] [Bug 175978] Performance Dashboard backend should support A/B testing for owned components.

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Sep 6 00:12:14 PDT 2017


https://bugs.webkit.org/show_bug.cgi?id=175978

Ryosuke Niwa <rniwa at webkit.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #319353|review?                     |review-
              Flags|                            |

--- Comment #4 from Ryosuke Niwa <rniwa at webkit.org> ---
Comment on attachment 319353
  --> https://bugs.webkit.org/attachment.cgi?id=319353
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=319353&action=review

> Websites/perf.webkit.org/ChangeLog:9
> +        * init-database.sql:

You should have a blank line right above this.

> Websites/perf.webkit.org/ChangeLog:10
> +            Added 'commitset_commit_owner' and 'commitset_requires_build' columns to 'commit_set_items' table.

Please add this right after the description above. These important high-level comments should not be added as an inline comment.

> Websites/perf.webkit.org/ChangeLog:24
> +        * public/privileged-api/create-test-group.php: Added logic to process 'commitOwner' and 'requireBuild' in 'commit_set_items'.

Please add entries for each function you're modifying with inline comments.

> Websites/perf.webkit.org/ChangeLog:49
> +        (return.MockData.addTestGroupWithOwnedRepositories.TestServer.database.then):
> +        (then):

Get rid of these entries.

> Websites/perf.webkit.org/ChangeLog:52
> +        (return.addTriggerableAndCreateTask.string_appeared_here.then.id.taskId.id.then):
> +        (then):

Ditto.

> Websites/perf.webkit.org/public/include/db.php:122
> +            if (is_bool($current_value))
> +                $current_value = $this->to_database_boolean($current_value);

Nice, we should get rid of manual calls to to_database_boolean in a separate patch.

> Websites/perf.webkit.org/public/privileged-api/create-test-group.php:-55
> -        // FIXME: Add a check for duplicate test group name.

Mention that this FIXME is already addressed in the change log as an inline comment.

> Websites/perf.webkit.org/public/privileged-api/create-test-group.php:96
> +            $need_to_build = $need_to_build || $commit_row['requires_build'];

We should add an assert here that is_bool($commit_row['requires_build']) is true, and it's never 't' or 'f'.

> Websites/perf.webkit.org/public/privileged-api/create-test-group.php:207
> +            $repository = $db->select_first_row('repositories', 'repository', array('id' => intval($repository_id)));

I don't think we need to fetch the repository row when it doesn't have an owner revision.
So we should move this into if ($owner_revision).

> Websites/perf.webkit.org/public/privileged-api/create-test-group.php:221
> +            $requires_build = $owner_revision || array_get($repository_requires_build, $repository_id, FALSE);

I think it's cleaner to update $repository_requires_build here and add another loop after (instead of before) this one,
and update values of requires_build in each commit_set object in the newly added loop once all commit_set objects are created.

> Websites/perf.webkit.org/public/privileged-api/create-test-group.php:227
> +            if (!$repository)
> +                exit_with_error('RepositoryNotFound', array('repository' => $repository_id));

This condition is impossible to reach because we've already used $repository_id to find $commit_id.
Also, if this condition can be reached, then we need to be checking this condition before line 215 where we use it.

> Websites/perf.webkit.org/public/privileged-api/create-test-group.php:229
> +            if ($repository['repository_owner'])
> +                continue;

We need to verify that its owner is in the list. It's non-sensical to have a owned repository specified without its owner's revision being specified.
r- due to the lack of this check. We also need a test case for this.

> Websites/perf.webkit.org/public/v3/models/commit-set.js:13
> +        this._repositoryToRequiresBuildMap = new Map;

Nit: It should be _repositoryRequiresBuildMap. Can't be "to requires".

> Websites/perf.webkit.org/public/v3/models/commit-set.js:59
> +    ownedRepositories() { return this._repositories.filter((repository) => repository.ownerId) };

Looks like this function is never used. Remove for now?
Also, I would have called this repositoriesWithOwner().

> Websites/perf.webkit.org/public/v3/models/commit-set.js:190
> -        this._revisionListByRepository.set(repository, {revision, patch});
> +        if (ownerRevision)
> +            this._revisionListByOwnedRepository.set(repository, {revision, patch, ownerRevision});
> +        else
> +            this._revisionListByRepository.set(repository, {revision, patch});

We should stick with either putting all revisions into a single map, and have a separate owner map as done in a regular CommitLog,
or have two separate maps for owned revisions and non-owned revisions as done here.
We shouldn't use two completely different strategies for the two classes.

> Websites/perf.webkit.org/public/v3/models/repository.js:34
> +    findOwnedRepositoryByName(name)
> +    {
> +        const ownerships = this.namedStaticMap('repositoryOwnerships');
> +        return ownerships ? ownerships[this.id()].find((repository) => repository.name() == name) : null;
> +    }
> +

Looks like this is never used for now. Remove?

> Websites/perf.webkit.org/server-tests/api-build-requests-tests.js:30
> +    it('should return build requests associated with a given triggerable with appropriate commits and commitSets with owned components.', () => {

Nit: owned commits. Also, don't end it with a period.

> Websites/perf.webkit.org/server-tests/api-build-requests-tests.js:41
> +               [{commit: '87832', commitOwner: null, patch: null, requiresBuild: false, rootFile: null},
> +                   {commit: '93116', commitOwner: null, patch: null, requiresBuild: false, rootFile: null},
> +                   {commit: '1797', commitOwner: "93116", patch: null, requiresBuild: true, rootFile: null}]);

This indentation is not right. You should start [ in the previous line, and then all { should be aligned.

> Websites/perf.webkit.org/server-tests/api-build-requests-tests.js:44
> +               [{commit: '87832', commitOwner: null, patch: null, requiresBuild: false, rootFile: null},

Ditto.

> Websites/perf.webkit.org/server-tests/api-build-requests-tests.js:49
> +           assert.equal(content['commits'][0].id, 87832);

Why not deepEqual here too?

> Websites/perf.webkit.org/server-tests/api-build-requests-tests.js:68
> +           assert.deepEqual(content['buildRequests'][0].id, 704);

Ditto.

> Websites/perf.webkit.org/server-tests/api-build-requests-tests.js:152
>  
> +

Why two spaces?

> Websites/perf.webkit.org/server-tests/api-build-requests-tests.js:288
> +            assert.equal(secondCommitSet.revisionForRepository(jsc), '9191');

You should check that the owner of jsc is osx and that ownerRevisionForRepository of this commit is that of osx.
r- due to this lack of test coverage.

> Websites/perf.webkit.org/server-tests/privileged-api-create-test-group-tests.js:379
> +

Add another test case which specifies an owned revision but not its owner revision.

> Websites/perf.webkit.org/server-tests/privileged-api-create-test-group-tests.js:693
> +            webkit = Repository.all().filter((repository) => repository.name() == 'WebKit')[0];

We should add LabeledObject.findByName at some point...

> Websites/perf.webkit.org/server-tests/privileged-api-create-test-group-tests.js:753
> +            assert.equal(set0.patchForRepository(jsc), null);
> +            assert.equal(set1.patchForRepository(jsc), null);

Again, you should test the owner commit, repository, etc...

> Websites/perf.webkit.org/server-tests/privileged-api-create-test-group-tests.js:836
> +            assert.equal(set1.requiresBuildForRepository(jsc), true);

Ditto.

> Websites/perf.webkit.org/server-tests/resources/mock-data.js:37
> +            db.insert('commits', {id: 1797, repository: this.jscRepositoryId(), revision: '6161', time: '2016-03-02T23:19:55.3Z'}),
> +            db.insert('commits', {id: 2017, repository: this.jscRepositoryId(), revision: '9191', time: '2016-05-02T23:13:57.1Z'}),

Can we use a human readable text like '191622-jsc' instead of these unintelligible numbers?
Also, we definitely need a test case for when both OS X / iOS and WebKit specifies WebKit/JavaScriptCore.

> Websites/perf.webkit.org/server-tests/resources/mock-data.js:123
> +    addTestGroupWithOwnedRepositories(db, statusList)

I'd call this addTestGroupWithOwnedCommits instead.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20170906/75705e3b/attachment.html>


More information about the webkit-unassigned mailing list