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

Unified Diff: appengine/swarming/handlers_backend.py

Issue 2386793002: Reimplement Machine Provider integration (Closed)
Patch Set: Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/swarming/cron.yaml ('k') | appengine/swarming/handlers_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/swarming/handlers_backend.py
diff --git a/appengine/swarming/handlers_backend.py b/appengine/swarming/handlers_backend.py
index a231d74b1df2aad1d13aa9906633e3859be9dfe0..5452e27d904d1d8c00363525c241b1c76489f201 100644
--- a/appengine/swarming/handlers_backend.py
+++ b/appengine/swarming/handlers_backend.py
@@ -9,9 +9,9 @@ import json
import logging
import webapp2
-from google.appengine.api import app_identity
from google.appengine.api import datastore_errors
from google.appengine.api import taskqueue
+from google.appengine.ext import ndb
from components import utils
@@ -62,13 +62,11 @@ class CronTriggerCleanupDataHandler(webapp2.RequestHandler):
self.response.out.write('Success.')
-class CronMachineProviderBotHandler(webapp2.RequestHandler):
- """Handles bots leased from the Machine Provider."""
+class CronMachineProviderConfigHandler(webapp2.RequestHandler):
+ """Configures entities to lease bots from the Machine Provider."""
@decorators.require_cronjob
def get(self):
- BATCH_SIZE = 50
-
if not config.settings().mp.enabled:
logging.info('MP support is disabled')
return
@@ -80,26 +78,12 @@ class CronMachineProviderBotHandler(webapp2.RequestHandler):
logging.info('Updating Machine Provider server to %s', new_server)
current_config.modify(instance_url=new_server)
- app_id = app_identity.get_application_id()
- swarming_server = 'https://%s' % app_identity.get_default_version_hostname()
- found = 0
- for machine_type_key in lease_management.MachineType.query().fetch(
- keys_only=True):
- lease_requests = lease_management.generate_lease_requests(
- machine_type_key, app_id, swarming_server)
- found += len(lease_requests)
- responses = []
- while lease_requests:
- response = machine_provider.lease_machines(lease_requests[:BATCH_SIZE])
- responses.extend(response.get('responses', []))
- lease_requests = lease_requests[BATCH_SIZE:]
- if responses:
- lease_management.update_leases(machine_type_key, responses)
- logging.info('Updated %d', found)
-
-
-class CronMachineProviderCleanUpHandler(webapp2.RequestHandler):
- """Cleans up leftover BotInfo entities."""
+ lease_management.ensure_entities_exist()
+ lease_management.drain_excess()
+
+
+class CronMachineProviderManagementHandler(webapp2.RequestHandler):
+ """Manages leases for bots from the Machine Provider."""
@decorators.require_cronjob
def get(self):
@@ -107,7 +91,7 @@ class CronMachineProviderCleanUpHandler(webapp2.RequestHandler):
logging.info('MP support is disabled')
return
- lease_management.clean_up_bots()
+ lease_management.schedule_lease_management()
class CronBotsDimensionAggregationHandler(webapp2.RequestHandler):
@@ -173,22 +157,6 @@ class CronTasksTagsAggregationHandler(webapp2.RequestHandler):
ts=now).put()
-class CronMachineProviderPubSubHandler(webapp2.RequestHandler):
- """Listens for Pub/Sub communication from Machine Provider."""
-
- @decorators.require_cronjob
- def get(self):
- if not config.settings().mp.enabled:
- logging.info('MP support is disabled')
- return
-
- taskqueue.add(
- method='POST', url='/internal/taskqueue/pubsub/machine_provider',
- queue_name='machine-provider-pubsub')
- self.response.headers['Content-Type'] = 'text/plain; charset=utf-8'
- self.response.out.write('Success.')
-
-
class TaskCleanupDataHandler(webapp2.RequestHandler):
"""Deletes orphaned blobs."""
@@ -200,15 +168,6 @@ class TaskCleanupDataHandler(webapp2.RequestHandler):
self.response.out.write('Success.')
-class TaskMachineProviderPubSubHandler(webapp2.RequestHandler):
- """Handles Pub/Sub messages from the Machine Provider."""
-
- @decorators.require_taskqueue('machine-provider-pubsub')
- def post(self):
- app_id = app_identity.get_application_id()
- lease_management.process_pubsub(app_id)
-
-
class TaskSendPubSubMessage(webapp2.RequestHandler):
"""Sends PubSub notification about task completion."""
@@ -220,6 +179,16 @@ class TaskSendPubSubMessage(webapp2.RequestHandler):
self.response.out.write('Success.')
+class TaskMachineProviderManagementHandler(webapp2.RequestHandler):
+ """Manages a lease for a Machine Provider bot."""
+
+ @decorators.require_taskqueue('machine-provider-manage')
+ def post(self):
+ key = ndb.Key(urlsafe=self.request.get('key'))
+ assert key.kind() == 'MachineLease', key
+ lease_management.manage_lease(key)
+
+
### Mapreduce related handlers
@@ -250,17 +219,18 @@ def get_routes():
CronBotsDimensionAggregationHandler),
('/internal/cron/aggregate_tasks_tags',
CronTasksTagsAggregationHandler),
- ('/internal/cron/machine_provider', CronMachineProviderBotHandler),
- ('/internal/cron/machine_provider_cleanup',
- CronMachineProviderCleanUpHandler),
- ('/internal/cron/machine_provider_pubsub',
- CronMachineProviderPubSubHandler),
+
+ # Machine Provider.
+ ('/internal/cron/machine_provider_config',
+ CronMachineProviderConfigHandler),
+ ('/internal/cron/machine_provider_manage',
+ CronMachineProviderManagementHandler),
# Task queues.
('/internal/taskqueue/cleanup_data', TaskCleanupDataHandler),
(r'/internal/taskqueue/pubsub/<task_id:[0-9a-f]+>', TaskSendPubSubMessage),
- ('/internal/taskqueue/pubsub/machine_provider',
- TaskMachineProviderPubSubHandler),
+ ('/internal/taskqueue/machine-provider-manage',
+ TaskMachineProviderManagementHandler),
# Mapreduce related urls.
(r'/internal/taskqueue/mapreduce/launch/<job_id:[^\/]+>',
« no previous file with comments | « appengine/swarming/cron.yaml ('k') | appengine/swarming/handlers_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698