code: def remove_node(self, node):
          
          workload = self.assigned_work.pop(node)
          if not self._pending_of(workload):
              return None
  
          # The node crashed, identify test that crashed
          for work_unit in workload.values():
              for nodeid, completed in work_unit.items():
                  if not completed:
                      crashitem = nodeid
                      break
              else:
                  continue
              break
          else:
              raise RuntimeError(
                  "Unable to identify crashitem on a workload with pending items"
              )
  
          # Made uncompleted work unit available again
          self.workqueue.update(workload)
  
          for node in self.assigned_work:
              self._reschedule(node)
  
          return crashitem
docs: Remove a node from the scheduler.
  
          This should be called either when the node crashed or at shutdown time.
          In the former case any pending items assigned to the node will be
          re-scheduled.
  
          Called by the hooks:
  
          - ``DSession.worker_workerfinished``.
          - ``DSession.worker_errordown``.
  
          Return the item being executed while the node crashed or None if the
          node has no more pending items.