Ejemplo n.º 1
0
    def test_invocation_protocol_remote_fds(self):
        # In default, we have 5 fds in remote_fds
        storlet_request = DockerStorletRequest(self.storlet_id, {}, {},
                                               iter(StringIO()),
                                               options=self.options)
        protocol = StorletInvocationProtocol(storlet_request, self.pipe_path,
                                             self.log_file, 1, self.logger)
        self.assertEqual(5, len(protocol.remote_fds))

        # extra_resources expands the remote_fds
        storlet_request = DockerStorletRequest(self.storlet_id, {}, {},
                                               iter(StringIO()),
                                               options=self.options)
        protocol = StorletInvocationProtocol(storlet_request,
                                             self.pipe_path,
                                             self.log_file,
                                             1,
                                             self.logger,
                                             extra_sources=[storlet_request])
        self.assertEqual(6, len(protocol.remote_fds))

        # 2 more extra_resources expands the remote_fds
        storlet_request = DockerStorletRequest(self.storlet_id, {}, {},
                                               iter(StringIO()),
                                               options=self.options)
        protocol = StorletInvocationProtocol(storlet_request,
                                             self.pipe_path,
                                             self.log_file,
                                             1,
                                             self.logger,
                                             extra_sources=[storlet_request] *
                                             3)
        self.assertEqual(8, len(protocol.remote_fds))
Ejemplo n.º 2
0
    def invocation_flow(self, sreq, extra_sources=None):
        """
        Invoke the backend protocl with gateway

        :param sreq: StorletRequest instance
        :param extra_sources (WIP): A list of StorletRequest instance to gather
                                    as extra resoureces to feed to storlet
                                    container as data source
        :return: StorletResponse instance
        """
        run_time_sbox = RunTimeSandbox(self.scope, self.conf, self.logger)
        docker_updated = self.update_docker_container_from_cache(sreq)
        run_time_sbox.activate_storlet_daemon(sreq, docker_updated)
        self._add_system_params(sreq)

        slog_path = self.paths.get_host_slog_path(sreq.storlet_main)
        storlet_pipe_path = \
            self.paths.get_host_storlet_pipe(sreq.storlet_main)

        sprotocol = StorletInvocationProtocol(sreq,
                                              storlet_pipe_path,
                                              slog_path,
                                              self.storlet_timeout,
                                              self.logger,
                                              extra_sources=extra_sources)

        sresp = sprotocol.communicate()

        self._upload_storlet_logs(slog_path, sreq)

        return sresp
Ejemplo n.º 3
0
 def setUp(self):
     self.pipe_path = tempfile.mktemp()
     self.log_file = tempfile.mktemp()
     self.logger = FakeLogger()
     self.storlet_id = 'Storlet-1.0.jar'
     self.options = {'storlet_main': 'org.openstack.storlet.Storlet',
                     'storlet_dependency': 'dep1,dep2',
                     'storlet_language': 'java',
                     'file_manager': FakeFileManager('storlet', 'dep')}
     storlet_request = DockerStorletRequest(
         self.storlet_id, {}, {}, iter(StringIO()), options=self.options)
     self.protocol = StorletInvocationProtocol(
         storlet_request, self.pipe_path, self.log_file, 1, self.logger)