def get_ram(self): """ Returns the :class:`ResourceAllocationManager` instance. Used by :meth:`ResourceAllocationManager.add_remotes`. """ from openmdao.main.resource import ResourceAllocationManager return ResourceAllocationManager._get_instance()
def get_ram(self): """ Returns the :class:`ResourceAllocationManager` instance. Used by :meth:`ResourceAllocationManager.add_remotes`. """ self._logger.debug('get_ram') from openmdao.main.resource import ResourceAllocationManager return ResourceAllocationManager._get_instance()
def test_factory(self): logging.debug('') logging.debug('test_factory') testdir = 'test_factory' if os.path.exists(testdir): shutil.rmtree(testdir, onerror=onerror) os.mkdir(testdir) os.chdir(testdir) factory = None try: # Create a factory. factory = ObjServerFactory() # Echo some arguments. args = factory.echo('Hello', 'world!') self.assertEqual(args[0], 'Hello') self.assertEqual(args[1], 'world!') # List types. types = factory.get_available_types() names = [name for name, version in types] self.assertTrue('openmdao.test.execcomp.ExecComp' in names) # Create a component. exec_comp = factory.create('openmdao.test.execcomp.ExecComp') exec_comp.run() directory = 'Server_1' + os.sep if sys.platform == 'win32': directory = directory.lower() self.assertTrue(exec_comp.get_abs_directory().endswith(directory)) # Create another in specified directory. exec_comp = factory.create('openmdao.test.execcomp.ExecComp', res_desc={'working_directory': 'floyd'}) exec_comp.run() directory = 'floyd' + os.sep if sys.platform == 'win32': directory = directory.lower() self.assertTrue(exec_comp.get_abs_directory().endswith(directory)) # Start server, connect, stop. server, cfg = start_server() proxy = connect_to_server(cfg) shutil.copy(cfg, 'saved_cfg') stop_server(server, cfg) _PROXIES.clear() assert_raises(self, "connect_to_server('saved_cfg')", globals(), locals(), RuntimeError, "Can't connect to server at ") # Force failed factory server startup via invalid port. address = socket.gethostbyname(socket.gethostname()) code = "start_server(address=address, port='xyzzy'," \ " allow_shell=True, tunnel=True, resources='')" assert_raises(self, code, globals(), locals(), RuntimeError, 'Server startup failed') # Try to release a server that doesn't exist (release takes an # OpenMDAO_Proxy as argument, string here is easier). assert_raises(self, "factory.release('xyzzy')", globals(), locals(), ValueError, "can't identify server at 'not-a-proxy'") # get_ram() is used by RAM.add_remotes(). ram = factory.get_ram() self.assertTrue(ram is RAM._get_instance()) finally: if factory is not None: factory.cleanup() SimulationRoot.chroot('..') if sys.platform == 'win32': time.sleep(2) # Wait for process shutdown. keep_dirs = int(os.environ.get('OPENMDAO_KEEPDIRS', '0')) if not keep_dirs: shutil.rmtree(testdir, onerror=onerror)
def test_remote(self): logging.debug('') logging.debug('test_remote') # Start remote server. server_dir = 'Factory' if os.path.exists(server_dir): shutil.rmtree(server_dir, onerror=onerror) os.mkdir(server_dir) os.chdir(server_dir) try: server, server_cfg = start_server() cfg = read_server_config(server_cfg) factory = None try: factory = connect(cfg['address'], cfg['port'], pubkey=cfg['key']) prefix = RAM._make_prefix(factory.host) remote = '%s_LocalHost' % prefix # Show no remotes currently in RAM. allocator_names = \ [allocator.name for allocator in RAM.list_allocators()] logging.debug('%s', allocator_names) self.assertFalse(remote in allocator_names) # Add remote server's allocator. RAM.add_remotes(factory) allocator_names = \ [allocator.name for allocator in RAM.list_allocators()] logging.debug('%s', allocator_names) self.assertTrue(remote in allocator_names) self.assertFalse(RAM.get_allocator(remote) is RAM.list_allocators()[0]) self.assertTrue(RAM.get_allocator(remote) is RAM.list_allocators()[1]) # Max servers. max_servers = RAM.max_servers(dict(allocator=remote)) self.assertTrue(max_servers >= 0) # Avoid host load issues. remote_alloc = RAM.get_allocator(remote) max_servers, info = \ remote_alloc.max_servers(dict(localhost=True)) self.assertEqual(max_servers, 0) self.assertEqual(info, dict(localhost='requested local host')) max_servers, info = \ remote_alloc.max_servers(dict(allocator='LocalHost')) self.assertEqual(max_servers, 0) self.assertEqual(info, dict(allocator='wrong allocator')) estimate, info = \ remote_alloc.time_estimate(dict(allocator='LocalHost')) self.assertEqual(estimate, -2) self.assertEqual(info, dict(allocator='wrong allocator')) # Allocate, release. remote_server, info = RAM.allocate(dict(allocator=remote)) RAM.release(remote_server) # Remove remote allocators. allocator_names = \ [allocator.name for allocator in RAM.list_allocators()] for name in allocator_names: if name.startswith(prefix): RAM.remove_allocator(name) allocator_names = \ [allocator.name for allocator in RAM.list_allocators()] logging.debug('%s', allocator_names) self.assertFalse(remote in allocator_names) finally: if factory is not None: factory.cleanup() server.terminate(timeout=10) finally: os.chdir('..') shutil.rmtree(server_dir, onerror=onerror) # Access local RAM in manner it would be accessed in the server. self.assertEqual(RAM._get_instance().get_total_allocators(), 1) self.assertTrue(RAM._get_instance().get_allocator_proxy(0) is RAM.list_allocators()[0])
def test_remote(self): logging.debug('') logging.debug('test_remote') # Start remote server. server_dir = 'Factory' if os.path.exists(server_dir): shutil.rmtree(server_dir, onerror=onerror) os.mkdir(server_dir) os.chdir(server_dir) try: server, server_cfg = start_server() cfg = read_server_config(server_cfg) factory = None try: factory = connect(cfg['address'], cfg['port'], pubkey=cfg['key']) prefix = RAM._make_prefix(factory.host) remote = '%s_LocalHost' % prefix # Show no remotes currently in RAM. allocator_names = \ [allocator.name for allocator in RAM.list_allocators()] logging.debug('%s', allocator_names) self.assertFalse(remote in allocator_names) # Add remote server's allocator. RAM.add_remotes(factory) allocator_names = \ [allocator.name for allocator in RAM.list_allocators()] logging.debug('%s', allocator_names) self.assertTrue(remote in allocator_names) self.assertFalse( RAM.get_allocator(remote) is RAM.list_allocators()[0]) self.assertTrue( RAM.get_allocator(remote) is RAM.list_allocators()[1]) # Max servers. max_servers = RAM.max_servers(dict(allocator=remote)) self.assertTrue(max_servers >= 0) # Avoid host load issues. remote_alloc = RAM.get_allocator(remote) max_servers, info = \ remote_alloc.max_servers(dict(localhost=True)) self.assertEqual(max_servers, 0) self.assertEqual(info, dict(localhost='requested local host')) max_servers, info = \ remote_alloc.max_servers(dict(allocator='LocalHost')) self.assertEqual(max_servers, 0) self.assertEqual(info, dict(allocator='wrong allocator')) estimate, info = \ remote_alloc.time_estimate(dict(allocator='LocalHost')) self.assertEqual(estimate, -2) self.assertEqual(info, dict(allocator='wrong allocator')) # Allocate, release. remote_server, info = RAM.allocate(dict(allocator=remote)) RAM.release(remote_server) # Remove remote allocators. allocator_names = \ [allocator.name for allocator in RAM.list_allocators()] for name in allocator_names: if name.startswith(prefix): RAM.remove_allocator(name) allocator_names = \ [allocator.name for allocator in RAM.list_allocators()] logging.debug('%s', allocator_names) self.assertFalse(remote in allocator_names) finally: if factory is not None: factory.cleanup() server.terminate(timeout=10) finally: os.chdir('..') shutil.rmtree(server_dir, onerror=onerror) # Access local RAM in manner it would be accessed in the server. self.assertEqual(RAM._get_instance().get_total_allocators(), 1) self.assertTrue(RAM._get_instance().get_allocator_proxy(0) is RAM.list_allocators()[0])
def test_factory(self): logging.debug('') logging.debug('test_factory') testdir = 'test_factory' if os.path.exists(testdir): shutil.rmtree(testdir, onerror=onerror) os.mkdir(testdir) os.chdir(testdir) factory = None try: # Create a factory. factory = ObjServerFactory() # Echo some arguments. args = factory.echo('Hello', 'world!') self.assertEqual(args[0], 'Hello') self.assertEqual(args[1], 'world!') # List types. types = factory.get_available_types() names = [name for name, version in types] self.assertTrue('openmdao.test.execcomp.ExecComp' in names) # Create a component. exec_comp = factory.create('openmdao.test.execcomp.ExecComp') exec_comp.run() # Start server, connect, stop. server, cfg = start_server() proxy = connect_to_server(cfg) shutil.copy(cfg, 'saved_cfg') stop_server(server, cfg) _PROXIES.clear() assert_raises(self, "connect_to_server('saved_cfg')", globals(), locals(), RuntimeError, "Can't connect to server at ") # Force failed factory server startup via invalid port. address = socket.gethostbyname(socket.gethostname()) code = "start_server(address=address, port='xyzzy'," \ " allow_shell=True, tunnel=True, resources='')" assert_raises(self, code, globals(), locals(), RuntimeError, 'Server startup failed') # Try to release a server that doesn't exist (release takes an # OpenMDAO_Proxy as argument, string here is easier). assert_raises(self, "factory.release('xyzzy')", globals(), locals(), ValueError, "can't identify server at 'not-a-proxy'") # get_ram() is used by RAM.add_remotes(). ram = factory.get_ram() self.assertTrue(ram is RAM._get_instance()) finally: if factory is not None: factory.cleanup() SimulationRoot.chroot('..') if sys.platform == 'win32': time.sleep(2) # Wait for process shutdown. keep_dirs = int(os.environ.get('OPENMDAO_KEEPDIRS', '0')) if not keep_dirs: shutil.rmtree(testdir, onerror=onerror)