mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed?
<!-- Describe what has changed in this PR -->
Remove license header from every file. Because it is really hard to
follow in this PR here is the summary:
1. License header is removed from all `.go` and `.proto` files
:fireworks::fireworks:🎆.
2. `LICENSE` file in the root directory has only Temporal and Uber
copyrights.
3. 5 other `LICENSE` files added to the packages which have copyrights
different from Temporal and Uber: Datadog, Xargin, "Mat Ryer, Tyler
Bunnell and contributors".
4. `license_file` flag is removed from all code generation tools.
5. `copyright_file` flag is removed from `go:generate mockgen`
directive.
6. All copyright related targets are removed from `Makefile`.
7. Updated Temporal copyright year to 2025 everywhere.
## Why?
<!-- Tell your future self why have you made these changes -->
I double checked with legal department that it is not needed to have
license header in every file. One file per repo is enough. I put all
copyrights to the root `LICENSE` file and removed header from all other
files. Also updated tools and `Makefile`.
66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
package faultinjection
|
|
|
|
import (
|
|
"math/rand"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type (
|
|
faultMetadata struct {
|
|
fault fault
|
|
threshold float64 // threshold for this fault to be returned
|
|
}
|
|
|
|
methodFaultGenerator struct {
|
|
rndMu sync.Mutex
|
|
rnd *rand.Rand // rand is not thread-safe
|
|
|
|
rate float64 // chance for one of the errors for this method to be returned
|
|
faultsMetadata []faultMetadata // faults with their thresholds that might be generated for this method
|
|
}
|
|
)
|
|
|
|
func newMethodFaultGenerator(faults []fault, seed int64) *methodFaultGenerator {
|
|
if seed == 0 {
|
|
seed = time.Now().UnixNano()
|
|
}
|
|
|
|
fm := make([]faultMetadata, 0, len(faults))
|
|
totalRate := 0.0
|
|
for _, f := range faults {
|
|
totalRate += f.rate
|
|
fm = append(fm, faultMetadata{
|
|
fault: f,
|
|
threshold: totalRate,
|
|
})
|
|
}
|
|
|
|
return &methodFaultGenerator{
|
|
rate: totalRate,
|
|
faultsMetadata: fm,
|
|
rnd: rand.New(rand.NewSource(seed)),
|
|
}
|
|
}
|
|
|
|
func (p *methodFaultGenerator) generate(_ string) *fault {
|
|
if p.rate <= 0 {
|
|
return nil
|
|
}
|
|
|
|
p.rndMu.Lock()
|
|
roll := p.rnd.Float64()
|
|
p.rndMu.Unlock()
|
|
|
|
if roll < p.rate {
|
|
// Yes, this method call should be failed.
|
|
// Let's find out with what fault.
|
|
for i := range p.faultsMetadata {
|
|
if roll < p.faultsMetadata[i].threshold {
|
|
return &p.faultsMetadata[i].fault
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|