in server/datasource/etcd/kv/kv_dao.go [80:104]
func txnCreate(ctx context.Context, kv *model.KVDoc) (bool, error) {
kvBytes, err := json.Marshal(kv)
if err != nil {
openlog.Error("fail to marshal kv " + err.Error())
return false, err
}
task, err := sync.NewTask(kv.Domain, kv.Project, sync.CreateAction, datasource.ConfigResource, kv)
if err != nil {
openlog.Error("fail to create task" + err.Error())
return false, err
}
taskBytes, err := json.Marshal(task)
if err != nil {
openlog.Error("fail to marshal task ")
return false, err
}
kvOpPut := etcdadpt.OpPut(etcdadpt.WithStrKey(key.KV(kv.Domain, kv.Project, kv.ID)), etcdadpt.WithValue(kvBytes))
taskOpPut := etcdadpt.OpPut(etcdadpt.WithStrKey(key.TaskKey(kv.Domain, kv.Project, task.ID, task.Timestamp)), etcdadpt.WithValue(taskBytes))
resp, err := etcdadpt.TxnWithCmp(ctx, []etcdadpt.OpOptions{kvOpPut, taskOpPut},
etcdadpt.If(etcdadpt.NotExistKey(string(kvOpPut.Key)), etcdadpt.NotExistKey(string(taskOpPut.Key))), nil)
if err != nil {
return false, err
}
return resp.Succeeded, nil
}