MCPcopy Index your code
hub / github.com/bytebase/bytebase / UpdateDataSource

Method UpdateDataSource

backend/api/v1/instance_service.go:889–1101  ·  view source on GitHub ↗

UpdateDataSource updates a data source of an instance.

(ctx context.Context, req *connect.Request[v1pb.UpdateDataSourceRequest])

Source from the content-addressed store, hash-verified

887
888// UpdateDataSource updates a data source of an instance.
889func (s *InstanceService) UpdateDataSource(ctx context.Context, req *connect.Request[v1pb.UpdateDataSourceRequest]) (*connect.Response[v1pb.Instance], error) {
890 if req.Msg.DataSource == nil {
891 return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("datasource is required"))
892 }
893 if req.Msg.UpdateMask == nil {
894 return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("update_mask must be set"))
895 }
896
897 instance, err := getInstanceMessage(ctx, s.store, req.Msg.Name)
898 if err != nil {
899 return nil, err
900 }
901 if instance.Deleted {
902 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("instance %q has been deleted", req.Msg.Name))
903 }
904 metadata := proto.CloneOf(instance.Metadata)
905 var dataSource *storepb.DataSource
906 for _, ds := range metadata.GetDataSources() {
907 if ds.GetId() == req.Msg.DataSource.Id {
908 dataSource = ds
909 break
910 }
911 }
912 if dataSource == nil {
913 if req.Msg.AllowMissing {
914 return s.AddDataSource(ctx, connect.NewRequest(&v1pb.AddDataSourceRequest{
915 Name: req.Msg.Name,
916 DataSource: req.Msg.DataSource,
917 ValidateOnly: req.Msg.ValidateOnly,
918 }))
919 }
920 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf(`cannot found data source "%s"`, req.Msg.DataSource.Id))
921 }
922
923 if dataSource.GetType() == storepb.DataSourceType_READ_ONLY {
924 if err := s.licenseService.IsFeatureEnabledForInstance(ctx, common.GetWorkspaceIDFromContext(ctx), v1pb.PlanFeature_FEATURE_INSTANCE_READ_ONLY_CONNECTION, instance); err != nil {
925 return nil, connect.NewError(connect.CodePermissionDenied, err)
926 }
927 }
928
929 for _, path := range req.Msg.UpdateMask.Paths {
930 switch path {
931 case "username":
932 dataSource.Username = req.Msg.DataSource.Username
933 case "password":
934 dataSource.Password = req.Msg.DataSource.Password
935 case "ssl_ca":
936 dataSource.SslCa = req.Msg.DataSource.SslCa
937 case "ssl_ca_path":
938 dataSource.SslCaPath = req.Msg.DataSource.SslCaPath
939 case "ssl_cert":
940 dataSource.SslCert = req.Msg.DataSource.SslCert
941 case "ssl_cert_path":
942 dataSource.SslCertPath = req.Msg.DataSource.SslCertPath
943 case "ssl_key":
944 dataSource.SslKey = req.Msg.DataSource.SslKey
945 case "ssl_key_path":
946 dataSource.SslKeyPath = req.Msg.DataSource.SslKeyPath

Callers

nothing calls this directly

Calls 15

AddDataSourceMethod · 0.95
GetTypeMethod · 0.95
convertToV1InstanceMethod · 0.95
getInstanceMessageFunction · 0.85
convertV1RedisTypeFunction · 0.85
convertV1CloudSQLIPTypeFunction · 0.85

Tested by

no test coverage detected