workflow version db logic

This commit is contained in:
rushtehrani
2019-12-12 10:03:29 -08:00
parent 91afb337fc
commit ae2386e184
10 changed files with 46 additions and 26 deletions

View File

@@ -4,7 +4,7 @@ CREATE TABLE workflow_template_versions
id serial PRIMARY KEY,
workflow_template_id integer NOT NULL REFERENCES workflow_templates ON DELETE CASCADE,
version timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
manifest jsonb NOT NULL,
manifest text NOT NULL,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),

3
go.mod
View File

@@ -13,7 +13,6 @@ require (
github.com/evanphx/json-patch v4.5.0+incompatible // indirect
github.com/fsnotify/fsnotify v1.4.7
github.com/go-openapi/spec v0.19.4 // indirect
github.com/go-sql-driver/mysql v1.4.1 // indirect
github.com/gogo/protobuf v1.3.1 // indirect
github.com/golang/protobuf v1.3.2
github.com/google/uuid v1.1.1
@@ -22,9 +21,9 @@ require (
github.com/gorilla/websocket v1.4.1 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.12.1
github.com/imdario/mergo v0.3.8 // indirect
github.com/jmoiron/sqlx v1.2.0
github.com/json-iterator/go v1.1.8 // indirect
github.com/lib/pq v1.0.0
github.com/mattn/go-sqlite3 v2.0.1+incompatible // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.8.1 // indirect
github.com/pressly/goose v2.6.0+incompatible

10
go.sum
View File

@@ -90,8 +90,8 @@ github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dp
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
@@ -133,6 +133,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
@@ -164,8 +166,8 @@ github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw=
github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4=
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=

View File

@@ -31,7 +31,7 @@ func main() {
initConfig()
db := repository.NewDB(viper.GetString("db.driverName"), viper.GetString("DB_DATASOURCE"))
if err := goose.Run("up", db.DB, "db"); err != nil {
if err := goose.Run("up", db.Base(), "db"); err != nil {
log.Fatalf("goose up: %v", err)
}

View File

@@ -16,7 +16,7 @@ func (r *ResourceManager) CreateWorkflow(namespace string, workflow *model.Workf
})
}
createdWorkflows, err := r.argClient.Create(workflow.WorkflowTemplate.GetManifest(), opts)
createdWorkflows, err := r.argClient.Create(workflow.WorkflowTemplate.GetManifestBytes(), opts)
if err != nil {
return
}

View File

@@ -1,15 +1,20 @@
package model
import "github.com/google/uuid"
import (
"time"
"github.com/google/uuid"
)
type WorkflowTemplate struct {
ID uint64
UID string
Name string
Manifest string
Version *time.Time
}
func (wt *WorkflowTemplate) GetManifest() []byte {
func (wt *WorkflowTemplate) GetManifestBytes() []byte {
return []byte(wt.Manifest)
}

View File

@@ -6,5 +6,5 @@ func TestWorkflowTemplateToBytes(t *testing.T) {
w := &WorkflowTemplate{
Manifest: "test",
}
t.Log(w.GetManifest())
t.Log(w.GetManifestBytes())
}

View File

@@ -3,22 +3,20 @@ package repository
import (
"database/sql"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
)
type DB struct {
*sql.DB
*sqlx.DB
}
func NewDB(driverName, dataSourceName string) *DB {
db, err := sql.Open(driverName, dataSourceName)
if err != nil {
panic(err)
}
err = db.Ping()
if err != nil {
db.Close()
panic(err)
}
db := sqlx.MustConnect(driverName, dataSourceName)
return &DB{DB: db}
}
func (db *DB) Base() *sql.DB {
return db.DB.DB
}

View File

@@ -31,13 +31,28 @@ func (r *WorkflowRepository) CreateWorkflowTemplate(workflowTemplate *model.Work
"uid": uid,
"name": workflowTemplate.Name,
}).
Suffix("RETURNING id, uid").
Suffix("RETURNING id").
RunWith(tx).
QueryRow().Scan(&workflowTemplate.ID, &workflowTemplate.UID)
QueryRow().Scan(&workflowTemplate.ID)
if err != nil {
return nil, err
}
tx.Commit()
err = r.sb.Insert("workflow_template_versions").
SetMap(sq.Eq{
"workflow_template_id": workflowTemplate.ID,
"manifest": workflowTemplate.Manifest,
}).
Suffix("RETURNING version").
RunWith(tx).
QueryRow().Scan(&workflowTemplate.Version)
if err != nil {
return nil, err
}
if err = tx.Commit(); err != nil {
return nil, err
}
return workflowTemplate, nil
}

View File

@@ -44,7 +44,8 @@ func (s *WorkflowServer) CreateWorkflow(ctx context.Context, req *api.CreateWork
func (s *WorkflowServer) CreateWorkflowTemplate(ctx context.Context, req *api.CreateWorkflowTemplateRequest) (*api.WorkflowTemplate, error) {
workflowTemplate := &model.WorkflowTemplate{
Name: req.WorkflowTemplate.Name,
Name: req.WorkflowTemplate.Name,
Manifest: req.WorkflowTemplate.Manifest,
}
workflowTemplate, err := s.resourceManager.CreateWorkflowTemplate(req.Namespace, workflowTemplate)
if err != nil {