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

Method RemoveDataSource

backend/api/v1/instance_service.go:1104–1148  ·  view source on GitHub ↗

RemoveDataSource removes a data source to an instance.

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

Source from the content-addressed store, hash-verified

1102
1103// RemoveDataSource removes a data source to an instance.
1104func (s *InstanceService) RemoveDataSource(ctx context.Context, req *connect.Request[v1pb.RemoveDataSourceRequest]) (*connect.Response[v1pb.Instance], error) {
1105 if req.Msg.DataSource == nil {
1106 return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("data sources is required"))
1107 }
1108
1109 instance, err := getInstanceMessage(ctx, s.store, req.Msg.Name)
1110 if err != nil {
1111 return nil, err
1112 }
1113 if instance.Deleted {
1114 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("instance %q has been deleted", req.Msg.Name))
1115 }
1116
1117 metadata := proto.CloneOf(instance.Metadata)
1118 var updatedDataSources []*storepb.DataSource
1119 var dataSource *storepb.DataSource
1120 for _, ds := range instance.Metadata.GetDataSources() {
1121 if ds.GetId() == req.Msg.DataSource.Id {
1122 dataSource = ds
1123 } else {
1124 updatedDataSources = append(updatedDataSources, ds)
1125 }
1126 }
1127 if dataSource == nil {
1128 return nil, connect.NewError(connect.CodeNotFound, errors.New("data source not found"))
1129 }
1130
1131 // We only support remove RO type datasource to instance now, see more details in instance_service.proto.
1132 if dataSource.GetType() != storepb.DataSourceType_READ_ONLY {
1133 return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("only support remove read-only data source"))
1134 }
1135
1136 metadata.DataSources = updatedDataSources
1137 instance, err = s.store.UpdateInstance(ctx, &store.UpdateInstanceMessage{
1138 ResourceID: &instance.ResourceID,
1139 Workspace: instance.Workspace,
1140 Metadata: metadata,
1141 })
1142 if err != nil {
1143 return nil, connect.NewError(connect.CodeInternal, err)
1144 }
1145
1146 result := s.convertToV1Instance(ctx, instance)
1147 return connect.NewResponse(result), nil
1148}
1149
1150func getInstanceMessage(ctx context.Context, stores *store.Store, name string) (*store.InstanceMessage, error) {
1151 instanceID, err := common.GetInstanceID(name)

Callers

nothing calls this directly

Calls 7

GetTypeMethod · 0.95
convertToV1InstanceMethod · 0.95
getInstanceMessageFunction · 0.85
ErrorfMethod · 0.80
UpdateInstanceMethod · 0.65
GetDataSourcesMethod · 0.45
GetIdMethod · 0.45

Tested by

no test coverage detected