in banyand/metadata/schema/etcd.go [302:346]
func (e *etcdSchemaRegistry) delete(ctx context.Context, metadata Metadata) (bool, error) {
if !e.closer.AddRunning() {
return false, ErrClosed
}
defer e.closer.Done()
key, err := metadata.key()
if err != nil {
return false, err
}
resp, err := e.client.Delete(ctx, key, clientv3.WithPrevKV())
if err != nil {
return false, err
}
if resp.Deleted == 1 {
var message proto.Message
switch metadata.Kind {
case KindMeasure:
message = &databasev1.Measure{}
case KindStream:
message = &databasev1.Stream{}
case KindIndexRuleBinding:
message = &databasev1.IndexRuleBinding{}
case KindIndexRule:
message = &databasev1.IndexRule{}
case KindProperty:
message = &propertyv1.Property{}
case KindTopNAggregation:
message = &databasev1.TopNAggregation{}
default:
return false, nil
}
if unmarshalErr := proto.Unmarshal(resp.PrevKvs[0].Value, message); unmarshalErr == nil {
e.notifyDelete(Metadata{
TypeMeta: TypeMeta{
Kind: metadata.Kind,
Name: metadata.Name,
Group: metadata.Group,
},
Spec: message,
})
}
return true, nil
}
return false, nil
}