From e4858bb504dc95eca487ab6186b983e12e731d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Mon, 19 Sep 2022 12:43:11 +0800 Subject: [PATCH] - update lock --- .gitignore | 1 + const.go | 2 +- go.mod | 4 +-- go.sum | 12 +++----- jobs_gorm_model/task_lock.go => task_lock.go | 29 ++++++++++++++++---- vendor/go.dtapp.net/golog/api.go | 5 +++- vendor/go.dtapp.net/golog/const.go | 2 +- vendor/go.dtapp.net/golog/gin.go | 5 +++- vendor/gorm.io/driver/postgres/migrator.go | 23 ++++++++++++---- vendor/modules.txt | 4 +-- 10 files changed, 60 insertions(+), 27 deletions(-) rename jobs_gorm_model/task_lock.go => task_lock.go (62%) diff --git a/.gitignore b/.gitignore index 6fac715..14b5dc5 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ gomod.sh grpc_build.sh *_test.go +/vendor/ diff --git a/const.go b/const.go index 748f88d..b6b0c7c 100644 --- a/const.go +++ b/const.go @@ -1,6 +1,6 @@ package gojobs const ( - Version = "1.0.94" + Version = "1.0.95" SpecifyIpNull = "0.0.0.0" ) diff --git a/go.mod b/go.mod index 714549c..ae4c837 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( go.dtapp.net/dorm v1.0.38 go.dtapp.net/goarray v1.0.1 go.dtapp.net/goip v1.0.34 - go.dtapp.net/golog v1.0.81 + go.dtapp.net/golog v1.0.82 go.dtapp.net/gostring v1.0.10 go.dtapp.net/gotime v1.0.5 go.dtapp.net/gotrace_id v1.0.6 @@ -91,7 +91,7 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gorm.io/datatypes v1.0.7 // indirect gorm.io/driver/mysql v1.3.6 // indirect - gorm.io/driver/postgres v1.3.9 // indirect + gorm.io/driver/postgres v1.3.10 // indirect mellium.im/sasl v0.3.0 // indirect modernc.org/ccgo/v3 v3.16.8 // indirect xorm.io/builder v0.3.12 // indirect diff --git a/go.sum b/go.sum index a04d376..a2e353d 100644 --- a/go.sum +++ b/go.sum @@ -205,7 +205,6 @@ github.com/jackc/pgconn v1.8.1/go.mod h1:JV6m6b6jhjdmzchES0drzCcYcAHS1OPD5xu3OZ/ github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= github.com/jackc/pgconn v1.11.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.12.1/go.mod h1:ZkhRC59Llhrq3oSfrikvwQ5NaxYExr6twkdkMLaKono= github.com/jackc/pgconn v1.13.0 h1:3L1XMNV2Zvca/8BYhzcRFS70Lr0WlDg16Di6SFGAbys= github.com/jackc/pgconn v1.13.0/go.mod h1:AnowpAqO4CMIIJNZl2VJp+KrkAZciAkhEl0W0JIobpI= github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= @@ -225,7 +224,6 @@ github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwX github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgproto3/v2 v2.2.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.3.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgproto3/v2 v2.3.1 h1:nwj7qwf0S+Q7ISFfBndqeLwSwxs+4DPsbRFjECT1Y4Y= github.com/jackc/pgproto3/v2 v2.3.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= @@ -241,7 +239,6 @@ github.com/jackc/pgtype v1.7.0/go.mod h1:ZnHF+rMePVqDKaOfJVI4Q8IVvAQMryDlDkZnKOI github.com/jackc/pgtype v1.8.0/go.mod h1:PqDKcEBtllAtk/2p6z6SHdXW5UB+MhE75tUol2OKexE= github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= github.com/jackc/pgtype v1.10.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgtype v1.11.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= github.com/jackc/pgtype v1.12.0 h1:Dlq8Qvcch7kiehm8wPGIW0W3KsCCHJnRacKW0UM8n5w= github.com/jackc/pgtype v1.12.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= @@ -254,7 +251,6 @@ github.com/jackc/pgx/v4 v4.11.0/go.mod h1:i62xJgdrtVDsnL3U8ekyrQXEwGNTRoG7/8r+CI github.com/jackc/pgx/v4 v4.12.0/go.mod h1:fE547h6VulLPA3kySjfnSG/e2D861g/50JlVUa/ub60= github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= github.com/jackc/pgx/v4 v4.15.0/go.mod h1:D/zyOyXiaM1TmVWnOM18p0xdDtdakRBa0RsVGI3U3bw= -github.com/jackc/pgx/v4 v4.16.1/go.mod h1:SIhx0D5hoADaiXZVyv+3gSm3LCIIINTVO0PficsvWGQ= github.com/jackc/pgx/v4 v4.17.2 h1:0Ut0rpeKwvIVbMQ1KbMBU4h6wxehBI535LK6Flheh8E= github.com/jackc/pgx/v4 v4.17.2/go.mod h1:lcxIZN44yMIrWI78a5CpucdD14hX0SBDbNRvjDBItsw= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= @@ -526,8 +522,8 @@ go.dtapp.net/goarray v1.0.1 h1:cHNHaJ2MFcuJPA1WKU2PM1EUZShS1vQqEH7n6YXsQVU= go.dtapp.net/goarray v1.0.1/go.mod h1:/MPhlFCAhQyeNV1M0v1PAOOX33Sg705fVjUgMO12IBQ= go.dtapp.net/goip v1.0.34 h1:aW2CuPpQwcDOJiyx/gHbvrha3/x+poFRpDxsLtO4EVw= go.dtapp.net/goip v1.0.34/go.mod h1:EctL6B8ue/kZKPr+kKZPU6YTTpNhihane9BHHffwo6Q= -go.dtapp.net/golog v1.0.81 h1:ArmYelps0ZjZyKw5oRhRDTBgyiMk9SQIEveKz5JdOgo= -go.dtapp.net/golog v1.0.81/go.mod h1:4Pyx+hw4zul9DtHDuKRzBpVr30xnegEgZ/vK8GHBT04= +go.dtapp.net/golog v1.0.82 h1:VSWaZLYjmtnI7h6cp9HGXrp+CVW+zS7Wii5kGd9sY88= +go.dtapp.net/golog v1.0.82/go.mod h1:4Pyx+hw4zul9DtHDuKRzBpVr30xnegEgZ/vK8GHBT04= go.dtapp.net/gorandom v1.0.1 h1:IWfMClh1ECPvyUjlqD7MwLq4mZdUusD1qAwAdsvEJBs= go.dtapp.net/gorandom v1.0.1/go.mod h1:ZPdgalKpvFV/ATQqR0k4ns/F/IpITAZpx6WkWirr5Y8= go.dtapp.net/gorequest v1.0.31 h1:r/OoU5Y00TbJjkQtpvwjsb/pllqO0UQQjFRY1veZYZc= @@ -764,8 +760,8 @@ gorm.io/driver/mysql v1.3.2/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2 gorm.io/driver/mysql v1.3.6 h1:BhX1Y/RyALb+T9bZ3t07wLnPZBukt+IRkMn8UZSNbGM= gorm.io/driver/mysql v1.3.6/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c= gorm.io/driver/postgres v1.3.4/go.mod h1:y0vEuInFKJtijuSGu9e5bs5hzzSzPK+LancpKpvbRBw= -gorm.io/driver/postgres v1.3.9 h1:lWGiVt5CijhQAg0PWB7Od1RNcBw/jS4d2cAScBcSDXg= -gorm.io/driver/postgres v1.3.9/go.mod h1:qw/FeqjxmYqW5dBcYNBsnhQULIApQdk7YuuDPktVi1U= +gorm.io/driver/postgres v1.3.10 h1:Fsd+pQpFMGlGxxVMUPJhNo8gG8B1lKtk8QQ4/VZZAJw= +gorm.io/driver/postgres v1.3.10/go.mod h1:whNfh5WhhHs96honoLjBAMwJGYEuA3m1hvgUbNXhPCw= gorm.io/driver/sqlite v1.3.1 h1:bwfE+zTEWklBYoEodIOIBwuWHpnx52Z9zJFW5F33WLk= gorm.io/driver/sqlite v1.3.1/go.mod h1:wJx0hJspfycZ6myN38x1O/AqLtNS6c5o9TndewFbELg= gorm.io/driver/sqlserver v1.3.1 h1:F5t6ScMzOgy1zukRTIZgLZwKahgt3q1woAILVolKpOI= diff --git a/jobs_gorm_model/task_lock.go b/task_lock.go similarity index 62% rename from jobs_gorm_model/task_lock.go rename to task_lock.go index 2efe2a8..6a85964 100644 --- a/jobs_gorm_model/task_lock.go +++ b/task_lock.go @@ -1,26 +1,43 @@ -package jobs_gorm_model +package gojobs import ( "context" "errors" - "go.dtapp.net/gojobs" + "go.dtapp.net/gojobs/jobs_gorm_model" ) type TaskLockOperation struct { - task Task // 任务 - client *gojobs.Client // 实例 + client *Client // 实例 + task jobs_gorm_model.Task // 任务 } -func (task Task) NewLock(c *gojobs.Client) (*TaskLockOperation, error) { +func (c *Client) NewLock(task jobs_gorm_model.Task) (*TaskLockOperation, error) { if task.Id == 0 { return nil, errors.New("任务数据不正常") } return &TaskLockOperation{ - task: task, client: c, + task: task, }, nil } +// Lock 上锁 +func (tlo *TaskLockOperation) Lock(ctx context.Context, id any) error { + _, err := tlo.client.Lock(ctx, tlo.task, id) + return err +} + +// Unlock 解锁 +func (tlo *TaskLockOperation) Unlock(ctx context.Context, id any) error { + return tlo.client.Unlock(ctx, tlo.task, id) +} + +// LockForever 永远上锁 +func (tlo *TaskLockOperation) LockForever(ctx context.Context, id any) error { + _, err := tlo.client.LockForever(ctx, tlo.task, id) + return err +} + // LockId 上锁 func (tlo *TaskLockOperation) LockId(ctx context.Context) error { _, err := tlo.client.LockId(ctx, tlo.task) diff --git a/vendor/go.dtapp.net/golog/api.go b/vendor/go.dtapp.net/golog/api.go index 9aefe1a..e50560f 100644 --- a/vendor/go.dtapp.net/golog/api.go +++ b/vendor/go.dtapp.net/golog/api.go @@ -11,8 +11,11 @@ import ( ) // ApiClientFun *ApiClient 驱动 +type ApiClientFun func() *ApiClient + +// ApiClientJsonFun *ApiClient 驱动 // jsonStatus bool json状态 -type ApiClientFun func() (*ApiClient, bool) +type ApiClientJsonFun func() (*ApiClient, bool) // ApiClient 接口 type ApiClient struct { diff --git a/vendor/go.dtapp.net/golog/const.go b/vendor/go.dtapp.net/golog/const.go index 1e03512..d1f9d5f 100644 --- a/vendor/go.dtapp.net/golog/const.go +++ b/vendor/go.dtapp.net/golog/const.go @@ -1,5 +1,5 @@ package golog const ( - Version = "1.0.81" + Version = "1.0.82" ) diff --git a/vendor/go.dtapp.net/golog/gin.go b/vendor/go.dtapp.net/golog/gin.go index 4d08c27..390d77f 100644 --- a/vendor/go.dtapp.net/golog/gin.go +++ b/vendor/go.dtapp.net/golog/gin.go @@ -18,8 +18,11 @@ import ( ) // GinClientFun *GinClient 驱动 +type GinClientFun func() *GinClient + +// GinClientJsonFun *GinClient 驱动 // jsonStatus bool json状态 -type GinClientFun func() (*GinClient, bool) +type GinClientJsonFun func() (*GinClient, bool) // GinClient 框架 type GinClient struct { diff --git a/vendor/gorm.io/driver/postgres/migrator.go b/vendor/gorm.io/driver/postgres/migrator.go index 5eb0acc..9877d7c 100644 --- a/vendor/gorm.io/driver/postgres/migrator.go +++ b/vendor/gorm.io/driver/postgres/migrator.go @@ -436,14 +436,25 @@ func (m Migrator) ColumnTypes(value interface{}) (columnTypes []gorm.ColumnType, // check primary, unique field { - columnTypeRows, err := m.DB.Raw("SELECT c.column_name, constraint_type FROM information_schema.table_constraints tc JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name) JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema AND tc.table_name = c.table_name AND ccu.column_name = c.column_name WHERE constraint_type IN ('PRIMARY KEY', 'UNIQUE') AND c.table_catalog = ? AND c.table_schema = ? AND c.table_name = ?", currentDatabase, currentSchema, table).Rows() + columnTypeRows, err := m.DB.Raw("SELECT constraint_name FROM information_schema.table_constraints tc JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name) JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema AND tc.table_name = c.table_name AND ccu.column_name = c.column_name WHERE constraint_type IN ('PRIMARY KEY', 'UNIQUE') AND c.table_catalog = ? AND c.table_schema = ? AND c.table_name = ? AND constraint_type = ?", currentDatabase, currentSchema, table, "UNIQUE").Rows() if err != nil { return err } + uniqueContraints := map[string]int{} + for columnTypeRows.Next() { + var constraintName string + columnTypeRows.Scan(&constraintName) + uniqueContraints[constraintName]++ + } + columnTypeRows.Close() + columnTypeRows, err = m.DB.Raw("SELECT c.column_name, constraint_name, constraint_type FROM information_schema.table_constraints tc JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name) JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema AND tc.table_name = c.table_name AND ccu.column_name = c.column_name WHERE constraint_type IN ('PRIMARY KEY', 'UNIQUE') AND c.table_catalog = ? AND c.table_schema = ? AND c.table_name = ?", currentDatabase, currentSchema, table).Rows() + if err != nil { + return err + } for columnTypeRows.Next() { - var name, columnType string - columnTypeRows.Scan(&name, &columnType) + var name, constraintName, columnType string + columnTypeRows.Scan(&name, &constraintName, &columnType) for _, c := range columnTypes { mc := c.(*migrator.ColumnType) if mc.NameValue.String == name { @@ -451,7 +462,9 @@ func (m Migrator) ColumnTypes(value interface{}) (columnTypes []gorm.ColumnType, case "PRIMARY KEY": mc.PrimaryKeyValue = sql.NullBool{Bool: true, Valid: true} case "UNIQUE": - mc.UniqueValue = sql.NullBool{Bool: true, Valid: true} + if uniqueContraints[constraintName] == 1 { + mc.UniqueValue = sql.NullBool{Bool: true, Valid: true} + } } break } @@ -463,7 +476,7 @@ func (m Migrator) ColumnTypes(value interface{}) (columnTypes []gorm.ColumnType, // check column type { dataTypeRows, err := m.DB.Raw(`SELECT a.attname as column_name, format_type(a.atttypid, a.atttypmod) AS data_type - FROM pg_attribute a JOIN pg_class b ON a.attrelid = b.relfilenode AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = ?) + FROM pg_attribute a JOIN pg_class b ON a.attrelid = b.oid AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname = ?) WHERE a.attnum > 0 -- hide internal columns AND NOT a.attisdropped -- hide deleted columns AND b.relname = ?`, currentSchema, table).Rows() diff --git a/vendor/modules.txt b/vendor/modules.txt index 75935ce..4135783 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -268,7 +268,7 @@ go.dtapp.net/goip/ip2region go.dtapp.net/goip/ip2region_v2 go.dtapp.net/goip/ipv6wry go.dtapp.net/goip/qqwry -# go.dtapp.net/golog v1.0.81 +# go.dtapp.net/golog v1.0.82 ## explicit; go 1.19 go.dtapp.net/golog # go.dtapp.net/gorandom v1.0.1 @@ -419,7 +419,7 @@ gorm.io/datatypes # gorm.io/driver/mysql v1.3.6 ## explicit; go 1.14 gorm.io/driver/mysql -# gorm.io/driver/postgres v1.3.9 +# gorm.io/driver/postgres v1.3.10 ## explicit; go 1.14 gorm.io/driver/postgres # gorm.io/gorm v1.23.9