DeleteCaps delete caps from the key
(id string, keyInfo *keystore.KeyInfo)
| 207 | |
| 208 | // DeleteCaps delete caps from the key |
| 209 | func (c *Cluster) DeleteCaps(id string, keyInfo *keystore.KeyInfo) (res *keystore.KeyInfo, err error) { |
| 210 | var ( |
| 211 | delCaps *caps.Caps |
| 212 | curCaps *caps.Caps |
| 213 | newCaps []byte |
| 214 | ) |
| 215 | c.fsm.opKeyMutex.Lock() |
| 216 | defer c.fsm.opKeyMutex.Unlock() |
| 217 | if res, err = c.fsm.GetKey(id); err != nil { |
| 218 | err = proto.ErrKeyNotExists |
| 219 | goto errHandler |
| 220 | } |
| 221 | |
| 222 | delCaps = &caps.Caps{} |
| 223 | if err = delCaps.Init(keyInfo.Caps); err != nil { |
| 224 | return |
| 225 | } |
| 226 | curCaps = &caps.Caps{} |
| 227 | if err = curCaps.Init(res.Caps); err != nil { |
| 228 | return |
| 229 | } |
| 230 | |
| 231 | curCaps.Delete(delCaps) |
| 232 | |
| 233 | if newCaps, err = json.Marshal(curCaps); err != nil { |
| 234 | goto errHandler |
| 235 | } |
| 236 | res.Caps = newCaps |
| 237 | if err = c.syncDeleteCaps(res); err != nil { |
| 238 | goto errHandler |
| 239 | } |
| 240 | c.fsm.PutKey(res) |
| 241 | return |
| 242 | errHandler: |
| 243 | err = fmt.Errorf("action[DeleteCaps], clusterID[%v] ID:%v, err:%v ", c.Name, keyInfo, err.Error()) |
| 244 | log.LogError(errors.Stack(err)) |
| 245 | return |
| 246 | } |