in server/datasource/etcd/kv/kv_dao.go [107:147]
func (s *Dao) Update(ctx context.Context, kv *model.KVDoc, options ...datasource.WriteOption) error {
keyKV := key.KV(kv.Domain, kv.Project, kv.ID)
resp, err := etcdadpt.Get(ctx, keyKV)
if err != nil {
openlog.Error(err.Error())
return err
}
if resp == nil {
return datasource.ErrKeyNotExists
}
var oldKV model.KVDoc
err = json.Unmarshal(resp.Value, &oldKV)
if err != nil {
openlog.Error(err.Error())
return err
}
if err := auth.CheckUpdateKV(ctx, &oldKV); err != nil {
return err
}
oldKV.LabelFormat = kv.LabelFormat
oldKV.Value = kv.Value
oldKV.Status = kv.Status
oldKV.Checker = kv.Checker
oldKV.UpdateTime = kv.UpdateTime
oldKV.UpdateRevision = kv.UpdateRevision
opts := datasource.NewWriteOptions(options...)
if opts.SyncEnable {
// if syncEnable is true, will create task in a transaction operation
err = txnUpdate(ctx, kv)
} else {
err = update(ctx, &oldKV, options...)
}
if err != nil {
openlog.Error(err.Error())
return err
}
return nil
}