Beispiel #1
0
    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,
            )
Beispiel #2
0
 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,
             )
Beispiel #3
0
 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
Beispiel #4
0
 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))
Beispiel #5
0
 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,
             )
         )
Beispiel #6
0
 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),
     )