@@ -217,9 +217,12 @@ func (s *store) Create(ctx context.Context, key string, obj, out runtime.Object,
217
217
}
218
218
span .AddEvent ("Encode succeeded" , attribute .Int ("len" , len (data )))
219
219
220
- opts , err := s .ttlOpts (ctx , int64 (ttl ))
221
- if err != nil {
222
- return err
220
+ var lease clientv3.LeaseID
221
+ if ttl != 0 {
222
+ lease , err = s .leaseManager .GetLease (ctx , int64 (ttl ))
223
+ if err != nil {
224
+ return err
225
+ }
223
226
}
224
227
225
228
newData , err := s .transformer .TransformToStorage (ctx , data , authenticatedDataString (preparedKey ))
@@ -230,11 +233,7 @@ func (s *store) Create(ctx context.Context, key string, obj, out runtime.Object,
230
233
span .AddEvent ("TransformToStorage succeeded" )
231
234
232
235
startTime := time .Now ()
233
- txnResp , err := s .client .KV .Txn (ctx ).If (
234
- notFound (preparedKey ),
235
- ).Then (
236
- clientv3 .OpPut (preparedKey , string (newData ), opts ... ),
237
- ).Commit ()
236
+ txnResp , err := s .client .Kubernetes .OptimisticPut (ctx , preparedKey , newData , 0 , kubernetes.PutOptions {LeaseID : lease })
238
237
metrics .RecordEtcdRequest ("create" , s .groupResourceString , err , startTime )
239
238
if err != nil {
240
239
span .AddEvent ("Txn call failed" , attribute .String ("err" , err .Error ()))
@@ -247,8 +246,7 @@ func (s *store) Create(ctx context.Context, key string, obj, out runtime.Object,
247
246
}
248
247
249
248
if out != nil {
250
- putResp := txnResp .Responses [0 ].GetResponsePut ()
251
- err = s .decoder .Decode (data , out , putResp .Header .Revision )
249
+ err = s .decoder .Decode (data , out , txnResp .Revision )
252
250
if err != nil {
253
251
span .AddEvent ("decode failed" , attribute .Int ("len" , len (data )), attribute .String ("err" , err .Error ()))
254
252
recordDecodeError (s .groupResourceString , preparedKey )
@@ -1052,10 +1050,6 @@ func recordDecodeError(resource string, key string) {
1052
1050
klog .V (4 ).Infof ("Decoding %s \" %s\" failed" , resource , key )
1053
1051
}
1054
1052
1055
- func notFound (key string ) clientv3.Cmp {
1056
- return clientv3 .Compare (clientv3 .ModRevision (key ), "=" , 0 )
1057
- }
1058
-
1059
1053
// getTypeName returns type name of an object for reporting purposes.
1060
1054
func getTypeName (obj interface {}) string {
1061
1055
return reflect .TypeOf (obj ).String ()
0 commit comments