github.com/pachyderm/pachyderm@v1.13.4/src/client/admin/v1_10/pfs/pfs.proto (about) 1 syntax = "proto3"; 2 3 package pfs_1_10; 4 option go_package = "github.com/pachyderm/pachyderm/src/client/admin/v1_10/pfs"; 5 6 import "google/protobuf/empty.proto"; 7 import "google/protobuf/timestamp.proto"; 8 import "google/protobuf/wrappers.proto"; 9 10 import "gogoproto/gogo.proto"; 11 12 import "client/admin/v1_10/auth/auth.proto"; 13 14 //// PFS Data structures (stored in etcd) 15 16 message Repo { 17 string name = 1; 18 } 19 20 message Branch { 21 Repo repo = 1; 22 string name = 2; 23 } 24 25 message BranchInfo { 26 Branch branch = 4; 27 Commit head = 2; 28 repeated Branch provenance = 3; 29 repeated Branch subvenance = 5; 30 repeated Branch direct_provenance = 6; 31 32 // Deprecated field left for backward compatibility. 33 string name = 1; 34 } 35 36 message BranchInfos { 37 repeated BranchInfo branch_info = 1; 38 } 39 40 message File { 41 Commit commit = 1; 42 string path = 2; 43 } 44 45 message Block { 46 string hash = 1; 47 } 48 49 message Object { 50 string hash = 1; 51 } 52 53 message Tag { 54 string name = 1; 55 } 56 57 // RepoInfo is the main data structure representing a Repo in etcd 58 message RepoInfo { 59 reserved 4; 60 Repo repo = 1; 61 google.protobuf.Timestamp created = 2; 62 uint64 size_bytes = 3; 63 string description = 5; 64 repeated Branch branches = 7; 65 66 // Set by ListRepo and InspectRepo if Pachyderm's auth system is active, but 67 // not stored in etcd. To set a user's auth scope for a repo, use the 68 // Pachyderm Auth API (in src/client/auth/auth.proto) 69 RepoAuthInfo auth_info = 6; 70 } 71 72 // RepoAuthInfo includes the caller's access scope for a repo, and is returned 73 // by ListRepo and InspectRepo but not persisted in etcd. It's used by the 74 // Pachyderm dashboard to render repo access appropriately. To set a user's auth 75 // scope for a repo, use the Pachyderm Auth API (in src/client/auth/auth.proto) 76 message RepoAuthInfo { 77 // The callers access level to the relevant repo (e.g. may be OWNER even if 78 // the user isn't an OWNER of the repo, if they're an admin for the cluster) 79 auth_1_10.Scope access_level = 1; 80 } 81 82 // These are the different places where a commit may be originated from 83 enum OriginKind { 84 USER = 0; 85 AUTO = 1; 86 FSCK = 2; 87 } 88 89 message CommitOrigin { 90 OriginKind kind = 1; 91 } 92 // Commit is a reference to a commit (e.g. the collection of branches and the 93 // collection of currently-open commits in etcd are collections of Commit 94 // protos) 95 message Commit { 96 Repo repo = 1; 97 string id = 2 [(gogoproto.customname) = "ID"]; 98 } 99 100 // CommitRange represents chain of commits with Lower being an ancestor of 101 // Upper or, in the case of a range of size 1, the same commit. 102 message CommitRange { 103 Commit lower = 1; 104 Commit upper = 2; 105 } 106 107 // CommitProvenance keeps track of where (i.e. which branch) a certain commit 108 // originated from. A commit's provenance consists of the commits of 109 // the commits which are in its causal history. 110 message CommitProvenance { 111 Commit commit = 1; 112 Branch branch = 2; 113 } 114 115 // CommitInfo is the main data structure representing a commit in etcd 116 message CommitInfo { 117 reserved 6, 10; 118 Commit commit = 1; 119 Branch branch = 15; 120 CommitOrigin origin = 17; 121 // description is a user-provided script describing this commit 122 string description = 8; 123 Commit parent_commit = 2; 124 repeated Commit child_commits = 11; 125 google.protobuf.Timestamp started = 3; 126 google.protobuf.Timestamp finished = 4; 127 uint64 size_bytes = 5; 128 129 // the commits and their original branches on which this commit is provenant 130 repeated CommitProvenance provenance = 16; 131 132 // ReadyProvenance is the number of provenant commits which have been 133 // finished, if ReadyProvenance == len(Provenance) then the commit is ready 134 // to be processed by pps. 135 int64 ready_provenance = 12; 136 137 repeated CommitRange subvenance = 9; 138 // this is the block that stores the serialized form of a tree that 139 // represents the entire file system hierarchy of the repo at this commit 140 // If this is nil, then the commit is either open (in which case 'finished' 141 // will also be nil) or is the output commit of a failed job (in which case 142 // 'finished' will have a value -- the end time of the job) 143 Object tree = 7; 144 repeated Object trees = 13; 145 Object datums = 14; 146 147 int64 subvenant_commits_success = 18; 148 int64 subvenant_commits_failure = 19; 149 int64 subvenant_commits_total = 20; 150 } 151 152 enum FileType { 153 RESERVED = 0; 154 FILE = 1; 155 DIR = 2; 156 } 157 158 message FileInfo { 159 File file = 1; 160 FileType file_type = 2; 161 uint64 size_bytes = 3; 162 google.protobuf.Timestamp committed = 10; 163 // the base names (i.e. just the filenames, not the full paths) of 164 // the children 165 repeated string children = 6; 166 repeated Object objects = 8; 167 repeated BlockRef blockRefs = 9; 168 bytes hash = 7; 169 } 170 171 message ByteRange { 172 uint64 lower = 1; 173 uint64 upper = 2; 174 } 175 176 message BlockRef { 177 Block block = 1; 178 ByteRange range = 2; 179 } 180 181 message ObjectInfo { 182 Object object = 1; 183 BlockRef block_ref = 2; 184 } 185 186 message Compaction { 187 repeated string prefixes = 1; 188 } 189 190 message Shard { 191 PathRange range = 1; 192 } 193 194 message PathRange { 195 string lower = 1; 196 string upper = 2; 197 } 198 199 // PFS API 200 201 message CreateRepoRequest { 202 reserved 2; 203 Repo repo = 1; 204 string description = 3; 205 bool update = 4; 206 } 207 208 message InspectRepoRequest { 209 Repo repo = 1; 210 } 211 212 message ListRepoRequest { 213 reserved 1; 214 } 215 216 message ListRepoResponse { 217 repeated RepoInfo repo_info = 1; 218 } 219 220 message DeleteRepoRequest { 221 Repo repo = 1; 222 bool force = 2; 223 bool all = 3; 224 } 225 226 // CommitState describes the states a commit can be in. 227 // The states are increasingly specific, i.e. a commit that is FINISHED also counts as STARTED. 228 enum CommitState { 229 STARTED = 0; // The commit has been started, all commits satisfy this state. 230 READY = 1; // The commit has been started, and all of its provenant commits have been finished. 231 FINISHED = 2; // The commit has been finished. 232 } 233 234 message StartCommitRequest { 235 reserved 2; 236 // Parent.ID may be empty in which case the commit that Branch points to will be used as the parent. 237 // If branch is empty, or if branch does not exist, the commit will have no parent. 238 Commit parent = 1; 239 // description is a user-provided string describing this commit 240 string description = 4; 241 string branch = 3; 242 repeated CommitProvenance provenance = 5; 243 } 244 245 message BuildCommitRequest { 246 reserved 2; 247 Commit parent = 1; 248 string branch = 4; 249 repeated CommitProvenance provenance = 6; 250 Object tree = 3; 251 repeated Object trees = 7; 252 Object datums = 8; 253 // ID sets the ID of the created commit. 254 string ID = 5; 255 uint64 size_bytes = 9; 256 // 'started' and 'finished' are set by Restore() when repopulating old 257 // commits. If 'finished' is set, the commit being built is always marked 258 // finished. 259 google.protobuf.Timestamp started = 10; 260 google.protobuf.Timestamp finished = 11; 261 } 262 263 message FinishCommitRequest { 264 Commit commit = 1; 265 // description is a user-provided string describing this commit. Setting this 266 // will overwrite the description set in StartCommit 267 string description = 2; 268 269 Object tree = 3; 270 repeated Object trees = 5; 271 Object datums = 7; 272 uint64 size_bytes = 6; 273 // If set, 'commit' will be closed (its 'finished' field will be set to the 274 // current time) but its 'tree' will be left nil. 275 bool empty = 4; 276 } 277 278 message InspectCommitRequest { 279 Commit commit = 1; 280 // BlockState causes inspect commit to block until the commit is in the desired state. 281 CommitState block_state = 2; 282 } 283 284 message ListCommitRequest { 285 Repo repo = 1; 286 Commit from = 2; 287 Commit to = 3; 288 uint64 number = 4; 289 bool reverse = 5; // Return commits oldest to newest 290 } 291 292 message CommitInfos { 293 repeated CommitInfo commit_info = 1; 294 } 295 296 message CreateBranchRequest { 297 Commit head = 1; 298 // s_branch matches the field number and type of SetBranchRequest.Branch in 299 // Pachyderm 1.6--so that operations (generated by pachyderm 1.6's 300 // Admin.Export) can be deserialized by pachyderm 1.7 correctly 301 string s_branch = 2; 302 Branch branch = 3; 303 repeated Branch provenance = 4; 304 } 305 306 message InspectBranchRequest { 307 Branch branch = 1; 308 } 309 310 message ListBranchRequest { 311 Repo repo = 1; 312 bool reverse = 2; // Returns branches oldest to newest 313 } 314 315 message DeleteBranchRequest { 316 Branch branch = 1; 317 bool force = 2; 318 } 319 320 message DeleteCommitRequest { 321 Commit commit = 1; 322 } 323 324 message FlushCommitRequest { 325 repeated Commit commits = 1; 326 repeated Repo to_repos = 2; 327 } 328 329 message SubscribeCommitRequest { 330 Repo repo = 1; 331 string branch = 2; 332 CommitProvenance prov = 5; 333 // only commits created since this commit are returned 334 Commit from = 3; 335 // Don't return commits until they're in (at least) the desired state. 336 CommitState state = 4; 337 } 338 339 message GetFileRequest { 340 File file = 1; 341 int64 offset_bytes = 2; 342 int64 size_bytes = 3; 343 } 344 345 enum Delimiter { 346 NONE = 0; 347 JSON = 1; 348 LINE = 2; 349 SQL = 3; 350 CSV = 4; 351 } 352 353 // An OverwriteIndex specifies the index of objects from which new writes 354 // are applied to. Existing objects starting from the index are deleted. 355 // We want a separate message for ObjectIndex because we want to be able to 356 // distinguish between a zero index and a non-existent index. 357 message OverwriteIndex { 358 int64 index = 1; 359 } 360 361 message PutFileRequest { 362 reserved 2, 4; 363 File file = 1; 364 bytes value = 3; 365 string url = 5; 366 // applies only to URLs that can be recursively walked, for example s3:// URLs 367 bool recursive = 6; 368 // Delimiter causes data to be broken up into separate files with File.Path 369 // as a prefix. 370 Delimiter delimiter = 7; 371 // TargetFileDatums specifies the target number of datums in each written 372 // file it may be lower if data does not split evenly, but will never be 373 // higher, unless the value is 0. 374 int64 target_file_datums = 8; 375 // TargetFileBytes specifies the target number of bytes in each written 376 // file, files may have more or fewer bytes than the target. 377 int64 target_file_bytes = 9; 378 // header_records is an option for splitting data when 'delimiter' is not NONE 379 // (or SQL). It specifies the number of records that are converted to a 380 // header and applied to all file shards. 381 // 382 // This is particularly useful for CSV files, where the first row often 383 // contains column titles; if 'header_records' is set to one in that case, 384 // the first row will be associated with the directory that contains the rest 385 // of the split-up csv rows as files, and if any data is retrieved from that 386 // directory by GetFile, it will appear to begin with that first row of 387 // column labels (including in pipeline workers). 388 // 389 // Note that SQL files have their own logic for determining headers (their 390 // header is not a number of records, but a collection of SQL commands that 391 // create the relevant tables and such). This way, SQL files retrieved by 392 // GetFile can be passed to psql, and they will set up the appropriate tables 393 // before inserting the records in the files that were retrieved. 394 int64 header_records = 11; 395 // overwrite_index is the object index where the write starts from. All 396 // existing objects starting from the index are deleted. 397 OverwriteIndex overwrite_index = 10; 398 } 399 400 // PutFileRecord is used to record PutFile requests in etcd temporarily. 401 message PutFileRecord { 402 int64 size_bytes = 1; 403 string object_hash = 2; 404 OverwriteIndex overwrite_index = 3; 405 BlockRef block_ref = 4; 406 } 407 408 message PutFileRecords { 409 bool split = 1; 410 repeated PutFileRecord records = 2; 411 bool tombstone = 3; 412 PutFileRecord header = 4; 413 PutFileRecord footer = 5; 414 } 415 416 message CopyFileRequest { 417 File src = 1; 418 File dst = 2; 419 bool overwrite = 3; 420 } 421 422 message InspectFileRequest { 423 File file = 1; 424 } 425 426 message ListFileRequest { 427 // File is the parent directory of the files we want to list. This sets the 428 // repo, the commit/branch, and path prefix of files we're interested in 429 // If the "path" field is omitted, a list of files at the top level of the repo 430 // is returned 431 File file = 1; 432 433 // Full indicates whether the result should include file contents, which may 434 // be large (i.e. the list of children for directories, and the list of object 435 // references for regular files) 436 bool full = 2; 437 438 // History indicates how many historical versions you want returned. Its 439 // semantics are: 440 // 0: Return the files as they are at the commit in `file`. FileInfo.File 441 // will equal File in this request. 442 // 1: Return the files as they are in the last commit they were modified in. 443 // (This will have the same hash as if you'd passed 0, but 444 // FileInfo.File.Commit will be different. 445 // 2: Return the above and the files as they are in the next-last commit they 446 // were modified in. 447 // 3: etc. 448 //-1: Return all historical versions. 449 int64 history = 3; 450 } 451 452 message WalkFileRequest { 453 File file = 1; 454 } 455 456 message GlobFileRequest { 457 Commit commit = 1; 458 string pattern = 2; 459 } 460 461 // FileInfos is the result of both ListFile and GlobFile 462 message FileInfos { 463 repeated FileInfo file_info = 1; 464 } 465 466 message DiffFileRequest { 467 File new_file = 1; 468 // OldFile may be left nil in which case the same path in the parent of 469 // NewFile's commit will be used. 470 File old_file = 2; 471 bool shallow = 3; 472 } 473 474 message DiffFileResponse { 475 repeated FileInfo new_files = 1; 476 repeated FileInfo old_files = 2; 477 } 478 479 message DeleteFileRequest { 480 File file = 1; 481 } 482 483 message FsckRequest { 484 bool fix = 1; 485 } 486 487 message FsckResponse { 488 string fix = 1; 489 string error = 2; 490 } 491 492 // Messages specific to the new storage layer. 493 494 message PutTarRequest { 495 Commit commit = 1; 496 bytes data = 2; 497 } 498 499 message GetTarRequest { 500 File file = 1; 501 } 502 503 service API { 504 // Repo rpcs 505 // CreateRepo creates a new repo. 506 // An error is returned if the repo already exists. 507 rpc CreateRepo(CreateRepoRequest) returns (google.protobuf.Empty) {} 508 // InspectRepo returns info about a repo. 509 rpc InspectRepo(InspectRepoRequest) returns (RepoInfo) {} 510 // ListRepo returns info about all repos. 511 rpc ListRepo(ListRepoRequest) returns (ListRepoResponse) {} 512 // DeleteRepo deletes a repo. 513 rpc DeleteRepo(DeleteRepoRequest) returns (google.protobuf.Empty) {} 514 515 // Commit rpcs 516 // StartCommit creates a new write commit from a parent commit. 517 rpc StartCommit(StartCommitRequest) returns (Commit) {} 518 // FinishCommit turns a write commit into a read commit. 519 rpc FinishCommit(FinishCommitRequest) returns (google.protobuf.Empty) {} 520 // InspectCommit returns the info about a commit. 521 rpc InspectCommit(InspectCommitRequest) returns (CommitInfo) {} 522 // ListCommit returns info about all commits. This is deprecated in favor of 523 // ListCommitStream. 524 rpc ListCommit(ListCommitRequest) returns (CommitInfos) {} 525 // ListCommitStream is like ListCommit, but returns its results in a GRPC stream 526 rpc ListCommitStream(ListCommitRequest) returns (stream CommitInfo) {} 527 // DeleteCommit deletes a commit. 528 rpc DeleteCommit(DeleteCommitRequest) returns (google.protobuf.Empty) {} 529 // FlushCommit waits for downstream commits to finish 530 rpc FlushCommit(FlushCommitRequest) returns (stream CommitInfo) {} 531 // SubscribeCommit subscribes for new commits on a given branch 532 rpc SubscribeCommit(SubscribeCommitRequest) returns (stream CommitInfo) {} 533 // BuildCommit builds a commit that's backed by the given tree 534 rpc BuildCommit(BuildCommitRequest) returns (Commit) {} 535 536 // CreateBranch creates a new branch 537 rpc CreateBranch(CreateBranchRequest) returns (google.protobuf.Empty) {} 538 // InspectBranch returns info about a branch. 539 rpc InspectBranch(InspectBranchRequest) returns (BranchInfo) {} 540 // ListBranch returns info about the heads of branches. 541 rpc ListBranch(ListBranchRequest) returns (BranchInfos) {} 542 // DeleteBranch deletes a branch; note that the commits still exist. 543 rpc DeleteBranch(DeleteBranchRequest) returns (google.protobuf.Empty) {} 544 545 // File rpcs 546 // PutFile writes the specified file to pfs. 547 rpc PutFile(stream PutFileRequest) returns (google.protobuf.Empty) {} 548 // CopyFile copies the contents of one file to another. 549 rpc CopyFile(CopyFileRequest) returns (google.protobuf.Empty) {} 550 // GetFile returns a byte stream of the contents of the file. 551 rpc GetFile(GetFileRequest) returns (stream google.protobuf.BytesValue) {} 552 // InspectFile returns info about a file. 553 rpc InspectFile(InspectFileRequest) returns (FileInfo) {} 554 // ListFile returns info about all files. This is deprecated in favor of 555 // ListFileStream 556 rpc ListFile(ListFileRequest) returns (FileInfos) {} 557 // ListFileStream is a streaming version of ListFile 558 // TODO(msteffen): When the dash has been updated to use ListFileStream, 559 // replace ListFile with this RPC (https://github.com/pachyderm/dash/issues/201) 560 rpc ListFileStream(ListFileRequest) returns (stream FileInfo) {} 561 // WalkFile walks over all the files under a directory, including children of children. 562 rpc WalkFile(WalkFileRequest) returns (stream FileInfo) {} 563 // GlobFile returns info about all files. This is deprecated in favor of 564 // GlobFileStream 565 rpc GlobFile(GlobFileRequest) returns (FileInfos) {} 566 // GlobFileStream is a streaming version of GlobFile 567 // TODO(msteffen): When the dash has been updated to use GlobFileStream, 568 // replace GlobFile with this RPC (https://github.com/pachyderm/dash/issues/201) 569 rpc GlobFileStream(GlobFileRequest) returns (stream FileInfo) {} 570 // DiffFile returns the differences between 2 paths at 2 commits. 571 rpc DiffFile(DiffFileRequest) returns (DiffFileResponse) {} 572 // DeleteFile deletes a file. 573 rpc DeleteFile(DeleteFileRequest) returns (google.protobuf.Empty) {} 574 575 // DeleteAll deletes everything 576 rpc DeleteAll(google.protobuf.Empty) returns (google.protobuf.Empty) {} 577 // Fsck does a file system consistency check for pfs 578 rpc Fsck(FsckRequest) returns (stream FsckResponse) {} 579 580 // RPCs specific to the new storage layer. 581 rpc PutTar(stream PutTarRequest) returns (google.protobuf.Empty) {} 582 rpc GetTar(GetTarRequest) returns (stream google.protobuf.BytesValue) {} 583 } 584 585 message PutObjectRequest { 586 bytes value = 1; 587 repeated Tag tags = 2; 588 Block block = 3; 589 } 590 591 message CreateObjectRequest { 592 Object object = 1; 593 BlockRef block_ref = 2; 594 } 595 596 message GetObjectsRequest { 597 repeated Object objects = 1; 598 uint64 offset_bytes = 2; 599 // The number of bytes requested. 600 uint64 size_bytes = 3; 601 // The total amount of bytes in these objects. It's OK if it's not 602 // entirely accurate or if it's unknown (in which case it'd be set to 0). 603 // It's used primarily as a hint for cache eviction. 604 uint64 total_size = 4; 605 } 606 607 message PutBlockRequest { 608 Block block = 1; 609 bytes value = 2; 610 } 611 612 message GetBlockRequest { 613 Block block = 1; 614 } 615 616 message GetBlocksRequest { 617 repeated BlockRef blockRefs = 1; 618 uint64 offset_bytes = 2; 619 // The number of bytes requested. 620 uint64 size_bytes = 3; 621 // The total amount of bytes in these blocks. It's OK if it's not 622 // entirely accurate or if it's unknown (in which case it'd be set to 0). 623 // It's used primarily as a hint for cache eviction. 624 uint64 total_size = 4; 625 } 626 627 message ListBlockRequest {} 628 629 message TagObjectRequest { 630 Object object = 1; 631 repeated Tag tags = 2; 632 } 633 634 message ListObjectsRequest {} 635 636 message ListTagsRequest { 637 string prefix = 1; 638 bool include_object = 2; 639 } 640 641 message ListTagsResponse { 642 Tag tag = 1; 643 Object object = 2; 644 } 645 646 message DeleteObjectsRequest { 647 repeated Object objects = 1; 648 } 649 650 message DeleteObjectsResponse {} 651 652 message DeleteTagsRequest { 653 repeated Tag tags = 1; 654 } 655 656 message DeleteTagsResponse {} 657 658 message CheckObjectRequest { 659 Object object = 1; 660 } 661 662 message CheckObjectResponse { 663 bool exists = 1; 664 } 665 666 message Objects { 667 repeated Object objects = 1; 668 } 669 670 message PutObjDirectRequest { 671 string obj = 1; 672 bytes value = 2; 673 } 674 675 message GetObjDirectRequest { 676 string obj = 1; 677 } 678 679 service ObjectAPI { 680 rpc PutObject(stream PutObjectRequest) returns (Object) {} 681 rpc PutObjectSplit(stream PutObjectRequest) returns (Objects) {} 682 rpc PutObjects(stream PutObjectRequest) returns (google.protobuf.Empty) {} 683 rpc CreateObject(CreateObjectRequest) returns (google.protobuf.Empty) {} 684 rpc GetObject(Object) returns (stream google.protobuf.BytesValue) {} 685 rpc GetObjects(GetObjectsRequest) returns (stream google.protobuf.BytesValue) {} 686 rpc PutBlock(stream PutBlockRequest) returns (google.protobuf.Empty) {} 687 rpc GetBlock(GetBlockRequest) returns (stream google.protobuf.BytesValue) {} 688 rpc GetBlocks(GetBlocksRequest) returns (stream google.protobuf.BytesValue) {} 689 rpc ListBlock(ListBlockRequest) returns (stream Block) {} 690 rpc TagObject(TagObjectRequest) returns (google.protobuf.Empty) {} 691 rpc InspectObject(Object) returns (ObjectInfo) {} 692 // CheckObject checks if an object exists in the blob store without 693 // actually reading the object. 694 rpc CheckObject(CheckObjectRequest) returns (CheckObjectResponse) {} 695 rpc ListObjects(ListObjectsRequest) returns (stream ObjectInfo) {} 696 rpc DeleteObjects(DeleteObjectsRequest) returns (DeleteObjectsResponse) {} 697 rpc GetTag(Tag) returns (stream google.protobuf.BytesValue) {} 698 rpc InspectTag(Tag) returns (ObjectInfo) {} 699 rpc ListTags(ListTagsRequest) returns (stream ListTagsResponse) {} 700 rpc DeleteTags(DeleteTagsRequest) returns (DeleteTagsResponse) {} 701 rpc Compact(google.protobuf.Empty) returns (google.protobuf.Empty) {} 702 // PutObjDirect puts an obj directly into object store, bypassing the content 703 // addressing layer. 704 rpc PutObjDirect(stream PutObjDirectRequest) returns (google.protobuf.Empty) {} 705 // GetObjDirect gets an obj directly out of object store, bypassing the 706 // content addressing layer. 707 rpc GetObjDirect(GetObjDirectRequest) returns (stream google.protobuf.BytesValue) {} 708 } 709 710 message ObjectIndex { 711 map<string, BlockRef> objects = 1; 712 map<string, Object> tags = 2; 713 } 714