code: def process_services(self, device_ids=None, removed_devices_info=None):
          
          LOG.debug("Processing services started")
          # Now we process only routing service, additional services will be
          # added in future
          if self.routing_service_helper:
              self.routing_service_helper.process_service(device_ids,
                                                          removed_devices_info)
          else:
              LOG.warning("No routing service helper loaded")
          LOG.debug("Processing services completed")
docs: Process services managed by this config agent.
  
          This method is invoked by any of three scenarios.
  
          1. Invoked by a periodic task running every `RPC_LOOP_INTERVAL`
          seconds. This is the most common scenario.
          In this mode, the method is called without any arguments.
  
          2. Called by the `_process_backlogged_hosting_devices()` as part of
          the backlog processing task. In this mode, a list of device_ids
          are passed as arguments. These are the list of backlogged
          hosting devices that are now reachable and we want to sync services
          on them.
  
          3. Called by the `hosting_devices_removed()` method. This is when
          the config agent has received a notification from the plugin that
          some hosting devices are going to be removed. The payload contains
          the details of the hosting devices and the associated neutron
          resources on them which should be processed and removed.
  
          To avoid race conditions with these scenarios, this function is
          protected by a lock.
  
          This method goes on to invoke `process_service()` on the
          different service helpers.
  
          :param device_ids: List of devices that are now available and needs to
              be processed
          :param removed_devices_info: Info about the hosting devices which are
              going to be removed and details of the resources hosted on them.
              Expected Format::
  
                  {
                   'hosting_data': {'hd_id1': {'routers': [id1, id2, ...]},
                                    'hd_id2': {'routers': [id3, id4, ...]}, ...},
                   'deconfigure': True/False
                  }
  
          :returns: None