Atlas › Test
TestRemoveIf
Exact test identity: go.temporal.io/server/common/collection/TestConcurrentTxMapSuite/TestRemoveIf
- Package
go.temporal.io/server/common/collection
- Suite / test hierarchy
TestConcurrentTxMapSuite/TestRemoveIf
- Test
TestRemoveIf
- Introduced at
- TestRemoveIf Frontier kind: Test frontier
- Covered ranges
- 12
- Covered lines
- 47
- Covered files
- 2
Covered source
Expand a file to inspect source; the > gutter marks covered lines.
go.temporal.io/server/common/collection/concurrent_tx_map.go 40 covered LOC · 8 ranges
Open complete file
55
//
56
// The hash function to use for sharding
57
>
func NewShardedConcurrentTxMap(initialCap int, hashfn HashFunc) ConcurrentTxMap {
concurrent_tx_map.go
58
>
cmap := new(ShardedConcurrentTxMap)
59
>
cmap.hashfn = hashfn
60
>
cmap.initialCap = max(nShards, initialCap/nShards)
61
>
return cmap
62
>
}
63
64
// Get returns the value corresponding to the key, if it exist
82
83
// Put records the given key value mapping. Overwrites previous values
85
>
shard := cmap.getShard(key)
86
>
shard.Lock()
87
>
cmap.lazyInitShard(shard)
88
>
_, ok := shard.items[key]
89
>
if !ok {
90
>
atomic.AddInt32(&cmap.size, 1)
91
>
}
92
>
shard.items[key] = value
93
>
shard.Unlock()
94
}
95
161
162
// RemoveIf deletes the given key from the map if fn return true
163
>
func (cmap *ShardedConcurrentTxMap) RemoveIf(key any, fn PredicateFunc) bool {
concurrent_tx_map.go
164
>
shard := cmap.getShard(key)
165
>
var removed bool
166
>
shard.Lock()
167
>
if shard.items != nil {
169
>
if ok && fn(key, value) {
170
>
removed = true
171
>
delete(shard.items, key)
172
>
atomic.AddInt32(&cmap.size, -1)
173
>
}
174
}
176
>
return removed
177
}
178
218
219
// Len returns the number of items in the map
221
>
return int(atomic.LoadInt32(&cmap.size))
222
>
}
223
225
>
shardIdx := cmap.hashfn(key) % nShards
226
>
return &cmap.shards[shardIdx]
227
>
}
228
230
>
if shard.items == nil {
231
>
shard.items = make(map[any]any, cmap.initialCap)
232
>
}
233
}
go.temporal.io/server/common/collection/util.go 7 covered LOC · 4 ranges
Open complete file
9
// if the uuid is malformed, then the hash function always
10
// returns 0 as the hash value
11
>
func UUIDHashCode(input any) uint32 {
util.go
12
>
key, ok := input.(string)
13
>
if !ok {
14
return 0
15
}
16
>
if len(key) != UUIDStringLength {
util.go
17
return 0
18
}
19
// Use the first 4 bytes of the uuid as the hash
20
>
b, err := hex.DecodeString(key[:8])
util.go
21
>
if err != nil {
22
return 0
23
}
24
>
return binary.BigEndian.Uint32(b)
util.go
25
}