Index: appengine/swarming/server/task_request.py |
diff --git a/appengine/swarming/server/task_request.py b/appengine/swarming/server/task_request.py |
index 19b4c78c0bf31403bbb4989a96d821a45473e156..c09d30270397c5cb93e931cf68fd4d0edf902bcd 100644 |
--- a/appengine/swarming/server/task_request.py |
+++ b/appengine/swarming/server/task_request.py |
@@ -433,11 +433,14 @@ class TaskRequest(ndb.Model): |
elif self.priority == 0: |
raise datastore_errors.BadValueError( |
'priority 0 can only be used for terminate request') |
- self.tags.append('priority:%s' % self.priority) |
- self.tags.append('user:%s' % self.user) |
- for key, value in self.properties.dimensions.iteritems(): |
- self.tags.append('%s:%s' % (key, value)) |
- self.tags = sorted(set(self.tags)) |
+ |
+ if not self.properties.dimensions: |
+ raise datastore_errors.BadValueError('dimensions must be specified') |
+ dim_keys = self.properties.dimensions.keys() |
+ if 'pool' not in dim_keys and 'id' not in dim_keys: |
+ raise datastore_errors.BadValueError( |
+ 'At least one of \'id\' or \'pool\' must be used as dimensions') |
+ |
if (self.pubsub_topic and |
not pubsub.validate_full_name(self.pubsub_topic, 'topics')): |
raise datastore_errors.BadValueError( |
@@ -449,6 +452,12 @@ class TaskRequest(ndb.Model): |
raise datastore_errors.BadValueError( |
'pubsub_userdata requires pubsub_topic') |
+ self.tags.append('priority:%s' % self.priority) |
+ self.tags.append('user:%s' % self.user) |
+ for key, value in self.properties.dimensions.iteritems(): |
+ self.tags.append('%s:%s' % (key, value)) |
+ self.tags = sorted(set(self.tags)) |
+ |
def _new_request_key(): |
"""Returns a valid ndb.Key for this entity. |