It's all about the answers!

Ask a question

When Configuration Management is enabled for DNG, if we baseline it, it will copy everything to store in database?


jane zhou (86227) | asked Jun 23 '17, 10:03 a.m.
retagged Jan 18 '18, 12:57 a.m. by Minakshi Jaint (5113)

 I am working on DNG 6.0.3. 

When Configuration Management is enabled for DNG, if we baseline it, it will copy everything to store it in database?
One of our DNG expert declared that when you baseline a component, i.e. create snapshot, DNG database will copy all artifacts in that component at that moment to database. 
Suppose you have a component with 10000 artifacts, then as long as you baseline it, it will generate another 10000 artifacts. So if you have 10 baselines, then you created 10*10000 artifacts. So it will eat your memory occupied very quickly to make your component explode.
So we have to make artifacts numbers in one component  very small, i.e. decompose all artifacts into lots of component to avoid such thing happen.

But I am wondering whether IBM will manage database with version control in that way? For git as version control, it will not  control baseline that way. Any reason Why IBM do copy things as resource is unlimited?

Thanks!

Accepted answer


permanent link
Kathryn Fryer (50347) | answered Jun 26 '17, 9:01 p.m.

Creating a baseline or stream does not copy artifacts. Each artifact has a concept resource - a base, if you like. When you modify the artifact, you create a new versioned resource, which is really a small amount of metadata that also points to the concept resource. Your streams and baselines list the particular version to include for each concept resource - a set of RDF triples. Creating a new stream or baseline does not change the artifact in any way. When you create a baseline from a stream, it lists all artifact versions current for that stream - the baseline is a set of RDF triples. When you create a new stream from a baseline, that new stream lists all the same artifact versions from the baseline as a set of RDF triples - and then you can start modifying them to create new versions.

So if your stream has Artifact A with content "ABC", and that is your 12th saved change, baseline_1 includes Artifact A version 12 in its list - which is basically a set of RDF triple statements. When you update Artifact A in your stream to have content "ABCD", you create version 13 -- not a new artifact, just additional metadata related to the changes. When you baseline, baseline_2 lists Artifact A version 13. If you create a new stream from baseline_2, that stream points to Artifact A version 13, until you modify it again in the new stream. The artifact resources don't  store data about the configurations they belong to.

There is no rollback capability today in DNG. If you want to see all the artifacts in baseline_1, you set your configuration context to baseline_1, and you see all the artifacts (with the correct versions) as captured in baseline_1.  If you've already changed Artifact A, and you want it to look like the baseline again, you have to modify it in the current stream. Or, if you wanted to "revert" most of the artifacts, you could branch a new stream from the baseline and then change all of your work into that stream. You can deliver changes across streams.

There is some impact for configuration management, since you do have multiple streams and versions, where before there was only ever one. The Deployment wiki provides guidance on sizing and performance.

jane zhou selected this answer as the correct answer

Comments
jane zhou commented Jun 27 '17, 10:18 a.m.

 Hi Kathryn,


       Thanks for your detailed explanation!
       Now, I understand the way that how DNG manage baseline and stream. So basically,  creating baseline or  new stream from baseline will not introduce any copy artifacts operations. And for RDF triples, can we consider it as only changes related to artifact, but not simply copy everything in an artifact?

       Thanks!

Best Regards,
Jane Zhou
     
  


Kathryn Fryer commented Jun 27 '17, 11:05 a.m.

Hi Jane, sounds like you've got it! I can't say exactly what is in the RDF triples since I didn't write the code :)  but I know that we don't copy artifacts, and the intention is to maximize reuse.  And do check the deployment wiki for more information about sizing. Good luck!

3 other answers



permanent link
Daniel Moul (4.7k1118) | answered Jun 23 '17, 11:11 a.m.
FORUM MODERATOR / JAZZ DEVELOPER

Creating baselines in RDNG is a lightweight operation. Think of a baseline as list of requirement artifacts and the version of each one. When you display a baseline, the system reads the list and shows you those artifacts at those versions. New versions of the artifacts are not created when you create a baseline.


Comments
jane zhou commented Jun 24 '17, 12:35 p.m.

 Hi Daniel, 


  Thanks for your reply!
  Could you see my question as follows? I don't know why I can not post it here.

  Thanks!

Best Regards,
Jane Zhou


permanent link
jane zhou (86227) | answered Jun 24 '17, 12:35 p.m.

 Hi Daniel, 


  Thanks for your reply!
  I have read document here

It mentioned A baseline is a repository object, consists of one or more change sets. Delivering or accepting a baseline effectively delivers or accepts all of the change sets in it.

So from physical storage point of view, a baseline only includes reference to a package of change sets, right? it will not copy all artifacts and save it into baseline object, right?

Say, you have initial baseline, say baseline_initial, which include reference to change sets for you creating initial artifacts. and you create baseline_day1, and it only include reference of change sets you did AFTER initial baseline and reference to initial baseline.
So, when you want to switch you configuration to baseline_day1, you just need read from baseline_day1, and fetch change sets in baseline_initial and change sets in baseline_day1 to restore all contents in day1

From physical storage point of view, for baseline object created, it only include changes between current baseline and previous baseline and reference to the previous baseline. It will not copy all change sets from the beginning that you create the first baseline into any baseline, because it is not efficient at all.

I am wondering from implementation point of view, how IBM implement baseline, because it will impact our decision on how to manage components, if every baseline include all change sets, it will cause memory limitation issue very quickly.

And May I ask how to do test to check memory after baseline is created on RDNG server? We think we need to do some test as verification. 

Thanks!

Best Regards,
Jane Zhou

 




Comments
Kathryn Fryer commented Jun 26 '17, 3:05 p.m.

Hi Jane,
The topic you mention is about source code configuration management in RTC; it does not apply to DNG (or RQM). Here's the overview for DNG 603: https://www.ibm.com/support/knowledgecenter/SSYMRC_6.0.3/com.ibm.rational.rrm.help.doc/topics/c_config_mgmt.html

In DNG, a baseline contains only the list of artifacts and their specific versions that are in the stream when you take the baseline ("selections"). What change sets were delivered doesn't matter, it's only the current version of the artifact.

To see the content of a baseline, set your configuration context to that baseline and you see all the artifacts. In a baseline, the only reference you'd see to change sets would be in the individual artifact history. You can compare between 2 baselines (or between a stream and a baseline) to see what has changed. You can also create a new stream from a baseline.

In general, baselines are inexpensive. However, too many can have an impact on usability and performance when you have to load a full list of configurations (like for reporting). You can archive baselines when you no longer need them.

Hope that helps!


jane zhou commented Jun 26 '17, 4:29 p.m.

 Hi Kathryn,


          Thanks for your reply!
          Please see my reply as follows. since it is out of limitation.

         Thanks!

Best regards,
Jane Zhou


permanent link
jane zhou (86227) | answered Jun 26 '17, 4:28 p.m.

  Hi Kathryn,


        Thanks for your reply!
        So suppose we have 1000 artifacts in DNG, then when you baseline it, you will record reference to these 1000 artifacts? or you will copy the content of 1000 artifacts at that moment into your baseline physically?  say, artifact A, when  you baseline it as baseline_1, the content  is "ABC". and when next time you baseline it as baseline_2, the content is "ABCD". then if you want to switch back to  baseline_1. how can you restore it to find the reference of artifact with"ABC" , it is stored independently somewhere in your memory with label as baseline_1? So, although you have artifact A, but in fact, you have many copies of artifacts inside the database. 
   And for stream, if you create a new stream on a baseline, you will not do copy work as well, for baseline, it is list of artifacts reference, if you want to change any artifacts on that steam, and baseline it, basically, you create a new artifacts with changes. then later you can refer to it. So baseline will make more artifacts generated. If you change 1000 artifacts, 1000 artifacts will be generated internally for later reference, which, I think it is not a good way to manage memory. 

      Thanks!

Best Regards,
Jane Zhou

Your answer


Register or to post your answer.