Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Side by Side Diff: appengine/swarming/server/task_request.py

Issue 1778083002: Enforce users to specify a 'pool' dimension when triggering a task. (Closed) Base URL: git@github.com:luci/luci-py.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « appengine/swarming/handlers_bot.py ('k') | client/example/2_swarming_run.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # coding: utf-8 1 # coding: utf-8
2 # Copyright 2014 The Swarming Authors. All rights reserved. 2 # Copyright 2014 The Swarming Authors. All rights reserved.
3 # Use of this source code is governed by the Apache v2.0 license that can be 3 # Use of this source code is governed by the Apache v2.0 license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Tasks definition. 6 """Tasks definition.
7 7
8 Each user request creates a new TaskRequest. The TaskRequest instance saves the 8 Each user request creates a new TaskRequest. The TaskRequest instance saves the
9 metadata of the request, e.g. who requested it, when why, etc. It links to the 9 metadata of the request, e.g. who requested it, when why, etc. It links to the
10 actual data of the request in a TaskProperties. The TaskProperties represents 10 actual data of the request in a TaskProperties. The TaskProperties represents
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 """Adds automatic tags.""" 426 """Adds automatic tags."""
427 super(TaskRequest, self)._pre_put_hook() 427 super(TaskRequest, self)._pre_put_hook()
428 self.properties._pre_put_hook() 428 self.properties._pre_put_hook()
429 if self.properties.is_terminate: 429 if self.properties.is_terminate:
430 if not self.priority == 0: 430 if not self.priority == 0:
431 raise datastore_errors.BadValueError( 431 raise datastore_errors.BadValueError(
432 'terminate request must be priority 0') 432 'terminate request must be priority 0')
433 elif self.priority == 0: 433 elif self.priority == 0:
434 raise datastore_errors.BadValueError( 434 raise datastore_errors.BadValueError(
435 'priority 0 can only be used for terminate request') 435 'priority 0 can only be used for terminate request')
436 self.tags.append('priority:%s' % self.priority) 436
437 self.tags.append('user:%s' % self.user) 437 if not self.properties.dimensions:
438 for key, value in self.properties.dimensions.iteritems(): 438 raise datastore_errors.BadValueError('dimensions must be specified')
439 self.tags.append('%s:%s' % (key, value)) 439 dim_keys = self.properties.dimensions.keys()
440 self.tags = sorted(set(self.tags)) 440 if 'pool' not in dim_keys and 'id' not in dim_keys:
441 raise datastore_errors.BadValueError(
442 'At least one of \'id\' or \'pool\' must be used as dimensions')
443
441 if (self.pubsub_topic and 444 if (self.pubsub_topic and
442 not pubsub.validate_full_name(self.pubsub_topic, 'topics')): 445 not pubsub.validate_full_name(self.pubsub_topic, 'topics')):
443 raise datastore_errors.BadValueError( 446 raise datastore_errors.BadValueError(
444 'bad pubsub topic name - %s' % self.pubsub_topic) 447 'bad pubsub topic name - %s' % self.pubsub_topic)
445 if self.pubsub_auth_token and not self.pubsub_topic: 448 if self.pubsub_auth_token and not self.pubsub_topic:
446 raise datastore_errors.BadValueError( 449 raise datastore_errors.BadValueError(
447 'pubsub_auth_token requires pubsub_topic') 450 'pubsub_auth_token requires pubsub_topic')
448 if self.pubsub_userdata and not self.pubsub_topic: 451 if self.pubsub_userdata and not self.pubsub_topic:
449 raise datastore_errors.BadValueError( 452 raise datastore_errors.BadValueError(
450 'pubsub_userdata requires pubsub_topic') 453 'pubsub_userdata requires pubsub_topic')
451 454
455 self.tags.append('priority:%s' % self.priority)
456 self.tags.append('user:%s' % self.user)
457 for key, value in self.properties.dimensions.iteritems():
458 self.tags.append('%s:%s' % (key, value))
459 self.tags = sorted(set(self.tags))
460
452 461
453 def _new_request_key(): 462 def _new_request_key():
454 """Returns a valid ndb.Key for this entity. 463 """Returns a valid ndb.Key for this entity.
455 464
456 Task id is a 64 bits integer represented as a string to the user: 465 Task id is a 64 bits integer represented as a string to the user:
457 - 1 highest order bits set to 0 to keep value positive. 466 - 1 highest order bits set to 0 to keep value positive.
458 - 43 bits is time since _BEGINING_OF_THE_WORLD at 1ms resolution. 467 - 43 bits is time since _BEGINING_OF_THE_WORLD at 1ms resolution.
459 It is good for 2**43 / 365.3 / 24 / 60 / 60 / 1000 = 278 years or 2010+278 = 468 It is good for 2**43 / 365.3 / 24 / 60 / 60 / 1000 = 278 years or 2010+278 =
460 2288. The author will be dead at that time. 469 2288. The author will be dead at that time.
461 - 16 bits set to a random value or a server instance specific value. Assuming 470 - 16 bits set to a random value or a server instance specific value. Assuming
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 _put_request(request) 663 _put_request(request)
655 return request 664 return request
656 665
657 666
658 def validate_priority(priority): 667 def validate_priority(priority):
659 """Throws ValueError if priority is not a valid value.""" 668 """Throws ValueError if priority is not a valid value."""
660 if 0 > priority or MAXIMUM_PRIORITY < priority: 669 if 0 > priority or MAXIMUM_PRIORITY < priority:
661 raise datastore_errors.BadValueError( 670 raise datastore_errors.BadValueError(
662 'priority (%d) must be between 0 and %d (inclusive)' % 671 'priority (%d) must be between 0 and %d (inclusive)' %
663 (priority, MAXIMUM_PRIORITY)) 672 (priority, MAXIMUM_PRIORITY))
OLDNEW
« no previous file with comments | « appengine/swarming/handlers_bot.py ('k') | client/example/2_swarming_run.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698