// ===================================================================
// Title:       Device SCC Storage Extent Model 2.7
// Filename:    Device27_SCCExtents.mof
// Version:     2.7.0
// Release:     Final
// Date:        03/31/03
// ===================================================================
// Copyright 1999-2003 Distributed Management Task Force, Inc. (DMTF).
// All rights reserved.  
// DMTF is a not-for-profit association of industry members dedicated 
// to promoting enterprise and systems management and interoperability. 
// DMTF specifications and documents may be reproduced for uses
// consistent with this purpose by members and non-members, 
// provided that correct attribution is given. 
// As DMTF specifications may be revised from time to time, 
// the particular version and release date should always be noted.
//
// Implementation of certain elements of this standard or proposed 
// standard may be subject to third party patent rights, including 
// provisional patent rights (herein "patent rights"). DMTF makes 
// no representations to users of the standard as to the existence 
// of such rights, and is not responsible to recognize, disclose, or
// identify any or all such third party patent right, owners or 
// claimants, nor for any incomplete or inaccurate identification or 
// disclosure of such rights, owners or claimants. DMTF shall have no 
// liability to any party, in any manner or circumstance, under any 
// legal theory whatsoever, for failure to recognize, disclose, or 
// identify any such third party patent rights, or for such party's
// reliance on the standard or incorporation thereof in its product, 
// protocols or testing procedures. DMTF shall have no liability to 
// any party implementing such standard, whether such implementation 
// is foreseeable or not, nor to any patent owner or claimant, and shall 
// have no liability or responsibility for costs or losses incurred if 
// a standard is withdrawn or modified after publication, and shall be
// indemnified and held harmless by any party implementing the 
// standard from any and all claims of infringement by a patent owner 
// for such implementations.
//
// For information about patents held by third-parties which have 
// notified the DMTF that, in their opinion, such patent may relate to 
// or impact implementations of DMTF standards, visit 
// http://www.dmtf.org/about/policies/disclosures.php.
// ===================================================================
// Description: The Device Model extends the management concepts that
//              are related to LogicalDevices. This file describes 
//              the modeling of SCC (SCSI Controller Commands) using 
//              StorageExtents.
//
//              The object classes below are listed in an order that
//              avoids forward references. Required objects, defined 
//              by other working groups, are omitted.
// ==================================================================
// Change Log for v2.7
// CR722 - Deprecate PSExtentBaseOnPExtent, VolumeSetBasedOnPSExtent,
//         LogicalDiskBasedOnVolumeSet, AggregatePSExtent, 
//         AggregatePSExtentBasedOnPExtent,
//         AggregatePSExtentBasedOnAggregatePExtent,
//         PExtentRedundancyComponent, AggregateRedundancyComponent,
//         PhysicalExtent, ProtectedSpaceExtent, VolumeSet,
//         AggregatePExtent, and AggregatePSExtent
// CR846 - Deprecate RealizesPExtent and RealizesAggregatePExtent
// CR861 - Add Deprecated qualifier to the individual properties of 
//         the Deprecated SCC classes
// CR882 - Deprecate Snapshot and SnapshotOfExtent. Therefore moved
//         definitions from StorageExtents.mof to here.
// ================================================================== 

#pragma locale ("en_US")


// ===================================================================
// PhysicalExtent
// ===================================================================
[Deprecated {"CIMProtectedExtentBasedOn", "CIM_CompositeExtentBasedOn"},
    Version ("2.7.0"), Description (
        "Deprecated - use CIM_ProtectedExtentBasedOn or "
        "CIM_CompositeExtentBasedOn instead. The information on "
        "check and user data is better expressed in the association "
        "that layers the storage, than in the extent itself. " 
        "A PhysicalExtent is used to model an SCC RAID "
        "implementation. It defines the consecutive addressable "
        "block addresses on a single storage device, that are "
        "treated as a single StorageExtent and that are in the "
        "same StorageRedundancyGroup. An alternate possibility, "
        "if automatic configuration is used, is to instantiate or "
        "extend the AggregatePExtent class.") ] 
class CIM_PhysicalExtent : CIM_StorageExtent {

    [Override ("BlockSize"),   
        Deprecated {"CIM_CompositeExtentBasedOn.BlockSize", 
            "CIM_ProtectedExtentBasedOn.BlockSize"}, 
        MappingStrings {"MIF.DMTF|Physical Extent|001.4"} ]
    uint64 BlockSize;

    [Override ("NumberOfBlocks"),
        Deprecated {"CIM_CompositeExtentBasedOn.NumberOfBlocks", 
            "CIM_ProtectedExtentBasedOn.NumberOfBlocks"}, 
        MappingStrings {"MIF.DMTF|Physical Extent|001.3"} ]
    uint64 NumberOfBlocks;

    [Deprecated {
        "CIM_CompositeExtentBasedOn.UnitsBeforeCheckDataInterleave",
        "CIM_ProtectedExtentBasedOn.UnitsBeforeCheckDataInterleave"},
        Description (
            "Number of bytes of user data to skip before "
            "starting the check data interleave."),
        Units ("Bytes"),
        MappingStrings {"MIF.DMTF|Physical Extent|001.6"} ]
    uint64 UnitsBeforeCheckDataInterleave;

    [Deprecated {"CIM_CompositeExtentBasedOn.UnitsOfCheckData", 
            "CIM_ProtectedExtentBasedOn.UnitsOfCheckData"}, 
        Description (
            "Number of bytes to be reserved for check data."),
        Units ("Bytes"), 
        MappingStrings {"MIF.DMTF|Physical Extent|001.7"} ]
    uint64 UnitsOfCheckData;
 
    [Deprecated {"CIM_CompositeExtentBasedOn.UnitsOfUserData", 
            "CIM_ProtectedExtentBasedOn.UnitsOfUserData"}, 
        Description (
            "Number of bytes to be reserved for user data."),
        Units ("Bytes"),
        MappingStrings {"MIF.DMTF|Physical Extent|001.8"} ]
    uint64 UnitsOfUserData;
};


// ===================================================================
// ProtectedSpaceExtent
// ===================================================================
[Deprecated {"CIM_ProtectedExtentBasedOn","CIM_CompositeExtentBasedOn"}, 
    Version ("2.7.0"), Description (
        "Deprecated - use CIM_ProtectedExtentBasedOn or "
        "CIM_CompositeExtentBasedOn instead. The information on "
        "check and user data is better expressed in the association "
        "that layers the storage, than in the extent itself. " 
        "A ProtectedSpaceExtent is used to model an SCC RAID "
        "implementation. ProtectedSpaceExtent defines addressable "
        "logical block addresses, treated as a single Extent, located "
        "on one or more PhysicalExtents. ProtectedSpaceExtents exclude "
        "any logical blocks mapped as check data and contain user data "
        "stripe depth mapping information. An alternate possibility, "
        "if automatic configuration is used, is to instantiate or "
        "extend the AggregatePSExtent class.") ] 
class CIM_ProtectedSpaceExtent : CIM_StorageExtent {

    [Override ("BlockSize"),
         Deprecated {"CIM_CompositeExtentBasedOn.BlockSize", 
            "CIM_ProtectedExtentBasedOn.BlockSize"}, 
       MappingStrings {"MIF.DMTF|Protected Space Extent|001.4"} ]
    uint64 BlockSize;

    [Override ("NumberOfBlocks"),
        Deprecated {"CIM_CompositeExtentBasedOn.NumberOfBlocks", 
            "CIM_ProtectedExtentBasedOn.NumberOfBlocks"}, 
        Description (
            "The number of user data blocks contained in this Extent."),
        MappingStrings {"MIF.DMTF|Protected Space Extent|001.3"} ]
    uint64 NumberOfBlocks;

    [Deprecated {"CIM_CompositeExtentBasedOn.UserDataStripeDepth"},
        Description (
            "For a ProtectedSpaceExtent that is allocated to a Volume"
            "Set (i.e. is named in a CIM_VolumeSetBasedOnPSExtent "
            "association), this property is the number of user data "
            "bytes placed on this ProtectedSpaceExtent before moving "
            "on to the next ProtectedSpaceExtent in the VolumeSet. "
            "Otherwise, this ProtectedSpaceExtent is considered to "
            "be unallocated, and this property shall be set to "
            "zero (0h.)"),
        Units ("Bytes"),
        MappingStrings {"MIF.DMTF|Protected Space Extent|001.6"} ]
    uint64 UserDataStripeDepth;
};


// ===================================================================
// PSExtentBasedOnPExtent
// ===================================================================
[Association, Version ("2.7.0"), Deprecated {
    "CIM_ProtectedExtentBasedOn", "CIM_CompositeExtentBasedOn"}, 
    Description (
        "Covered by ProtectedExtentBasedOn or CompositeExtentBasedOn, "
        "since PhysicalExtent itself is deprecated in lieu of these "
        "associations. ProtectedSpaceExtents are BasedOn a "
        "PhysicalExtent. This relationship is made explicit by this "
        "association.") ] 
class CIM_PSExtentBasedOnPExtent : CIM_BasedOn {

    [Override ("Antecedent"), 
        Deprecated {"CIM_CompositeExtentBasedOn.Antecedent", 
            "CIM_ProtectedExtentBasedOn.Antecedent"}, 
        Description (
            "The PhysicalExtent.") ]
    CIM_PhysicalExtent REF Antecedent;

    [Override ("Dependent"),         
        Deprecated {"CIM_CompositeExtentBasedOn.Dependent", 
            "CIM_ProtectedExtentBasedOn.Dependent"}, 
        Description (
            "The ProtectedSpaceExtent which is built on the Physical"
            "Extent.") ]
    CIM_ProtectedSpaceExtent REF Dependent;
  
    [Override ("StartingAddress"), 
        Deprecated {"CIM_CompositeExtentBasedOn.StartingAddress", 
            "CIM_ProtectedExtentBasedOn.StartingAddress"}, 
        Description (
            "The starting logical block address of the PhysicalExtent "
            "from which this ProtectedSpaceExtent is derived."), 
        MappingStrings {"MIF.DMTF|Protected Space Extent|001.2"} ]
    uint64 StartingAddress;
};


// ===================================================================
// VolumeSet
// ===================================================================
[Deprecated {"CIM_CompositeExtent"}, Version ("2.7.0"), Description (
    "VolumeSet is deprecated in lieu of CompositeExtent, which "
    "removes the restriction that the Set must be exported. "
    "A VolumeSet can be used to model an SCC RAID implementation. "
    "VolumeSets represent a contiguous range of logical blocks "
    "presented to the operating environment. VolumeSets may overlap. "
    "However, the underlying PhysicalExtents within the overlap "
    "shall not contain any check data. They are BasedOn one or more "
    "ProtectedSpaceExtents. These BasedOn associations should be "
    "instantiated or subclassed as needed.") ] 
class CIM_VolumeSet : CIM_StorageVolume {

    [Override ("NumberOfBlocks"), 
        Deprecated {"CIM_CompositeExtent.NumberOfBlocks"}, 
        MappingStrings {"MIF.DMTF|Volume Set|001.3"} ]
    uint64 NumberOfBlocks;

    [Deprecated {"CIM_CompositeExtent.ExtentStripeLength"}, 
        Description ( 
            "Number of contiguous ProtectedSpaceExtents counted "
            "before looping back to the first ProtectedSpaceExtent "
            "of the current stripe. It is the number of Extents "
            "forming the user data stripe."),
        MappingStrings {"MIF.DMTF|Volume Set|001.4"} ]
    uint64 PSExtentStripeLength;

    [Deprecated {"CIM_CompositeExtent.ExtentInterleaveDepth"}, 
        Description ( 
            "Number of ProtectedSpaceExtents to stripe as a collective "
            "set. In SCC, this value is defined as the number of "
            "stripes to count before continuing to map into the next "
            "contiguous set of Extents, beyond the current stripe."), 
        MappingStrings {"MIF.DMTF|Volume Set|001.5"} ]
    uint64 PSExtentInterleaveDepth;

    [Deprecated {"No value"}, Description ( 
        "VolumeSets in SCC have additional status information "
        "beyond that captured in the Availability and other "
        "properties, inherited from ManagedSystemElement. This "
        "additional information (for example, \"Protection Disabled\", "
        "value=9) is captured in the VolumeStatus property."), 
        ValueMap {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
            "10", "11", "12", "13", "14"},  
        Values {"Other", "Unknown", "None/Not Applicable", "Broken", 
           "Data Lost", "Dynamic Reconfig", "Exposed", 
           "Fractionally Exposed", "Partially Exposed", 
           "Protection Disabled", 
           // 10
           "Readying", "Rebuild", "Recalculate", "Spare in Use", 
           "Verify In Progress"} ]
    uint16 VolumeStatus;
};


// ===================================================================
// VolumeSetBasedOnPSExtent
// ===================================================================
[Association, Version ("2.7.0"), 
    Deprecated {"CIM_CompositeExtentBasedOn"},
    Description (
        "This association is deprecated in lieu of "
        "CompositeExtentBasedOn, since VolumeSets and "
        "ProtectedSpaceExtents are themselves deprecated. "
        "The relationship describes that VolumeSets are BasedOn "
        "on one or more ProtectedSpaceExtents.") ]
class CIM_VolumeSetBasedOnPSExtent : CIM_BasedOn {

    [Override ("Antecedent"), Min (1), 
        Deprecated {"CIM_CompositeExtentBasedOn.Antecedent"}, 
        Description ("The ProtectedSpaceExtent.") ]
    CIM_ProtectedSpaceExtent REF Antecedent;

    [Override ("Dependent"), 
        Deprecated {"CIM_CompositeExtentBasedOn.Dependent"}, 
        Description (
            "The VolumeSet which is built on the ProtectedSpace"
            "Extent.") ]
    CIM_VolumeSet REF Dependent;

    [Deprecated {"CIM_CompositeExtentBasedOn.LBAsMappedByDecrementing"}, 
        Description (
            "True if logical blocks in the ProtectedSpaceExtent are "
            "mapped in decrementing order. This property corresponds "
            "to the INCDEC value in the SCC-2 Volume Set PS_Extent "
            "Descriptor.") ]
    boolean LBAsMappedByDecrementing;

    [Deprecated {
            "CIM_CompositeExtentBasedOn.LBAMappingIncludesCheckData"},
        Description (
            "True if the logical block mapping algorithm includes check "
            "data bytes. This property corresponds to the NOCHKSKIP "
            "attribute in the SCC-2 Volume Set PS_Extent Descriptor.") ]
    boolean LBAMappingIncludesCheckData;
};


// ===================================================================
// LogicalDiskBasedOnVolumeSet
// ===================================================================
[Association, Version ("2.7.0"), Deprecated {"CIM_BasedOn"},
    Description (
        "This association describes that LogicalDisks can be BasedOn "
        "a VolumeSet. However, there is no need for the specificity "
        "of this association.  It is deprecated in lieu of the generic "
        "BasedOn relationship.") ]
class CIM_LogicalDiskBasedOnVolumeSet : CIM_LogicalDiskBasedOnVolume {

    [Override ("Antecedent"), Max (1),
        Deprecated {"CIM_BasedOn.Antecedent"}, 
        Description ("The VolumeSet.") ]
    CIM_VolumeSet REF Antecedent;
};


// ===================================================================
// AggregatePExtent
// ===================================================================
[Deprecated {"CIM_StorageExtent", "CIM_CompositeExtentBasedOn"}, 
    Version ("2.7.0"), Description (
        "This class is deprecated in lieu of the generic StorageExtent "
        "object and the ProtectedExtentBasedOn association. "
        "An AggregatePExtent is used to model an SCC RAID "
        "implementation. AggregatePExtents provide summary information "
        "about the addressable logical blocks which are in the same "
        "StorageRedundancyGroup and reside on the same storage device. "
        "This is an alternative grouping for PhysicalExtents, when "
        "only summary information is needed or when automatic "
        "configuration is used.") ] 
class CIM_AggregatePExtent : CIM_StorageExtent {

   [Override ("NumberOfBlocks"),
       Deprecated {"CIM_CompositeExtentBasedOn.NumberOfBlocks", 
            "CIM_StorageExtent.NumberOfBlocks"}, 
       Description (
       "Total number of blocks (including the check data blocks) "
       "contained in this AggregatePExtent.  The block size (an "
       "inherited property) should be set to the same value as for "
       "the MediaAccessDevice associated with this Extent."),
    MappingStrings {"MIF.DMTF|Aggregate Physical Extent|001.2"} ]
   uint64 NumberOfBlocks;

   [Deprecated {"CIM_CompositeExtentBasedOn.UnitsOfCheckData"},
       Description (
       "The number of blocks contained in this AggregatePExtent "
       "to be used as check data. If this AggregatePExtent is "
       "available, then this value shall be zero."), 
    MappingStrings {"MIF.DMTF|Aggregate Physical Extent|001.3"} ]
   uint64 BlocksOfCheckData;
};


// ===================================================================
// AggregatePSExtent
// ===================================================================
[Deprecated {"CIM_StorageExtent", "CIM_CompositeExtentBasedOn"}, 
    Version ("2.7.0"),  Description (
        "Similar to AggregatePExtent, this class is deprecated in "
        "lieu of the generic StorageExtent object and the "
        "ProtectedExtentBasedOn association. An AggregatePSExtent "
        "is used to model an SCC RAID implementation. AggregatePSExtents "
        "define the number of addressable logical blocks on a single "
        "storage device, excluding any logical blocks mapped as check "
        "data. This is an alternative grouping for ProtectedSpace"
        "Extents, when only summary information is needed or when "
        "automatic configuration is used.") ] 
class CIM_AggregatePSExtent : CIM_StorageExtent {

    [Override ("NumberOfBlocks"), 
       Deprecated {"CIM_CompositeExtentBasedOn.NumberOfBlocks", 
            "CIM_StorageExtent.NumberOfBlocks"}, 
        Description (
            "Total number of user data blocks that are contained in "
            "this Extent."),
        MappingStrings {
            "MIF.DMTF|Aggregate Protected Space Extent|001.2"} ]
    uint64 NumberOfBlocks;   
};


// ===================================================================
// AggregatePSExtentBasedOnPExtent
// ===================================================================
[Association, Deprecated {"CIM_ProtectedSpaceBasedOn"}, 
    Version ("2.7.0"), Description (
        "This association is deprecated in lieu of "
        "ProtectedSpaceBasedOn, since PhysicalExtents and "
        "AggregatePSExtents are themselves deprecated. "
        "The association describes that AggregatePSExtents are "
        "BasedOn a single PhysicalExtent.") ]
class CIM_AggregatePSExtentBasedOnPExtent : CIM_BasedOn {

    [Override ("Antecedent"), Max (1), 
        Deprecated {"CIM_ProtectedSpaceBasedOn.Antecedent"}, 
        Description ("The PhysicalExtent.") ]
    CIM_PhysicalExtent REF Antecedent;

    [Override ("Dependent"),  
        Deprecated {"CIM_ProtectedSpaceBasedOn.Dependent"}, 
        Description (
            "The AggregatePSExtent which is built on the "
            "PhysicalExtent.") ]
    CIM_AggregatePSExtent REF Dependent;
};


// ===================================================================
// AggregatePSExtentBasedOnAggregatePExtent
// ===================================================================
[Association, Deprecated {"CIM_ProtectedSpaceBasedOn"},
    Version ("2.7.0"), Description (
        "This association is deprecated in lieu of "
        "ProtectedSpaceBasedOn, since AggregatePExtents and "
        "AggregatePSExtents are themselves deprecated. "
        "The association describes that AggregatePSExtents are "
        "BasedOn a single AggregatePExtent.") ]
class CIM_AggregatePSExtentBasedOnAggregatePExtent : CIM_BasedOn {

    [Override ("Antecedent"), Max (1),
        Deprecated {"CIM_ProtectedSpaceBasedOn.Antecedent"}, 
        Description ("The AggregatePExtent.") ]
    CIM_AggregatePExtent REF Antecedent;

    [Override ("Dependent"), 
        Deprecated {"CIM_ProtectedSpaceBasedOn.Dependent"}, 
        Description (
            "The AggregatePSExtent which is built on the Aggregate"
            "PExtent.") ]
    CIM_AggregatePSExtent REF Dependent;
};


// ===================================================================
// PExtentRedundancyComponent
// ===================================================================
[Association, Aggregation, Deprecated {"CIM_ExtentRedundancyComponent"},
    Version ("2.7.0"), Description (
        "Describes the PhysicalExtents participating in a Storage"
        "RedundancyGroup. However, there is no need for the specificity "
        "of this association.  It is deprecated in lieu of the generic "
        "ExtentRedundancyComponent relationship, its superclass.") ]
class CIM_PExtentRedundancyComponent : CIM_ExtentRedundancyComponent {

    [Override ("GroupComponent"), Aggregate,
        Deprecated {"CIM_ExtentRedundancyComponent.GroupComponent"},
        Description ("The StorageRedundancyGroup.")   ]
    CIM_StorageRedundancyGroup REF GroupComponent;

    [Override ("PartComponent"), 
        Deprecated {"CIM_ExtentRedundancyComponent.PartComponent"},
        Description (
        "The PhysicalExtent participating in the RedundancyGroup.") ]
    CIM_PhysicalExtent REF PartComponent;
};


// ===================================================================
// AggregateRedundancyComponent
// ===================================================================
[Association, Aggregation, Deprecated {"CIM_ExtentRedundancyComponent"}, 
    Version ("2.7.0"), Description (
        "Describes the AggregatePExtent in a StorageRedundancyGroup. "
        "However, there is no need for the specificity of this "
        "association.  It is deprecated in lieu of the generic "
        "ExtentRedundancyComponent relationship, its superclass.") ] 
class CIM_AggregateRedundancyComponent : CIM_ExtentRedundancyComponent {

    [Override ("GroupComponent"), Aggregate,
        Deprecated {"CIM_ExtentRedundancyComponent.GroupComponent"},
        Description ("The StorageRedundancyGroup.") ]
    CIM_StorageRedundancyGroup REF GroupComponent;

    [Override ("PartComponent"), 
        Deprecated {"CIM_ExtentRedundancyComponent.PartComponent"},
        Description (
            "The AggregatePExtent participating in the "
            "RedundancyGroup.") ]
    CIM_AggregatePExtent REF PartComponent;
};


// ===================================================================
// RealizesPExtent
// ===================================================================
[Association, Version ("2.7.0"), Deprecated {"CIM_RealizesExtent"}, 
    Description (
        "PhysicalExtents are realized on a PhysicalMedia. This is "
        "described by RealizesPExtent. However, there is no "
        "need for the specificity of this association. It is "
        "deprecated in lieu of the generic RealizesExtent "
        "relationship.") ]
class CIM_RealizesPExtent : CIM_RealizesExtent {

    [Override ("Antecedent"), Max (1),
        Deprecated {"CIM_RealizesExtent.Antecedent"},
        Description (
            "The PhysicalMedia on which the Extent is realized.") ]
    CIM_PhysicalMedia REF Antecedent;
    
    [Override ("Dependent"), 
        Deprecated {"CIM_RealizesExtent.Dependent"},
        Description ( 
        "The PhysicalExtent that is located on the Media.") ]
    CIM_PhysicalExtent REF Dependent;
};


// ===================================================================
// RealizesAggregatePExtent
// ===================================================================
[Association, Version ("2.7.0"), Deprecated {"CIM_RealizesExtent"}, 
    Description (
        "AggregatePExtents are realized on a PhysicalMedia. This is "
        "described by RealizesAggregatePExtent. However, there is no "
        "need for the specificity of this association. It is "
        "deprecated in lieu of the generic RealizesExtent "
        "relationship.") ]
class CIM_RealizesAggregatePExtent : CIM_RealizesExtent {
    
    [Override ("Antecedent"), Max (1), 
        Deprecated {"CIM_RealizesExtent.Antecedent"},
        Description (
        "The PhysicalMedia on which the Extent is realized.") ]
    CIM_PhysicalMedia REF Antecedent;
      
    [Override ("Dependent"), 
        Deprecated {"CIM_RealizesExtent.Dependent"},
        Description (
        "The AggregatePExtent that is located on the Media.") ]
    CIM_AggregatePExtent REF Dependent;
};


// ===================================================================
// Snapshot 
// ===================================================================
[Version ("2.7.0"), Deprecated {"No Value"}, Description (
    "Deprecated.  Snapshots are now modeled in a more abstrct way "
    "using StorageExtent and StorageSynchronized. \n"
    "The Snapshot class is an optional construct. It can be "
    "used to represent an Extent that contains a full copy of "
    "another Extent, or the changes to that Extent when performing "
    "a delta-based (delta before or delta after) copy. \n"
    "Snapshot's definition in CIM is not equivalent to the act "
    "of creating a volume or file-based snapshot, or a point in "
    "time copy. It is at a much lower level and represents the "
    "use of storage to hold a copied image of an Extent, or to hold "
    "changes to an Extent.  Use of the Snapshot object when making "
    "a full copy is only recommended if the purpose is to describe "
    "the existence of a copy. (This use will be very infrequent.) "
    "The problem with describing an Extent solely as a 'snapshot' "
    "is that when the snapshot/copy is broken, the object must be "
    "destroyed. Typically, this object still holds valid data, and "
    "would have to be reinstantiated. If the 'full copy' object "
    "is to be treated as a StorageVolume or more general Extent, "
    "then it should be modeled as such from the beginning - "
    "i.e., not as an instance of Snapshot but as an instance of a "
    "generic StorageExtent or StorageVolume. In this case, the "
    "Synchronized association would be used to describe that one "
    "StorageExtent is synchronized with another. \n"
    "When describing a delta-based snapshot/point in time copy, "
    "the Snapshot object represents the store holding the before/after "
    "image changes to the original Extent. For example, when doing a "
    "'delta before' Snapshot, the resultant target would be modeled "
    "as a StorageExtent that is BasedOn the original Extent and the "
    "instance of Snapshot (that holds the changes to the original "
    "Extent).") ]
class CIM_Snapshot : CIM_StorageExtent {

    [Deprecated {"CIM_Synchronized.SyncMaintained"}, Description (
        "True indicates that the snapshot is synced.") ]
    boolean IsSynced;
 
    [Deprecated {"CIM_Synchronized.WhenSynced"},Description (
        "The time stamp indicating when the sync occurred.") ]
    datetime SyncTime;
};


// ===================================================================
// SnapshotOfExtent
// ===================================================================
[Association, Version ("2.7.0"), Deprecated {"No Value"}, 
    Description (
    "Deprecated. Snapshots are now modeled in a more abstract way "
    "using StorageExtent and CIM_StorageSynchronized.\n"
    "SnapshotOfExtent is an association between an Extent and "
    "its Snapshot. This relationship is made explicit in this "
    "association.") ]
class CIM_SnapshotOfExtent : CIM_Dependency {
 
    [Deprecated {"No Value"}, 
     Override ("Antecedent"), Max (1), Description (
        "The StorageExtent.") ]
    CIM_StorageExtent REF Antecedent;
 
    [Deprecated {"No Value"}, 
     Override ("Dependent"), Description (
        "The Snapshot.") ]
    CIM_Snapshot REF Dependent;
 
    [Deprecated {"CIM_StorageSynchronized.CopyType"}, 
     Description ("The type of snapshot."), 
        ValueMap {"0", "1", "2", "3", "4"},  
        Values {"Other", "Unknown", "Copy", "Before Delta", 
            "After Delta"} ]
    uint16 SnapshotType;
};


// ===================================================================
// end of file
// ===================================================================
