Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in
  • Gaudi Gaudi
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 121
    • Issues 121
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 34
    • Merge requests 34
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GaudiGaudi
  • GaudiGaudi
  • Issues
  • #82
Closed
Open
Issue created Aug 09, 2019 by Walter Lampl@wlamplContributor

Service initialisation problem

Not sure if this is a bug or a feature: I noticed an failure if ServiceA depends on ServiceB and both are in theApp.CreateSvc. Note that we (ATLAS) run with theApp.ExtSvcCreate=False.

Long story (after digging through the code): For services listed in theApp.CreateSvc, serviceManger->addService(..) gets called from AppMgr::configure(). At this point, the service gets created but not initialised. They get initialised once the ServiceManager is initialised.

Now I have the situation that one of the Services has an ServiceHandle to another Service and retrieves that in its initalize() method. That call goes through the fairly long call-chain ServiceLocatorHelper::getService(.. ,createIf=true, ..) -> ServiceLocatorHelper::createService( .. ) -> serviceLocator(=ServiceMgr)::service( .. ). In case the service is already in the list, it will return the pointer as-it-is, eg un-initialised. And this is where things fail.

If the service is not in the list, ServiceManager::service( .. ) calls ServiceManager.addService( .. ) and since the FSM has advanced to initialize it will also initialize the service.

This explains why adding another service to theApp.CreateSvc breaks the job.

A possible fix could be to check the targetFSMState and the FSM state of the service beeing request just before line line 189 in ServiceManager::service( ... ).

Aside: The two athena-services where I found this case form actually a circular dependency. I am working on fixing this one.

  • Walter
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking