3.2.4.2 Metadata Synchronization

The DSS first synchronizes configuration settings, supported languages, categories, classifications, and detectoids during this step. It then synchronizes the update revisions information from the USS. Each request sent during this processing step uses the Cookie returned by GetCookie as an input parameter to various operations.

The DSS MUST synchronize metadata from the USS as follows:

  1. Send a GetConfigData request to get configuration settings and languages supported by the USS. The request message is composed as follows:

    1. Last Cookie from the Parent USS State is copied to the request message.

    2. Last ConfigAnchor from the Parent USS State is copied to the request message.

  2. Store the following information in the returned response in the Parent USS State for future use:

    • CatalogOnlySync

    • LazySync

    • ServerHostsPsfFiles

    • MaxNumberOfUpdatesPerRequest

    • NewConfigAnchor

    • LanguageUpdateList

  3. Send a GetRevisionIdList request to the USS with the following filter:

    • GetConfig: Set to TRUE to get Categories, Update Classifications, Detectoids.

    • Get63LanguageOnly: Omit if the DSS implements version 1.1 of the protocol. Set to TRUE if the DSS implements versions 1.2 or higher of the protocol (as specified in section 1.7) but does not intend to support more than 63 languages. Otherwise, set to FALSE.

  4. Store the Anchor returned by this operation response in the Last SyncAnchor field of the USS Parent State for future use within the protocol.

  5. Compose a GetUpdateData request by copying the Revision IDs returned in the GetRevisionIdList response into the updateIDs element of the GetUpdateData request.

    The number of items requested in this operation MUST NOT exceed MaxNumberOfUpdatesPerRequest, as specified in GetConfigData (section 3.1.4.4).

  6. Send the GetUpdateData request to the USS to obtain the metadata related to any new categories and detectoids using the GetUpdateData operation. If the metadata is received in the XmlUpdateBlobCompressed field of the response, it MUST be decompressed before storing it in the data model, as specified in GetUpdateData (section 3.1.4.6).

    If the number of revisions in the GetRevisionIdList response in the previous step exceeds the MaxNumberOfUpdatesPerRequest limit, then the DSS MUST repeat steps 5 and 6 in batches not exceeding the above limit until the metadata for all the revisions is obtained.

  7. On successful completion of this operation, store the revision IDs and the metadata in the Categories, Update Classifications, and Detectoid Tables. The DSS MUST use the following properties in the XML metadata to detect if a revision is a category, update classification, or a detectoid, as specified in section 3.1.1:

    • Detectoid: UpdateType = "Detectoid"

    • Update Classification: UpdateType = "Category" and CategoryType="UpdateClassification"

    • Category: UpdateType = "Category" and CategoryType="Company", "ProductFamily", or "Product".

  8. Send a GetRevisionIdList request to the USS to get the software/driver update revisions IDs. The input filter is used, as specified in the following list:

    • GetConfig: Set to false.

    • Get63LanguageOnly: Omit if the DSS implements version 1.1 of the protocol. Set to TRUE if the DSS implements versions 1.2 or higher of the protocol (as specified in section 1.7) but does not intend to support more than 63 languages. Otherwise, set to FALSE.

  9.  Store the Anchor returned by this operation response in the Last SyncAnchor field of the USS Parent State for future use within the protocol.

  10. Compose a GetUpdateData request by copying the revision IDs returned in the GetRevisionIdList response into the updateIDs element of the GetUpdateData request.

    The number of items requested in this operation MUST NOT exceed MaxNumberOfUpdatesPerRequest, as specified in GetConfigData (section 3.1.4.4).

  11. Send the GetUpdateData request to the USS to obtain the metadata related to the new update revisions returned in the GetRevisionIdList. If the metadata is received in the XmlUpdateBlobCompressed field of the response, it MUST be decompressed before storing it in the data model, as specified in section 3.1.4.6. Store the metadata in the Revision Table.

    If the number of revisions in the GetRevisionIdList response in the previous step exceeds the MaxNumberOfUpdatesPerRequest limit, then the DSS MUST repeat steps 10 and 11 in batches not exceeding the above limit until the metadata for all the revisions is obtained.

  12. From each metadata for an update revision, extract the following elements (as specified in section 3.1.1.1) for each file associated with this update revision and store the extracted data in the Revision Table:

    • FileName

    • FileDigest

    • PatchingType

  13. From each metadata for an update revision, extract the EulaID (as specified in section 3.1.1.1) and store it in the EULAs Table.

  14. From each metadata for an update revision, extract the FragmentType, and IsEncrypted (as specified in section 3.1.1.1). If FragmentType matches "FileURL", then set the IsSecure field (section 3.1.1) to 1 in the Revision Table. If IsEncrypted is true, set the value of the IsEncrypted field to 1 in the Revision Table.

  15. From each metadata for an update revision, extract the FragmentType (as specified in section 3.1.1.1). If FragmentType is "FileDecryption", then the update contains additional decryption information. For all such updates, compose a GetUpdateDecryptionData (section 3.1.4.18) request.

    The number of items requested in this operation MUST NOT exceed MaxUpdatesPerRequestInGetUpdateDecryptionData, as specified in section 3.1.4.4).

  16. Send the GetUpdateDecryptionData request to the USS to obtain the decryption data related to the updates. For each file associated with the update, store the DecryptionKey in the Revision Table.

  17. After all update revision metadata is received, continue with the Deployments Synchronization step if the Replication Mode in DSS's Server Configuration is set to "Replica". Otherwise, go to the Content Synchronization step as given in section 3.2.4.4.