def CreateInteractiveInstance(self, request, context): object_id = request.object_id gremlin_server_cpu = request.gremlin_server_cpu gremlin_server_mem = request.gremlin_server_mem manager_host = MAXGRAPH_MANAGER_HOST % ( self._gie_graph_manager_service_name, self._k8s_namespace, ) with open(request.schema_path) as file: schema_json = file.read() post_url = "%s/instance/create" % manager_host params = { "graphName": "%s" % object_id, "schemaJson": schema_json, "podNameList": ",".join(self._pods_list), "containerName": ENGINE_CONTAINER, "preemptive": str(self._launcher.preemptive), "gremlinServerCpu": str(gremlin_server_cpu), "gremlinServerMem": gremlin_server_mem, } engine_params = [ "{}:{}".format(key, value) for key, value in request.engine_params.items() ] params["engineParams"] = "'{}'".format(";".join(engine_params)) post_data = urllib.parse.urlencode(params).encode("utf-8") create_res = urllib.request.urlopen(url=post_url, data=post_data) res_json = json.load(create_res) error_code = res_json["errorCode"] if error_code == 0: front_host = res_json["frontHost"] front_port = res_json["frontPort"] logger.info( "build frontend %s:%d for graph %ld", front_host, front_port, object_id, ) return message_pb2.CreateInteractiveResponse( status=message_pb2.ResponseStatus(code=error_codes_pb2.OK), frontend_host=front_host, frontend_port=front_port, object_id=object_id, ) else: error_message = ( "create interactive instance for object id %ld failed with error code %d message %s" % (object_id, error_code, res_json["errorMessage"]) ) logger.error(error_message) return message_pb2.CreateInteractiveResponse( status=message_pb2.ResponseStatus( code=error_codes_pb2.INTERACTIVE_ENGINE_INTERNAL_ERROR, error_msg=error_message, ), frontend_host="", frontend_port=0, object_id=object_id, )
def CreateInteractiveInstance(self, request, context): logger.info( "Coordinator create interactive instance with object id %ld", request.object_id, ) object_id = request.object_id manager_host = MAXGRAPH_MANAGER_HOST % ( self._gie_graph_manager_service_name, self._k8s_namespace, ) with open(request.schema_path) as file: schema_json = file.read() post_url = "%s/instance/create" % manager_host params = { "graphName": "%s" % object_id, "schemaJson": schema_json, "podNameList": ",".join(self._pods_list), "containerName": ENGINE_CONTAINER, } post_data = urllib.parse.urlencode(params).encode("utf-8") create_res = urllib.request.urlopen(url=post_url, data=post_data) res_json = json.load(create_res) error_code = res_json["errorCode"] if error_code == 0: front_host = res_json["frontHost"] front_port = res_json["frontPort"] logger.info( "build frontend %s:%d for graph %ld", front_host, front_port, object_id, ) return message_pb2.CreateInteractiveResponse( status=message_pb2.ResponseStatus(code=error_codes_pb2.OK), frontend_host=front_host, frontend_port=front_port, object_id=object_id, ) else: error_message = ( "create interactive instance for object id %ld failed with error code %d message %s" % (object_id, error_code, res_json["errorMessage"]) ) logger.error(error_message) return message_pb2.CreateInteractiveResponse( status=message_pb2.ResponseStatus( code=error_codes_pb2.INTERACTIVE_ENGINE_INTERNAL_ERROR, error_msg=error_message, ), frontend_host="", frontend_port=0, object_id=object_id, )
def _make_response(resp_cls, code, error_msg="", op=None, **args): resp = resp_cls( status=message_pb2.ResponseStatus(code=code, error_msg=error_msg), **args ) if op: resp.status.op.CopyFrom(op) return resp
def CloseLearningInstance(self, request, context): logger.info( "Coordinator close learning instance with object id %ld", request.object_id, ) self._launcher.close_learning_instance(request.object_id) return message_pb2.CloseLearningInstanceResponse( status=message_pb2.ResponseStatus(code=error_codes_pb2.OK))
def CloseInteractiveInstance(self, request, context): object_id = request.object_id pod_name_list = ",".join(self._pods_list) manager_host = MAXGRAPH_MANAGER_HOST % ( self._gie_graph_manager_service_name, self._k8s_namespace, ) close_url = "%s/instance/close?graphName=%ld&podNameList=%s&containerName=%s&waitingForDelete=%s" % ( manager_host, object_id, pod_name_list, ENGINE_CONTAINER, str(self._launcher.waiting_for_delete()), ) logger.info("Coordinator close interactive instance with url[%s]" % close_url) try: close_res = urllib.request.urlopen(close_url).read() except Exception as e: logger.error("Failed to close interactive instance: %s", e) return message_pb2.CloseInteractiveResponse( status=message_pb2.ResponseStatus( code=error_codes_pb2.INTERACTIVE_ENGINE_INTERNAL_ERROR, error_msg="Internal error during close interactive instance: %d, %s" % (400, e), ) ) res_json = json.loads(close_res.decode("utf-8", errors="ignore")) error_code = res_json["errorCode"] if 0 == error_code: return message_pb2.CloseInteractiveResponse( status=message_pb2.ResponseStatus(code=error_codes_pb2.OK) ) else: error_message = ( "Failed to close interactive instance for object id %ld with error code %d message %s" % (object_id, error_code, res_json["errorMessage"]) ) logger.error("Failed to close interactive instance: %s", error_message) return message_pb2.CloseInteractiveResponse( status=message_pb2.ResponseStatus( code=error_codes_pb2.INTERACTIVE_ENGINE_INTERNAL_ERROR, error_msg=error_message, ) )
def CreateLearningInstance(self, request, context): logger.info( "Coordinator create learning instance with object id %ld", request.object_id, ) object_id = request.object_id handle = request.handle config = request.config endpoints = self._launcher.create_learning_instance(object_id, handle, config) return message_pb2.CreateLearningInstanceResponse( status=message_pb2.ResponseStatus(code=error_codes_pb2.OK), endpoints=",".join(endpoints), )