github.com/pachyderm/pachyderm@v1.13.4/src/client/transaction.go (about) 1 package client 2 3 import ( 4 "context" 5 6 "github.com/pachyderm/pachyderm/src/client/admin" 7 "github.com/pachyderm/pachyderm/src/client/auth" 8 "github.com/pachyderm/pachyderm/src/client/debug" 9 "github.com/pachyderm/pachyderm/src/client/enterprise" 10 "github.com/pachyderm/pachyderm/src/client/pfs" 11 "github.com/pachyderm/pachyderm/src/client/pkg/grpcutil" 12 "github.com/pachyderm/pachyderm/src/client/pps" 13 "github.com/pachyderm/pachyderm/src/client/transaction" 14 "github.com/pachyderm/pachyderm/src/client/version/versionpb" 15 16 types "github.com/gogo/protobuf/types" 17 "github.com/pachyderm/pachyderm/src/client/pkg/errors" 18 "google.golang.org/grpc" 19 "google.golang.org/grpc/metadata" 20 ) 21 22 const transactionMetadataKey = "pach-transaction" 23 24 // WithTransaction (client-side) returns a new APIClient that will run supported 25 // write operations within the specified transaction. 26 func (c APIClient) WithTransaction(txn *transaction.Transaction) *APIClient { 27 md, _ := metadata.FromOutgoingContext(c.Ctx()) 28 md = md.Copy() 29 if txn != nil { 30 md.Set(transactionMetadataKey, txn.ID) 31 } else { 32 md.Set(transactionMetadataKey) 33 } 34 ctx := metadata.NewOutgoingContext(c.Ctx(), md) 35 return c.WithCtx(ctx) 36 } 37 38 // WithoutTransaction returns a new APIClient which will run all future operations 39 // outside of any active transaction 40 // Removing from both incoming and outgoing metadata is necessary because Ctx() merges them 41 func (c APIClient) WithoutTransaction() *APIClient { 42 ctx := c.Ctx() 43 incomingMD, _ := metadata.FromIncomingContext(ctx) 44 outgoingMD, _ := metadata.FromOutgoingContext(ctx) 45 newIn := make(metadata.MD) 46 newOut := make(metadata.MD) 47 for k, v := range incomingMD { 48 if k == transactionMetadataKey { 49 continue 50 } 51 newIn[k] = v 52 } 53 for k, v := range outgoingMD { 54 if k == transactionMetadataKey { 55 continue 56 } 57 newOut[k] = v 58 } 59 return c.WithCtx(metadata.NewIncomingContext(metadata.NewOutgoingContext(ctx, newOut), newIn)) 60 } 61 62 // GetTransaction (should be run from the server-side) loads the active 63 // transaction from the grpc metadata and returns the associated transaction 64 // object - or `nil` if no transaction is set. 65 func GetTransaction(ctx context.Context) (*transaction.Transaction, error) { 66 md, ok := metadata.FromIncomingContext(ctx) 67 if !ok { 68 return nil, errors.Errorf("request metadata could not be parsed from context") 69 } 70 71 txns := md.Get(transactionMetadataKey) 72 if len(txns) == 0 { 73 return nil, nil 74 } else if len(txns) > 1 { 75 return nil, errors.Errorf("multiple active transactions found in context") 76 } 77 return &transaction.Transaction{ID: txns[0]}, nil 78 } 79 80 // GetTransaction is a helper function to get the active transaction from the 81 // client's context metadata. 82 func (c APIClient) GetTransaction() (*transaction.Transaction, error) { 83 return GetTransaction(c.Ctx()) 84 } 85 86 // NewCommitResponse is a helper function to instantiate a TransactionResponse 87 // for a transaction item that returns a Commit ID. 88 func NewCommitResponse(commit *pfs.Commit) *transaction.TransactionResponse { 89 return &transaction.TransactionResponse{ 90 Commit: commit, 91 } 92 } 93 94 // ListTransaction is an RPC that fetches a list of all open transactions in the 95 // Pachyderm cluster. 96 func (c APIClient) ListTransaction() ([]*transaction.TransactionInfo, error) { 97 response, err := c.TransactionAPIClient.ListTransaction( 98 c.Ctx(), 99 &transaction.ListTransactionRequest{}, 100 ) 101 if err != nil { 102 return nil, grpcutil.ScrubGRPC(err) 103 } 104 return response.TransactionInfo, nil 105 } 106 107 // StartTransaction is an RPC that registers a new transaction with the 108 // Pachyderm cluster and returns the identifier of the new transaction. 109 func (c APIClient) StartTransaction() (*transaction.Transaction, error) { 110 response, err := c.TransactionAPIClient.StartTransaction( 111 c.Ctx(), 112 &transaction.StartTransactionRequest{}, 113 ) 114 if err != nil { 115 return nil, grpcutil.ScrubGRPC(err) 116 } 117 return response, nil 118 } 119 120 // FinishTransaction is an RPC that closes an existing transaction in the 121 // Pachyderm cluster and commits its changes to the persisted cluster metadata 122 // transactionally. 123 func (c APIClient) FinishTransaction(txn *transaction.Transaction) (*transaction.TransactionInfo, error) { 124 response, err := c.TransactionAPIClient.FinishTransaction( 125 c.Ctx(), 126 &transaction.FinishTransactionRequest{ 127 Transaction: txn, 128 }, 129 ) 130 if err != nil { 131 return nil, grpcutil.ScrubGRPC(err) 132 } 133 return response, nil 134 } 135 136 // DeleteTransaction is an RPC that aborts an existing transaction in the 137 // Pachyderm cluster and removes it from the cluster. 138 func (c APIClient) DeleteTransaction(txn *transaction.Transaction) error { 139 _, err := c.TransactionAPIClient.DeleteTransaction( 140 c.Ctx(), 141 &transaction.DeleteTransactionRequest{ 142 Transaction: txn, 143 }, 144 ) 145 return grpcutil.ScrubGRPC(err) 146 } 147 148 // InspectTransaction is an RPC that fetches the detailed information for an 149 // existing transaction in the Pachyderm cluster. 150 func (c APIClient) InspectTransaction(txn *transaction.Transaction) (*transaction.TransactionInfo, error) { 151 response, err := c.TransactionAPIClient.InspectTransaction( 152 c.Ctx(), 153 &transaction.InspectTransactionRequest{ 154 Transaction: txn, 155 }, 156 ) 157 if err != nil { 158 return nil, grpcutil.ScrubGRPC(err) 159 } 160 return response, nil 161 } 162 163 // ExecuteInTransaction executes a callback within a transaction. 164 // The callback should use the passed in APIClient. 165 // If the callback returns a nil error, then the transaction will be finished. 166 // If the callback returns a non-nil error, then the transaction will be deleted. 167 func (c APIClient) ExecuteInTransaction(f func(c *APIClient) error) (*transaction.TransactionInfo, error) { 168 txn, err := c.StartTransaction() 169 if err != nil { 170 return nil, err 171 } 172 if err := f(c.WithTransaction(txn)); err != nil { 173 // We ignore the delete error, because we are more interested in the error from the callback. 174 c.DeleteTransaction(txn) 175 return nil, err 176 } 177 return c.FinishTransaction(txn) 178 } 179 180 // TransactionBuilder presents the same interface as a pachyderm APIClient, but 181 // captures requests rather than sending to the server. If a request is not 182 // supported by the transaction system, it immediately errors. 183 type TransactionBuilder struct { 184 APIClient 185 186 parent *APIClient 187 188 requests []*transaction.TransactionRequest 189 } 190 191 type pfsBuilderClient struct { 192 tb *TransactionBuilder 193 } 194 195 type ppsBuilderClient struct { 196 tb *TransactionBuilder 197 } 198 199 type objectBuilderClient struct { 200 tb *TransactionBuilder 201 } 202 203 type authBuilderClient struct { 204 tb *TransactionBuilder 205 } 206 207 type versionBuilderClient struct { 208 tb *TransactionBuilder 209 } 210 211 type adminBuilderClient struct { 212 tb *TransactionBuilder 213 } 214 215 type transactionBuilderClient struct { 216 tb *TransactionBuilder 217 } 218 219 type debugBuilderClient struct { 220 tb *TransactionBuilder 221 } 222 223 type enterpriseBuilderClient struct { 224 tb *TransactionBuilder 225 } 226 227 func newPfsBuilderClient(tb *TransactionBuilder) pfs.APIClient { 228 return &pfsBuilderClient{tb: tb} 229 } 230 231 func newPpsBuilderClient(tb *TransactionBuilder) pps.APIClient { 232 return &ppsBuilderClient{tb: tb} 233 } 234 235 func newObjectBuilderClient(tb *TransactionBuilder) pfs.ObjectAPIClient { 236 return &objectBuilderClient{tb: tb} 237 } 238 239 func newAuthBuilderClient(tb *TransactionBuilder) auth.APIClient { 240 return &authBuilderClient{tb: tb} 241 } 242 243 func newEnterpriseBuilderClient(tb *TransactionBuilder) enterprise.APIClient { 244 return &enterpriseBuilderClient{tb: tb} 245 } 246 247 func newVersionBuilderClient(tb *TransactionBuilder) versionpb.APIClient { 248 return &versionBuilderClient{tb: tb} 249 } 250 251 func newAdminBuilderClient(tb *TransactionBuilder) admin.APIClient { 252 return &adminBuilderClient{tb: tb} 253 } 254 255 func newTransactionBuilderClient(tb *TransactionBuilder) transaction.APIClient { 256 return &transactionBuilderClient{tb: tb} 257 } 258 259 func newDebugBuilderClient(tb *TransactionBuilder) debug.DebugClient { 260 return &debugBuilderClient{tb: tb} 261 } 262 263 func newTransactionBuilder(parent *APIClient) *TransactionBuilder { 264 tb := &TransactionBuilder{parent: parent} 265 tb.PfsAPIClient = newPfsBuilderClient(tb) 266 tb.PpsAPIClient = newPpsBuilderClient(tb) 267 tb.ObjectAPIClient = newObjectBuilderClient(tb) 268 tb.AuthAPIClient = newAuthBuilderClient(tb) 269 tb.Enterprise = newEnterpriseBuilderClient(tb) 270 tb.VersionAPIClient = newVersionBuilderClient(tb) 271 tb.AdminAPIClient = newAdminBuilderClient(tb) 272 tb.TransactionAPIClient = newTransactionBuilderClient(tb) 273 tb.DebugClient = newDebugBuilderClient(tb) 274 return tb 275 } 276 277 // Close does not exist on a TransactionBuilder because it doesn't represent 278 // ownership of a connection to the API server. We need this to shadow the 279 // inherited Close, though. 280 func (tb *TransactionBuilder) Close() error { 281 return errors.Errorf("Close is not implemented on a TransactionBuilder instance") 282 } 283 284 // GetAddress should not exist on a TransactionBuilder because it doesn't represent 285 // ownership of a connection to the API server, but it also doesn't return an error, 286 // so we just passthrough to the parent client's implementation. 287 func (tb *TransactionBuilder) GetAddress() string { 288 return tb.parent.GetAddress() 289 } 290 291 // RunBatchInTransaction will execute a batch of API calls in a single round-trip 292 // transactionally. The callback is used to build the request, which is executed 293 // when the callback returns. 294 func (c APIClient) RunBatchInTransaction(cb func(builder *TransactionBuilder) error) (*transaction.TransactionInfo, error) { 295 tb := newTransactionBuilder(&c) 296 if err := cb(tb); err != nil { 297 return nil, err 298 } 299 300 return c.BatchTransaction(c.Ctx(), &transaction.BatchTransactionRequest{Requests: tb.requests}) 301 } 302 303 func (c *pfsBuilderClient) CreateRepo(ctx context.Context, req *pfs.CreateRepoRequest, opts ...grpc.CallOption) (*types.Empty, error) { 304 c.tb.requests = append(c.tb.requests, &transaction.TransactionRequest{CreateRepo: req}) 305 return nil, nil 306 } 307 func (c *pfsBuilderClient) DeleteRepo(ctx context.Context, req *pfs.DeleteRepoRequest, opts ...grpc.CallOption) (*types.Empty, error) { 308 c.tb.requests = append(c.tb.requests, &transaction.TransactionRequest{DeleteRepo: req}) 309 return nil, nil 310 } 311 func (c *pfsBuilderClient) StartCommit(ctx context.Context, req *pfs.StartCommitRequest, opts ...grpc.CallOption) (*pfs.Commit, error) { 312 // Note that since we are batching requests (no extra round-trips), we do not 313 // have the commit id to return here. If you need an operation that relies 314 // upon the commit id, use ExecuteInTransaction instead. 315 c.tb.requests = append(c.tb.requests, &transaction.TransactionRequest{StartCommit: req}) 316 return nil, nil 317 } 318 func (c *pfsBuilderClient) FinishCommit(ctx context.Context, req *pfs.FinishCommitRequest, opts ...grpc.CallOption) (*types.Empty, error) { 319 c.tb.requests = append(c.tb.requests, &transaction.TransactionRequest{FinishCommit: req}) 320 return nil, nil 321 } 322 func (c *pfsBuilderClient) DeleteCommit(ctx context.Context, req *pfs.DeleteCommitRequest, opts ...grpc.CallOption) (*types.Empty, error) { 323 c.tb.requests = append(c.tb.requests, &transaction.TransactionRequest{DeleteCommit: req}) 324 return nil, nil 325 } 326 func (c *pfsBuilderClient) CreateBranch(ctx context.Context, req *pfs.CreateBranchRequest, opts ...grpc.CallOption) (*types.Empty, error) { 327 c.tb.requests = append(c.tb.requests, &transaction.TransactionRequest{CreateBranch: req}) 328 return nil, nil 329 } 330 func (c *pfsBuilderClient) DeleteBranch(ctx context.Context, req *pfs.DeleteBranchRequest, opts ...grpc.CallOption) (*types.Empty, error) { 331 c.tb.requests = append(c.tb.requests, &transaction.TransactionRequest{DeleteBranch: req}) 332 return nil, nil 333 } 334 func (c *ppsBuilderClient) UpdateJobState(ctx context.Context, req *pps.UpdateJobStateRequest, opts ...grpc.CallOption) (*types.Empty, error) { 335 c.tb.requests = append(c.tb.requests, &transaction.TransactionRequest{UpdateJobState: req}) 336 return nil, nil 337 } 338 339 // Boilerplate for making unsupported API requests error when used on a TransactionBuilder 340 func unsupportedError(name string) error { 341 return errors.Errorf("the '%s' API call is not supported in transactions", name) 342 } 343 344 func (c *pfsBuilderClient) InspectRepo(ctx context.Context, req *pfs.InspectRepoRequest, opts ...grpc.CallOption) (*pfs.RepoInfo, error) { 345 return nil, unsupportedError("InspectRepo") 346 } 347 func (c *pfsBuilderClient) ListRepo(ctx context.Context, req *pfs.ListRepoRequest, opts ...grpc.CallOption) (*pfs.ListRepoResponse, error) { 348 return nil, unsupportedError("ListRepo") 349 } 350 func (c *pfsBuilderClient) InspectCommit(ctx context.Context, req *pfs.InspectCommitRequest, opts ...grpc.CallOption) (*pfs.CommitInfo, error) { 351 return nil, unsupportedError("InspectCommit") 352 } 353 func (c *pfsBuilderClient) ListCommit(ctx context.Context, req *pfs.ListCommitRequest, opts ...grpc.CallOption) (*pfs.CommitInfos, error) { 354 return nil, unsupportedError("ListCommit") 355 } 356 func (c *pfsBuilderClient) ListCommitStream(ctx context.Context, req *pfs.ListCommitRequest, opts ...grpc.CallOption) (pfs.API_ListCommitStreamClient, error) { 357 return nil, unsupportedError("ListCommitStream") 358 } 359 func (c *pfsBuilderClient) FlushCommit(ctx context.Context, req *pfs.FlushCommitRequest, opts ...grpc.CallOption) (pfs.API_FlushCommitClient, error) { 360 return nil, unsupportedError("FlushCommit") 361 } 362 func (c *pfsBuilderClient) SubscribeCommit(ctx context.Context, req *pfs.SubscribeCommitRequest, opts ...grpc.CallOption) (pfs.API_SubscribeCommitClient, error) { 363 return nil, unsupportedError("SubscribeCommit") 364 } 365 func (c *pfsBuilderClient) BuildCommit(ctx context.Context, req *pfs.BuildCommitRequest, opts ...grpc.CallOption) (*pfs.Commit, error) { 366 return nil, unsupportedError("BuildCommit") 367 } 368 func (c *pfsBuilderClient) InspectBranch(ctx context.Context, req *pfs.InspectBranchRequest, opts ...grpc.CallOption) (*pfs.BranchInfo, error) { 369 return nil, unsupportedError("InspectBranch") 370 } 371 func (c *pfsBuilderClient) ListBranch(ctx context.Context, req *pfs.ListBranchRequest, opts ...grpc.CallOption) (*pfs.BranchInfos, error) { 372 return nil, unsupportedError("ListBranch") 373 } 374 func (c *pfsBuilderClient) PutFile(ctx context.Context, opts ...grpc.CallOption) (pfs.API_PutFileClient, error) { 375 return nil, unsupportedError("PutFile") 376 } 377 func (c *pfsBuilderClient) CopyFile(ctx context.Context, req *pfs.CopyFileRequest, opts ...grpc.CallOption) (*types.Empty, error) { 378 return nil, unsupportedError("CopyFile") 379 } 380 func (c *pfsBuilderClient) GetFile(ctx context.Context, req *pfs.GetFileRequest, opts ...grpc.CallOption) (pfs.API_GetFileClient, error) { 381 return nil, unsupportedError("GetFile") 382 } 383 func (c *pfsBuilderClient) InspectFile(ctx context.Context, req *pfs.InspectFileRequest, opts ...grpc.CallOption) (*pfs.FileInfo, error) { 384 return nil, unsupportedError("InspectFile") 385 } 386 func (c *pfsBuilderClient) ListFile(ctx context.Context, req *pfs.ListFileRequest, opts ...grpc.CallOption) (*pfs.FileInfos, error) { 387 return nil, unsupportedError("ListFile") 388 } 389 func (c *pfsBuilderClient) ListFileStream(ctx context.Context, req *pfs.ListFileRequest, opts ...grpc.CallOption) (pfs.API_ListFileStreamClient, error) { 390 return nil, unsupportedError("ListFileStream") 391 } 392 func (c *pfsBuilderClient) WalkFile(ctx context.Context, req *pfs.WalkFileRequest, opts ...grpc.CallOption) (pfs.API_WalkFileClient, error) { 393 return nil, unsupportedError("WalkFile") 394 } 395 func (c *pfsBuilderClient) GlobFile(ctx context.Context, req *pfs.GlobFileRequest, opts ...grpc.CallOption) (*pfs.FileInfos, error) { 396 return nil, unsupportedError("GlobFile") 397 } 398 func (c *pfsBuilderClient) GlobFileStream(ctx context.Context, req *pfs.GlobFileRequest, opts ...grpc.CallOption) (pfs.API_GlobFileStreamClient, error) { 399 return nil, unsupportedError("GlobFileStream") 400 } 401 func (c *pfsBuilderClient) DiffFile(ctx context.Context, req *pfs.DiffFileRequest, opts ...grpc.CallOption) (*pfs.DiffFileResponse, error) { 402 return nil, unsupportedError("DiffFile") 403 } 404 func (c *pfsBuilderClient) DeleteFile(ctx context.Context, req *pfs.DeleteFileRequest, opts ...grpc.CallOption) (*types.Empty, error) { 405 return nil, unsupportedError("DeleteFile") 406 } 407 func (c *pfsBuilderClient) DeleteAll(ctx context.Context, req *types.Empty, opts ...grpc.CallOption) (*types.Empty, error) { 408 return nil, unsupportedError("DeleteAll") 409 } 410 func (c *pfsBuilderClient) Fsck(ctx context.Context, req *pfs.FsckRequest, opts ...grpc.CallOption) (pfs.API_FsckClient, error) { 411 return nil, unsupportedError("Fsck") 412 } 413 func (c *pfsBuilderClient) FileOperationV2(ctx context.Context, opts ...grpc.CallOption) (pfs.API_FileOperationV2Client, error) { 414 return nil, unsupportedError("FileOperationV2") 415 } 416 func (c *pfsBuilderClient) GetTarV2(ctx context.Context, req *pfs.GetTarRequestV2, opts ...grpc.CallOption) (pfs.API_GetTarV2Client, error) { 417 return nil, unsupportedError("GetTarV2") 418 } 419 func (c *pfsBuilderClient) DiffFileV2(ctx context.Context, req *pfs.DiffFileRequest, opts ...grpc.CallOption) (pfs.API_DiffFileV2Client, error) { 420 return nil, unsupportedError("DiffFileV2") 421 } 422 func (c *pfsBuilderClient) ClearCommitV2(ctx context.Context, req *pfs.ClearCommitRequestV2, opts ...grpc.CallOption) (*types.Empty, error) { 423 return nil, unsupportedError("ClearCommitV2") 424 } 425 func (c *pfsBuilderClient) CreateTmpFileSet(ctx context.Context, opts ...grpc.CallOption) (pfs.API_CreateTmpFileSetClient, error) { 426 return nil, unsupportedError("CreateTmpFileSet") 427 } 428 func (c *pfsBuilderClient) RenewTmpFileSet(ctx context.Context, req *pfs.RenewTmpFileSetRequest, opts ...grpc.CallOption) (*types.Empty, error) { 429 return nil, unsupportedError("RenewTmpFileSet") 430 } 431 432 func (c *objectBuilderClient) PutObject(ctx context.Context, opts ...grpc.CallOption) (pfs.ObjectAPI_PutObjectClient, error) { 433 return nil, unsupportedError("PutObject") 434 } 435 func (c *objectBuilderClient) PutObjectSplit(ctx context.Context, opts ...grpc.CallOption) (pfs.ObjectAPI_PutObjectSplitClient, error) { 436 return nil, unsupportedError("PutObjectSplit") 437 } 438 func (c *objectBuilderClient) PutObjects(ctx context.Context, opts ...grpc.CallOption) (pfs.ObjectAPI_PutObjectsClient, error) { 439 return nil, unsupportedError("PutObjects") 440 } 441 func (c *objectBuilderClient) CreateObject(ctx context.Context, req *pfs.CreateObjectRequest, opts ...grpc.CallOption) (*types.Empty, error) { 442 return nil, unsupportedError("CreateObject") 443 } 444 func (c *objectBuilderClient) GetObject(ctx context.Context, req *pfs.Object, opts ...grpc.CallOption) (pfs.ObjectAPI_GetObjectClient, error) { 445 return nil, unsupportedError("GetObject") 446 } 447 func (c *objectBuilderClient) GetObjects(ctx context.Context, req *pfs.GetObjectsRequest, opts ...grpc.CallOption) (pfs.ObjectAPI_GetObjectsClient, error) { 448 return nil, unsupportedError("GetObjects") 449 } 450 func (c *objectBuilderClient) PutBlock(ctx context.Context, opts ...grpc.CallOption) (pfs.ObjectAPI_PutBlockClient, error) { 451 return nil, unsupportedError("PutBlock") 452 } 453 func (c *objectBuilderClient) GetBlock(ctx context.Context, req *pfs.GetBlockRequest, opts ...grpc.CallOption) (pfs.ObjectAPI_GetBlockClient, error) { 454 return nil, unsupportedError("GetBlock") 455 } 456 func (c *objectBuilderClient) GetBlocks(ctx context.Context, req *pfs.GetBlocksRequest, opts ...grpc.CallOption) (pfs.ObjectAPI_GetBlocksClient, error) { 457 return nil, unsupportedError("GetBlocks") 458 } 459 func (c *objectBuilderClient) ListBlock(ctx context.Context, req *pfs.ListBlockRequest, opts ...grpc.CallOption) (pfs.ObjectAPI_ListBlockClient, error) { 460 return nil, unsupportedError("ListBlock") 461 } 462 func (c *objectBuilderClient) TagObject(ctx context.Context, req *pfs.TagObjectRequest, opts ...grpc.CallOption) (*types.Empty, error) { 463 return nil, unsupportedError("TagObject") 464 } 465 func (c *objectBuilderClient) InspectObject(ctx context.Context, req *pfs.Object, opts ...grpc.CallOption) (*pfs.ObjectInfo, error) { 466 return nil, unsupportedError("InspectObject") 467 } 468 func (c *objectBuilderClient) CheckObject(ctx context.Context, req *pfs.CheckObjectRequest, opts ...grpc.CallOption) (*pfs.CheckObjectResponse, error) { 469 return nil, unsupportedError("CheckObject") 470 } 471 func (c *objectBuilderClient) ListObjects(ctx context.Context, req *pfs.ListObjectsRequest, opts ...grpc.CallOption) (pfs.ObjectAPI_ListObjectsClient, error) { 472 return nil, unsupportedError("ListObjects") 473 } 474 func (c *objectBuilderClient) DeleteObjects(ctx context.Context, req *pfs.DeleteObjectsRequest, opts ...grpc.CallOption) (*pfs.DeleteObjectsResponse, error) { 475 return nil, unsupportedError("DeleteObjects") 476 } 477 func (c *objectBuilderClient) GetTag(ctx context.Context, req *pfs.Tag, opts ...grpc.CallOption) (pfs.ObjectAPI_GetTagClient, error) { 478 return nil, unsupportedError("GetTag") 479 } 480 func (c *objectBuilderClient) InspectTag(ctx context.Context, req *pfs.Tag, opts ...grpc.CallOption) (*pfs.ObjectInfo, error) { 481 return nil, unsupportedError("InspectTag") 482 } 483 func (c *objectBuilderClient) ListTags(ctx context.Context, req *pfs.ListTagsRequest, opts ...grpc.CallOption) (pfs.ObjectAPI_ListTagsClient, error) { 484 return nil, unsupportedError("ListTags") 485 } 486 func (c *objectBuilderClient) DeleteTags(ctx context.Context, req *pfs.DeleteTagsRequest, opts ...grpc.CallOption) (*pfs.DeleteTagsResponse, error) { 487 return nil, unsupportedError("DeleteTags") 488 } 489 func (c *objectBuilderClient) Compact(ctx context.Context, req *types.Empty, opts ...grpc.CallOption) (*types.Empty, error) { 490 return nil, unsupportedError("Compact") 491 } 492 func (c *objectBuilderClient) PutObjDirect(ctx context.Context, opts ...grpc.CallOption) (pfs.ObjectAPI_PutObjDirectClient, error) { 493 return nil, unsupportedError("PutObjDirect") 494 } 495 func (c *objectBuilderClient) GetObjDirect(ctx context.Context, req *pfs.GetObjDirectRequest, opts ...grpc.CallOption) (pfs.ObjectAPI_GetObjDirectClient, error) { 496 return nil, unsupportedError("GetObjDirect") 497 } 498 func (c *objectBuilderClient) DeleteObjDirect(ctx context.Context, req *pfs.DeleteObjDirectRequest, opts ...grpc.CallOption) (*types.Empty, error) { 499 return nil, unsupportedError("DeleteObjDirect") 500 } 501 502 func (c *ppsBuilderClient) CreateJob(ctx context.Context, req *pps.CreateJobRequest, opts ...grpc.CallOption) (*pps.Job, error) { 503 return nil, unsupportedError("CreateJob") 504 } 505 func (c *ppsBuilderClient) InspectJob(ctx context.Context, req *pps.InspectJobRequest, opts ...grpc.CallOption) (*pps.JobInfo, error) { 506 return nil, unsupportedError("InspectJob") 507 } 508 func (c *ppsBuilderClient) ListJob(ctx context.Context, req *pps.ListJobRequest, opts ...grpc.CallOption) (*pps.JobInfos, error) { 509 return nil, unsupportedError("ListJob") 510 } 511 func (c *ppsBuilderClient) ListJobStream(ctx context.Context, req *pps.ListJobRequest, opts ...grpc.CallOption) (pps.API_ListJobStreamClient, error) { 512 return nil, unsupportedError("ListJobStream") 513 } 514 func (c *ppsBuilderClient) FlushJob(ctx context.Context, req *pps.FlushJobRequest, opts ...grpc.CallOption) (pps.API_FlushJobClient, error) { 515 return nil, unsupportedError("FlushJob") 516 } 517 func (c *ppsBuilderClient) DeleteJob(ctx context.Context, req *pps.DeleteJobRequest, opts ...grpc.CallOption) (*types.Empty, error) { 518 return nil, unsupportedError("DeleteJob") 519 } 520 func (c *ppsBuilderClient) StopJob(ctx context.Context, req *pps.StopJobRequest, opts ...grpc.CallOption) (*types.Empty, error) { 521 return nil, unsupportedError("StopJob") 522 } 523 func (c *ppsBuilderClient) InspectDatum(ctx context.Context, req *pps.InspectDatumRequest, opts ...grpc.CallOption) (*pps.DatumInfo, error) { 524 return nil, unsupportedError("InspectDatum") 525 } 526 func (c *ppsBuilderClient) ListDatum(ctx context.Context, req *pps.ListDatumRequest, opts ...grpc.CallOption) (*pps.ListDatumResponse, error) { 527 return nil, unsupportedError("ListDatum") 528 } 529 func (c *ppsBuilderClient) ListDatumStream(ctx context.Context, req *pps.ListDatumRequest, opts ...grpc.CallOption) (pps.API_ListDatumStreamClient, error) { 530 return nil, unsupportedError("ListDatumStream") 531 } 532 func (c *ppsBuilderClient) RestartDatum(ctx context.Context, req *pps.RestartDatumRequest, opts ...grpc.CallOption) (*types.Empty, error) { 533 return nil, unsupportedError("RestartDatum") 534 } 535 func (c *ppsBuilderClient) CreatePipeline(ctx context.Context, req *pps.CreatePipelineRequest, opts ...grpc.CallOption) (*types.Empty, error) { 536 return nil, unsupportedError("CreatePipeline") 537 } 538 func (c *ppsBuilderClient) InspectPipeline(ctx context.Context, req *pps.InspectPipelineRequest, opts ...grpc.CallOption) (*pps.PipelineInfo, error) { 539 return nil, unsupportedError("InspectPipeline") 540 } 541 func (c *ppsBuilderClient) ListPipeline(ctx context.Context, req *pps.ListPipelineRequest, opts ...grpc.CallOption) (*pps.PipelineInfos, error) { 542 return nil, unsupportedError("ListPipeline") 543 } 544 func (c *ppsBuilderClient) DeletePipeline(ctx context.Context, req *pps.DeletePipelineRequest, opts ...grpc.CallOption) (*types.Empty, error) { 545 return nil, unsupportedError("DeletePipeline") 546 } 547 func (c *ppsBuilderClient) StartPipeline(ctx context.Context, req *pps.StartPipelineRequest, opts ...grpc.CallOption) (*types.Empty, error) { 548 return nil, unsupportedError("StartPipeline") 549 } 550 func (c *ppsBuilderClient) StopPipeline(ctx context.Context, req *pps.StopPipelineRequest, opts ...grpc.CallOption) (*types.Empty, error) { 551 return nil, unsupportedError("StopPipeline") 552 } 553 func (c *ppsBuilderClient) RunPipeline(ctx context.Context, req *pps.RunPipelineRequest, opts ...grpc.CallOption) (*types.Empty, error) { 554 return nil, unsupportedError("RunPipeline") 555 } 556 func (c *ppsBuilderClient) DeleteAll(ctx context.Context, req *types.Empty, opts ...grpc.CallOption) (*types.Empty, error) { 557 return nil, unsupportedError("DeleteAll") 558 } 559 func (c *ppsBuilderClient) GetLogs(ctx context.Context, req *pps.GetLogsRequest, opts ...grpc.CallOption) (pps.API_GetLogsClient, error) { 560 return nil, unsupportedError("GetLogs") 561 } 562 func (c *ppsBuilderClient) GarbageCollect(ctx context.Context, req *pps.GarbageCollectRequest, opts ...grpc.CallOption) (*pps.GarbageCollectResponse, error) { 563 return nil, unsupportedError("GarbageCollect") 564 } 565 func (c *ppsBuilderClient) ActivateAuth(ctx context.Context, req *pps.ActivateAuthRequest, opts ...grpc.CallOption) (*pps.ActivateAuthResponse, error) { 566 return nil, unsupportedError("ActivateAuth") 567 } 568 func (c *ppsBuilderClient) RunCron(ctx context.Context, req *pps.RunCronRequest, opts ...grpc.CallOption) (*types.Empty, error) { 569 return nil, unsupportedError("RunCron") 570 } 571 func (c *ppsBuilderClient) CreateSecret(ctx context.Context, req *pps.CreateSecretRequest, opts ...grpc.CallOption) (*types.Empty, error) { 572 return nil, unsupportedError("CreateSecret") 573 } 574 func (c *ppsBuilderClient) DeleteSecret(ctx context.Context, req *pps.DeleteSecretRequest, opts ...grpc.CallOption) (*types.Empty, error) { 575 return nil, unsupportedError("DeleteSecret") 576 } 577 func (c *ppsBuilderClient) InspectSecret(ctx context.Context, req *pps.InspectSecretRequest, opt ...grpc.CallOption) (*pps.SecretInfo, error) { 578 return nil, unsupportedError("InspectSecret") 579 } 580 func (c *ppsBuilderClient) ListSecret(ctx context.Context, in *types.Empty, opt ...grpc.CallOption) (*pps.SecretInfos, error) { 581 return nil, unsupportedError("ListSecret") 582 } 583 584 func (c *authBuilderClient) Activate(ctx context.Context, req *auth.ActivateRequest, opts ...grpc.CallOption) (*auth.ActivateResponse, error) { 585 return nil, unsupportedError("Activate") 586 } 587 func (c *authBuilderClient) Deactivate(ctx context.Context, req *auth.DeactivateRequest, opts ...grpc.CallOption) (*auth.DeactivateResponse, error) { 588 return nil, unsupportedError("Deactivate") 589 } 590 func (c *authBuilderClient) GetConfiguration(ctx context.Context, req *auth.GetConfigurationRequest, opts ...grpc.CallOption) (*auth.GetConfigurationResponse, error) { 591 return nil, unsupportedError("GetConfiguration") 592 } 593 func (c *authBuilderClient) SetConfiguration(ctx context.Context, req *auth.SetConfigurationRequest, opts ...grpc.CallOption) (*auth.SetConfigurationResponse, error) { 594 return nil, unsupportedError("SetConfiguration") 595 } 596 func (c *authBuilderClient) GetAdmins(ctx context.Context, req *auth.GetAdminsRequest, opts ...grpc.CallOption) (*auth.GetAdminsResponse, error) { 597 return nil, unsupportedError("GetAdmins") 598 } 599 func (c *authBuilderClient) GetClusterRoleBindings(ctx context.Context, req *auth.GetClusterRoleBindingsRequest, opts ...grpc.CallOption) (*auth.GetClusterRoleBindingsResponse, error) { 600 return nil, unsupportedError("GetClusterRoleBindings") 601 } 602 func (c *authBuilderClient) ModifyAdmins(ctx context.Context, req *auth.ModifyAdminsRequest, opts ...grpc.CallOption) (*auth.ModifyAdminsResponse, error) { 603 return nil, unsupportedError("ModifyAdmins") 604 } 605 func (c *authBuilderClient) ModifyClusterRoleBinding(ctx context.Context, req *auth.ModifyClusterRoleBindingRequest, opts ...grpc.CallOption) (*auth.ModifyClusterRoleBindingResponse, error) { 606 return nil, unsupportedError("ModifyClusterRoleBinding") 607 } 608 func (c *authBuilderClient) Authenticate(ctx context.Context, req *auth.AuthenticateRequest, opts ...grpc.CallOption) (*auth.AuthenticateResponse, error) { 609 return nil, unsupportedError("Authenticate") 610 } 611 func (c *authBuilderClient) Authorize(ctx context.Context, req *auth.AuthorizeRequest, opts ...grpc.CallOption) (*auth.AuthorizeResponse, error) { 612 return nil, unsupportedError("Authorize") 613 } 614 func (c *authBuilderClient) WhoAmI(ctx context.Context, req *auth.WhoAmIRequest, opts ...grpc.CallOption) (*auth.WhoAmIResponse, error) { 615 return nil, unsupportedError("WhoAmI") 616 } 617 func (c *authBuilderClient) GetScope(ctx context.Context, req *auth.GetScopeRequest, opts ...grpc.CallOption) (*auth.GetScopeResponse, error) { 618 return nil, unsupportedError("GetScope") 619 } 620 func (c *authBuilderClient) SetScope(ctx context.Context, req *auth.SetScopeRequest, opts ...grpc.CallOption) (*auth.SetScopeResponse, error) { 621 return nil, unsupportedError("SetScope") 622 } 623 func (c *authBuilderClient) GetACL(ctx context.Context, req *auth.GetACLRequest, opts ...grpc.CallOption) (*auth.GetACLResponse, error) { 624 return nil, unsupportedError("GetACL") 625 } 626 func (c *authBuilderClient) SetACL(ctx context.Context, req *auth.SetACLRequest, opts ...grpc.CallOption) (*auth.SetACLResponse, error) { 627 return nil, unsupportedError("SetACL") 628 } 629 func (c *authBuilderClient) GetAuthToken(ctx context.Context, req *auth.GetAuthTokenRequest, opts ...grpc.CallOption) (*auth.GetAuthTokenResponse, error) { 630 return nil, unsupportedError("GetAuthToken") 631 } 632 func (c *authBuilderClient) GetOIDCLogin(ctx context.Context, req *auth.GetOIDCLoginRequest, opts ...grpc.CallOption) (*auth.GetOIDCLoginResponse, error) { 633 return nil, unsupportedError("GetOIDCLogin") 634 } 635 func (c *authBuilderClient) ExtendAuthToken(ctx context.Context, req *auth.ExtendAuthTokenRequest, opts ...grpc.CallOption) (*auth.ExtendAuthTokenResponse, error) { 636 return nil, unsupportedError("ExtendAuthToken") 637 } 638 func (c *authBuilderClient) RevokeAuthToken(ctx context.Context, req *auth.RevokeAuthTokenRequest, opts ...grpc.CallOption) (*auth.RevokeAuthTokenResponse, error) { 639 return nil, unsupportedError("RevokeAuthToken") 640 } 641 func (c *authBuilderClient) SetGroupsForUser(ctx context.Context, req *auth.SetGroupsForUserRequest, opts ...grpc.CallOption) (*auth.SetGroupsForUserResponse, error) { 642 return nil, unsupportedError("SetGroupsForUser") 643 } 644 func (c *authBuilderClient) ModifyMembers(ctx context.Context, req *auth.ModifyMembersRequest, opts ...grpc.CallOption) (*auth.ModifyMembersResponse, error) { 645 return nil, unsupportedError("ModifyMembers") 646 } 647 func (c *authBuilderClient) GetGroups(ctx context.Context, req *auth.GetGroupsRequest, opts ...grpc.CallOption) (*auth.GetGroupsResponse, error) { 648 return nil, unsupportedError("GetGroups") 649 } 650 func (c *authBuilderClient) GetUsers(ctx context.Context, req *auth.GetUsersRequest, opts ...grpc.CallOption) (*auth.GetUsersResponse, error) { 651 return nil, unsupportedError("GetUsers") 652 } 653 func (c *authBuilderClient) GetOneTimePassword(ctx context.Context, req *auth.GetOneTimePasswordRequest, opts ...grpc.CallOption) (*auth.GetOneTimePasswordResponse, error) { 654 return nil, unsupportedError("GetOneTimePassword") 655 } 656 func (c *authBuilderClient) ExtractAuthTokens(ctx context.Context, req *auth.ExtractAuthTokensRequest, opts ...grpc.CallOption) (*auth.ExtractAuthTokensResponse, error) { 657 return nil, unsupportedError("ExtractAuthTokens") 658 } 659 func (c *authBuilderClient) RestoreAuthToken(ctx context.Context, req *auth.RestoreAuthTokenRequest, opts ...grpc.CallOption) (*auth.RestoreAuthTokenResponse, error) { 660 return nil, unsupportedError("RestoreAuthToken") 661 } 662 663 func (c *enterpriseBuilderClient) Activate(ctx context.Context, req *enterprise.ActivateRequest, opts ...grpc.CallOption) (*enterprise.ActivateResponse, error) { 664 return nil, unsupportedError("Activate") 665 } 666 func (c *enterpriseBuilderClient) GetState(ctx context.Context, req *enterprise.GetStateRequest, opts ...grpc.CallOption) (*enterprise.GetStateResponse, error) { 667 return nil, unsupportedError("GetState") 668 } 669 func (c *enterpriseBuilderClient) GetActivationCode(ctx context.Context, req *enterprise.GetActivationCodeRequest, opts ...grpc.CallOption) (*enterprise.GetActivationCodeResponse, error) { 670 return nil, unsupportedError("GetActivationCode") 671 } 672 func (c *enterpriseBuilderClient) Deactivate(ctx context.Context, req *enterprise.DeactivateRequest, opts ...grpc.CallOption) (*enterprise.DeactivateResponse, error) { 673 return nil, unsupportedError("Deactivate") 674 } 675 676 func (c *versionBuilderClient) GetVersion(ctx context.Context, req *types.Empty, opts ...grpc.CallOption) (*versionpb.Version, error) { 677 return nil, unsupportedError("GetVersion") 678 } 679 680 func (c *adminBuilderClient) Extract(ctx context.Context, req *admin.ExtractRequest, opts ...grpc.CallOption) (admin.API_ExtractClient, error) { 681 return nil, unsupportedError("Extract") 682 } 683 func (c *adminBuilderClient) ExtractPipeline(ctx context.Context, req *admin.ExtractPipelineRequest, opts ...grpc.CallOption) (*admin.Op, error) { 684 return nil, unsupportedError("ExtractPipeline") 685 } 686 func (c *adminBuilderClient) Restore(ctx context.Context, opts ...grpc.CallOption) (admin.API_RestoreClient, error) { 687 return nil, unsupportedError("Restore") 688 } 689 func (c *adminBuilderClient) InspectCluster(ctx context.Context, req *types.Empty, opts ...grpc.CallOption) (*admin.ClusterInfo, error) { 690 return nil, unsupportedError("InspectCluster") 691 } 692 693 func (c *transactionBuilderClient) BatchTransaction(ctx context.Context, req *transaction.BatchTransactionRequest, opts ...grpc.CallOption) (*transaction.TransactionInfo, error) { 694 return nil, unsupportedError("BatchTransaction") 695 } 696 func (c *transactionBuilderClient) StartTransaction(ctx context.Context, req *transaction.StartTransactionRequest, opts ...grpc.CallOption) (*transaction.Transaction, error) { 697 return nil, unsupportedError("StartTransaction") 698 } 699 func (c *transactionBuilderClient) InspectTransaction(ctx context.Context, req *transaction.InspectTransactionRequest, opts ...grpc.CallOption) (*transaction.TransactionInfo, error) { 700 return nil, unsupportedError("InspectTransaction") 701 } 702 func (c *transactionBuilderClient) DeleteTransaction(ctx context.Context, req *transaction.DeleteTransactionRequest, opts ...grpc.CallOption) (*types.Empty, error) { 703 return nil, unsupportedError("DeleteTransaction") 704 } 705 func (c *transactionBuilderClient) ListTransaction(ctx context.Context, req *transaction.ListTransactionRequest, opts ...grpc.CallOption) (*transaction.TransactionInfos, error) { 706 return nil, unsupportedError("ListTransaction") 707 } 708 func (c *transactionBuilderClient) FinishTransaction(ctx context.Context, req *transaction.FinishTransactionRequest, opts ...grpc.CallOption) (*transaction.TransactionInfo, error) { 709 return nil, unsupportedError("FinishTransaction") 710 } 711 func (c *transactionBuilderClient) DeleteAll(ctx context.Context, req *transaction.DeleteAllRequest, opts ...grpc.CallOption) (*types.Empty, error) { 712 return nil, unsupportedError("DeleteAll") 713 } 714 715 func (c *debugBuilderClient) Profile(ctx context.Context, req *debug.ProfileRequest, opts ...grpc.CallOption) (debug.Debug_ProfileClient, error) { 716 return nil, unsupportedError("Profile") 717 } 718 func (c *debugBuilderClient) Binary(ctx context.Context, req *debug.BinaryRequest, opts ...grpc.CallOption) (debug.Debug_BinaryClient, error) { 719 return nil, unsupportedError("Binary") 720 } 721 func (c *debugBuilderClient) Dump(ctx context.Context, req *debug.DumpRequest, opts ...grpc.CallOption) (debug.Debug_DumpClient, error) { 722 return nil, unsupportedError("Dump") 723 }