Atlas › Test
TestPutOrDo
Exact test identity: go.temporal.io/server/common/collection/TestConcurrentTxMapSuite/TestPutOrDo
- Package
go.temporal.io/server/common/collection
- Suite / test hierarchy
TestConcurrentTxMapSuite/TestPutOrDo
- Test
TestPutOrDo
- Introduced at
- TestPutOrDo Frontier kind: Test frontier
- Covered ranges
- 10
- Covered lines
- 36
- 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 29 covered LOC · 6 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
143
// PutOrDo put the key value in the map, if key does not exists, otherwise, call fn with existing key and value
144
// return (value, fn evaluated or not, error when evaluation fn)
145
>
func (cmap *ShardedConcurrentTxMap) PutOrDo(key any, value any, fn ActionFunc) (any, bool, error) {
concurrent_tx_map.go
146
>
shard := cmap.getShard(key)
147
>
var err error
148
>
shard.Lock()
149
>
cmap.lazyInitShard(shard)
150
>
v, ok := shard.items[key]
151
>
if !ok {
152
>
shard.items[key] = value
153
>
v = value
154
>
atomic.AddInt32(&cmap.size, 1)
155
>
} else {
157
>
}
159
>
return v, ok, err
160
}
161
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
}