Skip to content

Commit 447d9b7

Browse files
authored
feat:kuscia支持达梦数据源(#739) (#962)
1 parent b2020b9 commit 447d9b7

File tree

7 files changed

+66
-7
lines changed

7 files changed

+66
-7
lines changed

etc/conf/kuscia.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ dataMesh:
8888
dataSourceTypes: # the type of datasource that data proxy supported
8989
- "odps" # odps also call as Aliyun MaxCompute
9090
- "hive"
91+
- "dameng" # dameng database
9192
# Note: Currently only a single odps data source configuration is supported. If two odps configurations are defined here, the latter one will override the previous one.
9293
# - endpoint: "example-dataproxy-grpc:8024"
9394
# dataSourceTypes:

pkg/common/constants.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ const (
229229
DomainDataSourceTypeODPS = "odps"
230230
DomainDataSourceTypePostgreSQL = "postgresql"
231231
DomainDataSourceTypeHive = "hive"
232+
DomainDataSourceTypeDameng = "dameng"
232233
DefaultDomainDataSourceLocalFSPath = "var/storage/data"
233234
)
234235

pkg/datamesh/metaserver/service/domaindatasource.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ func parseDataSourceURI(sourceType string, info *datamesh.DataSourceInfo) (uri s
221221
case common.DomainDataSourceTypeMysql:
222222
case common.DomainDataSourceTypePostgreSQL:
223223
case common.DomainDataSourceTypeHive:
224+
case common.DomainDataSourceTypeDameng:
224225
if isInvalid(info.Database == nil) {
225226
return
226227
}
@@ -231,7 +232,7 @@ func parseDataSourceURI(sourceType string, info *datamesh.DataSourceInfo) (uri s
231232
}
232233
uri = info.Odps.Endpoint + "/" + info.Odps.Project
233234
default:
234-
err = fmt.Errorf("datasource type:%q not support, only support [localfs,oss,mysql,odps,postgresql,hive]", sourceType)
235+
err = fmt.Errorf("datasource type:%q not support, only support [localfs,oss,mysql,odps,postgresql,hive,dameng]", sourceType)
235236
nlog.Error(err)
236237
return
237238
}
@@ -285,6 +286,7 @@ func decodeDataSourceInfo(sourceType string, connectionStr string) (*datamesh.Da
285286
case common.DomainDataSourceTypeMysql:
286287
case common.DomainDataSourceTypePostgreSQL:
287288
case common.DomainDataSourceTypeHive:
289+
case common.DomainDataSourceTypeDameng:
288290
dsInfo.Database = &datamesh.DatabaseDataSourceInfo{}
289291
err = json.Unmarshal(connectionBytes, dsInfo.Database)
290292
case common.DomainDataSourceTypeLocalFS:

pkg/datamesh/metaserver/service/domaindatasource_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,19 @@ func makeDomainDataSourceService(t *testing.T, conf *config.DataMeshConfig) IDom
7070
return NewDomainDataSourceService(conf, makeConfigService(t))
7171
}
7272

73+
func TestParseDataSourceURI_UnsupportedType(t *testing.T) {
74+
info := &datamesh.DataSourceInfo{
75+
Localfs: &datamesh.LocalDataSourceInfo{
76+
Path: "/test/path",
77+
},
78+
}
79+
uri, err := parseDataSourceURI("unsupported_type", info)
80+
assert.Error(t, err)
81+
assert.Contains(t, err.Error(), "not support")
82+
assert.Contains(t, err.Error(), "unsupported_type")
83+
assert.Empty(t, uri)
84+
}
85+
7386
func makeConfigService(t *testing.T) cmservice.IConfigService {
7487
privateKey, err := rsa.GenerateKey(rand.Reader, 1024)
7588
assert.Nil(t, err)

pkg/kusciaapi/service/domaindata_source.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,9 @@ func validateDataSourceType(t string) error {
492492
t != common.DomainDataSourceTypeLocalFS &&
493493
t != common.DomainDataSourceTypeODPS &&
494494
t != common.DomainDataSourceTypePostgreSQL &&
495-
t != common.DomainDataSourceTypeHive {
496-
return fmt.Errorf("domain data source type %q doesn't support, the available types are [localfs,oss,mysql,odps,postgresql,hive]", t)
495+
t != common.DomainDataSourceTypeHive &&
496+
t != common.DomainDataSourceTypeDameng {
497+
return fmt.Errorf("domain data source type %q doesn't support, the available types are [localfs,oss,mysql,odps,postgresql,hive,dameng]", t)
497498
}
498499
return nil
499500
}
@@ -595,7 +596,7 @@ func decodeDataSourceInfo(sourceType string, connectionStr string) (*kusciaapi.D
595596
case common.DomainDataSourceTypeOSS:
596597
dsInfo.Oss = &kusciaapi.OssDataSourceInfo{}
597598
err = json.Unmarshal(connectionBytes, dsInfo.Oss)
598-
case common.DomainDataSourceTypeMysql, common.DomainDataSourceTypePostgreSQL, common.DomainDataSourceTypeHive:
599+
case common.DomainDataSourceTypeMysql, common.DomainDataSourceTypePostgreSQL, common.DomainDataSourceTypeHive, common.DomainDataSourceTypeDameng:
599600
dsInfo.Database = &kusciaapi.DatabaseDataSourceInfo{}
600601
err = json.Unmarshal(connectionBytes, dsInfo.Database)
601602
case common.DomainDataSourceTypeLocalFS:
@@ -649,7 +650,7 @@ func parseAndNormalizeDataSource(sourceType string, info *kusciaapi.DataSourceIn
649650
// truncate slash
650651
info.Localfs.Path = strings.TrimRight(info.Localfs.Path, string(filepath.Separator))
651652
uri = info.Localfs.Path
652-
case common.DomainDataSourceTypeMysql, common.DomainDataSourceTypePostgreSQL, common.DomainDataSourceTypeHive:
653+
case common.DomainDataSourceTypeMysql, common.DomainDataSourceTypePostgreSQL, common.DomainDataSourceTypeHive, common.DomainDataSourceTypeDameng:
653654
if isInvalid(info.Database == nil) {
654655
return
655656
}
@@ -660,7 +661,7 @@ func parseAndNormalizeDataSource(sourceType string, info *kusciaapi.DataSourceIn
660661
}
661662
uri = info.Odps.Endpoint + "/" + info.Odps.Project
662663
default:
663-
err = fmt.Errorf("datasource type:%q not support, only support [localfs,oss,mysql,odps,postgresql,hive]", sourceType)
664+
err = fmt.Errorf("datasource type:%q not support, only support [localfs,oss,mysql,odps,postgresql,hive,dameng]", sourceType)
664665
nlog.Error(err)
665666
return
666667
}
@@ -701,6 +702,7 @@ func validateDataSourceInfo(sourceType string, info *kusciaapi.DataSourceInfo) e
701702
case common.DomainDataSourceTypeMysql:
702703
case common.DomainDataSourceTypePostgreSQL:
703704
case common.DomainDataSourceTypeHive:
705+
case common.DomainDataSourceTypeDameng:
704706
if info.Database == nil {
705707
return fmt.Errorf("%v info is nil", sourceType)
706708
}

pkg/kusciaapi/service/domaindata_source_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,44 @@ func TestListDomainDataSource_InfoErr(t *testing.T) {
291291
assert.Equal(t, int32(pberrorcode.ErrorCode_KusciaAPIErrListDomainDataSource), res.Status.Code)
292292
}
293293

294+
func TestValidateDataSourceType_UnsupportedType(t *testing.T) {
295+
err := validateDataSourceType("unsupported_type")
296+
assert.Error(t, err)
297+
assert.Contains(t, err.Error(), "doesn't support")
298+
assert.Contains(t, err.Error(), "unsupported_type")
299+
}
300+
301+
func TestParseAndNormalizeDataSource_UnsupportedType(t *testing.T) {
302+
info := &kusciaapi.DataSourceInfo{
303+
Localfs: &kusciaapi.LocalDataSourceInfo{
304+
Path: "/test/path",
305+
},
306+
}
307+
uri, err := parseAndNormalizeDataSource("unsupported_type", info)
308+
assert.Error(t, err)
309+
assert.Contains(t, err.Error(), "not support")
310+
assert.Contains(t, err.Error(), "unsupported_type")
311+
assert.Empty(t, uri)
312+
}
313+
314+
func TestCreateDomainDataSource_UnsupportedType(t *testing.T) {
315+
conf := makeDomainDataSourceServiceConfig(t)
316+
dsService := makeDomainDataSourceService(t, conf)
317+
res := dsService.CreateDomainDataSource(context.Background(), &kusciaapi.CreateDomainDataSourceRequest{
318+
Header: nil,
319+
DomainId: mockDomainID,
320+
DatasourceId: "ds-1",
321+
Type: "unsupported_type",
322+
Info: &kusciaapi.DataSourceInfo{
323+
Localfs: &kusciaapi.LocalDataSourceInfo{
324+
Path: "./data",
325+
},
326+
},
327+
})
328+
assert.NotEqual(t, int32(0), res.Status.Code)
329+
assert.Contains(t, res.Status.Message, "doesn't support")
330+
}
331+
294332
func makeDomainDataSourceService(t *testing.T, conf *config.KusciaAPIConfig) IDomainDataSourceService {
295333
return NewDomainDataSourceService(conf, makeConfigService(t))
296334
}

scripts/deploy/kuscia.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,9 @@ function dataproxy_config() {
648648
dataProxyList:
649649
- endpoint: "dataproxy-grpc:8023"
650650
dataSourceTypes:
651-
- "odps"'
651+
- "odps"
652+
- "hive"
653+
- "dameng"'
652654
if ! grep -q "${data_proxy_config}" "${kuscia_config_file}"; then
653655
echo "${data_proxy_config}" >> "${kuscia_config_file}"
654656
fi

0 commit comments

Comments
 (0)