~andreserl/maas/lp1592666

« back to all changes in this revision

Viewing changes to src/maasserver/rpc/regionservice.py

  • Committer: LaMont Jones
  • Date: 2016-04-11 16:23:26 UTC
  • mfrom: (4900 maas)
  • mto: This revision was merged to the branch mainline in revision 4924.
  • Revision ID: lamont@canonical.com-20160411162326-6ycj8l2j66v2o5es
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
345
345
        return succeed({})
346
346
 
347
347
    @region.ReportForeignDHCPServer.responder
348
 
    def report_foreign_dhcp_server(self, cluster_uuid, interface_name,
349
 
                                   foreign_dhcp_ip):
 
348
    def report_foreign_dhcp_server(
 
349
            self, system_id, interface_name, dhcp_ip=None):
350
350
        """report_foreign_dhcp_server()
351
351
 
352
352
        Implementation of
353
 
        :py:class:`~provisioningserver.rpc.region.SendEvent`.
 
353
        :py:class:`~provisioningserver.rpc.region.ReportForeignDHCPServer`.
354
354
        """
355
355
        d = deferToDatabase(
356
 
            rackcontrollers.update_foreign_dhcp_ip,
357
 
            cluster_uuid, interface_name, foreign_dhcp_ip)
 
356
            rackcontrollers.update_foreign_dhcp,
 
357
            system_id, interface_name, dhcp_ip)
358
358
        d.addCallback(lambda _: {})
359
359
        return d
360
360
 
361
 
    @region.GetClusterInterfaces.responder
362
 
    def get_cluster_interfaces(self, cluster_uuid):
363
 
        """get_cluster_interfaces()
364
 
 
365
 
        Implementation of
366
 
        :py:class:`~provisioningserver.rpc.region.GetClusterInterfaces`.
367
 
        """
368
 
        d = deferToDatabase(
369
 
            rackcontrollers.get_rack_controllers_interfaces_as_dicts,
370
 
            cluster_uuid)
371
 
        d.addCallback(lambda interfaces: {'interfaces': interfaces})
372
 
        return d
373
 
 
374
361
    @region.CreateNode.responder
375
362
    def create_node(self, architecture, power_type, power_parameters,
376
363
                    mac_addresses, domain=None, hostname=None):
1078
1065
 
1079
1066
        # Update the updated time for this process. This prevents other
1080
1067
        # region process from removing this process.
1081
 
        process = RegionControllerProcess.objects.get(id=self.processId.value)
1082
 
        process.save(update_fields=["updated"])
 
1068
        try:
 
1069
            process = RegionControllerProcess.objects.get(
 
1070
                id=self.processId.value)
 
1071
        except RegionControllerProcess.DoesNotExist:
 
1072
            # Possible that another regiond process deleted this process
 
1073
            # because the updated field was not updated in time. Re-create the
 
1074
            # process with the same ID so its the same across the running of
 
1075
            # this regiond process.
 
1076
            process = RegionControllerProcess(
 
1077
                region=region_obj, pid=os.getpid(), created=now())
 
1078
            process.id = self.processId.value
 
1079
            process.save()
 
1080
        else:
 
1081
            process.save(update_fields=["updated"])
1083
1082
 
1084
1083
        # Remove any old processes that are older than 90 seconds.
1085
1084
        remove_before_time = now() - timedelta(seconds=90)