entity-manager unexpected handling of template parameters
Patrick Venture
venture at google.com
Sat Aug 10 05:30:00 AEST 2019
On Fri, Aug 9, 2019 at 12:24 PM Patrick Venture <venture at google.com> wrote:
>
> On Fri, Aug 9, 2019 at 12:20 PM Patrick Venture <venture at google.com> wrote:
> >
> > On Fri, Aug 9, 2019 at 11:57 AM Patrick Venture <venture at google.com> wrote:
> > >
> > > On Fri, Aug 9, 2019 at 11:50 AM Patrick Venture <venture at google.com> wrote:
> > > >
> > > > On Fri, Aug 9, 2019 at 11:45 AM James Feist <james.feist at linux.intel.com> wrote:
> > > > >
> > > > > On 8/9/19 11:33 AM, Patrick Venture wrote:
> > > > > > On Fri, Aug 9, 2019 at 11:22 AM James Feist <james.feist at linux.intel.com> wrote:
> > > > > >>
> > > > > >> On 8/9/19 9:53 AM, Patrick Venture wrote:
> > > > > >>> Given the following:
> > > > > >>>
> > > > > >>> busctl introspect --no-pager xyz.openbmc_project.FruDevice
> > > > > >>> /xyz/openbmc_project/FruDevice/Altie
> > > > > >>> NAME TYPE SIGNATURE RESULT/VALUE
> > > > > >>> FLAGS
> > > > > >>> org.freedesktop.DBus.Introspectable interface - -
> > > > > >>> -
> > > > > >>> .Introspect method - s
> > > > > >>> -
> > > > > >>> org.freedesktop.DBus.Peer interface - -
> > > > > >>> -
> > > > > >>> .GetMachineId method - s
> > > > > >>> -
> > > > > >>> .Ping method - -
> > > > > >>> -
> > > > > >>> org.freedesktop.DBus.Properties interface - -
> > > > > >>> -
> > > > > >>> .Get method ss v
> > > > > >>> -
> > > > > >>> .GetAll method s a{sv}
> > > > > >>> -
> > > > > >>> .Set method ssv -
> > > > > >>> -
> > > > > >>> .PropertiesChanged signal sa{sv}as -
> > > > > >>> -
> > > > > >>> xyz.openbmc_project.FruDevice interface - -
> > > > > >>> -
> > > > > >>> .ADDRESS property u 82
> > > > > >>> emits-change
> > > > > >>> .BOARD_LANGUAGE_CODE property s "25"
> > > > > >>> emits-change
> > > > > >>> .BOARD_MANUFACTURER property s "Inventec"
> > > > > >>> emits-change
> > > > > >>> .BOARD_MANUFACTURE_DATE property s "Thu Jul 11
> > > > > >>> 17:09:00 2019" emits-change
> > > > > >>> .BOARD_PART_NUMBER property s "1051867-01"
> > > > > >>> emits-change
> > > > > >>> .BOARD_PRODUCT_NAME property s "Altie"
> > > > > >>> emits-change
> > > > > >>> .BOARD_SERIAL_NUMBER property s
> > > > > >>> "ALTIVT192700026" emits-change
> > > > > >>> .BUS property u 1
> > > > > >>> emits-change
> > > > > >>> .Common_Format_Version property s "1"
> > > > > >>> emits-change
> > > > > >>>
> > > > > >>> I expected entity-manager with this profile to populate dbus properly:
> > > > > >>> configurations/altie.json
> > > > > >>> {
> > > > > >>> "Name" : "Altie",
> > > > > >>> "Probe" : "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'Altie'})",
> > > > > >>> "Type": "Board",
> > > > > >>> "xyz.openbmc_project.Inventory.Decorator.Asset": {
> > > > > >>> "Manufacturer": "$BOARD_MANUFACTURER",
> > > > > >>> "Model": "$BOARD_PRODUCT_NAME",
> > > > > >>> "PartNumber": "$BOARD_PART_NUMBER",
> > > > > >>> "SerialNumber": "$BOARD_SERIAL_NUMBER"
> > > > > >>> }
> > > > > >>> }
> > > > > >>>
> > > > > >>> Instead:
> > > > > >>> root at semitruck:~# busctl introspect --no-pager
> > > > > >>> xyz.openbmc_project.EntityManager
> > > > > >>> /xyz/openbmc_project/inventory/system/board/Altie
> > > > > >>> NAME TYPE SIGNATURE
> > > > > >>> RESULT/VALUE FLAGS
> > > > > >>> org.freedesktop.DBus.Introspectable interface - -
> > > > > >>> -
> > > > > >>> .Introspect method - s
> > > > > >>> -
> > > > > >>> org.freedesktop.DBus.Peer interface - -
> > > > > >>> -
> > > > > >>> .GetMachineId method - s
> > > > > >>> -
> > > > > >>> .Ping method - -
> > > > > >>> -
> > > > > >>> org.freedesktop.DBus.Properties interface - -
> > > > > >>> -
> > > > > >>> .Get method ss v
> > > > > >>> -
> > > > > >>> .GetAll method s
> > > > > >>> a{sv} -
> > > > > >>> .Set method ssv -
> > > > > >>> -
> > > > > >>> .PropertiesChanged signal sa{sv}as -
> > > > > >>> -
> > > > > >>> xyz.openbmc_project.AddObject interface - -
> > > > > >>> -
> > > > > >>> .AddObject method a{sv} -
> > > > > >>> -
> > > > > >>> xyz.openbmc_project.Inventory.Decorator.Asset interface - -
> > > > > >>> -
> > > > > >>> .Manufacturer property s
> > > > > >>> "$BOARD_MANUFACTURER" emits-change
> > > > > >>> .Model property s
> > > > > >>> "$BOARD_PRODUCT_NAME" emits-change
> > > > > >>> .PartNumber property s
> > > > > >>> "$BOARD_PART_NUMBER" emits-change
> > > > > >>> .SerialNumber property s
> > > > > >>> "$BOARD_SERIAL_NUMBER" emits-change
> > > > > >>> xyz.openbmc_project.Inventory.Item.Board interface - -
> > > > > >>> -
> > > > > >>> .Name property s
> > > > > >>> "Altie" emits-change
> > > > > >>> .Probe property s
> > > > > >>> "xyz.openbmc_project.FruDevice({\'BOA... emits-change
> > > > > >>> .Type property s
> > > > > >>> "Board" emits-change
> > > > > >>>
> > > > > >>> I must be doing something obvious and silly. Please advise.
> > > > > >>
> > > > > >> Entity-manager caches the result and only updates if etc/os-release
> > > > > >> changes. There is a version file in /var/configuration/version, if you
> > > > > >> delete this it'll rescan fresh. It looks right to me.. so I imagine this
> > > > > >> is what is happening.
> > > > > >
> > > > > > I deleted the /var/configuration/version file and rebooted the BMC.
> > > > > > it didn't pick it up -- I decided a rescan was too subtle :)
> > > > > >
> > > > > > Any other ideas? I've started digging into entity-manager further.
> > > > >
> > > > > Sorry I don't see anything obvious... it should all be happening in this
> > > > > function
> > > > > https://github.com/openbmc/entity-manager/blob/b295e1d8385544f12a436ef63153d373ff8de625/src/EntityManager.cpp#L1130
> > > > >
> > > > >
> > > > > Specifically it should be making it to here:
> > > > >
> > > > > https://github.com/openbmc/entity-manager/blob/b295e1d8385544f12a436ef63153d373ff8de625/src/EntityManager.cpp#L1291
> > > >
> > > > Thanks, that's where I'm now looking --
> > >
> > > I deleted everything from /var/configuration/ rebooted, and added some
> > > debug to dig into the specific template replacement:
> > >
> > > Aug 09 18:51:47 semitruck entity-manager[2700]: strPtr value:
> > > '$BOARD_MANUFACTURER'
> > > Aug 09 18:51:47 semitruck entity-manager[2700]: templateName:
> > > $BOARD_MANUFACTURER, find: true
> > > Aug 09 18:51:47 semitruck entity-manager[2700]: keyPair.value(): "Inventec"
> > >
> > > Aug 09 18:51:47 semitruck entity-manager[2700]: strPtr value:
> > > '$BOARD_PRODUCT_NAME'
> > > Aug 09 18:51:47 semitruck entity-manager[2700]: templateName:
> > > $BOARD_PRODUCT_NAME, find: true
> > > Aug 09 18:51:47 semitruck entity-manager[2700]: keyPair.value(): "Altie"
> >
> > So the visitor is finding and applying the value to the template, but
> > that change isn't propagating up. It works for the card that's found
> > afterwards... The only real difference is, the other profile also
> > Exposes, whereas this one doesn't. Is there a step that's skipped if
> > there isn't an "Exposes" key?
>
> Looks like this part is skipped:
> https://github.com/openbmc/entity-manager/blob/b295e1d8385544f12a436ef63153d373ff8de625/src/EntityManager.cpp#L1618
>
> _systemConfiguration[recordName] = record;
> logDeviceAdded(record);
> foundDeviceIdx++;
I think foundDeviceIdx is the culprit because it isnt' always
incremented. So, I've moved that before the contnue.
>
> Hm.
>
> >
> > >
> > >
> > >
> > > >
> > > > >
> > > > > foundDevice should be your fru.... and should be populated here:
> > > > >
> > > > > https://github.com/openbmc/entity-manager/blob/b295e1d8385544f12a436ef63153d373ff8de625/src/EntityManager.cpp#L425
> > > >
> > > > I did not think to look here, thanks!
> > > >
> > > > >
> > > > > Hope that helps
> > > > >
> > > > > -James
> > > > >
> > > > >
> > > > >
> > > > > >
> > > > > >>
> > > > > >> -James
> > > > > >>>
> > > > > >>> Thanks,
> > > > > >>> Patrick
> > > > > >>>
More information about the openbmc
mailing list