Beispiel #1
0
    def __init__(self, fs, server, index, dev, jdev=None, group=None,
            tag=None, enabled=True, mode='managed', network=None,
            active='yes'):
        """
        Initialize a Lustre target object.
        """
        Disk.__init__(self, dev)
        self._states = {}
        Component.__init__(self, fs, server, enabled, mode, active)

        self.defaultserver = server      # Default server the target runs on
        self.failservers = ServerGroup() # All failover servers

        assert index is not None
        self.index = int(index)
        self.group = group
        self.tag = tag
        self.network = network
        self.mntdev = self.dev
        self.recov_info = None

        if jdev:
            self.journal = Journal(self, jdev)
        else:
            self.journal = None

        # If target mode is external then set target state accordingly
        if self.is_external():
            self.state = EXTERNAL

        # If target is inactive, then set target state accordingly
        if not self.is_active():
            self.state = INACTIVE
Beispiel #2
0
    def test_start_failover(self):
        """start on a failover node"""
        srv2 = Server('fakenode', ['127.0.0.2@tcp'])

        mgt = self.fs.new_target(self.srv1, 'mgt', 0, self.disk1.name)
        mdt = self.fs.new_target(self.srv1, 'mdt', 0, self.disk2.name)
        mdt.add_server(srv2)
        self.assertEqual(self.fs.format(), set([OFFLINE]))

        # For a simpler test environment, simulate local node is the failover
        # node.
        # This could be improved when --servicenode will be supported. Format
        # will be possible directly in failover configuration (no need to
        # reconfig anymore).
        mdt.state = None
        mdt.defaultserver = srv2
        mdt.failservers = ServerGroup()
        mdt.add_server(self.srv1)

        # Fail over this local node (-F HOSTNAME -n HOSTNAME)
        mdt.failover(self.srv1.hostname)
        srv2.action_enabled = False

        # Start should succeed and detect migration
        self.assertEqual(self.fs.start(), set([MIGRATED]))
        self.assertEqual(mgt.state, MOUNTED)
        self.assertEqual(mdt.state, MIGRATED)
Beispiel #3
0
 def testSelect(self):
     """test ServerGroup.select()"""
     srv1 = Server('foo1', ['foo1@tcp'])
     srv2 = Server('foo2', ['foo2@tcp'])
     srv3 = Server('foo3', ['foo3@tcp'])
     grp = ServerGroup([srv1, srv2, srv3])
     subgrp = grp.select(NodeSet("foo[1,3]"))
     self.assertEqual(list(iter(subgrp)), [srv1, srv3])
Beispiel #4
0
    def testSimple(self):
        """test ServerGroup simple tests"""
        grp = ServerGroup()
        self.assertEqual(len(grp), 0)

        srv = Server('foo', ['foo@tcp'])
        grp.append(srv)
        self.assertEqual(len(grp), 1)
        self.assertEqual(grp[0], srv)
Beispiel #5
0
    def testDistant(self):
        """test ServerGroup.nodeset()"""
        fqdn = socket.getfqdn()
        shortname = socket.gethostname().split('.', 1)[0]

        srv1 = Server(shortname, ['%s@tcp' % shortname])
        srv2 = Server('foo', ['foo@tcp'])
        grp = ServerGroup([srv1, srv2])
        subgrp = grp.distant()
        self.assertEqual(list(iter(subgrp)), [srv2])
Beispiel #6
0
 def allservers(self):
     """
     Return all servers this target can run on.
     The default server is the first element, then all possible failover servers.
     """
     #XXX: This method could be possibly dropped if the code in Status
     #     command is optimized.
     grp = ServerGroup([self.defaultserver])
     for srv in self.failservers:
         grp.append(srv)
     return grp
Beispiel #7
0
 def testNodeSet(self):
     """test ServerGroup.nodeset()"""
     srv1 = Server('foo1', ['foo1@tcp'])
     srv2 = Server('foo2', ['foo2@tcp'])
     grp = ServerGroup([srv1, srv2])
     self.assertEqual(grp.nodeset(), NodeSet('foo[1-2]'))
Beispiel #8
0
 def testIter(self):
     """test ServerGroup.__iter__()"""
     srv1 = Server('foo1', ['foo1@tcp'])
     srv2 = Server('foo2', ['foo2@tcp'])
     grp = ServerGroup([srv1, srv2])
     self.assertEqual(list(iter(grp)), [srv1, srv2])
Beispiel #9
0
 def allservers(self):
     """
     Return all servers this target can run on. On standard component
     there is only one server.
     """
     return ServerGroup([self.server])