Skip to content

Commit

Permalink
Merge 03178ba into 73d940d
Browse files Browse the repository at this point in the history
  • Loading branch information
hougangliu committed May 22, 2019
2 parents 73d940d + 03178ba commit f19d0a3
Show file tree
Hide file tree
Showing 16 changed files with 632 additions and 297 deletions.
8 changes: 8 additions & 0 deletions cmd/manager/v1alpha2/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,14 @@ func (s *server) RegisterExperiment(ctx context.Context, in *api_pb.RegisterExpe
return &api_pb.RegisterExperimentReply{}, err
}

// Register a Experiment to DB.
func (s *server) PreCheckRegisterExperiment(ctx context.Context, in *api_pb.RegisterExperimentRequest) (*api_pb.PreCheckRegisterExperimentReply, error) {
can_register, err := dbIf.PreCheckRegisterExperiment(in.Experiment)
return &api_pb.PreCheckRegisterExperimentReply{
CanRegister: can_register,
}, err
}

// Delete a Experiment from DB by name.
func (s *server) DeleteExperiment(ctx context.Context, in *api_pb.DeleteExperimentRequest) (*api_pb.DeleteExperimentReply, error) {
err := dbIf.DeleteExperiment(in.ExperimentName)
Expand Down
431 changes: 246 additions & 185 deletions pkg/api/v1alpha2/api.pb.go

Large diffs are not rendered by default.

46 changes: 46 additions & 0 deletions pkg/api/v1alpha2/api.pb.gw.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions pkg/api/v1alpha2/api.proto
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@ service Manager {
};
};

/**
* PreCheck to register a Experiment to DB.
*/
rpc PreCheckRegisterExperiment(RegisterExperimentRequest) returns (PreCheckRegisterExperimentReply){
option (google.api.http) = {
post: "/api/Manager/PreCheckRegisterExperiment"
body: "experiment"
};
};


/**
* Delete a Experiment from DB by name.
*/
Expand Down Expand Up @@ -392,6 +403,9 @@ message RegisterExperimentRequest {
message RegisterExperimentReply {
}

message PreCheckRegisterExperimentReply {
bool can_register = 1;
}
message DeleteExperimentRequest {
string experiment_name = 1;
}
Expand Down
36 changes: 36 additions & 0 deletions pkg/api/v1alpha2/api.swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,33 @@
]
}
},
"/api/Manager/PreCheckRegisterExperiment": {
"post": {
"summary": "*\nPreCheck to register a Experiment to DB.",
"operationId": "PreCheckRegisterExperiment",
"responses": {
"200": {
"description": "",
"schema": {
"$ref": "#/definitions/alpha2PreCheckRegisterExperimentReply"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/alpha2Experiment"
}
}
],
"tags": [
"Manager"
]
}
},
"/api/Manager/RegisterExperiment": {
"post": {
"summary": "*\nRegister a Experiment to DB.",
Expand Down Expand Up @@ -906,6 +933,15 @@
"default": "UNKNOWN_TYPE",
"description": "*\nTypes of value for HyperParameter."
},
"alpha2PreCheckRegisterExperimentReply": {
"type": "object",
"properties": {
"can_register": {
"type": "boolean",
"format": "boolean"
}
}
},
"alpha2RegisterExperimentReply": {
"type": "object"
},
Expand Down
259 changes: 171 additions & 88 deletions pkg/api/v1alpha2/python/api_pb2.py

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions pkg/api/v1alpha2/python/api_pb2_grpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ def __init__(self, channel):
request_serializer=api__pb2.RegisterExperimentRequest.SerializeToString,
response_deserializer=api__pb2.RegisterExperimentReply.FromString,
)
self.PreCheckRegisterExperiment = channel.unary_unary(
'/api.v1.alpha2.Manager/PreCheckRegisterExperiment',
request_serializer=api__pb2.RegisterExperimentRequest.SerializeToString,
response_deserializer=api__pb2.PreCheckRegisterExperimentReply.FromString,
)
self.DeleteExperiment = channel.unary_unary(
'/api.v1.alpha2.Manager/DeleteExperiment',
request_serializer=api__pb2.DeleteExperimentRequest.SerializeToString,
Expand Down Expand Up @@ -116,6 +121,14 @@ def RegisterExperiment(self, request, context):
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')

def PreCheckRegisterExperiment(self, request, context):
"""*
PreCheck to register a Experiment to DB.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')

def DeleteExperiment(self, request, context):
"""*
Delete a Experiment from DB by name.
Expand Down Expand Up @@ -251,6 +264,11 @@ def add_ManagerServicer_to_server(servicer, server):
request_deserializer=api__pb2.RegisterExperimentRequest.FromString,
response_serializer=api__pb2.RegisterExperimentReply.SerializeToString,
),
'PreCheckRegisterExperiment': grpc.unary_unary_rpc_method_handler(
servicer.PreCheckRegisterExperiment,
request_deserializer=api__pb2.RegisterExperimentRequest.FromString,
response_serializer=api__pb2.PreCheckRegisterExperimentReply.SerializeToString,
),
'DeleteExperiment': grpc.unary_unary_rpc_method_handler(
servicer.DeleteExperiment,
request_deserializer=api__pb2.DeleteExperimentRequest.FromString,
Expand Down
11 changes: 11 additions & 0 deletions pkg/common/v1alpha2/katib_manager_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,17 @@ func GetSuggestions(request *api_pb.GetSuggestionsRequest) (*api_pb.GetSuggestio
return kc.GetSuggestions(ctx, request)
}

func PreCheckRegisterExperiment(request *api_pb.RegisterExperimentRequest) (*api_pb.PreCheckRegisterExperimentReply, error) {
ctx := context.Background()
kcc, err := getKatibManagerClientAndConn()
if err != nil {
return nil, err
}
defer closeKatibManagerConnection(kcc)
kc := kcc.KatibManagerClient
return kc.PreCheckRegisterExperiment(ctx, request)
}

func GetObservationLog(request *api_pb.GetObservationLogRequest) (*api_pb.GetObservationLogReply, error) {
ctx := context.Background()
kcc, err := getKatibManagerClientAndConn()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package managerclient

import (
"database/sql"

commonapiv1alpha2 "github.com/kubeflow/katib/pkg/api/operators/apis/common/v1alpha2"
experimentsv1alpha2 "github.com/kubeflow/katib/pkg/api/operators/apis/experiment/v1alpha2"
api_pb "github.com/kubeflow/katib/pkg/api/v1alpha2"
Expand All @@ -15,8 +13,7 @@ type ManagerClient interface {
CreateExperimentInDB(instance *experimentsv1alpha2.Experiment) error
DeleteExperimentInDB(instance *experimentsv1alpha2.Experiment) error
UpdateExperimentStatusInDB(instance *experimentsv1alpha2.Experiment) error
GetExperimentFromDB(instance *experimentsv1alpha2.Experiment) (
*api_pb.GetExperimentReply, error)
PreCheckRegisterExperimentInDB(inst *experimentsv1alpha2.Experiment) (*api_pb.PreCheckRegisterExperimentReply, error)
}

// DefaultClient implements the Client interface.
Expand Down Expand Up @@ -65,8 +62,12 @@ func (d *DefaultClient) UpdateExperimentStatusInDB(instance *experimentsv1alpha2
return nil
}

func (d *DefaultClient) GetExperimentFromDB(instance *experimentsv1alpha2.Experiment) (*api_pb.GetExperimentReply, error) {
return nil, sql.ErrNoRows
func (d *DefaultClient) PreCheckRegisterExperimentInDB(inst *experimentsv1alpha2.Experiment) (*api_pb.PreCheckRegisterExperimentReply, error) {
experiment := getExperimentConf(inst)
request := &api_pb.RegisterExperimentRequest{
Experiment: experiment,
}
return commonv1alpha2.PreCheckRegisterExperiment(request)
}

func getExperimentConf(instance *experimentsv1alpha2.Experiment) *api_pb.Experiment {
Expand Down
13 changes: 6 additions & 7 deletions pkg/controller/v1alpha2/experiment/validator/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package validator

import (
"bytes"
"database/sql"
"fmt"

batchv1beta "k8s.io/api/batch/v1beta1"
Expand Down Expand Up @@ -146,13 +145,13 @@ func (g *DefaultValidator) validateSupportedJob(job *unstructured.Unstructured)
}

func (g *DefaultValidator) validateForCreate(inst *experimentsv1alpha2.Experiment) error {
if _, err := g.GetExperimentFromDB(inst); err != nil {
if err != sql.ErrNoRows {
return fmt.Errorf("Fail to check record for the experiment in DB: %v", err)
}
return nil
} else {
reply, err := g.PreCheckRegisterExperimentInDB(inst)
if err != nil {
return fmt.Errorf("Fail to check record for the experiment in DB: %v", err)
} else if !reply.CanRegister {
return fmt.Errorf("Record for the experiment has existed in DB; Please try to rename the experiment")
} else {
return nil
}
}

Expand Down
15 changes: 12 additions & 3 deletions pkg/controller/v1alpha2/experiment/validator/validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@ spec:
g := New(p, mc)

p.EXPECT().GetRunSpec(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(trialTFJobTemplate, nil)
mc.EXPECT().GetExperimentFromDB(gomock.Any()).Return(nil, sql.ErrNoRows).AnyTimes()
mc.EXPECT().PreCheckRegisterExperimentInDB(gomock.Any()).Return(
&api_pb.PreCheckRegisterExperimentReply{
CanRegister: true,
}, nil).AnyTimes()

instance := newFakeInstance()
if err := g.(*DefaultValidator).validateTrialTemplate(instance); err == nil {
Expand All @@ -67,7 +70,10 @@ metadata:
g := New(p, mc)

p.EXPECT().GetRunSpec(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(trialJobTemplate, nil)
mc.EXPECT().GetExperimentFromDB(gomock.Any()).Return(nil, sql.ErrNoRows).AnyTimes()
mc.EXPECT().PreCheckRegisterExperimentInDB(gomock.Any()).Return(
&api_pb.PreCheckRegisterExperimentReply{
CanRegister: true,
}, nil).AnyTimes()

instance := newFakeInstance()
if err := g.(*DefaultValidator).validateTrialTemplate(instance); err != nil {
Expand Down Expand Up @@ -104,7 +110,10 @@ spec:
gomock.Any(), gomock.Any(), gomock.Any(),
gomock.Any(), gomock.Any(), gomock.Any()).
Return(metricsCollectorTemplate, nil).AnyTimes()
mc.EXPECT().GetExperimentFromDB(gomock.Any()).Return(nil, sql.ErrNoRows).AnyTimes()
mc.EXPECT().PreCheckRegisterExperimentInDB(gomock.Any()).Return(
&api_pb.PreCheckRegisterExperimentReply{
CanRegister: true,
}, nil).AnyTimes()

tcs := []struct {
Instance *experimentsv1alpha2.Experiment
Expand Down
14 changes: 14 additions & 0 deletions pkg/db/v1alpha2/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ type KatibDBInterface interface {
SelectOne() error

RegisterExperiment(experiment *v1alpha2.Experiment) error
PreCheckRegisterExperiment(experiment *v1alpha2.Experiment) (bool, error)
DeleteExperiment(experimentName string) error
GetExperiment(experimentName string) (*v1alpha2.Experiment, error)
GetExperimentList() ([]*v1alpha2.ExperimentSummary, error)
Expand Down Expand Up @@ -213,6 +214,19 @@ func (d *dbConn) DeleteExperiment(experimentName string) error {
_, err := d.db.Exec("DELETE FROM experiments WHERE name = ?", experimentName)
return err
}

func (d *dbConn) PreCheckRegisterExperiment(experiment *v1alpha2.Experiment) (bool, error) {
_, err := d.GetExperiment(experiment.Name)
if err != nil {
if err == sql.ErrNoRows {
return true, nil
}
return false, err
} else {
return false, nil
}
}

func (d *dbConn) GetExperiment(experimentName string) (*v1alpha2.Experiment, error) {
var id string
var paramSpecs string
Expand Down
20 changes: 20 additions & 0 deletions pkg/mock/v1alpha2/api/manager.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions pkg/mock/v1alpha2/db/db.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit f19d0a3

Please sign in to comment.