4.1.10.6.5 AdjustInstanceTypeAttrVal

 procedure AdjustInstanceTypeAttrVal(
   ncReplicated: DSName,
   writableReplica: DSName,
   var replEntinfList: REPLENTINFLIST,
   prefixTable: PrefixTable) : boolean

Informative summary of behavior: The AdjustInstanceTypeAttrVal procedure adjusts the attribute value of instanceType attribute in replEntinfList parameter to an appropriate value that suits the NC replica on the client. The procedure returns true if further processing of replicated update in replEntinfList has to be performed. Otherwise, it returns false.

  
 instanceTypeAttrVal: ATTRVAL
 instanceTypeAdjustedAttrVal: ATTRVAL
 instanceTypeVal: ULONG
 instanceTypeAdjustedVal: ULONG
 ncSubRef: DSName
  
 instanceTypeAttrVal := ENTINF_GetValue(replEntinfList.Entinf,
     instanceType, prefixTable)
 if (instanceTypeAttrVal = null) then
   /* If instanceType attribute is not present in Entinf
    * then there is no value to adjust. */
   return true
 endif
  
 instanceTypeVal :=  ValueFromATTRVAL(
     instanceTypeAttrVal, Syntax(instanceType), prefixTable)
  
 if (IT_NC_HEAD in instanceTypeVal) and 
    (not ncReplicated = replEntinfList.Entinf.pName^)
   /* If IT_NC_HEAD is set in instanceTypeVal and 
    * replEntinfList.Entinf.pName is not the DSName of the root of the
    * NC replica that the client is replicating, then this object is 
    * a subordinate reference. Take this opportunity
    * to ensure that ncReplicated!subRefs has an entry for this
    * sub-ref object.
    */
   ncSubRef := replEntinfList.Entinf.pName^
   if (not ncSubRef in ncReplicated!subRefs) then
     ncReplicated!subRefs := ncReplicated!subRefs + {ncSubRef}
   endif
   if ObjExists(ncSubRef)
     /* Ensure that all sub-ref objects have the flag IT_NC_ABOVE set. */
     if not IT_NC_ABOVE in ncSubRef!instanceType then 
       ncSubRef!instanceType := ncSubRef!instanceType + {IT_NC_ABOVE}     
     endif
  
     /* If the sub-ref object corresponds to a locally instantiated
      * child NC, then skip this update as the sub-ref object
      * will be updated when the child NC replicates in.
      */
     if PartialGCReplicaExists(ncSubRef) then
       return false /* Skip processing this entry. */
     endif
   endif
  
   /* If sub-ref object does not exist or exists but the child NC is not 
    * locally instantiated, then continue processing this entry to 
    * add or update the sub-ref object.
    */
   instanceTypeAdjustedVal := instanceTypeVal + {IT_NC_ABOVE,
         IT_UNINSTANT, IT_NC_HEAD}  
  
 else
   if (not writableReplica) and 
      (IT_WRITE in instanceTypeVal) then
     /* If the client NC replica is a partial replica then remove the
      * IT_WRITE flag from the instanceTypeVal to mark the object as
      * read-only.
      */
     instanceTypeAdjustedVal := instanceTypeVal - {IT_WRITE}
   else
     instanceTypeAdjustedVal := instanceTypeVal
   endif
 endif
  
 /* Set or reset instance type bits other than IT_WRITE and
  * IT_NC_HEAD. */
 instanceTypeAdjustedVal :=
     SetResetInstanceTypeBits(instanceTypeAdjustedVal)
  
 instanceTypeAdjustedAttrVal := ATTRVALFromValue(
   instanceTypeAdjusted, Syntax(instanceType), prefixTable)
  
 ENTINF_SetValue(replEntinfList.Entinf, instanceType, 
     instanceTypeAdjustedAttrVal, prefixTable)
  
 return true
Show: