在 2012-12-05三的 15:19 -0500,Chris Evich写道: > On 12/05/2012 01:05 AM, Mike wrote: > > 在 2012-12-04二的 17:09 -0500,Chris Evich写道: > >> On 12/03/2012 09:37 PM, Mike Qiu wrote: > >>> Currently, when try to get the ip address as mutil threads wait to > >>> login to the guest, all threads will call update_db, which need to > >>> lock the db file, this will raise error for lots of the threads. > >>> > >>> As all these threads just want to get the ip address of the guest, > >>> These errors should not happen, and it will never change the db_file, > >>> So, no need to call func update_db. > >>> > >>> By the way, self._INITIALIZED will be set to true after the network > >>> interface be init. > >>> > >>> Signed-off-by: Mike Qiu<[email protected]> > >>> --- > >>> virttest/utils_misc.py | 3 --- > >>> 1 files changed, 0 insertions(+), 3 deletions(-) > >>> > >>> diff --git a/virttest/utils_misc.py b/virttest/utils_misc.py > >>> index d37cf87..b83b7cd 100644 > >>> --- a/virttest/utils_misc.py > >>> +++ b/virttest/utils_misc.py > >>> @@ -1004,9 +1004,6 @@ class DbNet(VMNet): > >>> > >>> def __getitem__(self, index_or_name): > >>> # container class attributes are read-only, hook > >>> - # update_db here is only alternative > >>> - if self._INITIALIZED: > >>> - self.update_db() > >>> return super(DbNet, self).__getitem__(index_or_name) > >> > >> Dang, I wish I put a better comment :( I do remember at the time I > >> wrote it, it was important to acquiesce the db/dict state before > >> returning value because we cannot guarantee WHEN new guest might have > >> networking info. added/deleted. Also the the underlying class storing > >> these items had a __setitem__ limitation, which I think is what my > >> comment refers to. > >> > >> The good news is the underlying storage class was changed recently, so > >> my original concern over db/dict state consistency may no longer apply. > >> The concern you raise about lock contention with multiple threads is a > >> bug since this is a case I was trying to solve for. > >> > >> Could you describe from higher level what you are seeing? i.e. what > >> code is trying to get IP address? > >> > > It's about the kvm test case vmstop, it just use 10 threads to login > > to the guest, and copy file to the guest. > > So for each threads need to get the ip address of the guest. > > > > As you now try to fix this problem, I will follow up your steps:) > > > >> With your patch above, does the utils_misc_unittest.py run fine? > >> > > I'm so sorry that it will fail. > > > > > > Mike, > > I think I might have fixed it: > > https://github.com/cevich/virt-test/tree/kvm_vmstop > > I'm running the test on an older machine, so it has "other" problems. > I'm not seeing any lock contention with the vmstop test after these > changes. The test does fail however due to other reasons: > > 15:07:10 ERROR| child process failed > 15:07:10 DEBUG| Traceback (most recent call last): > 15:07:10 DEBUG| File "/usr/local/autotest/client/parallel.py", line > 18, in fork_start > 15:07:10 DEBUG| l() > 15:07:10 DEBUG| File "/usr/local/autotest/client/job.py", line 529, in > <lambda> > 15:07:10 DEBUG| l = lambda : test.runtest(self, url, tag, args, dargs) > 15:07:10 DEBUG| File "/usr/local/autotest/client/test.py", line 115, > in runtest > 15:07:10 DEBUG| job.sysinfo.log_after_each_iteration) > 15:07:10 DEBUG| File "/usr/local/autotest/client/shared/test.py", line > 938, in runtest > 15:07:10 DEBUG| mytest._exec(args, dargs) > 15:07:10 DEBUG| File "/usr/local/autotest/client/shared/test.py", line > 431, in _exec > 15:07:10 DEBUG| _call_test_function(self.execute, *p_args, **p_dargs) > 15:07:10 DEBUG| File "/usr/local/autotest/client/shared/test.py", line > 846, in _call_test_function > 15:07:10 DEBUG| return func(*args, **dargs) > 15:07:10 DEBUG| File "/usr/local/autotest/client/shared/test.py", line > 304, in execute > 15:07:10 DEBUG| postprocess_profiled_run, args, dargs) > 15:07:10 DEBUG| File "/usr/local/autotest/client/shared/test.py", line > 220, in _call_run_once > 15:07:10 DEBUG| self.run_once_profiling(postprocess_profiled_run, > 15:07:10 DEBUG| File "/usr/local/autotest/client/shared/test.py", line > 327, in run_once_profiling > 15:07:10 DEBUG| self.run_once(*args, **dargs) > 15:07:10 DEBUG| File "/usr/local/autotest/client/tests/virt/virt.py", > line 125, in run_once > 15:07:10 DEBUG| run_func(self, params, env) > 15:07:10 DEBUG| File > "/usr/local/autotest/client/tests/virt/kvm/tests/vmstop.py", line 73, in > run_vmstop > 15:07:10 DEBUG| raise error.TestFail("The produced state files differ") > 15:07:10 DEBUG| TestFail: The produced state files differ > > But I'm not familiar with this test. Would you mind checking to see if > the changes I made on my branch work for this test on your setup? > > Specifically: > https://github.com/cevich/virt-test/commit/0f7099b131698b41c6d742813f49c2218f393091 > > Thanks. > Hi Chris
Thanks for you great help, it's OK now, and feel sorry I tell you the wrong test case, it should be the case nicdriver_unload. Thanks Mike _______________________________________________ Autotest-kernel mailing list [email protected] https://www.redhat.com/mailman/listinfo/autotest-kernel
