Skip to content

Commit c3175f3

Browse files
committed
setup norm for Nebula
1 parent 12538f7 commit c3175f3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+11364
-223
lines changed

go.mod

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ require (
1717
github.com/spf13/cobra v1.7.0
1818
github.com/spf13/pflag v1.0.5
1919
github.com/stretchr/testify v1.8.3
20-
github.com/vesoft-inc/nebula-go/v3 v3.0.0
20+
github.com/vesoft-inc/nebula-go/v3 v3.3.1
21+
github.com/zhihu/norm/v3 v3.0.0
2122
go.uber.org/atomic v1.10.0
2223
gopkg.in/natefinch/lumberjack.v2 v2.0.0
2324
gorm.io/datatypes v1.0.7
@@ -120,6 +121,8 @@ require (
120121
github.com/shopspring/decimal v1.2.0 // indirect
121122
github.com/spf13/cast v1.5.0 // indirect
122123
github.com/stoewer/go-strcase v1.2.0 // indirect
124+
github.com/vesoft-inc/nebula-go/v2 v2.0.0-ga // indirect
125+
github.com/zhihu/norm v0.1.11 // indirect
123126
go.etcd.io/etcd/api/v3 v3.5.6 // indirect
124127
go.etcd.io/etcd/client/pkg/v3 v3.5.6 // indirect
125128
go.etcd.io/etcd/client/v2 v2.305.6 // indirect

go.sum

+13-2
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH
136136
github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
137137
github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww=
138138
github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
139+
github.com/facebook/fbthrift v0.0.0-20190922225929-2f9839604e25/go.mod h1:2tncLx5rmw69e5kMBv/yJneERbzrr1yr5fdlnTbu8lU=
139140
github.com/facebook/fbthrift v0.31.1-0.20211129061412-801ed7f9f295 h1:ZA+qQ3d2In0RNzVpk+D/nq1sjDSv+s1Wy2zrAPQAmsg=
140141
github.com/facebook/fbthrift v0.31.1-0.20211129061412-801ed7f9f295/go.mod h1:2tncLx5rmw69e5kMBv/yJneERbzrr1yr5fdlnTbu8lU=
141142
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
@@ -214,6 +215,7 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
214215
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
215216
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
216217
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
218+
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
217219
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
218220
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
219221
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -532,15 +534,18 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
532534
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
533535
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
534536
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
537+
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
535538
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
536539
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
537540
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
538541
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
539542
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
540543
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
541544
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA=
542-
github.com/vesoft-inc/nebula-go/v3 v3.0.0 h1:ii5T3vps4xAQZkzPvGn6NuiUWlH/rm1zdIS5VTEA71A=
543-
github.com/vesoft-inc/nebula-go/v3 v3.0.0/go.mod h1:+sXv05jYQBARdTbTcIEsWVXCnF/6ttOlDK35xQ6m54s=
545+
github.com/vesoft-inc/nebula-go/v2 v2.0.0-ga h1:4t2V73o4mq2io6uJitNFtJeFc6xnr8pVoCCJd/FAiRM=
546+
github.com/vesoft-inc/nebula-go/v2 v2.0.0-ga/go.mod h1:qvrlydV8O1Jbff7b7cXSLOvZNs9BcE8pFZa/1nvB3fo=
547+
github.com/vesoft-inc/nebula-go/v3 v3.3.1 h1:5DxUxswEQvK9gkK6Y/X4fhX+bmIeHIJrn+b2q7tE3HM=
548+
github.com/vesoft-inc/nebula-go/v3 v3.3.1/go.mod h1:+sXv05jYQBARdTbTcIEsWVXCnF/6ttOlDK35xQ6m54s=
544549
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
545550
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
546551
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -550,6 +555,10 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
550555
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
551556
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
552557
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
558+
github.com/zhihu/norm v0.1.11 h1:uFVvfkCuYOZP19ZG7hJOWqOVDSwDOoY+auZ8UPObJcU=
559+
github.com/zhihu/norm v0.1.11/go.mod h1:VBH+aIV1TJfLIM5kyhCD812ghzjp0XIYYv5W/sdOA5A=
560+
github.com/zhihu/norm/v3 v3.0.0 h1:YYpaYfgQ5ysryvsabAca7uD2OGr8F6s3joiMcPPbWm8=
561+
github.com/zhihu/norm/v3 v3.0.0/go.mod h1:9HzBaVWF/Tw2VWaiGJgz4qxS6cr9C0SjHX0S10uFHEc=
553562
go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
554563
go.etcd.io/etcd/api/v3 v3.5.6 h1:Cy2qx3npLcYqTKqGJzMypnMv2tiRyifZJ17BlWIWA7A=
555564
go.etcd.io/etcd/api/v3 v3.5.6/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8=
@@ -879,6 +888,7 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
879888
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
880889
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
881890
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
891+
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
882892
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
883893
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
884894
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
@@ -993,6 +1003,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
9931003
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
9941004
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
9951005
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
1006+
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
9961007
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
9971008
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
9981009
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=

pkg/storage/internalstorage/config.go

+10-12
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212

1313
"github.com/go-sql-driver/mysql"
1414
"github.com/jackc/pgx/v4"
15-
gnebula "github.com/vesoft-inc/nebula-go/v3"
15+
"github.com/zhihu/norm/v3/dialectors"
1616
"gopkg.in/natefinch/lumberjack.v2"
1717
"gorm.io/gorm/logger"
1818
"k8s.io/klog/v2"
@@ -299,21 +299,19 @@ func (cfg *Config) genSQLiteDSN() (string, error) {
299299
return cfg.DSN, nil
300300
}
301301

302-
// Initialize logger for nebula
303-
var nebulalog = gnebula.DefaultLogger{}
304-
305-
func (cfg *Config) genNebulaConfig() (*gnebula.PoolConfig, error) {
302+
func (cfg *Config) genNebulaConfig() (*dialectors.DialectorConfig, error) {
306303
if cfg.DSN == "" {
307304
return nil, errors.New("nebula: dsn is required")
308305
}
306+
var nebulaConfig dialectors.DialectorConfig
307+
nebulaConfig.IdleTime = cfg.Nebula.IdleTime
308+
nebulaConfig.MaxConnPoolSize = cfg.Nebula.MaxConnPoolSize
309+
nebulaConfig.MinConnPoolSize = cfg.Nebula.MinConnPoolSize
310+
nebulaConfig.Timeout = cfg.Nebula.TimeOut
311+
nebulaConfig.Username = cfg.User
312+
nebulaConfig.Password = cfg.Password
309313

310-
nebulaPoolConfig := gnebula.GetDefaultConf()
311-
nebulaPoolConfig.IdleTime = cfg.Nebula.IdleTime
312-
nebulaPoolConfig.MaxConnPoolSize = cfg.Nebula.MaxConnPoolSize
313-
nebulaPoolConfig.MinConnPoolSize = cfg.Nebula.MinConnPoolSize
314-
nebulaPoolConfig.TimeOut = cfg.Nebula.TimeOut
315-
316-
return &nebulaPoolConfig, nil
314+
return &nebulaConfig, nil
317315
}
318316

319317
func (cfg *Config) addMysqlErrorNumbers() {

pkg/storage/internalstorage/register.go

+31-45
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import (
66
"io"
77
"log"
88
"os"
9-
"strconv"
109

1110
"github.com/go-sql-driver/mysql"
1211
"github.com/jackc/pgx/v4/stdlib"
1312
"github.com/jinzhu/configor"
14-
gnebula "github.com/vesoft-inc/nebula-go/v3"
13+
"github.com/zhihu/norm/v3"
14+
"github.com/zhihu/norm/v3/dialectors"
1515
"gopkg.in/natefinch/lumberjack.v2"
1616
gmysql "gorm.io/driver/mysql"
1717
gpostgres "gorm.io/driver/postgres"
@@ -42,6 +42,7 @@ func NewStorageFactory(configPath string) (storage.StorageFactory, error) {
4242
}
4343

4444
var dialector gorm.Dialector
45+
var normDialector *dialectors.NebulaDialector
4546
switch cfg.Type {
4647
case "mysql":
4748
mysqlConfig, err := cfg.genMySQLConfig()
@@ -71,34 +72,11 @@ func NewStorageFactory(configPath string) (storage.StorageFactory, error) {
7172
}
7273
dialector = gsqlite.Open(dsn)
7374
case "nebula":
74-
nebulaconfig, err := cfg.genNebulaConfig()
75+
NebulaConfig, err := cfg.genNebulaConfig()
7576
if err != nil {
7677
return nil, err
7778
}
78-
// TODO : dialector like for nebula
79-
port, err := strconv.Atoi(cfg.Port)
80-
if err != nil {
81-
return nil, err
82-
}
83-
84-
hostAddress := gnebula.HostAddress{Host: cfg.Host, Port: port}
85-
hostList := []gnebula.HostAddress{hostAddress}
86-
// Initialize connection pool
87-
pool, err := gnebula.NewConnectionPool(hostList, *nebulaconfig, nebulalog)
88-
if err != nil {
89-
nebulalog.Fatal(fmt.Sprintf("Fail to initialize the connection pool, host: %s, port: %d, %s", cfg.Host, port, err.Error()))
90-
}
91-
// Close all connections in the pool
92-
defer pool.Close()
93-
94-
// Create session
95-
session, err := pool.GetSession(cfg.User, cfg.Password)
96-
if err != nil {
97-
nebulalog.Fatal(fmt.Sprintf("Fail to create a new session from connection pool, username: %s, password: %s, %s",
98-
cfg.User, cfg.Password, err.Error()))
99-
}
100-
// Release session and return connection back to connection pool
101-
defer session.Release()
79+
normDialector = dialectors.MustNewNebulaDialector(*NebulaConfig)
10280
default:
10381
return nil, fmt.Errorf("not support storage type: %s", cfg.Type)
10482
}
@@ -108,27 +86,35 @@ func NewStorageFactory(configPath string) (storage.StorageFactory, error) {
10886
return nil, err
10987
}
11088

111-
db, err := gorm.Open(dialector, &gorm.Config{SkipDefaultTransaction: true, Logger: logger})
112-
if err != nil {
113-
return nil, err
114-
}
115-
sqlDB, err := db.DB()
116-
if err != nil {
117-
return nil, err
118-
}
119-
connPool, err := cfg.getConnPoolConfig()
120-
if err != nil {
121-
return nil, err
122-
}
123-
sqlDB.SetMaxIdleConns(connPool.MaxIdleConns)
124-
sqlDB.SetMaxOpenConns(connPool.MaxOpenConns)
125-
sqlDB.SetConnMaxLifetime(connPool.ConnMaxLifetime)
89+
if cfg.Type != "nebula" {
90+
db, err := gorm.Open(dialector, &gorm.Config{SkipDefaultTransaction: true, Logger: logger})
91+
if err != nil {
92+
return nil, err
93+
}
94+
sqlDB, err := db.DB()
95+
if err != nil {
96+
return nil, err
97+
}
98+
connPool, err := cfg.getConnPoolConfig()
99+
if err != nil {
100+
return nil, err
101+
}
102+
sqlDB.SetMaxIdleConns(connPool.MaxIdleConns)
103+
sqlDB.SetMaxOpenConns(connPool.MaxOpenConns)
104+
sqlDB.SetConnMaxLifetime(connPool.ConnMaxLifetime)
126105

127-
if err := db.AutoMigrate(&Resource{}); err != nil {
128-
return nil, err
106+
if err := db.AutoMigrate(&Resource{}); err != nil {
107+
return nil, err
108+
}
109+
110+
return &StorageFactory{db}, nil
111+
}
112+
if cfg.Type == "nebula" {
113+
db := norm.MustOpen(normDialector, norm.Config{})
114+
return &StorageFactory{db}, nil // have to create a new nebula storage factory and possibly this function to cater nebula needs
129115
}
116+
return nil, fmt.Errorf("Cannot create a new storage factory based on the database specified")
130117

131-
return &StorageFactory{db}, nil
132118
}
133119

134120
func newLogger(cfg *Config) (logger.Interface, error) {

vendor/github.com/vesoft-inc/nebula-go/v2/.editorconfig

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/vesoft-inc/nebula-go/v2/.gitignore

+20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/vesoft-inc/nebula-go/v2/Makefile

+21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/vesoft-inc/nebula-go/v2/README.md

+52
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)