From: "Chang, Abner via groups.io" <abner.chang=amd.com@groups.io>
To: Nickle Wang <nicklew@nvidia.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Igor Kulchytskyy <igork@ami.com>, Nick Ramirez <nramirez@nvidia.com>
Subject: Re: [edk2-devel] [edk2-redfish-client][PATCH] RedfishClientPkg/ComputerSystemCollectionDxe: handle more scenarios
Date: Tue, 28 Nov 2023 02:30:48 +0000 [thread overview]
Message-ID: <MN2PR12MB3966A7D0ACDFBDBD160362C2EABCA@MN2PR12MB3966.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20231123141307.32052-1-nicklew@nvidia.com>
[AMD Official Use Only - General]
Reviewed-by: Abner Chang <abner.chang@amd.com>
> -----Original Message-----
> From: Nickle Wang <nicklew@nvidia.com>
> Sent: Thursday, November 23, 2023 10:13 PM
> To: devel@edk2.groups.io
> Cc: Chang, Abner <Abner.Chang@amd.com>; Igor Kulchytskyy
> <igork@ami.com>; Nick Ramirez <nramirez@nvidia.com>
> Subject: [edk2-redfish-client][PATCH]
> RedfishClientPkg/ComputerSystemCollectionDxe: handle more scenarios
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> This change defines two more error returns and allow feature driver to
> handle the scenarios while 1) the resource is not owned by feature
> driver. 2) feature driver owns this resource but there is nothing to
> manage on this resource now.
> Detail changes are:
> - Use "%a:" instead of "%a," in debug macro.
> - Add two error return from EdkIIRedfishResourceConfigIdentify().
> - EFI_UNSUPPORTED: this resource is not owned by feature driver.
> Caller should ignore this resource.
> - EFI_NOT_FOUND: this resource is owned by feature driver but
> there is nothing to handle now. Caller may ignore rest of
> operations and proceed to next Redfish resource.
> - Add error return from EdkIIRedfishResourceConfigCheck().
> - EFI_UNSUPPORTED: this resource it not owned by feature driver.
> Caller should ignore this URI.
>
> Signed-off-by: Nickle Wang <nicklew@nvidia.com>
> Cc: Abner Chang <abner.chang@amd.com>
> Cc: Igor Kulchytskyy <igork@ami.com>
> Cc: Nick Ramirez <nramirez@nvidia.com>
> ---
> .../Library/EdkIIRedfishResourceConfigLib.h | 9 ++-
> .../ComputerSystemCollectionDxe.c | 59 +++++++++++--------
> 2 files changed, 43 insertions(+), 25 deletions(-)
>
> diff --git a/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h
> b/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h
> index a7856033..8999868a 100644
> --- a/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h
> +++ b/RedfishClientPkg/Include/Library/EdkIIRedfishResourceConfigLib.h
> @@ -77,6 +77,8 @@ EdkIIRedfishResourceConfigUpdate (
> @param[in] Uri The target URI to consume.
>
> @retval EFI_SUCCESS Value is returned successfully.
> + @retval EFI_UNSUPPORTED This resource is not owned by feature
> driver.
> + Caller should ignore this resource.
> @retval Others Some error happened.
>
> **/
> @@ -94,7 +96,12 @@ EdkIIRedfishResourceConfigCheck (
> @param[in] InformationExchange Pointer to
> RESOURCE_INFORMATION_EXCHANGE.
>
> @retval EFI_SUCCESS This is target resource which we want to handle.
> - @retval EFI_UNSUPPORTED This is not the target resource.
> + @retval EFI_UNSUPPORTED This resource is not owned by feature
> driver.
> + Caller should ignore this resource.
> + @retval EFI_NOT_FOUND This resource is owned by feature driver but
> there
> + is nothing to handle now. Caller may ignore the
> + rest of operations like check(), provisioning(),
> + consume() and update().
> @retval Others Some error happened.
>
> **/
> diff --git
> a/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste
> mCollectionDxe.c
> b/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste
> mCollectionDxe.c
> index 1e362d49..111f8212 100644
> ---
> a/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste
> mCollectionDxe.c
> +++
> b/RedfishClientPkg/Features/ComputerSystemCollectionDxe/ComputerSyste
> mCollectionDxe.c
> @@ -3,6 +3,7 @@
> Redfish feature driver implementation - ComputerSystemCollection
>
> (C) Copyright 2020-2022 Hewlett Packard Enterprise Development LP<BR>
> + Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights
> reserved.
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> @@ -32,11 +33,11 @@ HandleResource (
> // Resource match
> //
>
> - DEBUG ((REDFISH_DEBUG_TRACE, "%a, process resource for: %s\n",
> __func__, Uri));
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: process resource for: %s\n",
> __func__, Uri));
>
> Status = GetRedfishSchemaInfo (Private->RedfishService, Private-
> >JsonStructProtocol, Uri, &SchemaInfo);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to get schema information from: %s
> %r\n", __func__, Uri, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to get schema information from: %s
> %r\n", __func__, Uri, Status));
> return Status;
> }
>
> @@ -50,15 +51,19 @@ HandleResource (
> Status = EdkIIRedfishResourceConfigIdentify (&SchemaInfo, Uri, Private-
> >InformationExchange);
> if (EFI_ERROR (Status)) {
> if (Status == EFI_UNSUPPORTED) {
> - DEBUG ((DEBUG_MANAGEABILITY, "%a, \"%s\" is not handled by us\n",
> __func__, Uri));
> + DEBUG ((DEBUG_MANAGEABILITY, "%a: \"%s\" is not handled by us\n",
> __func__, Uri));
> + return EFI_SUCCESS;
> + } else if (Status == EFI_NOT_FOUND) {
> + DEBUG ((DEBUG_MANAGEABILITY, "%a: \"%s\" has nothing to
> handle\n", __func__, Uri));
> + RedfisSetRedfishUri (L"/Systems/{1}", Uri);
> return EFI_SUCCESS;
> }
>
> - DEBUG ((DEBUG_ERROR, "%a, fail to identify resource: \"%s\": %r\n",
> __func__, Uri, Status));
> + DEBUG ((DEBUG_ERROR, "%a: fail to identify resource: \"%s\": %r\n",
> __func__, Uri, Status));
> return Status;
> }
> } else {
> - DEBUG ((REDFISH_DEBUG_TRACE, "%a, history record found: %s\n",
> __func__, ConfigLang));
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: history record found: %s\n",
> __func__, ConfigLang));
> //
> // Set exchange information
> //
> @@ -70,7 +75,7 @@ HandleResource (
> AllocateZeroPool (sizeof
> (REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG));
>
> if (Private->InformationExchange-
> >ReturnedInformation.ConfigureLanguageList.List == NULL) {
> - DEBUG ((DEBUG_ERROR, "%a, Fail to allocate memory for
> REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG.\n", __func__));
> + DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for
> REDFISH_FEATURE_ARRAY_TYPE_CONFIG_LANG.\n", __func__));
> return EFI_OUT_OF_RESOURCES;
> }
>
> @@ -78,7 +83,7 @@ HandleResource (
> Private->InformationExchange-
> >ReturnedInformation.ConfigureLanguageList.List[0].ConfigureLang =
> (EFI_STRING)AllocateCopyPool (StrSize (ReturnedConfigLang), (VOID
> *)ReturnedConfigLang);
> } else {
> - DEBUG ((DEBUG_ERROR, "%a,
> GetArrayIndexFromArrayTypeConfigureLang fail: %r\n", __func__, Status));
> + DEBUG ((DEBUG_ERROR, "%a:
> GetArrayIndexFromArrayTypeConfigureLang fail: %r\n", __func__, Status));
> }
>
> FreePool (ConfigLang);
> @@ -91,13 +96,18 @@ HandleResource (
> DEBUG ((REDFISH_DEBUG_TRACE, "%a Check for %s\n", __func__, Uri));
> Status = EdkIIRedfishResourceConfigCheck (&SchemaInfo, Uri);
> if (EFI_ERROR (Status)) {
> + if (Status == EFI_UNSUPPORTED) {
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: \"%s\" is not handled by us\n",
> __func__, Uri));
> + return EFI_SUCCESS;
> + }
> +
> //
> // The target property does not exist, do the provision to create property.
> //
> DEBUG ((REDFISH_DEBUG_TRACE, "%a provision for %s\n", __func__, Uri));
> Status = EdkIIRedfishResourceConfigProvisionging (&SchemaInfo, Uri,
> Private->InformationExchange, FALSE);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to provision with GET mode: %r\n",
> __func__, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to provision with GET mode: %r\n",
> __func__, Status));
> }
>
> return Status;
> @@ -109,7 +119,7 @@ HandleResource (
> DEBUG ((REDFISH_DEBUG_TRACE, "%a consume for %s\n", __func__, Uri));
> Status = EdkIIRedfishResourceConfigConsume (&SchemaInfo, Uri);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to consume resource for: %s: %r\n",
> __func__, Uri, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to consume resource for: %s: %r\n",
> __func__, Uri, Status));
> }
>
> //
> @@ -118,7 +128,7 @@ HandleResource (
> DEBUG ((REDFISH_DEBUG_TRACE, "%a update for %s\n", __func__, Uri));
> Status = EdkIIRedfishResourceConfigUpdate (&SchemaInfo, Uri);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to update resource for: %s: %r\n",
> __func__, Uri, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to update resource for: %s: %r\n",
> __func__, Uri, Status));
> }
>
> return Status;
> @@ -145,7 +155,7 @@ HandleCollectionResource (
> return EFI_NOT_READY;
> }
>
> - DEBUG ((REDFISH_DEBUG_TRACE, "%a, process collection for: %s\n",
> __func__, Private->CollectionUri));
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: process collection for: %s\n",
> __func__, Private->CollectionUri));
>
> //
> // Convert JSON text to C structure.
> @@ -157,7 +167,7 @@ HandleCollectionResource (
> (EFI_REST_JSON_STRUCTURE_HEADER **)&Collection
> );
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, ToStructure() failed: %r\n", __func__,
> Status));
> + DEBUG ((DEBUG_ERROR, "%a: ToStructure() failed: %r\n", __func__,
> Status));
> return Status;
> }
>
> @@ -182,7 +192,7 @@ HandleCollectionResource (
> if (MemberUri != NULL) {
> Status = HandleResource (Private, MemberUri);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, process ComputerSystemCollection
> resource: %a failed: %r\n", __func__, UriData->Uri, Status));
> + DEBUG ((DEBUG_ERROR, "%a: process ComputerSystemCollection
> resource: %a failed: %r\n", __func__, UriData->Uri, Status));
> }
>
> FreePool (MemberUri);
> @@ -216,19 +226,19 @@ CreateCollectionResource (
> return EFI_INVALID_PARAMETER;
> }
>
> - DEBUG ((REDFISH_DEBUG_TRACE, "%a, create resource for collection for:
> %s\n", __func__, Private->CollectionUri));
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: create resource for collection for:
> %s\n", __func__, Private->CollectionUri));
>
> Status = GetSupportedSchemaVersion (REDFISH_SCHEMA_NAME,
> &SchemaInfo);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to find supported schema from HII
> database: %r\n", __func__, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to find supported schema from HII
> database: %r\n", __func__, Status));
> return Status;
> }
>
> - DEBUG ((REDFISH_DEBUG_TRACE, "%a, supported schema: %a
> %a.%a.%a\n", __func__, SchemaInfo.Schema, SchemaInfo.Major,
> SchemaInfo.Minor, SchemaInfo.Errata));
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: supported schema: %a
> %a.%a.%a\n", __func__, SchemaInfo.Schema, SchemaInfo.Major,
> SchemaInfo.Minor, SchemaInfo.Errata));
>
> Status = EdkIIRedfishResourceConfigProvisionging (&SchemaInfo, Private-
> >CollectionUri, Private->InformationExchange, TRUE);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to create resource for: %s: %r\n",
> __func__, Private->CollectionUri, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to create resource for: %s: %r\n",
> __func__, Private->CollectionUri, Status));
> }
>
> return Status;
> @@ -283,14 +293,14 @@ CollectionHandler (
> return EFI_INVALID_PARAMETER;
> }
>
> - DEBUG ((REDFISH_DEBUG_TRACE, "%a, collection handler for %s\n",
> __func__, Private->CollectionUri));
> + DEBUG ((REDFISH_DEBUG_TRACE, "%a: collection handler for %s\n",
> __func__, Private->CollectionUri));
>
> //
> // Query collection from Redfish service.
> //
> Status = GetResourceByUri (Private->RedfishService, Private->CollectionUri,
> &Private->RedResponse);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, unable to get resource from: %s :%r\n",
> __func__, Private->CollectionUri, Status));
> + DEBUG ((DEBUG_ERROR, "%a: unable to get resource from: %s :%r\n",
> __func__, Private->CollectionUri, Status));
> goto ON_RELEASE;
> }
>
> @@ -350,6 +360,7 @@ RedfishCollectionFeatureCallback (
>
> RedfishService = Private->RedfishService;
> if (RedfishService == NULL) {
> + DEBUG ((DEBUG_ERROR, "%a: no Redfish service configured\n",
> __func__));
> return EFI_NOT_READY;
> }
>
> @@ -368,7 +379,7 @@ RedfishCollectionFeatureCallback (
> //
> ResourceUri = (EFI_STRING)AllocateZeroPool (MAX_URI_LENGTH * sizeof
> (CHAR16));
> if (ResourceUri == NULL) {
> - DEBUG ((DEBUG_ERROR, "%a, Fail to allocate memory for full URI.\n",
> __func__));
> + DEBUG ((DEBUG_ERROR, "%a: Fail to allocate memory for full URI.\n",
> __func__));
> return EFI_OUT_OF_RESOURCES;
> }
>
> @@ -386,7 +397,7 @@ RedfishCollectionFeatureCallback (
>
> Status = CollectionHandler (Private);
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, CollectionHandler failure: %r\n", __func__,
> Status));
> + DEBUG ((DEBUG_ERROR, "%a: CollectionHandler failure: %r\n", __func__,
> Status));
> }
>
> return EFI_SUCCESS;
> @@ -492,7 +503,7 @@ EfiRestJasonStructureProtocolIsReady (
> (VOID **)&mRedfishCollectionPrivate->JsonStructProtocol
> );
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to locate
> gEfiRestJsonStructureProtocolGuid: %r\n", __func__, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to locate
> gEfiRestJsonStructureProtocolGuid: %r\n", __func__, Status));
> }
>
> gBS->CloseEvent (Event);
> @@ -528,7 +539,7 @@ EdkIIRedfishFeatureProtocolIsReady (
> (VOID **)&FeatureProtocol
> );
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to locate
> gEdkIIRedfishFeatureProtocolGuid: %r\n", __func__, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to locate
> gEdkIIRedfishFeatureProtocolGuid: %r\n", __func__, Status));
> gBS->CloseEvent (Event);
> return;
> }
> @@ -540,7 +551,7 @@ EdkIIRedfishFeatureProtocolIsReady (
> (VOID *)mRedfishCollectionPrivate
> );
> if (EFI_ERROR (Status)) {
> - DEBUG ((DEBUG_ERROR, "%a, failed to register %s: %r\n", __func__,
> REDFISH_MANAGED_URI, Status));
> + DEBUG ((DEBUG_ERROR, "%a: failed to register %s: %r\n", __func__,
> REDFISH_MANAGED_URI, Status));
> }
>
> mRedfishCollectionPrivate->FeatureProtocol = FeatureProtocol;
> --
> 2.17.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111779): https://edk2.groups.io/g/devel/message/111779
Mute This Topic: https://groups.io/mt/102767203/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
prev parent reply other threads:[~2023-11-28 2:30 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-23 14:13 [edk2-devel] [edk2-redfish-client][PATCH] RedfishClientPkg/ComputerSystemCollectionDxe: handle more scenarios Nickle Wang via groups.io
2023-11-28 2:30 ` Chang, Abner via groups.io [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=MN2PR12MB3966A7D0ACDFBDBD160362C2EABCA@MN2PR12MB3966.namprd12.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox