Class AllocateServerSocketServlet

java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
org.pentaho.di.www.BaseHttpServlet
org.pentaho.di.www.AllocateServerSocketServlet
All Implemented Interfaces:
Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig, CartePluginInterface, CarteServletInterface

public class AllocateServerSocketServlet extends BaseHttpServlet implements CartePluginInterface
This servlet allows a client (TransSplitter in our case) to ask for a port number.
This port number will be allocated in such a way that the port number is unique for a given hostname.
This in turn will ensure that all the slaves will use valid port numbers, even if multiple slaves run on the same host.
Author:
matt
See Also:
  • Field Details

  • Constructor Details

    • AllocateServerSocketServlet

      public AllocateServerSocketServlet()
    • AllocateServerSocketServlet

      public AllocateServerSocketServlet(TransformationMap transformationMap)
  • Method Details

    • doGet

      public void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException

      /kettle/allocateSocket

      GET

      Allocates port to use by client. Allows any client to ask for a port number to use. This is necessary several slaves can be run on the same host. The method ensures the port number is unique for host name provided and makes sure the slaves are using valid port numbers. Data communication across a cluster of Carte servers happens through TCP/IP sockets. Slave transformations sometimes open (or listen to) tens to hundreds of sockets. When you want to allocate the port numbers for data communication between slave transformation in a kettle clustering run, you need unique combinations of all the parameters below. port number will be returned in the Response object. If an error occurred you'll receive html output describing the problem. HTTP status code of such response is 500.

      Example Request:

          GET /kettle/allocateSocket/?xml=Y&rangeStart=100&host=locahost&id=clust&trans=my_trans&sourceSlave=slave_1
        &sourceStep=200&sourceCopy=1&targetSlave=slave_2&targetStep=50&targetCopy=1
          

      Parameters

      name description type
      xml Boolean flag set to either Y or N describing if xml or html reply should be produced. boolean, optional
      rangeStart Port number to start looking from. integer
      host Port's host. query
      id Carte container id. query
      trans Running transformation id. query
      sourceSlave Name of the source slave server. query
      sourceStep Port number step used on source slave server. integer
      sourceCopy Number of copies of the step on source server. integer
      targetSlave Name of the target slave server. query
      targetStep Port number step used on target slave server. integer
      targetCopy Number of copies of the step on target server. integer

      Response Body

      element: (custom)
      media types: text/xml, text/html

      Response wraps port number that was allocated or error stack trace if an error occurred. Response HTTP code is 200 if there were no errors. Otherwise it is 500.

      Example Response:

          <?xml version="1.0" encoding="UTF-8"?>
          100
          

      Status Codes

      code description
      200 Request was processed and XML response is returned.
      500 Internal server error occurs during request processing. This might also be caused by missing request parameter.
      Specified by:
      doGet in interface CartePluginInterface
      Overrides:
      doGet in class javax.servlet.http.HttpServlet
      Throws:
      javax.servlet.ServletException
      IOException
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getService

      public String getService()
      Specified by:
      getService in interface CarteServletInterface
    • getContextPath

      public String getContextPath()
      Specified by:
      getContextPath in interface CartePluginInterface