1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package praefect
import (
"context"
"fmt"
"gitlab.com/gitlab-org/gitaly/v15/structerr"
"gitlab.com/gitlab-org/gitaly/proto/v15/go/gitalypb"
"gitlab.com/gitlab-org/gitaly/v15/internal/git/objectpool"
"gitlab.com/gitlab-org/gitaly/v15/internal/git/stats"
objectpoolsvc "gitlab.com/gitlab-org/gitaly/v15/internal/gitaly/service/objectpool"
"gitlab.com/gitlab-org/gitaly/v15/internal/praefect/datastore"
"google.golang.org/grpc"
"google.golang.org/protobuf/proto"
)
// DeleteObjectPoolHandler intercepts DeleteObjectPool calls, deletes the database records and
// deletes the object pool from every backing Gitaly node.
func DeleteObjectPoolHandler(rs datastore.RepositoryStore, conns Connections) grpc.StreamHandler {
return removeRepositoryHandler(rs, conns,
func(stream grpc.ServerStream) (*gitalypb.Repository, error) {
var req gitalypb.DeleteObjectPoolRequest
if err := stream.RecvMsg(&req); err != nil {
return nil, fmt.Errorf("receive request: %w", err)
}
repo, err := objectpoolsvc.ExtractPool(&req)
if err != nil {
return nil, err
}
if !stats.IsRailsPoolRepository(repo) {
return nil, structerr.NewInvalidArgument("%w", objectpool.ErrInvalidPoolDir)
}
return repo, nil
},
func(ctx context.Context, conn *grpc.ClientConn, rewritten *gitalypb.Repository) error {
_, err := gitalypb.NewObjectPoolServiceClient(conn).DeleteObjectPool(ctx, &gitalypb.DeleteObjectPoolRequest{
ObjectPool: &gitalypb.ObjectPool{
Repository: rewritten,
},
})
return err
},
func() proto.Message { return &gitalypb.DeleteObjectPoolResponse{} },
false,
)
}
|