docs: def initiate(self, **kwargs):
          '''Establishes the connections to database and messaging platform,
          taking into account that it might meen performing asynchronous job.'''
          run_startup = kwargs.pop('run_startup', True)
  
          setter = lambda value, name: setattr(self, name, value)
  
          d = defer.Deferred()
          d.addCallback(defer.drop_param,
                        self.agency._messaging.get_connection, self)
          d.addCallback(setter, "_messaging")
          d.addCallback(defer.drop_param,
                        self.agency._database.get_connection)
          d.addCallback(setter, '_database')
          d.addCallback(defer.drop_param,
                        self._reload_descriptor)
          d.addCallback(defer.drop_param,
                        self._subscribe_for_descriptor_changes)
          d.addCallback(defer.drop_param, self._store_instance_id)
          d.addCallback(defer.drop_param, self._load_configuration)
          d.addCallback(setter, '_configuration')
          d.addCallback(defer.drop_param,
                        self.join_shard, self._descriptor.shard)
          d.addCallback(defer.drop_param,
                        self.journal_agent_created)
          d.addCallback(defer.drop_param,
                        self._call_initiate, **kwargs)
          d.addCallback(defer.drop_param, self.call_next, self._call_startup,
                        call_startup=run_startup)
          d.addCallback(defer.override_result, self)
          d.addErrback(self._startup_error)
  
          # Ensure the execution chain is broken
          self.call_next(d.callback, None)
  
          return d