aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/google.golang.org/grpc/xds/internal/balancer/outlierdetection/callcounter.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/google.golang.org/grpc/xds/internal/balancer/outlierdetection/callcounter.go')
-rw-r--r--vendor/google.golang.org/grpc/xds/internal/balancer/outlierdetection/callcounter.go66
1 files changed, 0 insertions, 66 deletions
diff --git a/vendor/google.golang.org/grpc/xds/internal/balancer/outlierdetection/callcounter.go b/vendor/google.golang.org/grpc/xds/internal/balancer/outlierdetection/callcounter.go
deleted file mode 100644
index 4597f727b6..0000000000
--- a/vendor/google.golang.org/grpc/xds/internal/balancer/outlierdetection/callcounter.go
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *
- * Copyright 2022 gRPC authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package outlierdetection
-
-import (
- "sync/atomic"
- "unsafe"
-)
-
-type bucket struct {
- numSuccesses uint32
- numFailures uint32
-}
-
-func newCallCounter() *callCounter {
- return &callCounter{
- activeBucket: unsafe.Pointer(&bucket{}),
- inactiveBucket: &bucket{},
- }
-}
-
-// callCounter has two buckets, which each count successful and failing RPC's.
-// The activeBucket is used to actively count any finished RPC's, and the
-// inactiveBucket is populated with this activeBucket's data every interval for
-// use by the Outlier Detection algorithm.
-type callCounter struct {
- // activeBucket updates every time a call finishes (from picker passed to
- // Client Conn), so protect pointer read with atomic load of unsafe.Pointer
- // so picker does not have to grab a mutex per RPC, the critical path.
- activeBucket unsafe.Pointer // bucket
- inactiveBucket *bucket
-}
-
-func (cc *callCounter) clear() {
- atomic.StorePointer(&cc.activeBucket, unsafe.Pointer(&bucket{}))
- cc.inactiveBucket = &bucket{}
-}
-
-// "When the timer triggers, the inactive bucket is zeroed and swapped with the
-// active bucket. Then the inactive bucket contains the number of successes and
-// failures since the last time the timer triggered. Those numbers are used to
-// evaluate the ejection criteria." - A50.
-func (cc *callCounter) swap() {
- ib := cc.inactiveBucket
- *ib = bucket{}
- ab := (*bucket)(atomic.SwapPointer(&cc.activeBucket, unsafe.Pointer(ib)))
- cc.inactiveBucket = &bucket{
- numSuccesses: atomic.LoadUint32(&ab.numSuccesses),
- numFailures: atomic.LoadUint32(&ab.numFailures),
- }
-}