-
Notifications
You must be signed in to change notification settings - Fork 161
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[chassisd] Address the chassisd crash issue and add UT for it #573
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -283,7 +283,7 @@ class ModuleUpdater(logger.Logger): | |
|
||
for module_index in range(0, self.num_modules): | ||
module_info_dict = self._get_module_info(module_index) | ||
if self.my_slot == int(module_info_dict['slot']): | ||
if self.my_slot == module_info_dict['slot']: | ||
my_index = module_index | ||
|
||
if module_info_dict is not None: | ||
|
@@ -300,7 +300,7 @@ class ModuleUpdater(logger.Logger): | |
|
||
fvs = swsscommon.FieldValuePairs([(CHASSIS_MODULE_INFO_DESC_FIELD, module_info_dict[CHASSIS_MODULE_INFO_DESC_FIELD]), | ||
(CHASSIS_MODULE_INFO_SLOT_FIELD, | ||
module_info_dict[CHASSIS_MODULE_INFO_SLOT_FIELD]), | ||
str(module_info_dict[CHASSIS_MODULE_INFO_SLOT_FIELD])), | ||
(CHASSIS_MODULE_INFO_OPERSTATUS_FIELD, module_info_dict[CHASSIS_MODULE_INFO_OPERSTATUS_FIELD]), | ||
(CHASSIS_MODULE_INFO_NUM_ASICS_FIELD, str(len(module_info_dict[CHASSIS_MODULE_INFO_ASICS]))), | ||
(CHASSIS_MODULE_INFO_SERIAL_FIELD, module_info_dict[CHASSIS_MODULE_INFO_SERIAL_FIELD])]) | ||
|
@@ -357,8 +357,8 @@ class ModuleUpdater(logger.Logger): | |
|
||
# In line card push the hostname of the module and num_asics to the chassis state db. | ||
# The hostname is used as key to access chassis app db entries | ||
module_info_dict = self._get_module_info(my_index) | ||
if not self._is_supervisor(): | ||
module_info_dict = self._get_module_info(my_index) | ||
hostname_key = "{}{}".format(ModuleBase.MODULE_TYPE_LINE, int(self.my_slot) - 1) | ||
hostname = try_get(device_info.get_hostname, default="None") | ||
hostname_fvs = swsscommon.FieldValuePairs([(CHASSIS_MODULE_INFO_SLOT_FIELD, str(self.my_slot)), | ||
|
@@ -393,7 +393,7 @@ class ModuleUpdater(logger.Logger): | |
|
||
module_info_dict[CHASSIS_MODULE_INFO_NAME_FIELD] = name | ||
module_info_dict[CHASSIS_MODULE_INFO_DESC_FIELD] = str(desc) | ||
module_info_dict[CHASSIS_MODULE_INFO_SLOT_FIELD] = str(slot) | ||
module_info_dict[CHASSIS_MODULE_INFO_SLOT_FIELD] = slot | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This may be an unexpected behavior change. I do see there is a conversion for one of the usages of this dict entry to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The fundamental issue is that a slot value on a chassis may not be a number, it could be a string -- such as Nokia IXRE7250 Supervisor card which is slot "A". There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sounds good. My concern was mostly that it may be unclear to developers that the type stored in this dict field can vary. Functionally it seems fine. The documentation of APIs such as There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Agree. For the long run, this needs to be addressed. |
||
module_info_dict[CHASSIS_MODULE_INFO_OPERSTATUS_FIELD] = str(status) | ||
module_info_dict[CHASSIS_MODULE_INFO_ASICS] = asics | ||
module_info_dict[CHASSIS_MODULE_INFO_SERIAL_FIELD] = str(serial) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the expectation here? This makes an assumption that line card slots must be numbers, but should that be a requirement? Should this be using
my_index
instead? Or should there be some logic to handle if the LC slot was non-numeric?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Move the self._get_module_info() call inside if condition since my_slot is only use inside. Not need to call self._get_module_info(0 if it not required.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But this is still requiring that line cards must be named as numbers, only supervisors are allowed to be alphanumeric. Is that expected and required? Why can't alphanumeric line card names also be supported since this was already found to be a limitation of supervisor naming?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes. Linecard slot must be number string or number. It is required. Otherwise, we will not able construct the linecard name. With the existing implementation, Linecard slot is a number or a number string, it will work. BTW, this change just moved the _get_module_info() call into "if" section since we only use it inside the "if".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The line card name could be constructed if the slot wasn't numeric (like the supervisor) as well, the name is still just a string. I'm not sure what else relies on line card slots being numeric though, so this should be fine for now. It may be worth looking into what changes would be required to support alphanumeric slots for line cards as well, but not required for this change.