-
Notifications
You must be signed in to change notification settings - Fork 308
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
DAOS-16829 control: fix for daos pool query #15537
Conversation
Get basic pool info firstly, then update other rank lists sequentially. Features: DmgPoolQueryRanks Test-tag: pool_query Required-githooks: true Signed-off-by: Wang Shilong <[email protected]>
Ticket title is 'Regression with pool/query_attribute.py functional test' |
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 overall PR seems good to me, however I am not sure on the pragma used which seems to restrictive for me. Instead of
Features: DmgPoolQueryRanks
Test-tag: pool_query
It should probably be better to use
Features: daos_cmd
Features: daos_cmd Required-githooks: true Signed-off-by: Wang Shilong <[email protected]>
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.
please add a unit test that covers change in behaviour to avoid any regressions
Required-githooks: true Signed-off-by: Wang Shilong <[email protected]>
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.
Logic looks reasonable, but I agree with Tom's comment that a unit test is needed.
Test stage Functional Hardware Medium completed with status FAILURE. https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-15537/3/display/redirect |
…S-16829 Required-githooks: true
Test stage Build on EL 8 completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-15537/4/execution/node/381/log |
Test stage Build on Leap 15.5 with Intel-C and TARGET_PREFIX completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-15537/4/execution/node/387/log |
Test stage Build RPM on EL 9 completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-15537/4/execution/node/377/log |
Test stage Build RPM on EL 8 completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-15537/4/execution/node/373/log |
Test stage Build RPM on Leap 15.5 completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-15537/4/execution/node/369/log |
Test stage Build DEB on Ubuntu 20.04 completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-15537/4/execution/node/355/log |
Required-githooks: true Signed-off-by: Wang Shilong <[email protected]>
ba3be12
to
177637a
Compare
@Michael-Hennecke Feel free to go with your PR, i just leave it here in case something is useful for you. Thanks |
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.
I'm really hesitant to approve a mocking approach that requires this much overhead.
Just a suggestion, but you could pass in the C function as a parameter instead, to achieve a similar goal:
// You will want to define a Go type for a long function signature like this, for readability.
type libdaosPoolQuery func(C.daos_handle_t, **C.d_rank_list_t, *C.daos_pool_info_t, *C.daos_prop_t, *C.daos_event_t) C.int
func queryPool(apiQuery libdaosPoolQuery, poolHdl C.daos_handle_t, queryMask daos.PoolQueryMask) (*daos.PoolInfo, error)
In src/control/cmd/daos/health.go:107, the line would then be:
tpi, err := queryPool(C.daos_pool_query, poolHdl, queryMask)
In queryPoolRankLists, you would then call the function passed in without adding conditionals checking for mocking. You could then test queryPool by coming up with mock functions to pass in. It can be very simple. We just want to exercise the logic.
return poolInfo, nil | ||
} | ||
|
||
func MockQueryPool(mockDAOS *MockDAOSInterface, queryMask daos.PoolQueryMask) (*daos.PoolInfo, error) { |
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.
Mocks should definitely not be in production code files. In general for Go code, we restrict mocks to their own files, or put them in test files.
@@ -0,0 +1,67 @@ | |||
// Code generated by MockGen. DO NOT EDIT. |
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.
I'm not sure about this approach. I believe @mjmac still has a work in progress for making the underlying libdaos something mockable. I'd avoid adding something like this for now.
Hi Kris, Thanks for input, generally I tried to use gomock, but it is a bit weird that existed codes did not use it..using go mock in production codes is a bit annoying. because when using cgo in pool_test.go is not allowed... Anyway, I would consider this as a go experience for me. Since @Michael-Hennecke has another PR to fix this issue, I will abort this PR anyway.
|
Get basic pool info firstly, then update other rank lists sequentially.
Features: DmgPoolQueryRanks
Test-tag: pool_query
Required-githooks: true
Before requesting gatekeeper:
Features:
(orTest-tag*
) commit pragma was used or there is a reason documented that there are no appropriate tags for this PR.Gatekeeper: