HCE Project Python language Distributed Tasks Manager Application, Distributed Crawler Application and client API bindings.  2.0.0-chaika
Hierarchical Cluster Engine Python language binding
NodeManagerRequest.py
Go to the documentation of this file.
1 '''
2 Created on Feb 17, 2014
3 
4 @author: scorp
5 @link: http://hierarchical-cluster-engine.com/
6 @copyright: Copyright © 2013-2014 IOIX Ukraine
7 @license: http://hierarchical-cluster-engine.com/license/
8 @since: 0.1
9 '''
10 
11 from NodeManagerResponse import NodeManagerResponse
12 from transport.Connection import ConnectionTimeout
13 from transport.Connection import ConnectionParams
14 from transport.ConnectionBuilder import ConnectionBuilder
15 from transport.IDGenerator import IDGenerator
16 from transport.Request import Request
17 import Constants as CONSTANTS
18 import AdminExceptions
19 import transport.Consts
20 
21 
22 
23 class NodeManagerRequest(object):
24  def __init__(self, errorCode=CONSTANTS.ERROR_NO, connectionBuilder=None, connectionIdGenerator=None):
25  self.errorCode = errorCode
26  if connectionBuilder == None:
27  if connectionIdGenerator == None:
28  connectionIdGenerator = IDGenerator()
29  self.connectionBuilder = ConnectionBuilder(connectionIdGenerator)
30  else:
31  self.connectionBuilder = connectionBuilder
32 
33 
34  def getErrorCode(self):
35  return self.errorCode
36 
37 
38  def createNodeManagerResponse(self, response, message):
39  errorCode = CONSTANTS.ERROR_NO
40  if response.get_uid() != message[CONSTANTS.STRING_MSGID_NAME]:
41  errorCode = CONSTANTS.ERROR_BAD_MSG_ID
42  return NodeManagerResponse(errorCode, response.get_body())
43 
44 
45 
46  def raiseAdminExceptions(self, exceptionString):
47  if exceptionString != None:
48  if exceptionString == CONSTANTS.STRING_EXCEPTION_WRONG_CONNECTION_KEY:
49  raise AdminExceptions.AdminWrongConnectionKey(exceptionString)
50  else:
51  raise AdminExceptions.AdminTimeoutException(exceptionString)
52 
53 
54 
56  def makeRequest(self, node, message, commandTimeout=None):
57  exceptionString = None
58  respond = None
59  adminConnection = None
60  connectParams = ConnectionParams(node.getHost(), node.getPort())
61  try:
62  adminConnection = self.connectionBuilder.build(transport.Consts.ADMIN_CONNECT_TYPE, connectParams)
63  except KeyError as exp:
64  exceptionString = CONSTANTS.STRING_EXCEPTION_WRONG_CONNECTION_KEY
65 
66  if adminConnection != None:
67  request = Request(message[CONSTANTS.STRING_MSGID_NAME])
68  request.add_data(message[CONSTANTS.STRING_BODY_NAME])
69  adminConnection.send(request)
70 
71  localTimeout = -1
72  if commandTimeout == None:
73  elapsedTime = node.getElapsedTime()
74  if elapsedTime >= node.getTimeout():
75  exceptionString = CONSTANTS.STRING_EXCEPTION_ADMIN_TIMEOUT
76  else:
77  localTimeout = node.getTimeout() - elapsedTime
78  else:
79  localTimeout = commandTimeout
80 
81  if localTimeout >= 0:
82  try:
83  respond = adminConnection.recv(localTimeout)
84  except ConnectionTimeout as exp:
85  exceptionString = exp.message
86  adminConnection.close()
87  self.raiseAdminExceptions(exceptionString)
88  return self.createNodeManagerResponse(respond, message)
NodeManagerResponse class that represents admin modules response.
def makeRequest(self, node, message, commandTimeout=None)
makeRequest main class method, it gets node and message params, interact with transport layer...
NodeManagerRequest class contents all data needed for admin level's request sending.
AdminExceptions module keepts admin module native exceptions.
def __init__(self, errorCode=CONSTANTS.ERROR_NO, connectionBuilder=None, connectionIdGenerator=None)
def raiseAdminExceptions(self, exceptionString)
raiseAdminExceptions method generates exceptions based on analyze of exceptionString param's data ...
It's a wrapper similar to zmsg.hpp in sense of encapsulation of hce message structure.
Definition: Request.py:11
The builder is used to encapsulation routine of creation various type of connections.
def createNodeManagerResponse(self, response, message)
IDGenerator is used to generate unique id for connections.
Definition: IDGenerator.py:15