Repository navigation
Conversation
Test only, please do not merge. Skip-fnbullseye: false Skip-bullseye: false Skip-python-bandit: true Skip-build-EL9-rpm: true Test-tag: pr daily_regression full_regression Skip-func-hw-test-medium-md-on-ssd: false Skip-func-hw-test-medium-verbs-provider-md-on-ssd: false Skip-func-hw-test-medium-ucx-provider: false Skip-func-hw-test-large-md-on-ssd: false Allow-unstable-test: true Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com Skip-fnbullseye: false Skip-bullseye: false Skip-python-bandit: true Skip-build-EL9-rpm: true Allow-unstable-test: true Doc-only: false Test-nvme: auto_md_on_ssd Test-tag: pr daily_regression full_regression Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
Required-githooks: true
…p metadata ops Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
|
Errors are component not formatted correctly,Title of PR is too long,Ticket number suffix is not a number. See https://daosio.atlassian.net/wiki/spaces/DC/pages/11133911069/Commit+Comments,Unable to load ticket data |
|
Test stage Functional Hardware Large completed with status UNSTABLE. https://build.hpdd.intel.com/job/daos-stack/job/daos//view/change-requests/job/PR-14145/1/testReport/ |
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
|
Test stage Functional Hardware Large completed with status UNSTABLE. https://build.hpdd.intel.com/job/daos-stack/job/daos//view/change-requests/job/PR-14145/5/testReport/ |
Test only, please do not merge. Skip-fnbullseye: false Skip-bullseye: false Skip-python-bandit: true Skip-build-EL9-rpm: true Test-tag: pr daily_regression full_regression Skip-func-hw-test-medium-md-on-ssd: false Skip-func-hw-test-medium-verbs-provider-md-on-ssd: false Skip-func-hw-test-medium-ucx-provider: false Skip-func-hw-test-large-md-on-ssd: false Allow-unstable-test: true Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com Skip-fnbullseye: false Skip-bullseye: false Skip-python-bandit: true Skip-build-EL9-rpm: true Allow-unstable-test: true Doc-only: false Test-nvme: auto_md_on_ssd Test-tag: pr daily_regression full_regression Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
Required-githooks: true
Required-githooks: true
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
|
Test stage Test RPMs on EL 8.6 completed with status FAILURE. https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-14145/6/display/redirect |
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
|
Jenkins build 8 https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-14145/8/artifact/Functional%20Hardware%20Large/server/metadata.py/results.json seems to have run 2 configurations for test_metadata_addremove and test_metadata_server_restart, which is not desired. The total runtime went to 3500+ seconds, compared to a typical weekly run duration of 1500+ seconds (for example https://build.hpdd.intel.com/job/daos-stack/job/daos/job/weekly-testing/378/artifact/Functional%20Hardware%20Large/server/metadata.py/results.json) . Only muxing for test_metadata_fillup is desired. |
I don't think we can use mux for a single test method. We'd have to either move that test to a different file or split the test case into multiple methods in the same file |
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho ding-hwa.ho@intel.com
|
Test stage Functional Hardware Large completed with status FAILURE. https://build.hpdd.intel.com//job/daos-stack/job/daos/view/change-requests/job/PR-14145/10/execution/node/880/log |
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho <ding-hwa.ho@intel.com>
Skip-unit-tests: true Skip-fault-injection-test: true Test-tag: ObjectMetadata Doc-only: false Required-githooks: true Signed-off-by: Ding Ho <ding-hwa.ho@intel.com>
| # Skip dummy_metadata_workload when feature is disabled | ||
| svc_ops_enabled = self.pool.get_property("svc_ops_enabled") | ||
| if svc_ops_enabled: | ||
| svc_ops_entry_age = self.pool.get_property("svc_ops_entry_age") | ||
| if not self.run_dummy_metadata_workload(duration=svc_ops_entry_age): | ||
| self.fail("failed to run dummy metadata workload") |
There was a problem hiding this comment.
We shouldn't conditionally run the test, and the default is enabled, so we should be able to just run this
| # Skip dummy_metadata_workload when feature is disabled | |
| svc_ops_enabled = self.pool.get_property("svc_ops_enabled") | |
| if svc_ops_enabled: | |
| svc_ops_entry_age = self.pool.get_property("svc_ops_entry_age") | |
| if not self.run_dummy_metadata_workload(duration=svc_ops_entry_age): | |
| self.fail("failed to run dummy metadata workload") | |
| svc_ops_entry_age = self.pool.get_property("svc_ops_entry_age") | |
| if not self.run_dummy_metadata_workload(duration=svc_ops_entry_age): | |
| self.fail("failed to run dummy metadata workload") |
There was a problem hiding this comment.
The suggestion does not work, since svc_ops_entry_age could be a valid number (ie: 60, or 300...) and svc_ops_enabled is disabled and causing issue.
There was a problem hiding this comment.
This calls self.create_pool()
Which has
def create_pool(self, svc_ops_enabled=True):
...
if svc_ops_enabled:
self.add_pool()
So svc_ops_enabled is turned on
There was a problem hiding this comment.
no. With the suggested 390-392, when svc_ops_enabled=False, the run_metsdata_dummy_workload will be executed.
There was a problem hiding this comment.
How would svc_ops_enabled=False? The default is True and this test doesn't pass False
There was a problem hiding this comment.
This is test_metadata_addremove
There was a problem hiding this comment.
Yes. To determine running dummy_workload should check for svc_ops_enabled or not, not svc_ops_entry_age.
There was a problem hiding this comment.
svc_ops_enabled isn't dynamic here. It's always what is set in the config
daos/src/tests/ftest/server/metadata.yaml
Line 53 in 05474cf
There was a problem hiding this comment.
Yes. This is true. However, your suggestion is wrong.
In order to is to reduce test run time, we decide not to use !mux to run svc_ops_disabled testcase for test_metadata_addremove. We might need to run manual testcase later.
There was a problem hiding this comment.
For test_metadata_addremove(), for simplicity, I think we always want to run one variant (in this case, let's say we decide to use svc_ops_enabled:1 and run a dummy workload loop of svc_ops_entry_age seconds).
Which makes me wonder if in the .yaml file, maybe it should not specify svc_ops_enabled in the pool properties at all. And just leave it to the test cases in this code to specify in the argument to add_pool() whether svc_ops_enabled shall be True or False?
test_metadata_fillup_svc_ops_disabled and test_metadata_fillup_svc_ops_enabled already pass in the argument explicity.
test_metadata_addremove already effectively does the same (no argument means the default svc_ops_enabled=True is used).
| Use Cases: | ||
| ? | ||
| Args: | ||
| svc_ops_enabled (bool): Pool create properties svc_ops_enabled, default to True. |
There was a problem hiding this comment.
| svc_ops_enabled (bool): Pool create properties svc_ops_enabled, default to True. | |
| svc_ops_enabled (bool): Pool create properties svc_ops_enabled. Defaults to True. |
| svc_ops_entry_age = self.pool.get_property("svc_ops_entry_age") | ||
| if not self.run_dummy_metadata_workload(duration=svc_ops_entry_age): | ||
| self.fail("failed to run dummy metadata workload") | ||
| self.log_step("1. Create pool with properties svc_ops_enabled: {}".format(svc_ops_enabled)) |
There was a problem hiding this comment.
We shouldn't be adding numbers when using log_step because log_step already adds numbers
There was a problem hiding this comment.
The reason to add 1. 2. 3.... for the step is sync with the test steps in the testcase description.
There was a problem hiding this comment.
But this output is confusing
https://build.hpdd.intel.com/job/daos-stack/job/daos/job/PR-14145/12/artifact/Functional%20Hardware%20Large/server/metadata.py/steps.log
Step 5: 1. Create pool with properties svc_ops_enabled: True [elapsed since last step: 0.00s]
Step 6: 2. sustained container creates: to no space and beyond. [elapsed since last step: 66.16s]
Step 7: 3. Verify number of container within limit. [elapsed since last step: 114.49s]
Step 8: 4. Cleaning up 500 containers after pool is full. [elapsed since last step: 0.00s]
There was a problem hiding this comment.
I think it's clear. the global Step 5, and the testcase step 1.
| self.log.info("svc_ops_enabled enabled, run dummy_metadata_workload") | ||
| svc_ops_entry_age = self.pool.get_property("svc_ops_entry_age") | ||
| if not self.run_dummy_metadata_workload(duration=svc_ops_entry_age): | ||
| self.fail("#1. failed to run dummy metadata workload") |
There was a problem hiding this comment.
Similar - we shouldn't add numbers to self.fail because they probably won't correspond to the numbers that log_step automatically adds
There was a problem hiding this comment.
Same, to add #1... would be easier for later debug.
Co-authored-by: Dalton Bohning <dalton.bohning@intel.com> Signed-off-by: dinghwah <48604964+dinghwah@users.noreply.github.com>
| pool_prop: !mux | ||
| svc_ops_60: | ||
| properties: svc_ops_enabled:1,svc_ops_entry_age:60 |
There was a problem hiding this comment.
We should simplify this since we only have 1 variant running
| pool_prop: !mux | |
| svc_ops_60: | |
| properties: svc_ops_enabled:1,svc_ops_entry_age:60 | |
| properties: svc_ops_enabled:1,svc_ops_entry_age:60 |
There was a problem hiding this comment.
Sorry, we have to use the !mux for the other testcases (150, 300, and 600) which currently commented out for manual test to reduce CI test time.
There was a problem hiding this comment.
It's not just CI time - it's also that mux applies to every test method. So turning those on, even for manual, means running duplicate test cases. Do we have plans to run some of these manually?
There was a problem hiding this comment.
Multiple svc_ops_entry_age (60,150, 300, and 600) is on the test plan.
@kccain, please comment.
There was a problem hiding this comment.
If the mux is controversial with only one variant running, can the mux be removed from the file, and the comments specify to uncomment just ONE configuration to (during manual execution) change the svc_ops_entry_age property value?
kccain
left a comment
There was a problem hiding this comment.
added my comments, I hope they are helpful. There is a lot of activity in the PR
I do realize this one was closed, not sure why. But I figured it would be more valuable to add my comments here with the other comments submitted so far.
| self.log_step("3. Verify number of container within limit.") | ||
| if len(self.container) >= self.created_containers_limit: | ||
| self.log.error("Phase 1: Created too many containers: %d > %d", len(self.container), | ||
| self.log.error("#3. Created too many containers: %d > %d", len(self.container), |
There was a problem hiding this comment.
I think this should be 2 instead of 3confused about all the numbering changes
but assuming you keep all of that, I think this should be 2 instead of 3
| self.log.error("#3. Created too many containers: %d > %d", len(self.container), | ||
| self.created_containers_limit) | ||
| self.fail("Phase 1: Created too many containers") | ||
| self.fail("#3. Created too many containers") |
There was a problem hiding this comment.
I think this should be 2 instead of 3
| self.log.info("Phase 1: Created too few containers: %d < %d", len(self.container), | ||
| self.created_containers_min) | ||
| self.fail("Phase 1: Created too few containers") | ||
| self.fail("#3. Created too few containers") |
There was a problem hiding this comment.
I think this should be 2 instead of 3
|
|
||
| # Phase 2 clean up some containers (expected to succeed) | ||
| self.log.info("Phase 2: Cleaning up %d containers (expected to work)", num_cont_to_destroy) | ||
| msg = "4. Cleaning up {} containers after pool is full.".format(num_cont_to_destroy) |
| if not self.destroy_num_containers(num_cont_to_destroy): | ||
| self.fail("Phase 2: fail (unexpected container destroy error)") | ||
| self.log.info("Phase 2: passed") | ||
| self.fail("#4. fail (unexpected container destroy error)") |
| Test Description: | ||
| Test to verify no IO happens after metadata is full. | ||
| def metadata_fillup(self, svc_ops_enabled=True): | ||
| """Run test to verify no IO happens after metadata is full. |
There was a problem hiding this comment.
suggest description (here, and in the test_* functions below) be changed to something like
Run test to verify number of resources that can be created until metadata is full.
| pool_prop: !mux | ||
| svc_ops_60: | ||
| properties: svc_ops_enabled:1,svc_ops_entry_age:60 |
There was a problem hiding this comment.
If the mux is controversial with only one variant running, can the mux be removed from the file, and the comments specify to uncomment just ONE configuration to (during manual execution) change the svc_ops_entry_age property value?
| pool_prop: !mux | ||
| svc_ops_60: | ||
| properties: svc_ops_enabled:1,svc_ops_entry_age:60 | ||
| # Uncomment following for manual test |
There was a problem hiding this comment.
Also might add that the values of created_cont_min and created_cont_max will be affected by the duration of the svc_ops_entry_age, so they may need to be adjusted accordingly.
| # Skip dummy_metadata_workload when feature is disabled | ||
| svc_ops_enabled = self.pool.get_property("svc_ops_enabled") | ||
| if svc_ops_enabled: | ||
| svc_ops_entry_age = self.pool.get_property("svc_ops_entry_age") | ||
| if not self.run_dummy_metadata_workload(duration=svc_ops_entry_age): | ||
| self.fail("failed to run dummy metadata workload") |
There was a problem hiding this comment.
For test_metadata_addremove(), for simplicity, I think we always want to run one variant (in this case, let's say we decide to use svc_ops_enabled:1 and run a dummy workload loop of svc_ops_entry_age seconds).
Which makes me wonder if in the .yaml file, maybe it should not specify svc_ops_enabled in the pool properties at all. And just leave it to the test cases in this code to specify in the argument to add_pool() whether svc_ops_enabled shall be True or False?
test_metadata_fillup_svc_ops_disabled and test_metadata_fillup_svc_ops_enabled already pass in the argument explicity.
test_metadata_addremove already effectively does the same (no argument means the default svc_ops_enabled=True is used).
|
Thanks for the comments. |
Description: implement more test to metadata with disable svc.
Skip-unit-tests: true
Skip-fault-injection-test: true
Test-tag: ObjectMetadata
Doc-only: false
Required-githooks: true
Signed-off-by: Ding Ho ding-hwa.ho@intel.com
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: