github.com/pachyderm/pachyderm@v1.13.4/src/client/pps/pps.proto (about)

     1  syntax = "proto3";
     2  
     3  package pps;
     4  option go_package = "github.com/pachyderm/pachyderm/src/client/pps";
     5  
     6  import "google/protobuf/empty.proto";
     7  import "google/protobuf/timestamp.proto";
     8  import "google/protobuf/duration.proto";
     9  
    10  import "gogoproto/gogo.proto";
    11  
    12  import "client/pfs/pfs.proto";
    13  
    14  message SecretMount {
    15    // Name must be the name of the secret in kubernetes.
    16    string name = 1;
    17    // Key of the secret to load into env_var, this field only has meaning if EnvVar != "".
    18    string key = 4;
    19    string mount_path = 2;
    20    string env_var = 3;
    21  }
    22  
    23  message Transform {
    24    string image = 1;
    25    repeated string cmd = 2;
    26    repeated string err_cmd = 13;
    27    map<string, string> env = 3;
    28    repeated SecretMount secrets = 4;
    29    repeated string image_pull_secrets = 9;
    30    repeated string stdin = 5;
    31    repeated string err_stdin = 14;
    32    repeated int64 accept_return_code = 6;
    33    bool debug = 7;
    34    string user = 10;
    35    string working_dir = 11;
    36    string dockerfile = 12;
    37    BuildSpec build = 15;
    38  }
    39  
    40  message BuildSpec {
    41    string path = 1;
    42    string language = 2;
    43    string image = 3;
    44  }
    45  
    46  message TFJob {
    47    // tf_job  is a serialized Kubeflow TFJob spec. Pachyderm sends this directly
    48    // to a kubernetes cluster on which kubeflow has been installed, instead of
    49    // creating a pipeline ReplicationController as it normally would.
    50    string tf_job = 1 [(gogoproto.customname) = "TFJob"];
    51  }
    52  
    53  message Egress {
    54    string URL = 1;
    55  }
    56  
    57  message Job {
    58    string id = 1 [(gogoproto.customname) = "ID"];
    59  }
    60  
    61  enum JobState {
    62    JOB_STARTING = 0;
    63    JOB_RUNNING = 1;
    64    JOB_FAILURE = 2;
    65    JOB_SUCCESS = 3;
    66    JOB_KILLED = 4;
    67    JOB_MERGING = 5;
    68    JOB_EGRESSING = 6;
    69  }
    70  
    71  message Metadata {
    72    map<string, string> annotations = 1;
    73    map<string, string> labels = 2;
    74  }
    75  
    76  message Service {
    77    int32 internal_port = 1;
    78    int32 external_port = 2;
    79    string ip = 3 [(gogoproto.customname) = "IP"];
    80    string type = 4;
    81  }
    82  
    83  message Spout {
    84    bool overwrite = 1;
    85    Service service = 2;
    86    string marker = 3;
    87  }
    88  
    89  message PFSInput {
    90    string name = 1;
    91    string repo = 2;
    92    string branch = 3;
    93    string commit = 4;
    94    string glob = 5;
    95    string join_on = 8;
    96    bool outer_join = 12;
    97    string group_by = 11;
    98    bool lazy = 6;
    99    // EmptyFiles, if true, will cause files from this PFS input to be
   100    // presented as empty files. This is useful in shuffle pipelines where you
   101    // want to read the names of files and reorganize them using symlinks.
   102    bool empty_files = 7;
   103    // S3, if true, will cause the worker to NOT download or link files from this
   104    // input into the /pfs directory. Instead, an instance of our S3 gateway
   105    // service will run on each of the sidecars, and data can be retrieved from
   106    // this input by querying
   107    // http://<pipeline>-s3.<namespace>/<job id>.<input>/my/file
   108    bool s3 = 9;
   109    // Trigger defines when this input is processed by the pipeline, if it's nil
   110    // the input is processed anytime something is committed to the input branch.
   111    pfs.Trigger trigger = 10;
   112  }
   113  
   114  message CronInput {
   115    string name = 1;
   116    string repo = 2;
   117    string commit = 3;
   118    string spec = 4;
   119    // Overwrite, if true, will expose a single datum that gets overwritten each
   120    // tick. If false, it will create a new datum for each tick.
   121    bool overwrite = 6;
   122    google.protobuf.Timestamp start = 5;
   123  }
   124  
   125  message GitInput {
   126    string name = 1;
   127    string url = 2 [(gogoproto.customname) = "URL"];
   128    string branch = 3;
   129    string commit = 4;
   130  }
   131  
   132  message Input {
   133    PFSInput pfs = 6;
   134    repeated Input join = 7;
   135    repeated Input group = 8;
   136    repeated Input cross = 2;
   137    repeated Input union = 3;
   138    CronInput cron = 4;
   139    GitInput git = 5;
   140  }
   141  
   142  message JobInput {
   143    string name = 4;
   144    pfs.Commit commit = 1;
   145    string glob = 2;
   146    bool lazy = 3;
   147  }
   148  
   149  message ParallelismSpec {
   150    reserved 1;
   151  
   152    // Starts the pipeline/job with a 'constant' workers, unless 'constant' is
   153    // zero. If 'constant' is zero (which is the zero value of ParallelismSpec),
   154    // then Pachyderm will choose the number of workers that is started,
   155    // (currently it chooses the number of workers in the cluster)
   156    uint64 constant = 2;
   157  
   158    // Starts the pipeline/job with number of workers equal to 'coefficient' * N,
   159    // where N is the number of nodes in the kubernetes cluster.
   160    //
   161    // For example, if each Kubernetes node has four CPUs, you might set
   162    // 'coefficient' to four, so that there are four Pachyderm workers per
   163    // Kubernetes node, and each Pachyderm worker gets one CPU. If you want to
   164    // reserve half the nodes in your cluster for other tasks, you might set
   165    // 'coefficient' to 0.5.
   166    double coefficient = 3;
   167  }
   168  
   169  // HashTreeSpec sets the number of shards into which pps splits a pipeline's
   170  // output commits (sharded commits are implemented in Pachyderm 1.8+ only)
   171  message HashtreeSpec {
   172    uint64 constant = 1;
   173  }
   174  
   175  message InputFile {
   176    // This file's absolute path within its pfs repo.
   177    string path = 4;
   178  
   179    // This file's hash
   180    bytes hash = 5;
   181  }
   182  
   183  message Datum {
   184    // ID is the hash computed from all the files
   185    string id = 1 [(gogoproto.customname) = "ID"];
   186    Job job = 2;
   187  }
   188  
   189  enum DatumState {
   190      FAILED = 0;
   191      SUCCESS = 1;
   192      SKIPPED = 2;
   193      STARTING = 3;
   194      RECOVERED = 4;
   195  }
   196  
   197  message DatumInfo {
   198    Datum datum = 1;
   199    DatumState state = 2;
   200    ProcessStats stats = 3;
   201    pfs.File pfs_state = 4;
   202    repeated pfs.FileInfo data = 5;
   203  }
   204  
   205  message Aggregate {
   206    int64 count = 1;
   207    double mean = 2;
   208    double stddev = 3;
   209    double fifth_percentile = 4;
   210    double ninety_fifth_percentile = 5;
   211  }
   212  
   213  message ProcessStats {
   214    google.protobuf.Duration download_time = 1;
   215    google.protobuf.Duration process_time = 2;
   216    google.protobuf.Duration upload_time = 3;
   217    uint64 download_bytes = 4;
   218    uint64 upload_bytes = 5;
   219  }
   220  
   221  message AggregateProcessStats {
   222    Aggregate download_time = 1;
   223    Aggregate process_time = 2;
   224    Aggregate upload_time = 3;
   225    Aggregate download_bytes = 4;
   226    Aggregate upload_bytes = 5;
   227  }
   228  
   229  message WorkerStatus {
   230    string worker_id = 1 [(gogoproto.customname) = "WorkerID"];
   231    string job_id = 2 [(gogoproto.customname) = "JobID"];
   232    repeated pps.InputFile data = 3;
   233    // Started is the time processing on the current datum began.
   234    google.protobuf.Timestamp started = 4;
   235    ProcessStats stats = 5;
   236    int64 queue_size = 6;
   237    int64 data_processed = 7;
   238    int64 data_recovered = 8;
   239  }
   240  
   241  // ResourceSpec describes the amount of resources that pipeline pods should
   242  // request from kubernetes, for scheduling.
   243  message ResourceSpec {
   244    reserved 3;
   245  
   246    // The number of CPUs each worker needs (partial values are allowed, and
   247    // encouraged)
   248    float cpu = 1;
   249  
   250    // The amount of memory each worker needs (in bytes, with allowed
   251    // SI suffixes (M, K, G, Mi, Ki, Gi, etc).
   252    string memory = 2;
   253  
   254    // The spec for GPU resources.
   255    GPUSpec gpu = 5;
   256  
   257    // The amount of ephemeral storage each worker needs (in bytes, with allowed
   258    // SI suffixes (M, K, G, Mi, Ki, Gi, etc).
   259    string disk = 4;
   260  }
   261  
   262  message GPUSpec {
   263    // The type of GPU (nvidia.com/gpu or amd.com/gpu for example).
   264    string type = 1;
   265    // The number of GPUs to request.
   266    int64 number = 2;
   267  }
   268  
   269  // EtcdJobInfo is the portion of the JobInfo that gets stored in etcd during
   270  // job execution. It contains fields which change over the lifetime of the job
   271  // but aren't used in the execution of the job.
   272  message EtcdJobInfo {
   273    Job job = 1;
   274    Pipeline pipeline = 2;
   275    pfs.Commit output_commit = 3;
   276    // Job restart count (e.g. due to datum failure)
   277    uint64 restart = 4;
   278  
   279    // Counts of how many times we processed or skipped a datum
   280    int64 data_processed = 5;
   281    int64 data_skipped = 6;
   282    int64 data_total = 7;
   283    int64 data_failed = 8;
   284    int64 data_recovered = 15;
   285  
   286    // Download/process/upload time and download/upload bytes
   287    ProcessStats stats = 9;
   288  
   289    pfs.Commit stats_commit = 10;
   290    JobState state = 11;
   291    string reason = 12;
   292    google.protobuf.Timestamp started = 13;
   293    google.protobuf.Timestamp finished = 14;
   294  }
   295  
   296  message JobInfo {
   297    reserved 4, 5, 28, 34;
   298    Job job = 1;
   299    Transform transform = 2;                     // requires ListJobRequest.Full
   300    Pipeline pipeline = 3;
   301    uint64 pipeline_version = 13;                // requires ListJobRequest.Full
   302    pfs.Commit spec_commit = 47;
   303    ParallelismSpec parallelism_spec = 12;       // requires ListJobRequest.Full
   304    Egress egress = 15;                          // requires ListJobRequest.Full
   305    Job parent_job = 6;
   306    google.protobuf.Timestamp started = 7;
   307    google.protobuf.Timestamp finished = 8;
   308    pfs.Commit output_commit = 9;
   309    JobState state = 10;
   310    string reason = 35;  // reason explains why the job is in the current state
   311    Service service = 14;                        // requires ListJobRequest.Full
   312    Spout spout = 45;                            // requires ListJobRequest.Full
   313    pfs.Repo output_repo = 18;
   314    string output_branch = 17;                   // requires ListJobRequest.Full
   315    uint64 restart = 20;
   316    int64 data_processed = 22;
   317    int64 data_skipped = 30;
   318    int64 data_failed = 40;
   319    int64 data_recovered = 46;
   320    int64 data_total = 23;
   321    ProcessStats stats = 31;
   322    repeated WorkerStatus worker_status = 24;
   323    ResourceSpec resource_requests = 25;         // requires ListJobRequest.Full
   324    ResourceSpec resource_limits = 36;           // requires ListJobRequest.Full
   325    ResourceSpec sidecar_resource_limits = 48;  // requires ListJobRequest.Full
   326    Input input = 26;                            // requires ListJobRequest.Full
   327    pfs.BranchInfo new_branch = 27;
   328    pfs.Commit stats_commit = 29;
   329    bool enable_stats = 32;                      // requires ListJobRequest.Full
   330    string salt = 33;                            // requires ListJobRequest.Full
   331    ChunkSpec chunk_spec = 37;                   // requires ListJobRequest.Full
   332    google.protobuf.Duration datum_timeout = 38; // requires ListJobRequest.Full
   333    google.protobuf.Duration job_timeout = 39;   // requires ListJobRequest.Full
   334    int64 datum_tries = 41;                      // requires ListJobRequest.Full
   335    SchedulingSpec scheduling_spec = 42;         // requires ListJobRequest.Full
   336    string pod_spec = 43;                        // requires ListJobRequest.Full
   337    string pod_patch = 44;                       // requires ListJobRequest.Full
   338  }
   339  
   340  enum WorkerState {
   341    POD_RUNNING = 0;
   342    POD_SUCCESS = 1;
   343    POD_FAILED = 2;
   344  }
   345  
   346  message Worker {
   347    string name = 1;
   348    WorkerState state = 2;
   349  }
   350  
   351  message JobInfos {
   352    repeated JobInfo job_info = 1;
   353  }
   354  
   355  message Pipeline {
   356    string name = 1;
   357  }
   358  
   359  enum PipelineState {
   360    // There is an EtcdPipelineInfo + spec commit, but no RC
   361    // This happens when a pipeline has been created but not yet picked up by a
   362    // PPS server.
   363    PIPELINE_STARTING = 0;
   364    // A pipeline has a spec commit and a service + RC
   365    // This is the normal state of a pipeline.
   366    PIPELINE_RUNNING = 1;
   367    // Equivalent to STARTING (there is an EtcdPipelineInfo + commit, but no RC)
   368    // After some error caused runPipeline to exit, but before the pipeline is
   369    // re-run. This is when the exponential backoff is in effect.
   370    PIPELINE_RESTARTING = 2;
   371    // The pipeline has encountered unrecoverable errors and is no longer being
   372    // retried. It won't leave this state until the pipeline is updated.
   373    PIPELINE_FAILURE = 3;
   374    // The pipeline has been explicitly paused by the user (the pipeline spec's
   375    // Stopped field should be true if the pipeline is in this state)
   376    PIPELINE_PAUSED = 4;
   377    // The pipeline is fully functional, but there are no commits to process.
   378    PIPELINE_STANDBY = 5;
   379    // The pipeline's workers are crashing, or failing to come up, this may
   380    // resolve itself, the pipeline may make progress while in this state if the
   381    // problem is only being experienced by some workers.
   382    PIPELINE_CRASHING = 6;
   383  }
   384  
   385  // EtcdPipelineInfo is proto that Pachd stores in etcd for each pipeline. It
   386  // tracks the state of the pipeline, and points to its metadata in PFS (and,
   387  // by pointing to a PFS commit, de facto tracks the pipeline's version)
   388  message EtcdPipelineInfo {
   389    PipelineState state = 1;
   390    string reason = 4;
   391    pfs.Commit spec_commit = 2;
   392    map<int32, int32> job_counts = 3;
   393    string auth_token = 5;
   394    JobState last_job_state = 6;
   395  
   396    // parallelism tracks the literal number of workers that this pipeline should
   397    // run. Unlike PipelineInfo.ParallelismSpec, this accounts for the number of
   398    // nodes in the k8s cluster if Coefficient parallelism is used (i.e. if
   399    // Coefficient is 2 and the cluster has 5 nodes, this will be set to 10 by
   400    // pachd). This allows the worker master to shard work correctly without
   401    // k8s privileges and without knowing the number of cluster nodes in the
   402    // Coefficient case.
   403    uint64 parallelism = 7;
   404  }
   405  
   406  message PipelineInfo {
   407    reserved 3, 4, 22, 26, 27, 18, 55;
   408    string id = 17 [(gogoproto.customname) = "ID"];
   409    Pipeline pipeline = 1;
   410    uint64 version = 11;
   411    Transform transform = 2;
   412    // tf_job encodes a Kubeflow TFJob spec. Pachyderm uses this to create TFJobs
   413    // when running in a kubernetes cluster on which kubeflow has been installed.
   414    // Exactly one of 'tf_job' and 'transform' should be set
   415    TFJob tf_job = 46 [(gogoproto.customname) = "TFJob"];
   416    ParallelismSpec parallelism_spec = 10;
   417    HashtreeSpec hashtree_spec = 42;
   418    Egress egress = 15;
   419    google.protobuf.Timestamp created_at = 6;
   420  
   421    // state indicates the current state of the pipeline. This is not stored in
   422    // PFS along with the rest of this data structure--PPS.InspectPipeline fills
   423    // it in
   424    PipelineState state = 7;
   425    // same for stopped field
   426    bool stopped = 38;
   427    string recent_error = 8;
   428  
   429    int64 workers_requested = 49;
   430    int64 workers_available = 50;
   431  
   432    // job_counts and last_job_state indicates the number of jobs within this
   433    // pipeline in a given state and the state of the most recently created job,
   434    // respectively. This is not stored in PFS along with the rest of this data
   435    // structure--PPS.InspectPipeline fills it in from the EtcdPipelineInfo.
   436    map<int32, int32> job_counts = 9;
   437    JobState last_job_state = 43;
   438  
   439    string output_branch = 16;
   440    ResourceSpec resource_requests = 19;
   441    ResourceSpec resource_limits = 31;
   442    ResourceSpec sidecar_resource_limits = 51;
   443    Input input = 20;
   444    string description = 21;
   445    string cache_size = 23;
   446    bool enable_stats = 24;
   447    string salt = 25;
   448  
   449    // reason includes any error messages associated with a failed pipeline
   450    string reason = 28;
   451    int64 max_queue_size = 29;
   452    Service service = 30;
   453    Spout spout = 45;
   454    ChunkSpec chunk_spec = 32;
   455    google.protobuf.Duration datum_timeout = 33;
   456    google.protobuf.Duration job_timeout = 34;
   457    string githook_url = 35 [(gogoproto.customname) = "GithookURL"];
   458    pfs.Commit spec_commit = 36;
   459    bool standby = 37;
   460    int64 datum_tries = 39;
   461    SchedulingSpec scheduling_spec = 40;
   462    string pod_spec = 41;
   463    string pod_patch = 44;
   464    bool s3_out = 47;
   465    Metadata metadata = 48;
   466    string reprocess_spec = 56;
   467    // Set at call time, not stored in pfs/etcd
   468    int64 unclaimed_tasks = 52;
   469    string worker_rc = 53;
   470    bool autoscaling = 54;
   471  }
   472  
   473  message PipelineInfos {
   474    repeated PipelineInfo pipeline_info = 1;
   475  }
   476  
   477  message CreateJobRequest {
   478    reserved 3, 4, 1, 10, 7, 9, 8, 12, 11, 13, 14, 21, 15, 16, 17, 18, 19, 20, 22, 23, 24;
   479    Pipeline pipeline = 2;
   480    pfs.Commit output_commit = 25;
   481  
   482    // Fields below should only be set when restoring an extracted job.
   483    uint64 restart = 26;
   484  
   485    // Counts of how many times we processed or skipped a datum
   486    int64 data_processed = 27;
   487    int64 data_skipped = 28;
   488    int64 data_total = 29;
   489    int64 data_failed = 30;
   490    int64 data_recovered = 31;
   491  
   492    // Download/process/upload time and download/upload bytes
   493    ProcessStats stats = 32;
   494  
   495    pfs.Commit stats_commit = 33;
   496    JobState state = 34;
   497    string reason = 35;
   498    google.protobuf.Timestamp started = 36;
   499    google.protobuf.Timestamp finished = 37;
   500  }
   501  
   502  message InspectJobRequest {
   503    // Callers should set either Job or OutputCommit, not both.
   504    Job job = 1;
   505    pfs.Commit output_commit = 3;
   506    bool block_state = 2; // block until state is either JOB_STATE_FAILURE or JOB_STATE_SUCCESS
   507    bool full = 4;
   508  }
   509  
   510  message ListJobRequest {
   511    Pipeline pipeline = 1;                // nil means all pipelines
   512    repeated pfs.Commit input_commit = 2; // nil means all inputs
   513    pfs.Commit output_commit = 3;         // nil means all outputs
   514  
   515    // History indicates return jobs from historical versions of pipelines
   516    // semantics are:
   517    // 0: Return jobs from the current version of the pipeline or pipelines.
   518    // 1: Return the above and jobs from the next most recent version
   519    // 2: etc.
   520    //-1: Return jobs from all historical versions.
   521    int64 history = 4;
   522  
   523    // Full indicates whether the result should include all pipeline details in
   524    // each JobInfo, or limited information including name and status, but
   525    // excluding information in the pipeline spec. Leaving this "false" can make
   526    // the call significantly faster in clusters with a large number of pipelines
   527    // and jobs.
   528    // Note that if 'input_commit' is set, this field is coerced to "true"
   529    bool full = 5;
   530  
   531    // A jq program string for additional result filtering
   532    string jqFilter = 6;
   533  }
   534  
   535  message FlushJobRequest {
   536    repeated pfs.Commit commits = 1;
   537    repeated Pipeline to_pipelines = 2;
   538  }
   539  
   540  message DeleteJobRequest {
   541    Job job = 1;
   542  }
   543  
   544  message StopJobRequest {
   545    Job job = 1;
   546  }
   547  
   548  message UpdateJobStateRequest {
   549    Job job = 1;
   550    JobState state = 2;
   551    string reason = 3;
   552    uint64 restart = 4;
   553    int64 data_processed = 5;
   554    int64 data_skipped = 6;
   555    int64 data_failed = 7;
   556    int64 data_recovered = 8;
   557    int64 data_total = 9;
   558    ProcessStats stats = 10;
   559  }
   560  
   561  message GetLogsRequest {
   562    reserved 4;
   563    // The pipeline from which we want to get logs (required if the job in 'job'
   564    // was created as part of a pipeline. To get logs from a non-orphan job
   565    // without the pipeline that created it, you need to use ElasticSearch).
   566    Pipeline pipeline = 2;
   567  
   568    // The job from which we want to get logs.
   569    Job job = 1;
   570  
   571    // Names of input files from which we want processing logs. This may contain
   572    // multiple files, to query pipelines that contain multiple inputs. Each
   573    // filter may be an absolute path of a file within a pps repo, or it may be
   574    // a hash for that file (to search for files at specific versions)
   575    repeated string data_filters = 3;
   576  
   577    Datum datum = 6;
   578  
   579    // If true get logs from the master process
   580    bool master = 5;
   581  
   582    // Continue to follow new logs as they become available.
   583    bool follow = 7;
   584  
   585    // If nonzero, the number of lines from the end of the logs to return.  Note:
   586    // tail applies per container, so you will get tail * <number of pods> total
   587    // lines back.
   588    int64 tail = 8;
   589  
   590    // UseLokiBackend causes the logs request to go through the loki backend
   591    // rather than through kubernetes. This behavior can also be achieved by
   592    // setting the LOKI_LOGGING feature flag.
   593    bool use_loki_backend = 9;
   594  
   595    // Since specifies how far in the past to return logs from. It defaults to 24 hours.
   596    google.protobuf.Duration since = 10;
   597  }
   598  
   599  // LogMessage is a log line from a PPS worker, annotated with metadata
   600  // indicating when and why the line was logged.
   601  message LogMessage {
   602    // The job and pipeline for which a PFS file is being processed (if the job
   603    // is an orphan job, pipeline name and ID will be unset)
   604    string pipeline_name = 1;
   605    string job_id = 3 [(gogoproto.customname) = "JobID"];
   606    string worker_id = 7 [(gogoproto.customname) = "WorkerID"];
   607    string datum_id = 9 [(gogoproto.customname) = "DatumID"];
   608    bool master = 10;
   609  
   610    // The PFS files being processed (one per pipeline/job input)
   611    repeated InputFile data = 4;
   612  
   613    // User is true if log message comes from the users code.
   614    bool user = 8;
   615  
   616    // The message logged, and the time at which it was logged
   617    google.protobuf.Timestamp ts = 5;
   618    string message = 6;
   619  }
   620  
   621  message RestartDatumRequest {
   622    Job job = 1;
   623    repeated string data_filters = 2;
   624  }
   625  
   626  message InspectDatumRequest {
   627    Datum datum = 1;
   628  }
   629  
   630  message ListDatumRequest {
   631    // Job and Input are two different ways to specify the datums you want.
   632    // Only one can be set.
   633    // Job is the job to list datums from.
   634    Job job = 1;
   635    // Input is the input to list datums from.
   636    // The datums listed are the ones that would be run if a pipeline was created
   637    // with input.
   638    Input input = 4;
   639    int64 page_size = 2;
   640    int64 page = 3;
   641    // Enables retrieving only status information for datums, rather than including the
   642    // inputs and time spent, which improves performance.
   643    bool status_only = 5;
   644  }
   645  
   646  message ListDatumResponse {
   647    repeated DatumInfo datum_infos = 1;
   648    int64 total_pages = 2;
   649    int64 page = 3;
   650  }
   651  
   652  // ListDatumStreamResponse is identical to ListDatumResponse, except that only
   653  // one DatumInfo is present (as these responses are streamed)
   654  message ListDatumStreamResponse {
   655    DatumInfo datum_info = 1;
   656    // total_pages is only set in the first response (and set to 0 in all other
   657    // responses)
   658    int64 total_pages = 2;
   659    // page is only set in the first response (and set to 0 in all other
   660    // responses)
   661    int64 page = 3;
   662  }
   663  
   664  // ChunkSpec specifies how a pipeline should chunk its datums.
   665  message ChunkSpec {
   666    // number, if nonzero, specifies that each chunk should contain `number`
   667    // datums. Chunks may contain fewer if the total number of datums don't
   668    // divide evenly.
   669    int64 number = 1;
   670    // size_bytes, if nonzero, specifies a target size for each chunk of datums.
   671    // Chunks may be larger or smaller than size_bytes, but will usually be
   672    // pretty close to size_bytes in size.
   673    int64 size_bytes = 2;
   674  }
   675  
   676  message SchedulingSpec {
   677    map<string, string> node_selector = 1;
   678    string priority_class_name = 2;
   679  }
   680  
   681  message CreatePipelineRequest {
   682    reserved 3, 4, 11, 15, 19, 49;
   683    Pipeline pipeline = 1;
   684    // tf_job encodes a Kubeflow TFJob spec. Pachyderm uses this to create TFJobs
   685    // when running in a kubernetes cluster on which kubeflow has been installed.
   686    // Exactly one of 'tf_job' and 'transform' should be set
   687    TFJob tf_job = 35 [(gogoproto.customname) = "TFJob"];
   688    Transform transform = 2;
   689    ParallelismSpec parallelism_spec = 7;
   690    HashtreeSpec hashtree_spec = 31;
   691    Egress egress = 9;
   692    bool update = 5;
   693    string output_branch = 10;
   694    // s3_out, if set, requires a pipeline's user to write to its output repo
   695    // via Pachyderm's s3 gateway (if set, workers will serve Pachyderm's s3
   696    // gateway API at http://<pipeline>-s3.<namespace>/<job id>.out/my/file).
   697    // In this mode /pfs/out won't be walked or uploaded, and the s3 gateway
   698    // service in the workers will allow writes to the job's output commit
   699    bool s3_out = 36;
   700    ResourceSpec resource_requests = 12;
   701    ResourceSpec resource_limits = 22;
   702    ResourceSpec sidecar_resource_limits = 47;
   703    Input input = 13;
   704    string description = 14;
   705    string cache_size = 16;
   706    bool enable_stats = 17;
   707    // Reprocess forces the pipeline to reprocess all datums.
   708    // It only has meaning if Update is true
   709    bool reprocess = 18;
   710    int64 max_queue_size = 20;
   711    Service service = 21;
   712    Spout spout = 33;
   713    ChunkSpec chunk_spec = 23;
   714    google.protobuf.Duration datum_timeout = 24;
   715    google.protobuf.Duration job_timeout = 25;
   716    string salt = 26;
   717    bool standby = 27;
   718    int64 datum_tries = 28;
   719    SchedulingSpec scheduling_spec = 29;
   720    string pod_spec = 30; // deprecated, use pod_patch below
   721    string pod_patch = 32; // a json patch will be applied to the pipeline's pod_spec before it's created;
   722    pfs.Commit spec_commit = 34;
   723    Metadata metadata = 46;
   724    bool autoscaling = 48;
   725    string reprocess_spec = 50;
   726  }
   727  
   728  message InspectPipelineRequest {
   729    Pipeline pipeline = 1;
   730  }
   731  
   732  message ListPipelineRequest {
   733    // If non-nil, only return info about a single pipeline, this is redundant
   734    // with InspectPipeline unless history is non-zero.
   735    Pipeline pipeline = 1;
   736    // History indicates how many historical versions you want returned. Its
   737    // semantics are:
   738    // 0: Return the current version of the pipeline or pipelines.
   739    // 1: Return the above and the next most recent version
   740    // 2: etc.
   741    //-1: Return all historical versions.
   742    int64 history = 2;
   743  
   744    // Return PipelineInfos with incomplete data if the pipeline spec cannot be
   745    // retrieved. Incomplete PipelineInfos will have a nil Transform field, but
   746    // will have the fields present in EtcdPipelineInfo.
   747    bool allow_incomplete = 3;
   748  
   749    // A jq program string for additional result filtering
   750    string jqFilter = 4;
   751  }
   752  
   753  message DeletePipelineRequest {
   754    reserved 2, 3;
   755    Pipeline pipeline = 1;
   756    bool all = 4;
   757    bool force = 5;
   758    bool keep_repo = 6;
   759    bool split_transaction = 7;
   760  }
   761  
   762  message StartPipelineRequest {
   763    Pipeline pipeline = 1;
   764  }
   765  
   766  message StopPipelineRequest {
   767    Pipeline pipeline = 1;
   768  }
   769  
   770  message RunPipelineRequest {
   771    reserved 3;
   772    Pipeline pipeline = 1;
   773    repeated pfs.CommitProvenance provenance = 2;
   774    string job_id = 4 [(gogoproto.customname) = "JobID"];
   775  }
   776  
   777  message RunCronRequest {
   778    Pipeline pipeline = 1;
   779  }
   780  
   781  message CreateSecretRequest {
   782    bytes file = 1;
   783  }
   784  
   785  message DeleteSecretRequest {
   786    Secret secret  = 1;
   787  }
   788  
   789  message InspectSecretRequest {
   790    Secret secret = 1;
   791  }
   792  
   793  message Secret {
   794    string name = 1;
   795  }
   796  
   797  message SecretInfo {
   798    Secret secret = 1;
   799    string type = 2;
   800    google.protobuf.Timestamp creation_timestamp = 3;
   801  }
   802  
   803  message SecretInfos {
   804    repeated SecretInfo secret_info = 1;
   805  }
   806  
   807  message GarbageCollectRequest {
   808      // Memory is how much memory to use in computing which objects are alive. A
   809      // larger number will result in more precise garbage collection (at the
   810      // cost of more memory usage).
   811      int64 memory_bytes = 1;
   812  }
   813  message GarbageCollectResponse {}
   814  
   815  message ActivateAuthRequest {}
   816  message ActivateAuthResponse {}
   817  
   818  service API {
   819    rpc CreateJob(CreateJobRequest) returns (Job) {}
   820    rpc InspectJob(InspectJobRequest) returns (JobInfo) {}
   821    // ListJob returns information about current and past Pachyderm jobs. This is
   822    // deprecated in favor of ListJobStream
   823    rpc ListJob(ListJobRequest) returns (JobInfos) {}
   824    // ListJobStream returns information about current and past Pachyderm jobs.
   825    rpc ListJobStream(ListJobRequest) returns (stream JobInfo) {}
   826    rpc FlushJob(FlushJobRequest) returns (stream JobInfo) {}
   827    rpc DeleteJob(DeleteJobRequest) returns (google.protobuf.Empty) {}
   828    rpc StopJob(StopJobRequest) returns (google.protobuf.Empty) {}
   829    rpc InspectDatum(InspectDatumRequest) returns (DatumInfo) {}
   830    // ListDatum returns information about each datum fed to a Pachyderm job. This
   831    // is deprecated in favor of ListDatumStream
   832    rpc ListDatum(ListDatumRequest) returns (ListDatumResponse) {}
   833    // ListDatumStream returns information about each datum fed to a Pachyderm job
   834    rpc ListDatumStream(ListDatumRequest) returns (stream ListDatumStreamResponse) {}
   835    rpc RestartDatum(RestartDatumRequest) returns (google.protobuf.Empty) {}
   836  
   837    rpc CreatePipeline(CreatePipelineRequest) returns (google.protobuf.Empty) {}
   838    rpc InspectPipeline(InspectPipelineRequest) returns (PipelineInfo) {}
   839    rpc ListPipeline(ListPipelineRequest) returns (PipelineInfos) {}
   840    rpc DeletePipeline(DeletePipelineRequest) returns (google.protobuf.Empty) {}
   841    rpc StartPipeline(StartPipelineRequest) returns (google.protobuf.Empty) {}
   842    rpc StopPipeline(StopPipelineRequest) returns (google.protobuf.Empty) {}
   843    rpc RunPipeline(RunPipelineRequest) returns (google.protobuf.Empty) {}
   844    rpc RunCron(RunCronRequest) returns (google.protobuf.Empty) {}
   845  
   846    rpc CreateSecret(CreateSecretRequest) returns (google.protobuf.Empty) {}
   847    rpc DeleteSecret(DeleteSecretRequest) returns (google.protobuf.Empty) {}
   848    rpc ListSecret(google.protobuf.Empty) returns (SecretInfos) {}
   849    rpc InspectSecret(InspectSecretRequest) returns (SecretInfo) {}
   850  
   851    // DeleteAll deletes everything
   852    rpc DeleteAll(google.protobuf.Empty) returns (google.protobuf.Empty) {}
   853    rpc GetLogs(GetLogsRequest) returns (stream LogMessage) {}
   854  
   855    // Garbage collection
   856    rpc GarbageCollect(GarbageCollectRequest) returns (GarbageCollectResponse) {}
   857  
   858    // An internal call that causes PPS to put itself into an auth-enabled state
   859    // (all pipeline have tokens, correct permissions, etcd)
   860    rpc ActivateAuth(ActivateAuthRequest) returns (ActivateAuthResponse) {}
   861  
   862    // An internal call used to move a job from one state to another
   863    rpc UpdateJobState(UpdateJobStateRequest) returns(google.protobuf.Empty) {}
   864  }