Index: appengine/swarming/server/task_request.py |
diff --git a/appengine/swarming/server/task_request.py b/appengine/swarming/server/task_request.py |
index 063fc2645531e0582db07c00d31f2dcc2e577fdb..d3c66d403a97f767cd41bbd43bf99483bcd94331 100644 |
--- a/appengine/swarming/server/task_request.py |
+++ b/appengine/swarming/server/task_request.py |
@@ -162,9 +162,6 @@ def _validate_dimensions(prop, value): |
if not config.validate_dimension_value(val): |
raise datastore_errors.BadValueError( |
u'dimension %r:%r isn\'t valid' % (key, val)) |
- if u'pool' not in value and u'id' not in value: |
- raise datastore_errors.BadValueError( |
- u'At least one of \'id\' or \'pool\' must be used as %s' % prop._name) |
if len(value) > 64: |
raise datastore_errors.BadValueError( |
'%s can have up to 64 keys' % prop._name) |
@@ -489,7 +486,7 @@ class TaskProperties(ndb.Model): |
# Filter to use to determine the required properties on the bot to run on. For |
# example, Windows or hostname. Encoded as json. Either 'pool' or 'id' |
- # dimension are required (see _validate_dimensions). |
+ # dimension are required (see _validate_dimensions and _pre_put_hook). |
dimensions = datastore_utils.DeterministicJsonProperty( |
validator=_validate_dimensions, json_type=dict, indexed=False) |
@@ -554,9 +551,14 @@ class TaskProperties(ndb.Model): |
super(TaskProperties, self)._pre_put_hook() |
if self.is_terminate: |
# Most values are not valid with a terminate task. self.is_terminate |
- # already check those. |
+ # already check those. Terminate task can only use 'id'. |
return |
+ if u'pool' not in self.dimensions: |
+ # Only terminate task may no use 'pool'. Others must specify one. |
+ raise datastore_errors.BadValueError( |
+ u'\'pool\' must be used as dimensions') |
+ |
isolated_input = self.inputs_ref and self.inputs_ref.isolated |
if not self.command and not isolated_input: |
raise datastore_errors.BadValueError( |