Composite Components - quality-manager/onboarding GitHub Wiki

Composite Components: FGC

This is currently a set of unorganized notes that will be later organized.

Background

There has been significant work done in the past on FGC. Much has changed since planning for the next phase of FGC. Foundation has created a new API and architecture to support composite components. I am now starting from a clean slate to understand this architecture and the adoption required for QM.

Tasks

  • Review prior work in discussions and code
  • Re-evaluate issues and adoption based on new Foundation Composite API's and architecture

Notes

  • enable composites system property: com.ibm.team.repository.service.internal.dataaccess.composite.compositesSupported

  • Composite is set using oslc_config.context or header Configuration-Context with composite ID URI or composite UUID

    • Note, the UUID on the composite ID URI is not the same as the composite UUID. The composite ID URI must be a GC URL
    • A composite can only be resolved by providing the list of contributing configurations.
      • AbstractTeamServerServlet gets the list of contributions from GC using composite URI(GC URI)
  • Setting write configuration in composite

    • header Configuration-Context-Write with configuration URI or UUID
    • Long running processes must use UUID to ensure consistency, this will prevent using GC as lookup for the composite contributions to identify the composite UUID
  • survey of existing QM Component code can be found by searching isFgcEnabled in Java and JS

    • note, this is hard coded to true. All these checks should be removed
  • survey of prior aggregate component work can be found by searching isMultiFGCEnabled in Java and JS

    • This was enabled via system property. See com.ibm.team.repository.service.SimpleServerDescription.FINE_GRAINED_COMPONENTS_ENABLE_PROPERTY_NAME
    • I'm assuming this work is no longer relevant or must change with the new Jazz Composite API
  • QM Assumes configurations are always associated to a component. Composites have null as component

    • This probably breaks the use of component in QM everywhere
  • Composites can compose both streams and baselines. This will create issues where we normally make all of QM readonly for baselines, but with composites, this should be per item. However, information about which artifact comes from baseline is not available

  • DNG found issues using stream priority for skew resolution. They will be going back to skew prevention.

  • AbstractOslcService.handleOslcRequest - needs to handle composite resolution

  • major issues from discussion with Paul T

    • how to handle version skew
      • on fetch
      • on query
      • JAF Answer: handled by using the order of Composite contributions. You will never have duplicates in fetch or query
    • cross component linking
      • dangling ref
      • QM did first pass to prevent blow up
    • life cycle issue
      • changes to Composite components during operations
      • JAF Answer: Composites are immutable so long running operations are not affected
    • clone / refactor
      • make availale in different component
      • creates new version, version is not shared
      • Don't know who is using clone today
      • Refactor needed to fix existing customers