" /> Status for Andrew DeFaria: September 2005 Archives

« August 2005 | Main | October 2005 »

September 30, 2005

More study of Rebase project to parent & Deliver between projects

  • Studied Rebase project to parent in depth
  • Studied Deliver between projects in depth
  • Discussed SJ vob move with Jennifer and Chini
  • Met with Phil regarding merge problem - turns out to be no problem

Rebase Project to Parent

The procedure calls rebase_project which essentially calls ct rebase...

  • Given a pvob and project rebase_project calls get_integration_stream to get the intergation stream
  • It then gets a list of the foundation baselines
  • For each foundation baseline it calls get_stream_for_baseline to get the stream for the foundation baseline.
  • Using that it calls get_project_for_stream to obtain the project name for this baseline.
  • Next it gets all of the recommended baselines for the project

Deliver Between Projects

This procedure calls inter_project_deliver. UCM doesn't support the concept of delivering between projects so this procedure implement interproject delivery by using ct merge.

September 29, 2005

Trigger config/Web config

Went to Salira to help Shuqing to set up a rel_3.1 branch.

  • Changed trigger to recogonize rel_3.1/china_3.1 as a valid branches.
  • Cleaned up web area on sonsweb
  • Added link for old 2.3 releases
  • Created 3.1.1.8.bugs file
  • Explained to Shuqing how the whole set up worked
  • Created china_3.1.lst file for Shanghai. Changes to CheckInPreop.pl will replicate to Shanghai and should become effective tomorrow.
  • Investigated changing Found In and Fixed In dropped downs to be sorted in reverse order since they are working on the latest, therefore highest numbered releases first. Turns out this will require more work with a possible change to the Clearquest schema. Jeff has schema checked out so I couldn't do anything. Basically those fields tie into a stateless record which contains a Release ID and a Description. I'm not sure how to tell Clearquest to sort that drop down.

Total time: 2 hours

UCM: Rebase project to parent & Deliver between projects

  • Created UCM environment where I can rebase and deliver
  • Reproduced binary merge problem in both rebase and deliver mode
  • Studied UCMCustom for Rebase project to parent & Deliver between projects functions. The former uses cleartool rebase while the later does not use deliver in the classic UCM sense

September 28, 2005

Clearcase Deliver problem

  • Helped Darren Edamura with a Clearcase problem
  • Started looking into Binary Merge problem
  • Added FixChar subroutine to CheckCodePage

Clearcase Deliver Failiure Leaves Corrupted Version

Worked with Darren Edamura on a problem he had during delivery. He says that he was working in a snapshot view and had inadvertantly had 2 hijaked files. When he wanted to deliver he had to do a rebase operation. Rebase noted the hijaked files and offered to check them in. He said he had checked them out. At this point he was left with a file version that had no activity associated with it. Right clicking that version in the version tree and selecting properties yielded:

Darren continued onward by checking out version 4 and checking in identical to create version 6 then delievered that.

In attempting to clean up version 5 we decided to remove that version. However doing so yielded:

Refreshing the version tree after that error revealed the activity on version 5 and now it all seems to be OK. I guess the rmver action cleared up the problem!

September 27, 2005

Code Page/rgy_switchover

  • Worked more on detecting and report invalid ASCII characters in PQA databases
  • Working with IBM Rational Support regarding rgy_switchover

Code Page

Managed to get the non ASCII characters in the databases down to a handful of cases and implement a "fix_char" routine. The basic mapping turns out to be:

# Translate from special char -> ASCII
my %char_mapping = (
  "ffffff85"	=> "_",
  "ffffff91"	=> "\'",
  "ffffff92"	=> "\'",
  "ffffff93"	=> "\"",
  "ffffff94"	=> "\"",
  "ffffff96"	=> "-",
#  "ffffffa2"	=>
#  "ffffffae"	=>
  "ffffffb7"	=> "\."
#  "ffffffbd"	=> "1/2",
#  "ffffffe7"	=> ???
);

The commented out lines represent characters I have not be able to determine the ASCII equivalents, except the 1/2 which is a 1/2 in one character. In order to translate the one character 1/2 to the 3 character 1/2 I would need to expand the array. I have not done this yet.

PMR#59845,999,000 backup rgy switchover not working on Windows clients

Steven Chaves wrote:

Andrew,

During the tech session, other TSEs did say that rgy_switchover does not always work. For DNS resolution, running: ipconfig /release and then afterwards ipconfig /renew usually works, but this would have to be done on each client. Can you give the servers fixed IP addresses.

There still seems to be some confusion here. I will attempt to be explicit here.

I realize that rgy_switchover will not always work 100%. Client machines may be down, etc. However what I'm seeing is that rgy_switchover never works - or at least never works with any of the Windows client machines who has their IP address assigned via DHCP and who's Windows machine name (WINS name) != Unix DNS CNAME.

Here's the situation. There are two Unix Solaris boxes: ccase-sj1-3 (10.16.191.241) and ccase-sj1-4 (10.16.191.243). Both are servers and have statically assigned IP addresses.

There are just a few Windows clients in this test scenario, mostly laptops. All fail. All have DHCP assigned IP addresses and Windows computer names that are not the same as DNS. Let's use my laptop as an example: ltsjca-adefaria (10.16.191.243) is it's name. It's a Windows XP box, is a laptop yet remains docked at my desk.

When the rgy_switchover command was run from ccase-sj1-3 to switch over to ccase-sj1-4 both ccase-sj1-3 and ccase-sj1-4 became aware of the change and switched over. None (i.e. 0) of the other clients (all DHCP assigned Windows boxes) failed, including my laptop (who's IP address, BTW, had not changed).

Investigating I find that I can nslookup and ping ccase-sj1-3 and ccase-sj1-4 from my laptop, ltsjca-adefaria

    Local:nslookup ccase-sj1-3
    Server:  dns-sj1-1b.sj.broadcom.com
    Address:  10.16.64.11

    Name:    ccase-sj1-3.sj.broadcom.com
    Address:  10.16.191.241
    Aliases:  ccase-sj1-3.broadcom.com

    Local:nslookup ccase-sj1-4
    Server:  dns-sj1-1b.sj.broadcom.com
    Address:  10.16.64.11

    Name:    ccase-sj1-4.sj.broadcom.com
    Address:  10.16.191.243
    Aliases:  ccase-sj1-4.broadcom.com
    Local:ping ccase-sj1-3
    Pinging ccase-sj1-3.sj.broadcom.com [10.16.191.241] with 32 bytes of data:

    Reply from 10.16.191.241: bytes=32 time<1ms TTL=254
    Reply from 10.16.191.241: bytes=32 time<1ms TTL=254
    Reply from 10.16.191.241: bytes=32 time<1ms TTL=254
    Reply from 10.16.191.241: bytes=32 time<1ms TTL=254

    Ping statistics for 10.16.191.241:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 0ms, Average = 0ms
    Local:ping ccase-sj1-4
    Pinging ccase-sj1-4.sj.broadcom.com [10.16.191.243] with 32 bytes of data:

    Reply from 10.16.191.243: bytes=32 time<1ms TTL=254
    Reply from 10.16.191.243: bytes=32 time<1ms TTL=254
    Reply from 10.16.191.243: bytes=32 time<1ms TTL=254
    Reply from 10.16.191.243: bytes=32 time<1ms TTL=254

    Ping statistics for 10.16.191.243:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 0ms, Average = 0ms

I can ping my laptop by name but I cannot nslookup it:

    Local:ping ltsjca-adefaria
    Pinging LTSJCA-ADEFARIA.corp.ad.broadcom.com [10.16.65.94] with 32 bytes of data:

    Reply from 10.16.65.94: bytes=32 time<1ms TTL=64
    Reply from 10.16.65.94: bytes=32 time<1ms TTL=64
    Reply from 10.16.65.94: bytes=32 time<1ms TTL=64
    Reply from 10.16.65.94: bytes=32 time<1ms TTL=64

    Ping statistics for 10.16.65.94:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 0ms, Average = 0ms
    Local:nslookup ltsjca-adefaria
    *** dns-sj1-1b.sj.broadcom.com can't find ltsjca-adefaria: Non-existent domain
    Server:  dns-sj1-1b.sj.broadcom.com
    Address:  10.16.64.11

From the Solaris boxes (either ccase-sj1-3 or ccase-sj1-4) I cannot nslookup nor ping ltsjca-adefaria by name:

    ccase-sj1-3:nslookup ltsjca-adefaria
    Server:  dns-sj1-1c.sj.broadcom.com
    Address:  10.16.128.11

    *** dns-sj1-1c.sj.broadcom.com can't find ltsjca-adefaria: Non-existent host/domain
    ccase-sj1-3:ping ltsjca-adefaria
    ping: unknown host ltsjca-adefaria
    ccase-sj1-3:

I can ping by IP address:

    ccase-sj1-3:ping 10.16.65.94
    10.16.65.94 is alive

However the Solaris boxes (nor the laptop it seems) can resolve the name ltsjca-adefaria to an IP address:

    ccase-sj1-3:nslookup ltsjca-adefaria
    Server:  dns-sj1-1c.sj.broadcom.com
    Address:  10.16.128.11

    *** dns-sj1-1c.sj.broadcom.com can't find ltsjca-adefaria: Non-existent host/domain

Finally a nslookup by IP address yields the following:

    ccase-sj1-3:nslookup 10.16.65.94
    Server:  dns-sj1-1c.sj.broadcom.com
    Address:  10.16.128.11

    Name:    dhcpe1-sj1-094.sj.broadcom.com
    Address:  10.16.65.94

Thus showing that the DNS CNAME for 10.16.65.94 is dhcpe1-sj1-094.sj.broadcom.com not ltsjca-adefaria.

If I cannot translate ltsjca-adefaria to an IP address for ping then how is rgy_switchover gonna do it?

Now assuming that it's prevalent or common here at my client's site to have Windows clients with DHCP assigned addresses who's Windows machine names do not resolve in DNS and assuming that if the client name does not resolve in DNS then rgy_switchover fails, can it be said that rgy_switchover is relatively useless given this enviornment?

September 26, 2005

Clearquest Code Pages

Clearquest 2003.06.15 now uses Code Pages to insure that data entered into Clearquest databases are correct. When incorrect data is encountered there is a problem. The question is, which code page should we use?

Chris had went through this decision when he migrated Clearquest data to San Diego. We are faced with this decision now by moving to 2003.06.15.

If you have ClearQuest databases that were created with previous versions of ClearQuest, they may contain data from a variety of code pages. When you set the ClearQuest data code page, the data in your databases is not converted to characters in the selected code page. If your database contains characters that do not map to the newcode page characters, data corruption will occur.

There seems to be 4 choices for code pages:

  1. ASCII
  2. Latin-1
  3. Chinese - Simplified
  4. Japanese

I'm going to assume 3 and 4 are non issues. This leaves 1 and 2. Chris went with #1 and I think that's a good choice because ASCII is a base code set. However going with #1 means we need to clean up data now as we already have non ASCII characters in the databases.

There is also a NOCHECKING option which essentially turns off checking and allows any character in. Using NOCHECKING would mean that Clearquest Multisite will not be an option in the future as it does not support NOCHECKING

.

I believe if we went with #2 our non ASCII characters would not be a problem. However:

All Windows clients must run the same operating system code page, and that code page must match the ClearQuest data code page. If you have mixed-platform environments (both Windows and UNIX clients), or clients using different operating system code pages, you must set the ClearQuest data code page to 20217 (ASCII), which is the common character set of all code pages. An alternate usage model is to set the ClearQuest data code page to a non-ASCII value and require that all users with UNIX systems interact with ClearQuest only with the Webclient.

And

  • If you set the ClearQuest data code page to a non-ASCII value, users can only modify data in that database from a Windows client running the same operating system code page. If the code pages do not match, the database is opened in read-only mode.
  • If you set the ClearQuest data code page to a non-ASCII value, UNIX clients will have read-only access to the databases. (UNIX users can choose to use the only the Web client, which prevents data corruption if a non-ASCII data code page value is selected.)
  • If you set the ClearQuest data code page to a non-ASCII value, invalid characters can still potentially enter the database without being detected by ClearQuest. For example, ClearQuest cannot validate text that you cut from an e-mail or Web page and paste into a database record. If the e-mail or Web page text contains characters outside of the ClearQuest data code page, the characters are corrupted during display and may show up as invalid characters (for example, a question mark (?) character).

Bottom line appears to be use ASCII and bite the bullet now by cleaning up data or use Latin-1 and avoid data cleanup now with potentially a larger clean up later.

Clearquest Franchise/PQA Invalid ASCII characters

  • Discussed SJ/Irvine migration
  • Drew up Clearquest Franchise plan
  • Modifed CheckCodePage.pl to show the invalid characters in a word context
  • Investigating Clearquest Data Code Pages

Clearquest Data Code Pages

It seems, in an effort to better support international charactersets, Clearquest is tighening its enforcement of data code pages. In practice here this means that the default character set of US-ASCII will not longer due. I've been scanning the data for invalid characters and we've got 'em. Oddly it's stuff like the apostrophe in worlds like "shouldn't" and the hyphen in phrases such as "this - or that". Now when I go in and replace them with typed versions it works OK. I can only think that this might be a result of copy and pasting from Microsoft Word, which tends to use such odd versions of such simple characters.

Audit_Log

Another problem raises its head in an odd way. After changing the odd apostrophe to a simple apostrophe and saving the record from the Clearquest client, I again get errors, this time in the Audit_Log. Seems that we have a hook script that basically captures the old and new strings of what had changed and logs them. Problem is, the old string has the old bad characters! Plus Audit_Log is not editable! So now we're stuck! Perhaps when we programmatically convert the database we will not hit a problem however I suspect that in order to add a record we need to validate it and the creation of Audit_Log is a function of Validate. If so we might be able to temporarily turn off the Create_Audit_Log function.

September 25, 2005

Triggers

  • Worked on mktriggers script to mktriggers for all regions, all vobs

Trigger Standardization

I have been trying to centralize and standardize triggers. The idea here is to be able to add all the triggers to all of the necessary vobs quickly and easily and to insure that triggers - implementors of policy - are consistently applied. As triggers are not replicated by Multisite it is essential that you can add triggers to a replicate if needed. For example, we need it to add triggers to the new replicas of the San Jose and Irvine vobs. Also new triggers and new vobs come into being and you usually want to make sure that all vobs have the appropriate triggers in force.

Note: For example, the vob /vobs/CommEngine is replicated from Irvine <-> San Jose. Irvine has a set of triggers applied to their replica and we have a different set.

Within Broadcom there are various vobs in various regions. This makes automation a little more difficult but not impossible. Some standardization of what triggers go where and how Clearcase gains access to the trigger code is necessary. One way I've seen companies accomplish this in the past was to create an administration vob and place trigger code in that vob. This vob would be replicated to all sites and trigger code made available through the use of a snapshot view in a well known location. Other administrative scripts can be shared in a similar fashion. Additionally we need to address differences between Windows and Unix.

Inconsistent paths

As it stands now triggers seem to be in a few places and I don't think that this places are kept in sync. As such I see inconsistencies that are confusing me. For example there are the following paths to triggers mentioned in /home/vobadm/scripts/mktrtype.sh:

       ccase-atla-1)
          NTPATH="\\\cc-atla-storage\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-blr-1)
          NTPATH="\\\cc-blr-storage\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-brsa-1)
          NTPATH="\\\cc-brsa-storage\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-irva-2)
          NTPATH="\\\Fs-irva-37\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-irva-4)
          NTPATH="\\\Fs-irva-37\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-irva-tst)
          NTPATH="\\\Fs-irva-37\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-mhtb-1)
          NTPATH="\\\cc-mhtb-storage\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-peka-1)
          NTPATH="\\\cc-peka-storage\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-rmna-3)
          NTPATH="\\\cc-rmna-storage\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-sdoa-1|ccase-sdoa-2)
          NTPATH="\\\Fs-irva-37\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

       ccase-sj1-1)
          NTPATH="\\\cc-sj-storage\ccase\bse\script\trigger"
          UNIXPATH="/projects/ccase/bse/script/trigger"
          ;;

       ccase-tlva-1|ccase-tlva-1.il.broadcom.com)
          NTPATH="\\\cc-tlva-storage\ccase\script\trigger"
          UNIXPATH="/projects/ccase/script/trigger"
          ;;

As you can see the NTPATH varies where the UNIXPATH is largely the same (ccase-sj1-1 puts scripts under bse). Also, with ccase-rmna-3 it says /projects/ccase/script/trigger yet is currently using /projects/cc4/triggers and the differences between those two directories are many. Which one is correct? Why the bse directory for San Jose?

I assume that the reasons for the different NTPATH names is to avoid going over the WAN to get trigger script code. I also assume that this is mitigated on Unix by use of the automounter and yet we cannot say that UNIXPATH is always the same due to the difference in San Jose. I wonder if DFS could be used to provide a consistent, globally well known path to trigger code under Windows...

In any event the question that rises is how are these various repositories of code kept in sync if at all?

Inconsistent Application of Triggers

Normally there are a certain set of triggers that are implementing policy that are consistently applied to all vobs (or at least all vobs in a region). For example, usually empty branches are considered bad and to be avoided. Thus there is normally a trigger script applied to all vobs to avoid this. Or if an organization determines that rmelem should not be performed then it is enforced with a trigger on all vobs. Yet there doesn't seem to be any triggers consistently applied to all vobs. In fact many vobs have no triggers at all!

I see, for example, 3 different triggers for preop checkins: GIpreci, preci and test_preci. Triggers could be written that can be applied to any vob and then they act only if the conditions are such that they should do something. IOW for situations where they don't apply they simple exit.

There are also triggers that do nothing but allow people to proceed or not based on whether the user is on an "approved" list. They carry with them a long list of -nusers. I would think that that would be more difficult to maintain than for a trigger to be written that opens up a file of approved users and validates the user based on that. Then to add/change/delete users one merely needs to update the data file, not re-create a trigger in a vob and then have to worry about what other vobs need their triggers updated. Of course the trigger would need to deal with the issue of what is the global file pathname to that data file.

September 23, 2005

PQA Code Page/SJ Vob move

  • Attended meeting regarding SJ/Irvine Vob move. Shivdutt is investigating doing vob moves instead of replication. Briefly discussed Disaster Recover options.
  • Got Chris' scripts that check for invalid characters in string data for the ASCII character set to work on our test PQA database. Found invalid characters.

Invalid ASCII Characters in Clearquest databases

With Clearquest 2003.06.15 there is more support for internationalization. This means that Clearquest now implements a Code Page which essentially defines the valid character set for data. If it encounters invalid characters the user must correct them.

Question is do we have invalid characters in the current database. Chris Rump had found such invalid characters when performing his Clearquest migration from Irvine -> San Diego. I've quickly adapted his scripts to check a few fields in the TO database and found some. So far all I've found are non ASCII characters for the apostrophe. We think this happens when a user copies and pastes text from Microsoft Word into Clearquest (Thanks Microsoft! :-()

In any event I still need to update the script to check all string oriented fields. If only a few isolated cases can be identified (e.g. Apostrophes, perhaps soft carriage returns, etc.) then perhaps this could be made into a function that will check for invalid ASCII characters and fix them

September 22, 2005

PQA CQ Setup

  • Set up CQ Web Server on p4test. Web client has been updated. Seems a little sluggish
  • Investigated CQ Web Performance tweaking
  • Looked into Chris's scripts for handling CQ code page problems

September 21, 2005

SJ/Irvine Triggers/Sync lock problem/rgy_backup

  • Tried to help Arun in Bangalore to be able to create views
  • Investigated trigger set up for SJ/Irvine
  • Investigated relocate sync_locked problem

rgy_backup

There's bad news then worse news WRT rgy_backup.

First the bad news:

It was hoped that when rgy_backup was run on each of the clients - i.e. any machine that is not designated as a backup registry server - it would contact the primary registry server and ask "Who's the backup registry server?" then check to verify that the client was proper configured. If not, that it would update the client's notion of who is the designated backup registry server. Turns out this is not the case! So we would have an issue of how do we properly configure all the clients.

Now the worse news (AKA Why that CC Doctor warning about running Clearcase on a machine that uses DCHP is important):

When I tested rgy_switchover I was surprised that it was unable to switch over any Windows desktop! Here's the output:

    Wizard ccase-sj1-3:rgy_switchover ccase-sj1-4 ccase-sj1-3
    Registry switchover started at 20-Sep-05.16:56:33
    ccase-sj1-3: OK
    ccase-sj1-4: OK
    rgy_switchover: Error: Switchover for client LTSJCA-ADEFARIA failed
    rgy_switchover: Warning: LTSJCA-ADEFARIA: Unable to reconfigure - rgy_switchover: Warning: could not find host, please check hostname
    rgy_switchover: Error: Unknown host 'LTSJCA-ADEFARIA': Host not found
    rgy_switchover: Error: Switchover for client LTSJCA-ADEFARIA failed
    LTSJCA-ADEFARIA: FAILED
    rgy_switchover: Error: Switchover for client PCSJCA-SHIVJHA failed
    rgy_switchover: Warning: PCSJCA-SHIVJHA: Unable to reconfigure - rgy_switchover: Warning: could not find host, please check hostname
    rgy_switchover: Error: Unknown host 'PCSJCA-SHIVJHA': Host not found
    rgy_switchover: Error: Switchover for client PCSJCA-SHIVJHA failed
    PCSJCA-SHIVJHA: FAILED
    rgy_switchover: Error: Switchover for client lbsjca-nnalluri failed
    rgy_switchover: Warning: lbsjca-nnalluri: Unable to reconfigure - rgy_switchover: Warning: could not find host, please check hostname
    rgy_switchover: Error: Unknown host 'lbsjca-nnalluri': Host not found
    rgy_switchover: Error: Switchover for client lbsjca-nnalluri failed
    lbsjca-nnalluri: FAILED
    Registry switchover finished at 20-Sep-05.16:56:34
    

I suspect that the problem is that the Windows machine name does not resolve to an IP address:

    Local:ping ltsjca-adefaria 64 2
    PING LTSJCA-ADEFARIA.corp.ad.broadcom.com (10.16.65.94): 64 data bytes
    72 bytes from 10.16.65.94: icmp_seq=0 ttl=64 time=2 ms
    72 bytes from 10.16.65.94: icmp_seq=1 ttl=64 time=0 ms

    ----LTSJCA-ADEFARIA.corp.ad.broadcom.com PING Statistics----
    2 packets transmitted, 2 packets received, 0.0% packet loss
    round-trip (ms)  min/avg/max/med = 0/1/2/1
    

However:

    Local:nslookup 10.16.65.94
    Server:  dns-sj1-1b.sj.broadcom.com
    Address:  10.16.64.11

    Name:    dhcpe1-sj1-094.sj.broadcom.com
    Address:  10.16.65.94

So then, even if we managed to configure all the clients, if switch over time came, most of them would fail.

September 16, 2005

Evil Twin/Performance

  • Implemented Evil Twin trigger. Have not yet tested nor installed trigger yet
  • Meeting with Naga Re:
    • Binary Merge problem
    • RM_EMPTY_BRANCH/EVIL_TWIN triggers
    • Lock project problem
  • Reviewing both Philip and Chin's performance testing
  • Struggling with Cisco VPN client at home!

Evil Twin Trigger

Evil twins are a well known phenomena in Clearcase circles. It is not recommended that you try to stop them by convention rather by Clearcase trigger. I have a trigger that does just that. The code uses cleartool ls so that it works for both dynamic views and snapshot views. The trigger also respects case sensitivity. This means that creating an element named "foo" and another element named "Foo" is allowed.

Evil twins should not be allowed in any vob because, as you rightly point out, it causes merging problems.

Shall I add this trigger to all vobs?

Performance Scripts

Both Philip and Chin have their own Clearcase performance testing scripts. In general performance of Clearcase is a huge topic. These scripts a relatively simple, just timing some basic Clearcase operations. Still this is a good metric from a user's perspective.

We should consolidate these tests and make them more flexible by having them self contained (both creating and tearing down the environment that they need) and generalize them so that new Clearcase operations can be easily added and timed.

These scripts should produce a data file that can be later consumed by say a PHP script to present the results in a readable manner on a web page somewhere.

Also, these scripts need to set up various different environments such as using local/remote snapshot views, dynamic views. These scripts can be used to measure performance of the old (ccase-rmna-1) environment as well as newer environements (ccase-rmna-3 and/or the new Linux server).

Finally it should be made such at adding new tests, i.e. make new baseline, can easily be incorporated into the test suite.

September 15, 2005

Binary Merge/CVS/Clearquest Web

  • Inveistigated binary merge problem
  • Worked with Mukund regarding CVS access
  • Helped Shivdutt with a Clearquest Web problem. User reports that Clearquest Web not working in IE! Suspect the problem is due to configuration issues, specifically JRE. Did some research and sent URLs to user

Binary Merge

Clearcase's diffmerge utility has understandable problems attempting to merge files that are binary (Clearcase searches for NUL characters \000 in the file to determine if it is binary). Sometimes Clearcase can merge such files, if it determines that the merge merely entails a wholesale replace of one version with another. But in non trival merges this is not possible.

Developers and managers here use a series of Perl scripts to help automate common trasks, one of which is to merge to and from different branches. The problem is when delivering a large set of changes there is a chance that some of the files will be binary and that it will not be possible to automatically merge them. Often a developer will start a merge and let it run over night. Sometimes, somewhere in the middle, the merge will prompt with a dialog box saying that it cannot merge this binary file. The result is that the merge is 1/2 done!

The Perl script uses cleartool findmerge to find and merge both directories and files. It also uses the -merge option to say "automatically merge things". Unfortunately when it hits a non trival binary file merge it cannot continue.

We propose to modify the Perl script to call findmerge without the -merge option then obtain the list of files that needs merging and itterate through the list calling cleartool merge for each file with a -abort. This tells merge to automatically merge things if it can, otherwise not to merge and return a status code that that merge was not possible in an automatic mode.

The script would then collect the names of all the files that could not be automatically merged and store that in a file somewhere.

We believe there are 3 possible ways to merge a non trival merge of a binary file (this assumes a simple merge between two different versions of a binary file. A merge with multiple contributors would obviously present N+1 possibilities...):

  1. Result of merge is a copy of the first contributor
  2. Result of merge is a copy of the second contributor
  3. Binary file needs to be rebuilt combining both A and B

A process could be written to read the saved file of non automatic binary merges and present the user with the choices listed above. The user then selects which choice is appropriate. The process then performs the necessary actions to accomplish what the user requested (i.e. if they select A then a merge arrow is drawn from B -> the checked out copy of A. If they select B then a merge arrow is drawn from A to the checked out copy of B). If any C options are choosen then the file remains unmerged.

In this way when the user performs his normal merge, upon completion, if merge conflicts exist in binary files the user is presented, at the end of merging everything else a dialog box allowing them to resolve the binary merge problems right now. The benefit here is that all of the other merging has already been completed and they are only dealing with the problem merges now. If they do not wish to correct these now they can always correct them later (issues about where this saved file will reside and how to restart the binary merge resolver are still open).

September 14, 2005

CQ/Triggers/Binary merge/CVS

  • Met with Chris Rumf regarding Clearquest and int impending upgrade/merge of DBs. Chris told us of his trials and tribulations with a 3 month project to merge CQ databases and move them to San Diego.
  • Fixed mktriggers to properly specify the path for the trigger script in both Windows and Unix implementations.
  • Worked with Shivdutt to try to reproduce the problems with merging binary files.
  • I was assigned a ticket to give a user CVS repository access. I still do not have proper login access to Irvine nor do I have permissions to perform this task

Clearquest issues

In all likelihood we will be faced with a merging of DBs and probable writing of Perl scripts to massage and otherwise transform the database. This will take time. Additionally Vinh is leaving Broadcom.

Chris warned that he faced a situation where the new version of Clearquest brings in the concept of internationalization by use of a code page and that he had many problems with users copying and pasting things from MS Word which ended up outside of the normal character set.

Also, Irvine seems to have Clearquest 2001 version which has the old, ASP based Clearquest Web which is decidedly inferior to the new 2003 Apache/RWP/Java based Clearquest Web. He also pointed us to some valuable information about performance tuning the various Clearquest Web pieces. This will be useful if we are to support a large number of users from Isreal.

Triggers

Looked over most of the currently implemented triggers. I can probably add them to my mktriggers.pl script. One problem is that the ADD_EXECUTE trigger is merely a cleartool protect command to add execute permissions to newly created elements. I'm not sure why one would want to do this to every element as most elements are not executable (even though some OSes seem to think so). The mktriggers.pl script is oriented to only adding Perl based triggers. This could be solved by making it a simple Perl script. Also ADD_EXECUTE is added to all vobs except the \Docs vobs. It we can add it to all vobs it would be easier.

Current triggers use -exec and specify a Windows UNC path. This means that if we have any Unix clients they will not be able to execute any of these triggers! Fixed mktriggers.pl to add -execwin and -execunix options with proper pathnames.

CVS

Depending on the CVS situation, Broadcom might be interested in a Web application I had made that manages CVS users. From a web page a user can manage his user (able to change his password, add an email address/phone number, etc). If the user is in a cvsadm group they can add/change/delete other CVS users. With such a web app the help desk could resolve such CVS requests on the spot.

September 13, 2005

Remedy/Irvine Access/P4 ticket

  • Finally got Remedy access. Turns out I had it all along just my username was ADEFARIA instead of adefaria!
  • Looked into P4 ticket. I am unable to perform the action because I don't have a login to Irvine. P4 stuff gets performed in Irvine and I don't have an account there. Actually I have an account but didn't know the password. Actually I figured out the password - it was my initial password when I came to Broadcom and was never set. The Help desk had me set my password in the beginning but that was in the San Jose domain. I've now set it for Irvine too. There are two problems with my Linux login:
    1. In Irvine I have no home directory! As a result I cannot create ~/public_html and write web pages as well as I cannot set up my startup scripts, etc. I put in a ticket for this. Hopefully they will set up Irvine like San Jose in that my home directory will be share amoungst all three areas.
    2. My default shell is (yuck) csh! I asked for that to be changed to bash.
    3. Worked with Shivdutt on disk space problem on ccase-rmna-3
    4. Added RM_EMPTY_BRANCH trigger to vobs on ccase-rmna-3
    5. Investigating other triggers to include them in mktriggers.pl

San Jose/Irvine Domains

Here in Broadcom there are multiple NIS domains here including sanjose and irvine. For example, ssh'ing into xserver.sj works for me and puts me in /home/adefaria. Insterestingly /home/adefaria corresponds with my Windows home directory. IOW if I touch file on Linux I can see file in my home directory in Windows. Cool. The world is as it should be!

However in Irvine I have no home directory at all. It seems that home directories are automounted from the NIS auto_home map and that San Jose home directories come from fs-sj1-* while Irivine home direcrtories come from fs-irva-*. Ugh!

September 12, 2005

Backup Registry Server/Triggers

  • Investigated how to setup, configure and failover Clearcase backup registry
  • Working with Shivdutt to set up new Clearquest server software
  • Ported mktriggers.pl and RemoveEmptyBranch.pl. Added RM_EMPTY_BRANCH to vobs on ccase-rmna-1

Clearcase Backup Registry

I've looked into how to setup a Clearcase Backup Registry as well as how it is supposed to function when a failure occurs and a switchover is necessary.

Introduction

Clearcase provides a mechanism to set up a backup registry server in the event that the primary registry server fails. If done properly switching over to the backup registry server is quick and easy. It is not, however, without it's potential problems1.

Setup

To setup a Clearcase Backup Registry Server you must first define which servers will be the primary and secondary register servers2. Let's assume rgy1 is the primary and rgy2 is the backup. Next you configure rgy1 to tell it that the backup registry server is rgy2 by adding a line to /var/adm/rational/clearcase/rgy/rgy_hosts.conf.

Normal Operation

In normal operation Clearcase runs a scheduled job called Daily Registry Backup on all hosts. On all hosts except the designated backup registry server this job does little if anything.

I have a note that when run on a Windows client it will ask what the backup registry server is and if found and if different, will store that value in the Windows registry, thus Windows clients are self configuring. This should be tested however.

On the backup registry host the job will obtain a snapshot of the registry from the primary registry server. By default 3 days worth of copies are kept.

Switchover

If the primary registry server fails all that needs to be done is to run rgy_switchover which will promote the backup registry server to be a primary registry server. It will also inform all clients of the change. When the primary comes back it is configured as a backup of the new primary and optionally rgy_switchover'd to be a primary again

Notes

  1. There is no guarantee that rgy_switchover will be able to successfully switch over all clients. Clients may not be available on the network, for example. It will report which clients were not switched over and they can be fixed manually.
  2. What are our registry servers? The Clearcase Admin Console shows me the following:
    1. ccase-atla-1
    2. ccase-gera-1
    3. ccase-irva-2
    4. ccase-rmna-3
    5. ccase-sdoa-1
    6. ccase-sj1-1
    7. ccase-sj1-3
    8. ccase-sj1-4
    9. ccase-sj1-5
    10. ccase-sj1-7
    11. ccase-sj1-8
    12. ldt-sdoa-013

    It seems as if multiple registry servers were used instead of using one global registry and dividing things up by Clearcase regions. In any event, which of these primary registry servers need to be backed up and to where?

    Also, it is not a good practice to put your registry on the same box as your other Clearcase objects (i.e. views or vobs). Say, for example, ccase-rmna-3 blows a disk drive and will be down for quite some time. Sure ccase-rmna-2 might be it's backup registry server and we could switch over the clients, etc. However what good would that do if the vob data they wish to get to is on ccase-rmna-3! Answer: No good at all. That machine is down - period.

    I would recommend that we have one global registry server and a backup server. The backup server can be a vob machine or some other machine which houses important Clearcase data. The theory here is that, as a backup server, it's service time is limited - IOW it's only going to be functioning as a primary registry server for the time that the primary is out. While slightly risky it's only used for a limited time and when there's an emergency.

Mktriggers.pl & RemoveEmptyBranch.pl

Shivdutt and I feel that the problem that check_full_baseline is hitting is initially caused by having elements that have a 0 element on a branch. This is a common problem as I've explained before - a user checks out a file, it is branched and a 0 element is created as well as a checked out element:

If the user then cancels the checkout then we are left with:

There is no difference between /main/1 and /main/andys_branch/0. Both /main/andys_branch/0 and /main/andys_branch can be safely removed. I believe that check_full_baseline corrects this situation by creating yet another identical version /main/andys_branch/1 and checking in yet another identical version.

The RemoveEmptyBranch.pl trigger corrects this condition at uncheckout (rmver and rmbranch) time by detecting this situation and removing both /main/andys_branch/0 and /main/andys_branch. It will only do so if the 0 element is the only thing there. If there are labels attached to the 0 element it will not remove it.

In order to implement this trigger I had to get the code working here at Broadcom. The RemoveEmptyBranch.pl trigger runs right out of the box, however things must be placed the proper places here at Broadcom. Additionally this trigger should be added to all vobs. Suffice to say, as a Clearcase Admin, I've hit this problem before.

My solution is a mktriggers.pl script which adds (or replaces) triggers on all public vobs in a region based on data in a data file which describes triggers. Mktriggers.pl is smart to skips private vobs and UCM project vobs.

Finally, mktriggers.pl uses a module of mine called Display.pm, which provides a consistent way of displaying messages.

To this regard I have created/ported the following files in //fs-rmna-01/Projects-V0/cc4:

bin/mktriggers.pl: Script to make/replace triggers in all vobs based on triggers.dat
etc/triggers.dat: Data file describing triggers (currently only describing RM_EMPTY_BRANCH)
triggers/RemoveEmptyBranch.pl: The RM_EMPTY_BRANCH trigger
lib/Display.pm: Perl module for displaying messages, errors, warnings consistently
lib/Logger.pm: Perl Object for handling creating and manipulating log files (Not used yet)

Here's a usage for mktriggers.pl:

    $ mktriggers.pl -u
    Usage mktriggers.pl: [-u] [-n] [-a] [-r] [-v] [ -vobs  ]
    Where:
            -u      Displays this usage
            -n      No execute mode - just echo out what would have been done
            -r      Perform only replacements of triggers
            -a      Perform only adds of triggers that are missing
            -v      Verbose
            -d      Debug
            -vobs   List of vob tags to apply triggers to (default all vobs)

As you can see there is a no execute mode which just shows what would have been done. Add -v for verbose and it will also echo out the commands that would have been performed. You can also limit mktriggers.pl to only doing additions (-a) or replacements (-r).

Mktrigger.pl's data files is in etc/triggers.dat. It's format is relatively simple:

    # Triggers
    #################################################################################
    #
    # File:         triggers.dat
    # Description:  Describes the triggers to be implemented.
    # Author:       Andrew@DeFaria.com
    # Created:      Mon Mar 15 08:48:24 PST 2004
    # Language:     None
    #
    # (c) Copyright 2004, Andrew@DeFaria.com, all rights reserved.
    #
    ################################################################################
    #
    # Only the following keywords are currently recognized:
    #
    #       Trigger:        Introduces the trigger and gives it its name
    #       Description:    Used for the trigger type's comment
    #       Type:           Type of trigger (so far they're all -element -all)
    #       Opkinds:        Operation kinds that will cause the trigger to fire
    #       ScriptEngine:   Currently only supporting ccperl (C:\Program
    #                       Files\Rational\ClearCase\bin\ccperl)
    #       Script:         Script to run (under triggers)
    #       Vobs:           Can be either base, ucm, all or a list of vob tags.
    #                       If base is specified then the trigger is applied to
    #                       all base Clearcase vobs. If ucm is specified then the
    #                       trigger is applied to all ucm vobs. If all is
    #                       specified (or if Vobs is not present) then the trigger
    #                       is applied to all vobs (base and ucm). Otherwise the
    #                       value is considered a space separated list of vob tags
    #                       (without the leading "\") and the trigger is applied
    #                       only to those vobs.
    #       EndTrigger      Ends this trigger definition.
    #
    ################################################################################
    Trigger:        RM_EMPTY_BRANCH
    Description:    Remove empty branches after uncheckout, rmver or rmbranch
    Type:           -element -all
    Opkinds:        -postop rmbranch,rmver,uncheckout
    ScriptEngine:   Perl
    Script:         RemoveEmptyBranch.pl
    EndTrigger

Next I applied the triggers to ccase-rnma-1 since this is our replicated backup of production and here's the output:

    bash-2.05b$ bin/mktriggers.pl -v
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/A1... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/CommEngine... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/NewTest... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/OnePhone... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/SpiceBoxSW... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/TrainCommEngine... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/alpha_video... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/bfc_systems... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/cablex... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/cablex_tools... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/docs... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/ldx_apps... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/ldx_dev... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/ldx_hausware... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/ldx_tools... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/lucentexcel... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/netro_apps... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/phonex... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/prot_callctrl... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/prot_h248... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/prot_mgcp... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/prot_openssl... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/prot_tools... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/rmna_projects... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/sec_uHSMnCipher... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/telecan... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/test_comp1... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/test_docs... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/test_pvob... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/test_trp_vob... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/voice_res_gw... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/widcomm_bluetooth... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xchg_common... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xchg_drivers... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xchg_qa... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xchg_qa_cbx... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xchg_qa_ipp... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xchg_qa_ldx... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xchg_qa_op... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xchg_qa_xme... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xme... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/xme_sa... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_Nucleus... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_TCL... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_VxWorks... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_cygwin... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_eCos... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_gnu_mips_elf... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_misc... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_psos... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_ti54x... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_vc... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_x86... done
    Adding trigger RM_EMPTY_BRANCH to vob /vobs/zOEMtools_zsp... done

When neither add (-a) or replace (-r) is specified mktriggers.pl both adds and/or replaces triggers. If run again with only -a (meaning only add missing triggers) no additional triggers are added. This is a good way to check that no new vobs have been created that are missing triggers or to only add triggers to a vob you just created. You could also specify something like mktriggers.pl -a -vobs /vobs/newvob. Combined with no execute mode and you can easily check if there are any missing triggers without adding them (i.e. mktriggers.pl -n -a).

September 09, 2005

Clearcase Support/New Clearquest setup

  • Investigating check_full_baseline routine and why it is necessary
  • Got access to Clearcase storage areas
  • Attempting to set up environment to reproduce check_full_baseline problem
  • Attended Clearcase World Wide Support meeting
  • Attended Plan for ClearQuest meeting

September 07, 2005

CC/CQ and other setup issues

  • Installed Clearcase and Clearquest on my system. CC Doctor complains that CQ is old
  • Worked with Shivdutt creating new component and the proper parent/child relationships
  • Mainly setting up my environment today