(ctx context.Context, keys ...string)
| 140 | } |
| 141 | |
| 142 | func (dm *DMap) deleteKeys(ctx context.Context, keys ...string) (int, error) { |
| 143 | members := make(map[discovery.Member][]string) |
| 144 | for _, key := range keys { |
| 145 | hkey := partitions.HKey(dm.name, key) |
| 146 | member := dm.s.primary.PartitionByHKey(hkey).Owner() |
| 147 | members[member] = append(members[member], key) |
| 148 | } |
| 149 | |
| 150 | for member, distributedKeys := range members { |
| 151 | if member.CompareByName(dm.s.rt.This()) { |
| 152 | for _, key := range distributedKeys { |
| 153 | if err := dm.deleteKey(key); err != nil { |
| 154 | return 0, err |
| 155 | } |
| 156 | } |
| 157 | } else { |
| 158 | cmd := protocol.NewDel(dm.name, distributedKeys...).Command(dm.s.ctx) |
| 159 | rc := dm.s.client.Get(member.String()) |
| 160 | err := rc.Process(ctx, cmd) |
| 161 | if err != nil { |
| 162 | return 0, protocol.ConvertError(err) |
| 163 | } |
| 164 | |
| 165 | return 0, protocol.ConvertError(cmd.Err()) |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | return len(keys), nil |
| 170 | } |
| 171 | |
| 172 | // Delete deletes the value for the given key. Delete will not return error if key doesn't exist. It's thread-safe. |
| 173 | // It is safe to modify the contents of the argument after Delete returns. |
no test coverage detected