1# Datastore Composite Index Configuration.
2# https://developers.google.com/appengine/docs/python/config/indexconfig
3#
4# Below, most indexes come in pairs; one with the internal_only property,
5# one without. This is because all queries when the user is not logged in
6# have the filter internal_only == False.
7#
8# Composite index properties must be listed differently depending on how the
9# properties are used. There are three main ways to use properties in a query:
10#   (1) In an equality filter.
11#   (2) In an inequality filter.
12#   (3) In a sort order.
13# The properties below must be listed in this order. The "direction" only needs
14# to be specified for properties used for sort order.
15#
16# To update the indexes in production after editing them here, you must run
17# appcfg.py vacuum_indexes or appcfg.py update_indexes.
18
19indexes:
20
21# Used in main.py when fetching top improvements/regressions in past N days.
22- kind: Anomaly
23  properties:
24  - name: sheriff
25  - name: timestamp
26- kind: Anomaly
27  properties:
28  - name: internal_only
29  - name: sheriff
30  - name: timestamp
31
32# Used in alerts.py for fetching recent un-triaged regressions for one sheriff.
33- kind: Anomaly
34  properties:
35  - name: bug_id
36  - name: is_improvement
37  - name: recovered
38  - name: sheriff
39  - name: timestamp
40    direction: desc
41- kind: Anomaly
42  properties:
43  - name: internal_only
44  - name: bug_id
45  - name: is_improvement
46  - name: recovered
47  - name: sheriff
48  - name: timestamp
49    direction: desc
50
51# Used in alerts.py for fetching recent un-triaged anomalies, both regressions
52# and improvements, for one sheriff, i.e. when the improvements button is on.
53- kind: Anomaly
54  properties:
55  - name: bug_id
56  - name: recovered
57  - name: sheriff
58  - name: timestamp
59    direction: desc
60- kind: Anomaly
61  properties:
62  - name: internal_only
63  - name: bug_id
64  - name: recovered
65  - name: sheriff
66  - name: timestamp
67    direction: desc
68
69# Used in alerts.py for fetching recent regressions for one sheriff, regardless
70# of triaged vs un-triaged status, i.e. when the triaged button is on.
71- kind: Anomaly
72  properties:
73  - name: is_improvement
74  - name: sheriff
75  - name: timestamp
76    direction: desc
77- kind: Anomaly
78  properties:
79  - name: internal_only
80  - name: is_improvement
81  - name: sheriff
82  - name: timestamp
83    direction: desc
84
85# Used in alerts.py for fetching recent anomalies for one sheriff, including
86# improvements and triaged, i.e. both improvements and triaged buttons are on.
87- kind: Anomaly
88  properties:
89  - name: sheriff
90  - name: timestamp
91    direction: desc
92- kind: Anomaly
93  properties:
94  - name: internal_only
95  - name: sheriff
96  - name: timestamp
97    direction: desc
98
99# Used in group_report.py when querying for anomalies around a revision.
100# No composite index is required without internal_only because then the
101# query uses only one (indexed) property, end_revision.
102- kind: Anomaly
103  properties:
104  - name: internal_only
105  - name: end_revision
106
107# Might be unused!
108# This index would enable querying for points for a particular test,
109# filtering or sorting by revision, and possibly doing a projection
110# query including value.
111- kind: Row
112  properties:
113  - name: parent_test
114  - name: revision
115  - name: value
116
117# Used in find_anomalies.GetRowsToAnalyze when getting latest points,
118# with projection query for properties revision and value.
119- kind: Row
120  properties:
121  - name: parent_test
122  - name: revision
123    direction: desc
124  - name: value
125
126# Used in graph_revisions.py to do a projection query for timestamp, revision
127# and value for points from a particular test.
128- kind: Row
129  properties:
130  - name: parent_test
131  - name: revision
132  - name: timestamp
133  - name: value
134
135# Used in several modules (graph_json.py and graph_csv.py) to fetch the latest
136# points for a test.
137- kind: Row
138  properties:
139  - name: parent_test
140  - name: revision
141    direction: desc
142
143# This composite index enables querying for points for a particular test,
144# filtering or sorting by revision. This may be unused, but it may be useful
145# for queries on the interactive console.
146- kind: Row
147  properties:
148  - name: parent_test
149  - name: revision
150
151# May be unused!
152# Likely used in new_points.py to query newest points for a particular test.
153# However listing the latest points for a test also works when not logged in
154# currently, although there appears to be no index in this file for that.
155- kind: Row
156  properties:
157  - name: parent_test
158  - name: timestamp
159    direction: desc
160
161# May be used in send_stoppage_alert_emails to fetch recent StoppageAlert
162# entities for a particular sheriff, for both internal-only and public alerts.
163- kind: StoppageAlert
164  properties:
165  - name: sheriff
166  - name: mail_sent
167- kind: StoppageAlert
168  properties:
169  - name: internal_only
170  - name: sheriff
171  - name: mail_sent
172
173# Used in alerts to fetch recent StoppageAlert entities for a particular
174# sheriff, for both internal and non-internal users.
175- kind: StoppageAlert
176  properties:
177  - name: sheriff
178  - name: timestamp
179    direction: desc
180- kind: StoppageAlert
181  properties:
182  - name: internal_only
183  - name: sheriff
184  - name: timestamp
185    direction: desc
186
187# Used in /alerts to query for stoppage alerts, for internal and external
188# sheriffs.
189- kind: StoppageAlert
190  properties:
191  - name: bug_id
192  - name: internal_only
193  - name: recovered
194  - name: sheriff
195  - name: timestamp
196    direction: desc
197- kind: StoppageAlert
198  properties:
199  - name: bug_id
200  - name: recovered
201  - name: sheriff
202  - name: timestamp
203    direction: desc
204
205# Used in update_test_suites to query keys of test suites (parent_test == None)
206# with deprecated and description projection. Two separate lists of
207# test suites are kept, one for external and one for internal.
208- kind: Test
209  properties:
210  - name: parent_test
211  - name: deprecated
212  - name: description
213- kind: Test
214  properties:
215  - name: internal_only
216  - name: parent_test
217  - name: deprecated
218  - name: description
219
220# Used in update_test_suites to query keys of test suites (parent_test == None)
221# with monitored projection. Two separate lists of test suites are kept, one for
222# external and one for internal.
223- kind: Test
224  properties:
225  - name: parent_test
226  - name: monitored
227- kind: Test
228  properties:
229  - name: internal_only
230  - name: parent_test
231  - name: monitored
232
233# Used in list_tests.py to query Test by test path pattern.
234- kind: Test
235  properties:
236  - name: master_name
237  - name: bot_name
238  - name: suite_name
239  - name: test_part1_name
240  - name: test_part2_name
241  - name: test_part3_name
242  - name: test_part4_name
243- kind: Test
244  properties:
245  - name: internal_only
246  - name: master_name
247  - name: bot_name
248  - name: suite_name
249  - name: test_part1_name
250  - name: test_part2_name
251  - name: test_part3_name
252  - name: test_part4_name
253