sure and thanks a lot Lucas

I will explore all this, appreciate your help

Regards, Mitts

On Fri, Mar 16, 2012 at 6:11 AM, Lucas Meneghel Rodrigues 
<l...@redhat.com>wrote:

> On 03/15/2012 07:20 PM, mitts daki wrote:
>
>> Thanks lot  Lucas,
>>
>> This helps let me try this but have another question
>>
>> is there a way can I have resource control on this? is it possible?
>>
>
> It's possible, certainly. I was thinking, you could create a multiple
> machine test abstraction that knows the number of machines needed to
> run it, and keeps a list of the machines already gathered so far. It'd
> be something roughly along the lines:
>
> class TestMM(object):
>    """
>    Shell class for a test that might run in multiple machines.
>    """
>    def __init__(self, name, machines_required):
>        self.name = name
>        self.machines_required = machines_required
>        self.hosts = []
>        self.lock = open("/tmp/test-mm-lock", "w+")
>
>    def host_checkin(self, host):
>        return_value = False
>
>        fcntl.lockf(self.lock, fcntl.LOCK_EX)
>        if not self.ready_to_execute():
>            self.hosts.append(host)
>            return_value = True
>        fcntl.lockf(lockfile, fcntl.LOCK_UN)
>        return return_value
>
>
>    def ready_to_execute(self):
>        return not len(self.hosts) < self.machines_required
>
>
> class TestPool(object):
>    def __init__(self):
>        self.available_tests = [ list with 2000 TestMM class instances ]
>        self.lock = open("/tmp/test-pool-lock", "w+")
>
>    def get_test():
>        fcntl.lockf(self.lock, fcntl.LOCK_EX)
>        test = self.available_tests.pop()
>        fcntl.lockf(self.lock, fcntl.LOCK_UN)
>
>        return test
>
>
> test_pool = TestPool()
>
> TIME_WAIT = 10
>
>
> def run(machine):
>    host = hosts.create_host(machine)
>    at = autotest_remote.Autotest(host)
>    while test_pool.available_tests:
>        t = test_pool.get_test()
>        if not t.host_checkin(host):
>            continue
>
>        while not t.ready_to_execute():
>            sleep TIME_WAIT
>        at.run_test(t.name)
>
> job.parallel_simple(run, machines)
>
> Again, this is not working code. You still have things to figure out and
> adjust, this is just an idea based on the requirements you've given me. I
> figured out it was better than explaining things in abstract terms. You'll
> have to study better:
>
>  * Mechanisms to sync test threads, such as barriers
>  * Interfaces of functions such as at.run_test
>  * How to turn your 2000 functional tests into tests runnable by autotest
>  * Deal with the stupid bugs that might be lurking around on this sketch I
> wrote and I did not notice :)
>
> I hope this all was useful,
>
> Lucas
>
_______________________________________________
Autotest mailing list
Autotest@test.kernel.org
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to