mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-14 02:43:36 +00:00
rebase: update kubernetes to 1.28.0 in main
updating kubernetes to 1.28.0 in the main repo. Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
committed by
mergify[bot]
parent
b2fdc269c3
commit
ff3e84ad67
1
vendor/k8s.io/apiserver/pkg/registry/generic/OWNERS
generated
vendored
1
vendor/k8s.io/apiserver/pkg/registry/generic/OWNERS
generated
vendored
@ -2,7 +2,6 @@
|
||||
|
||||
reviewers:
|
||||
- thockin
|
||||
- lavalamp
|
||||
- smarterclayton
|
||||
- wojtek-t
|
||||
- deads2k
|
||||
|
22
vendor/k8s.io/apiserver/pkg/registry/generic/registry/dryrun.go
generated
vendored
22
vendor/k8s.io/apiserver/pkg/registry/generic/registry/dryrun.go
generated
vendored
@ -18,7 +18,10 @@ package registry
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"reflect"
|
||||
|
||||
"k8s.io/apimachinery/pkg/conversion"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
"k8s.io/apiserver/pkg/storage"
|
||||
@ -72,19 +75,30 @@ func (s *DryRunnableStorage) GuaranteedUpdate(
|
||||
ctx context.Context, key string, destination runtime.Object, ignoreNotFound bool,
|
||||
preconditions *storage.Preconditions, tryUpdate storage.UpdateFunc, dryRun bool, cachedExistingObject runtime.Object) error {
|
||||
if dryRun {
|
||||
err := s.Storage.Get(ctx, key, storage.GetOptions{IgnoreNotFound: ignoreNotFound}, destination)
|
||||
var current runtime.Object
|
||||
v, err := conversion.EnforcePtr(destination)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to convert output object to pointer: %v", err)
|
||||
}
|
||||
if u, ok := v.Addr().Interface().(runtime.Unstructured); ok {
|
||||
current = u.NewEmptyInstance()
|
||||
} else {
|
||||
current = reflect.New(v.Type()).Interface().(runtime.Object)
|
||||
}
|
||||
|
||||
err = s.Storage.Get(ctx, key, storage.GetOptions{IgnoreNotFound: ignoreNotFound}, current)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = preconditions.Check(key, destination)
|
||||
err = preconditions.Check(key, current)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
rev, err := s.Versioner().ObjectResourceVersion(destination)
|
||||
rev, err := s.Versioner().ObjectResourceVersion(current)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
updated, _, err := tryUpdate(destination, storage.ResponseMeta{ResourceVersion: rev})
|
||||
updated, _, err := tryUpdate(current, storage.ResponseMeta{ResourceVersion: rev})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
127
vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go
generated
vendored
127
vendor/k8s.io/apiserver/pkg/registry/generic/registry/store.go
generated
vendored
@ -38,6 +38,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
@ -671,6 +672,15 @@ func (e *Store) Update(ctx context.Context, name string, objInfo rest.UpdatedObj
|
||||
if err := rest.BeforeUpdate(e.UpdateStrategy, ctx, obj, existing); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
// Ignore changes that only affect managed fields timestamps.
|
||||
// FieldManager can't know about changes like normalized fields, defaulted
|
||||
// fields and other mutations.
|
||||
obj, err = fieldmanager.IgnoreManagedFieldsTimestampsTransformer(ctx, obj, existing)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
// at this point we have a fully formed object. It is time to call the validators that the apiserver
|
||||
// handling chain wants to enforce.
|
||||
if updateValidation != nil {
|
||||
@ -1133,6 +1143,11 @@ func (e *Store) DeleteReturnsDeletedObject() bool {
|
||||
return e.ReturnDeletedObject
|
||||
}
|
||||
|
||||
// deleteCollectionPageSize is the size of the page used when
|
||||
// listing objects from storage during DeleteCollection calls.
|
||||
// It's a variable to make allow overwriting in tests.
|
||||
var deleteCollectionPageSize = int64(10000)
|
||||
|
||||
// DeleteCollection removes all items returned by List with a given ListOptions from storage.
|
||||
//
|
||||
// DeleteCollection is currently NOT atomic. It can happen that only subset of objects
|
||||
@ -1145,32 +1160,22 @@ func (e *Store) DeleteCollection(ctx context.Context, deleteValidation rest.Vali
|
||||
listOptions = listOptions.DeepCopy()
|
||||
}
|
||||
|
||||
listObj, err := e.List(ctx, listOptions)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items, err := meta.ExtractList(listObj)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(items) == 0 {
|
||||
// Nothing to delete, return now
|
||||
return listObj, nil
|
||||
}
|
||||
// Spawn a number of goroutines, so that we can issue requests to storage
|
||||
// in parallel to speed up deletion.
|
||||
// It is proportional to the number of items to delete, up to
|
||||
// DeleteCollectionWorkers (it doesn't make much sense to spawn 16
|
||||
// workers to delete 10 items).
|
||||
var items []runtime.Object
|
||||
|
||||
// TODO(wojtek-t): Decide if we don't want to start workers more opportunistically.
|
||||
workersNumber := e.DeleteCollectionWorkers
|
||||
if workersNumber > len(items) {
|
||||
workersNumber = len(items)
|
||||
}
|
||||
if workersNumber < 1 {
|
||||
workersNumber = 1
|
||||
}
|
||||
wg := sync.WaitGroup{}
|
||||
toProcess := make(chan int, 2*workersNumber)
|
||||
// Ensure that chanSize is not too high (to avoid wasted work) but
|
||||
// at the same time high enough to start listing before we process
|
||||
// the whole page.
|
||||
chanSize := 2 * workersNumber
|
||||
if chanSize < 256 {
|
||||
chanSize = 256
|
||||
}
|
||||
toProcess := make(chan runtime.Object, chanSize)
|
||||
errs := make(chan error, workersNumber+1)
|
||||
workersExited := make(chan struct{})
|
||||
|
||||
@ -1183,8 +1188,8 @@ func (e *Store) DeleteCollection(ctx context.Context, deleteValidation rest.Vali
|
||||
})
|
||||
defer wg.Done()
|
||||
|
||||
for index := range toProcess {
|
||||
accessor, err := meta.Accessor(items[index])
|
||||
for item := range toProcess {
|
||||
accessor, err := meta.Accessor(item)
|
||||
if err != nil {
|
||||
errs <- err
|
||||
return
|
||||
@ -1210,20 +1215,82 @@ func (e *Store) DeleteCollection(ctx context.Context, deleteValidation rest.Vali
|
||||
close(workersExited)
|
||||
}()
|
||||
|
||||
func() {
|
||||
hasLimit := listOptions.Limit > 0
|
||||
if listOptions.Limit == 0 {
|
||||
listOptions.Limit = deleteCollectionPageSize
|
||||
}
|
||||
|
||||
// Paginate the list request and throw all items into workers.
|
||||
listObj, err := func() (runtime.Object, error) {
|
||||
defer close(toProcess)
|
||||
|
||||
for i := 0; i < len(items); i++ {
|
||||
processedItems := 0
|
||||
var originalList runtime.Object
|
||||
for {
|
||||
select {
|
||||
case toProcess <- i:
|
||||
case <-workersExited:
|
||||
klog.V(4).InfoS("workers already exited, and there are some items waiting to be processed", "finished", i, "total", len(items))
|
||||
return
|
||||
case <-ctx.Done():
|
||||
return nil, ctx.Err()
|
||||
default:
|
||||
}
|
||||
|
||||
listObj, err := e.List(ctx, listOptions)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
newItems, err := meta.ExtractList(listObj)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, newItems...)
|
||||
|
||||
for i := 0; i < len(newItems); i++ {
|
||||
select {
|
||||
case toProcess <- newItems[i]:
|
||||
case <-workersExited:
|
||||
klog.V(4).InfoS("workers already exited, and there are some items waiting to be processed", "queued/finished", i, "total", processedItems+len(newItems))
|
||||
// Try to propagate an error from the workers if possible.
|
||||
select {
|
||||
case err := <-errs:
|
||||
return nil, err
|
||||
default:
|
||||
return nil, fmt.Errorf("all DeleteCollection workers exited")
|
||||
}
|
||||
}
|
||||
}
|
||||
processedItems += len(newItems)
|
||||
|
||||
// If the original request was setting the limit, finish after running it.
|
||||
if hasLimit {
|
||||
return listObj, nil
|
||||
}
|
||||
|
||||
if originalList == nil {
|
||||
originalList = listObj
|
||||
meta.SetList(originalList, nil)
|
||||
}
|
||||
|
||||
// If there are no more items, return the list.
|
||||
m, err := meta.ListAccessor(listObj)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(m.GetContinue()) == 0 {
|
||||
meta.SetList(originalList, items)
|
||||
return originalList, nil
|
||||
}
|
||||
|
||||
// Set up the next loop.
|
||||
listOptions.Continue = m.GetContinue()
|
||||
listOptions.ResourceVersion = ""
|
||||
listOptions.ResourceVersionMatch = ""
|
||||
}
|
||||
}()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Wait for all workers to exist.
|
||||
// Wait for all workers to exit.
|
||||
<-workersExited
|
||||
|
||||
select {
|
||||
|
Reference in New Issue
Block a user