diff --git a/.cirrus.yml b/.cirrus.yml deleted file mode 100644 index c272df4d704c..000000000000 --- a/.cirrus.yml +++ /dev/null @@ -1,76 +0,0 @@ -# Cirrus CI gives open-source projects free 16.0 CPUs, -# we use 4 CPUs x 3 tasks = 12 CPUs. -# https://cirrus-ci.org/faq/#are-there-any-limits -# -# Undocumented constraints; -# - The maximum memory limit is 4G times the number of CPUs. -# - The number of CPUs should be multiple of 2. - -task: - name: Vagrant - - compute_engine_instance: - image_project: cirrus-images - image: family/docker-kvm - platform: linux - nested_virtualization: true - cpu: 4 - memory: 16G - - env: - GOTEST: gotestsum -- - # By default, Cirrus CI doesn't have HOME defined - HOME: /root - matrix: - BOX: fedora/36-cloud-base - BOX: rockylinux/8 - install_libvirt_vagrant_script: | - apt-get update - apt-get install -y libvirt-daemon libvirt-daemon-system vagrant vagrant-libvirt - systemctl enable --now libvirtd - - vagrant_cache: - folder: /root/.vagrant.d - fingerprint_script: uname --kernel-release --kernel-version && cat Vagrantfile - - vagrant_up_script: | - vagrant up --no-tty - - integration_script: | - vagrant up --provision-with=selinux,install-runc,install-gotestsum,test-integration - - cri_test_script: | - vagrant up --provision-with=selinux,install-runc,install-gotestsum,test-cri - -task: - name: CGroupsV2 - rootless CRI test - - env: - HOME: /root - - compute_engine_instance: - image_project: cirrus-images - image: family/docker-kvm - platform: linux - nested_virtualization: true - cpu: 4 - memory: 16G - - install_libvirt_vagrant_script: | - apt-get update - apt-get install -y libvirt-daemon libvirt-daemon-system vagrant vagrant-libvirt - systemctl enable --now libvirtd - - vagrant_cache: - folder: /root/.vagrant.d - fingerprint_script: uname -a; cat Vagrantfile - - vagrant_up_script: | - vagrant up --provision-with=install-rootless-podman --no-tty - - podman_build_script: | - # Execute rootless podman to create the UserNS env - vagrant ssh -- podman build --target cri-in-userns -t cri-in-userns -f /vagrant/contrib/Dockerfile.test /vagrant - - test_script: | - vagrant ssh -- podman run --rm --privileged cri-in-userns diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 000000000000..c96e1fe010d7 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,42 @@ +# Copyright The containerd Authors. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# For details, see https://github.com/devcontainers/images/tree/main/src/base-ubuntu +FROM mcr.microsoft.com/devcontainers/base:1-ubuntu-22.04 + +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends \ + gperf \ + dmsetup \ + bc \ + software-properties-common \ + libseccomp-dev \ + xfsprogs \ + lsof \ + iptables \ + autoconf \ + automake \ + g++ \ + libtool \ + acl \ + && rm -rf /var/lib/apt/lists/* + +RUN add-apt-repository -y ppa:criu/ppa \ + && apt-get update \ + && apt-get install -y criu \ + && rm -rf /var/lib/apt/lists/* + +RUN setfacl -PRdm u::rwx,g::rx,o::rx /tmp + +COPY .devcontainer/welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000000..10b4efa7cbea --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,32 @@ +// For format details, see https://aka.ms/devcontainer.json. +{ + "name": "containerd", + "build": { + "context": "..", + "dockerfile": "Dockerfile" + }, + "workspaceFolder": "/go/src/github.com/containerd/containerd", + "workspaceMount": "source=${localWorkspaceFolder},target=/go/src/github.com/containerd/containerd,type=bind,consistency=cached", + + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/go:1": { + "version": "1.24.13" + } + }, + + "onCreateCommand": "sudo PATH=$PATH bash .devcontainer/setup.sh", + "postAttachCommand": { + "Runs all non-integration tests that do not require `root` privileges": "make test", + "Runs non-integration tests which require `root`": "sudo PATH=$PATH make root-test" + }, + + "remoteUser": "root", + "runArgs": [ + "--ipc=host", + "--volume=/dev:/dev", + "--volume=/run/udev:/run/udev", + "--privileged" + ] +} diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100644 index 000000000000..b9c26c177b8f --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Copyright The containerd Authors. + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eux + +script/setup/install-seccomp +script/setup/install-runc +script/setup/install-cni $(grep containernetworking/plugins go.mod | awk '{print $2}') +script/setup/install-critools +script/setup/install-failpoint-binaries +script/setup/install-gotestsum +script/setup/install-teststat + +make binaries GO_BUILD_FLAGS="-mod=vendor" +sudo -E PATH=$PATH make install diff --git a/.devcontainer/welcome-message.txt b/.devcontainer/welcome-message.txt new file mode 100644 index 000000000000..fd6ad2d22fd5 --- /dev/null +++ b/.devcontainer/welcome-message.txt @@ -0,0 +1,7 @@ +👋 Welcome to "containerd" in GitHub Codespaces! + +🛠️ Your environment is fully setup with all the required software. + +🔍 To explore VS Code to its fullest, search using the Command Palette (Cmd/Ctrl + Shift + P or F1). + +ℹ️ Look at https://github.com/containerd/project/blob/main/CONTRIBUTING.md for contribution guidelines. diff --git a/.github/ISSUE_TEMPLATE/cri_kep.yaml b/.github/ISSUE_TEMPLATE/cri_kep.yaml new file mode 100644 index 000000000000..bc519979bdfa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/cri_kep.yaml @@ -0,0 +1,57 @@ +name: SIG-Node Integration +description: Tracking issue for SIG-Node integration work (including KEPs) +title: "[SIG-Node]: " +labels: + - kind/feature + - area/cri +assignees: + - mikebrow + - fuweid + - samuelkarp +body: + - type: textarea + attributes: + label: KEP/SIG-Node References + description: | + example: + - **KEP**: # + - **stage**: alpha|beta w/gate off|beta w/gate on|ga + - **KEP-Issue**: link + - **KEP-PR**: link + - **K8s-Release**: version where the KEP stage is scheduled to release or has released + - **KEP-Owner: id(s) SIG-Node member(s) that own the KEP of reference + - **SIG-Node member liaison: containerd maintainer(s) ensuring interop with sig-node + - **KEP-Shepherd: containerd owner assigned to this issue + value: | + - KEP(s): + - stage: + - KEP Issue: + - KEP PR: + - K8s-Release: + - KEP-Owner: + - SIG-Node member liason: + - KEP-Shepherd: + validations: + required: false + + - type: textarea + attributes: + label: What is the SIG-Node problem you are trying to solve + description: | + A clear and concise description of the reason for the change(s) required in containerd. + validations: + required: true + + - type: textarea + attributes: + label: Describe the solution you would like + description: | + A clear and concise description of design considerations that should be made when making the change(s). + validations: + required: true + + - type: textarea + attributes: + label: Additional context + description: | + Add any other context about the needed change here. diff --git a/.github/actions/install-go/action.yml b/.github/actions/install-go/action.yml new file mode 100644 index 000000000000..f40057faf4e3 --- /dev/null +++ b/.github/actions/install-go/action.yml @@ -0,0 +1,16 @@ +name: "Setup Go" +description: "Reusable action to install Go, so there is one place to bump Go versions" +inputs: + go-version: + required: true + default: "1.24.13" + description: "Go version to install" + +runs: + using: composite + steps: + - name: "Setup Go" + uses: actions/setup-go@v5 + with: + go-version: ${{ inputs.go-version }} + cache: false # see actions/setup-go#368 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000000..6e6f108ef907 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,25 @@ +version: 2 +updates: + - package-ecosystem: "gomod" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 10 + groups: + golang-x: + patterns: + - "golang.org/x/*" + k8s: + patterns: + - "k8s.io/*" + moby-sys: + patterns: + - "github.com/moby/sys/*" + otel: + patterns: + - "go.opentelemetry.io/*" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 10 diff --git a/.github/workflows/api-release.yml b/.github/workflows/api-release.yml new file mode 100644 index 000000000000..6636811ae257 --- /dev/null +++ b/.github/workflows/api-release.yml @@ -0,0 +1,80 @@ +on: + push: + tags: + - "api/v*" # Push events to matching api/v*, i.e. api/v1.0, api/v20.15.10 + +name: API Release + +env: + GO_VERSION: "1.24.13" + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + +jobs: + check: + name: Check Signed Tag + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/api/v') + runs-on: ubuntu-24.04 + timeout-minutes: 5 + outputs: + stringver: ${{ steps.contentrel.outputs.stringver }} + + steps: + - name: Checkout code + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + ref: ${{ github.ref }} + path: src/github.com/containerd/containerd + + - name: Check signature + run: | + releasever=${{ github.ref }} + releasever="${releasever#refs/tags/}" + TAGCHECK=$(git tag -v ${releasever} 2>&1 >/dev/null) || + echo "${TAGCHECK}" | grep -q "error" && { + echo "::error::tag ${releasever} is not a signed tag. Failing release process." + exit 1 + } || { + echo "Tag ${releasever} is signed." + exit 0 + } + working-directory: src/github.com/containerd/containerd + + - name: Release content + id: contentrel + run: | + RELEASEVER=${{ github.ref }} + echo "stringver=${RELEASEVER#refs/tags/api/v}" >> $GITHUB_OUTPUT + git tag -l ${RELEASEVER#refs/tags/} -n20000 | tail -n +3 | cut -c 5- >release-notes.md + working-directory: src/github.com/containerd/containerd + + - name: Save release notes + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + with: + name: containerd-release-notes + path: src/github.com/containerd/containerd/release-notes.md + + release: + name: Create containerd Release + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/api/v') + permissions: + contents: write + runs-on: ubuntu-24.04 + timeout-minutes: 10 + needs: [check] + steps: + - name: Download release notes + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + with: + path: builds + - name: Create Release + uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fail_on_unmatched_files: true + name: containerd API ${{ needs.check.outputs.stringver }} + draft: false + make_latest: false + prerelease: ${{ contains(github.ref, 'beta') || contains(github.ref, 'rc') }} + body_path: ./builds/release-notes.md diff --git a/.github/workflows/buf-breaking.yml b/.github/workflows/buf-breaking.yml new file mode 100644 index 000000000000..04b7095e29b8 --- /dev/null +++ b/.github/workflows/buf-breaking.yml @@ -0,0 +1,35 @@ +# Detects breaking changes in protobuf files using buf. +# This check can be bypassed by adding the 'breaking-api-change' label to the PR. +# For more info: https://buf.build/docs/bsr/ci-cd/github-actions/ + +name: Protobuf + +on: + pull_request: + branches: ['main', 'release/**'] + types: [opened, synchronize, reopened, labeled, unlabeled] + paths: + - 'api/**/*.proto' + - 'api/buf.yaml' + +permissions: + contents: read + pull-requests: read + +jobs: + breaking: + name: Detect breaking API changes + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - uses: actions/checkout@v6 + - uses: bufbuild/buf-action@v1 + with: + version: 1.63.0 + github_token: ${{ secrets.GITHUB_TOKEN }} + input: 'api' + breaking: ${{ !contains(github.event.pull_request.labels.*.name, 'breaking-api-change') }} + lint: false + format: false + pr_comment: false diff --git a/.github/workflows/build-test-images.yml b/.github/workflows/build-test-images.yml index 3ecf30758053..f3df4112a238 100644 --- a/.github/workflows/build-test-images.yml +++ b/.github/workflows/build-test-images.yml @@ -9,7 +9,7 @@ on: azure_windows_image_id: description: Windows image URN to deploy required: true - default: MicrosoftWindowsServer:WindowsServer:2022-datacenter:20348.350.2111030009 + default: MicrosoftWindowsServer:WindowsServer:2022-datacenter:latest azure_vm_size: description: Windows image builder VM size required: true @@ -20,7 +20,7 @@ on: default: westeurope permissions: - packages: write + contents: read env: AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUB_ID }} @@ -30,21 +30,23 @@ env: jobs: images: + permissions: + packages: write name: "Build volume test images" runs-on: ubuntu-latest + timeout-minutes: 60 + defaults: run: working-directory: src/github.com/containerd/containerd steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: path: src/github.com/containerd/containerd + - uses: ./src/github.com/containerd/containerd/.github/actions/install-go + - name: Set env shell: bash run: | @@ -70,18 +72,18 @@ jobs: echo "SSH_PUB_KEY=$(cat ~/.ssh/id_rsa.pub)" >> $GITHUB_ENV - name: Azure Login - uses: azure/login@v1 + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 with: creds: ${{ secrets.AZURE_CREDS }} - name: Create Azure Resource Group - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | az group create -n ${{ env.AZURE_RESOURCE_GROUP }} -l ${{ github.event.inputs.azure_location }} --tags creationTimestamp=$(date +%Y-%m-%dT%T%z) - name: Create Windows Helper VM - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | PASSWORD="$(/usr/bin/tr -dc "a-zA-Z0-9@#$%^&*()_+?><~\`;" < /dev/urandom | /usr/bin/head -c 24; echo '')" @@ -96,7 +98,7 @@ jobs: az vm open-port --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --name WinDockerHelper --port 2376 --priority 102 - name: Prepare Windows image helper - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | # Installs Windows features, opens SSH and Docker port @@ -118,7 +120,7 @@ jobs: --parameters 'SSHPublicKey=${{ env.SSH_PUB_KEY }}' - name: Get Windows Helper IPs - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | VM_DETAILS=$(az vm show -d -g ${{ env.AZURE_RESOURCE_GROUP }} -n WinDockerHelper -o json) @@ -140,7 +142,7 @@ jobs: scp -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.PUBLIC_IP }}:/Users/azureuser/.docker/key.pem $HOME/.docker/key.pem - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -159,7 +161,7 @@ jobs: - name: Cleanup resources if: always() - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | az group delete -g ${{ env.AZURE_RESOURCE_GROUP }} --yes diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 48eee8687f89..5b579e32d438 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,61 +1,67 @@ name: CI on: - push: - branches: - - main - - 'release/**' + # When added to a merge queue. + # See https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue#triggering-merge-group-checks-with-github-actions + merge_group: pull_request: - branches: - - main - - 'release/**' + branches: ['main', 'release/**'] + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read jobs: # # golangci-lint # linters: + permissions: + contents: read # for actions/checkout to fetch code + pull-requests: read # for golangci/golangci-lint-action to fetch pull requests name: Linters runs-on: ${{ matrix.os }} timeout-minutes: 10 strategy: matrix: - go-version: [1.18.4] - os: [ubuntu-18.04, macos-12, windows-2019] + os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest] + exclude: + - os: ${{ github.event.repository.private && 'ubuntu-24.04-arm' || '' }} - steps: - - uses: actions/setup-go@v2 - with: - go-version: ${{ matrix.go-version }} - - uses: actions/checkout@v2 - - uses: golangci/golangci-lint-action@v3 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: ./.github/actions/install-go + - uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0 with: - version: v1.46.2 + version: v2.1.5 skip-cache: true - args: --timeout=5m + args: --timeout=8m # # Project checks # project: name: Project Checks - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest timeout-minutes: 5 steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: path: src/github.com/containerd/containerd fetch-depth: 100 - - uses: containerd/project-checks@v1 + - uses: ./src/github.com/containerd/containerd/.github/actions/install-go + + - uses: containerd/project-checks@d7751f3c375b8fe4a84c02a068184ee4c1f59bc4 # v1.2.2 + if: github.repository == 'containerd/containerd' with: working-directory: src/github.com/containerd/containerd + repo-access-token: ${{ secrets.GITHUB_TOKEN }} + # github.com/cyphar/filepath-securejoin: MPL-2.0 AND BSD-3-Clause + # Approval: https://github.com/cncf/foundation/issues/1154#issuecomment-3562385979 + go-licenses-ignore: | + github.com/cyphar/filepath-securejoin - name: verify go modules and vendor directory run: | @@ -68,7 +74,7 @@ jobs: # protos: name: Protobuf - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest timeout-minutes: 5 defaults: @@ -76,67 +82,50 @@ jobs: working-directory: src/github.com/containerd/containerd steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: path: src/github.com/containerd/containerd + - uses: ./src/github.com/containerd/containerd/.github/actions/install-go + - name: Set env shell: bash run: | echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV echo "${{ github.workspace }}/bin" >> $GITHUB_PATH - - name: Install protobuf - run: | - sudo -E PATH=$PATH script/setup/install-protobuf - sudo chmod +x /usr/local/bin/protoc - sudo chmod og+rx /usr/local/include/google /usr/local/include/google/protobuf /usr/local/include/google/protobuf/compiler - sudo chmod -R og+r /usr/local/include/google/protobuf/ - protoc --version - - run: script/setup/install-dev-tools - run: make proto-fmt - - run: make check-protos check-api-descriptors + - run: make check-protos man: name: Manpages - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest timeout-minutes: 5 steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - uses: actions/checkout@v2 - - run: go install github.com/cpuguy83/go-md2man/v2@v2.0.1 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: ./.github/actions/install-go + - run: go install github.com/cpuguy83/go-md2man/v2@v2.0.7 - run: make man - # Make sure binaries compile with other platforms + # Make sure binaries compile with other minor platforms. + # Well-known architectures are covered in release.yml. crossbuild: name: Crossbuild Binaries needs: [project, linters, protos, man] - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest timeout-minutes: 10 strategy: fail-fast: false matrix: include: - - goos: linux - goarch: arm64 - goos: linux goarch: arm goarm: "7" - goos: linux goarch: arm goarm: "5" - - goos: linux - goarch: ppc64le - - goos: linux - goarch: riscv64 - goos: freebsd goarch: amd64 - goos: freebsd @@ -146,14 +135,12 @@ jobs: goarm: "7" steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: ./.github/actions/install-go - run: | set -e -x - packages="libbtrfs-dev" + packages="" platform="${{matrix.goos}}/${{matrix.goarch}}" if [ -n "${{matrix.goarm}}" ]; then platform+="/v${{matrix.goarm}}" @@ -170,21 +157,6 @@ jobs: echo "CGO_ENABLED=1" >> $GITHUB_ENV echo "CC=arm-linux-gnueabihf-gcc" >> $GITHUB_ENV ;; - linux/arm64) - packages+=" crossbuild-essential-arm64" - echo "CGO_ENABLED=1" >> $GITHUB_ENV - echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV - ;; - linux/ppc64le) - packages+=" crossbuild-essential-ppc64el" - echo "CGO_ENABLED=1" >> $GITHUB_ENV - echo "CC=powerpc64le-linux-gnu-gcc" >> $GITHUB_ENV - ;; - linux/riscv64) - packages+=" crossbuild-essential-riscv64" - echo "CGO_ENABLED=1" >> $GITHUB_ENV - echo "CC=riscv64-linux-gnu-gcc" >> $GITHUB_ENV - ;; windows/arm/v7) echo "CGO_ENABLED=0" >> $GITHUB_ENV ;; @@ -209,33 +181,24 @@ jobs: binaries: name: Binaries runs-on: ${{ matrix.os }} - timeout-minutes: 10 + timeout-minutes: 20 needs: [project, linters, protos, man] strategy: matrix: - os: [ubuntu-18.04, macos-12, windows-2019, windows-2022] - go-version: ['1.17.12', '1.18.4'] + os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest] + go-version: ["1.24.13", "1.25.7"] + exclude: + - os: ${{ github.event.repository.private && 'ubuntu-24.04-arm' || '' }} steps: - - uses: actions/setup-go@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: ./.github/actions/install-go with: go-version: ${{ matrix.go-version }} - - - name: Set env - shell: bash - run: | - echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV - echo "${{ github.workspace }}/bin" >> $GITHUB_PATH - - - uses: actions/checkout@v2 - with: - path: src/github.com/containerd/containerd - - name: Make run: | make build make binaries - working-directory: src/github.com/containerd/containerd # # Integration and CRI tests @@ -243,7 +206,7 @@ jobs: integration-windows: name: Windows Integration runs-on: ${{ matrix.os }} - timeout-minutes: 50 + timeout-minutes: 90 needs: [project, linters, protos, man] env: GOTEST: gotestsum -- @@ -251,8 +214,8 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-2019, windows-2022] - enable_cri_sandboxes: [ "", "sandboxed"] + os: [windows-2022] + cgroup_driver: [cgroupfs] defaults: run: @@ -260,43 +223,37 @@ jobs: working-directory: src/github.com/containerd/containerd steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: path: src/github.com/containerd/containerd - - uses: actions/checkout@v2 + - uses: ./src/github.com/containerd/containerd/.github/actions/install-go + + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: repository: kubernetes-sigs/cri-tools path: src/github.com/kubernetes-sigs/cri-tools + fetch-depth: 0 - name: Set env run: | echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV echo "${{ github.workspace }}/bin" >> $GITHUB_PATH echo "${{ github.workspace }}/src/github.com/containerd/containerd/bin" >> $GITHUB_PATH - echo "${{ github.workspace }}/src/github.com/kubernetes-sigs/cri-tools/build/bin" >> $GITHUB_PATH + echo "${{ github.workspace }}/src/github.com/kubernetes-sigs/cri-tools/build/bin/windows/amd64" >> $GITHUB_PATH - run: script/setup/install-dev-tools - # There is currently an issue in the race detector in Go on Windows when - # used with a newer version of GCC. The issue was first reported here: - # https://github.com/golang/go/issues/46099 - - name: Downgrade MinGW - shell: bash - run: | - choco install mingw --version 10.2.0 --allow-downgrade - - name: Binaries + shell: bash env: CGO_ENABLED: 1 run: | set -o xtrace mingw32-make.exe binaries + CRITEST_VERSION=$(cat script/setup/critools-version) cd ../../kubernetes-sigs/cri-tools + git checkout "${CRITEST_VERSION}" make critest - run: script/setup/install-cni-windows @@ -304,41 +261,56 @@ jobs: - env: TEST_IMAGE_LIST: ${{github.workspace}}/repolist.toml CRI_TEST_IMAGES: ${{github.workspace}}/cri-test-images.yaml - BUSYBOX_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/busybox:1.29-2" - RESOURCE_CONSUMER_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/resource-consumer:1.10" - WEBSERVER_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/nginx:1.14-2" + BUSYBOX_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/busybox:1.29-2" + RESOURCE_CONSUMER_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/resource-consumer:1.10" + WEBSERVER_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/nginx:1.14-2" run: | - cat > "${{ env.TEST_IMAGE_LIST }}" << EOF - busybox = "${{ env.BUSYBOX_TESTING_IMAGE_REF }}" - ResourceConsumer = "${{ env.RESOURCE_CONSUMER_TESTING_IMAGE_REF }}" - EOF - cat > "${{ env.CRI_TEST_IMAGES }}" << EOF - defaultTestContainerImage: ${{ env.BUSYBOX_TESTING_IMAGE_REF }} - webServerTestImage: ${{ env.WEBSERVER_TESTING_IMAGE_REF }} - EOF + cat > "${{ env.TEST_IMAGE_LIST }}" << EOF + busybox = "${{ env.BUSYBOX_TESTING_IMAGE_REF }}" + ResourceConsumer = "${{ env.RESOURCE_CONSUMER_TESTING_IMAGE_REF }}" + EOF + cat > "${{ env.CRI_TEST_IMAGES }}" << EOF + defaultTestContainerImage: ${{ env.BUSYBOX_TESTING_IMAGE_REF }} + webServerTestImage: ${{ env.WEBSERVER_TESTING_IMAGE_REF }} + EOF - name: Get crictl tool shell: powershell run: | # Get critctl tool. Used for cri-integration tests - $CRICTL_DOWNLOAD_URL="https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.21.0/crictl-v1.21.0-windows-amd64.tar.gz" + $CRICTL_DOWNLOAD_URL="https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.0/crictl-v1.26.0-windows-amd64.tar.gz" curl.exe -L $CRICTL_DOWNLOAD_URL -o c:\crictl.tar.gz tar -xvf c:\crictl.tar.gz mv crictl.exe "${{ github.workspace }}/bin/crictl.exe" # Move crictl somewhere in path - run: script/setup/install-gotestsum + - run: script/setup/install-teststat - name: Tests env: CGO_ENABLED: 1 GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-unit-root.xml + GOTESTSUM_JSONFILE: ${{github.workspace}}/test-unit-root-gotest.json run: mingw32-make.exe test root-test + - run: if [ -f *-gotest.json ]; then echo '# Root Test' >> $GITHUB_STEP_SUMMARY; teststat -markdown *-gotest.json >> $GITHUB_STEP_SUMMARY; fi + if: always() + - run: script/test/test2annotation.sh ${TESTFILE} + env: + TESTFILE: ${{github.workspace}}/test-unit-root-gotest.json + if: always() - name: Integration 1 env: CGO_ENABLED: 1 - ENABLE_CRI_SANDBOXES: ${{ matrix.enable_cri_sandboxes }} GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-serial-junit.xml + GOTESTSUM_JSONFILE: ${{github.workspace}}/test-integration-serial-gotest.json + EXTRA_TESTFLAGS: "-timeout=20m" run: mingw32-make.exe integration + - run: if [ -f *-gotest.json ]; then echo '# Integration 1' >> $GITHUB_STEP_SUMMARY; teststat -markdown *-gotest.json >> $GITHUB_STEP_SUMMARY; fi + if: always() + - run: script/test/test2annotation.sh "$TESTFILE" + env: + TESTFILE: ${{github.workspace}}/test-integration-serial-gotest.json + if: success() # Run the integration suite a second time. See discussion in github.com/containerd/containerd/pull/1759 - name: Integration 2 @@ -346,88 +318,129 @@ jobs: TESTFLAGS_PARALLEL: 1 EXTRA_TESTFLAGS: "-short" CGO_ENABLED: 1 - ENABLE_CRI_SANDBOXES: ${{ matrix.enable_cri_sandboxes }} GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-parallel-junit.xml + GOTESTSUM_JSONFILE: ${{github.workspace}}/test-integration-parallel-gotest.json run: mingw32-make.exe integration + - run: if [ -f *-gotest.json ]; then echo '# Integration 2' >> $GITHUB_STEP_SUMMARY; teststat -markdown *-gotest.json >> $GITHUB_STEP_SUMMARY; fi + if: always() + - run: script/test/test2annotation.sh "$TESTFILE" + env: + TESTFILE: ${{github.workspace}}/test-integration-parallel-gotest.json + if: success() - name: CRI Integration Test env: - ENABLE_CRI_SANDBOXES: ${{ matrix.enable_cri_sandboxes }} TEST_IMAGE_LIST: ${{github.workspace}}/repolist.toml + CGROUP_DRIVER: ${{ matrix.cgroup_driver }} run: | make cri-integration - name: cri-tools critest env: - ENABLE_CRI_SANDBOXES: ${{ matrix.enable_cri_sandboxes }} CRI_TEST_IMAGES: ${{github.workspace}}/cri-test-images.yaml + CGROUP_DRIVER: ${{ matrix.cgroup_driver }} shell: powershell run: | Start-Process -FilePath containerd.exe -NoNewWindow -RedirectStandardError true -PassThru get-process | sls containerd start-sleep 5 - # This test is exceedingly flaky only on ws2022 so skip for now to keep CI happy. - # Info: https://github.com/containerd/containerd/issues/6652 if( '${{ matrix.os }}' -eq 'windows-2022' ) { - $skip = "-ginkgo.skip=runtime should support exec with tty=true and stdin=true" + $skipTests = @( + # This test is exceedingly flaky only on ws2022 so skip for now to keep CI happy. + # Info: https://github.com/containerd/containerd/issues/6652 + "runtime should support exec with tty=true and stdin=true" + ) + $skip = $skipTests -join "|" } - critest.exe --runtime-endpoint=npipe://.//pipe//containerd-containerd --test-images-file='${{env.CRI_TEST_IMAGES}}' --report-dir='${{github.workspace}}/critestreport' $skip + Write-Host "Skip parameters: $skip" + critest.exe --runtime-endpoint=npipe://.//pipe//containerd-containerd --test-images-file='${{env.CRI_TEST_IMAGES}}' --report-dir='${{github.workspace}}/critestreport' --ginkgo.skip="$skip" - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 if: always() with: - name: TestResults ${{ matrix.os }} + name: TestResults ${{ matrix.os }} ${{ matrix.cgroup_driver }} path: | ${{github.workspace}}/*-junit.xml + ${{github.workspace}}/*-gotest.json + ${{github.workspace}}/report/*.log integration-linux: name: Linux Integration - runs-on: ubuntu-18.04 - timeout-minutes: 40 + runs-on: ${{ matrix.os }} + timeout-minutes: 60 needs: [project, linters, protos, man] strategy: fail-fast: false matrix: - runtime: [io.containerd.runtime.v1.linux, io.containerd.runc.v1, io.containerd.runc.v2] - runc: [runc, crun] - enable_cri_sandboxes: [ "", "sandboxed"] + runtime: + - io.containerd.runc.v2 + runc: [runc] # crun can be added here to debug crun issues + os: [ubuntu-22.04, ubuntu-24.04, ubuntu-24.04-arm] + cgroup_driver: [cgroupfs, systemd] exclude: - - runtime: io.containerd.runc.v1 - runc: crun - - runtime: io.containerd.runtime.v1.linux - runc: crun + - os: ${{ github.event.repository.private && 'ubuntu-24.04-arm' || '' }} env: GOTEST: gotestsum -- steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: ./.github/actions/install-go - name: Install containerd dependencies env: RUNC_FLAVOR: ${{ matrix.runc }} - GOFLAGS: -modcacherw run: | - sudo apt-get install -y gperf - sudo -E PATH=$PATH script/setup/install-seccomp - sudo -E PATH=$PATH script/setup/install-runc - sudo -E PATH=$PATH script/setup/install-cni $(grep containernetworking/plugins go.mod | awk '{print $2}') - sudo -E PATH=$PATH script/setup/install-critools + sudo apt-get update + sudo apt-get install -y gperf dmsetup strace xfsprogs + script/setup/install-seccomp + script/setup/install-runc + script/setup/install-cni $(grep containernetworking/plugins go.mod | awk '{print $2}') + script/setup/install-critools + script/setup/install-failpoint-binaries - - name: Install criu + # Disable criu testing on arm64 until we can solve the consistent failures of restore testing + - if: matrix.os != 'ubuntu-24.04-arm' + name: Install criu run: | - sudo add-apt-repository ppa:criu/ppa + sudo add-apt-repository -y ppa:criu/ppa sudo apt-get update sudo apt-get install -y criu - - name: Install failpoint binaries + # "apt-get install erofs-utils" installs an older version (1.7.1 as of 2025-09-18) + # Build and install erofs-utils 1.8.10 from source to get a newer version + - name: Build and install erofs-utils from source run: | - script/setup/install-failpoint-binaries + # Install dependencies + sudo apt-get update + sudo apt-get install -y wget make gcc libz-dev liblz4-dev libfuse-dev autoconf libtool pkg-config uuid-dev + + # Create temporary build directory + BUILD_DIR="$(mktemp -d)" + cd "$BUILD_DIR" + + # get erofs-utils-1.8.10.tar.gz + curl -L https://github.com/erofs/erofs-utils/archive/refs/tags/v1.8.10.tar.gz | tar -xzf - + cd erofs-utils-1.8.10 + + # Build and install erofs-utils + ./autogen.sh + ./configure --enable-lz4 --enable-fuse --with-uuid + make -j"$(nproc)" + sudo make install + sudo ldconfig + + # Clean up + cd - + rm -rf "$BUILD_DIR" + + # Verify installation + mkfs.erofs --version + + - name: Load EROFS kernel module + run: | + sudo modprobe erofs - name: Install containerd env: @@ -436,75 +449,93 @@ jobs: make binaries GO_BUILD_FLAGS="-mod=vendor" sudo -E PATH=$PATH make install - - run: sudo -E PATH=$PATH script/setup/install-gotestsum + - run: script/setup/install-gotestsum + - run: script/setup/install-teststat - name: Tests env: - GOPROXY: direct GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-unit-root-junit.xml + GOTESTSUM_JSONFILE: ${{github.workspace}}/test-unit-root-gotest.json run: | make test sudo -E PATH=$PATH make root-test + - run: if [ -f *-gotest.json ]; then echo '# Root Test' >> $GITHUB_STEP_SUMMARY; teststat -markdown *-gotest.json >> $GITHUB_STEP_SUMMARY; fi + if: always() + - run: script/test/test2annotation.sh *-gotest.json + if: always() - name: Integration 1 env: - GOPROXY: direct TEST_RUNTIME: ${{ matrix.runtime }} RUNC_FLAVOR: ${{ matrix.runc }} - ENABLE_CRI_SANDBOXES: ${{ matrix.enable_cri_sandboxes }} GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-serial-junit.xml + GOTESTSUM_JSONFILE: ${{github.workspace}}/test-integration-serial-gotest.json run: | extraflags="" [ "${RUNC_FLAVOR}" == "crun" ] && { extraflags="EXTRA_TESTFLAGS=-no-criu"; } sudo -E PATH=$PATH make integration ${extraflags} TESTFLAGS_RACE=-race + - run: if [ -f *-gotest.json ]; then echo '# Integration 1' >> $GITHUB_STEP_SUMMARY; teststat -markdown *-gotest.json >> $GITHUB_STEP_SUMMARY; fi + if: always() + - run: script/test/test2annotation.sh *-gotest.json + if: always() # Run the integration suite a second time. See discussion in github.com/containerd/containerd/pull/1759 - name: Integration 2 env: - GOPROXY: direct TEST_RUNTIME: ${{ matrix.runtime }} RUNC_FLAVOR: ${{ matrix.runc }} - ENABLE_CRI_SANDBOXES: ${{ matrix.enable_cri_sandboxes }} GOTESTSUM_JUNITFILE: ${{github.workspace}}/test-integration-parallel-junit.xml + GOTESTSUM_JSONFILE: ${{github.workspace}}/test-integration-parallel-gotest.json run: | extraflags="" [ "${RUNC_FLAVOR}" == "crun" ] && { extraflags="EXTRA_TESTFLAGS=-no-criu"; } sudo -E PATH=$PATH TESTFLAGS_PARALLEL=1 make integration ${extraflags} + - run: if [ -f *-gotest.json ]; then echo '# Integration 2' >> $GITHUB_STEP_SUMMARY; teststat -markdown *-gotest.json >> $GITHUB_STEP_SUMMARY; fi + if: always() + - run: script/test/test2annotation.sh *-gotest.json + if: always() - name: CRI Integration Test env: TEST_RUNTIME: ${{ matrix.runtime }} - ENABLE_CRI_SANDBOXES: ${{ matrix.enable_cri_sandboxes }} + CGROUP_DRIVER: ${{ matrix.cgroup_driver }} + RUNC_FLAVOR: ${{ matrix.runc }} run: | + cat /sys/fs/cgroup/cgroup.controllers + systemctl status + [ "${RUNC_FLAVOR}" == "crun" ] && { + export XDG_RUNTIME_DIR=/run/user/$(id -u) + } + runc --version CONTAINERD_RUNTIME=$TEST_RUNTIME make cri-integration - name: cri-tools critest env: TEST_RUNTIME: ${{ matrix.runtime }} - ENABLE_CRI_SANDBOXES: ${{ matrix.enable_cri_sandboxes }} + CGROUP_DRIVER: ${{ matrix.cgroup_driver }} run: | - BDIR="$(mktemp -d -p $PWD)" - - function cleanup() { - sudo pkill containerd || true - cat ${BDIR}/containerd-cri.log - sudo -E rm -rf ${BDIR} - } - trap cleanup EXIT - - mkdir -p ${BDIR}/{root,state} - cat > ${BDIR}/config.toml < ${BDIR}/containerd-cri.log & - sudo -E PATH=$PATH /usr/local/bin/ctr -a ${BDIR}/c.sock version - sudo -E PATH=$PATH critest --report-dir "${{github.workspace}}/critestreport" --runtime-endpoint=unix:///${BDIR}/c.sock --parallel=8 + env + sudo -E PATH=$PATH ./script/critest.sh "${{github.workspace}}/report" + + - name: Install tools + # The GitHub Actions image already has buildah and podman included. Not the + # ubuntu-24.04-arm images. buildah and podman is needed to convert the + # Kubernetes checkpoint archive to an OCI image. + # See contrib/checkpoint/checkpoint-restore-cri-test.sh + if: matrix.os == 'ubuntu-24.04-arm' + run: sudo apt-get install -y buildah podman + + - if: matrix.os != 'ubuntu-24.04-arm' + name: Checkpoint/Restore via CRI + env: + TEST_RUNTIME: ${{ matrix.runtime }} + CGROUP_DRIVER: ${{ matrix.cgroup_driver }} + run: | + env + sudo -E PATH=$PATH ./contrib/checkpoint/checkpoint-restore-cri-test.sh # Log the status of this VM to investigate issues like # https://github.com/containerd/containerd/issues/4969 @@ -515,36 +546,221 @@ jobs: mount df losetup -l - - uses: actions/upload-artifact@v2 + - name: Kernel Message + if: failure() + run: | + sudo lsmod + sudo dmesg -T -f kern + + - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 if: always() with: - name: TestResults ${{ matrix.runtime }} ${{matrix.runc}} + name: TestResults ${{ matrix.runtime }} ${{matrix.runc}} ${{ matrix.os }} ${{ matrix.cgroup_driver }} path: | *-junit.xml - ${{github.workspace}}/critestreport/*.xml + *-gotest.json + ${{github.workspace}}/report/*.xml + ${{github.workspace}}/report/*.log + + integration-vagrant: + name: Vagrant integration + runs-on: ubuntu-latest + timeout-minutes: 60 + needs: [project, linters, protos, man] + + strategy: + fail-fast: false + matrix: + include: + - box: fedora/43-cloud-base + cgroup_driver: cgroupfs + runc: runc + - box: fedora/43-cloud-base + cgroup_driver: systemd + runc: runc + - box: fedora/43-cloud-base + cgroup_driver: cgroupfs + runc: crun + - box: fedora/43-cloud-base + cgroup_driver: systemd + runc: crun + # We have to keep EL8 to test old glibc, cgroup, kernel, etc. + # The image was changed from rockylinux/8 to almalinux/8, + # as the former one no longer works: + # https://github.com/containerd/containerd/pull/10297 + - box: almalinux/8 + cgroup_driver: cgroupfs + runc: runc + - box: almalinux/8 + cgroup_driver: systemd + runc: runc + - box: almalinux/9 + cgroup_driver: cgroupfs + runc: runc + - box: almalinux/9 + cgroup_driver: systemd + runc: runc + - box: almalinux/10 + cgroup_driver: cgroupfs + runc: runc + - box: almalinux/10 + cgroup_driver: systemd + runc: runc + env: + BOX: ${{ matrix.box }} + CGROUP_DRIVER: ${{ matrix.cgroup_driver }} + RUNC_FLAVOR: ${{ matrix.runc }} + steps: + - name: Show the host info + run: | + set -x + uname -a + cat /etc/os-release + cat /proc/cpuinfo + free -mt + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + with: + path: /root/.vagrant.d + key: vagrant-${{ matrix.box }} + - name: Set up vagrant + run: | + # Canonical's Vagrant 2.2.19 dpkg cannot download Fedora 38 image: https://bugs.launchpad.net/vagrant/+bug/2017828 + # So we have to install Vagrant >= 2.3.1 from the upstream: https://github.com/opencontainers/runc/blob/v1.1.8/.cirrus.yml#L41-L49 + curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg + echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list + sudo sed -i 's/^Types: deb$/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources + sudo apt-get update + sudo apt-get install -y libvirt-daemon libvirt-daemon-system vagrant ovmf + # https://github.com/vagrant-libvirt/vagrant-libvirt/issues/1725#issuecomment-1454058646 + sudo cp /usr/share/OVMF/OVMF_VARS_4M.fd /var/lib/libvirt/qemu/nvram/ + sudo systemctl enable --now libvirtd + sudo apt-get build-dep -y ruby-libvirt + sudo apt-get install -y --no-install-recommends libxslt-dev libxml2-dev libvirt-dev ruby-bundler ruby-dev zlib1g-dev + sudo env VAGRANT_DISABLE_STRICT_DEPENDENCY_ENFORCEMENT=1 vagrant plugin install vagrant-libvirt + - name: Boot VM + run: | + if [ "$BOX" = "fedora/43-cloud-base" ]; then + # fedora/41-cloud-base seems the last version available in https://portal.cloud.hashicorp.com/vagrant/discover/fedora + # Download the box file with curl (with retry) to handle flaky Fedora mirrors + curl -fL --retry 5 --retry-delay 5 --retry-all-errors \ + --connect-timeout 30 --max-time 600 \ + -o /tmp/fedora43.box \ + https://download.fedoraproject.org/pub/fedora/linux/releases/43/Cloud/x86_64/images/Fedora-Cloud-Base-Vagrant-libvirt-43-1.6.x86_64.vagrant.libvirt.box + sudo vagrant box add fedora/43-cloud-base /tmp/fedora43.box + rm -f /tmp/fedora43.box + fi + sudo BOX=$BOX RUNC_FLAVOR=$RUNC_FLAVOR vagrant up --no-tty + - name: test-integration + run: sudo BOX=$BOX RUNC_FLAVOR=$RUNC_FLAVOR vagrant up --provision-with=selinux,install-runc,install-gotestsum,test-integration + - name: test-cri-integration + run: sudo BOX=$BOX CGROUP_DRIVER=$CGROUP_DRIVER RUNC_FLAVOR=$RUNC_FLAVOR vagrant up --provision-with=selinux,install-runc,install-gotestsum,test-cri-integration + - name: test-cri + run: sudo BOX=$BOX CGROUP_DRIVER=$CGROUP_DRIVER RUNC_FLAVOR=$RUNC_FLAVOR vagrant up --provision-with=selinux,install-runc,install-gotestsum,test-cri + - name: dump-dmesg + if: always() + run: sudo BOX=$BOX vagrant ssh -c "sudo dmesg -T -f kern" + + tests-cri-in-userns: + name: "CRI-in-UserNS" + + runs-on: ubuntu-latest + timeout-minutes: 40 + needs: [project, linters, protos, man] + + strategy: + fail-fast: false + matrix: + cgroup_driver: [cgroupfs, systemd] + + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - name: Set up cgroup v2 delegation + run: | + sudo mkdir -p /etc/systemd/system/user@.service.d + cat <> $GITHUB_STEP_SUMMARY; teststat -markdown *-gotest.json >> $GITHUB_STEP_SUMMARY; fi + if: always() + - run: script/test/test2annotation.sh *-gotest.json + if: always() + - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 if: always() with: name: TestResults MacOS path: | *-junit.xml + *-gotest.json + + node-e2e: + name: E2E + uses: ./.github/workflows/node-e2e.yml + + # Currently Github actions UI supports no masks to mark matrix jobs as required to pass status checks. + # This means that every time version of Go, containerd, or OS is changed, a corresponding job should + # be added to the list of required checks. Which is not very convenient. + # To workaround this, a special job is added to report statuses of all other jobs, with fixed title. + # So it needs to be added to the list of required checks only once. + # + # See https://github.com/orgs/community/discussions/26822 + results: + name: Report required job statuses + runs-on: ubuntu-latest + # List job dependencies which are required to pass status checks in order to be merged via merge queue. + needs: [linters, project, protos, binaries, integration-linux, integration-windows, tests-cri-in-userns, tests-mac-os, node-e2e] + if: ${{ always() }} + steps: + - run: exit 1 + if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 5e9f3a76a6fd..a857b2c9a900 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -4,40 +4,46 @@ on: push: branches: - main - - 'release/**' + - "release/**" pull_request: branches: - main - - 'release/**' + - "release/**" + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read jobs: CodeQL-Build: - + if: github.repository == 'containerd/containerd' + permissions: + actions: read # for github/codeql-action/init to get workflow details + contents: read # for actions/checkout to fetch code + security-events: write # for github/codeql-action/analyze to upload SARIF results strategy: fail-fast: false - # CodeQL runs on ubuntu-latest, windows-latest, and macos-latest runs-on: ubuntu-latest + timeout-minutes: 30 + steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - uses: actions/setup-go@v2 - with: - go-version: 1.18.4 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - # Override language selection by uncommenting this and choosing your languages - # with: - # languages: go, javascript, csharp, python, cpp, java - - - run: | - sudo apt-get install -y libseccomp-dev libbtrfs-dev - make - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Checkout repository + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + + - uses: ./.github/actions/install-go + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + # Override language selection by uncommenting this and choosing your languages + # with: + # languages: go, javascript, csharp, python, cpp, java + + - run: | + sudo apt-get install -y libseccomp-dev + make + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml index 2bfff59f2bfc..44eee955da4b 100644 --- a/.github/workflows/fuzz.yml +++ b/.github/workflows/fuzz.yml @@ -1,30 +1,32 @@ name: Fuzzing on: [pull_request] +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + jobs: # Run all fuzzing tests. Some of them use Go 1.18's testing.F. # Others use https://github.com/AdaLogics/go-fuzz-headers. ci_fuzz: name: CI Fuzz + if: github.repository == 'containerd/containerd' runs-on: ubuntu-latest + timeout-minutes: 60 steps: - name: Build Fuzzers id: build - uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master + uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@c8c1b257db4da92299bdf9fd058fff1bb008b2ad # ubuntu-24-04 support with: oss-fuzz-project-name: 'containerd' - dry-run: true language: go - continue-on-error: true - name: Run Fuzzers - uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master + uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@c8c1b257db4da92299bdf9fd058fff1bb008b2ad # ubuntu-24-04 support with: oss-fuzz-project-name: 'containerd' fuzz-seconds: 300 - dry-run: true language: go continue-on-error: true - name: Upload Crash - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 if: failure() && steps.build.outcome == 'success' with: name: artifacts @@ -34,10 +36,10 @@ jobs: # runnable with go test -fuzz. go_test_fuzz: name : go test -fuzz + if: github.repository == 'containerd/containerd' runs-on: ubuntu-latest + timeout-minutes: 30 steps: - - uses: actions/setup-go@v2 - with: - go-version: 1.18 - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: ./.github/actions/install-go - run: script/go-test-fuzz.sh diff --git a/.github/workflows/images.yml b/.github/workflows/images.yml index 688bd89bdcc4..4689f3c2c79e 100644 --- a/.github/workflows/images.yml +++ b/.github/workflows/images.yml @@ -9,11 +9,15 @@ on: image: description: "Target image name (override)" +permissions: # added using https://github.com/step-security/secure-workflows + contents: read jobs: mirror: name: "Mirror Image" runs-on: ubuntu-latest + timeout-minutes: 30 + permissions: packages: write @@ -22,14 +26,12 @@ jobs: working-directory: src/github.com/containerd/containerd steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: path: src/github.com/containerd/containerd + - uses: ./src/github.com/containerd/containerd/.github/actions/install-go + - name: Set env shell: bash run: | @@ -38,7 +40,6 @@ jobs: - name: Install containerd dependencies env: - RUNC_FLAVOR: ${{ matrix.runc }} GOFLAGS: -modcacherw run: | sudo apt-get install -y gperf diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml new file mode 100644 index 000000000000..89a07662cea1 --- /dev/null +++ b/.github/workflows/links.yml @@ -0,0 +1,30 @@ +name: Links + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # Every day at midnight + pull_request: + paths: + - ".github/workflows/links.yml" + +permissions: + contents: read + +jobs: + check: + runs-on: ubuntu-latest + if: github.repository == 'containerd/containerd' + name: lychee + timeout-minutes: 15 + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + + - uses: lycheeverse/lychee-action@a8c4c7cb88f0c7386610c35eb25108e448569cb0 # v2.7.0 + with: + # Fail action on broken links + fail: true + args: --exclude-path vendor --exclude-path releases --timeout 30 --no-progress './**/*.md' + format: markdown + # Write GitHub job summary + jobSummary: true diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index c81053c4f482..12d7310e3820 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,29 +1,31 @@ name: Nightly on: schedule: - - cron: '0 0 * * *' # Every day at midnight + - cron: "0 0 * * *" # Every day at midnight pull_request: paths: - - '.github/workflows/nightly.yml' + - ".github/workflows/nightly.yml" + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read jobs: linux: name: Linux runs-on: ubuntu-latest + timeout-minutes: 30 defaults: run: working-directory: src/github.com/containerd/containerd steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: path: src/github.com/containerd/containerd + - uses: ./src/github.com/containerd/containerd/.github/actions/install-go + - name: Set env shell: bash run: | @@ -36,14 +38,6 @@ jobs: - name: Install dependencies run: | - sudo add-apt-repository "deb [arch=arm64,s390x,ppc64el,riscv64] http://ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc) main" || true - sudo add-apt-repository "deb [arch=arm64,s390x,ppc64el,riscv64] http://ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc)-updates main" || true - - sudo dpkg --add-architecture arm64 - sudo dpkg --add-architecture s390x - sudo dpkg --add-architecture ppc64el - sudo dpkg --add-architecture riscv64 - sudo apt-get update || true sudo apt-get install -y \ @@ -51,16 +45,6 @@ jobs: crossbuild-essential-s390x \ crossbuild-essential-ppc64el \ crossbuild-essential-riscv64 \ - libseccomp-dev:amd64 \ - libseccomp-dev:arm64 \ - libseccomp-dev:s390x \ - libseccomp-dev:ppc64el \ - libseccomp-dev:riscv64 \ - libbtrfs-dev:amd64 \ - libbtrfs-dev:arm64 \ - libbtrfs-dev:s390x \ - libbtrfs-dev:ppc64el \ - libbtrfs-dev:riscv64 - name: Build amd64 env: @@ -115,31 +99,31 @@ jobs: # - name: Upload artifacts (linux_amd64) - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: linux_amd64 path: src/github.com/containerd/containerd/bin_amd64 - name: Upload artifacts (linux_arm64) - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: linux_arm64 path: src/github.com/containerd/containerd/bin_arm64 - name: Upload artifacts (linux_s390x) - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: linux_s390x path: src/github.com/containerd/containerd/bin_s390x - name: Upload artifacts (linux_ppc64le) - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: linux_ppc64le path: src/github.com/containerd/containerd/bin_ppc64le - name: Upload artifacts (linux_riscv64) - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: linux_riscv64 path: src/github.com/containerd/containerd/bin_riscv64 @@ -147,20 +131,19 @@ jobs: windows: name: Windows runs-on: windows-latest + timeout-minutes: 30 defaults: run: working-directory: src/github.com/containerd/containerd steps: - - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: path: src/github.com/containerd/containerd + - uses: ./src/github.com/containerd/containerd/.github/actions/install-go + - name: Set env shell: bash run: | @@ -175,7 +158,7 @@ jobs: make binaries - name: Upload artifacts (windows_amd64) - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: windows_amd64 path: src/github.com/containerd/containerd/bin/ diff --git a/.github/workflows/node-e2e.yml b/.github/workflows/node-e2e.yml new file mode 100644 index 000000000000..9351ee3599f8 --- /dev/null +++ b/.github/workflows/node-e2e.yml @@ -0,0 +1,135 @@ +name: E2E +on: + workflow_call: + +permissions: + contents: read + +jobs: + node-e2e-k8s: + name: Kubernetes Node + runs-on: ubuntu-24.04 + timeout-minutes: 90 + steps: + - name: Clean up disk space + run: | + df -h + sudo rm -rf /usr/share/dotnet \ + /usr/local/graalvm \ + /usr/local/.ghcup \ + /usr/local/share/powershell \ + /usr/local/share/chromium \ + /usr/local/share/firefox \ + /usr/local/lib/android \ + /usr/local/lib/node_modules \ + /usr/local/share/podman \ + /usr/local/aws-cli/ \ + /usr/local/lib/heroku \ + /usr/local/rustup \ + /usr/local/cargo \ + /usr/local/google-cloud-sdk + df -h + + - name: Checkout containerd + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + path: src/github.com/containerd/containerd + fetch-depth: 0 + + - name: Checkout Kubernetes + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + repository: kubernetes/kubernetes + path: src/k8s.io/kubernetes + fetch-depth: 0 + + - name: Install Go + uses: ./src/github.com/containerd/containerd/.github/actions/install-go + + - name: Set Up Environment + run: | + set -e -x + # Disable swap to allow kubelet to start. + sudo swapoff -a + sudo apt-get update + sudo apt-get install -y gperf build-essential pkg-config + echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV + echo "${{ github.workspace }}/bin" >> $GITHUB_PATH + + - name: Build and Install containerd + working-directory: ./src/github.com/containerd/containerd + run: | + set -e -x + script/setup/install-seccomp + script/setup/install-runc + script/setup/install-cni $(grep containernetworking/plugins go.mod | awk '{print $2}') + make binaries GO_BUILD_FLAGS="-mod=vendor" + sudo make install + + - name: Configure and Start containerd + run: | + set -e -x + # Stop and disable pre-existing containerd service to ensure a clean state. + if sudo systemctl is-active --quiet containerd; then + sudo systemctl stop containerd + fi + if sudo systemctl is-enabled --quiet containerd; then + sudo systemctl disable containerd + fi + + sudo mkdir -p /etc/containerd + sudo tee /etc/containerd/config.toml > /dev/null < "${ARTIFACT_DIR}/kubelet.log" + fi + sudo journalctl -u containerd --no-pager > "${ARTIFACT_DIR}/containerd.log" + + - name: Upload Log Artifacts + if: failure() + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + with: + name: e2e-logs + path: ./_artifacts/ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9afcefadd646..2d636353e5e7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,27 +1,41 @@ on: push: + branches: + - main + - "release/**" tags: - - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 + - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10 + pull_request: + branches: + - main + - "release/**" -name: Containerd Release +name: Release + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read jobs: check: name: Check Signed Tag - runs-on: ubuntu-18.04 + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest timeout-minutes: 5 outputs: stringver: ${{ steps.contentrel.outputs.stringver }} steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: ref: ${{ github.ref }} path: src/github.com/containerd/containerd - name: Check signature run: | + # git tag -v requires an allowedSignersFile to be configured and exist for ssh signature verification + touch ${{ runner.temp }}/empty-allowedSignersFile + git config --global gpg.ssh.allowedSignersFile ${{ runner.temp }}/empty-allowedSignersFile releasever=${{ github.ref }} releasever="${releasever#refs/tags/}" TAGCHECK=$(git tag -v ${releasever} 2>&1 >/dev/null) || @@ -38,46 +52,45 @@ jobs: id: contentrel run: | RELEASEVER=${{ github.ref }} - echo "::set-output name=stringver::${RELEASEVER#refs/tags/v}" + echo "stringver=${RELEASEVER#refs/tags/v}" >> $GITHUB_OUTPUT git tag -l ${RELEASEVER#refs/tags/} -n20000 | tail -n +3 | cut -c 5- >release-notes.md working-directory: src/github.com/containerd/containerd - name: Save release notes - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: containerd-release-notes path: src/github.com/containerd/containerd/release-notes.md build: name: Build Release Binaries - runs-on: ${{ matrix.os }} - needs: [check] - timeout-minutes: 10 + runs-on: ubuntu-latest + timeout-minutes: 30 strategy: matrix: - os: [ubuntu-18.04] - platform: - - linux/amd64 - - linux/arm64 - - linux/ppc64le - - linux/riscv64 - - windows/amd64 + include: + - dockerfile-ubuntu: 22.04 + dockerfile-platform: linux/amd64 + - dockerfile-ubuntu: 22.04 + dockerfile-platform: linux/arm64 + - dockerfile-ubuntu: 22.04 + dockerfile-platform: linux/ppc64le + - dockerfile-ubuntu: 22.04 + dockerfile-platform: linux/s390x + - dockerfile-ubuntu: 22.04 + dockerfile-platform: linux/riscv64 + - dockerfile-ubuntu: 22.04 + dockerfile-platform: windows/amd64 steps: - - name: Install Go - uses: actions/setup-go@v2 - with: - go-version: '1.18.4' - - name: Set env + - name: Set RELEASE_VER + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') shell: bash - env: - MOS: ${{ matrix.os }} run: | releasever=${{ github.ref }} releasever="${releasever#refs/tags/}" echo "RELEASE_VER=${releasever}" >> $GITHUB_ENV - echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV - name: Checkout containerd - uses: actions/checkout@v2 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: # Intentionally use github.repository instead of containerd/containerd to # make this action runnable on forks. @@ -87,10 +100,10 @@ jobs: path: src/github.com/containerd/containerd - name: Setup buildx instance - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 with: use: true - - uses: crazy-max/ghaction-github-runtime@v1 # sets up needed vars for caching to github + - uses: crazy-max/ghaction-github-runtime@3cb05d89e1f492524af3d41a1c98c83bc3025124 # v3.1.0 - name: Make shell: bash run: | @@ -102,33 +115,44 @@ jobs: export PREFIX_LEN=12 BUILD_ARGS="--build-arg GATEWAY --build-arg PREFIX_LEN" fi - docker buildx build ${cache} --build-arg RELEASE_VER --build-arg GO_VERSION ${BUILD_ARGS} -f .github/workflows/release/Dockerfile --platform=${PLATFORM} -o releases/ . + docker buildx build ${cache} --build-arg RELEASE_VER --build-arg UBUNTU_VERSION=${{ matrix.dockerfile-ubuntu }} ${BUILD_ARGS} -f .github/workflows/release/Dockerfile --platform=${PLATFORM} -o releases/ . echo PLATFORM_CLEAN=${PLATFORM/\//-} >> $GITHUB_ENV - # Remove symlinks since we don't want these in the release Artifacts - find ./releases/ -maxdepth 1 -type l | xargs rm + # Remove symlinks since we don't want these in the release Artifacts (if any) + find ./releases/ -maxdepth 1 -type l | xargs rm -f working-directory: src/github.com/containerd/containerd env: - GO_VERSION: '1.18.4' - PLATFORM: ${{ matrix.platform }} + PLATFORM: ${{ matrix.dockerfile-platform }} - name: Save Artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: release-tars-${{env.PLATFORM_CLEAN}} path: src/github.com/containerd/containerd/releases/*.tar.gz* release: name: Create containerd Release - runs-on: ubuntu-18.04 + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + permissions: + contents: write + id-token: write + attestations: write + runs-on: ubuntu-latest timeout-minutes: 10 needs: [build, check] steps: - name: Download builds and release notes - uses: actions/download-artifact@v2 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: path: builds + - name: Attest Artifacts + id: attest + uses: actions/attest-build-provenance@96278af6caaf10aea03fd8d33a09a777ca52d62f # v3.2.0 + with: + subject-path: ./builds/release-tars-**/*.tar.gz + - name: Rename attestation artifact + run: mv ${{ steps.attest.outputs.bundle-path }} containerd-${{ needs.check.outputs.stringver }}-attestation.intoto.jsonl - name: Create Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0 with: token: ${{ secrets.GITHUB_TOKEN }} fail_on_unmatched_files: true @@ -138,3 +162,5 @@ jobs: body_path: ./builds/containerd-release-notes/release-notes.md files: | builds/release-tars-**/* + containerd-*-attestation.intoto.jsonl + make_latest: true diff --git a/.github/workflows/release/Dockerfile b/.github/workflows/release/Dockerfile index de0439e43a85..3965ec699ed7 100644 --- a/.github/workflows/release/Dockerfile +++ b/.github/workflows/release/Dockerfile @@ -14,18 +14,20 @@ ARG UBUNTU_VERSION=22.04 ARG BASE_IMAGE=ubuntu:${UBUNTU_VERSION} -ARG GO_VERSION +ARG GO_VERSION=1.24.13 ARG GO_IMAGE=golang:${GO_VERSION} FROM --platform=$BUILDPLATFORM $GO_IMAGE AS go -FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.1.0@sha256:76a8510b1798f66fcc87e7ec2f4684aa1b16756df2a397ec307b9efb6023f6c5 AS xx +FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1@sha256:923441d7c25f1e2eb5789f82d987693c47b8ed987c4ab3b075d6ed2b5d6779a3 AS xx FROM --platform=$BUILDPLATFORM ${BASE_IMAGE} AS base COPY --from=xx / / SHELL ["/bin/bash", "-xec"] +ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y dpkg-dev git make pkg-config ARG TARGETPLATFORM -RUN xx-apt-get install -y libseccomp-dev libbtrfs-dev gcc +# gcc is needed for github.com/containerd/btrfs/v2 +RUN xx-apt-get install -y gcc ENV PATH=/usr/local/go/bin:$PATH ENV GOPATH=/go ENV CGO_ENABLED=1 @@ -47,13 +49,13 @@ RUN \ --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg \ export CC=$(xx-info)-gcc && xx-go --wrap && \ - make release cri-release cri-cni-release && \ + make release static-release && \ for f in $(find bin -executable -type f); do xx-verify $f; done # check git working tree after build RUN \ export GIT_STATUS_OUTPUT=$(git status --porcelain) && \ - test -z $GIT_STATUS_OUTPUT || (echo $GIT_STATUS_OUTPUT && exit 1) + test -z $GIT_STATUS_OUTPUT || (echo "repository contains uncommitted changes" && exit 1) FROM scratch AS release COPY --from=target /go/src/github.com/containerd/containerd/releases/ / diff --git a/.github/workflows/release/Dockerfile.dockerignore b/.github/workflows/release/Dockerfile.dockerignore new file mode 100644 index 000000000000..c553fed57faa --- /dev/null +++ b/.github/workflows/release/Dockerfile.dockerignore @@ -0,0 +1,19 @@ +# Exclude files that may cause cache-busts. These are generally expected +# to be in a global .gitignore, but still can cause the build-cache to +# be invalidated. +**/.DS_Store + +# exclusions below are copied from .gitignore at the root of the repository +# when updating, consider updating .gitignore accordingly. + +/bin/ +/man/ +coverage.txt +profile.out +containerd.test +_site/ +# Allow repeated builds without copying back previous builds +releases/*.tar.gz +releases/*.tar.gz.sha256sum +_output/ +.vagrant/ diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml new file mode 100644 index 000000000000..9a4c45209dd8 --- /dev/null +++ b/.github/workflows/scorecards.yml @@ -0,0 +1,54 @@ +name: Scorecards supply-chain security +on: + # Only the default branch is supported. + branch_protection_rule: + schedule: + - cron: '41 0 * * 1' + push: + branches: [ "main" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecards analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Used to receive a badge. + id-token: write + + steps: + - name: "Checkout code" + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # tag=v6.0.1 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # tag=v2.4.3 + with: + results_file: results.sarif + results_format: sarif + + # Publish the results for public repositories to enable scorecard badges. For more details, see + # https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories, `publish_results` will automatically be set to `false`, regardless + # of the value entered here. + publish_results: false + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # tag=v6.0.0 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # tag=v4.32.2 + with: + sarif_file: results.sarif diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 000000000000..0c3beea48fc3 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,40 @@ +name: 'Close stale issues and PRs' +on: + schedule: + - cron: "0 0 * * *" # Every day at midnight + pull_request: + paths: + - '.github/workflows/stale.yml' + +permissions: read-all + +jobs: + stale: + # Prevents triggering on forks or other repos + if: github.repository == 'containerd/containerd' + runs-on: ubuntu-latest + + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1 + # All stale bot options: https://github.com/actions/stale#all-options + with: + # Idle number of days before marking issues/PRs stale + days-before-stale: 90 + # Idle number of days before closing stale issues/PRs + days-before-close: 7 + # Only issues/PRs with ANY of these labels are checked + any-of-labels: 'status/more-info-needed,status/needs-update,needs-rebase' + # Comment on the staled issues + stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. This issue will be closed in 7 days unless new comments are made or the stale label is removed.' + # Comment on the staled PRs + stale-pr-message: 'This PR is stale because it has been open 90 days with no activity. This PR will be closed in 7 days unless new comments are made or the stale label is removed.' + # Comment on the staled issues while closed + close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.' + # Comment on the staled PRs while closed + close-pr-message: 'This PR was closed because it has been stalled for 7 days with no activity.' + # Enable dry-run when changing this file from a PR. + debug-only: github.event_name == 'pull_request' diff --git a/.github/workflows/windows-hyperv-periodic-trigger.yml b/.github/workflows/windows-hyperv-periodic-trigger.yml new file mode 100644 index 000000000000..dd7e6639ac79 --- /dev/null +++ b/.github/workflows/windows-hyperv-periodic-trigger.yml @@ -0,0 +1,32 @@ +# Workflow intended to periodically run the Windows Hyper-V Integration test workflow. + +name: Windows Hyper-V Periodic Tests + +on: + workflow_dispatch: + schedule: + - cron: "0 1 * * *" + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + +jobs: + + triggerWinIntegration: + # NOTE: the following permissions are required by `google-github-actions/auth`: + permissions: + contents: 'read' + id-token: 'write' + if: github.repository == 'containerd/containerd' + # NOTE(aznashwan, 11/24/21): GitHub actions do not currently support referencing + # or evaluating any kind of variables in the `uses` clause, but this will + # ideally be added in the future in which case the hardcoded reference to the + # upstream containerd repository should be replaced with the following to + # potentially allow contributors to enable periodic Windows tests on forks as well: + # uses: "${{ github.repository }}/.github/workflows/windows-hyperv-periodic.yml@${{ github.ref_name }}" + uses: containerd/containerd/.github/workflows/windows-hyperv-periodic.yml@main + secrets: + AZURE_SUB_ID: "${{ secrets.AZURE_SUB_ID }}" + AZURE_CREDS: "${{ secrets.AZURE_CREDS }}" + GCP_SERVICE_ACCOUNT: "${{ secrets.GCP_SERVICE_ACCOUNT }}" + GCP_WORKLOAD_IDENTITY_PROVIDER: "${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}" diff --git a/.github/workflows/windows-hyperv-periodic.yml b/.github/workflows/windows-hyperv-periodic.yml new file mode 100644 index 000000000000..0abdd7702a98 --- /dev/null +++ b/.github/workflows/windows-hyperv-periodic.yml @@ -0,0 +1,351 @@ +# Workflow intended to run containerd integration tests on Windows using Hyper-V Containers. + +name: Windows Hyper-V Integration Tests + +on: + workflow_dispatch: + workflow_call: + secrets: + AZURE_SUB_ID: + required: true + AZURE_CREDS: + required: true + GCP_SERVICE_ACCOUNT: + required: true + GCP_WORKLOAD_IDENTITY_PROVIDER: + required: true + +env: + AZURE_DEFAULT_LOCATION: westeurope + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUB_ID }} + AZURE_DEFAULT_VM_SIZE: Standard_D2s_v3 + PASSWORD: Passw0rdAdmin # temp for testing, will be generated + DEFAULT_ADMIN_USERNAME: azureuser + SSH_OPTS: "-o ServerAliveInterval=20 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" + REMOTE_VM_BIN_PATH: "c:\\containerd\\bin" + BUSYBOX_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/busybox:1.29-2" + RESOURCE_CONSUMER_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/resource-consumer:1.10" + WEBSERVER_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/nginx:1.14-2" + HCSSHIM_TAG: "master" + +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + +jobs: + winIntegration: + # NOTE: the following permissions are required by `google-github-actions/auth`: + permissions: + contents: 'read' + id-token: 'write' + strategy: + # NOTE(aznashwan): this will permit all other jobs from the matrix to finish and + # upload their results even if one has a failing non-test-task: + # (e.g. hitting resource limits in the `AZTestVMCreate` task) + fail-fast: false + matrix: + win_ver: [ltsc2022] + include: + - win_ver: ltsc2022 + AZURE_IMG: "MicrosoftWindowsServer:WindowsServer:2022-datacenter-smalldisk-g2:latest" + AZURE_RESOURCE_GROUP: ctrd-integration-ltsc2022-${{ github.run_id }} + GOOGLE_BUCKET: "containerd-integration/logs/windows-ltsc2022-hyperv/" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + + - name: Install required packages + run: | + sudo apt-get install xmlstarlet -y + + - name: PrepareArtifacts + run: | + STARTED_TIME=$(date +%s) + LOGS_DIR=$HOME/$STARTED_TIME + echo "STARTED_TIME=$STARTED_TIME" >> $GITHUB_ENV + echo "LOGS_DIR=$LOGS_DIR" >> $GITHUB_ENV + + echo "VM_INTEGRATION_LOGFILE=/c/Logs/integration.log" >> $GITHUB_ENV + echo "VM_CRI_INTEGRATION_LOGFILE=/c/Logs/cri-integration.log" >> $GITHUB_ENV + + mkdir -p $LOGS_DIR/artifacts + jq -n --arg node temp --arg timestamp $STARTED_TIME '$timestamp|tonumber|{timestamp:.,$node}' > $LOGS_DIR/started.json + + - name: Generate ssh key pair + run: | + mkdir -p $HOME/.ssh/ + ssh-keygen -t rsa -b 4096 -C "ci@containerd.com" -f $HOME/.ssh/id_rsa -q -N "" + echo "SSH_PUB_KEY=$(cat ~/.ssh/id_rsa.pub)" >> $GITHUB_ENV + + - name: AZLogin + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 + with: + creds: ${{ secrets.AZURE_CREDS }} + + - name: AZResourceGroupCreate + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 + with: + inlinescript: | + az group create -n ${{ matrix.AZURE_RESOURCE_GROUP }} -l ${{ env.AZURE_DEFAULT_LOCATION }} --tags creationTimestamp=$(date -u '+%Y-%m-%dT%H:%M:%SZ') + + - name: AZTestVMCreate + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 + with: + inlinescript: | + DETAILS=$(az vm create -n winTestVM --admin-username ${{ env.DEFAULT_ADMIN_USERNAME }} --admin-password ${{ env.PASSWORD }} --image ${{ matrix.AZURE_IMG }} -g ${{ matrix.AZURE_RESOURCE_GROUP }} --nsg-rule SSH --size ${{ env.AZURE_DEFAULT_VM_SIZE }} --public-ip-sku Standard -o json) + PUB_IP=$(echo $DETAILS | jq -r .publicIpAddress) + if [ "$PUB_IP" == "null" ] + then + RETRY=0 + while [ "$PUB_IP" == "null" ] || [ $RETRY -le 5 ] + do + sleep 5 + PUB_IP=$(az vm show -d -g ${{ matrix.AZURE_RESOURCE_GROUP }} -n winTestVM -o json --query publicIps | jq -r) + RETRY=$(( $RETRY + 1 )) + done + fi + + if [ "$PUB_IP" == "null" ] + then + echo "failed to fetch public IP" + exit 1 + fi + echo "VM_PUB_IP=$PUB_IP" >> $GITHUB_ENV + + - name: EnableAZVMSSH + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 + with: + inlinescript: | + az vm run-command invoke --command-id RunPowerShellScript -n winTestVM -g ${{ matrix.AZURE_RESOURCE_GROUP }} --scripts @$GITHUB_WORKSPACE/script/setup/enable_ssh_windows.ps1 --parameters 'SSHPublicKey=${{ env.SSH_PUB_KEY }}' + + - name: TestSSHConnection + run: | + if ! ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "hostname"; + then + exit 1 + fi + + - name: InstallAdditionalFeaturesWS + run: | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "powershell.exe -command { Install-WindowsFeature -Name 'Containers' }" + # NOTE(aznashwan): the images need Hyper-V to be explicitly enabled: + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "powershell.exe -command { Install-WindowsFeature -Name Hyper-V -IncludeAllSubFeature -IncludeManagementTools }" + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "shutdown.exe /r /t 0" + + - name: WaitForVMToRestart + timeout-minutes: 5 + run: | + # give the vm 30 seconds to actually stop. SSH server might actually respond while server is shutting down. + sleep 30 + while [ ! $( ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "hostname") ]; + do + echo "Unable to connect to azurevm" + done + echo "Connection reestablished. VM restarted succesfully." + + - name: CreateNatNetwork + # NOTE: creating the NAT network leads to temporary network outage on 2019 with Hyper-V. + continue-on-error: true + run: | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "powershell.exe -command { curl.exe -L 'https://raw.githubusercontent.com/microsoft/SDN/master/Kubernetes/windows/hns.psm1' -o hns.psm1 }" + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "powershell.exe -command { Import-Module .\hns.psm1 ; New-HnsNetwork -Type NAT -Name nat -AddressPrefix 172.19.208.0/20 -Gateway 172.19.208.1 }" + + - name: EnsureNatNetworkExists + run: | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} 'powershell.exe -command { Import-Module .\hns.psm1; if ([string]::IsNullOrWhiteSpace($(Get-HnsNetwork -Detailed))) { echo "No HNS network named nat!"; exit 1 } }' + + - name: PrepareTestingEnv + run: | + scp -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} $GITHUB_WORKSPACE/script/setup/prepare_env_windows.ps1 azureuser@${{ env.VM_PUB_IP }}:/prepare_env_windows.ps1 + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "c:\\prepare_env_windows.ps1" + + - name: MakeContainerDBins + run: | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "git clone http://github.com/containerd/containerd c:\\containerd " + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "cd c:\containerd ; make binaries" + + - name: BuildHcsshim + run: | + # NOTE(aznashwan, 6/6/22): need to use tip of HCSSHIM for the following: + # https://github.com/microsoft/hcsshim/pull/1388 + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} ${{ env.DEFAULT_ADMIN_USERNAME }}@${{ env.VM_PUB_IP }} "git clone http://github.com/Microsoft/hcsshim c:\containerd\hcsshim" + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} ${{ env.DEFAULT_ADMIN_USERNAME }}@${{ env.VM_PUB_IP }} "cd c:\containerd\hcsshim; git fetch --tags origin $HCSSHIM_TAG ; \ + git checkout $HCSSHIM_TAG ; go build -mod=vendor -o ${{ env.REMOTE_VM_BIN_PATH }}\containerd-shim-runhcs-v1.exe .\cmd\containerd-shim-runhcs-v1" + + - name: RunIntegrationTests + id: RunIntegrationTests + # NOTE(aznashwan): this is set to continue-on-error to allow the workflow to run until + # the reports are converted/uploaded to GCloud so as to show up on testgrid.k8s.io too. + continue-on-error: true + run: | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -s" << EOF + cd /c/containerd + export EXTRA_TESTFLAGS="-timeout=20m" + export USE_HYPERV=1 + set -o pipefail + make integration | tee ${{ env.VM_INTEGRATION_LOGFILE }} + EOF + echo 'SUCCEEDED=1' >> $GITHUB_OUTPUT + + - name: PrepareRepoList + run: | + cat > containerd-hyperv-config.toml << EOF + version = 2 + + [plugins."io.containerd.grpc.v1.cri".containerd] + default_runtime_name = "runhcs-wcow-hypervisor" + + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runhcs-wcow-hypervisor] + base_runtime_spec = "" + cni_conf_dir = "" + cni_max_conf_num = 0 + container_annotations = [] + pod_annotations = [] + privileged_without_host_devices = false + runtime_engine = "" + runtime_path = "" + runtime_root = "" + runtime_type = "io.containerd.runhcs.v1" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runhcs-wcow-hypervisor.options] + Debug = true + DebugType = 2 + SandboxPlatform = "windows/amd64" + SandboxIsolation = 1 + EOF + + cat > repolist.toml << EOF + busybox = "${{ env.BUSYBOX_TESTING_IMAGE_REF }}" + ResourceConsumer = "${{ env.RESOURCE_CONSUMER_TESTING_IMAGE_REF }}" + EOF + + cat > cri-test-images.yaml << EOF + defaultTestContainerImage: ${{ env.BUSYBOX_TESTING_IMAGE_REF }} + webServerTestImage: ${{ env.WEBSERVER_TESTING_IMAGE_REF }} + EOF + + scp -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} repolist.toml azureuser@${{ env.VM_PUB_IP }}:c:/repolist.toml + scp -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} cri-test-images.yaml azureuser@${{ env.VM_PUB_IP }}:c:/cri-test-images.yaml + scp -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} containerd-hyperv-config.toml azureuser@${{ env.VM_PUB_IP }}:c:/containerd-hyperv-config.toml + + # NOTE(aznashwan): in-tree integration tests will need some updates to on + # Hyper-V containers so we skip this for now: + - name: RunCRIIntegrationTests + id: RunCRIIntegrationTests + # NOTE(aznashwan): this is set to continue-on-error to allow the workflow to run until + # the reports are converted/uploaded to GCloud so as to show up on testgrid.k8s.io too. + continue-on-error: true + run: | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -s" <> $GITHUB_OUTPUT + + - name: GetCritestRepo + run: | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "git clone https://github.com/kubernetes-sigs/cri-tools c:/cri-tools" + + - name: BuildCritest + run: | + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -c 'cd /c/cri-tools && make critest'" + + - name: RunCritest + id: RunCritest + # NOTE(aznashwan): this is set to continue-on-error to allow the workflow to run until + # the reports are converted/uploaded to GCloud so as to show up on testgrid.k8s.io too. + continue-on-error: true + run: | + # This test is exceedingly flaky only on ws2022 so skip for now to keep CI happy. + # Info: https://github.com/containerd/containerd/issues/6652 + SKIP="" + if [ '${{ matrix.win_ver }}' == 'ltsc2022' ];then + SKIP='-ginkgo.skip="runtime should support exec with tty=true and stdin=true"' + fi + + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "powershell.exe -command { C:\containerd\bin\containerd.exe --log-level=debug --config=c:/containerd-hyperv-config.toml --log-file=C:/logs/containerd.log --service-name containerd --register-service ; Set-Service containerd -StartupType Automatic; Start-Service containerd }" + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -s" <> $GITHUB_OUTPUT + + - name: PullLogsFromWinNode + run: | + # Generate JUnit reports from the stdouts of the tests: + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -c 'touch ${{ env.VM_INTEGRATION_LOGFILE }}; cat ${{ env.VM_INTEGRATION_LOGFILE }} | go-junit-report.exe > /c/Logs/junit_integration.xml'" + ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -c 'touch ${{ env.VM_CRI_INTEGRATION_LOGFILE }}; cat ${{ env.VM_CRI_INTEGRATION_LOGFILE }} | go-junit-report.exe > /c/Logs/junit_cri_integration.xml'" + + # Copy over all the JUnit reports: + scp -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }}:c:/Logs/*.xml ${{ env.LOGS_DIR }}/artifacts/ + for f in $(ls ${{ env.LOGS_DIR }}/artifacts/*.xml); do + xmlstarlet ed -d "/testsuites/testsuite/properties" $f > ${{ env.LOGS_DIR }}/$(basename $f) + mv ${{ env.LOGS_DIR }}/$(basename $f) $f + done + + - name: FinishJob + run: | + jq -n --arg result SUCCESS --arg timestamp $(date +%s) '$timestamp|tonumber|{timestamp:.,$result}' > ${{ env.LOGS_DIR }}/finished.json + echo "${{ env.STARTED_TIME }}" > ${{ github.workspace }}/latest-build.txt + + - name: AssignGcpCreds + id: AssignGcpCreds + run: | + echo 'GCP_SERVICE_ACCOUNT=${{ secrets.GCP_SERVICE_ACCOUNT }}' >> $GITHUB_OUTPUT + echo 'GCP_WORKLOAD_IDENTITY_PROVIDER=${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}' >> $GITHUB_OUTPUT + + - name: AuthGcp + uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0 + if: steps.AssignGcpCreds.outputs.GCP_SERVICE_ACCOUNT && steps.AssignGcpCreds.outputs.GCP_WORKLOAD_IDENTITY_PROVIDER + with: + service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }} + workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} + + - name: UploadJobReport + uses: google-github-actions/upload-cloud-storage@6397bd7208e18d13ba2619ee21b9873edc94427a # v3.0.0 + if: steps.AssignGcpCreds.outputs.GCP_SERVICE_ACCOUNT && steps.AssignGcpCreds.outputs.GCP_WORKLOAD_IDENTITY_PROVIDER + with: + path: ${{ github.workspace }}/latest-build.txt + destination: ${{ matrix.GOOGLE_BUCKET }} + parent: false + + - name: UploadLogsDir + uses: google-github-actions/upload-cloud-storage@6397bd7208e18d13ba2619ee21b9873edc94427a # v3.0.0 + if: steps.AssignGcpCreds.outputs.GCP_SERVICE_ACCOUNT && steps.AssignGcpCreds.outputs.GCP_WORKLOAD_IDENTITY_PROVIDER + with: + path: ${{ env.LOGS_DIR }} + destination: ${{ matrix.GOOGLE_BUCKET }}${{ env.STARTED_TIME}} + parent: false + + - name: Check all CI stages succeeded + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + script: | + const stepResults = { + RunIntegrationTests: "${{ steps.RunIntegrationTests.outputs.SUCCEEDED }}", + RunCRIIntegrationTests: "${{ steps.RunCRIIntegrationTests.outputs.SUCCEEDED }}", + RunCritest: "${{ steps.RunCritest.outputs.SUCCEEDED }}", + }; + let failedTasks = []; + for( [step, result] of Object.entries(stepResults) ) { + if (result != "1") { + failedTasks.push(step); + } + }; + if (failedTasks.length != 0) { + core.setFailed(`One or more CI stages have failed. Please review the outputs of the following stepts: ${failedTasks}.`); + }; + + - name: ResourceCleanup + if: always() + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 + with: + inlinescript: | + az group delete -g ${{ matrix.AZURE_RESOURCE_GROUP }} --yes diff --git a/.github/workflows/windows-periodic-trigger.yml b/.github/workflows/windows-periodic-trigger.yml index 302d4050ac00..48aad0965553 100644 --- a/.github/workflows/windows-periodic-trigger.yml +++ b/.github/workflows/windows-periodic-trigger.yml @@ -7,9 +7,16 @@ on: schedule: - cron: "0 1 * * *" +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + jobs: triggerWinIntegration: + # NOTE: the following permissions are required by `google-github-actions/auth`: + permissions: + contents: 'read' + id-token: 'write' if: github.repository == 'containerd/containerd' # NOTE(aznashwan, 11/24/21): GitHub actions do not currently support referencing # or evaluating any kind of variables in the `uses` clause, but this will diff --git a/.github/workflows/windows-periodic.yml b/.github/workflows/windows-periodic.yml index 2407d8e8293d..38f0cf34a76a 100644 --- a/.github/workflows/windows-periodic.yml +++ b/.github/workflows/windows-periodic.yml @@ -23,10 +23,12 @@ env: DEFAULT_ADMIN_USERNAME: azureuser SSH_OPTS: "-o ServerAliveInterval=20 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" REMOTE_VM_BIN_PATH: "c:\\containerd\\bin" - BUSYBOX_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/busybox:1.29-2" - RESOURCE_CONSUMER_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/resource-consumer:1.10" - WEBSERVER_TESTING_IMAGE_REF: "k8s.gcr.io/e2e-test-images/nginx:1.14-2" + BUSYBOX_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/busybox:1.29-2" + RESOURCE_CONSUMER_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/resource-consumer:1.10" + WEBSERVER_TESTING_IMAGE_REF: "registry.k8s.io/e2e-test-images/nginx:1.14-2" +permissions: # added using https://github.com/step-security/secure-workflows + contents: read jobs: winIntegration: @@ -40,19 +42,16 @@ jobs: # (e.g. hitting resource limits in the `AZTestVMCreate` task) fail-fast: false matrix: - win_ver: [ltsc2019, ltsc2022] + win_ver: [ltsc2022] include: - - win_ver: ltsc2019 - AZURE_IMG: "MicrosoftWindowsServer:WindowsServer:2019-Datacenter-with-Containers-smalldisk:17763.2565.220202" - AZURE_RESOURCE_GROUP: ctrd-integration-ltsc2019-${{ github.run_id }} - GOOGLE_BUCKET: "containerd-integration/logs/windows-ltsc2019/" - win_ver: ltsc2022 - AZURE_IMG: "MicrosoftWindowsServer:WindowsServer:2022-datacenter-smalldisk-g2:20348.524.220201" + AZURE_IMG: "MicrosoftWindowsServer:WindowsServer:2022-datacenter-smalldisk-g2:latest" AZURE_RESOURCE_GROUP: ctrd-integration-ltsc2022-${{ github.run_id }} GOOGLE_BUCKET: "containerd-integration/logs/windows-ltsc2022/" runs-on: ubuntu-latest + timeout-minutes: 90 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Install required packages run: | @@ -78,18 +77,18 @@ jobs: echo "SSH_PUB_KEY=$(cat ~/.ssh/id_rsa.pub)" >> $GITHUB_ENV - name: AZLogin - uses: azure/login@v1 + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 with: creds: ${{ secrets.AZURE_CREDS }} - name: AZResourceGroupCreate - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | az group create -n ${{ matrix.AZURE_RESOURCE_GROUP }} -l ${{ env.AZURE_DEFAULT_LOCATION }} --tags creationTimestamp=$(date -u '+%Y-%m-%dT%H:%M:%SZ') - name: AZTestVMCreate - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | DETAILS=$(az vm create -n winTestVM --admin-username ${{ env.DEFAULT_ADMIN_USERNAME }} --admin-password ${{ env.PASSWORD }} --image ${{ matrix.AZURE_IMG }} -g ${{ matrix.AZURE_RESOURCE_GROUP }} --nsg-rule SSH --size ${{ env.AZURE_DEFAULT_VM_SIZE }} --public-ip-sku Standard -o json) @@ -113,7 +112,7 @@ jobs: echo "VM_PUB_IP=$PUB_IP" >> $GITHUB_ENV - name: EnableAZVMSSH - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | az vm run-command invoke --command-id RunPowerShellScript -n winTestVM -g ${{ matrix.AZURE_RESOURCE_GROUP }} --scripts @$GITHUB_WORKSPACE/script/setup/enable_ssh_windows.ps1 --parameters 'SSHPublicKey=${{ env.SSH_PUB_KEY }}' @@ -125,13 +124,11 @@ jobs: exit 1 fi - - name: InstallContainerFeatureWS2022 - if: ${{ matrix.win_ver == 'ltsc2022' }} + - name: InstallContainerFeature run: | ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "powershell.exe -command { Install-WindowsFeature -Name 'Containers' -Restart }" - name: WaitForVMToRestart - if: ${{ matrix.win_ver == 'ltsc2022' }} timeout-minutes: 5 run: | # give the vm 30 seconds to actually stop. SSH server might actually respond while server is shutting down. @@ -142,8 +139,7 @@ jobs: done echo "Connection reestablished. VM restarted succesfully." - - name: CreateNatNetworkWS2022 - if: ${{ matrix.win_ver == 'ltsc2022' }} + - name: CreateNatNetwork run: | ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "powershell.exe -command { curl.exe -L 'https://raw.githubusercontent.com/microsoft/SDN/master/Kubernetes/windows/hns.psm1' -o hns.psm1 }" ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "powershell.exe -command { Import-Module .\hns.psm1 ; New-HnsNetwork -Type NAT -Name nat -AddressPrefix 172.19.208.0/20 -Gateway 172.19.208.1 }" @@ -170,7 +166,7 @@ jobs: set -o pipefail make integration | tee ${{ env.VM_INTEGRATION_LOGFILE }} EOF - echo '::set-output name=SUCCEEDED::1' + echo 'SUCCEEDED=1' >> $GITHUB_OUTPUT - name: PrepareRepoList run: | @@ -200,7 +196,7 @@ jobs: set -o pipefail make cri-integration | tee ${{ env.VM_CRI_INTEGRATION_LOGFILE }} EOF - echo '::set-output name=SUCCEEDED::1' + echo 'SUCCEEDED=1' >> $GITHUB_OUTPUT - name: GetCritestRepo run: | @@ -227,9 +223,9 @@ jobs: ssh -i $HOME/.ssh/id_rsa ${{ env.SSH_OPTS }} azureuser@${{ env.VM_PUB_IP }} "sh.exe -s" <> $GITHUB_OUTPUT - name: PullLogsFromWinNode run: | @@ -252,18 +248,18 @@ jobs: - name: AssignGcpCreds id: AssignGcpCreds run: | - echo '::set-output name=GCP_SERVICE_ACCOUNT::${{ secrets.GCP_SERVICE_ACCOUNT }}' - echo '::set-output name=GCP_WORKLOAD_IDENTITY_PROVIDER::${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}' + echo 'GCP_SERVICE_ACCOUNT=${{ secrets.GCP_SERVICE_ACCOUNT }}' >> $GITHUB_OUTPUT + echo 'GCP_WORKLOAD_IDENTITY_PROVIDER=${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}' >> $GITHUB_OUTPUT - name: AuthGcp - uses: google-github-actions/auth@v0 + uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0 if: steps.AssignGcpCreds.outputs.GCP_SERVICE_ACCOUNT && steps.AssignGcpCreds.outputs.GCP_WORKLOAD_IDENTITY_PROVIDER with: service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }} workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} - name: UploadJobReport - uses: google-github-actions/upload-cloud-storage@v0.8.0 + uses: google-github-actions/upload-cloud-storage@6397bd7208e18d13ba2619ee21b9873edc94427a # v3.0.0 if: steps.AssignGcpCreds.outputs.GCP_SERVICE_ACCOUNT && steps.AssignGcpCreds.outputs.GCP_WORKLOAD_IDENTITY_PROVIDER with: path: ${{ github.workspace }}/latest-build.txt @@ -271,7 +267,7 @@ jobs: parent: false - name: UploadLogsDir - uses: google-github-actions/upload-cloud-storage@v0.8.0 + uses: google-github-actions/upload-cloud-storage@6397bd7208e18d13ba2619ee21b9873edc94427a # v3.0.0 if: steps.AssignGcpCreds.outputs.GCP_SERVICE_ACCOUNT && steps.AssignGcpCreds.outputs.GCP_WORKLOAD_IDENTITY_PROVIDER with: path: ${{ env.LOGS_DIR }} @@ -279,7 +275,7 @@ jobs: parent: false - name: Check all CI stages succeeded - uses: actions/github-script@v3 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const stepResults = { @@ -301,7 +297,7 @@ jobs: - name: ResourceCleanup if: always() - uses: azure/CLI@v1 + uses: azure/CLI@9f7ce6f37c31b777ec6c6b6d1dfe7db79f497956 # v2.2.0 with: inlinescript: | az group delete -g ${{ matrix.AZURE_RESOURCE_GROUP }} --yes diff --git a/.gitignore b/.gitignore index 73ba2c68530f..934bd67f11e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,10 @@ +# If you want to ignore files created by your editor/tools, please consider a +# [global .gitignore](https://help.github.com/articles/ignoring-files). + /bin/ /man/ coverage.txt +cri-integration-coverage.txt profile.out containerd.test _site/ diff --git a/.golangci.yml b/.golangci.yml index aad6acff2722..fca308c69f6c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,56 +1,118 @@ +version: "2" linters: enable: - - structcheck - - varcheck - - staticcheck - - unconvert - - gofmt - - goimports - - revive - - ineffassign - - vet - - unused - - misspell + - copyloopvar # Checks for loop variable copies in Go 1.22+ + - depguard # Checks for dependencies that should not be (re)introduced. See "settings" for further details. + - dupword # Checks for duplicate words in the source code - gosec - - exportloopref # Checks for pointers to enclosing loop variables - - tenv # Detects using os.Setenv instead of t.Setenv since Go 1.17 + - misspell + - nolintlint + - revive + - unconvert + - usetesting disable: - errcheck - + settings: + depguard: + rules: + main: + deny: + - pkg: github.com/opencontainers/runc + desc: We don't want to depend on runc (libcontainer), unless there is no other option; see https://github.com/opencontainers/runc/issues/3028. + forbidigo: + forbid: + - pkg: ^regexp$ + msg: Use internal/lazyregexp.New instead. + gosec: + # The following issues surfaced when `gosec` linter + # was enabled. They are temporarily excluded to unblock + # the existing workflow, but still to be addressed by + # future works. + excludes: + - G204 + - G305 + - G306 + - G402 + - G404 + - G115 + - G103 + - G104 + - G301 + - G302 + - G304 + staticcheck: + checks: + - all + - -QF1008 # Excludes QF1008 from staticcheck + - -ST1000 + - -ST1020 + - -ST1021 + revive: + rules: + - name: package-comments + severity: warning + disabled: true + exclude: [ "" ] + nolintlint: + allow-unused: true + exclusions: + generated: lax + rules: + # Metric descriptors are currently only used for linux + - path: cri[\\/]server[\\/]list_metric_descriptors.go + linters: + - unused + - path: cmd[\\/]containerd[\\/]builtins[\\/] + text: 'blank-imports:' + - path: contrib[\\/]fuzz[\\/] + text: 'exported: func name will be used as fuzz.Fuzz' + - path: archive[\\/]tarheader[\\/] + # conversion is necessary on Linux, unnecessary on macOS + text: unnecessary conversion + - path: integration[\\/]client + text: 'dot-imports:' + - linters: + - revive + text: if-return + - linters: + - revive + text: empty-block + - linters: + - revive + text: superfluous-else + - linters: + - revive + text: unused-parameter + - linters: + - revive + text: unreachable-code + - linters: + - revive + text: redefines-builtin-id + - linters: + - forbidigo + text: 'use of `regexp.MustCompile` forbidden' + path: _test\.go + paths: + - api + - cluster + - docs + - docs/man + - releases + - test issues: - include: - - EXC0002 max-issues-per-linter: 0 max-same-issues: 0 - - # Only using / doesn't work due to https://github.com/golangci/golangci-lint/issues/1398. - exclude-rules: - - path: 'cmd[\\/]containerd[\\/]builtins[\\/]' - text: "blank-imports:" - - path: 'contrib[\\/]fuzz[\\/]' - text: "exported: func name will be used as fuzz.Fuzz" - -linters-settings: - gosec: - # The following issues surfaced when `gosec` linter - # was enabled. They are temporarily excluded to unblock - # the existing workflow, but still to be addressed by - # by future works. - excludes: - - G204 - - G305 - - G306 - - G402 - - G404 - -run: - timeout: 8m - skip-dirs: - - api - - cluster - - design - - docs - - docs/man - - releases - - reports - - test # e2e scripts +formatters: + enable: + - gofmt + - goimports + exclusions: + generated: strict + paths: + - api + - cluster + - docs + - docs/man + - releases + - test diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 000000000000..7fc4f702d67e --- /dev/null +++ b/.lycheeignore @@ -0,0 +1,8 @@ +# This file accompanies links verification nightly CI job. Add links to ignore here. + +# These fail often due its popularity +https://packages.debian.org/buster-backports/libseccomp2 +https://packages.ubuntu.com/trusty-backports/libseccomp2 + +# Fails often with 'Too Many Requests', easy to scare +https://tanzu.vmware.com/kubernetes-grid diff --git a/.mailmap b/.mailmap index 83bb03cd002c..8e1d63d094aa 100644 --- a/.mailmap +++ b/.mailmap @@ -1,16 +1,24 @@ Abhinandan Prativadi Abhinandan Prativadi Ace-Tang +Adam Korcz +Aditi Sharma +Akhil Mohan Akihiro Suda Akihiro Suda Allen Sun +Alex Ellis Alexander Morozov +Antonio Ojea Antonio Ojea +Amir M. Ghazanfari Amit Krishnan Andrei Vagin Andrey Kolomentsev Arnaud Porterie Arnaud Porterie +Austin Vazquez +Austin Vazquez Bob Mader Boris Popovschi Bowen Yan @@ -23,12 +31,17 @@ Cory Bennett Cristian Staretu Cristian Staretu Daniel Dao +Danny Canter Derek McGowan Edgar Lee +Enrico Weigelt Eric Ernst +Eric Lin Eric Ren Eric Ren Eric Ren +Fabian Hoffmann +Fabian Hoffmann <35104465+FabHof@users.noreply.github.com> Fabiano Fidêncio Fahed Dorgaa Frank Yang @@ -36,14 +49,18 @@ Fupan Li Fupan Li Fupan Li Furkan Türkal +Gao Xiang +Gao Xiang Georgia Panoutsakopoulou +guodong Guangming Wang Haiyan Meng haoyun Harry Zhang Hu Shuai Hu Shuai -Iceber Gu +Iceber Gu +Iceber Gu Jaana Burcu Dogan Jess Valarezo Jess Valarezo @@ -51,55 +68,82 @@ Jian Liao Jian Liao Ji'an Liu Jie Zhang +Jiongchi Yu John Howard John Howard John Howard John Howard +Junyu Liu +LongtaoZhang Lorenz Brun Luc Perkins +James Sturtevant Jiajun Jiang +Jin Dong Julien Balestra Jun Lin Chen <1913688+mc256@users.noreply.github.com> Justin Cormack Justin Terry Justin Terry +Kaita Nakamura Kante +Kazuyoshi Kato +Kazuyoshi Kato +Kazuyoshi Kato Kenfe-Mickaël Laventure Kevin Kern Kevin Parsons Kevin Xu +Kirtana Ashok +Kirtana Ashok +Kirtana Ashok <99994218+kiashok@users.noreply.github.com> Kitt Hsu Kohei Tokunaga Krasi Georgiev Lantao Liu Lantao Liu +lengrongfu <1275177125@qq.com> Li Yuxuan Lifubang Lu Jingxiao +Lucas Rattz +Mahamed Ali Maksym Pavlenko <865334+mxpv@users.noreply.github.com> Maksym Pavlenko +Maksym Pavlenko Maksym Pavlenko Mario Hros Mario Hros Mario Macias Mark Gordon +Markus Lehtonen +Marvin Giessing +Mathis Michel Michael Crosby Michael Katsoulis +Michael Zappa +Michael Zappa Mike Brown Mohammad Asif Siddiqui +Nabeel Rana Ng Yang Ning Li ningmingxiao Nishchay Kumar Oliver Stenbom +Pan Yibo Phil Estes Phil Estes +Qian Zhang +QiPing Wan Reid Li Robin Winkelewski +roman-kiselenko Ross Boucher Ruediger Maass Rui Cao Sakeven Jiang +Samuel Karp Samuel Karp Seth Pellegrino <30441101+sethp-nr@users.noreply.github.com> Shaobao Feng @@ -118,6 +162,8 @@ Su Xiaolin Takumasa Sakao Ted Yu Tõnis Tiigi +Tony Fang +Tony Fang Wade Lee Wade Lee Wade Lee <21621232@zju.edu.cn> @@ -126,12 +172,17 @@ wanglei wangzhan Wei Fu Wei Fu +wen chen +William Chen Xiaodong Zhang Xuean Yan Yang Yang Yue Zhang Yuxing Liu +Zechun Chen +zhang he Zhang Wei +zhangpeng zhangyadong Zhenguang Zhu Zhiyu Li @@ -139,5 +190,7 @@ Zhiyu Li <404977848@qq.com> Zhongming Chang Zhoulin Xie Zhoulin Xie <42261994+JoeWrightss@users.noreply.github.com> +zounengren zounengren 张潇 +张钰 diff --git a/.zuul.yaml b/.zuul.yaml deleted file mode 100644 index e96a94757039..000000000000 --- a/.zuul.yaml +++ /dev/null @@ -1,32 +0,0 @@ -- project: - name: containerd/containerd - merge-mode: merge - check: - jobs: - - containerd-build-arm64 - - containerd-test-arm64 - - containerd-integration-test-arm64 - -- job: - name: containerd-build-arm64 - parent: init-test - description: | - Containerd build in openlab cluster. - run: .zuul/playbooks/containerd-build/run.yaml - nodeset: ubuntu-xenial-arm64-openlab - -- job: - name: containerd-test-arm64 - parent: init-test - description: | - Containerd unit tests in openlab cluster. - run: .zuul/playbooks/containerd-build/unit-test.yaml - nodeset: ubuntu-xenial-arm64-openlab - -- job: - name: containerd-integration-test-arm64 - parent: init-test - description: | - Containerd unit tests in openlab cluster. - run: .zuul/playbooks/containerd-build/integration-test.yaml - nodeset: ubuntu-xenial-arm64-openlab diff --git a/.zuul/playbooks/containerd-build/integration-test.yaml b/.zuul/playbooks/containerd-build/integration-test.yaml deleted file mode 100644 index df2839b8b554..000000000000 --- a/.zuul/playbooks/containerd-build/integration-test.yaml +++ /dev/null @@ -1,96 +0,0 @@ -- hosts: all - become: yes - roles: - - role: config-golang - go_version: '1.18.4' - arch: arm64 - tasks: - - name: Install pre-requisites - shell: - cmd: | - set -xe - set -o pipefail - apt-get update - apt-get install -y btrfs-tools libseccomp-dev git pkg-config lsof gperf apparmor xfsprogs - - go version - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' - - name: Install containerd and cri dependencies - shell: - cmd: | - set -xe - make install-deps - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' - - name: Install criu - shell: - cmd: | - set -xe - apt-get install -y \ - libprotobuf-dev \ - libprotobuf-c-dev \ - protobuf-c-compiler \ - protobuf-compiler \ - python-protobuf \ - libnl-3-dev \ - libnet-dev \ - libcap-dev \ - python-future - wget https://github.com/checkpoint-restore/criu/archive/v3.13.tar.gz -O criu.tar.gz - tar -zxf criu.tar.gz - cd criu-3.13 - make install-criu - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' - - name: Install containerd - shell: - cmd: | - set -xe - make binaries - make install | tee $LOGS_PATH/make_install.log - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' - - name: Tests - shell: - cmd: | - make test | tee $LOGS_PATH/make_test.log - make root-test | tee $LOGS_PATH/make_root-test.log - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' - - name: Integration 1 - shell: - cmd: | - make integration EXTRA_TESTFLAGS=-no-criu TESTFLAGS_RACE=-race | tee $LOGS_PATH/make_integration-test.log - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' - - name: Integration 2 - shell: - cmd: | - TESTFLAGS_PARALLEL=1 make integration EXTRA_TESTFLAGS=-no-criu | tee $LOGS_PATH/make_integration-test.log - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' - - name: CRI Integration Test - shell: - cmd: | - CONTAINERD_RUNTIME="io.containerd.runc.v2" make cri-integration | tee $LOGS_PATH/make_cri-integration-test.log - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' - - name: CRI Integration Test - shell: - cmd: | - if grep -q "FAIL:" $LOGS_PATH/*.log; then - echo "FAILURE" - exit 1 - fi - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' diff --git a/.zuul/playbooks/containerd-build/run.yaml b/.zuul/playbooks/containerd-build/run.yaml deleted file mode 100644 index 7e097c184fca..000000000000 --- a/.zuul/playbooks/containerd-build/run.yaml +++ /dev/null @@ -1,22 +0,0 @@ -- hosts: all - become: yes - roles: - - role: config-golang - go_version: '1.18.4' - arch: arm64 - tasks: - - name: Build containerd - shell: - cmd: | - set -xe - set -o pipefail - apt-get update - apt-get install -y btrfs-tools libseccomp-dev git pkg-config - - go version - make | tee $LOGS_PATH/make.txt - - cp -r ./bin $RESULTS_PATH - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' diff --git a/.zuul/playbooks/containerd-build/unit-test.yaml b/.zuul/playbooks/containerd-build/unit-test.yaml deleted file mode 100644 index f96b8869d992..000000000000 --- a/.zuul/playbooks/containerd-build/unit-test.yaml +++ /dev/null @@ -1,20 +0,0 @@ -- hosts: all - become: yes - roles: - - role: config-golang - go_version: '1.18.4' - arch: arm64 - tasks: - - name: Build and test containerd - shell: - cmd: | - set -xe - set -o pipefail - apt-get update - apt-get install -y btrfs-tools libseccomp-dev git pkg-config - - go version - make build test | tee $LOGS_PATH/make_test.txt - chdir: '{{ zuul.project.src_dir }}' - executable: /bin/bash - environment: '{{ global_env }}' diff --git a/ADOPTERS.md b/ADOPTERS.md index c5e60df7b41a..9868097fffa6 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -8,6 +8,8 @@ has extremely broad production usage as a component of the [Docker engine](https stack. Note that this includes any use of the open source [Moby engine project](https://github.com/moby/moby); including the Balena project listed below. +**[faasd by OpenFaaS](https://github.com/openfaas/faasd)** - faasd in an Open Source project for serverless functions. It takes the same OpenFaaS components that usually run on Kubernetes and instead launches containers directly on a single host using CNI for networking. It's ideal for edge and for deploying functions without having to think about managing and maintaining Kubernetes. + **_[IBM Cloud Kubernetes Service (IKS)](https://www.ibm.com/cloud/container-service)_** - offers containerd as the CRI runtime for v1.11 and higher versions. **_[IBM Cloud Private (ICP)](https://www.ibm.com/cloud/private)_** - IBM's on-premises cloud offering has containerd as a "tech preview" CRI runtime for the Kubernetes offered within this product for the past two releases, and plans to fully migrate to containerd in a future release. @@ -30,8 +32,6 @@ including the Balena project listed below. **_Rancher's Rio project_** - Rancher Labs [Rio](https://github.com/rancher/rio) project uses containerd as the runtime for a combined Kubernetes, Istio, and container "Cloud Native Container Distribution" platform. -**_Eliot_** - The [Eliot](https://github.com/ernoaapa/eliot) container project for IoT device container management uses containerd as the runtime. - **_Balena_** - Resin's [Balena](https://github.com/resin-os/balena) container engine, based on moby/moby but for edge, embedded, and IoT use cases, uses the containerd and runc stack in the same way that the Docker engine uses containerd. **_LinuxKit_** - the Moby project's [LinuxKit](https://github.com/linuxkit/linuxkit) for building secure, minimal Linux OS images in a container-native model uses containerd as the core runtime for system and service containers. @@ -44,8 +44,6 @@ including the Balena project listed below. **_Kata Containers_** - The [Kata containers](https://katacontainers.io/) lightweight-virtualized container runtime project integrates with containerd via a custom v2 shim implementation that drives the Kata container runtime. -**_D2iQ Konvoy_** - D2iQ Inc [Konvoy](https://d2iq.com/products/konvoy) product uses containerd as the container runtime for its Kubernetes distribution. - **_Inclavare Containers_** - [Inclavare Containers](https://github.com/alibaba/inclavare-containers) is an innovation of container runtime with the novel approach for launching protected containers in hardware-assisted Trusted Execution Environment (TEE) technology, aka Enclave, which can prevent the untrusted entity, such as Cloud Service Provider (CSP), from accessing the sensitive and confidential assets in use. **_VMware TKG_** - [Tanzu Kubernetes Grid](https://tanzu.vmware.com/kubernetes-grid) VMware's Multicloud Kubernetes offering uses containerd as the default CRI runtime. @@ -56,6 +54,10 @@ including the Balena project listed below. **_Deckhouse_** - [Deckhouse Kubernetes Platform](https://deckhouse.io/) from Flant allows you to manage Kubernetes clusters anywhere in a fully automatic and uniform fashion. It uses containerd as the default CRI runtime. +**_[Actuated](https://actuated.dev)_** - Actuated is a platform for running self-hosted CI in securely-isolated Firecracker VMs. Actuated uses containerd's image pulling facility to distribute and update the root filesystem for VMs for CI agents. + +**_[Syself Autopilot](https://syself.com)** - Syself Autopilot is a simplified Kubernetes platform based on Cluster API that can run on various providers. Syself Autopilot uses containerd as the default CRI runtime. + **_Other Projects_** - While the above list provides a cross-section of well known uses of containerd, the simplicity and clear API layer for containerd has inspired many smaller projects around providing simple container management platforms. Several examples of building higher layer functionality on top of the containerd base have come from various containerd community participants: - Michael Crosby's [boss](https://github.com/crosbymichael/boss) project, - Evan Hazlett's [stellar](https://github.com/ehazlett/stellar) project, diff --git a/BUILDING.md b/BUILDING.md index 4d4d59b015f5..2318ce1a06f8 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -4,20 +4,32 @@ This guide is useful if you intend to contribute on containerd. Thanks for your effort. Every contribution is very appreciated. This doc includes: +* [Getting started with GitHub Codespaces](#getting-started-with-gitHub-codespaces) * [Build requirements](#build-requirements) * [Build the development environment](#build-the-development-environment) * [Build containerd](#build-containerd) * [Via docker container](#via-docker-container) * [Testing](#testing-containerd) +## Getting started with GitHub Codespaces + +To get started, create a codespace for this repository by clicking this 👇 + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=46089560) + +A codespace will open in a web-based version of Visual Studio Code. The [dev container](.devcontainer/devcontainer.json) is fully configured with software needed for this project and the containerd built. If you use a codespace, then you can directly skip to the [testing](#testing-containerd) section of this document. + +**Note**: Dev containers is an open spec which is supported by [GitHub Codespaces](https://github.com/codespaces) and [other tools](https://containers.dev/supporting). + ## Build requirements To build the `containerd` daemon, and the `ctr` simple test client, the following build system dependencies are required: -* Go 1.17.x or above -* Protoc 3.x compiler and headers (download at the [Google protobuf releases page](https://github.com/protocolbuffers/protobuf/releases)) +* Go compiler (download from https://go.dev/dl/). The two most recent major Go versions are supported. For example, if Go 1.25 is the latest, then 1.25 and 1.24 are supported. * Btrfs headers and libraries for your distribution. Note that building the btrfs driver can be disabled via the build tag `no_btrfs`, removing this dependency. +> *Note*: On macOS, you need a third party runtime to run containers on containerd + ## Build the development environment First you need to setup your Go development environment. You can follow this @@ -30,19 +42,16 @@ You need `git` to checkout the source code: git clone https://github.com/containerd/containerd ``` -For proper results, install the `protoc` release into `/usr/local` on your build system. For example, the following commands will download and install the 3.11.4 release for a 64-bit Linux host: +To enable optional [Btrfs](https://en.wikipedia.org/wiki/Btrfs) snapshotter, you should have the headers from the Linux kernel 4.12 or later. +The dependency on the kernel headers only affects users building containerd from source. +Users on older kernels may opt to not compile the btrfs support (see `BUILDTAGS=no_btrfs` below), +or to provide headers from a newer kernel. -```sh -wget -c https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protoc-3.11.4-linux-x86_64.zip -sudo unzip protoc-3.11.4-linux-x86_64.zip -d /usr/local -``` - -`containerd` uses [Btrfs](https://en.wikipedia.org/wiki/Btrfs) it means that you -need to satisfy these dependencies in your system: - -* CentOS/Fedora: `yum install btrfs-progs-devel` -* Debian/Ubuntu: `apt-get install btrfs-progs libbtrfs-dev` - * Debian(before Buster)/Ubuntu(before 19.10): `apt-get install btrfs-tools` +> **Note** +> The dependency on the Linux kernel headers 4.12 was introduced in containerd 1.7.0-beta.4. +> +> containerd 1.6 has different set of dependencies for enabling btrfs. +> containerd 1.6 users should refer to https://github.com/containerd/containerd/blob/release/1.6/BUILDING.md#build-the-development-environment At this point you are ready to build `containerd` yourself! @@ -54,6 +63,8 @@ the system, sometimes it is necessary to build runc directly when working with container runtime development. Make sure to follow the guidelines for versioning in [RUNC.md](/docs/RUNC.md) for the best results. +> *Note*: Runc only supports Linux + ## Build containerd `containerd` uses `make` to create a repeatable build flow. It means that you @@ -102,10 +113,12 @@ make generate > * `no_cri`: A build tag disables building Kubernetes [CRI](http://blog.kubernetes.io/2016/12/container-runtime-interface-cri-in-kubernetes.html) support into containerd. > See [here](https://github.com/containerd/cri-containerd#build-tags) for build tags of CRI plugin. > * snapshotters (alphabetical order) -> * `no_aufs`: A build tag disables building the aufs snapshot driver. +> * `no_aufs`: A build tag disables building the aufs snapshot driver. (Ignored since containerd v2.0, as the aufs snapshot driver is no longer supported) > * `no_btrfs`: A build tag disables building the Btrfs snapshot driver. > * `no_devmapper`: A build tag disables building the device mapper snapshot driver. > * `no_zfs`: A build tag disables building the ZFS snapshot driver. +> * platform +> * `no_systemd`: disables any systemd specific code > > For example, adding `BUILDTAGS=no_btrfs` to your environment before calling the **binaries** > Makefile target will disable the btrfs driver within the containerd Go build. @@ -117,6 +130,8 @@ Changes to these files should become a single commit for a PR which relies on ve Please refer to [RUNC.md](/docs/RUNC.md) for the currently supported version of `runc` that is used by containerd. +> *Note*: On macOS, the containerd daemon can be built and run natively. However, as stated above, runc only supports linux. + ### Static binaries You can build static binaries by providing a few variables to `make`: @@ -132,55 +147,33 @@ make STATIC=1 # Via Docker container -The following instructions assume you are at the parent directory of containerd source directory. +> [!NOTE] +> The following instructions assume you are at the **parent** directory of containerd source directory. ## Build containerd in a container -You can build `containerd` via a Linux-based Docker container. -You can build an image from this `Dockerfile`: - -```dockerfile -FROM golang - -RUN apt-get update && \ - apt-get install -y libbtrfs-dev -``` +You can build `containerd` via a Linux-based Docker container using the [Docker official `golang` image](https://hub.docker.com/_/golang/) -Let's suppose that you built an image called `containerd/build`. From the -containerd source root directory you can run the following command: +From the **parent** directory of `containerd`'s cloned repo you can run the following command: ```sh docker run -it \ - -v ${PWD}/containerd:/go/src/github.com/containerd/containerd \ - -e GOPATH=/go \ - -w /go/src/github.com/containerd/containerd containerd/build sh + -v ${PWD}/containerd:/src/containerd \ + -w /src/containerd golang ``` -This mounts `containerd` repository +This mounts the `containerd` repository inside the image at `/src/containerd` and, by default, runs a shell at that directory. -You are now ready to [build](#build-containerd): - -```sh -make && make install -``` +Now, you are now ready to follow the [build instructions](#build-containerd): ## Build containerd and runc in a container To have complete core container runtime, you will need both `containerd` and `runc`. It is possible to build both of these via Docker container. -You can use `git` to checkout `runc`: +You can clone `runc` in the same parent directory where you cloned `containerd` and you should clone [the latest stable version of `runc`](https://github.com/opencontainers/runc/releases), e.g. v1.1.13: ```sh -git clone https://github.com/opencontainers/runc -``` - -We can build an image from this `Dockerfile`: - -```sh -FROM golang - -RUN apt-get update && \ - apt-get install -y libbtrfs-dev libseccomp-dev +git clone --branch https://github.com/opencontainers/runc ``` In our Docker container we will build `runc` build, which includes @@ -191,36 +184,66 @@ do not require external libraries at build time). Refer to [RUNC.md](docs/RUNC.m in the docs directory to for details about building runc, and to learn about supported versions of `runc` as used by containerd. -Let's suppose you build an image called `containerd/build` from the above Dockerfile. You can run the following command: +Since we need [`libseccomp-dev`](https://packages.debian.org/stable/libseccomp-dev) installed as a dependency, we will need a custom Docker image derived from the official `golang` image. You can use the following `Dockerfile` to build your custom image: ```sh -docker run -it --privileged \ - -v /var/lib/containerd \ - -v ${PWD}/runc:/go/src/github.com/opencontainers/runc \ - -v ${PWD}/containerd:/go/src/github.com/containerd/containerd \ - -e GOPATH=/go \ - -w /go/src/github.com/containerd/containerd containerd/build sh +FROM golang + +RUN apt-get update && \ + apt-get install -y libseccomp-dev +``` + +Let's suppose you've built an image named `containerd/build` from the above `Dockerfile`. + +You can run the following command: + +```sh +docker run -it \ + -v ${PWD}/containerd:/src/containerd \ + -v ${PWD}/runc:/src/runc \ + -w /src/containerd \ + containerd/build ``` This mounts both `runc` and `containerd` repositories in our Docker container. -From within our Docker container let's build `containerd`: +From within the Docker container, let's build `containerd`: ```sh -cd /go/src/github.com/containerd/containerd make && make install ``` -These binaries can be found in the `./bin` directory in your host. -`make install` will move the binaries in your `$PATH`. +You can check the installed binaries with: + +```sh +$ which containerd +/usr/local/bin/containerd + +$ containerd --version +containerd github.com/containerd/containerd/v2 v2.0.0-rc.3-195-gf5d5407c2 f5d5407c2ff12865653a9a132d5783196be82763 +``` Next, let's build `runc`: ```sh -cd /go/src/github.com/opencontainers/runc +cd /src/runc make && make install ``` +You can check the installed binaries with: + +```sh +$ which runc +/usr/local/sbin/runc + +$ runc --version +runc version 1.1.13 +commit: v1.1.13-0-g58aa9203 +spec: 1.0.2-dev +go: go1.23.0 +libseccomp: 2.5.4 +``` + For further details about building runc, refer to [RUNC.md](docs/RUNC.md) in the docs directory. @@ -244,25 +267,25 @@ name and also how to use the flag directly against `go test` to run root-requiri ```sh # run the test : -go test -v -run "" . +go test -v -run "" ./path/to/package # enable the root-requiring tests: -go test -v -run . -test.root +go test -v -run ./path/to/package -test.root ``` Example output from directly running `go test` to execute the `TestContainerList` test: ```sh -sudo go test -v -run "TestContainerList" . -test.root -INFO[0000] running tests against containerd revision=f2ae8a020a985a8d9862c9eb5ab66902c2888361 version=v1.0.0-beta.2-49-gf2ae8a0 +sudo go test -v -run "TestContainerList" ./integration/client -test.root === RUN TestContainerList --- PASS: TestContainerList (0.00s) PASS -ok github.com/containerd/containerd 4.778s + +ok github.com/containerd/containerd/v2/integration/client 2.584s ``` > *Note*: in order to run `sudo go` you need to > - either keep user PATH environment variable. ex: `sudo "PATH=$PATH" env go test ` -> - or use `go test -exec` ex: `go test -exec sudo -v -run "TestTarWithXattr" ./archive/ -test.root` +> - or use `go test -exec` ex: `go test -exec sudo -v -run "TestTarWithXattr" ./pkg/archive -test.root` ## Additional tools diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000000..f6f655f7403c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,72 @@ +# Contributors' Guide + +This guide will help familiarize contributors to the `containerd/containerd` repository. + +## Prerequisite + +First read the containerd project's [general guidelines around contribution](https://github.com/containerd/project/blob/main/CONTRIBUTING.md) +which apply to all containerd projects. + +## Getting started + +See [`BUILDING.md`](https://github.com/containerd/containerd/blob/main/BUILDING.md) for instructions for setting up a development environment. + +If you are also a new user to containerd, you can first check out the [_Getting started with containerd_](https://github.com/containerd/containerd/blob/main/docs/getting-started.md) guide. + +## Setting up your local environment + +At a minimum, the dev tools from `script/setup/install-dev-tools` should be installed. +Run `make install-deps` to install dependencies used for running and developing the CRI plugin. +Other install scripts under `script/setup` may need to be run depending on your environment and your preference for installing libraries and dependencies. +The versions used by `containerd/containerd` CI can be found in `script/setup` and referred to if installing manually. + +``` +$ script/setup/install-dev-tools +$ make install-deps +``` + +## Code style + +- Go files adhere to standard Go formatting and styling +- Protobuf files use tabs for indentation +- Other files must not contain trailing whitespace and should end with a single new line character + +Use the `check` command in the makefile to verify your code matches the expected style. + +``` +make check +``` + +## Updating protobuf files + +Ensure protoc and dev tools have been installed, then run `make protos` + +> **Note** +> When running `make protos`, the current working directory should be found under the `GOPATH` environment +> variable to ensure protoc can properly resolve the paths of protofiles in the project. + +## Naming packages + +Package names should be short and simple. Avoid using `_` and repeating words from parent directories. + +### Where to put packages + +Try to put a new package under the appropriate root directories. The root directory is reserved for +configuration and build files, no source files will be accepted in root since containerd v2.0. + +- `api` - All protobuf service definitions and types used by services +- `bin` - Autogenerated during build, do not check in file here +- `client` - All Go files for the containerd client (formerly in `containerd/containerd` root in 1.x) +- `cmd` - All Go main packages and the packages used only for that main package +- `contrib` - Files, configurations, and packages related to external tools or libraries +- `core` - Core Go packages with interface definitions and built-in implementations +- `docs` - All containerd technical documentation using markdown +- `internal` - All utility packages used by containerd and not intended for direct import +- `man`- All containerd reference manuals used for the `man` command +- `pkg` - Non-core Go packages used by clients and other containerd packages +- `plugins` - All included containerd plugins which are registered via init +- `releases` - All release note files +- `script` - All scripts used for testing, development, and CI +- `test` - Test scripts used for external end to end testing of containerd, do not add new files here +- `vendor` - Autogenerated vendor files from `make vendor` command, do not manually edit files here +- `version` - Version package with the current containerd version diff --git a/Makefile b/Makefile index ecf166ac47e0..5a258adf05c6 100644 --- a/Makefile +++ b/Makefile @@ -24,15 +24,17 @@ ROOTDIR=$(dir $(abspath $(lastword $(MAKEFILE_LIST)))) # The files will be installed under `$(DESTDIR)/$(PREFIX)`. # The convention of `DESTDIR` was changed in containerd v1.6. PREFIX ?= /usr/local +BINDIR ?= $(PREFIX)/bin DATADIR ?= $(PREFIX)/share +DOCDIR ?= $(DATADIR)/doc MANDIR ?= $(DATADIR)/man TEST_IMAGE_LIST ?= # Used to populate variables in version package. VERSION ?= $(shell git describe --match 'v[0-9]*' --dirty='.m' --always) -REVISION=$(shell git rev-parse HEAD)$(shell if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi) -PACKAGE=github.com/containerd/containerd +REVISION ?= $(shell git rev-parse HEAD)$(shell if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi) +PACKAGE=github.com/containerd/containerd/v2 SHIM_CGO_ENABLED ?= 0 ifneq "$(strip $(shell command -v $(GO) 2>/dev/null))" "" @@ -75,10 +77,11 @@ WHALE = "🇩" ONI = "👹" RELEASE=containerd-$(VERSION:v%=%)-${GOOS}-${GOARCH} +STATICRELEASE=containerd-static-$(VERSION:v%=%)-${GOOS}-${GOARCH} CRIRELEASE=cri-containerd-$(VERSION:v%=%)-${GOOS}-${GOARCH} CRICNIRELEASE=cri-containerd-cni-$(VERSION:v%=%)-${GOOS}-${GOARCH} -PKG=github.com/containerd/containerd +PKG=github.com/containerd/containerd/v2 # Project binaries. COMMANDS=ctr containerd containerd-stress @@ -93,7 +96,11 @@ GO_BUILDTAGS += ${DEBUG_TAGS} ifneq ($(STATIC),) GO_BUILDTAGS += osusergo netgo static_build endif + +SHIM_GO_BUILDTAGS := $(GO_BUILDTAGS) no_grpc + GO_TAGS=$(if $(GO_BUILDTAGS),-tags "$(strip $(GO_BUILDTAGS))",) +SHIM_GO_TAGS=$(if $(SHIM_GO_BUILDTAGS),-tags "$(strip $(SHIM_GO_BUILDTAGS))",) GO_LDFLAGS=-ldflags '-X $(PKG)/version.Version=$(VERSION) -X $(PKG)/version.Revision=$(REVISION) -X $(PKG)/version.Package=$(PACKAGE) $(EXTRA_LDFLAGS) ifneq ($(STATIC),) @@ -106,7 +113,6 @@ SHIM_GO_LDFLAGS=-ldflags '-X $(PKG)/version.Version=$(VERSION) -X $(PKG)/version # Project packages. PACKAGES=$(shell $(GO) list ${GO_TAGS} ./... | grep -v /vendor/ | grep -v /integration) API_PACKAGES=$(shell (cd api && $(GO) list ${GO_TAGS} ./... | grep -v /vendor/ | grep -v /integration)) -NON_API_PACKAGES=$(shell $(GO) list ${GO_TAGS} ./... | grep -v /vendor/ | grep -v /integration | grep -v "containerd/api") TEST_REQUIRES_ROOT_PACKAGES=$(filter \ ${PACKAGES}, \ $(shell \ @@ -123,10 +129,10 @@ ifdef SKIPTESTS endif #Replaces ":" (*nix), ";" (windows) with newline for easy parsing -GOPATHS=$(shell echo ${GOPATH} | tr ":" "\n" | tr ";" "\n") +GOPATHS=$(shell $(GO) env GOPATH | tr ":" "\n" | tr ";" "\n") TESTFLAGS_RACE= -GO_BUILD_FLAGS= +GO_BUILD_FLAGS ?= # See Golang issue re: '-trimpath': https://github.com/golang/go/issues/13809 GO_GCFLAGS=$(shell \ set -- ${GOPATHS}; \ @@ -148,7 +154,8 @@ GOTEST ?= $(GO) test OUTPUTDIR = $(join $(ROOTDIR), _output) CRIDIR=$(OUTPUTDIR)/cri -.PHONY: clean all AUTHORS build binaries test integration generate protos check-protos coverage ci check help install uninstall vendor release mandir install-man genman install-cri-deps cri-release cri-cni-release cri-integration install-deps bin/cri-integration.test + +.PHONY: clean all AUTHORS build binaries test integration generate protos check-protos coverage ci check help install uninstall vendor release static-release mandir install-man install-doc genman install-cri-deps cri-release cri-cni-release cri-integration install-deps bin/cri-integration.test cri-integration-coverage integration-coverage all-coverage remove-replace clean-vendor .DEFAULT: default # Forcibly set the default goal to all, in case an include above brought in a rule definition. @@ -160,7 +167,7 @@ check: proto-fmt ## run all linters @echo "$(WHALE) $@" GOGC=75 golangci-lint run -ci: check binaries check-protos coverage coverage-integration ## to be used by the CI +ci: check binaries check-protos coverage ## to be used by the CI AUTHORS: .mailmap .git/HEAD git log --format='%aN <%aE>' | sort -fu > $@ @@ -169,33 +176,28 @@ generate: protos @echo "$(WHALE) $@" @PATH="${ROOTDIR}/bin:${PATH}" $(GO) generate -x ${PACKAGES} -protos: bin/protoc-gen-go-fieldpath +protos: bin/protoc-gen-go-fieldpath bin/go-buildtag @echo "$(WHALE) $@" - @find . -path ./vendor -prune -false -o -name '*.pb.go' | xargs rm - $(eval TMPDIR := $(shell mktemp -d)) - @mv ${ROOTDIR}/vendor ${TMPDIR} - @(cd ${ROOTDIR}/api && PATH="${ROOTDIR}/bin:${PATH}" protobuild --quiet ${API_PACKAGES}) - @(PATH="${ROOTDIR}/bin:${PATH}" protobuild --quiet ${NON_API_PACKAGES}) - @mv ${TMPDIR}/vendor ${ROOTDIR} - @rm -rf ${TMPDIR} - go-fix-acronym -w -a '(Id|Io|Uuid|Os)$$' $(shell find api/ runtime/ -name '*.pb.go') + (cd api && buf dep update) + (cd api && PATH="$(ROOTDIR)/bin:$$PATH" buf generate) + (cd api && buf build -o next.txtpb) + @rm -f api/runtime/task/v2/shim_grpc.pb.go api/services/ttrpc/events/v1/events_grpc.pb.go + @find api/ -name '*_fieldpath.pb.go' ! -path 'api/events/*' -delete + go-fix-acronym -w -a '^Os' $$(find api/ -name '*.pb.go') + go-fix-acronym -w -a '(Id|Io|Uuid|Os)$$' $$(find api/ -name '*.pb.go') + bin/go-buildtag -w --tags '!no_grpc' $$(find api/ -name '*_grpc.pb.go') + @test -z "$$(git status --short | grep "api/next.txtpb" | tee /dev/stderr)" || \ + $(GO) mod edit -replace=github.com/containerd/containerd/api=./api -check-protos: protos ## check if protobufs needs to be generated again +check-protos: ## check if protobufs needs to be generated again @echo "$(WHALE) $@" - @test -z "$$(git status --short | grep ".pb.go" | tee /dev/stderr)" || \ - ((git diff | cat) && \ - (echo "$(ONI) please run 'make protos' when making changes to proto files" && false)) + @(cd api && buf format --diff --exit-code --exclude-path vendor \ + $(if $(GITHUB_ACTIONS),--error-format github-actions)) || \ + (echo "$(ONI) please run 'make protos' when making changes to proto files" && false) -check-api-descriptors: protos ## check that protobuf changes aren't present. +proto-fmt: ## format proto files @echo "$(WHALE) $@" - @test -z "$$(git status --short | grep ".pb.txt" | tee /dev/stderr)" || \ - ((git diff $$(find . -name '*.pb.txt') | cat) && \ - (echo "$(ONI) please run 'make protos' when making changes to proto files and check-in the generated descriptor file changes" && false)) - -proto-fmt: ## check format of proto files - @echo "$(WHALE) $@" - @test -z "$$(find . -path ./vendor -prune -o -path ./protobuf/google/rpc -prune -o -name '*.proto' -type f -exec grep -Hn -e "^ " {} \; | tee /dev/stderr)" || \ - (echo "$(ONI) please indent proto files with tabs only" && false) + @cd api && buf format --write --exclude-path vendor build: ## build the go packages @echo "$(WHALE) $@" @@ -213,26 +215,35 @@ integration: ## run integration tests @echo "$(WHALE) $@" @cd "${ROOTDIR}/integration/client" && $(GO) mod download && $(GOTEST) -v ${TESTFLAGS} -test.root -parallel ${TESTFLAGS_PARALLEL} . -# TODO integrate cri integration bucket with coverage bin/cri-integration.test: @echo "$(WHALE) $@" @$(GO) test -c ./integration -o bin/cri-integration.test cri-integration: binaries bin/cri-integration.test ## run cri integration tests (example: FOCUS=TestContainerListStats make cri-integration) @echo "$(WHALE) $@" - @bash -x ./script/test/cri-integration.sh + @bash ./script/test/cri-integration.sh @rm -rf bin/cri-integration.test # build runc shimv2 with failpoint control, only used by integration test bin/containerd-shim-runc-fp-v1: integration/failpoint/cmd/containerd-shim-runc-fp-v1 FORCE @echo "$(WHALE) $@" - @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build ${GO_BUILD_FLAGS} -o $@ ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./integration/failpoint/cmd/containerd-shim-runc-fp-v1 + @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build ${GO_BUILD_FLAGS} -o $@ ${SHIM_GO_LDFLAGS} ${GO_TAGS} ${SHIM_GO_TAGS} ./integration/failpoint/cmd/containerd-shim-runc-fp-v1 # build CNI bridge plugin wrapper with failpoint support, only used by integration test bin/cni-bridge-fp: integration/failpoint/cmd/cni-bridge-fp FORCE @echo "$(WHALE) $@" @$(GO) build ${GO_BUILD_FLAGS} -o $@ ./integration/failpoint/cmd/cni-bridge-fp +# build runc-fp as runc wrapper to support failpoint, only used by integration test +bin/runc-fp: integration/failpoint/cmd/runc-fp FORCE + @echo "$(WHALE) $@" + @$(GO) build ${GO_BUILD_FLAGS} -o $@ ./integration/failpoint/cmd/runc-fp + +# build loopback-v2 with failpoint support, only used by integration test +bin/loopback-v2: integration/failpoint/cmd/loopback-v2 FORCE + @echo "$(WHALE) $@" + @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build ${GO_BUILD_FLAGS} -o $@ ./integration/failpoint/cmd/loopback-v2 + benchmark: ## run benchmarks tests @echo "$(WHALE) $@" @$(GO) test ${TESTFLAGS} -bench . -run Benchmark -test.root @@ -253,22 +264,14 @@ bin/gen-manpages: cmd/gen-manpages FORCE @echo "$(WHALE) $@" $(GO) build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} -o $@ ${GO_LDFLAGS} $(subst urfave_cli_no_docs,,${GO_TAGS}) ./cmd/gen-manpages -bin/containerd-shim: cmd/containerd-shim FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 - @echo "$(WHALE) $@" - @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build ${GO_BUILD_FLAGS} -o $@ ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim - -bin/containerd-shim-runc-v1: cmd/containerd-shim-runc-v1 FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 - @echo "$(WHALE) $@" - @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build ${GO_BUILD_FLAGS} -o $@ ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v1 - bin/containerd-shim-runc-v2: cmd/containerd-shim-runc-v2 FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 @echo "$(WHALE) $@" - @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build ${GO_BUILD_FLAGS} -o $@ ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v2 + CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build ${GO_BUILD_FLAGS} -o $@ ${SHIM_GO_LDFLAGS} ${SHIM_GO_TAGS} ./cmd/containerd-shim-runc-v2 binaries: $(BINARIES) ## build binaries @echo "$(WHALE) $@" -man: mandir $(addprefix man/,$(MANPAGES)) +man: $(addprefix man/,$(MANPAGES)) @echo "$(WHALE) $@" mandir: @@ -277,15 +280,15 @@ mandir: # Kept for backwards compatibility genman: man/containerd.8 man/ctr.8 -man/containerd.8: bin/gen-manpages FORCE +man/containerd.8: bin/gen-manpages FORCE | mandir @echo "$(WHALE) $@" $< $(@F) $(@D) -man/ctr.8: bin/gen-manpages FORCE +man/ctr.8: bin/gen-manpages FORCE | mandir @echo "$(WHALE) $@" $< $(@F) $(@D) -man/%: docs/man/%.md FORCE +man/%: docs/man/%.md FORCE | mandir @echo "$(WHALE) $@" go-md2man -in "$<" -out "$@" @@ -298,19 +301,45 @@ install-man: man @echo "$(WHALE) $@" $(foreach manpage,$(addprefix man/,$(MANPAGES)), $(call installmanpage,$(manpage),$(subst .,,$(suffix $(manpage))),$(notdir $(manpage)))) +install-doc: + @echo "$(WHALE) $@" + @mkdir -p $(DESTDIR)/$(DOCDIR)/containerd + @cp -R docs/* $(DESTDIR)/$(DOCDIR)/containerd + +define pack_release + @rm -rf releases/$(1) releases/$(1).tar.gz + @$(INSTALL) -d releases/$(1)/bin + @$(INSTALL) $(BINARIES) releases/$(1)/bin + @tar -czf releases/$(1).tar.gz -C releases/$(1) bin + @rm -rf releases/$(1) +endef + releases/$(RELEASE).tar.gz: $(BINARIES) @echo "$(WHALE) $@" - @rm -rf releases/$(RELEASE) releases/$(RELEASE).tar.gz - @$(INSTALL) -d releases/$(RELEASE)/bin - @$(INSTALL) $(BINARIES) releases/$(RELEASE)/bin - @tar -czf releases/$(RELEASE).tar.gz -C releases/$(RELEASE) bin - @rm -rf releases/$(RELEASE) + $(call pack_release,$(RELEASE)) release: releases/$(RELEASE).tar.gz @echo "$(WHALE) $@" @cd releases && sha256sum $(RELEASE).tar.gz >$(RELEASE).tar.gz.sha256sum +releases/$(STATICRELEASE).tar.gz: +ifeq ($(GOOS),linux) + @make STATIC=1 $(BINARIES) + @echo "$(WHALE) $@" + $(call pack_release,$(STATICRELEASE)) +else + @echo "Skipping $(STATICRELEASE) for $(GOOS)" +endif + +static-release: releases/$(STATICRELEASE).tar.gz +ifeq ($(GOOS),linux) + @echo "$(WHALE) $@" + @cd releases && sha256sum $(STATICRELEASE).tar.gz >$(STATICRELEASE).tar.gz.sha256sum +else + @echo "Skipping releasing $(STATICRELEASE) for $(GOOS)" +endif + # install of cri deps into release output directory ifeq ($(GOOS),windows) install-cri-deps: $(BINARIES) @@ -337,29 +366,33 @@ install-cri-deps: $(BINARIES) @$(INSTALL) $(BINARIES) $(CRIDIR)/bin endif +$(CRIDIR)/cri-containerd.DEPRECATED.txt: + @mkdir -p $(CRIDIR) + @$(INSTALL) -m 644 releases/cri-containerd.DEPRECATED.txt $@ + ifeq ($(GOOS),windows) -releases/$(CRIRELEASE).tar.gz: install-cri-deps +releases/$(CRIRELEASE).tar.gz: install-cri-deps $(CRIDIR)/cri-containerd.DEPRECATED.txt @echo "$(WHALE) $@" @cd $(CRIDIR) && tar -czf ../../releases/$(CRIRELEASE).tar.gz * -releases/$(CRICNIRELEASE).tar.gz: install-cri-deps +releases/$(CRICNIRELEASE).tar.gz: install-cri-deps $(CRIDIR)/cri-containerd.DEPRECATED.txt @echo "$(WHALE) $@" @cd $(CRIDIR) && tar -czf ../../releases/$(CRICNIRELEASE).tar.gz * else -releases/$(CRIRELEASE).tar.gz: install-cri-deps +releases/$(CRIRELEASE).tar.gz: install-cri-deps $(CRIDIR)/cri-containerd.DEPRECATED.txt @echo "$(WHALE) $@" - @tar -czf releases/$(CRIRELEASE).tar.gz -C $(CRIDIR) etc/crictl.yaml etc/systemd usr opt/containerd + @tar -czf releases/$(CRIRELEASE).tar.gz -C $(CRIDIR) cri-containerd.DEPRECATED.txt etc/crictl.yaml etc/systemd usr opt/containerd -releases/$(CRICNIRELEASE).tar.gz: install-cri-deps +releases/$(CRICNIRELEASE).tar.gz: install-cri-deps $(CRIDIR)/cri-containerd.DEPRECATED.txt @echo "$(WHALE) $@" - @tar -czf releases/$(CRICNIRELEASE).tar.gz -C $(CRIDIR) etc usr opt + @tar -czf releases/$(CRICNIRELEASE).tar.gz -C $(CRIDIR) cri-containerd.DEPRECATED.txt etc usr opt endif -cri-release: releases/$(CRIRELEASE).tar.gz +cri-release: releases/$(CRIRELEASE).tar.gz ## Deprecated (only kept for external CI) @echo "$(WHALE) $@" @cd releases && sha256sum $(CRIRELEASE).tar.gz >$(CRIRELEASE).tar.gz.sha256sum && ln -sf $(CRIRELEASE).tar.gz cri-containerd.tar.gz -cri-cni-release: releases/$(CRICNIRELEASE).tar.gz +cri-cni-release: releases/$(CRICNIRELEASE).tar.gz ## Deprecated (only kept for external CI) @echo "$(WHALE) $@" @cd releases && sha256sum $(CRICNIRELEASE).tar.gz >$(CRICNIRELEASE).tar.gz.sha256sum && ln -sf $(CRICNIRELEASE).tar.gz cri-cni-containerd.tar.gz @@ -373,7 +406,7 @@ clean: ## clean up binaries clean-test: ## clean up debris from previously failed tests @echo "$(WHALE) $@" $(eval containers=$(shell find /run/containerd/runc -mindepth 2 -maxdepth 3 -type d -exec basename {} \;)) - $(shell pidof containerd containerd-shim runc | xargs -r -n 1 kill -9) + $(shell pidof containerd runc | xargs -r -n 1 kill -9) @( for container in $(containers); do \ grep $$container /proc/self/mountinfo | while read -r mountpoint; do \ umount $$(echo $$mountpoint | awk '{print $$5}'); \ @@ -389,16 +422,15 @@ clean-test: ## clean up debris from previously failed tests install: ## install binaries @echo "$(WHALE) $@ $(BINARIES)" - @$(INSTALL) -d $(DESTDIR)$(PREFIX)/bin - @$(INSTALL) $(BINARIES) $(DESTDIR)$(PREFIX)/bin + @$(INSTALL) -d $(DESTDIR)$(BINDIR) + @$(INSTALL) $(BINARIES) $(DESTDIR)$(BINDIR) uninstall: @echo "$(WHALE) $@" - @rm -f $(addprefix $(DESTDIR)$(PREFIX)/bin/,$(notdir $(BINARIES))) + @rm -f $(addprefix $(DESTDIR)$(BINDIR)/,$(notdir $(BINARIES))) ifeq ($(GOOS),windows) install-deps: - # TODO: need a script for hcshim something like containerd/cri/hack/install/windows/install-hcsshim.sh script/setup/install-critools script/setup/install-cni-windows else @@ -412,7 +444,7 @@ endif coverage: ## generate coverprofiles from the unit tests, except tests that require root @echo "$(WHALE) $@" @rm -f coverage.txt - @$(GO) test -i ${TESTFLAGS} ${PACKAGES} 2> /dev/null + @$(GO) test ${TESTFLAGS} ${PACKAGES} @( for pkg in ${PACKAGES}; do \ $(GO) test ${TESTFLAGS} \ -cover \ @@ -426,7 +458,7 @@ coverage: ## generate coverprofiles from the unit tests, except tests that requi root-coverage: ## generate coverage profiles for unit tests that require root @echo "$(WHALE) $@" - @$(GO) test -i ${TESTFLAGS} ${TEST_REQUIRES_ROOT_PACKAGES} 2> /dev/null + @$(GO) test ${TESTFLAGS} ${TEST_REQUIRES_ROOT_PACKAGES} 2> /dev/null @( for pkg in ${TEST_REQUIRES_ROOT_PACKAGES}; do \ $(GO) test ${TESTFLAGS} \ -cover \ @@ -438,22 +470,37 @@ root-coverage: ## generate coverage profiles for unit tests that require root fi; \ done ) +cri-integration-coverage: binaries ## generate coverage profile for cri integration tests + @echo "$(WHALE) $@" + @rm -f cri-integration-coverage.txt + @$(GO) test -c -coverpkg=./... -covermode=atomic ./integration -o bin/cri-integration.test + @bash ./script/test/cri-integration.sh -test.coverprofile=cri-integration-coverage.txt + @echo "Coverage profile generated at cri-integration-coverage.txt" + @rm -rf bin/cri-integration.test + +remove-replace: + @echo "$(WHALE) $@" + @$(GO) mod edit -dropreplace=github.com/containerd/containerd/api + vendor: ## ensure all the go.mod/go.sum files are up-to-date including vendor/ directory @echo "$(WHALE) $@" @$(GO) mod tidy @$(GO) mod vendor @$(GO) mod verify - @(cd ${ROOTDIR}/integration/client && ${GO} mod tidy) + @(cd ${ROOTDIR}/api && ${GO} mod tidy) verify-vendor: ## verify if all the go.mod/go.sum files are up-to-date @echo "$(WHALE) $@" $(eval TMPDIR := $(shell mktemp -d)) @cp -R ${ROOTDIR} ${TMPDIR} @(cd ${TMPDIR}/containerd && ${GO} mod tidy) - @(cd ${TMPDIR}/containerd/integration/client && ${GO} mod tidy) + @(cd ${TMPDIR}/containerd && ${GO} mod vendor) + @(cd ${TMPDIR}/containerd && ${GO} mod verify) + @(cd ${TMPDIR}/containerd/api && ${GO} mod tidy) @diff -r -u -q ${ROOTDIR} ${TMPDIR}/containerd @rm -rf ${TMPDIR} - @${ROOTDIR}/script/verify-go-modules.sh integration/client + +clean-vendor: remove-replace vendor help: ## this help diff --git a/Makefile.darwin b/Makefile.darwin index 5303ca40ac4d..4a12e88f28ad 100644 --- a/Makefile.darwin +++ b/Makefile.darwin @@ -13,9 +13,6 @@ # limitations under the License. -#darwin specific settings -COMMANDS += containerd-shim - # amd64 supports go test -race ifeq ($(GOARCH),amd64) TESTFLAGS_RACE= -race diff --git a/Makefile.freebsd b/Makefile.freebsd index 78e7f2de45dd..a32c3f75244d 100644 --- a/Makefile.freebsd +++ b/Makefile.freebsd @@ -14,7 +14,6 @@ #freebsd specific settings -COMMANDS += containerd-shim # amd64 supports go test -race ifeq ($(GOARCH),amd64) diff --git a/Makefile.linux b/Makefile.linux index 05414007030d..1616b3a0cf5e 100644 --- a/Makefile.linux +++ b/Makefile.linux @@ -16,7 +16,7 @@ #linux specific settings WHALE="+" ONI="-" -COMMANDS += containerd-shim containerd-shim-runc-v1 containerd-shim-runc-v2 +COMMANDS += containerd-shim-runc-v2 # check GOOS for cross compile builds ifeq ($(GOOS),linux) diff --git a/Protobuild.toml b/Protobuild.toml deleted file mode 100644 index bdb21b5842c9..000000000000 --- a/Protobuild.toml +++ /dev/null @@ -1,38 +0,0 @@ -version = "2" -generators = ["go"] - -# Control protoc include paths. Below are usually some good defaults, but feel -# free to try it without them if it works for your project. -[includes] - # Include paths that will be added before all others. Typically, you want to - # treat the root of the project as an include, but this may not be necessary. - before = ["./protobuf"] - - # Paths that will be added untouched to the end of the includes. We use - # `/usr/local/include` to pickup the common install location of protobuf. - # This is the default. - after = ["/usr/local/include", "/usr/include"] - -[[overrides]] -# enable ttrpc and disable fieldpath and grpc for the shim -prefixes = [ - "github.com/containerd/containerd/runtime/v1/shim/v1", - "github.com/containerd/containerd/api/runtime/task/v2", - "github.com/containerd/containerd/api/runtime/sandbox/v1", -] -generators = ["go", "go-ttrpc"] - -# Lock down runc config -[[descriptors]] -prefix = "github.com/containerd/containerd/runtime/linux/runctypes" -target = "runtime/linux/runctypes/next.pb.txt" -ignore_files = [ - "google/protobuf/descriptor.proto", -] - -[[descriptors]] -prefix = "github.com/containerd/containerd/runtime/v2/runc/options" -target = "runtime/v2/runc/options/next.pb.txt" -ignore_files = [ - "google/protobuf/descriptor.proto", -] diff --git a/README.md b/README.md index 4d25524fd946..2c8192e7e05f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ ![containerd banner light mode](https://raw.githubusercontent.com/cncf/artwork/master/projects/containerd/horizontal/color/containerd-horizontal-color.png#gh-light-mode-only) ![containerd banner dark mode](https://raw.githubusercontent.com/cncf/artwork/master/projects/containerd/horizontal/white/containerd-horizontal-white.png#gh-dark-mode-only) -[![PkgGoDev](https://pkg.go.dev/badge/github.com/containerd/containerd)](https://pkg.go.dev/github.com/containerd/containerd) -[![Build Status](https://github.com/containerd/containerd/workflows/CI/badge.svg)](https://github.com/containerd/containerd/actions?query=workflow%3ACI) +[![PkgGoDev](https://pkg.go.dev/badge/github.com/containerd/containerd/v2)](https://pkg.go.dev/github.com/containerd/containerd/v2) +[![Build Status](https://github.com/containerd/containerd/actions/workflows/ci.yml/badge.svg?event=merge_group)](https://github.com/containerd/containerd/actions?query=workflow%3ACI+event%3Amerge_group) [![Nightlies](https://github.com/containerd/containerd/workflows/Nightly/badge.svg)](https://github.com/containerd/containerd/actions?query=workflow%3ANightly) -[![Go Report Card](https://goreportcard.com/badge/github.com/containerd/containerd)](https://goreportcard.com/report/github.com/containerd/containerd) +[![Go Report Card](https://goreportcard.com/badge/github.com/containerd/containerd/v2)](https://goreportcard.com/report/github.com/containerd/containerd/v2) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1271/badge)](https://bestpractices.coreinfrastructure.org/projects/1271) +[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/containerd/containerd/badge)](https://scorecard.dev/viewer/?uri=github.com/containerd/containerd) +[![Check Links](https://github.com/containerd/containerd/actions/workflows/links.yml/badge.svg)](https://github.com/containerd/containerd/actions/workflows/links.yml) -containerd is an industry-standard container runtime with an emphasis on simplicity, robustness and portability. It is available as a daemon for Linux and Windows, which can manage the complete container lifecycle of its host system: image transfer and storage, container execution and supervision, low-level storage and network attachments, etc. +containerd is an industry-standard container runtime with an emphasis on simplicity, robustness, and portability. It is available as a daemon for Linux and Windows, which can manage the complete container lifecycle of its host system: image transfer and storage, container execution and supervision, low-level storage and network attachments, etc. containerd is a member of CNCF with ['graduated'](https://landscape.cncf.io/?selected=containerd) status. @@ -17,28 +19,20 @@ containerd is designed to be embedded into a larger system, rather than being us ## Announcements -### Hello Kubernetes v1.24! -The containerd project would like to announce containerd [v1.6.4](https://github.com/containerd/containerd/releases/tag/v1.6.4). While other prior releases are supported, this latest release and the containerd [v1.5.11](https://github.com/containerd/containerd/releases/tag/v1.5.11) release are recommended for Kubernetes v1.24. - -We felt it important to announce this, particularly in view of [the dockershim removal from this release of Kubernetes](https://kubernetes.io/blog/2022/05/03/dockershim-historical-context/). - -It should be noted here that moving to CRI integrations has been in the plan for many years. `containerd` began as part of `Docker` and was donated to `CNCF`. `containerd` remains in use today by Docker/moby/buildkit etc., and has many other [adopters](https://github.com/containerd/containerd/blob/main/ADOPTERS.md). `containerd` has a namespace that isolates use of `containerd` from various clients/adopters. The Kubernetes namespace is appropriately named `k8s.io`. The CRI API and `containerd` CRI plugin project has, from the start, been an effort to reduce the impact surface for Kubernetes container runtime integration. If you can't tell, we are excited to see this come to fruition. - -If you have any concerns or questions, we will be here to answer them in [issues, discussions, and/or on slack](#communication). Below you will find information / detail about our [CRI Integration](#cri) implementation. - -For containerd users already on v1.6.0-v1.6.3, there are known issues addressed by [v1.6.4](https://github.com/containerd/containerd/releases/tag/v1.6.4). The issues are primarily related to [CNI setup](https://github.com/kubernetes/website/blob/dev-1.24/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors.md) +### containerd v2.0 is now released! +See [`docs/containerd-2.0.md`](docs/containerd-2.0.md). ### Now Recruiting We are a large inclusive OSS project that is welcoming help of any kind shape or form: * Documentation help is needed to make the product easier to consume and extend. -* We need OSS community outreach / organizing help to get the word out; manage -and create messaging and educational content; and to help with social media, community forums/groups, and google groups. +* We need OSS community outreach/organizing help to get the word out; manage +and create messaging and educational content; and help with social media, community forums/groups, and google groups. * We are actively inviting new [security advisors](https://github.com/containerd/project/blob/main/GOVERNANCE.md#security-advisors) to join the team. -* New sub-projects are being created, core and non-core that could use additional development help. +* New subprojects are being created, core and non-core that could use additional development help. * Each of the [containerd projects](https://github.com/containerd) has a list of issues currently being worked on or that need help resolving. - - If the issue has not already been assigned to someone, or has not made recent progress and you are interested, please inquire. - - If you are interested in starting with a smaller / beginner level issue, look for issues with an `exp/beginner` tag, for example [containerd/containerd beginner issues.](https://github.com/containerd/containerd/issues?q=is%3Aissue+is%3Aopen+label%3Aexp%2Fbeginner) + - If the issue has not already been assigned to someone or has not made recent progress, and you are interested, please inquire. + - If you are interested in starting with a smaller/beginner-level issue, look for issues with an `exp/beginner` tag, for example [containerd/containerd beginner issues.](https://github.com/containerd/containerd/issues?q=is%3Aissue+is%3Aopen+label%3Aexp%2Fbeginner) ## Getting Started @@ -47,7 +41,7 @@ See our documentation on [containerd.io](https://containerd.io): * [namespaces](docs/namespaces.md) * [client options](docs/client-opts.md) -See how to build containerd from source at [BUILDING](BUILDING.md). +To get started contributing to containerd, see [CONTRIBUTING](CONTRIBUTING.md). If you are interested in trying out containerd see our example at [Getting Started](docs/getting-started.md). @@ -58,6 +52,13 @@ Binaries are generated from `main` branch every night for `Linux` and `Windows`. Please be aware: nightly builds might have critical bugs, it's not recommended for use in production and no support provided. +## Kubernetes (k8s) CI Dashboard Group + +The [k8s CI dashboard group for containerd](https://testgrid.k8s.io/containerd) contains test results regarding +the health of kubernetes when run against main and a number of containerd release branches. + +- [containerd-periodics](https://testgrid.k8s.io/containerd-periodic) + ## Runtime Requirements Runtime requirements for containerd are very minimal. Most interactions with @@ -91,164 +92,8 @@ For configuring registries, see [registry host configuration documentation](docs ## Features -### Client - -containerd offers a full client package to help you integrate containerd into your platform. - -```go - -import ( - "context" - - "github.com/containerd/containerd" - "github.com/containerd/containerd/cio" - "github.com/containerd/containerd/namespaces" -) - - -func main() { - client, err := containerd.New("/run/containerd/containerd.sock") - defer client.Close() -} - -``` - -### Namespaces - -Namespaces allow multiple consumers to use the same containerd without conflicting with each other. It has the benefit of sharing content but still having separation with containers and images. - -To set a namespace for requests to the API: - -```go -context = context.Background() -// create a context for docker -docker = namespaces.WithNamespace(context, "docker") - -containerd, err := client.NewContainer(docker, "id") -``` - -To set a default namespace on the client: - -```go -client, err := containerd.New(address, containerd.WithDefaultNamespace("docker")) -``` - -### Distribution - -```go -// pull an image -image, err := client.Pull(context, "docker.io/library/redis:latest") - -// push an image -err := client.Push(context, "docker.io/library/redis:latest", image.Target()) -``` - -### Containers - -In containerd, a container is a metadata object. Resources such as an OCI runtime specification, image, root filesystem, and other metadata can be attached to a container. - -```go -redis, err := client.NewContainer(context, "redis-master") -defer redis.Delete(context) -``` - -### OCI Runtime Specification - -containerd fully supports the OCI runtime specification for running containers. We have built in functions to help you generate runtime specifications based on images as well as custom parameters. - -You can specify options when creating a container about how to modify the specification. - -```go -redis, err := client.NewContainer(context, "redis-master", containerd.WithNewSpec(oci.WithImageConfig(image))) -``` - -### Root Filesystems - -containerd allows you to use overlay or snapshot filesystems with your containers. It comes with built in support for overlayfs and btrfs. - -```go -// pull an image and unpack it into the configured snapshotter -image, err := client.Pull(context, "docker.io/library/redis:latest", containerd.WithPullUnpack) - -// allocate a new RW root filesystem for a container based on the image -redis, err := client.NewContainer(context, "redis-master", - containerd.WithNewSnapshot("redis-rootfs", image), - containerd.WithNewSpec(oci.WithImageConfig(image)), -) - -// use a readonly filesystem with multiple containers -for i := 0; i < 10; i++ { - id := fmt.Sprintf("id-%s", i) - container, err := client.NewContainer(ctx, id, - containerd.WithNewSnapshotView(id, image), - containerd.WithNewSpec(oci.WithImageConfig(image)), - ) -} -``` - -### Tasks - -Taking a container object and turning it into a runnable process on a system is done by creating a new `Task` from the container. A task represents the runnable object within containerd. - -```go -// create a new task -task, err := redis.NewTask(context, cio.NewCreator(cio.WithStdio)) -defer task.Delete(context) - -// the task is now running and has a pid that can be used to setup networking -// or other runtime settings outside of containerd -pid := task.Pid() - -// start the redis-server process inside the container -err := task.Start(context) - -// wait for the task to exit and get the exit status -status, err := task.Wait(context) -``` - -### Checkpoint and Restore - -If you have [criu](https://criu.org/Main_Page) installed on your machine you can checkpoint and restore containers and their tasks. This allows you to clone and/or live migrate containers to other machines. - -```go -// checkpoint the task then push it to a registry -checkpoint, err := task.Checkpoint(context) - -err := client.Push(context, "myregistry/checkpoints/redis:master", checkpoint) - -// on a new machine pull the checkpoint and restore the redis container -checkpoint, err := client.Pull(context, "myregistry/checkpoints/redis:master") - -redis, err = client.NewContainer(context, "redis-master", containerd.WithNewSnapshot("redis-rootfs", checkpoint)) -defer container.Delete(context) - -task, err = redis.NewTask(context, cio.NewCreator(cio.WithStdio), containerd.WithTaskCheckpoint(checkpoint)) -defer task.Delete(context) - -err := task.Start(context) -``` - -### Snapshot Plugins - -In addition to the built-in Snapshot plugins in containerd, additional external -plugins can be configured using GRPC. An external plugin is made available using -the configured name and appears as a plugin alongside the built-in ones. - -To add an external snapshot plugin, add the plugin to containerd's config file -(by default at `/etc/containerd/config.toml`). The string following -`proxy_plugin.` will be used as the name of the snapshotter and the address -should refer to a socket with a GRPC listener serving containerd's Snapshot -GRPC API. Remember to restart containerd for any configuration changes to take -effect. - -``` -[proxy_plugins] - [proxy_plugins.customsnapshot] - type = "snapshot" - address = "/var/run/mysnapshotter.sock" -``` - -See [PLUGINS.md](/docs/PLUGINS.md) for how to create plugins +For a detailed overview of containerd's core concepts and the features it supports, +please refer to the [FEATURES.MD](./docs/features.md) document. ### Releases and API Stability @@ -292,9 +137,6 @@ loaded for the user's shell environment. `cri` is a native plugin of containerd. Since containerd 1.1, the cri plugin is built into the release binaries and enabled by default. -> **Note:** As of containerd 1.5, the `cri` plugin is merged into the containerd/containerd repo. For example, the source code previously stored under [`containerd/cri/pkg`](https://github.com/containerd/cri/tree/release/1.4/pkg) -was moved to [`containerd/containerd/pkg/cri` package](https://github.com/containerd/containerd/tree/main/pkg/cri). - The `cri` plugin has reached GA status, representing that it is: * Feature complete * Works with Kubernetes 1.10 and above @@ -302,14 +144,14 @@ The `cri` plugin has reached GA status, representing that it is: * Passes all [node e2e tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/e2e-node-tests.md). * Passes all [e2e tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-testing/e2e-tests.md). -See results on the containerd k8s [test dashboard](https://k8s-testgrid.appspot.com/sig-node-containerd) +See results on the containerd k8s [test dashboard](https://testgrid.k8s.io/containerd) #### Validating Your `cri` Setup A Kubernetes incubator project, [cri-tools](https://github.com/kubernetes-sigs/cri-tools), includes programs for exercising CRI implementations. More importantly, cri-tools includes the program `critest` which is used for running [CRI Validation Testing](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/cri-validation.md). #### CRI Guides * [Installing with Ansible and Kubeadm](contrib/ansible/README.md) -* [For Non-Ansible Users, Preforming a Custom Installation Using the Release Tarball and Kubeadm](docs/cri/installation.md) +* [For Non-Ansible Users, Preforming a Custom Installation Using the Release Tarball and Kubeadm](docs/getting-started.md) * [CRI Plugin Testing Guide](./docs/cri/testing.md) * [Debugging Pods, Containers, and Images with `crictl`](./docs/cri/crictl.md) * [Configuring `cri` Plugins](./docs/cri/config.md) @@ -317,23 +159,25 @@ A Kubernetes incubator project, [cri-tools](https://github.com/kubernetes-sigs/c ### Communication -For async communication and long running discussions please use issues and pull requests on the github repo. +For async communication and long-running discussions please use issues and pull requests on the GitHub repo. This will be the best place to discuss design and implementation. -For sync communication catch us in the `#containerd` and `#containerd-dev` slack channels on Cloud Native Computing Foundation's (CNCF) slack - `cloud-native.slack.com`. Everyone is welcome to join and chat. [Get Invite to CNCF slack.](https://slack.cncf.io) +For sync communication catch us in the `#containerd` and `#containerd-dev` Slack channels on Cloud Native Computing Foundation's (CNCF) Slack - `cloud-native.slack.com`. Everyone is welcome to join and chat. [Get Invite to CNCF Slack.](https://slack.cncf.io) + +Join our next community meeting hosted on Zoom. The schedule is posted on the [CNCF Calendar](https://www.cncf.io/calendar/) (search 'containerd' to filter). ### Security audit -A third party security audit was performed by Cure53 in 4Q2018; the [full report](docs/SECURITY_AUDIT.pdf) is available in our docs/ directory. +Security audits for the containerd project are hosted on our website. Please see the [security page at containerd.io](https://containerd.io/security/) for more information. ### Reporting security issues -__If you are reporting a security issue, please reach out discreetly at security@containerd.io__. +Please follow the instructions at [containerd/project](https://github.com/containerd/project/blob/main/SECURITY.md#reporting-a-vulnerability) ## Licenses The containerd codebase is released under the [Apache 2.0 license](LICENSE). -The README.md file, and files in the "docs" folder are licensed under the +The README.md file and files in the "docs" folder are licensed under the Creative Commons Attribution 4.0 International License. You may obtain a copy of the license, titled CC-BY-4.0, at http://creativecommons.org/licenses/by/4.0/. diff --git a/RELEASES.md b/RELEASES.md index 89195d50e7c8..0cae61cdebc1 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,7 +1,7 @@ # Versioning and Release This document details the versioning and release plan for containerd. Stability -is a top goal for this project and we hope that this document and the processes +is a top goal for this project, and we hope that this document and the processes it entails will help to achieve that. It covers the release process, versioning numbering, backporting, API stability and support horizons. @@ -39,49 +39,45 @@ be done from that branch. For example, once we release `v1.0.0`, a branch `release/1.0` will be created from that tag. All future patch releases will be done against that branch. -### Pre-releases +### Release Cadence -Pre-releases, such as alphas, betas and release candidates will be conducted -from their source branch. For major and minor releases, these releases will be -done from main. For patch releases, these pre-releases should be done within -the corresponding release branch. +Minor releases are provided on a time basis with an initial cadence of 6 months. +The next two containerd releases should have a target release date scheduled based +on the current release cadence. Changes to the release cadence will not impact +releases which are already scheduled. -While pre-releases are done to assist in the stabilization process, no -guarantees are provided. +The maintainers will maintain a roadmap and milestones for each release, however, +features may be pushed to accommodate the release timeline. If your issue or feature +is not present in the roadmap, please open a Github issue or leave a +comment requesting it be added to a milestone. -### Upgrade Path +### Patch Releases -The upgrade path for containerd is such that the 0.0.x patch releases are -always backward compatible with its major and minor version. Minor (0.x.0) -version will always be compatible with the previous minor release. i.e. 1.2.0 -is backwards compatible with 1.1.0 and 1.1.0 is compatible with 1.0.0. There is -no compatibility guarantees for upgrades that span multiple, _minor_ releases. -For example, 1.0.0 to 1.2.0 is not supported. One should first upgrade to 1.1, -then 1.2. - -There are no compatibility guarantees with upgrades to _major_ versions. For -example, upgrading from 1.0.0 to 2.0.0 may require resources to migrated or -integrations to change. Each major version will be supported for at least 1 -year with bug fixes and security patches. +Patch releases are made directly from release branches and will be done as needed +by the release branch owners. -### Next Release +### Pre-releases -The activity for the next release will be tracked in the -[milestones](https://github.com/containerd/containerd/milestones). If your -issue or PR is not present in a milestone, please reach out to the maintainers -to create the milestone or add an issue or PR to an existing milestone. +Pre-releases, such as alphas, betas and release candidates will be conducted +from their source branch. For major and minor releases, these releases will be +done from main. For patch releases, it is uncommon to have pre-releases but +they may have an rc based on the discretion of the release branch owners. ### Support Horizon Support horizons will be defined corresponding to a release branch, identified -by `.`. Releases branches will be in one of several states: +by `.`. Release branches will be in one of several states: -- __*Next*__: The next planned release branch. -- __*Active*__: The release branch is currently supported and accepting patches. +- __*Future*__: An upcoming scheduled release. +- __*Alpha*__: The next scheduled release on the main branch under active development. +- __*Beta*__: The next scheduled release on the main branch under testing. Begins 8-10 weeks before a final release. +- __*RC*__: The next scheduled release on the main branch under final testing and stabilization. Begins 2-4 weeks before a final release. For new releases where the source branch is main, the main branch will be in a feature freeze during this phase. +- __*Active*__: The release is a stable branch which is currently supported and accepting patches. - __*Extended*__: The release branch is only accepting security patches. +- __*LTS*__: The release is a long term stable branch which is currently supported and accepting patches. - __*End of Life*__: The release branch is no longer supported and no new patches will be accepted. -Releases will be supported up to one year after a _minor_ release. This means that +Releases will be supported at least one year after a _minor_ release. This means that we will accept bug reports and backports to release branches until the end of life date. If no new _minor_ release has been made, that release will be considered supported until 6 months after the next _minor_ is released or one year, @@ -89,22 +85,56 @@ whichever is longer. Additionally, releases may have an extended security suppor period after the end of the active period to accept security backports. This timeframe will be decided by maintainers before the end of the active status. -The current state is available in the following tables: - -| Release | Status | Start | End of Life | -|---------|-------------|------------------|-------------------| -| [0.0](https://github.com/containerd/containerd/releases/tag/0.0.5) | End of Life | Dec 4, 2015 | - | -| [0.1](https://github.com/containerd/containerd/releases/tag/v0.1.0) | End of Life | Mar 21, 2016 | - | -| [0.2](https://github.com/containerd/containerd/tree/v0.2.x) | End of Life | Apr 21, 2016 | December 5, 2017 | -| [1.0](https://github.com/containerd/containerd/releases/tag/v1.0.3) | End of Life | December 5, 2017 | December 5, 2018 | -| [1.1](https://github.com/containerd/containerd/releases/tag/v1.1.8) | End of Life | April 23, 2018 | October 23, 2019 | -| [1.2](https://github.com/containerd/containerd/releases/tag/v1.2.13) | End of Life | October 24, 2018 | October 15, 2020 | -| [1.3](https://github.com/containerd/containerd/releases/tag/v1.3.10) | End of Life | September 26, 2019 | March 4, 2021 | -| [1.4](https://github.com/containerd/containerd/releases/tag/v1.4.13) | End of Life | August 17, 2020 | March 3, 2022 | -| [1.5](https://github.com/containerd/containerd/releases/tag/v1.5.11) | Active | May 3, 2021 | October 28, 2022 | -| [1.6](https://github.com/containerd/containerd/releases/tag/v1.6.4) | Active | February 15, 2022 | max(February 15, 2023 or release of 1.7.0 + 6 months) | -| [1.7](https://github.com/containerd/containerd/milestone/42) | Next | TBD | TBD | - +Long term stable (_LTS_) releases are owned by at least two maintainers for at least two +years after their initial _minor_ (x.y.0) release. The maintainers of the _LTS_ branch may commit to +a longer period or extend the support period as needed. These branches will accept bug reports and +backports until the end of life date. They may also accept a wider range of patches than non-_LTS_ +releases to support the longer term maintainability of the branch, including library dependency, +toolchain (including Go) and other version updates which are needed to ensure each release is built +with fully supported dependencies. Feature backports are up to the discretion of the maintainers who +own the branch but should be rejected by default. There is no defined limit to the number of _LTS_ +branches and any branch may become an _LTS_ branch after its initial release. There is no guarantee +that a new _LTS_ branch will be designated before existing _LTS_ branches reach their end of life. + +### Release Owners + +Every release shall be assigned owners when entering into the beta stage of the release. The initial +release owners will be responsible for creating the releases and ensuring the release is on time. +Once the release is in rc, the release owners should be part of any discussion around merging +impactful or risky changes. Every release should have at least two owners who are all active +maintainers and one of which has been a release owner in at least two prior releases. + +Once the final release is out and the release branch moves to active, ownership will be +transferred back over to all committers. Active releases are maintained by all committers +until the release reaches end of life or the branch transitions to _LTS_. + +Every _LTS_ release requires at least two maintainers to volunteer as owners. The owners of the +_LTS_ release may step down or be replaced by another maintainer at any time if they can no longer +support the release. If no maintainers volunteer to own the _LTS_ release after maintainers step +down, the branch will end of life after 6 months of extended support with ownership transferred back +to all committers. + +### Current State of containerd Releases + +| Release | Status | Start | End of Life | Owners | +| -------------------------------------------------------------------- | ------------- | ------------------------------ | ------------------------------ | ---------------------- | +| [0.0](https://github.com/containerd/containerd/releases/tag/0.0.5) | End of Life | Dec 4, 2015 | - | | +| [0.1](https://github.com/containerd/containerd/releases/tag/v0.1.0) | End of Life | Mar 21, 2016 | - | | +| [0.2](https://github.com/containerd/containerd/tree/v0.2.x) | End of Life | Apr 21, 2016 | December 5, 2017 | | +| [1.0](https://github.com/containerd/containerd/releases/tag/v1.0.3) | End of Life | December 5, 2017 | December 5, 2018 | | +| [1.1](https://github.com/containerd/containerd/releases/tag/v1.1.8) | End of Life | April 23, 2018 | October 23, 2019 | | +| [1.2](https://github.com/containerd/containerd/releases/tag/v1.2.13) | End of Life | October 24, 2018 | October 15, 2020 | | +| [1.3](https://github.com/containerd/containerd/releases/tag/v1.3.10) | End of Life | September 26, 2019 | March 4, 2021 | | +| [1.4](https://github.com/containerd/containerd/releases/tag/v1.4.13) | End of Life | August 17, 2020 | March 3, 2022 | | +| [1.5](https://github.com/containerd/containerd/releases/tag/v1.5.18) | End of Life | May 3, 2021 | February 28, 2023 | | +| [1.6](https://github.com/containerd/containerd/releases/tag/v1.6.39) | End of Life | February 15, 2022 | August 23, 2025 | @containerd/committers | +| [1.7](https://github.com/containerd/containerd/releases/tag/v1.7.0) | LTS | March 10, 2023 | September 2026* | @containerd/committers | +| [2.0](https://github.com/containerd/containerd/releases/tag/v2.0.7) | End of Life | November 5, 2024 | November 7, 2025 | @containerd/committers | +| [2.1](https://github.com/containerd/containerd/releases/tag/v2.1.0) | Active | May 7, 2025 | May 5, 2026 | @containerd/committers | +| [2.2](https://github.com/containerd/containerd/releases/tag/v2.2.0) | Active | November 5, 2025 | November 6, 2026 | @containerd/committers | +| [2.3](https://github.com/containerd/containerd/milestone/50) | _Future_ | May 6, 2026 (_tentative_) | _TBD_ | _TBD_ | + +\* Support for the 1.7 release branch is provided by @containerd/committers until March 10, 2026. Extended support through September 2026 is provided by @chrishenzie and @samuelkarp. ### Kubernetes Support @@ -117,31 +147,33 @@ for the list of actively tested versions. Kubernetes only supports n-3 minor release versions and containerd will ensure there is always a supported version of containerd for every supported version of Kubernetes. -| Kubernetes Version | containerd Version | CRI Version | -|--------------------|--------------------|--------------| -| 1.20 | 1.5 | v1alpha2 | -| 1.21 | 1.5 | v1alpha2 | -| 1.22 | 1.5.5+ | v1alpha2 | -| 1.23 | 1.6.0+, 1,5.8+ | v1, v1alpha2 | -| 1.24 | 1.6.4+, 1.5.11+ | v1, v1alpha2 | +| Kubernetes Version | containerd Version | CRI Version | +|--------------------|----------------------------------|-----------------| +| 1.32 | 2.1.0+, 2.0.1+, 1.7.24+, 1.6.36+ | v1 | +| 1.33 | 2.1.0+, 2.0.4+, 1.7.24+, 1.6.36+ | v1 | +| 1.34 | 2.1.3+, 2.0.6+, 1.7.28+, 1.6.39+ | v1 | +| 1.35 | 2.2.0+, 2.1.5+, 1.7.28+ | v1 | Deprecated containerd and kubernetes versions -| CRI-Containerd Version | Containerd Version | Kubernetes Version | CRI Version | -|------------------------|--------------------|--------------------|--------------| -| v1.0.0-alpha.x | | 1.7, 1.8 | v1alpha1 | -| v1.0.0-beta.x | | 1.9 | v1alpha1 | -| End-Of-Life | v1.1 (End-Of-Life) | 1.10+ | v1alpha2 | -| | v1.2 (End-Of-Life) | 1.10+ | v1alpha2 | -| | v1.3 (End-Of-Life) | 1.12+ | v1alpha2 | -| | v1.4 (End-of-Life) | 1.19+ | v1alpha2 | +| Containerd Version | Kubernetes Version | CRI Version | +|--------------------------|--------------------|--------------------------------------| +| v1.0 (w/ cri-containerd) | 1.7, 1.8, 1.9 | v1alpha1 | +| v1.1 | 1.10+ | v1alpha2 | +| v1.2 | 1.10+ | v1alpha2 | +| v1.3 | 1.12+ | v1alpha2 | +| v1.4 | 1.19+ | v1alpha2 | +| v1.5 | 1.20+ | v1 (1.23+), v1alpha2 (until 1.25) ** | +| v1.6.15+, v1.7.0+ | 1.26+ | v1 | + +** Note: containerd v1.6.*, and v1.7.* support CRI v1 and v1alpha2 through EOL as those releases continue to support older versions of k8s, cloud providers, and other clients using CRI v1alpha2. CRI v1alpha2 is deprecated in v1.7 and is not present in containerd v2.0. ### Backporting Backports in containerd are community driven. As maintainers, we'll try to ensure that sensible bugfixes make it into _active_ release, but our main focus will be features for the next _minor_ or _major_ release. For the most part, -this process is straightforward and we are here to help make it as smooth as +this process is straightforward, and we are here to help make it as smooth as possible. If there are important fixes that need to be backported, please let us know in @@ -151,7 +183,10 @@ one of three ways: 2. Open a PR with cherry-picked change from main. 3. Open a PR with a ported fix. -__If you are reporting a security issue, please reach out discreetly at security@containerd.io__. +__If you are reporting a security issue:__ + +Please follow the instructions at [containerd/project](https://github.com/containerd/project/blob/main/SECURITY.md#reporting-a-vulnerability) + Remember that backported PRs must follow the versioning guidelines from this document. Any release that is "active" can accept backports. Opening a backport PR is @@ -159,7 +194,7 @@ fairly straightforward. The steps differ depending on whether you are pulling a fix from main or need to draft a new commit specific to a particular branch. -To cherry pick a straightforward commit from main, simply use the cherry pick +To cherry-pick a straightforward commit from main, simply use the cherry-pick process: 1. Pick the branch to which you want backported, usually in the format @@ -176,6 +211,14 @@ process: ```console $ git cherry-pick -xsS ``` + + If all of the work from a particular PR/set of PRs is wanted, + cherry-pick the individual commits instead of the merge commit. + Take #8624 for example, 82ec62b is favored over 9e834e7. + + (Optional) If other commits exist in the main branch which are related + to the cherry-picked commit; eg: fixes to the main PR. It is recommended + to cherry-pick those commits also into this same `my-backport-branch`. 4. Push the branch and open up a PR against the _release branch_: ``` @@ -198,6 +241,24 @@ completed, open a PR using the process above. Only when the bug is not seen in main and must be made for the specific release branch should you open a PR with new code. +### Upgrade Path + +The upgrade path for containerd is such that the 0.0.x patch releases are +always backward compatible with its major and minor version. Minor (0.x.0) +version will always be compatible with the previous minor release. i.e. 1.2.0 +is backwards compatible with 1.1.0 and 1.1.0 is compatible with 1.0.0. There is +no compatibility guarantees for upgrades that span multiple, _minor_ releases. +For example, 1.0.0 to 1.2.0 is not supported. One should first upgrade to 1.1, +then 1.2. + +There are no compatibility guarantees with upgrades to _major_ versions. For 2.0, migration was +added to ensure upgrading from 1.6 or 1.7 to 2.0 is easy. The latest releases of 1.6 and 1.7 provide +deprecation warnings if any configuration is used which is incompatible with 2.0. If deprecation +warnings are showing up, the configuration can be safely migrated in 1.6 or 1.7 before upgrading to +2.0. Once no deprecation warnings are showing up, the upgrade to 2.0 should be smooth. Always +check the release notes, breaking changes are listed there, and test your configuration before +upgrading. + ## Public API Stability The following table provides an overview of the components covered by @@ -211,7 +272,7 @@ containerd versions: | Runtime Shim API | Stable | 1.2 | - | | Daemon Config | Stable | 1.0 | - | | CRI GRPC API | Stable | 1.6 (_CRI v1_) | [cri-api](https://github.com/kubernetes/cri-api/tree/master/pkg/apis/runtime/v1) | -| Go client API | Unstable | _future_ | [godoc](https://godoc.org/github.com/containerd/containerd) | +| Go client API | Stable | 2.0 | [godoc](https://pkg.go.dev/github.com/containerd/containerd/v2/client) | | `ctr` tool | Unstable | Out of scope | - | From the version stated in the above table, that component must adhere to the @@ -221,6 +282,11 @@ Unless explicitly stated here, components that are called out as unstable or not covered may change in a future minor version. Breaking changes to "unstable" components will be avoided in patch versions. +Go client API stability includes the `client`, `defaults` and `version` package +as well as all packages under `pkg`, `core`, `api` and `protobuf`. +All packages under `cmd`, `contrib`, `integration`, and `internal` are not +considered part of the stable client API. + ### GRPC API The primary product of containerd is the GRPC API. As of the 1.0.0 release, the @@ -239,6 +305,38 @@ and new fields on messages may be added if they are optional. to the API by having a diff that the CI can run. These files are not intended to be consumed or used by clients. +As of containerd 2.0, the API version diverges from the main containerd version. +While containerd 2.0 is a _major_ version jump for containerd, the API will remain +on 1.x to remain backwards compatible with prior releases and existing clients. +The 2.0 release adds the API to a separate Go module which can remain as the +`github.com/containerd/containerd/api` Go package and imported separately from the +rest of containerd. + +The API minor version will continue to be incremented for each major and minor +version release of containerd. However, the API is tagged directly out of the +main branch with the minor version incrementing earlier in the next release cycle +rather than at the end. This means that after the containerd 2.0 release, the next +API change is tagged as `api/v1.9.0` prior to any containerd 2.1 release. The +latest API version should be backported to all supported versions and patch +releases for prior API versions should be avoided if possible. + + +| Containerd Version | API Version at Release | +|--------------------|------------------------| +| v1.0 | 1.0 | +| v1.1 | 1.1 | +| v1.2 | 1.2 | +| v1.3 | 1.3 | +| v1.4 | 1.4 | +| v1.5 | 1.5 | +| v1.6 | 1.6 | +| v1.7 | 1.7 | +| v2.0 | 1.8 | +| v2.1 | 1.9 | +| v2.2 | 1.10 | +| _v2.3_ | _1.11_ | + + ### Metrics API The metrics API that outputs prometheus style metrics will be versioned independently, @@ -255,7 +353,7 @@ Plugins implemented in tree are supported by the containerd community unless exp Out of tree plugins are not supported by the containerd maintainers. Currently, the Windows runtime and snapshot plugins are not stable and not supported. -Please refer to the github milestones for Windows support in a future release. +Please refer to the GitHub milestones for Windows support in a future release. #### Error Codes @@ -267,7 +365,7 @@ new version of the service. If you find that an error code that is required by your application is not well-documented in the protobuf service description or tested explicitly, -please file and issue and we will clarify. +please file an issue and we will clarify. #### Opaque Fields @@ -278,24 +376,21 @@ follow that format. ### Go client API -The Go client API, documented in -[godoc](https://godoc.org/github.com/containerd/containerd), is currently -considered unstable. It is recommended to vendor the necessary components to -stabilize your project build. Note that because the Go API interfaces with the -GRPC API, clients written against a 1.0 Go API should remain compatible with -future 1.x series releases. - -We intend to stabilize the API in a future release when more integrations have -been carried out. +As of containerd 2.0, the Go client API documented in +[godoc](https://godoc.org/github.com/containerd/containerd/v2/client) is stable. +Note that because the Go client interfaces with the GRPC API, clients building on top +of the Go client should remain compatible with future server releases implementing the +same major GRPC API series. For backwards compatability and as a general rule of thumb, +it is the client's responsibility to handle not implemented errors returned by the containerd daemon. -Any changes to the API should be detectable at compile time, so upgrading will +Any changes to the Go client API should be detectable at compile time, so upgrading will be a matter of fixing compilation errors and moving from there. ### CRI GRPC API The CRI (Container Runtime Interface) GRPC API is used by a Kubernetes kubelet to communicate with a container runtime. This interface is used to manage -container lifecycles and container images. Currently this API is under +container lifecycles and container images. Currently, this API is under development and unstable across Kubernetes releases. Each Kubernetes release only supports a single version of CRI and the CRI plugin only implements a single version of CRI. @@ -308,7 +403,7 @@ version of Kubernetes which supports that version of CRI. The `ctr` tool provides the ability to introspect and understand the containerd API. It is not considered a primary offering of the project and is unsupported in -that sense. While we understand it's value as a debug tool, it may be completely +that sense. While we understand its value as a debug tool, it may be completely refactored or have breaking changes in _minor_ releases. Targeting `ctr` for feature additions reflects a misunderstanding of the containerd @@ -322,9 +417,26 @@ We will do our best to not break compatibility in the tool in _patch_ releases. The daemon's configuration file, commonly located in `/etc/containerd/config.toml` is versioned and backwards compatible. The `version` field in the config file specifies the config's version. If no version number is specified inside -the config file then it is assumed to be a version 1 config and parsed as such. -Please use `version = 2` to enable version 2 config as version 1 has been -deprecated. +the config file then it is assumed to be a version `1` config and parsed as such. +The latest version is `version = 2`. The `main` branch is being prepared to support +the next config version `3`. The configuration is automatically migrated to the +latest version on each startup, leaving the configuration file unchanged. To avoid +the migration and optimize the daemon startup time, use `containerd config migrate` +to output the configuration as the latest version. Version `1` is no longer deprecated +and is supported by migration, however, it is recommended to use at least version `2`. + +Migrating a configuration to the latest version will limit the prior versions +of containerd in which the configuration can be used. It is suggested not to +migrate your configuration file until you are confident you do not need to +quickly rollback your containerd version. Use the table of configuration +versions to containerd releases to know the minimum version of containerd for +each configuration version. + +| Configuration Version | Minimum containerd version | +|-----------------------|----------------------------| +| 1 | v1.0.0 | +| 2 | v1.3.0 | +| 3 | v2.0.0 | ### Not Covered @@ -350,11 +462,97 @@ against total impact. The deprecated features are shown in the following table: -| Component | Deprecation release | Target release for removal | Recommendation | -|----------------------------------------------------------------------------------|---------------------|----------------------------|-----------------------------------| -| Runtime V1 API and implementation (`io.containerd.runtime.v1.linux`) | containerd v1.4 | containerd v2.0 | Use `io.containerd.runc.v2` | -| Runc V1 implementation of Runtime V2 (`io.containerd.runc.v1`) | containerd v1.4 | containerd v2.0 | Use `io.containerd.runc.v2` | -| config.toml `version = 1` | containerd v1.5 | containerd v2.0 | Use config.toml `version = 2` | -| Built-in `aufs` snapshotter | containerd v1.5 | containerd v2.0 | Use `overlayfs` snapshotter | -| `cri-containerd-*.tar.gz` release bundles | containerd v1.6 | containerd v2.0 | Use `containerd-*.tar.gz` bundles | -| Pulling Schema 1 images (`application/vnd.docker.distribution.manifest.v1+json`) | containerd v1.7 | containerd v2.0 | Use Schema 2 or OCI images | +| Component | Deprecation release | Target release for removal | Recommendation | +|----------------------------------------------------------------------------------|---------------------|---------------------------------------|------------------------------------------| +| Runtime V1 API and implementation (`io.containerd.runtime.v1.linux`) | containerd v1.4 | containerd v2.0 ✅ | Use `io.containerd.runc.v2` | +| Runc V1 implementation of Runtime V2 (`io.containerd.runc.v1`) | containerd v1.4 | containerd v2.0 ✅ | Use `io.containerd.runc.v2` | +| Built-in `aufs` snapshotter | containerd v1.5 | containerd v2.0 ✅ | Use `overlayfs` snapshotter | +| Container label `containerd.io/restart.logpath` | containerd v1.5 | containerd v2.0 ✅ | Use `containerd.io/restart.loguri` label | +| `cri-containerd-*.tar.gz` release bundles | containerd v1.6 | containerd v2.0 ✅ | Use `containerd-*.tar.gz` bundles | +| Pulling Schema 1 images (`application/vnd.docker.distribution.manifest.v1+prettyjws`) | containerd v1.7 | containerd v2.1 (Disabled in v2.0) ✅ | Use Schema 2 or OCI images | +| CRI `v1alpha2` | containerd v1.7 | containerd v2.0 ✅ | Use CRI `v1` | +| Legacy CRI implementation of podsandbox support | containerd v2.0 | containerd v2.0 ✅ | | +| Go-Plugin library (`*.so`) as containerd runtime plugin | containerd v2.0 | containerd v2.1 ✅ | Use external plugins (proxy or binary) | +| CNI `bin_dir` in CRI runtime config (`plugins.'io.containerd.cri.v1.runtime'.cni.bin_dir`) | containerd v2.1 | containerd v2.3 | Change `bin_dir` to `bin_dirs` in the same section which supports a list of directories | +| NRI v0.1.0 plugin support | containerd v2.2 | containerd v2.3 | Use the v010-adapter NRI plugin, or update v0.1.0 plugins to use the current NRI API | +| cgroup v1 support | containerd v2.2 | (May 2029) | Use cgroup v2 | + +- Pulling Schema 1 images has been disabled in containerd v2.0, but it still can be enabled by setting an environment variable `CONTAINERD_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE=1` + until containerd v2.1. `ctr` users have to specify `--local` too (e.g., `ctr images pull --local`). Users of CRI clients (such as Kubernetes and `crictl`) have to specify this environment variable on the containerd daemon (usually in the systemd unit). +- The latest release in May 2029 may not necessarily support cgroup v1, but there will be at least one maintained branch with the support for cgroup v1. + +### Deprecated config properties +The deprecated properties in [`config.toml`](./docs/cri/config.md) are shown in the following table: + +| Property Group | Property | Deprecation release | Target release for removal | Recommendation | +|----------------------------------------------------------------------|------------------------------|---------------------|----------------------------|-------------------------------------------------| +|`[plugins."io.containerd.grpc.v1.cri"]` | `systemd_cgroup` | containerd v1.3 | containerd v2.0 ✅ | Use `SystemdCgroup` in runc options (see below) | +|`[plugins."io.containerd.grpc.v1.cri".containerd]` | `untrusted_workload_runtime` | containerd v1.2 | containerd v2.0 ✅ | Create `untrusted` runtime in `runtimes` | +|`[plugins."io.containerd.grpc.v1.cri".containerd]` | `default_runtime` | containerd v1.3 | containerd v2.0 ✅ | Use `default_runtime_name` | +|`[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.*]` | `runtime_engine` | containerd v1.3 | containerd v2.0 ✅ | Use runtime v2 | +|`[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.*]` | `runtime_root` | containerd v1.3 | containerd v2.0 ✅ | Use `options.Root` | +|`[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.*]` | `disable_cgroup` | - | containerd v2.0 ✅ | Use [cgroup v2 delegation](https://rootlesscontaine.rs/getting-started/common/cgroup2/) | +|`[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.*.options]` | `CriuPath` | containerd v1.7 | containerd v2.0 ✅ | Set `$PATH` to the `criu` binary | +|`[plugins."io.containerd.grpc.v1.cri".registry]` | `auths` | containerd v1.3 | containerd v2.3 | Use [`ImagePullSecrets`](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/). See also [#8228](https://github.com/containerd/containerd/issues/8228). | +|`[plugins."io.containerd.grpc.v1.cri".registry]` | `configs` | containerd v1.5 | containerd v2.3 | Use [`config_path`](./docs/hosts.md) | +|`[plugins."io.containerd.grpc.v1.cri".registry]` | `mirrors` | containerd v1.5 | containerd v2.3 | Use [`config_path`](./docs/hosts.md) | +|`[plugins."io.containerd.tracing.processor.v1.otlp"]` | `endpoint`, `protocol`, `insecure` | containerd v1.6.29 | containerd v2.3 | Use [OTLP environment variables](https://opentelemetry.io/docs/specs/otel/protocol/exporter/), e.g. OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_SDK_DISABLED | +|`[plugins."io.containerd.internal.v1.tracing"]` | `service_name`, `sampling_ratio` | containerd v1.6.29 | containerd v2.3 | Instead use [OTel environment variables](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/), e.g. OTEL_SERVICE_NAME, OTEL_TRACES_SAMPLER* | +|`[plugins."io.containerd.cri.v1.runtime"]` | `enable_cdi` | containerd v2.2 | containerd v2.4 | CDI support will always be enabled | + + +> **Note** +> +> CNI Config Template (`plugins."io.containerd.grpc.v1.cri".cni.conf_template`) was once deprecated in v1.7.0, +> but its deprecation was cancelled in v1.7.3. + +
Example: runc option SystemdCgroup

+ +```toml +version = 2 + +# OLD +# [plugins."io.containerd.grpc.v1.cri"] +# systemd_cgroup = true + +# NEW +[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true +``` + +

+ +
Example: runc option Root

+ +```toml +version = 2 + +# OLD +# [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] +# runtime_root = "/path/to/runc/root" + +# NEW +[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + Root = "/path/to/runc/root" +``` + +

+ +## Experimental features + +Experimental features are new features added to containerd which do not have the +same stability guarantees as the rest of containerd. An effort is made to avoid +breaking interfaces between versions, but changes to experimental features before +being fully supported is possible. Users can still expect experimental features +to be high quality and are encouraged to use new features to help them stabilize +more quickly. + +| Component | Initial Release | Target Supported Release | +|----------------------------------------------------------------------------------------|-----------------|--------------------------| +| [Sandbox Service](https://github.com/containerd/containerd/pull/6703) | containerd v1.7 | containerd v2.0 | +| [Sandbox CRI Server](https://github.com/containerd/containerd/pull/7228) | containerd v1.7 | containerd v2.0 | +| [Transfer Service](https://github.com/containerd/containerd/pull/7320) | containerd v1.7 | containerd v2.0 | +| [NRI in CRI Support](https://github.com/containerd/containerd/pull/6019) | containerd v1.7 | containerd v2.0 | +| [gRPC Shim](https://github.com/containerd/containerd/pull/8052) | containerd v1.7 | containerd v2.0 | +| [CRI Runtime Specific Snapshotter](https://github.com/containerd/containerd/pull/6899) | containerd v1.7 | containerd v2.0 | +| [CRI Support for User Namespaces](./docs/user-namespaces/README.md) | containerd v1.7 | containerd v2.0 | diff --git a/ROADMAP.md b/ROADMAP.md index aacd10739266..cf542e1e4585 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,7 +1,7 @@ # containerd roadmap containerd uses the issues and milestones to define its roadmap. -`ROADMAP.md` files are common in open source projects but we find they quickly become out of date. +`ROADMAP.md` files are common in open source projects, but we find they quickly become out of date. We opt for an issues and milestone approach that our maintainers and community can keep up-to-date as work is added and completed. ## Issues diff --git a/SCOPE.md b/SCOPE.md index aec9da9158b4..7a1a893a134d 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -31,12 +31,12 @@ Additional implementations will not be accepted into the core repository and sho ## Scope The following table specifies the various components of containerd and general features of container runtimes. -The table specifies whether or not the feature/component is in or out of scope. +The table specifies whether the feature/component is in or out of scope. | Name | Description | In/Out | Reason | |------------------------------|--------------------------------------------------------------------------------------------------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | execution | Provide an extensible execution layer for executing a container | in | Create,start, stop pause, resume exec, signal, delete | -| cow filesystem | Built in functionality for overlay, aufs, and other copy on write filesystems for containers | in | | +| cow filesystem | Built in functionality for overlay and other copy on write filesystems for containers | in | | | distribution | Having the ability to push and pull images as well as operations on images as a first class API object | in | containerd will fully support the management and retrieval of images | | metrics | container-level metrics, cgroup stats, and OOM events | in | | networking | creation and management of network interfaces | out | Networking will be handled and provided to containerd via higher level systems. | diff --git a/Vagrantfile b/Vagrantfile index f61f5a5bddd6..f3bc611450b7 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -17,23 +17,32 @@ # Vagrantfile for Fedora and EL Vagrant.configure("2") do |config| - config.vm.box = ENV["BOX"] || "fedora/36-cloud-base" - config.vm.box_version = ENV["BOX_VERSION"] + config.vm.box = ENV["BOX"] ? ENV["BOX"].split("@")[0] : "fedora/43-cloud-base" + # BOX_VERSION is deprecated. Use "BOX=@". + config.vm.box_version = ENV["BOX_VERSION"] || (ENV["BOX"].split("@")[1] if ENV["BOX"]) memory = 4096 cpus = 2 disk_size = 60 - config.vm.provider :virtualbox do |v| + config.vm.provider :virtualbox do |v, o| v.memory = memory v.cpus = cpus - v.disk :disk, size: "#{disk_size}GB", primary: true + # Needs env var VAGRANT_EXPERIMENTAL="disks" + o.vm.disk :disk, size: "#{disk_size}GB", primary: true + v.customize ["modifyvm", :id, "--firmware", "efi"] end config.vm.provider :libvirt do |v| v.memory = memory v.cpus = cpus v.machine_virtual_size = disk_size + # https://github.com/vagrant-libvirt/vagrant-libvirt/issues/1725#issuecomment-1454058646 + # Needs `sudo cp /usr/share/OVMF/OVMF_VARS_4M.fd /var/lib/libvirt/qemu/nvram/` + v.loader = '/usr/share/OVMF/OVMF_CODE_4M.fd' + v.nvram = '/var/lib/libvirt/qemu/nvram/OVMF_VARS_4M.fd' end + config.vm.synced_folder ".", "/vagrant", type: "rsync" + config.vm.provision 'shell', path: 'script/resize-vagrant-root.sh' # Disabled by default. To run: @@ -74,6 +83,7 @@ Vagrant.configure("2") do |config| libselinux-devel \ lsof \ make \ + strace \ ${INSTALL_PACKAGES} SHELL end @@ -97,7 +107,7 @@ EOF config.vm.provision "install-golang", type: "shell", run: "once" do |sh| sh.upload_path = "/tmp/vagrant-install-golang" sh.env = { - 'GO_VERSION': ENV['GO_VERSION'] || "1.18.4", + 'GO_VERSION': ENV['GO_VERSION'] || "1.24.13", } sh.inline = <<~SHELL #!/usr/bin/env bash @@ -152,7 +162,8 @@ EOF source /etc/environment source /etc/profile.d/sh.local set -eux -o pipefail - ${GOPATH}/src/github.com/containerd/containerd/script/setup/install-cni + cd ${GOPATH}/src/github.com/containerd/containerd + script/setup/install-cni PATH=/opt/cni/bin:$PATH type ${CNI_BINARIES} || true SHELL end @@ -182,7 +193,7 @@ EOF source /etc/profile.d/sh.local set -eux -o pipefail cd ${GOPATH}/src/github.com/containerd/containerd - make BUILDTAGS="seccomp selinux no_aufs no_btrfs no_devmapper no_zfs" binaries install + make BUILDTAGS="seccomp selinux no_btrfs no_devmapper no_zfs" binaries install type containerd containerd --version chcon -v -t container_runtime_exec_t /usr/local/bin/{containerd,containerd-shim*} @@ -202,6 +213,19 @@ EOF SHELL end + config.vm.provision "install-failpoint-binaries", type: "shell", run: "once" do |sh| + sh.upload_path = "/tmp/vagrant-install-failpoint-binaries" + sh.inline = <<~SHELL + #!/usr/bin/env bash + source /etc/environment + source /etc/profile.d/sh.local + set -eux -o pipefail + ${GOPATH}/src/github.com/containerd/containerd/script/setup/install-failpoint-binaries + chcon -v -t container_runtime_exec_t $(type -ap containerd-shim-runc-fp-v1) + containerd-shim-runc-fp-v1 -v + SHELL + end + # SELinux is Enforcing by default. # To set SELinux as Disabled on a VM that has already been provisioned: # SELINUX=Disabled vagrant up --provision-with=selinux @@ -218,8 +242,8 @@ EOF SHELL end - # SELinux is permissive by default (via provisioning) in this VM. To re-run with SELinux enforcing: - # vagrant up --provision-with=selinux-enforcing,test-integration + # SELinux is Enforcing by default (via provisioning) in this VM. To re-run with SELinux disabled: + # SELINUX=Disabled vagrant up --provision-with=selinux,test-integration # config.vm.provision "test-integration", type: "shell", run: "never" do |sh| sh.upload_path = "/tmp/test-integration" @@ -227,6 +251,7 @@ EOF 'RUNC_FLAVOR': ENV['RUNC_FLAVOR'] || "runc", 'GOTEST': ENV['GOTEST'] || "go test", 'GOTESTSUM_JUNITFILE': ENV['GOTESTSUM_JUNITFILE'], + 'GOTESTSUM_JSONFILE': ENV['GOTESTSUM_JSONFILE'], } sh.inline = <<~SHELL #!/usr/bin/env bash @@ -235,19 +260,50 @@ EOF set -eux -o pipefail rm -rf /var/lib/containerd-test /run/containerd-test cd ${GOPATH}/src/github.com/containerd/containerd - go test -v -count=1 -race ./metrics/cgroups + go test -v -count=1 -race ./core/metrics/cgroups make integration EXTRA_TESTFLAGS="-timeout 15m -no-criu -test.v" TEST_RUNTIME=io.containerd.runc.v2 RUNC_FLAVOR=$RUNC_FLAVOR SHELL end - # SELinux is permissive by default (via provisioning) in this VM. To re-run with SELinux enforcing: - # vagrant up --provision-with=selinux-enforcing,test-cri + # SELinux is Enforcing by default (via provisioning) in this VM. To re-run with SELinux disabled: + # SELINUX=Disabled vagrant up --provision-with=selinux,test-cri-integration + # + config.vm.provision "test-cri-integration", type: "shell", run: "never" do |sh| + sh.upload_path = "/tmp/test-cri-integration" + sh.env = { + 'GOTEST': ENV['GOTEST'] || "go test", + 'GOTESTSUM_JUNITFILE': ENV['GOTESTSUM_JUNITFILE'], + 'GOTESTSUM_JSONFILE': ENV['GOTESTSUM_JSONFILE'], + 'GITHUB_WORKSPACE': '', + 'CGROUP_DRIVER': ENV['CGROUP_DRIVER'], + } + sh.inline = <<~SHELL + #!/usr/bin/env bash + source /etc/environment + source /etc/profile.d/sh.local + set -eux -o pipefail + cleanup() { + rm -rf /var/lib/containerd* /run/containerd* /tmp/containerd* /tmp/test* /tmp/failpoint* /tmp/nri* + } + cleanup + cd ${GOPATH}/src/github.com/containerd/containerd + # cri-integration.sh executes containerd from ./bin, not from $PATH . + make BUILDTAGS="seccomp selinux no_btrfs no_devmapper no_zfs" binaries bin/cri-integration.test + chcon -v -t container_runtime_exec_t ./bin/{containerd,containerd-shim*} + CONTAINERD_RUNTIME=io.containerd.runc.v2 ./script/test/cri-integration.sh + cleanup + SHELL + end + + # SELinux is Enforcing by default (via provisioning) in this VM. To re-run with SELinux disabled: + # SELINUX=Disabled vagrant up --provision-with=selinux,test-cri # config.vm.provision "test-cri", type: "shell", run: "never" do |sh| sh.upload_path = "/tmp/test-cri" sh.env = { 'GOTEST': ENV['GOTEST'] || "go test", 'REPORT_DIR': ENV['REPORT_DIR'], + 'CGROUP_DRIVER': ENV['CGROUP_DRIVER'], } sh.inline = <<~SHELL #!/usr/bin/env bash @@ -259,6 +315,7 @@ EOF function cleanup() { journalctl -u containerd > /tmp/containerd.log + cat /tmp/containerd.log systemctl stop containerd } selinux=$(getenforce) @@ -271,34 +328,15 @@ EOF fi trap cleanup EXIT ctr version - critest --parallel=$[$(nproc)+2] --ginkgo.skip='HostIpc is true' --report-dir="${REPORT_DIR}" - SHELL - end - # Rootless Podman is used for testing CRI-in-UserNS - # (We could use rootless nerdctl, but we are using Podman here because it is available in dnf) - config.vm.provision "install-rootless-podman", type: "shell", run: "never" do |sh| - sh.upload_path = "/tmp/vagrant-install-rootless-podman" - sh.inline = <<~SHELL - #!/usr/bin/env bash - set -eux -o pipefail - # Delegate cgroup v2 controllers to rootless - mkdir -p /etc/systemd/system/user@.service.d - cat > /etc/systemd/system/user@.service.d/delegate.conf << EOF -[Service] -Delegate=yes -EOF - systemctl daemon-reload - # Install Podman - dnf install -y podman - # Configure Podman to resolve `golang` to `docker.io/library/golang` - mkdir -p /etc/containers - cat > /etc/containers/registries.conf < containerd.events.ContainerCreate.Runtime 4, // 1: containerd.events.ContainerUpdate.labels:type_name -> containerd.events.ContainerUpdate.LabelsEntry 5, // 2: containerd.events.ContainerCreate.Runtime.options:type_name -> google.protobuf.Any @@ -355,13 +350,13 @@ var file_github_com_containerd_containerd_api_events_container_proto_depIdxs = [ 0, // [0:3] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_events_container_proto_init() } -func file_github_com_containerd_containerd_api_events_container_proto_init() { - if File_github_com_containerd_containerd_api_events_container_proto != nil { +func init() { file_events_container_proto_init() } +func file_events_container_proto_init() { + if File_events_container_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_events_container_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_events_container_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContainerCreate); i { case 0: return &v.state @@ -373,7 +368,7 @@ func file_github_com_containerd_containerd_api_events_container_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_container_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_events_container_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContainerUpdate); i { case 0: return &v.state @@ -385,7 +380,7 @@ func file_github_com_containerd_containerd_api_events_container_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_container_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_events_container_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContainerDelete); i { case 0: return &v.state @@ -397,7 +392,7 @@ func file_github_com_containerd_containerd_api_events_container_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_container_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_events_container_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContainerCreate_Runtime); i { case 0: return &v.state @@ -414,18 +409,18 @@ func file_github_com_containerd_containerd_api_events_container_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_events_container_proto_rawDesc, + RawDescriptor: file_events_container_proto_rawDesc, NumEnums: 0, NumMessages: 5, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_events_container_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_events_container_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_events_container_proto_msgTypes, + GoTypes: file_events_container_proto_goTypes, + DependencyIndexes: file_events_container_proto_depIdxs, + MessageInfos: file_events_container_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_events_container_proto = out.File - file_github_com_containerd_containerd_api_events_container_proto_rawDesc = nil - file_github_com_containerd_containerd_api_events_container_proto_goTypes = nil - file_github_com_containerd_containerd_api_events_container_proto_depIdxs = nil + File_events_container_proto = out.File + file_events_container_proto_rawDesc = nil + file_events_container_proto_goTypes = nil + file_events_container_proto_depIdxs = nil } diff --git a/api/events/container.proto b/api/events/container.proto index 29fd18f88dde..6592c495f107 100644 --- a/api/events/container.proto +++ b/api/events/container.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -19,28 +19,28 @@ syntax = "proto3"; package containerd.events; import "google/protobuf/any.proto"; -import "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; +import "types/fieldpath.proto"; option go_package = "github.com/containerd/containerd/api/events;events"; -option (containerd.plugin.fieldpath_all) = true; +option (containerd.types.fieldpath_all) = true; message ContainerCreate { - string id = 1; - string image = 2; - message Runtime { - string name = 1; - google.protobuf.Any options = 2; - } - Runtime runtime = 3; + string id = 1; + string image = 2; + message Runtime { + string name = 1; + google.protobuf.Any options = 2; + } + Runtime runtime = 3; } message ContainerUpdate { - string id = 1; - string image = 2; - map labels = 3; - string snapshot_key = 4; + string id = 1; + string image = 2; + map labels = 3; + string snapshot_key = 4; } message ContainerDelete { - string id = 1; + string id = 1; } diff --git a/api/events/container_fieldpath.pb.go b/api/events/container_fieldpath.pb.go index 0a9e8c2625cb..596013a8b9cd 100644 --- a/api/events/container_fieldpath.pb.go +++ b/api/events/container_fieldpath.pb.go @@ -1,9 +1,9 @@ // Code generated by protoc-gen-go-fieldpath. DO NOT EDIT. -// source: github.com/containerd/containerd/api/events/container.proto +// source: events/container.proto package events import ( - typeurl "github.com/containerd/typeurl" + v2 "github.com/containerd/typeurl/v2" strings "strings" ) @@ -43,7 +43,7 @@ func (m *ContainerCreate_Runtime) Field(fieldpath []string) (string, bool) { case "name": return string(m.Name), len(m.Name) > 0 case "options": - decoded, err := typeurl.UnmarshalAny(m.Options) + decoded, err := v2.UnmarshalAny(m.Options) if err != nil { return "", false } diff --git a/api/events/content.pb.go b/api/events/content.pb.go index 9e3f843e2bff..1ae6f6c3a7d3 100644 --- a/api/events/content.pb.go +++ b/api/events/content.pb.go @@ -16,13 +16,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/events/content.proto +// protoc (unknown) +// source: events/content.proto package events import ( - _ "github.com/containerd/containerd/protobuf/plugin" + _ "github.com/containerd/containerd/api/types" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -36,6 +36,61 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type ContentCreate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Digest string `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` + Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` +} + +func (x *ContentCreate) Reset() { + *x = ContentCreate{} + if protoimpl.UnsafeEnabled { + mi := &file_events_content_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ContentCreate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentCreate) ProtoMessage() {} + +func (x *ContentCreate) ProtoReflect() protoreflect.Message { + mi := &file_events_content_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentCreate.ProtoReflect.Descriptor instead. +func (*ContentCreate) Descriptor() ([]byte, []int) { + return file_events_content_proto_rawDescGZIP(), []int{0} +} + +func (x *ContentCreate) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +func (x *ContentCreate) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + type ContentDelete struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -47,7 +102,7 @@ type ContentDelete struct { func (x *ContentDelete) Reset() { *x = ContentDelete{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_content_proto_msgTypes[0] + mi := &file_events_content_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -60,7 +115,7 @@ func (x *ContentDelete) String() string { func (*ContentDelete) ProtoMessage() {} func (x *ContentDelete) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_content_proto_msgTypes[0] + mi := &file_events_content_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -73,7 +128,7 @@ func (x *ContentDelete) ProtoReflect() protoreflect.Message { // Deprecated: Use ContentDelete.ProtoReflect.Descriptor instead. func (*ContentDelete) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_content_proto_rawDescGZIP(), []int{0} + return file_events_content_proto_rawDescGZIP(), []int{1} } func (x *ContentDelete) GetDigest() string { @@ -83,44 +138,44 @@ func (x *ContentDelete) GetDigest() string { return "" } -var File_github_com_containerd_containerd_api_events_content_proto protoreflect.FileDescriptor +var File_events_content_proto protoreflect.FileDescriptor -var file_github_com_containerd_containerd_api_events_content_proto_rawDesc = []byte{ - 0x0a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x40, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, +var file_events_content_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x15, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x27, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x22, 0x3b, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x38, 0x5a, 0x32, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0xa0, - 0xf4, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x27, 0x0a, + 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x38, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0xa0, 0xf4, 0x1e, 0x01, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_events_content_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_events_content_proto_rawDescData = file_github_com_containerd_containerd_api_events_content_proto_rawDesc + file_events_content_proto_rawDescOnce sync.Once + file_events_content_proto_rawDescData = file_events_content_proto_rawDesc ) -func file_github_com_containerd_containerd_api_events_content_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_events_content_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_events_content_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_events_content_proto_rawDescData) +func file_events_content_proto_rawDescGZIP() []byte { + file_events_content_proto_rawDescOnce.Do(func() { + file_events_content_proto_rawDescData = protoimpl.X.CompressGZIP(file_events_content_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_events_content_proto_rawDescData + return file_events_content_proto_rawDescData } -var file_github_com_containerd_containerd_api_events_content_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_github_com_containerd_containerd_api_events_content_proto_goTypes = []interface{}{ - (*ContentDelete)(nil), // 0: containerd.events.ContentDelete +var file_events_content_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_events_content_proto_goTypes = []interface{}{ + (*ContentCreate)(nil), // 0: containerd.events.ContentCreate + (*ContentDelete)(nil), // 1: containerd.events.ContentDelete } -var file_github_com_containerd_containerd_api_events_content_proto_depIdxs = []int32{ +var file_events_content_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name @@ -128,13 +183,25 @@ var file_github_com_containerd_containerd_api_events_content_proto_depIdxs = []i 0, // [0:0] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_events_content_proto_init() } -func file_github_com_containerd_containerd_api_events_content_proto_init() { - if File_github_com_containerd_containerd_api_events_content_proto != nil { +func init() { file_events_content_proto_init() } +func file_events_content_proto_init() { + if File_events_content_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_events_content_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_events_content_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContentCreate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_events_content_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContentDelete); i { case 0: return &v.state @@ -151,18 +218,18 @@ func file_github_com_containerd_containerd_api_events_content_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_events_content_proto_rawDesc, + RawDescriptor: file_events_content_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 2, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_events_content_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_events_content_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_events_content_proto_msgTypes, + GoTypes: file_events_content_proto_goTypes, + DependencyIndexes: file_events_content_proto_depIdxs, + MessageInfos: file_events_content_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_events_content_proto = out.File - file_github_com_containerd_containerd_api_events_content_proto_rawDesc = nil - file_github_com_containerd_containerd_api_events_content_proto_goTypes = nil - file_github_com_containerd_containerd_api_events_content_proto_depIdxs = nil + File_events_content_proto = out.File + file_events_content_proto_rawDesc = nil + file_events_content_proto_goTypes = nil + file_events_content_proto_depIdxs = nil } diff --git a/api/events/content.proto b/api/events/content.proto index 97d424139147..13e4d7fb8ab7 100644 --- a/api/events/content.proto +++ b/api/events/content.proto @@ -1,28 +1,33 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.events; -import "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; +import "types/fieldpath.proto"; option go_package = "github.com/containerd/containerd/api/events;events"; -option (containerd.plugin.fieldpath_all) = true; +option (containerd.types.fieldpath_all) = true; + +message ContentCreate { + string digest = 1; + int64 size = 2; +} message ContentDelete { - string digest = 1; + string digest = 1; } diff --git a/api/events/content_fieldpath.pb.go b/api/events/content_fieldpath.pb.go index 9485b664c19c..3b113c668ade 100644 --- a/api/events/content_fieldpath.pb.go +++ b/api/events/content_fieldpath.pb.go @@ -1,7 +1,21 @@ // Code generated by protoc-gen-go-fieldpath. DO NOT EDIT. -// source: github.com/containerd/containerd/api/events/content.proto +// source: events/content.proto package events +// Field returns the value for the given fieldpath as a string, if defined. +// If the value is not defined, the second value will be false. +func (m *ContentCreate) Field(fieldpath []string) (string, bool) { + if len(fieldpath) == 0 { + return "", false + } + switch fieldpath[0] { + // unhandled: size + case "digest": + return string(m.Digest), len(m.Digest) > 0 + } + return "", false +} + // Field returns the value for the given fieldpath as a string, if defined. // If the value is not defined, the second value will be false. func (m *ContentDelete) Field(fieldpath []string) (string, bool) { diff --git a/api/events/image.pb.go b/api/events/image.pb.go index 111af29e6c70..5f2381bd1dec 100644 --- a/api/events/image.pb.go +++ b/api/events/image.pb.go @@ -16,13 +16,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/events/image.proto +// protoc (unknown) +// source: events/image.proto package events import ( - _ "github.com/containerd/containerd/protobuf/plugin" + _ "github.com/containerd/containerd/api/types" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -48,7 +48,7 @@ type ImageCreate struct { func (x *ImageCreate) Reset() { *x = ImageCreate{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_image_proto_msgTypes[0] + mi := &file_events_image_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -61,7 +61,7 @@ func (x *ImageCreate) String() string { func (*ImageCreate) ProtoMessage() {} func (x *ImageCreate) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_image_proto_msgTypes[0] + mi := &file_events_image_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -74,7 +74,7 @@ func (x *ImageCreate) ProtoReflect() protoreflect.Message { // Deprecated: Use ImageCreate.ProtoReflect.Descriptor instead. func (*ImageCreate) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_image_proto_rawDescGZIP(), []int{0} + return file_events_image_proto_rawDescGZIP(), []int{0} } func (x *ImageCreate) GetName() string { @@ -103,7 +103,7 @@ type ImageUpdate struct { func (x *ImageUpdate) Reset() { *x = ImageUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_image_proto_msgTypes[1] + mi := &file_events_image_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -116,7 +116,7 @@ func (x *ImageUpdate) String() string { func (*ImageUpdate) ProtoMessage() {} func (x *ImageUpdate) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_image_proto_msgTypes[1] + mi := &file_events_image_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -129,7 +129,7 @@ func (x *ImageUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use ImageUpdate.ProtoReflect.Descriptor instead. func (*ImageUpdate) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_image_proto_rawDescGZIP(), []int{1} + return file_events_image_proto_rawDescGZIP(), []int{1} } func (x *ImageUpdate) GetName() string { @@ -157,7 +157,7 @@ type ImageDelete struct { func (x *ImageDelete) Reset() { *x = ImageDelete{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_image_proto_msgTypes[2] + mi := &file_events_image_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -170,7 +170,7 @@ func (x *ImageDelete) String() string { func (*ImageDelete) ProtoMessage() {} func (x *ImageDelete) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_image_proto_msgTypes[2] + mi := &file_events_image_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -183,7 +183,7 @@ func (x *ImageDelete) ProtoReflect() protoreflect.Message { // Deprecated: Use ImageDelete.ProtoReflect.Descriptor instead. func (*ImageDelete) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_image_proto_rawDescGZIP(), []int{2} + return file_events_image_proto_rawDescGZIP(), []int{2} } func (x *ImageDelete) GetName() string { @@ -193,18 +193,13 @@ func (x *ImageDelete) GetName() string { return "" } -var File_github_com_containerd_containerd_api_events_image_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_events_image_proto_rawDesc = []byte{ - 0x0a, 0x37, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, +var File_events_image_proto protoreflect.FileDescriptor + +var file_events_image_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x1a, 0x15, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xac, 0x01, 0x0a, 0x0b, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4e, @@ -237,26 +232,26 @@ var file_github_com_containerd_containerd_api_events_image_proto_rawDesc = []byt } var ( - file_github_com_containerd_containerd_api_events_image_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_events_image_proto_rawDescData = file_github_com_containerd_containerd_api_events_image_proto_rawDesc + file_events_image_proto_rawDescOnce sync.Once + file_events_image_proto_rawDescData = file_events_image_proto_rawDesc ) -func file_github_com_containerd_containerd_api_events_image_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_events_image_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_events_image_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_events_image_proto_rawDescData) +func file_events_image_proto_rawDescGZIP() []byte { + file_events_image_proto_rawDescOnce.Do(func() { + file_events_image_proto_rawDescData = protoimpl.X.CompressGZIP(file_events_image_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_events_image_proto_rawDescData + return file_events_image_proto_rawDescData } -var file_github_com_containerd_containerd_api_events_image_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_github_com_containerd_containerd_api_events_image_proto_goTypes = []interface{}{ +var file_events_image_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_events_image_proto_goTypes = []interface{}{ (*ImageCreate)(nil), // 0: containerd.services.images.v1.ImageCreate (*ImageUpdate)(nil), // 1: containerd.services.images.v1.ImageUpdate (*ImageDelete)(nil), // 2: containerd.services.images.v1.ImageDelete nil, // 3: containerd.services.images.v1.ImageCreate.LabelsEntry nil, // 4: containerd.services.images.v1.ImageUpdate.LabelsEntry } -var file_github_com_containerd_containerd_api_events_image_proto_depIdxs = []int32{ +var file_events_image_proto_depIdxs = []int32{ 3, // 0: containerd.services.images.v1.ImageCreate.labels:type_name -> containerd.services.images.v1.ImageCreate.LabelsEntry 4, // 1: containerd.services.images.v1.ImageUpdate.labels:type_name -> containerd.services.images.v1.ImageUpdate.LabelsEntry 2, // [2:2] is the sub-list for method output_type @@ -266,13 +261,13 @@ var file_github_com_containerd_containerd_api_events_image_proto_depIdxs = []int 0, // [0:2] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_events_image_proto_init() } -func file_github_com_containerd_containerd_api_events_image_proto_init() { - if File_github_com_containerd_containerd_api_events_image_proto != nil { +func init() { file_events_image_proto_init() } +func file_events_image_proto_init() { + if File_events_image_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_events_image_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_events_image_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImageCreate); i { case 0: return &v.state @@ -284,7 +279,7 @@ func file_github_com_containerd_containerd_api_events_image_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_image_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_events_image_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImageUpdate); i { case 0: return &v.state @@ -296,7 +291,7 @@ func file_github_com_containerd_containerd_api_events_image_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_image_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_events_image_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImageDelete); i { case 0: return &v.state @@ -313,18 +308,18 @@ func file_github_com_containerd_containerd_api_events_image_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_events_image_proto_rawDesc, + RawDescriptor: file_events_image_proto_rawDesc, NumEnums: 0, NumMessages: 5, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_events_image_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_events_image_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_events_image_proto_msgTypes, + GoTypes: file_events_image_proto_goTypes, + DependencyIndexes: file_events_image_proto_depIdxs, + MessageInfos: file_events_image_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_events_image_proto = out.File - file_github_com_containerd_containerd_api_events_image_proto_rawDesc = nil - file_github_com_containerd_containerd_api_events_image_proto_goTypes = nil - file_github_com_containerd_containerd_api_events_image_proto_depIdxs = nil + File_events_image_proto = out.File + file_events_image_proto_rawDesc = nil + file_events_image_proto_goTypes = nil + file_events_image_proto_depIdxs = nil } diff --git a/api/events/image.proto b/api/events/image.proto index c09c7384f3af..a6baeb643a8d 100644 --- a/api/events/image.proto +++ b/api/events/image.proto @@ -1,38 +1,38 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.services.images.v1; -import "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; +import "types/fieldpath.proto"; option go_package = "github.com/containerd/containerd/api/events;events"; -option (containerd.plugin.fieldpath_all) = true; +option (containerd.types.fieldpath_all) = true; message ImageCreate { - string name = 1; - map labels = 2; + string name = 1; + map labels = 2; } message ImageUpdate { - string name = 1; - map labels = 2; + string name = 1; + map labels = 2; } message ImageDelete { - string name = 1; + string name = 1; } diff --git a/api/events/image_fieldpath.pb.go b/api/events/image_fieldpath.pb.go index 2a56fcf9d831..7b52765e0223 100644 --- a/api/events/image_fieldpath.pb.go +++ b/api/events/image_fieldpath.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-fieldpath. DO NOT EDIT. -// source: github.com/containerd/containerd/api/events/image.proto +// source: events/image.proto package events import ( diff --git a/api/events/namespace.pb.go b/api/events/namespace.pb.go index 801c1219e8a9..18251a54dea2 100644 --- a/api/events/namespace.pb.go +++ b/api/events/namespace.pb.go @@ -16,13 +16,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/events/namespace.proto +// protoc (unknown) +// source: events/namespace.proto package events import ( - _ "github.com/containerd/containerd/protobuf/plugin" + _ "github.com/containerd/containerd/api/types" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -48,7 +48,7 @@ type NamespaceCreate struct { func (x *NamespaceCreate) Reset() { *x = NamespaceCreate{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[0] + mi := &file_events_namespace_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -61,7 +61,7 @@ func (x *NamespaceCreate) String() string { func (*NamespaceCreate) ProtoMessage() {} func (x *NamespaceCreate) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[0] + mi := &file_events_namespace_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -74,7 +74,7 @@ func (x *NamespaceCreate) ProtoReflect() protoreflect.Message { // Deprecated: Use NamespaceCreate.ProtoReflect.Descriptor instead. func (*NamespaceCreate) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_namespace_proto_rawDescGZIP(), []int{0} + return file_events_namespace_proto_rawDescGZIP(), []int{0} } func (x *NamespaceCreate) GetName() string { @@ -103,7 +103,7 @@ type NamespaceUpdate struct { func (x *NamespaceUpdate) Reset() { *x = NamespaceUpdate{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[1] + mi := &file_events_namespace_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -116,7 +116,7 @@ func (x *NamespaceUpdate) String() string { func (*NamespaceUpdate) ProtoMessage() {} func (x *NamespaceUpdate) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[1] + mi := &file_events_namespace_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -129,7 +129,7 @@ func (x *NamespaceUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use NamespaceUpdate.ProtoReflect.Descriptor instead. func (*NamespaceUpdate) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_namespace_proto_rawDescGZIP(), []int{1} + return file_events_namespace_proto_rawDescGZIP(), []int{1} } func (x *NamespaceUpdate) GetName() string { @@ -157,7 +157,7 @@ type NamespaceDelete struct { func (x *NamespaceDelete) Reset() { *x = NamespaceDelete{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[2] + mi := &file_events_namespace_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -170,7 +170,7 @@ func (x *NamespaceDelete) String() string { func (*NamespaceDelete) ProtoMessage() {} func (x *NamespaceDelete) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[2] + mi := &file_events_namespace_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -183,7 +183,7 @@ func (x *NamespaceDelete) ProtoReflect() protoreflect.Message { // Deprecated: Use NamespaceDelete.ProtoReflect.Descriptor instead. func (*NamespaceDelete) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_namespace_proto_rawDescGZIP(), []int{2} + return file_events_namespace_proto_rawDescGZIP(), []int{2} } func (x *NamespaceDelete) GetName() string { @@ -193,18 +193,13 @@ func (x *NamespaceDelete) GetName() string { return "" } -var File_github_com_containerd_containerd_api_events_namespace_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_events_namespace_proto_rawDesc = []byte{ - 0x0a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x1a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, +var File_events_namespace_proto protoreflect.FileDescriptor + +var file_events_namespace_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x15, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa8, 0x01, 0x0a, 0x0f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x6c, 0x61, @@ -237,26 +232,26 @@ var file_github_com_containerd_containerd_api_events_namespace_proto_rawDesc = [ } var ( - file_github_com_containerd_containerd_api_events_namespace_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_events_namespace_proto_rawDescData = file_github_com_containerd_containerd_api_events_namespace_proto_rawDesc + file_events_namespace_proto_rawDescOnce sync.Once + file_events_namespace_proto_rawDescData = file_events_namespace_proto_rawDesc ) -func file_github_com_containerd_containerd_api_events_namespace_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_events_namespace_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_events_namespace_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_events_namespace_proto_rawDescData) +func file_events_namespace_proto_rawDescGZIP() []byte { + file_events_namespace_proto_rawDescOnce.Do(func() { + file_events_namespace_proto_rawDescData = protoimpl.X.CompressGZIP(file_events_namespace_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_events_namespace_proto_rawDescData + return file_events_namespace_proto_rawDescData } -var file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_github_com_containerd_containerd_api_events_namespace_proto_goTypes = []interface{}{ +var file_events_namespace_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_events_namespace_proto_goTypes = []interface{}{ (*NamespaceCreate)(nil), // 0: containerd.events.NamespaceCreate (*NamespaceUpdate)(nil), // 1: containerd.events.NamespaceUpdate (*NamespaceDelete)(nil), // 2: containerd.events.NamespaceDelete nil, // 3: containerd.events.NamespaceCreate.LabelsEntry nil, // 4: containerd.events.NamespaceUpdate.LabelsEntry } -var file_github_com_containerd_containerd_api_events_namespace_proto_depIdxs = []int32{ +var file_events_namespace_proto_depIdxs = []int32{ 3, // 0: containerd.events.NamespaceCreate.labels:type_name -> containerd.events.NamespaceCreate.LabelsEntry 4, // 1: containerd.events.NamespaceUpdate.labels:type_name -> containerd.events.NamespaceUpdate.LabelsEntry 2, // [2:2] is the sub-list for method output_type @@ -266,13 +261,13 @@ var file_github_com_containerd_containerd_api_events_namespace_proto_depIdxs = [ 0, // [0:2] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_events_namespace_proto_init() } -func file_github_com_containerd_containerd_api_events_namespace_proto_init() { - if File_github_com_containerd_containerd_api_events_namespace_proto != nil { +func init() { file_events_namespace_proto_init() } +func file_events_namespace_proto_init() { + if File_events_namespace_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_events_namespace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NamespaceCreate); i { case 0: return &v.state @@ -284,7 +279,7 @@ func file_github_com_containerd_containerd_api_events_namespace_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_events_namespace_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NamespaceUpdate); i { case 0: return &v.state @@ -296,7 +291,7 @@ func file_github_com_containerd_containerd_api_events_namespace_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_events_namespace_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NamespaceDelete); i { case 0: return &v.state @@ -313,18 +308,18 @@ func file_github_com_containerd_containerd_api_events_namespace_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_events_namespace_proto_rawDesc, + RawDescriptor: file_events_namespace_proto_rawDesc, NumEnums: 0, NumMessages: 5, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_events_namespace_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_events_namespace_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_events_namespace_proto_msgTypes, + GoTypes: file_events_namespace_proto_goTypes, + DependencyIndexes: file_events_namespace_proto_depIdxs, + MessageInfos: file_events_namespace_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_events_namespace_proto = out.File - file_github_com_containerd_containerd_api_events_namespace_proto_rawDesc = nil - file_github_com_containerd_containerd_api_events_namespace_proto_goTypes = nil - file_github_com_containerd_containerd_api_events_namespace_proto_depIdxs = nil + File_events_namespace_proto = out.File + file_events_namespace_proto_rawDesc = nil + file_events_namespace_proto_goTypes = nil + file_events_namespace_proto_depIdxs = nil } diff --git a/api/events/namespace.proto b/api/events/namespace.proto index 9bae531d7fe5..89a3d20cc8ca 100644 --- a/api/events/namespace.proto +++ b/api/events/namespace.proto @@ -1,38 +1,38 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.events; -import "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; +import "types/fieldpath.proto"; option go_package = "github.com/containerd/containerd/api/events;events"; -option (containerd.plugin.fieldpath_all) = true; +option (containerd.types.fieldpath_all) = true; message NamespaceCreate { - string name = 1; - map labels = 2; + string name = 1; + map labels = 2; } message NamespaceUpdate { - string name = 1; - map labels = 2; + string name = 1; + map labels = 2; } message NamespaceDelete { - string name = 1; + string name = 1; } diff --git a/api/events/namespace_fieldpath.pb.go b/api/events/namespace_fieldpath.pb.go index 93d20a676706..54deb5beff5b 100644 --- a/api/events/namespace_fieldpath.pb.go +++ b/api/events/namespace_fieldpath.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-fieldpath. DO NOT EDIT. -// source: github.com/containerd/containerd/api/events/namespace.proto +// source: events/namespace.proto package events import ( diff --git a/api/events/sandbox.pb.go b/api/events/sandbox.pb.go new file mode 100644 index 000000000000..2979a6fca4f8 --- /dev/null +++ b/api/events/sandbox.pb.go @@ -0,0 +1,313 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: events/sandbox.proto + +package events + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type SandboxCreate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` +} + +func (x *SandboxCreate) Reset() { + *x = SandboxCreate{} + if protoimpl.UnsafeEnabled { + mi := &file_events_sandbox_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SandboxCreate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SandboxCreate) ProtoMessage() {} + +func (x *SandboxCreate) ProtoReflect() protoreflect.Message { + mi := &file_events_sandbox_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SandboxCreate.ProtoReflect.Descriptor instead. +func (*SandboxCreate) Descriptor() ([]byte, []int) { + return file_events_sandbox_proto_rawDescGZIP(), []int{0} +} + +func (x *SandboxCreate) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +type SandboxStart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` +} + +func (x *SandboxStart) Reset() { + *x = SandboxStart{} + if protoimpl.UnsafeEnabled { + mi := &file_events_sandbox_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SandboxStart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SandboxStart) ProtoMessage() {} + +func (x *SandboxStart) ProtoReflect() protoreflect.Message { + mi := &file_events_sandbox_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SandboxStart.ProtoReflect.Descriptor instead. +func (*SandboxStart) Descriptor() ([]byte, []int) { + return file_events_sandbox_proto_rawDescGZIP(), []int{1} +} + +func (x *SandboxStart) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +type SandboxExit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + ExitStatus uint32 `protobuf:"varint,2,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"` + ExitedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` +} + +func (x *SandboxExit) Reset() { + *x = SandboxExit{} + if protoimpl.UnsafeEnabled { + mi := &file_events_sandbox_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SandboxExit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SandboxExit) ProtoMessage() {} + +func (x *SandboxExit) ProtoReflect() protoreflect.Message { + mi := &file_events_sandbox_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SandboxExit.ProtoReflect.Descriptor instead. +func (*SandboxExit) Descriptor() ([]byte, []int) { + return file_events_sandbox_proto_rawDescGZIP(), []int{2} +} + +func (x *SandboxExit) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +func (x *SandboxExit) GetExitStatus() uint32 { + if x != nil { + return x.ExitStatus + } + return 0 +} + +func (x *SandboxExit) GetExitedAt() *timestamppb.Timestamp { + if x != nil { + return x.ExitedAt + } + return nil +} + +var File_events_sandbox_proto protoreflect.FileDescriptor + +var file_events_sandbox_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x2e, 0x0a, 0x0d, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x2d, 0x0a, 0x0c, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x0b, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x45, 0x78, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, + 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x3b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_events_sandbox_proto_rawDescOnce sync.Once + file_events_sandbox_proto_rawDescData = file_events_sandbox_proto_rawDesc +) + +func file_events_sandbox_proto_rawDescGZIP() []byte { + file_events_sandbox_proto_rawDescOnce.Do(func() { + file_events_sandbox_proto_rawDescData = protoimpl.X.CompressGZIP(file_events_sandbox_proto_rawDescData) + }) + return file_events_sandbox_proto_rawDescData +} + +var file_events_sandbox_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_events_sandbox_proto_goTypes = []interface{}{ + (*SandboxCreate)(nil), // 0: containerd.events.SandboxCreate + (*SandboxStart)(nil), // 1: containerd.events.SandboxStart + (*SandboxExit)(nil), // 2: containerd.events.SandboxExit + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp +} +var file_events_sandbox_proto_depIdxs = []int32{ + 3, // 0: containerd.events.SandboxExit.exited_at:type_name -> google.protobuf.Timestamp + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_events_sandbox_proto_init() } +func file_events_sandbox_proto_init() { + if File_events_sandbox_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_events_sandbox_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SandboxCreate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_events_sandbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SandboxStart); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_events_sandbox_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SandboxExit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_events_sandbox_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_events_sandbox_proto_goTypes, + DependencyIndexes: file_events_sandbox_proto_depIdxs, + MessageInfos: file_events_sandbox_proto_msgTypes, + }.Build() + File_events_sandbox_proto = out.File + file_events_sandbox_proto_rawDesc = nil + file_events_sandbox_proto_goTypes = nil + file_events_sandbox_proto_depIdxs = nil +} diff --git a/api/events/sandbox.proto b/api/events/sandbox.proto new file mode 100644 index 000000000000..f70fa7e3821a --- /dev/null +++ b/api/events/sandbox.proto @@ -0,0 +1,37 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.events; + +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/containerd/containerd/api/events;events"; + +message SandboxCreate { + string sandbox_id = 1; +} + +message SandboxStart { + string sandbox_id = 1; +} + +message SandboxExit { + string sandbox_id = 1; + uint32 exit_status = 2; + google.protobuf.Timestamp exited_at = 3; +} diff --git a/api/events/sandbox_fieldpath.pb.go b/api/events/sandbox_fieldpath.pb.go new file mode 100644 index 000000000000..38b880208b94 --- /dev/null +++ b/api/events/sandbox_fieldpath.pb.go @@ -0,0 +1,44 @@ +// Code generated by protoc-gen-go-fieldpath. DO NOT EDIT. +// source: events/sandbox.proto +package events + +// Field returns the value for the given fieldpath as a string, if defined. +// If the value is not defined, the second value will be false. +func (m *SandboxCreate) Field(fieldpath []string) (string, bool) { + if len(fieldpath) == 0 { + return "", false + } + switch fieldpath[0] { + case "sandbox_id": + return string(m.SandboxID), len(m.SandboxID) > 0 + } + return "", false +} + +// Field returns the value for the given fieldpath as a string, if defined. +// If the value is not defined, the second value will be false. +func (m *SandboxStart) Field(fieldpath []string) (string, bool) { + if len(fieldpath) == 0 { + return "", false + } + switch fieldpath[0] { + case "sandbox_id": + return string(m.SandboxID), len(m.SandboxID) > 0 + } + return "", false +} + +// Field returns the value for the given fieldpath as a string, if defined. +// If the value is not defined, the second value will be false. +func (m *SandboxExit) Field(fieldpath []string) (string, bool) { + if len(fieldpath) == 0 { + return "", false + } + switch fieldpath[0] { + // unhandled: exit_status + // unhandled: exited_at + case "sandbox_id": + return string(m.SandboxID), len(m.SandboxID) > 0 + } + return "", false +} diff --git a/api/events/snapshot.pb.go b/api/events/snapshot.pb.go index e074f9df21c3..7515ae0c412d 100644 --- a/api/events/snapshot.pb.go +++ b/api/events/snapshot.pb.go @@ -16,13 +16,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/events/snapshot.proto +// protoc (unknown) +// source: events/snapshot.proto package events import ( - _ "github.com/containerd/containerd/protobuf/plugin" + _ "github.com/containerd/containerd/api/types" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -49,7 +49,7 @@ type SnapshotPrepare struct { func (x *SnapshotPrepare) Reset() { *x = SnapshotPrepare{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[0] + mi := &file_events_snapshot_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -62,7 +62,7 @@ func (x *SnapshotPrepare) String() string { func (*SnapshotPrepare) ProtoMessage() {} func (x *SnapshotPrepare) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[0] + mi := &file_events_snapshot_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -75,7 +75,7 @@ func (x *SnapshotPrepare) ProtoReflect() protoreflect.Message { // Deprecated: Use SnapshotPrepare.ProtoReflect.Descriptor instead. func (*SnapshotPrepare) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescGZIP(), []int{0} + return file_events_snapshot_proto_rawDescGZIP(), []int{0} } func (x *SnapshotPrepare) GetKey() string { @@ -112,7 +112,7 @@ type SnapshotCommit struct { func (x *SnapshotCommit) Reset() { *x = SnapshotCommit{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[1] + mi := &file_events_snapshot_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -125,7 +125,7 @@ func (x *SnapshotCommit) String() string { func (*SnapshotCommit) ProtoMessage() {} func (x *SnapshotCommit) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[1] + mi := &file_events_snapshot_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -138,7 +138,7 @@ func (x *SnapshotCommit) ProtoReflect() protoreflect.Message { // Deprecated: Use SnapshotCommit.ProtoReflect.Descriptor instead. func (*SnapshotCommit) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescGZIP(), []int{1} + return file_events_snapshot_proto_rawDescGZIP(), []int{1} } func (x *SnapshotCommit) GetKey() string { @@ -174,7 +174,7 @@ type SnapshotRemove struct { func (x *SnapshotRemove) Reset() { *x = SnapshotRemove{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[2] + mi := &file_events_snapshot_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -187,7 +187,7 @@ func (x *SnapshotRemove) String() string { func (*SnapshotRemove) ProtoMessage() {} func (x *SnapshotRemove) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[2] + mi := &file_events_snapshot_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -200,7 +200,7 @@ func (x *SnapshotRemove) ProtoReflect() protoreflect.Message { // Deprecated: Use SnapshotRemove.ProtoReflect.Descriptor instead. func (*SnapshotRemove) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescGZIP(), []int{2} + return file_events_snapshot_proto_rawDescGZIP(), []int{2} } func (x *SnapshotRemove) GetKey() string { @@ -217,18 +217,13 @@ func (x *SnapshotRemove) GetSnapshotter() string { return "" } -var File_github_com_containerd_containerd_api_events_snapshot_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_events_snapshot_proto_rawDesc = []byte{ - 0x0a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, - 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, +var File_events_snapshot_proto protoreflect.FileDescriptor + +var file_events_snapshot_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x15, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5d, 0x0a, 0x0f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, @@ -253,24 +248,24 @@ var file_github_com_containerd_containerd_api_events_snapshot_proto_rawDesc = [] } var ( - file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescData = file_github_com_containerd_containerd_api_events_snapshot_proto_rawDesc + file_events_snapshot_proto_rawDescOnce sync.Once + file_events_snapshot_proto_rawDescData = file_events_snapshot_proto_rawDesc ) -func file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescData) +func file_events_snapshot_proto_rawDescGZIP() []byte { + file_events_snapshot_proto_rawDescOnce.Do(func() { + file_events_snapshot_proto_rawDescData = protoimpl.X.CompressGZIP(file_events_snapshot_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_events_snapshot_proto_rawDescData + return file_events_snapshot_proto_rawDescData } -var file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_github_com_containerd_containerd_api_events_snapshot_proto_goTypes = []interface{}{ +var file_events_snapshot_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_events_snapshot_proto_goTypes = []interface{}{ (*SnapshotPrepare)(nil), // 0: containerd.events.SnapshotPrepare (*SnapshotCommit)(nil), // 1: containerd.events.SnapshotCommit (*SnapshotRemove)(nil), // 2: containerd.events.SnapshotRemove } -var file_github_com_containerd_containerd_api_events_snapshot_proto_depIdxs = []int32{ +var file_events_snapshot_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name @@ -278,13 +273,13 @@ var file_github_com_containerd_containerd_api_events_snapshot_proto_depIdxs = [] 0, // [0:0] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_events_snapshot_proto_init() } -func file_github_com_containerd_containerd_api_events_snapshot_proto_init() { - if File_github_com_containerd_containerd_api_events_snapshot_proto != nil { +func init() { file_events_snapshot_proto_init() } +func file_events_snapshot_proto_init() { + if File_events_snapshot_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_events_snapshot_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SnapshotPrepare); i { case 0: return &v.state @@ -296,7 +291,7 @@ func file_github_com_containerd_containerd_api_events_snapshot_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_events_snapshot_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SnapshotCommit); i { case 0: return &v.state @@ -308,7 +303,7 @@ func file_github_com_containerd_containerd_api_events_snapshot_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_events_snapshot_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SnapshotRemove); i { case 0: return &v.state @@ -325,18 +320,18 @@ func file_github_com_containerd_containerd_api_events_snapshot_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_events_snapshot_proto_rawDesc, + RawDescriptor: file_events_snapshot_proto_rawDesc, NumEnums: 0, NumMessages: 3, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_events_snapshot_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_events_snapshot_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_events_snapshot_proto_msgTypes, + GoTypes: file_events_snapshot_proto_goTypes, + DependencyIndexes: file_events_snapshot_proto_depIdxs, + MessageInfos: file_events_snapshot_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_events_snapshot_proto = out.File - file_github_com_containerd_containerd_api_events_snapshot_proto_rawDesc = nil - file_github_com_containerd_containerd_api_events_snapshot_proto_goTypes = nil - file_github_com_containerd_containerd_api_events_snapshot_proto_depIdxs = nil + File_events_snapshot_proto = out.File + file_events_snapshot_proto_rawDesc = nil + file_events_snapshot_proto_goTypes = nil + file_events_snapshot_proto_depIdxs = nil } diff --git a/api/events/snapshot.proto b/api/events/snapshot.proto index effd86913679..75be99739450 100644 --- a/api/events/snapshot.proto +++ b/api/events/snapshot.proto @@ -1,41 +1,41 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.events; -import "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; +import "types/fieldpath.proto"; option go_package = "github.com/containerd/containerd/api/events;events"; -option (containerd.plugin.fieldpath_all) = true; +option (containerd.types.fieldpath_all) = true; message SnapshotPrepare { - string key = 1; - string parent = 2; - string snapshotter = 5; + string key = 1; + string parent = 2; + string snapshotter = 5; } message SnapshotCommit { - string key = 1; - string name = 2; - string snapshotter = 5; + string key = 1; + string name = 2; + string snapshotter = 5; } message SnapshotRemove { - string key = 1; - string snapshotter = 5; + string key = 1; + string snapshotter = 5; } diff --git a/api/events/snapshot_fieldpath.pb.go b/api/events/snapshot_fieldpath.pb.go index c89d1ab4a336..d04c2aaa7fe8 100644 --- a/api/events/snapshot_fieldpath.pb.go +++ b/api/events/snapshot_fieldpath.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-fieldpath. DO NOT EDIT. -// source: github.com/containerd/containerd/api/events/snapshot.proto +// source: events/snapshot.proto package events // Field returns the value for the given fieldpath as a string, if defined. diff --git a/api/events/task.pb.go b/api/events/task.pb.go index 33fd521b6c87..1540c93d1a8a 100644 --- a/api/events/task.pb.go +++ b/api/events/task.pb.go @@ -16,14 +16,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/events/task.proto +// protoc (unknown) +// source: events/task.proto package events import ( types "github.com/containerd/containerd/api/types" - _ "github.com/containerd/containerd/protobuf/plugin" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" timestamppb "google.golang.org/protobuf/types/known/timestamppb" @@ -54,7 +53,7 @@ type TaskCreate struct { func (x *TaskCreate) Reset() { *x = TaskCreate{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[0] + mi := &file_events_task_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -67,7 +66,7 @@ func (x *TaskCreate) String() string { func (*TaskCreate) ProtoMessage() {} func (x *TaskCreate) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[0] + mi := &file_events_task_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -80,7 +79,7 @@ func (x *TaskCreate) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskCreate.ProtoReflect.Descriptor instead. func (*TaskCreate) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{0} + return file_events_task_proto_rawDescGZIP(), []int{0} } func (x *TaskCreate) GetContainerID() string { @@ -137,7 +136,7 @@ type TaskStart struct { func (x *TaskStart) Reset() { *x = TaskStart{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[1] + mi := &file_events_task_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -150,7 +149,7 @@ func (x *TaskStart) String() string { func (*TaskStart) ProtoMessage() {} func (x *TaskStart) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[1] + mi := &file_events_task_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -163,7 +162,7 @@ func (x *TaskStart) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskStart.ProtoReflect.Descriptor instead. func (*TaskStart) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{1} + return file_events_task_proto_rawDescGZIP(), []int{1} } func (x *TaskStart) GetContainerID() string { @@ -197,7 +196,7 @@ type TaskDelete struct { func (x *TaskDelete) Reset() { *x = TaskDelete{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[2] + mi := &file_events_task_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -210,7 +209,7 @@ func (x *TaskDelete) String() string { func (*TaskDelete) ProtoMessage() {} func (x *TaskDelete) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[2] + mi := &file_events_task_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -223,7 +222,7 @@ func (x *TaskDelete) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskDelete.ProtoReflect.Descriptor instead. func (*TaskDelete) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{2} + return file_events_task_proto_rawDescGZIP(), []int{2} } func (x *TaskDelete) GetContainerID() string { @@ -275,7 +274,7 @@ type TaskIO struct { func (x *TaskIO) Reset() { *x = TaskIO{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[3] + mi := &file_events_task_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -288,7 +287,7 @@ func (x *TaskIO) String() string { func (*TaskIO) ProtoMessage() {} func (x *TaskIO) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[3] + mi := &file_events_task_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -301,7 +300,7 @@ func (x *TaskIO) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskIO.ProtoReflect.Descriptor instead. func (*TaskIO) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{3} + return file_events_task_proto_rawDescGZIP(), []int{3} } func (x *TaskIO) GetStdin() string { @@ -347,7 +346,7 @@ type TaskExit struct { func (x *TaskExit) Reset() { *x = TaskExit{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[4] + mi := &file_events_task_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -360,7 +359,7 @@ func (x *TaskExit) String() string { func (*TaskExit) ProtoMessage() {} func (x *TaskExit) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[4] + mi := &file_events_task_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -373,7 +372,7 @@ func (x *TaskExit) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskExit.ProtoReflect.Descriptor instead. func (*TaskExit) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{4} + return file_events_task_proto_rawDescGZIP(), []int{4} } func (x *TaskExit) GetContainerID() string { @@ -422,7 +421,7 @@ type TaskOOM struct { func (x *TaskOOM) Reset() { *x = TaskOOM{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[5] + mi := &file_events_task_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -435,7 +434,7 @@ func (x *TaskOOM) String() string { func (*TaskOOM) ProtoMessage() {} func (x *TaskOOM) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[5] + mi := &file_events_task_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -448,7 +447,7 @@ func (x *TaskOOM) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskOOM.ProtoReflect.Descriptor instead. func (*TaskOOM) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{5} + return file_events_task_proto_rawDescGZIP(), []int{5} } func (x *TaskOOM) GetContainerID() string { @@ -470,7 +469,7 @@ type TaskExecAdded struct { func (x *TaskExecAdded) Reset() { *x = TaskExecAdded{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[6] + mi := &file_events_task_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -483,7 +482,7 @@ func (x *TaskExecAdded) String() string { func (*TaskExecAdded) ProtoMessage() {} func (x *TaskExecAdded) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[6] + mi := &file_events_task_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -496,7 +495,7 @@ func (x *TaskExecAdded) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskExecAdded.ProtoReflect.Descriptor instead. func (*TaskExecAdded) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{6} + return file_events_task_proto_rawDescGZIP(), []int{6} } func (x *TaskExecAdded) GetContainerID() string { @@ -526,7 +525,7 @@ type TaskExecStarted struct { func (x *TaskExecStarted) Reset() { *x = TaskExecStarted{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[7] + mi := &file_events_task_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -539,7 +538,7 @@ func (x *TaskExecStarted) String() string { func (*TaskExecStarted) ProtoMessage() {} func (x *TaskExecStarted) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[7] + mi := &file_events_task_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -552,7 +551,7 @@ func (x *TaskExecStarted) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskExecStarted.ProtoReflect.Descriptor instead. func (*TaskExecStarted) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{7} + return file_events_task_proto_rawDescGZIP(), []int{7} } func (x *TaskExecStarted) GetContainerID() string { @@ -587,7 +586,7 @@ type TaskPaused struct { func (x *TaskPaused) Reset() { *x = TaskPaused{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[8] + mi := &file_events_task_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -600,7 +599,7 @@ func (x *TaskPaused) String() string { func (*TaskPaused) ProtoMessage() {} func (x *TaskPaused) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[8] + mi := &file_events_task_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -613,7 +612,7 @@ func (x *TaskPaused) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskPaused.ProtoReflect.Descriptor instead. func (*TaskPaused) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{8} + return file_events_task_proto_rawDescGZIP(), []int{8} } func (x *TaskPaused) GetContainerID() string { @@ -634,7 +633,7 @@ type TaskResumed struct { func (x *TaskResumed) Reset() { *x = TaskResumed{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[9] + mi := &file_events_task_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -647,7 +646,7 @@ func (x *TaskResumed) String() string { func (*TaskResumed) ProtoMessage() {} func (x *TaskResumed) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[9] + mi := &file_events_task_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -660,7 +659,7 @@ func (x *TaskResumed) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskResumed.ProtoReflect.Descriptor instead. func (*TaskResumed) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{9} + return file_events_task_proto_rawDescGZIP(), []int{9} } func (x *TaskResumed) GetContainerID() string { @@ -682,7 +681,7 @@ type TaskCheckpointed struct { func (x *TaskCheckpointed) Reset() { *x = TaskCheckpointed{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[10] + mi := &file_events_task_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -695,7 +694,7 @@ func (x *TaskCheckpointed) String() string { func (*TaskCheckpointed) ProtoMessage() {} func (x *TaskCheckpointed) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_events_task_proto_msgTypes[10] + mi := &file_events_task_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -708,7 +707,7 @@ func (x *TaskCheckpointed) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskCheckpointed.ProtoReflect.Descriptor instead. func (*TaskCheckpointed) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP(), []int{10} + return file_events_task_proto_rawDescGZIP(), []int{10} } func (x *TaskCheckpointed) GetContainerID() string { @@ -725,115 +724,108 @@ func (x *TaskCheckpointed) GetCheckpoint() string { return "" } -var File_github_com_containerd_containerd_api_events_task_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_events_task_proto_rawDesc = []byte{ - 0x0a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x74, 0x61, - 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd5, 0x01, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, - 0x73, 0x12, 0x29, 0x0a, 0x02, 0x69, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x4f, 0x52, 0x02, 0x69, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x70, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x40, - 0x0a, 0x09, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, - 0x22, 0xab, 0x01, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x03, 0x70, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6a, - 0x0a, 0x06, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x4f, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x54, - 0x61, 0x73, 0x6b, 0x45, 0x78, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, - 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, - 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x2c, 0x0a, 0x07, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x4f, - 0x4d, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x49, 0x64, 0x22, 0x4b, 0x0a, 0x0d, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x78, 0x65, 0x63, - 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, - 0x64, 0x22, 0x5f, 0x0a, 0x0f, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, - 0x69, 0x64, 0x22, 0x2f, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x75, 0x73, 0x65, 0x64, +var File_events_task_proto protoreflect.FileDescriptor + +var file_events_task_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xd5, 0x01, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x30, 0x0a, 0x0b, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6d, - 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, + 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x72, + 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x12, 0x29, 0x0a, 0x02, + 0x69, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x54, 0x61, 0x73, + 0x6b, 0x49, 0x4f, 0x52, 0x02, 0x69, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x40, 0x0a, 0x09, 0x54, 0x61, 0x73, + 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0xab, 0x01, 0x0a, 0x0a, + 0x54, 0x61, 0x73, 0x6b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6a, 0x0a, 0x06, 0x54, 0x61, 0x73, + 0x6b, 0x49, 0x4f, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, + 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x78, + 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x10, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x38, 0x5a, 0x32, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0xa0, 0xf4, 0x1e, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, + 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x22, 0x2c, 0x0a, 0x07, 0x54, 0x61, 0x73, 0x6b, 0x4f, 0x4f, 0x4d, 0x12, 0x21, 0x0a, 0x0c, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, + 0x4b, 0x0a, 0x0d, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x41, 0x64, 0x64, 0x65, 0x64, + 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x0f, + 0x54, 0x61, 0x73, 0x6b, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x2f, 0x0a, + 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x61, 0x75, 0x73, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x30, + 0x0a, 0x0b, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, + 0x22, 0x55, 0x0a, 0x10, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x38, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0xa0, 0xf4, 0x1e, + 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_events_task_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_events_task_proto_rawDescData = file_github_com_containerd_containerd_api_events_task_proto_rawDesc + file_events_task_proto_rawDescOnce sync.Once + file_events_task_proto_rawDescData = file_events_task_proto_rawDesc ) -func file_github_com_containerd_containerd_api_events_task_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_events_task_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_events_task_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_events_task_proto_rawDescData) +func file_events_task_proto_rawDescGZIP() []byte { + file_events_task_proto_rawDescOnce.Do(func() { + file_events_task_proto_rawDescData = protoimpl.X.CompressGZIP(file_events_task_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_events_task_proto_rawDescData + return file_events_task_proto_rawDescData } -var file_github_com_containerd_containerd_api_events_task_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_github_com_containerd_containerd_api_events_task_proto_goTypes = []interface{}{ +var file_events_task_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_events_task_proto_goTypes = []interface{}{ (*TaskCreate)(nil), // 0: containerd.events.TaskCreate (*TaskStart)(nil), // 1: containerd.events.TaskStart (*TaskDelete)(nil), // 2: containerd.events.TaskDelete @@ -848,7 +840,7 @@ var file_github_com_containerd_containerd_api_events_task_proto_goTypes = []inte (*types.Mount)(nil), // 11: containerd.types.Mount (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp } -var file_github_com_containerd_containerd_api_events_task_proto_depIdxs = []int32{ +var file_events_task_proto_depIdxs = []int32{ 11, // 0: containerd.events.TaskCreate.rootfs:type_name -> containerd.types.Mount 3, // 1: containerd.events.TaskCreate.io:type_name -> containerd.events.TaskIO 12, // 2: containerd.events.TaskDelete.exited_at:type_name -> google.protobuf.Timestamp @@ -860,13 +852,13 @@ var file_github_com_containerd_containerd_api_events_task_proto_depIdxs = []int3 0, // [0:4] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_events_task_proto_init() } -func file_github_com_containerd_containerd_api_events_task_proto_init() { - if File_github_com_containerd_containerd_api_events_task_proto != nil { +func init() { file_events_task_proto_init() } +func file_events_task_proto_init() { + if File_events_task_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskCreate); i { case 0: return &v.state @@ -878,7 +870,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskStart); i { case 0: return &v.state @@ -890,7 +882,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskDelete); i { case 0: return &v.state @@ -902,7 +894,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskIO); i { case 0: return &v.state @@ -914,7 +906,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskExit); i { case 0: return &v.state @@ -926,7 +918,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskOOM); i { case 0: return &v.state @@ -938,7 +930,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskExecAdded); i { case 0: return &v.state @@ -950,7 +942,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskExecStarted); i { case 0: return &v.state @@ -962,7 +954,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskPaused); i { case 0: return &v.state @@ -974,7 +966,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskResumed); i { case 0: return &v.state @@ -986,7 +978,7 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_events_task_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_events_task_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskCheckpointed); i { case 0: return &v.state @@ -1003,18 +995,18 @@ func file_github_com_containerd_containerd_api_events_task_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_events_task_proto_rawDesc, + RawDescriptor: file_events_task_proto_rawDesc, NumEnums: 0, NumMessages: 11, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_events_task_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_events_task_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_events_task_proto_msgTypes, + GoTypes: file_events_task_proto_goTypes, + DependencyIndexes: file_events_task_proto_depIdxs, + MessageInfos: file_events_task_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_events_task_proto = out.File - file_github_com_containerd_containerd_api_events_task_proto_rawDesc = nil - file_github_com_containerd_containerd_api_events_task_proto_goTypes = nil - file_github_com_containerd_containerd_api_events_task_proto_depIdxs = nil + File_events_task_proto = out.File + file_events_task_proto_rawDesc = nil + file_events_task_proto_goTypes = nil + file_events_task_proto_depIdxs = nil } diff --git a/api/events/task.proto b/api/events/task.proto index 238564dfe2d0..90c55939d81e 100644 --- a/api/events/task.proto +++ b/api/events/task.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -19,75 +19,75 @@ syntax = "proto3"; package containerd.events; import "google/protobuf/timestamp.proto"; -import "github.com/containerd/containerd/api/types/mount.proto"; -import "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; +import "types/fieldpath.proto"; +import "types/mount.proto"; option go_package = "github.com/containerd/containerd/api/events;events"; -option (containerd.plugin.fieldpath_all) = true; +option (containerd.types.fieldpath_all) = true; message TaskCreate { - string container_id = 1; - string bundle = 2; - repeated containerd.types.Mount rootfs = 3; - TaskIO io = 4; - string checkpoint = 5; - uint32 pid = 6; + string container_id = 1; + string bundle = 2; + repeated containerd.types.Mount rootfs = 3; + TaskIO io = 4; + string checkpoint = 5; + uint32 pid = 6; } message TaskStart { - string container_id = 1; - uint32 pid = 2; + string container_id = 1; + uint32 pid = 2; } message TaskDelete { - string container_id = 1; - uint32 pid = 2; - uint32 exit_status = 3; - google.protobuf.Timestamp exited_at = 4; - // id is the specific exec. By default if omitted will be `""` thus matches - // the init exec of the task matching `container_id`. - string id = 5; + string container_id = 1; + uint32 pid = 2; + uint32 exit_status = 3; + google.protobuf.Timestamp exited_at = 4; + // id is the specific exec. By default if omitted will be `""` thus matches + // the init exec of the task matching `container_id`. + string id = 5; } message TaskIO { - string stdin = 1; - string stdout = 2; - string stderr = 3; - bool terminal = 4; + string stdin = 1; + string stdout = 2; + string stderr = 3; + bool terminal = 4; } message TaskExit { - string container_id = 1; - string id = 2; - uint32 pid = 3; - uint32 exit_status = 4; - google.protobuf.Timestamp exited_at = 5; + string container_id = 1; + string id = 2; + uint32 pid = 3; + uint32 exit_status = 4; + google.protobuf.Timestamp exited_at = 5; } message TaskOOM { - string container_id = 1; + string container_id = 1; } message TaskExecAdded { - string container_id = 1; - string exec_id = 2; + string container_id = 1; + string exec_id = 2; } message TaskExecStarted { - string container_id = 1; - string exec_id = 2; - uint32 pid = 3; + string container_id = 1; + string exec_id = 2; + uint32 pid = 3; } message TaskPaused { - string container_id = 1; + string container_id = 1; } message TaskResumed { - string container_id = 1; + string container_id = 1; } message TaskCheckpointed { - string container_id = 1; - string checkpoint = 2; + string container_id = 1; + string checkpoint = 2; } diff --git a/api/events/task_fieldpath.pb.go b/api/events/task_fieldpath.pb.go index 633fc3a6534a..a9766907e94c 100644 --- a/api/events/task_fieldpath.pb.go +++ b/api/events/task_fieldpath.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-fieldpath. DO NOT EDIT. -// source: github.com/containerd/containerd/api/events/task.proto +// source: events/task.proto package events import ( diff --git a/api/go.mod b/api/go.mod new file mode 100644 index 000000000000..39679c77fe68 --- /dev/null +++ b/api/go.mod @@ -0,0 +1,24 @@ +module github.com/containerd/containerd/api + +go 1.23.0 + +require ( + github.com/containerd/ttrpc v1.2.5 + github.com/containerd/typeurl/v2 v2.1.1 + github.com/opencontainers/image-spec v1.1.1 + google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda + google.golang.org/grpc v1.59.0 + google.golang.org/protobuf v1.33.0 +) + +require ( + github.com/containerd/log v0.1.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/api/go.sum b/api/go.sum new file mode 100644 index 000000000000..6c26bca0a64a --- /dev/null +++ b/api/go.sum @@ -0,0 +1,80 @@ +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/ttrpc v1.2.5 h1:IFckT1EFQoFBMG4c3sMdT8EP3/aKfumK1msY+Ze4oLU= +github.com/containerd/ttrpc v1.2.5/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o= +github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4= +github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/api/next.pb.txt b/api/next.pb.txt deleted file mode 100644 index 19ac494e8d87..000000000000 --- a/api/next.pb.txt +++ /dev/null @@ -1,5669 +0,0 @@ -file { - name: "google/protobuf/any.proto" - package: "google.protobuf" - message_type { - name: "Any" - field { - name: "type_url" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "typeUrl" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_BYTES - json_name: "value" - } - } - options { - java_package: "com.google.protobuf" - java_outer_classname: "AnyProto" - java_multiple_files: true - go_package: "google.golang.org/protobuf/types/known/anypb" - objc_class_prefix: "GPB" - csharp_namespace: "Google.Protobuf.WellKnownTypes" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - package: "containerd.plugin" - dependency: "google/protobuf/descriptor.proto" - extension { - name: "fieldpath_all" - extendee: ".google.protobuf.FileOptions" - number: 63300 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "fieldpathAll" - } - extension { - name: "fieldpath" - extendee: ".google.protobuf.MessageOptions" - number: 64400 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "fieldpath" - } - options { - go_package: "github.com/containerd/containerd/protobuf/plugin" - } -} -file { - name: "github.com/containerd/containerd/api/events/container.proto" - package: "containerd.events" - dependency: "google/protobuf/any.proto" - dependency: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - message_type { - name: "ContainerCreate" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "image" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "image" - } - field { - name: "runtime" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.events.ContainerCreate.Runtime" - json_name: "runtime" - } - nested_type { - name: "Runtime" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "options" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - } - } - message_type { - name: "ContainerUpdate" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "image" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "image" - } - field { - name: "labels" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.events.ContainerUpdate.LabelsEntry" - json_name: "labels" - } - field { - name: "snapshot_key" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotKey" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "ContainerDelete" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - options { - go_package: "github.com/containerd/containerd/api/events;events" - 63300: 1 - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/events/content.proto" - package: "containerd.events" - dependency: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - message_type { - name: "ContentDelete" - field { - name: "digest" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "digest" - } - } - options { - go_package: "github.com/containerd/containerd/api/events;events" - 63300: 1 - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/events/image.proto" - package: "containerd.services.images.v1" - dependency: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - message_type { - name: "ImageCreate" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "labels" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.ImageCreate.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "ImageUpdate" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "labels" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.ImageUpdate.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "ImageDelete" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - } - options { - go_package: "github.com/containerd/containerd/api/events;events" - 63300: 1 - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/events/namespace.proto" - package: "containerd.events" - dependency: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - message_type { - name: "NamespaceCreate" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "labels" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.events.NamespaceCreate.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "NamespaceUpdate" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "labels" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.events.NamespaceUpdate.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "NamespaceDelete" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - } - options { - go_package: "github.com/containerd/containerd/api/events;events" - 63300: 1 - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/events/snapshot.proto" - package: "containerd.events" - dependency: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - message_type { - name: "SnapshotPrepare" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "parent" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "parent" - } - field { - name: "snapshotter" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - } - message_type { - name: "SnapshotCommit" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "name" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "snapshotter" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - } - message_type { - name: "SnapshotRemove" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "snapshotter" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - } - options { - go_package: "github.com/containerd/containerd/api/events;events" - 63300: 1 - } - syntax: "proto3" -} -file { - name: "google/protobuf/timestamp.proto" - package: "google.protobuf" - message_type { - name: "Timestamp" - field { - name: "seconds" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "seconds" - } - field { - name: "nanos" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_INT32 - json_name: "nanos" - } - } - options { - java_package: "com.google.protobuf" - java_outer_classname: "TimestampProto" - java_multiple_files: true - go_package: "google.golang.org/protobuf/types/known/timestamppb" - cc_enable_arenas: true - objc_class_prefix: "GPB" - csharp_namespace: "Google.Protobuf.WellKnownTypes" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/types/mount.proto" - package: "containerd.types" - message_type { - name: "Mount" - field { - name: "type" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "type" - } - field { - name: "source" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "source" - } - field { - name: "target" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "target" - } - field { - name: "options" - number: 4 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "options" - } - } - options { - go_package: "github.com/containerd/containerd/api/types;types" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/events/task.proto" - package: "containerd.events" - dependency: "google/protobuf/timestamp.proto" - dependency: "github.com/containerd/containerd/api/types/mount.proto" - dependency: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - message_type { - name: "TaskCreate" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "bundle" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "bundle" - } - field { - name: "rootfs" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "rootfs" - } - field { - name: "io" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.events.TaskIO" - json_name: "io" - } - field { - name: "checkpoint" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "checkpoint" - } - field { - name: "pid" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "TaskStart" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "pid" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "TaskDelete" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "pid" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "exit_status" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - field { - name: "id" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - message_type { - name: "TaskIO" - field { - name: "stdin" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdin" - } - field { - name: "stdout" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdout" - } - field { - name: "stderr" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stderr" - } - field { - name: "terminal" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "terminal" - } - } - message_type { - name: "TaskExit" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "pid" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "exit_status" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - } - message_type { - name: "TaskOOM" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - } - message_type { - name: "TaskExecAdded" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "TaskExecStarted" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - field { - name: "pid" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "TaskPaused" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - } - message_type { - name: "TaskResumed" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - } - message_type { - name: "TaskCheckpointed" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "checkpoint" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "checkpoint" - } - } - options { - go_package: "github.com/containerd/containerd/api/events;events" - 63300: 1 - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/runtime/sandbox/v1/sandbox.proto" - package: "containerd.runtime.sandbox.v1" - dependency: "google/protobuf/any.proto" - dependency: "google/protobuf/timestamp.proto" - dependency: "github.com/containerd/containerd/api/types/mount.proto" - message_type { - name: "StartSandboxRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - field { - name: "bundle_path" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "bundlePath" - } - field { - name: "rootfs" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "rootfs" - } - field { - name: "options" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - } - message_type { - name: "StartSandboxResponse" - field { - name: "pid" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "StopSandboxRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - field { - name: "timeout_secs" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "timeoutSecs" - } - } - message_type { - name: "StopSandboxResponse" - } - message_type { - name: "UpdateSandboxRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - field { - name: "resources" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "resources" - } - field { - name: "annotations" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.runtime.sandbox.v1.UpdateSandboxRequest.AnnotationsEntry" - json_name: "annotations" - } - nested_type { - name: "AnnotationsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "WaitSandboxRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "WaitSandboxResponse" - field { - name: "exit_status" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - } - message_type { - name: "UpdateSandboxResponse" - } - message_type { - name: "SandboxStatusRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "PauseSandboxRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "PauseSandboxResponse" - } - message_type { - name: "ResumeSandboxRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "ResumeSandboxResponse" - } - message_type { - name: "SandboxStatusResponse" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "pid" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "state" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "state" - } - field { - name: "exit_status" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - field { - name: "extra" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "extra" - } - } - message_type { - name: "PingRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "PingResponse" - } - service { - name: "Sandbox" - method { - name: "StartSandbox" - input_type: ".containerd.runtime.sandbox.v1.StartSandboxRequest" - output_type: ".containerd.runtime.sandbox.v1.StartSandboxResponse" - } - method { - name: "StopSandbox" - input_type: ".containerd.runtime.sandbox.v1.StopSandboxRequest" - output_type: ".containerd.runtime.sandbox.v1.StopSandboxResponse" - } - method { - name: "WaitSandbox" - input_type: ".containerd.runtime.sandbox.v1.WaitSandboxRequest" - output_type: ".containerd.runtime.sandbox.v1.WaitSandboxResponse" - } - method { - name: "UpdateSandbox" - input_type: ".containerd.runtime.sandbox.v1.UpdateSandboxRequest" - output_type: ".containerd.runtime.sandbox.v1.UpdateSandboxResponse" - } - method { - name: "PauseSandbox" - input_type: ".containerd.runtime.sandbox.v1.PauseSandboxRequest" - output_type: ".containerd.runtime.sandbox.v1.PauseSandboxResponse" - } - method { - name: "ResumeSandbox" - input_type: ".containerd.runtime.sandbox.v1.ResumeSandboxRequest" - output_type: ".containerd.runtime.sandbox.v1.ResumeSandboxResponse" - } - method { - name: "SandboxStatus" - input_type: ".containerd.runtime.sandbox.v1.SandboxStatusRequest" - output_type: ".containerd.runtime.sandbox.v1.SandboxStatusResponse" - } - method { - name: "PingSandbox" - input_type: ".containerd.runtime.sandbox.v1.PingRequest" - output_type: ".containerd.runtime.sandbox.v1.PingResponse" - } - } - options { - go_package: "github.com/containerd/containerd/api/runtime/sandbox/v1;sandbox" - } - syntax: "proto3" -} -file { - name: "google/protobuf/empty.proto" - package: "google.protobuf" - message_type { - name: "Empty" - } - options { - java_package: "com.google.protobuf" - java_outer_classname: "EmptyProto" - java_multiple_files: true - go_package: "google.golang.org/protobuf/types/known/emptypb" - cc_enable_arenas: true - objc_class_prefix: "GPB" - csharp_namespace: "Google.Protobuf.WellKnownTypes" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/types/task/task.proto" - package: "containerd.v1.types" - dependency: "google/protobuf/timestamp.proto" - dependency: "google/protobuf/any.proto" - message_type { - name: "Process" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "pid" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "status" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_ENUM - type_name: ".containerd.v1.types.Status" - json_name: "status" - } - field { - name: "stdin" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdin" - } - field { - name: "stdout" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdout" - } - field { - name: "stderr" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stderr" - } - field { - name: "terminal" - number: 8 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "terminal" - } - field { - name: "exit_status" - number: 9 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 10 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - } - message_type { - name: "ProcessInfo" - field { - name: "pid" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "info" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "info" - } - } - enum_type { - name: "Status" - value { - name: "UNKNOWN" - number: 0 - } - value { - name: "CREATED" - number: 1 - } - value { - name: "RUNNING" - number: 2 - } - value { - name: "STOPPED" - number: 3 - } - value { - name: "PAUSED" - number: 4 - } - value { - name: "PAUSING" - number: 5 - } - } - options { - go_package: "github.com/containerd/containerd/api/types/task" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/runtime/task/v2/shim.proto" - package: "containerd.task.v2" - dependency: "google/protobuf/any.proto" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/timestamp.proto" - dependency: "github.com/containerd/containerd/api/types/mount.proto" - dependency: "github.com/containerd/containerd/api/types/task/task.proto" - message_type { - name: "CreateTaskRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "bundle" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "bundle" - } - field { - name: "rootfs" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "rootfs" - } - field { - name: "terminal" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "terminal" - } - field { - name: "stdin" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdin" - } - field { - name: "stdout" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdout" - } - field { - name: "stderr" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stderr" - } - field { - name: "checkpoint" - number: 8 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "checkpoint" - } - field { - name: "parent_checkpoint" - number: 9 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "parentCheckpoint" - } - field { - name: "options" - number: 10 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - } - message_type { - name: "CreateTaskResponse" - field { - name: "pid" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "DeleteRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "DeleteResponse" - field { - name: "pid" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "exit_status" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - } - message_type { - name: "ExecProcessRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - field { - name: "terminal" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "terminal" - } - field { - name: "stdin" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdin" - } - field { - name: "stdout" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdout" - } - field { - name: "stderr" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stderr" - } - field { - name: "spec" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "spec" - } - } - message_type { - name: "ExecProcessResponse" - } - message_type { - name: "ResizePtyRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - field { - name: "width" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "width" - } - field { - name: "height" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "height" - } - } - message_type { - name: "StateRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "StateResponse" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "bundle" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "bundle" - } - field { - name: "pid" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "status" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_ENUM - type_name: ".containerd.v1.types.Status" - json_name: "status" - } - field { - name: "stdin" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdin" - } - field { - name: "stdout" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdout" - } - field { - name: "stderr" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stderr" - } - field { - name: "terminal" - number: 8 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "terminal" - } - field { - name: "exit_status" - number: 9 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 10 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - field { - name: "exec_id" - number: 11 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "KillRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - field { - name: "signal" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "signal" - } - field { - name: "all" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "all" - } - } - message_type { - name: "CloseIORequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - field { - name: "stdin" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "stdin" - } - } - message_type { - name: "PidsRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - message_type { - name: "PidsResponse" - field { - name: "processes" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.v1.types.ProcessInfo" - json_name: "processes" - } - } - message_type { - name: "CheckpointTaskRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "path" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "path" - } - field { - name: "options" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - } - message_type { - name: "UpdateTaskRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "resources" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "resources" - } - field { - name: "annotations" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.task.v2.UpdateTaskRequest.AnnotationsEntry" - json_name: "annotations" - } - nested_type { - name: "AnnotationsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "StartRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "StartResponse" - field { - name: "pid" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "WaitRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "WaitResponse" - field { - name: "exit_status" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - } - message_type { - name: "StatsRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - message_type { - name: "StatsResponse" - field { - name: "stats" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "stats" - } - } - message_type { - name: "ConnectRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - message_type { - name: "ConnectResponse" - field { - name: "shim_pid" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "shimPid" - } - field { - name: "task_pid" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "taskPid" - } - field { - name: "version" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "version" - } - } - message_type { - name: "ShutdownRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "now" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "now" - } - } - message_type { - name: "PauseRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - message_type { - name: "ResumeRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - service { - name: "Task" - method { - name: "State" - input_type: ".containerd.task.v2.StateRequest" - output_type: ".containerd.task.v2.StateResponse" - } - method { - name: "Create" - input_type: ".containerd.task.v2.CreateTaskRequest" - output_type: ".containerd.task.v2.CreateTaskResponse" - } - method { - name: "Start" - input_type: ".containerd.task.v2.StartRequest" - output_type: ".containerd.task.v2.StartResponse" - } - method { - name: "Delete" - input_type: ".containerd.task.v2.DeleteRequest" - output_type: ".containerd.task.v2.DeleteResponse" - } - method { - name: "Pids" - input_type: ".containerd.task.v2.PidsRequest" - output_type: ".containerd.task.v2.PidsResponse" - } - method { - name: "Pause" - input_type: ".containerd.task.v2.PauseRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Resume" - input_type: ".containerd.task.v2.ResumeRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Checkpoint" - input_type: ".containerd.task.v2.CheckpointTaskRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Kill" - input_type: ".containerd.task.v2.KillRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Exec" - input_type: ".containerd.task.v2.ExecProcessRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "ResizePty" - input_type: ".containerd.task.v2.ResizePtyRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "CloseIO" - input_type: ".containerd.task.v2.CloseIORequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Update" - input_type: ".containerd.task.v2.UpdateTaskRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Wait" - input_type: ".containerd.task.v2.WaitRequest" - output_type: ".containerd.task.v2.WaitResponse" - } - method { - name: "Stats" - input_type: ".containerd.task.v2.StatsRequest" - output_type: ".containerd.task.v2.StatsResponse" - } - method { - name: "Connect" - input_type: ".containerd.task.v2.ConnectRequest" - output_type: ".containerd.task.v2.ConnectResponse" - } - method { - name: "Shutdown" - input_type: ".containerd.task.v2.ShutdownRequest" - output_type: ".google.protobuf.Empty" - } - } - options { - go_package: "github.com/containerd/containerd/api/runtime/task/v2;task" - } - syntax: "proto3" -} -file { - name: "google/protobuf/field_mask.proto" - package: "google.protobuf" - message_type { - name: "FieldMask" - field { - name: "paths" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "paths" - } - } - options { - java_package: "com.google.protobuf" - java_outer_classname: "FieldMaskProto" - java_multiple_files: true - go_package: "google.golang.org/protobuf/types/known/fieldmaskpb" - cc_enable_arenas: true - objc_class_prefix: "GPB" - csharp_namespace: "Google.Protobuf.WellKnownTypes" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/containers/v1/containers.proto" - package: "containerd.services.containers.v1" - dependency: "google/protobuf/any.proto" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/field_mask.proto" - dependency: "google/protobuf/timestamp.proto" - message_type { - name: "Container" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "labels" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container.LabelsEntry" - json_name: "labels" - } - field { - name: "image" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "image" - } - field { - name: "runtime" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container.Runtime" - json_name: "runtime" - } - field { - name: "spec" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "spec" - } - field { - name: "snapshotter" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "snapshot_key" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotKey" - } - field { - name: "created_at" - number: 8 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "createdAt" - } - field { - name: "updated_at" - number: 9 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "updatedAt" - } - field { - name: "extensions" - number: 10 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container.ExtensionsEntry" - json_name: "extensions" - } - field { - name: "sandbox" - number: 11 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandbox" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - nested_type { - name: "Runtime" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "options" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - } - nested_type { - name: "ExtensionsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "GetContainerRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - message_type { - name: "GetContainerResponse" - field { - name: "container" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container" - json_name: "container" - } - } - message_type { - name: "ListContainersRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "ListContainersResponse" - field { - name: "containers" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container" - json_name: "containers" - } - } - message_type { - name: "CreateContainerRequest" - field { - name: "container" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container" - json_name: "container" - } - } - message_type { - name: "CreateContainerResponse" - field { - name: "container" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container" - json_name: "container" - } - } - message_type { - name: "UpdateContainerRequest" - field { - name: "container" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container" - json_name: "container" - } - field { - name: "update_mask" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.FieldMask" - json_name: "updateMask" - } - } - message_type { - name: "UpdateContainerResponse" - field { - name: "container" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container" - json_name: "container" - } - } - message_type { - name: "DeleteContainerRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - message_type { - name: "ListContainerMessage" - field { - name: "container" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.containers.v1.Container" - json_name: "container" - } - } - service { - name: "Containers" - method { - name: "Get" - input_type: ".containerd.services.containers.v1.GetContainerRequest" - output_type: ".containerd.services.containers.v1.GetContainerResponse" - } - method { - name: "List" - input_type: ".containerd.services.containers.v1.ListContainersRequest" - output_type: ".containerd.services.containers.v1.ListContainersResponse" - } - method { - name: "ListStream" - input_type: ".containerd.services.containers.v1.ListContainersRequest" - output_type: ".containerd.services.containers.v1.ListContainerMessage" - server_streaming: true - } - method { - name: "Create" - input_type: ".containerd.services.containers.v1.CreateContainerRequest" - output_type: ".containerd.services.containers.v1.CreateContainerResponse" - } - method { - name: "Update" - input_type: ".containerd.services.containers.v1.UpdateContainerRequest" - output_type: ".containerd.services.containers.v1.UpdateContainerResponse" - } - method { - name: "Delete" - input_type: ".containerd.services.containers.v1.DeleteContainerRequest" - output_type: ".google.protobuf.Empty" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/containers/v1;containers" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/content/v1/content.proto" - package: "containerd.services.content.v1" - dependency: "google/protobuf/field_mask.proto" - dependency: "google/protobuf/timestamp.proto" - dependency: "google/protobuf/empty.proto" - message_type { - name: "Info" - field { - name: "digest" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "digest" - } - field { - name: "size" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "size" - } - field { - name: "created_at" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "createdAt" - } - field { - name: "updated_at" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "updatedAt" - } - field { - name: "labels" - number: 5 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.content.v1.Info.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "InfoRequest" - field { - name: "digest" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "digest" - } - } - message_type { - name: "InfoResponse" - field { - name: "info" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.content.v1.Info" - json_name: "info" - } - } - message_type { - name: "UpdateRequest" - field { - name: "info" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.content.v1.Info" - json_name: "info" - } - field { - name: "update_mask" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.FieldMask" - json_name: "updateMask" - } - } - message_type { - name: "UpdateResponse" - field { - name: "info" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.content.v1.Info" - json_name: "info" - } - } - message_type { - name: "ListContentRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "ListContentResponse" - field { - name: "info" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.content.v1.Info" - json_name: "info" - } - } - message_type { - name: "DeleteContentRequest" - field { - name: "digest" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "digest" - } - } - message_type { - name: "ReadContentRequest" - field { - name: "digest" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "digest" - } - field { - name: "offset" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "offset" - } - field { - name: "size" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "size" - } - } - message_type { - name: "ReadContentResponse" - field { - name: "offset" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "offset" - } - field { - name: "data" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_BYTES - json_name: "data" - } - } - message_type { - name: "Status" - field { - name: "started_at" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "startedAt" - } - field { - name: "updated_at" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "updatedAt" - } - field { - name: "ref" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "ref" - } - field { - name: "offset" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "offset" - } - field { - name: "total" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "total" - } - field { - name: "expected" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "expected" - } - } - message_type { - name: "StatusRequest" - field { - name: "ref" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "ref" - } - } - message_type { - name: "StatusResponse" - field { - name: "status" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.content.v1.Status" - json_name: "status" - } - } - message_type { - name: "ListStatusesRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "ListStatusesResponse" - field { - name: "statuses" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.content.v1.Status" - json_name: "statuses" - } - } - message_type { - name: "WriteContentRequest" - field { - name: "action" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_ENUM - type_name: ".containerd.services.content.v1.WriteAction" - json_name: "action" - } - field { - name: "ref" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "ref" - } - field { - name: "total" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "total" - } - field { - name: "expected" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "expected" - } - field { - name: "offset" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "offset" - } - field { - name: "data" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_BYTES - json_name: "data" - } - field { - name: "labels" - number: 7 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.content.v1.WriteContentRequest.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "WriteContentResponse" - field { - name: "action" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_ENUM - type_name: ".containerd.services.content.v1.WriteAction" - json_name: "action" - } - field { - name: "started_at" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "startedAt" - } - field { - name: "updated_at" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "updatedAt" - } - field { - name: "offset" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "offset" - } - field { - name: "total" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "total" - } - field { - name: "digest" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "digest" - } - } - message_type { - name: "AbortRequest" - field { - name: "ref" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "ref" - } - } - enum_type { - name: "WriteAction" - value { - name: "STAT" - number: 0 - } - value { - name: "WRITE" - number: 1 - } - value { - name: "COMMIT" - number: 2 - } - } - service { - name: "Content" - method { - name: "Info" - input_type: ".containerd.services.content.v1.InfoRequest" - output_type: ".containerd.services.content.v1.InfoResponse" - } - method { - name: "Update" - input_type: ".containerd.services.content.v1.UpdateRequest" - output_type: ".containerd.services.content.v1.UpdateResponse" - } - method { - name: "List" - input_type: ".containerd.services.content.v1.ListContentRequest" - output_type: ".containerd.services.content.v1.ListContentResponse" - server_streaming: true - } - method { - name: "Delete" - input_type: ".containerd.services.content.v1.DeleteContentRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Read" - input_type: ".containerd.services.content.v1.ReadContentRequest" - output_type: ".containerd.services.content.v1.ReadContentResponse" - server_streaming: true - } - method { - name: "Status" - input_type: ".containerd.services.content.v1.StatusRequest" - output_type: ".containerd.services.content.v1.StatusResponse" - } - method { - name: "ListStatuses" - input_type: ".containerd.services.content.v1.ListStatusesRequest" - output_type: ".containerd.services.content.v1.ListStatusesResponse" - } - method { - name: "Write" - input_type: ".containerd.services.content.v1.WriteContentRequest" - output_type: ".containerd.services.content.v1.WriteContentResponse" - client_streaming: true - server_streaming: true - } - method { - name: "Abort" - input_type: ".containerd.services.content.v1.AbortRequest" - output_type: ".google.protobuf.Empty" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/content/v1;content" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/types/descriptor.proto" - package: "containerd.types" - message_type { - name: "Descriptor" - field { - name: "media_type" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "mediaType" - } - field { - name: "digest" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "digest" - } - field { - name: "size" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "size" - } - field { - name: "annotations" - number: 5 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Descriptor.AnnotationsEntry" - json_name: "annotations" - } - nested_type { - name: "AnnotationsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - options { - go_package: "github.com/containerd/containerd/api/types;types" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/diff/v1/diff.proto" - package: "containerd.services.diff.v1" - dependency: "google/protobuf/any.proto" - dependency: "github.com/containerd/containerd/api/types/mount.proto" - dependency: "github.com/containerd/containerd/api/types/descriptor.proto" - message_type { - name: "ApplyRequest" - field { - name: "diff" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Descriptor" - json_name: "diff" - } - field { - name: "mounts" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "mounts" - } - field { - name: "payloads" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.diff.v1.ApplyRequest.PayloadsEntry" - json_name: "payloads" - } - nested_type { - name: "PayloadsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "ApplyResponse" - field { - name: "applied" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Descriptor" - json_name: "applied" - } - } - message_type { - name: "DiffRequest" - field { - name: "left" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "left" - } - field { - name: "right" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "right" - } - field { - name: "media_type" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "mediaType" - } - field { - name: "ref" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "ref" - } - field { - name: "labels" - number: 5 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.diff.v1.DiffRequest.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "DiffResponse" - field { - name: "diff" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Descriptor" - json_name: "diff" - } - } - service { - name: "Diff" - method { - name: "Apply" - input_type: ".containerd.services.diff.v1.ApplyRequest" - output_type: ".containerd.services.diff.v1.ApplyResponse" - } - method { - name: "Diff" - input_type: ".containerd.services.diff.v1.DiffRequest" - output_type: ".containerd.services.diff.v1.DiffResponse" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/diff/v1;diff" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/events/v1/events.proto" - package: "containerd.services.events.v1" - dependency: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - dependency: "google/protobuf/any.proto" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/timestamp.proto" - message_type { - name: "PublishRequest" - field { - name: "topic" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "topic" - } - field { - name: "event" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "event" - } - } - message_type { - name: "ForwardRequest" - field { - name: "envelope" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.events.v1.Envelope" - json_name: "envelope" - } - } - message_type { - name: "SubscribeRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "Envelope" - field { - name: "timestamp" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "timestamp" - } - field { - name: "namespace" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "namespace" - } - field { - name: "topic" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "topic" - } - field { - name: "event" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "event" - } - options { - 64400: 1 - } - } - service { - name: "Events" - method { - name: "Publish" - input_type: ".containerd.services.events.v1.PublishRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Forward" - input_type: ".containerd.services.events.v1.ForwardRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Subscribe" - input_type: ".containerd.services.events.v1.SubscribeRequest" - output_type: ".containerd.services.events.v1.Envelope" - server_streaming: true - } - } - options { - go_package: "github.com/containerd/containerd/api/services/events/v1;events" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/images/v1/images.proto" - package: "containerd.services.images.v1" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/field_mask.proto" - dependency: "google/protobuf/timestamp.proto" - dependency: "github.com/containerd/containerd/api/types/descriptor.proto" - message_type { - name: "Image" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "labels" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.Image.LabelsEntry" - json_name: "labels" - } - field { - name: "target" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Descriptor" - json_name: "target" - } - field { - name: "created_at" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "createdAt" - } - field { - name: "updated_at" - number: 8 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "updatedAt" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "GetImageRequest" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - } - message_type { - name: "GetImageResponse" - field { - name: "image" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.Image" - json_name: "image" - } - } - message_type { - name: "CreateImageRequest" - field { - name: "image" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.Image" - json_name: "image" - } - } - message_type { - name: "CreateImageResponse" - field { - name: "image" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.Image" - json_name: "image" - } - } - message_type { - name: "UpdateImageRequest" - field { - name: "image" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.Image" - json_name: "image" - } - field { - name: "update_mask" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.FieldMask" - json_name: "updateMask" - } - } - message_type { - name: "UpdateImageResponse" - field { - name: "image" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.Image" - json_name: "image" - } - } - message_type { - name: "ListImagesRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "ListImagesResponse" - field { - name: "images" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.images.v1.Image" - json_name: "images" - } - } - message_type { - name: "DeleteImageRequest" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "sync" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "sync" - } - } - service { - name: "Images" - method { - name: "Get" - input_type: ".containerd.services.images.v1.GetImageRequest" - output_type: ".containerd.services.images.v1.GetImageResponse" - } - method { - name: "List" - input_type: ".containerd.services.images.v1.ListImagesRequest" - output_type: ".containerd.services.images.v1.ListImagesResponse" - } - method { - name: "Create" - input_type: ".containerd.services.images.v1.CreateImageRequest" - output_type: ".containerd.services.images.v1.CreateImageResponse" - } - method { - name: "Update" - input_type: ".containerd.services.images.v1.UpdateImageRequest" - output_type: ".containerd.services.images.v1.UpdateImageResponse" - } - method { - name: "Delete" - input_type: ".containerd.services.images.v1.DeleteImageRequest" - output_type: ".google.protobuf.Empty" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/images/v1;images" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/types/platform.proto" - package: "containerd.types" - message_type { - name: "Platform" - field { - name: "os" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "os" - } - field { - name: "architecture" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "architecture" - } - field { - name: "variant" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "variant" - } - } - options { - go_package: "github.com/containerd/containerd/api/types;types" - } - syntax: "proto3" -} -file { - name: "google/rpc/status.proto" - package: "google.rpc" - dependency: "google/protobuf/any.proto" - message_type { - name: "Status" - field { - name: "code" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_INT32 - json_name: "code" - } - field { - name: "message" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "message" - } - field { - name: "details" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "details" - } - } - options { - java_package: "com.google.rpc" - java_outer_classname: "StatusProto" - java_multiple_files: true - go_package: "google.golang.org/genproto/googleapis/rpc/status;status" - objc_class_prefix: "RPC" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/introspection/v1/introspection.proto" - package: "containerd.services.introspection.v1" - dependency: "github.com/containerd/containerd/api/types/platform.proto" - dependency: "google/rpc/status.proto" - dependency: "google/protobuf/empty.proto" - message_type { - name: "Plugin" - field { - name: "type" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "type" - } - field { - name: "id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "requires" - number: 3 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "requires" - } - field { - name: "platforms" - number: 4 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Platform" - json_name: "platforms" - } - field { - name: "exports" - number: 5 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.introspection.v1.Plugin.ExportsEntry" - json_name: "exports" - } - field { - name: "capabilities" - number: 6 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "capabilities" - } - field { - name: "init_err" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.rpc.Status" - json_name: "initErr" - } - nested_type { - name: "ExportsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "PluginsRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "PluginsResponse" - field { - name: "plugins" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.introspection.v1.Plugin" - json_name: "plugins" - } - } - message_type { - name: "ServerResponse" - field { - name: "uuid" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "uuid" - } - } - service { - name: "Introspection" - method { - name: "Plugins" - input_type: ".containerd.services.introspection.v1.PluginsRequest" - output_type: ".containerd.services.introspection.v1.PluginsResponse" - } - method { - name: "Server" - input_type: ".google.protobuf.Empty" - output_type: ".containerd.services.introspection.v1.ServerResponse" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/introspection/v1;introspection" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/leases/v1/leases.proto" - package: "containerd.services.leases.v1" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/timestamp.proto" - message_type { - name: "Lease" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "created_at" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "createdAt" - } - field { - name: "labels" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.leases.v1.Lease.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "CreateRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "labels" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.leases.v1.CreateRequest.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "CreateResponse" - field { - name: "lease" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.leases.v1.Lease" - json_name: "lease" - } - } - message_type { - name: "DeleteRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "sync" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "sync" - } - } - message_type { - name: "ListRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "ListResponse" - field { - name: "leases" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.leases.v1.Lease" - json_name: "leases" - } - } - message_type { - name: "Resource" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "type" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "type" - } - } - message_type { - name: "AddResourceRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "resource" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.leases.v1.Resource" - json_name: "resource" - } - } - message_type { - name: "DeleteResourceRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "resource" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.leases.v1.Resource" - json_name: "resource" - } - } - message_type { - name: "ListResourcesRequest" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - } - message_type { - name: "ListResourcesResponse" - field { - name: "resources" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.leases.v1.Resource" - json_name: "resources" - } - } - service { - name: "Leases" - method { - name: "Create" - input_type: ".containerd.services.leases.v1.CreateRequest" - output_type: ".containerd.services.leases.v1.CreateResponse" - } - method { - name: "Delete" - input_type: ".containerd.services.leases.v1.DeleteRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "List" - input_type: ".containerd.services.leases.v1.ListRequest" - output_type: ".containerd.services.leases.v1.ListResponse" - } - method { - name: "AddResource" - input_type: ".containerd.services.leases.v1.AddResourceRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "DeleteResource" - input_type: ".containerd.services.leases.v1.DeleteResourceRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "ListResources" - input_type: ".containerd.services.leases.v1.ListResourcesRequest" - output_type: ".containerd.services.leases.v1.ListResourcesResponse" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/leases/v1;leases" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/namespaces/v1/namespace.proto" - package: "containerd.services.namespaces.v1" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/field_mask.proto" - message_type { - name: "Namespace" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "labels" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.namespaces.v1.Namespace.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "GetNamespaceRequest" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - } - message_type { - name: "GetNamespaceResponse" - field { - name: "namespace" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.namespaces.v1.Namespace" - json_name: "namespace" - } - } - message_type { - name: "ListNamespacesRequest" - field { - name: "filter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "filter" - } - } - message_type { - name: "ListNamespacesResponse" - field { - name: "namespaces" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.namespaces.v1.Namespace" - json_name: "namespaces" - } - } - message_type { - name: "CreateNamespaceRequest" - field { - name: "namespace" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.namespaces.v1.Namespace" - json_name: "namespace" - } - } - message_type { - name: "CreateNamespaceResponse" - field { - name: "namespace" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.namespaces.v1.Namespace" - json_name: "namespace" - } - } - message_type { - name: "UpdateNamespaceRequest" - field { - name: "namespace" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.namespaces.v1.Namespace" - json_name: "namespace" - } - field { - name: "update_mask" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.FieldMask" - json_name: "updateMask" - } - } - message_type { - name: "UpdateNamespaceResponse" - field { - name: "namespace" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.namespaces.v1.Namespace" - json_name: "namespace" - } - } - message_type { - name: "DeleteNamespaceRequest" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - } - service { - name: "Namespaces" - method { - name: "Get" - input_type: ".containerd.services.namespaces.v1.GetNamespaceRequest" - output_type: ".containerd.services.namespaces.v1.GetNamespaceResponse" - } - method { - name: "List" - input_type: ".containerd.services.namespaces.v1.ListNamespacesRequest" - output_type: ".containerd.services.namespaces.v1.ListNamespacesResponse" - } - method { - name: "Create" - input_type: ".containerd.services.namespaces.v1.CreateNamespaceRequest" - output_type: ".containerd.services.namespaces.v1.CreateNamespaceResponse" - } - method { - name: "Update" - input_type: ".containerd.services.namespaces.v1.UpdateNamespaceRequest" - output_type: ".containerd.services.namespaces.v1.UpdateNamespaceResponse" - } - method { - name: "Delete" - input_type: ".containerd.services.namespaces.v1.DeleteNamespaceRequest" - output_type: ".google.protobuf.Empty" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/namespaces/v1;namespaces" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/types/sandbox.proto" - package: "containerd.types" - dependency: "google/protobuf/any.proto" - dependency: "google/protobuf/timestamp.proto" - message_type { - name: "Sandbox" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - field { - name: "runtime" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox.Runtime" - json_name: "runtime" - } - field { - name: "spec" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "spec" - } - field { - name: "labels" - number: 4 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox.LabelsEntry" - json_name: "labels" - } - field { - name: "created_at" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "createdAt" - } - field { - name: "updated_at" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "updatedAt" - } - field { - name: "extensions" - number: 7 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox.ExtensionsEntry" - json_name: "extensions" - } - nested_type { - name: "Runtime" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "options" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - nested_type { - name: "ExtensionsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "value" - } - options { - map_entry: true - } - } - } - options { - go_package: "github.com/containerd/containerd/api/types;types" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/sandbox/v1/sandbox.proto" - package: "containerd.services.sandbox.v1" - dependency: "google/protobuf/any.proto" - dependency: "google/protobuf/timestamp.proto" - dependency: "github.com/containerd/containerd/api/types/sandbox.proto" - dependency: "github.com/containerd/containerd/api/types/mount.proto" - message_type { - name: "StoreCreateRequest" - field { - name: "sandbox" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox" - json_name: "sandbox" - } - } - message_type { - name: "StoreCreateResponse" - field { - name: "sandbox" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox" - json_name: "sandbox" - } - } - message_type { - name: "StoreUpdateRequest" - field { - name: "sandbox" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox" - json_name: "sandbox" - } - field { - name: "fields" - number: 2 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "fields" - } - } - message_type { - name: "StoreUpdateResponse" - field { - name: "sandbox" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox" - json_name: "sandbox" - } - } - message_type { - name: "StoreDeleteRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "StoreDeleteResponse" - } - message_type { - name: "StoreListRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "StoreListResponse" - field { - name: "list" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox" - json_name: "list" - } - } - message_type { - name: "StoreGetRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "StoreGetResponse" - field { - name: "sandbox" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Sandbox" - json_name: "sandbox" - } - } - message_type { - name: "ControllerStartRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - field { - name: "rootfs" - number: 2 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "rootfs" - } - field { - name: "options" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - } - message_type { - name: "ControllerStartResponse" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - field { - name: "pid" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "ControllerShutdownRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - field { - name: "timeout_secs" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "timeoutSecs" - } - } - message_type { - name: "ControllerShutdownResponse" - } - message_type { - name: "ControllerWaitRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "ControllerWaitResponse" - field { - name: "exit_status" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - } - message_type { - name: "ControllerStatusRequest" - field { - name: "sandbox_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "sandboxId" - } - } - message_type { - name: "ControllerStatusResponse" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "pid" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "state" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "state" - } - field { - name: "exit_status" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - field { - name: "extra" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "extra" - } - } - service { - name: "Store" - method { - name: "Create" - input_type: ".containerd.services.sandbox.v1.StoreCreateRequest" - output_type: ".containerd.services.sandbox.v1.StoreCreateResponse" - } - method { - name: "Update" - input_type: ".containerd.services.sandbox.v1.StoreUpdateRequest" - output_type: ".containerd.services.sandbox.v1.StoreUpdateResponse" - } - method { - name: "Delete" - input_type: ".containerd.services.sandbox.v1.StoreDeleteRequest" - output_type: ".containerd.services.sandbox.v1.StoreDeleteResponse" - } - method { - name: "List" - input_type: ".containerd.services.sandbox.v1.StoreListRequest" - output_type: ".containerd.services.sandbox.v1.StoreListResponse" - } - method { - name: "Get" - input_type: ".containerd.services.sandbox.v1.StoreGetRequest" - output_type: ".containerd.services.sandbox.v1.StoreGetResponse" - } - } - service { - name: "Controller" - method { - name: "Start" - input_type: ".containerd.services.sandbox.v1.ControllerStartRequest" - output_type: ".containerd.services.sandbox.v1.ControllerStartResponse" - } - method { - name: "Shutdown" - input_type: ".containerd.services.sandbox.v1.ControllerShutdownRequest" - output_type: ".containerd.services.sandbox.v1.ControllerShutdownResponse" - } - method { - name: "Wait" - input_type: ".containerd.services.sandbox.v1.ControllerWaitRequest" - output_type: ".containerd.services.sandbox.v1.ControllerWaitResponse" - } - method { - name: "Status" - input_type: ".containerd.services.sandbox.v1.ControllerStatusRequest" - output_type: ".containerd.services.sandbox.v1.ControllerStatusResponse" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/sandbox/v1;sandbox" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/snapshots/v1/snapshots.proto" - package: "containerd.services.snapshots.v1" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/field_mask.proto" - dependency: "google/protobuf/timestamp.proto" - dependency: "github.com/containerd/containerd/api/types/mount.proto" - message_type { - name: "PrepareSnapshotRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "key" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "parent" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "parent" - } - field { - name: "labels" - number: 4 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.snapshots.v1.PrepareSnapshotRequest.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "PrepareSnapshotResponse" - field { - name: "mounts" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "mounts" - } - } - message_type { - name: "ViewSnapshotRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "key" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "parent" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "parent" - } - field { - name: "labels" - number: 4 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.snapshots.v1.ViewSnapshotRequest.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "ViewSnapshotResponse" - field { - name: "mounts" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "mounts" - } - } - message_type { - name: "MountsRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "key" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - } - message_type { - name: "MountsResponse" - field { - name: "mounts" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "mounts" - } - } - message_type { - name: "RemoveSnapshotRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "key" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - } - message_type { - name: "CommitSnapshotRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "name" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "key" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "labels" - number: 4 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.snapshots.v1.CommitSnapshotRequest.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "StatSnapshotRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "key" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - } - message_type { - name: "Info" - field { - name: "name" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "name" - } - field { - name: "parent" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "parent" - } - field { - name: "kind" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_ENUM - type_name: ".containerd.services.snapshots.v1.Kind" - json_name: "kind" - } - field { - name: "created_at" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "createdAt" - } - field { - name: "updated_at" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "updatedAt" - } - field { - name: "labels" - number: 6 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.snapshots.v1.Info.LabelsEntry" - json_name: "labels" - } - nested_type { - name: "LabelsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "StatSnapshotResponse" - field { - name: "info" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.snapshots.v1.Info" - json_name: "info" - } - } - message_type { - name: "UpdateSnapshotRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "info" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.snapshots.v1.Info" - json_name: "info" - } - field { - name: "update_mask" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.FieldMask" - json_name: "updateMask" - } - } - message_type { - name: "UpdateSnapshotResponse" - field { - name: "info" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.snapshots.v1.Info" - json_name: "info" - } - } - message_type { - name: "ListSnapshotsRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "filters" - number: 2 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "ListSnapshotsResponse" - field { - name: "info" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.snapshots.v1.Info" - json_name: "info" - } - } - message_type { - name: "UsageRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - field { - name: "key" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - } - message_type { - name: "UsageResponse" - field { - name: "size" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "size" - } - field { - name: "inodes" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_INT64 - json_name: "inodes" - } - } - message_type { - name: "CleanupRequest" - field { - name: "snapshotter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "snapshotter" - } - } - enum_type { - name: "Kind" - value { - name: "UNKNOWN" - number: 0 - } - value { - name: "VIEW" - number: 1 - } - value { - name: "ACTIVE" - number: 2 - } - value { - name: "COMMITTED" - number: 3 - } - } - service { - name: "Snapshots" - method { - name: "Prepare" - input_type: ".containerd.services.snapshots.v1.PrepareSnapshotRequest" - output_type: ".containerd.services.snapshots.v1.PrepareSnapshotResponse" - } - method { - name: "View" - input_type: ".containerd.services.snapshots.v1.ViewSnapshotRequest" - output_type: ".containerd.services.snapshots.v1.ViewSnapshotResponse" - } - method { - name: "Mounts" - input_type: ".containerd.services.snapshots.v1.MountsRequest" - output_type: ".containerd.services.snapshots.v1.MountsResponse" - } - method { - name: "Commit" - input_type: ".containerd.services.snapshots.v1.CommitSnapshotRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Remove" - input_type: ".containerd.services.snapshots.v1.RemoveSnapshotRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Stat" - input_type: ".containerd.services.snapshots.v1.StatSnapshotRequest" - output_type: ".containerd.services.snapshots.v1.StatSnapshotResponse" - } - method { - name: "Update" - input_type: ".containerd.services.snapshots.v1.UpdateSnapshotRequest" - output_type: ".containerd.services.snapshots.v1.UpdateSnapshotResponse" - } - method { - name: "List" - input_type: ".containerd.services.snapshots.v1.ListSnapshotsRequest" - output_type: ".containerd.services.snapshots.v1.ListSnapshotsResponse" - server_streaming: true - } - method { - name: "Usage" - input_type: ".containerd.services.snapshots.v1.UsageRequest" - output_type: ".containerd.services.snapshots.v1.UsageResponse" - } - method { - name: "Cleanup" - input_type: ".containerd.services.snapshots.v1.CleanupRequest" - output_type: ".google.protobuf.Empty" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/snapshots/v1;snapshots" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/types/metrics.proto" - package: "containerd.types" - dependency: "google/protobuf/any.proto" - dependency: "google/protobuf/timestamp.proto" - message_type { - name: "Metric" - field { - name: "timestamp" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "timestamp" - } - field { - name: "id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "data" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "data" - } - } - options { - go_package: "github.com/containerd/containerd/api/types;types" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/tasks/v1/tasks.proto" - package: "containerd.services.tasks.v1" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/any.proto" - dependency: "github.com/containerd/containerd/api/types/mount.proto" - dependency: "github.com/containerd/containerd/api/types/metrics.proto" - dependency: "github.com/containerd/containerd/api/types/descriptor.proto" - dependency: "github.com/containerd/containerd/api/types/task/task.proto" - dependency: "google/protobuf/timestamp.proto" - message_type { - name: "CreateTaskRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "rootfs" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Mount" - json_name: "rootfs" - } - field { - name: "stdin" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdin" - } - field { - name: "stdout" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdout" - } - field { - name: "stderr" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stderr" - } - field { - name: "terminal" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "terminal" - } - field { - name: "checkpoint" - number: 8 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.types.Descriptor" - json_name: "checkpoint" - } - field { - name: "options" - number: 9 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - field { - name: "runtime_path" - number: 10 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "runtimePath" - } - } - message_type { - name: "CreateTaskResponse" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "pid" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "StartRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "StartResponse" - field { - name: "pid" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - } - message_type { - name: "DeleteTaskRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - } - message_type { - name: "DeleteResponse" - field { - name: "id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "id" - } - field { - name: "pid" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "pid" - } - field { - name: "exit_status" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - } - message_type { - name: "DeleteProcessRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "GetRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "GetResponse" - field { - name: "process" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.v1.types.Process" - json_name: "process" - } - } - message_type { - name: "ListTasksRequest" - field { - name: "filter" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "filter" - } - } - message_type { - name: "ListTasksResponse" - field { - name: "tasks" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.v1.types.Process" - json_name: "tasks" - } - } - message_type { - name: "KillRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - field { - name: "signal" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "signal" - } - field { - name: "all" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "all" - } - } - message_type { - name: "ExecProcessRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "stdin" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdin" - } - field { - name: "stdout" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stdout" - } - field { - name: "stderr" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "stderr" - } - field { - name: "terminal" - number: 5 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "terminal" - } - field { - name: "spec" - number: 6 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "spec" - } - field { - name: "exec_id" - number: 7 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "ExecProcessResponse" - } - message_type { - name: "ResizePtyRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - field { - name: "width" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "width" - } - field { - name: "height" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "height" - } - } - message_type { - name: "CloseIORequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - field { - name: "stdin" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_BOOL - json_name: "stdin" - } - } - message_type { - name: "PauseTaskRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - } - message_type { - name: "ResumeTaskRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - } - message_type { - name: "ListPidsRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - } - message_type { - name: "ListPidsResponse" - field { - name: "processes" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.v1.types.ProcessInfo" - json_name: "processes" - } - } - message_type { - name: "CheckpointTaskRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "parent_checkpoint" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "parentCheckpoint" - } - field { - name: "options" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "options" - } - } - message_type { - name: "CheckpointTaskResponse" - field { - name: "descriptors" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Descriptor" - json_name: "descriptors" - } - } - message_type { - name: "UpdateTaskRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "resources" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "resources" - } - field { - name: "annotations" - number: 3 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.services.tasks.v1.UpdateTaskRequest.AnnotationsEntry" - json_name: "annotations" - } - nested_type { - name: "AnnotationsEntry" - field { - name: "key" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "key" - } - field { - name: "value" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "value" - } - options { - map_entry: true - } - } - } - message_type { - name: "MetricsRequest" - field { - name: "filters" - number: 1 - label: LABEL_REPEATED - type: TYPE_STRING - json_name: "filters" - } - } - message_type { - name: "MetricsResponse" - field { - name: "metrics" - number: 1 - label: LABEL_REPEATED - type: TYPE_MESSAGE - type_name: ".containerd.types.Metric" - json_name: "metrics" - } - } - message_type { - name: "WaitRequest" - field { - name: "container_id" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "containerId" - } - field { - name: "exec_id" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "execId" - } - } - message_type { - name: "WaitResponse" - field { - name: "exit_status" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_UINT32 - json_name: "exitStatus" - } - field { - name: "exited_at" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "exitedAt" - } - } - service { - name: "Tasks" - method { - name: "Create" - input_type: ".containerd.services.tasks.v1.CreateTaskRequest" - output_type: ".containerd.services.tasks.v1.CreateTaskResponse" - } - method { - name: "Start" - input_type: ".containerd.services.tasks.v1.StartRequest" - output_type: ".containerd.services.tasks.v1.StartResponse" - } - method { - name: "Delete" - input_type: ".containerd.services.tasks.v1.DeleteTaskRequest" - output_type: ".containerd.services.tasks.v1.DeleteResponse" - } - method { - name: "DeleteProcess" - input_type: ".containerd.services.tasks.v1.DeleteProcessRequest" - output_type: ".containerd.services.tasks.v1.DeleteResponse" - } - method { - name: "Get" - input_type: ".containerd.services.tasks.v1.GetRequest" - output_type: ".containerd.services.tasks.v1.GetResponse" - } - method { - name: "List" - input_type: ".containerd.services.tasks.v1.ListTasksRequest" - output_type: ".containerd.services.tasks.v1.ListTasksResponse" - } - method { - name: "Kill" - input_type: ".containerd.services.tasks.v1.KillRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Exec" - input_type: ".containerd.services.tasks.v1.ExecProcessRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "ResizePty" - input_type: ".containerd.services.tasks.v1.ResizePtyRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "CloseIO" - input_type: ".containerd.services.tasks.v1.CloseIORequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Pause" - input_type: ".containerd.services.tasks.v1.PauseTaskRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Resume" - input_type: ".containerd.services.tasks.v1.ResumeTaskRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "ListPids" - input_type: ".containerd.services.tasks.v1.ListPidsRequest" - output_type: ".containerd.services.tasks.v1.ListPidsResponse" - } - method { - name: "Checkpoint" - input_type: ".containerd.services.tasks.v1.CheckpointTaskRequest" - output_type: ".containerd.services.tasks.v1.CheckpointTaskResponse" - } - method { - name: "Update" - input_type: ".containerd.services.tasks.v1.UpdateTaskRequest" - output_type: ".google.protobuf.Empty" - } - method { - name: "Metrics" - input_type: ".containerd.services.tasks.v1.MetricsRequest" - output_type: ".containerd.services.tasks.v1.MetricsResponse" - } - method { - name: "Wait" - input_type: ".containerd.services.tasks.v1.WaitRequest" - output_type: ".containerd.services.tasks.v1.WaitResponse" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/tasks/v1;tasks" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/ttrpc/events/v1/events.proto" - package: "containerd.services.events.ttrpc.v1" - dependency: "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto" - dependency: "google/protobuf/any.proto" - dependency: "google/protobuf/empty.proto" - dependency: "google/protobuf/timestamp.proto" - message_type { - name: "ForwardRequest" - field { - name: "envelope" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".containerd.services.events.ttrpc.v1.Envelope" - json_name: "envelope" - } - } - message_type { - name: "Envelope" - field { - name: "timestamp" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Timestamp" - json_name: "timestamp" - } - field { - name: "namespace" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "namespace" - } - field { - name: "topic" - number: 3 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "topic" - } - field { - name: "event" - number: 4 - label: LABEL_OPTIONAL - type: TYPE_MESSAGE - type_name: ".google.protobuf.Any" - json_name: "event" - } - options { - 64400: 1 - } - } - service { - name: "Events" - method { - name: "Forward" - input_type: ".containerd.services.events.ttrpc.v1.ForwardRequest" - output_type: ".google.protobuf.Empty" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/ttrpc/events/v1;events" - } - syntax: "proto3" -} -file { - name: "github.com/containerd/containerd/api/services/version/v1/version.proto" - package: "containerd.services.version.v1" - dependency: "google/protobuf/empty.proto" - message_type { - name: "VersionResponse" - field { - name: "version" - number: 1 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "version" - } - field { - name: "revision" - number: 2 - label: LABEL_OPTIONAL - type: TYPE_STRING - json_name: "revision" - } - } - service { - name: "Version" - method { - name: "Version" - input_type: ".google.protobuf.Empty" - output_type: ".containerd.services.version.v1.VersionResponse" - } - } - options { - go_package: "github.com/containerd/containerd/api/services/version/v1;version" - } - syntax: "proto3" -} diff --git a/api/next.txtpb b/api/next.txtpb new file mode 100644 index 000000000000..eca8771ed902 --- /dev/null +++ b/api/next.txtpb @@ -0,0 +1,70497 @@ +file: { + name: "google/protobuf/any.proto" + package: "google.protobuf" + message_type: { + name: "Any" + field: { + name: "type_url" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "typeUrl" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BYTES + json_name: "value" + } + } + options: { + java_package: "com.google.protobuf" + java_outer_classname: "AnyProto" + java_multiple_files: true + go_package: "google.golang.org/protobuf/types/known/anypb" + objc_class_prefix: "GPB" + csharp_namespace: "Google.Protobuf.WellKnownTypes" + } + source_code_info: { + location: { + span: 30 + span: 0 + span: 161 + span: 1 + } + location: { + path: 12 + span: 30 + span: 0 + span: 18 + leading_detached_comments: " Protocol Buffers - Google's data interchange format\n Copyright 2008 Google Inc. All rights reserved.\n https://developers.google.com/protocol-buffers/\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following disclaimer\n in the documentation and/or other materials provided with the\n distribution.\n * Neither the name of Google Inc. nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" + } + location: { + path: 2 + span: 32 + span: 0 + span: 24 + } + location: { + path: 8 + span: 34 + span: 0 + span: 67 + } + location: { + path: 8 + path: 11 + span: 34 + span: 0 + span: 67 + } + location: { + path: 8 + span: 35 + span: 0 + span: 44 + } + location: { + path: 8 + path: 1 + span: 35 + span: 0 + span: 44 + } + location: { + path: 8 + span: 36 + span: 0 + span: 41 + } + location: { + path: 8 + path: 8 + span: 36 + span: 0 + span: 41 + } + location: { + path: 8 + span: 37 + span: 0 + span: 34 + } + location: { + path: 8 + path: 10 + span: 37 + span: 0 + span: 34 + } + location: { + path: 8 + span: 38 + span: 0 + span: 33 + } + location: { + path: 8 + path: 36 + span: 38 + span: 0 + span: 33 + } + location: { + path: 8 + span: 39 + span: 0 + span: 59 + } + location: { + path: 8 + path: 37 + span: 39 + span: 0 + span: 59 + } + location: { + path: 4 + path: 0 + span: 127 + span: 0 + span: 161 + span: 1 + leading_comments: " `Any` contains an arbitrary serialized protocol buffer message along with a\n URL that describes the type of the serialized message.\n\n Protobuf library provides support to pack/unpack Any values in the form\n of utility functions or additional generated methods of the Any type.\n\n Example 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\n Example 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\n The pack methods provided by protobuf library will by default use\n 'type.googleapis.com/full.type.name' as the type URL and the unpack\n methods only use the fully qualified type name after the last '/'\n in the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n name \"y.z\".\n\n JSON\n ====\n The JSON representation of an `Any` value uses the regular\n representation of the deserialized, embedded message, with an\n additional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": ,\n \"lastName\": \n }\n\n If the embedded message type is well-known and has a custom JSON\n representation, that representation will be embedded adding a field\n `value` which holds the custom JSON in addition to the `@type`\n field. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }\n\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 127 + span: 8 + span: 11 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 157 + span: 2 + span: 22 + leading_comments: " A URL/resource name that uniquely identifies the type of the serialized\n protocol buffer message. This string must contain at least\n one \"/\" character. The last segment of the URL's path must represent\n the fully qualified name of the type (as in\n `path/google.protobuf.Duration`). The name should be in a canonical form\n (e.g., leading \".\" is not accepted).\n\n In practice, teams usually precompile into the binary all types that they\n expect it to use in the context of Any. However, for URLs which use the\n scheme `http`, `https`, or no scheme, one can optionally set up a type\n server that maps type URLs to message definitions as follows:\n\n * If no scheme is provided, `https` is assumed.\n * An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n * Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\n Note: this functionality is not currently available in the official\n protobuf release, and it is not used for type URLs beginning with\n type.googleapis.com. As of May 2023, there are no widely used type server\n implementations and no plans to implement one.\n\n Schemes other than `http`, `https` (or the empty scheme) might be\n used with implementation specific semantics.\n\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 157 + span: 2 + span: 8 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 157 + span: 9 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 157 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 160 + span: 2 + span: 18 + leading_comments: " Must be a valid serialized protocol buffer of the above specified type.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 160 + span: 2 + span: 7 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 160 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 160 + span: 16 + span: 17 + } + } + syntax: "proto3" + buf_extension: { + is_import: true + is_syntax_unspecified: false + } +} +file: { + name: "google/protobuf/descriptor.proto" + package: "google.protobuf" + message_type: { + name: "FileDescriptorSet" + field: { + name: "file" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.FileDescriptorProto" + json_name: "file" + } + extension_range: { + start: 536000000 + end: 536000001 + options: { + declaration: { + number: 536000000 + full_name: ".buf.descriptor.v1.buf_file_descriptor_set_extension" + type: ".buf.descriptor.v1.FileDescriptorSetExtension" + } + } + } + } + message_type: { + name: "FileDescriptorProto" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "package" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "package" + } + field: { + name: "dependency" + number: 3 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "dependency" + } + field: { + name: "public_dependency" + number: 10 + label: LABEL_REPEATED + type: TYPE_INT32 + json_name: "publicDependency" + } + field: { + name: "weak_dependency" + number: 11 + label: LABEL_REPEATED + type: TYPE_INT32 + json_name: "weakDependency" + } + field: { + name: "option_dependency" + number: 15 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "optionDependency" + } + field: { + name: "message_type" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.DescriptorProto" + json_name: "messageType" + } + field: { + name: "enum_type" + number: 5 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.EnumDescriptorProto" + json_name: "enumType" + } + field: { + name: "service" + number: 6 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.ServiceDescriptorProto" + json_name: "service" + } + field: { + name: "extension" + number: 7 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldDescriptorProto" + json_name: "extension" + } + field: { + name: "options" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FileOptions" + json_name: "options" + } + field: { + name: "source_code_info" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.SourceCodeInfo" + json_name: "sourceCodeInfo" + } + field: { + name: "syntax" + number: 12 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "syntax" + } + field: { + name: "edition" + number: 14 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.Edition" + json_name: "edition" + } + } + message_type: { + name: "DescriptorProto" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "field" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldDescriptorProto" + json_name: "field" + } + field: { + name: "extension" + number: 6 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldDescriptorProto" + json_name: "extension" + } + field: { + name: "nested_type" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.DescriptorProto" + json_name: "nestedType" + } + field: { + name: "enum_type" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.EnumDescriptorProto" + json_name: "enumType" + } + field: { + name: "extension_range" + number: 5 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.DescriptorProto.ExtensionRange" + json_name: "extensionRange" + } + field: { + name: "oneof_decl" + number: 8 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.OneofDescriptorProto" + json_name: "oneofDecl" + } + field: { + name: "options" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.MessageOptions" + json_name: "options" + } + field: { + name: "reserved_range" + number: 9 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.DescriptorProto.ReservedRange" + json_name: "reservedRange" + } + field: { + name: "reserved_name" + number: 10 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "reservedName" + } + field: { + name: "visibility" + number: 11 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.SymbolVisibility" + json_name: "visibility" + } + nested_type: { + name: "ExtensionRange" + field: { + name: "start" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "start" + } + field: { + name: "end" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "end" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.ExtensionRangeOptions" + json_name: "options" + } + } + nested_type: { + name: "ReservedRange" + field: { + name: "start" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "start" + } + field: { + name: "end" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "end" + } + } + } + message_type: { + name: "ExtensionRangeOptions" + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + field: { + name: "declaration" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.ExtensionRangeOptions.Declaration" + json_name: "declaration" + options: { + retention: RETENTION_SOURCE + } + } + field: { + name: "features" + number: 50 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "verification" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.ExtensionRangeOptions.VerificationState" + default_value: "UNVERIFIED" + json_name: "verification" + options: { + retention: RETENTION_SOURCE + } + } + nested_type: { + name: "Declaration" + field: { + name: "number" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "number" + } + field: { + name: "full_name" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "fullName" + } + field: { + name: "type" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "type" + } + field: { + name: "reserved" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "reserved" + } + field: { + name: "repeated" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "repeated" + } + reserved_range: { + start: 4 + end: 5 + } + } + enum_type: { + name: "VerificationState" + value: { + name: "DECLARATION" + number: 0 + } + value: { + name: "UNVERIFIED" + number: 1 + } + } + extension_range: { + start: 1000 + end: 536870912 + } + } + message_type: { + name: "FieldDescriptorProto" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "number" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "number" + } + field: { + name: "label" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FieldDescriptorProto.Label" + json_name: "label" + } + field: { + name: "type" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FieldDescriptorProto.Type" + json_name: "type" + } + field: { + name: "type_name" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "typeName" + } + field: { + name: "extendee" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "extendee" + } + field: { + name: "default_value" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "defaultValue" + } + field: { + name: "oneof_index" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "oneofIndex" + } + field: { + name: "json_name" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "jsonName" + } + field: { + name: "options" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldOptions" + json_name: "options" + } + field: { + name: "proto3_optional" + number: 17 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "proto3Optional" + } + enum_type: { + name: "Type" + value: { + name: "TYPE_DOUBLE" + number: 1 + } + value: { + name: "TYPE_FLOAT" + number: 2 + } + value: { + name: "TYPE_INT64" + number: 3 + } + value: { + name: "TYPE_UINT64" + number: 4 + } + value: { + name: "TYPE_INT32" + number: 5 + } + value: { + name: "TYPE_FIXED64" + number: 6 + } + value: { + name: "TYPE_FIXED32" + number: 7 + } + value: { + name: "TYPE_BOOL" + number: 8 + } + value: { + name: "TYPE_STRING" + number: 9 + } + value: { + name: "TYPE_GROUP" + number: 10 + } + value: { + name: "TYPE_MESSAGE" + number: 11 + } + value: { + name: "TYPE_BYTES" + number: 12 + } + value: { + name: "TYPE_UINT32" + number: 13 + } + value: { + name: "TYPE_ENUM" + number: 14 + } + value: { + name: "TYPE_SFIXED32" + number: 15 + } + value: { + name: "TYPE_SFIXED64" + number: 16 + } + value: { + name: "TYPE_SINT32" + number: 17 + } + value: { + name: "TYPE_SINT64" + number: 18 + } + } + enum_type: { + name: "Label" + value: { + name: "LABEL_OPTIONAL" + number: 1 + } + value: { + name: "LABEL_REPEATED" + number: 3 + } + value: { + name: "LABEL_REQUIRED" + number: 2 + } + } + } + message_type: { + name: "OneofDescriptorProto" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "options" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.OneofOptions" + json_name: "options" + } + } + message_type: { + name: "EnumDescriptorProto" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "value" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.EnumValueDescriptorProto" + json_name: "value" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.EnumOptions" + json_name: "options" + } + field: { + name: "reserved_range" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.EnumDescriptorProto.EnumReservedRange" + json_name: "reservedRange" + } + field: { + name: "reserved_name" + number: 5 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "reservedName" + } + field: { + name: "visibility" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.SymbolVisibility" + json_name: "visibility" + } + nested_type: { + name: "EnumReservedRange" + field: { + name: "start" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "start" + } + field: { + name: "end" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "end" + } + } + } + message_type: { + name: "EnumValueDescriptorProto" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "number" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "number" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.EnumValueOptions" + json_name: "options" + } + } + message_type: { + name: "ServiceDescriptorProto" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "method" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.MethodDescriptorProto" + json_name: "method" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.ServiceOptions" + json_name: "options" + } + } + message_type: { + name: "MethodDescriptorProto" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "input_type" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "inputType" + } + field: { + name: "output_type" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "outputType" + } + field: { + name: "options" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.MethodOptions" + json_name: "options" + } + field: { + name: "client_streaming" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "clientStreaming" + } + field: { + name: "server_streaming" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "serverStreaming" + } + } + message_type: { + name: "FileOptions" + field: { + name: "java_package" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "javaPackage" + } + field: { + name: "java_outer_classname" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "javaOuterClassname" + } + field: { + name: "java_multiple_files" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "javaMultipleFiles" + } + field: { + name: "java_generate_equals_and_hash" + number: 20 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "javaGenerateEqualsAndHash" + options: { + deprecated: true + } + } + field: { + name: "java_string_check_utf8" + number: 27 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "javaStringCheckUtf8" + } + field: { + name: "optimize_for" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FileOptions.OptimizeMode" + default_value: "SPEED" + json_name: "optimizeFor" + } + field: { + name: "go_package" + number: 11 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "goPackage" + } + field: { + name: "cc_generic_services" + number: 16 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "ccGenericServices" + } + field: { + name: "java_generic_services" + number: 17 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "javaGenericServices" + } + field: { + name: "py_generic_services" + number: 18 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "pyGenericServices" + } + field: { + name: "deprecated" + number: 23 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "deprecated" + } + field: { + name: "cc_enable_arenas" + number: 31 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "true" + json_name: "ccEnableArenas" + } + field: { + name: "objc_class_prefix" + number: 36 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "objcClassPrefix" + } + field: { + name: "csharp_namespace" + number: 37 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "csharpNamespace" + } + field: { + name: "swift_prefix" + number: 39 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "swiftPrefix" + } + field: { + name: "php_class_prefix" + number: 40 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "phpClassPrefix" + } + field: { + name: "php_namespace" + number: 41 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "phpNamespace" + } + field: { + name: "php_metadata_namespace" + number: 44 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "phpMetadataNamespace" + } + field: { + name: "ruby_package" + number: 45 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "rubyPackage" + } + field: { + name: "features" + number: 50 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + enum_type: { + name: "OptimizeMode" + value: { + name: "SPEED" + number: 1 + } + value: { + name: "CODE_SIZE" + number: 2 + } + value: { + name: "LITE_RUNTIME" + number: 3 + } + } + extension_range: { + start: 1000 + end: 536870912 + } + reserved_range: { + start: 42 + end: 43 + } + reserved_range: { + start: 38 + end: 39 + } + reserved_name: "php_generic_services" + } + message_type: { + name: "MessageOptions" + field: { + name: "message_set_wire_format" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "messageSetWireFormat" + } + field: { + name: "no_standard_descriptor_accessor" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "noStandardDescriptorAccessor" + } + field: { + name: "deprecated" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "deprecated" + } + field: { + name: "map_entry" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "mapEntry" + } + field: { + name: "deprecated_legacy_json_field_conflicts" + number: 11 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "deprecatedLegacyJsonFieldConflicts" + options: { + deprecated: true + } + } + field: { + name: "features" + number: 12 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + extension_range: { + start: 1000 + end: 536870912 + } + reserved_range: { + start: 4 + end: 5 + } + reserved_range: { + start: 5 + end: 6 + } + reserved_range: { + start: 6 + end: 7 + } + reserved_range: { + start: 8 + end: 9 + } + reserved_range: { + start: 9 + end: 10 + } + } + message_type: { + name: "FieldOptions" + field: { + name: "ctype" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FieldOptions.CType" + default_value: "STRING" + json_name: "ctype" + } + field: { + name: "packed" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "packed" + } + field: { + name: "jstype" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FieldOptions.JSType" + default_value: "JS_NORMAL" + json_name: "jstype" + } + field: { + name: "lazy" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "lazy" + } + field: { + name: "unverified_lazy" + number: 15 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "unverifiedLazy" + } + field: { + name: "deprecated" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "deprecated" + } + field: { + name: "weak" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "weak" + } + field: { + name: "debug_redact" + number: 16 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "debugRedact" + } + field: { + name: "retention" + number: 17 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FieldOptions.OptionRetention" + json_name: "retention" + } + field: { + name: "targets" + number: 19 + label: LABEL_REPEATED + type: TYPE_ENUM + type_name: ".google.protobuf.FieldOptions.OptionTargetType" + json_name: "targets" + } + field: { + name: "edition_defaults" + number: 20 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldOptions.EditionDefault" + json_name: "editionDefaults" + } + field: { + name: "features" + number: 21 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "feature_support" + number: 22 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldOptions.FeatureSupport" + json_name: "featureSupport" + } + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + nested_type: { + name: "EditionDefault" + field: { + name: "edition" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.Edition" + json_name: "edition" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + } + nested_type: { + name: "FeatureSupport" + field: { + name: "edition_introduced" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.Edition" + json_name: "editionIntroduced" + } + field: { + name: "edition_deprecated" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.Edition" + json_name: "editionDeprecated" + } + field: { + name: "deprecation_warning" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "deprecationWarning" + } + field: { + name: "edition_removed" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.Edition" + json_name: "editionRemoved" + } + } + enum_type: { + name: "CType" + value: { + name: "STRING" + number: 0 + } + value: { + name: "CORD" + number: 1 + } + value: { + name: "STRING_PIECE" + number: 2 + } + } + enum_type: { + name: "JSType" + value: { + name: "JS_NORMAL" + number: 0 + } + value: { + name: "JS_STRING" + number: 1 + } + value: { + name: "JS_NUMBER" + number: 2 + } + } + enum_type: { + name: "OptionRetention" + value: { + name: "RETENTION_UNKNOWN" + number: 0 + } + value: { + name: "RETENTION_RUNTIME" + number: 1 + } + value: { + name: "RETENTION_SOURCE" + number: 2 + } + } + enum_type: { + name: "OptionTargetType" + value: { + name: "TARGET_TYPE_UNKNOWN" + number: 0 + } + value: { + name: "TARGET_TYPE_FILE" + number: 1 + } + value: { + name: "TARGET_TYPE_EXTENSION_RANGE" + number: 2 + } + value: { + name: "TARGET_TYPE_MESSAGE" + number: 3 + } + value: { + name: "TARGET_TYPE_FIELD" + number: 4 + } + value: { + name: "TARGET_TYPE_ONEOF" + number: 5 + } + value: { + name: "TARGET_TYPE_ENUM" + number: 6 + } + value: { + name: "TARGET_TYPE_ENUM_ENTRY" + number: 7 + } + value: { + name: "TARGET_TYPE_SERVICE" + number: 8 + } + value: { + name: "TARGET_TYPE_METHOD" + number: 9 + } + } + extension_range: { + start: 1000 + end: 536870912 + } + reserved_range: { + start: 4 + end: 5 + } + reserved_range: { + start: 18 + end: 19 + } + } + message_type: { + name: "OneofOptions" + field: { + name: "features" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + extension_range: { + start: 1000 + end: 536870912 + } + } + message_type: { + name: "EnumOptions" + field: { + name: "allow_alias" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "allowAlias" + } + field: { + name: "deprecated" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "deprecated" + } + field: { + name: "deprecated_legacy_json_field_conflicts" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "deprecatedLegacyJsonFieldConflicts" + options: { + deprecated: true + } + } + field: { + name: "features" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + extension_range: { + start: 1000 + end: 536870912 + } + reserved_range: { + start: 5 + end: 6 + } + } + message_type: { + name: "EnumValueOptions" + field: { + name: "deprecated" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "deprecated" + } + field: { + name: "features" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "debug_redact" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "debugRedact" + } + field: { + name: "feature_support" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldOptions.FeatureSupport" + json_name: "featureSupport" + } + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + extension_range: { + start: 1000 + end: 536870912 + } + } + message_type: { + name: "ServiceOptions" + field: { + name: "features" + number: 34 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "deprecated" + number: 33 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "deprecated" + } + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + extension_range: { + start: 1000 + end: 536870912 + } + } + message_type: { + name: "MethodOptions" + field: { + name: "deprecated" + number: 33 + label: LABEL_OPTIONAL + type: TYPE_BOOL + default_value: "false" + json_name: "deprecated" + } + field: { + name: "idempotency_level" + number: 34 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.MethodOptions.IdempotencyLevel" + default_value: "IDEMPOTENCY_UNKNOWN" + json_name: "idempotencyLevel" + } + field: { + name: "features" + number: 35 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "features" + } + field: { + name: "uninterpreted_option" + number: 999 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption" + json_name: "uninterpretedOption" + } + enum_type: { + name: "IdempotencyLevel" + value: { + name: "IDEMPOTENCY_UNKNOWN" + number: 0 + } + value: { + name: "NO_SIDE_EFFECTS" + number: 1 + } + value: { + name: "IDEMPOTENT" + number: 2 + } + } + extension_range: { + start: 1000 + end: 536870912 + } + } + message_type: { + name: "UninterpretedOption" + field: { + name: "name" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.UninterpretedOption.NamePart" + json_name: "name" + } + field: { + name: "identifier_value" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "identifierValue" + } + field: { + name: "positive_int_value" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_UINT64 + json_name: "positiveIntValue" + } + field: { + name: "negative_int_value" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "negativeIntValue" + } + field: { + name: "double_value" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_DOUBLE + json_name: "doubleValue" + } + field: { + name: "string_value" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_BYTES + json_name: "stringValue" + } + field: { + name: "aggregate_value" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "aggregateValue" + } + nested_type: { + name: "NamePart" + field: { + name: "name_part" + number: 1 + label: LABEL_REQUIRED + type: TYPE_STRING + json_name: "namePart" + } + field: { + name: "is_extension" + number: 2 + label: LABEL_REQUIRED + type: TYPE_BOOL + json_name: "isExtension" + } + } + } + message_type: { + name: "FeatureSet" + field: { + name: "field_presence" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FeatureSet.FieldPresence" + json_name: "fieldPresence" + options: { + retention: RETENTION_RUNTIME + targets: TARGET_TYPE_FIELD + targets: TARGET_TYPE_FILE + edition_defaults: { + edition: EDITION_LEGACY + value: "EXPLICIT" + } + edition_defaults: { + edition: EDITION_PROTO3 + value: "IMPLICIT" + } + edition_defaults: { + edition: EDITION_2023 + value: "EXPLICIT" + } + feature_support: { + edition_introduced: EDITION_2023 + } + } + } + field: { + name: "enum_type" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FeatureSet.EnumType" + json_name: "enumType" + options: { + retention: RETENTION_RUNTIME + targets: TARGET_TYPE_ENUM + targets: TARGET_TYPE_FILE + edition_defaults: { + edition: EDITION_LEGACY + value: "CLOSED" + } + edition_defaults: { + edition: EDITION_PROTO3 + value: "OPEN" + } + feature_support: { + edition_introduced: EDITION_2023 + } + } + } + field: { + name: "repeated_field_encoding" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FeatureSet.RepeatedFieldEncoding" + json_name: "repeatedFieldEncoding" + options: { + retention: RETENTION_RUNTIME + targets: TARGET_TYPE_FIELD + targets: TARGET_TYPE_FILE + edition_defaults: { + edition: EDITION_LEGACY + value: "EXPANDED" + } + edition_defaults: { + edition: EDITION_PROTO3 + value: "PACKED" + } + feature_support: { + edition_introduced: EDITION_2023 + } + } + } + field: { + name: "utf8_validation" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FeatureSet.Utf8Validation" + json_name: "utf8Validation" + options: { + retention: RETENTION_RUNTIME + targets: TARGET_TYPE_FIELD + targets: TARGET_TYPE_FILE + edition_defaults: { + edition: EDITION_LEGACY + value: "NONE" + } + edition_defaults: { + edition: EDITION_PROTO3 + value: "VERIFY" + } + feature_support: { + edition_introduced: EDITION_2023 + } + } + } + field: { + name: "message_encoding" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FeatureSet.MessageEncoding" + json_name: "messageEncoding" + options: { + retention: RETENTION_RUNTIME + targets: TARGET_TYPE_FIELD + targets: TARGET_TYPE_FILE + edition_defaults: { + edition: EDITION_LEGACY + value: "LENGTH_PREFIXED" + } + feature_support: { + edition_introduced: EDITION_2023 + } + } + } + field: { + name: "json_format" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FeatureSet.JsonFormat" + json_name: "jsonFormat" + options: { + retention: RETENTION_RUNTIME + targets: TARGET_TYPE_MESSAGE + targets: TARGET_TYPE_ENUM + targets: TARGET_TYPE_FILE + edition_defaults: { + edition: EDITION_LEGACY + value: "LEGACY_BEST_EFFORT" + } + edition_defaults: { + edition: EDITION_PROTO3 + value: "ALLOW" + } + feature_support: { + edition_introduced: EDITION_2023 + } + } + } + field: { + name: "enforce_naming_style" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FeatureSet.EnforceNamingStyle" + json_name: "enforceNamingStyle" + options: { + retention: RETENTION_SOURCE + targets: TARGET_TYPE_FILE + targets: TARGET_TYPE_EXTENSION_RANGE + targets: TARGET_TYPE_MESSAGE + targets: TARGET_TYPE_FIELD + targets: TARGET_TYPE_ONEOF + targets: TARGET_TYPE_ENUM + targets: TARGET_TYPE_ENUM_ENTRY + targets: TARGET_TYPE_SERVICE + targets: TARGET_TYPE_METHOD + edition_defaults: { + edition: EDITION_LEGACY + value: "STYLE_LEGACY" + } + edition_defaults: { + edition: EDITION_2024 + value: "STYLE2024" + } + feature_support: { + edition_introduced: EDITION_2024 + } + } + } + field: { + name: "default_symbol_visibility" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility" + json_name: "defaultSymbolVisibility" + options: { + retention: RETENTION_SOURCE + targets: TARGET_TYPE_FILE + edition_defaults: { + edition: EDITION_LEGACY + value: "EXPORT_ALL" + } + edition_defaults: { + edition: EDITION_2024 + value: "EXPORT_TOP_LEVEL" + } + feature_support: { + edition_introduced: EDITION_2024 + } + } + } + nested_type: { + name: "VisibilityFeature" + enum_type: { + name: "DefaultSymbolVisibility" + value: { + name: "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN" + number: 0 + } + value: { + name: "EXPORT_ALL" + number: 1 + } + value: { + name: "EXPORT_TOP_LEVEL" + number: 2 + } + value: { + name: "LOCAL_ALL" + number: 3 + } + value: { + name: "STRICT" + number: 4 + } + } + reserved_range: { + start: 1 + end: 536870912 + } + } + enum_type: { + name: "FieldPresence" + value: { + name: "FIELD_PRESENCE_UNKNOWN" + number: 0 + } + value: { + name: "EXPLICIT" + number: 1 + } + value: { + name: "IMPLICIT" + number: 2 + } + value: { + name: "LEGACY_REQUIRED" + number: 3 + } + } + enum_type: { + name: "EnumType" + value: { + name: "ENUM_TYPE_UNKNOWN" + number: 0 + } + value: { + name: "OPEN" + number: 1 + } + value: { + name: "CLOSED" + number: 2 + } + } + enum_type: { + name: "RepeatedFieldEncoding" + value: { + name: "REPEATED_FIELD_ENCODING_UNKNOWN" + number: 0 + } + value: { + name: "PACKED" + number: 1 + } + value: { + name: "EXPANDED" + number: 2 + } + } + enum_type: { + name: "Utf8Validation" + value: { + name: "UTF8_VALIDATION_UNKNOWN" + number: 0 + } + value: { + name: "VERIFY" + number: 2 + } + value: { + name: "NONE" + number: 3 + } + reserved_range: { + start: 1 + end: 1 + } + } + enum_type: { + name: "MessageEncoding" + value: { + name: "MESSAGE_ENCODING_UNKNOWN" + number: 0 + } + value: { + name: "LENGTH_PREFIXED" + number: 1 + } + value: { + name: "DELIMITED" + number: 2 + } + } + enum_type: { + name: "JsonFormat" + value: { + name: "JSON_FORMAT_UNKNOWN" + number: 0 + } + value: { + name: "ALLOW" + number: 1 + } + value: { + name: "LEGACY_BEST_EFFORT" + number: 2 + } + } + enum_type: { + name: "EnforceNamingStyle" + value: { + name: "ENFORCE_NAMING_STYLE_UNKNOWN" + number: 0 + } + value: { + name: "STYLE2024" + number: 1 + } + value: { + name: "STYLE_LEGACY" + number: 2 + } + } + extension_range: { + start: 1000 + end: 9995 + options: { + declaration: { + number: 1000 + full_name: ".pb.cpp" + type: ".pb.CppFeatures" + } + declaration: { + number: 1001 + full_name: ".pb.java" + type: ".pb.JavaFeatures" + } + declaration: { + number: 1002 + full_name: ".pb.go" + type: ".pb.GoFeatures" + } + declaration: { + number: 1003 + full_name: ".pb.python" + type: ".pb.PythonFeatures" + } + declaration: { + number: 9990 + full_name: ".pb.proto1" + type: ".pb.Proto1Features" + } + } + } + extension_range: { + start: 9995 + end: 10000 + } + extension_range: { + start: 10000 + end: 10001 + } + reserved_range: { + start: 999 + end: 1000 + } + } + message_type: { + name: "FeatureSetDefaults" + field: { + name: "defaults" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault" + json_name: "defaults" + } + field: { + name: "minimum_edition" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.Edition" + json_name: "minimumEdition" + } + field: { + name: "maximum_edition" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.Edition" + json_name: "maximumEdition" + } + nested_type: { + name: "FeatureSetEditionDefault" + field: { + name: "edition" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.Edition" + json_name: "edition" + } + field: { + name: "overridable_features" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "overridableFeatures" + } + field: { + name: "fixed_features" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FeatureSet" + json_name: "fixedFeatures" + } + reserved_range: { + start: 1 + end: 2 + } + reserved_range: { + start: 2 + end: 3 + } + reserved_name: "features" + } + } + message_type: { + name: "SourceCodeInfo" + field: { + name: "location" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.SourceCodeInfo.Location" + json_name: "location" + } + nested_type: { + name: "Location" + field: { + name: "path" + number: 1 + label: LABEL_REPEATED + type: TYPE_INT32 + json_name: "path" + options: { + packed: true + } + } + field: { + name: "span" + number: 2 + label: LABEL_REPEATED + type: TYPE_INT32 + json_name: "span" + options: { + packed: true + } + } + field: { + name: "leading_comments" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "leadingComments" + } + field: { + name: "trailing_comments" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "trailingComments" + } + field: { + name: "leading_detached_comments" + number: 6 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "leadingDetachedComments" + } + } + extension_range: { + start: 536000000 + end: 536000001 + options: { + declaration: { + number: 536000000 + full_name: ".buf.descriptor.v1.buf_source_code_info_extension" + type: ".buf.descriptor.v1.SourceCodeInfoExtension" + } + } + } + } + message_type: { + name: "GeneratedCodeInfo" + field: { + name: "annotation" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.GeneratedCodeInfo.Annotation" + json_name: "annotation" + } + nested_type: { + name: "Annotation" + field: { + name: "path" + number: 1 + label: LABEL_REPEATED + type: TYPE_INT32 + json_name: "path" + options: { + packed: true + } + } + field: { + name: "source_file" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sourceFile" + } + field: { + name: "begin" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "begin" + } + field: { + name: "end" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "end" + } + field: { + name: "semantic" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".google.protobuf.GeneratedCodeInfo.Annotation.Semantic" + json_name: "semantic" + } + enum_type: { + name: "Semantic" + value: { + name: "NONE" + number: 0 + } + value: { + name: "SET" + number: 1 + } + value: { + name: "ALIAS" + number: 2 + } + } + } + } + enum_type: { + name: "Edition" + value: { + name: "EDITION_UNKNOWN" + number: 0 + } + value: { + name: "EDITION_LEGACY" + number: 900 + } + value: { + name: "EDITION_PROTO2" + number: 998 + } + value: { + name: "EDITION_PROTO3" + number: 999 + } + value: { + name: "EDITION_2023" + number: 1000 + } + value: { + name: "EDITION_2024" + number: 1001 + } + value: { + name: "EDITION_1_TEST_ONLY" + number: 1 + } + value: { + name: "EDITION_2_TEST_ONLY" + number: 2 + } + value: { + name: "EDITION_99997_TEST_ONLY" + number: 99997 + } + value: { + name: "EDITION_99998_TEST_ONLY" + number: 99998 + } + value: { + name: "EDITION_99999_TEST_ONLY" + number: 99999 + } + value: { + name: "EDITION_MAX" + number: 2147483647 + } + } + enum_type: { + name: "SymbolVisibility" + value: { + name: "VISIBILITY_UNSET" + number: 0 + } + value: { + name: "VISIBILITY_LOCAL" + number: 1 + } + value: { + name: "VISIBILITY_EXPORT" + number: 2 + } + } + options: { + java_package: "com.google.protobuf" + java_outer_classname: "DescriptorProtos" + optimize_for: SPEED + go_package: "google.golang.org/protobuf/types/descriptorpb" + cc_enable_arenas: true + objc_class_prefix: "GPB" + csharp_namespace: "Google.Protobuf.Reflection" + } + source_code_info: { + location: { + span: 38 + span: 0 + span: 1416 + span: 1 + } + location: { + path: 12 + span: 38 + span: 0 + span: 18 + leading_detached_comments: " Protocol Buffers - Google's data interchange format\n Copyright 2008 Google Inc. All rights reserved.\n https://developers.google.com/protocol-buffers/\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following disclaimer\n in the documentation and/or other materials provided with the\n distribution.\n * Neither the name of Google Inc. nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" + leading_detached_comments: " Author: kenton@google.com (Kenton Varda)\n Based on original Protocol Buffers design by\n Sanjay Ghemawat, Jeff Dean, and others.\n\n The messages in this file describe the definitions found in .proto files.\n A valid .proto file can be translated directly to a FileDescriptorProto\n without any other information (e.g. without reading its imports).\n" + } + location: { + path: 2 + span: 40 + span: 0 + span: 24 + } + location: { + path: 8 + span: 42 + span: 0 + span: 68 + } + location: { + path: 8 + path: 11 + span: 42 + span: 0 + span: 68 + } + location: { + path: 8 + span: 43 + span: 0 + span: 44 + } + location: { + path: 8 + path: 1 + span: 43 + span: 0 + span: 44 + } + location: { + path: 8 + span: 44 + span: 0 + span: 49 + } + location: { + path: 8 + path: 8 + span: 44 + span: 0 + span: 49 + } + location: { + path: 8 + span: 45 + span: 0 + span: 55 + } + location: { + path: 8 + path: 37 + span: 45 + span: 0 + span: 55 + } + location: { + path: 8 + span: 46 + span: 0 + span: 33 + } + location: { + path: 8 + path: 36 + span: 46 + span: 0 + span: 33 + } + location: { + path: 8 + span: 47 + span: 0 + span: 31 + } + location: { + path: 8 + path: 31 + span: 47 + span: 0 + span: 31 + } + location: { + path: 8 + span: 51 + span: 0 + span: 28 + } + location: { + path: 8 + path: 9 + span: 51 + span: 0 + span: 28 + leading_comments: " descriptor.proto must be optimized for speed because reflection-based\n algorithms don't work during bootstrapping.\n" + } + location: { + path: 4 + path: 0 + span: 55 + span: 0 + span: 64 + span: 1 + leading_comments: " The protocol compiler can output a FileDescriptorSet containing the .proto\n files it parses.\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 55 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 56 + span: 2 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 4 + span: 56 + span: 2 + span: 10 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 6 + span: 56 + span: 11 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 56 + span: 31 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 56 + span: 38 + span: 39 + } + location: { + path: 4 + path: 0 + path: 5 + span: 59 + span: 2 + span: 63 + span: 5 + leading_comments: " Extensions for tooling.\n" + } + location: { + path: 4 + path: 0 + path: 5 + path: 0 + span: 59 + span: 13 + span: 22 + } + location: { + path: 4 + path: 0 + path: 5 + path: 0 + path: 1 + span: 59 + span: 13 + span: 22 + } + location: { + path: 4 + path: 0 + path: 5 + path: 0 + path: 2 + span: 59 + span: 13 + span: 22 + } + location: { + path: 4 + path: 0 + path: 5 + path: 0 + path: 3 + span: 59 + span: 23 + span: 63 + span: 4 + } + location: { + path: 4 + path: 0 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + span: 59 + span: 24 + span: 63 + span: 3 + } + location: { + path: 4 + path: 0 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 1 + span: 60 + span: 4 + span: 21 + } + location: { + path: 4 + path: 0 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 3 + span: 61 + span: 4 + span: 57 + } + location: { + path: 4 + path: 0 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 2 + span: 62 + span: 4 + span: 69 + } + location: { + path: 5 + path: 0 + span: 67 + span: 0 + span: 100 + span: 1 + leading_comments: " The full set of known editions.\n" + } + location: { + path: 5 + path: 0 + path: 1 + span: 67 + span: 5 + span: 12 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + span: 69 + span: 2 + span: 22 + leading_comments: " A placeholder for an unknown edition value.\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 1 + span: 69 + span: 2 + span: 17 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 2 + span: 69 + span: 20 + span: 21 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + span: 73 + span: 2 + span: 23 + leading_comments: " A placeholder edition for specifying default behaviors *before* a feature\n was first introduced. This is effectively an \"infinite past\".\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 1 + span: 73 + span: 2 + span: 16 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 2 + span: 73 + span: 19 + span: 22 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + span: 79 + span: 2 + span: 23 + leading_comments: " Legacy syntax \"editions\". These pre-date editions, but behave much like\n distinct editions. These can't be used to specify the edition of proto\n files, but feature definitions must supply proto2/proto3 defaults for\n backwards compatibility.\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 1 + span: 79 + span: 2 + span: 16 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 2 + span: 79 + span: 19 + span: 22 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + span: 80 + span: 2 + span: 23 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + path: 1 + span: 80 + span: 2 + span: 16 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + path: 2 + span: 80 + span: 19 + span: 22 + } + location: { + path: 5 + path: 0 + path: 2 + path: 4 + span: 85 + span: 2 + span: 22 + leading_comments: " Editions that have been released. The specific values are arbitrary and\n should not be depended on, but they will always be time-ordered for easy\n comparison.\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 4 + path: 1 + span: 85 + span: 2 + span: 14 + } + location: { + path: 5 + path: 0 + path: 2 + path: 4 + path: 2 + span: 85 + span: 17 + span: 21 + } + location: { + path: 5 + path: 0 + path: 2 + path: 5 + span: 86 + span: 2 + span: 22 + } + location: { + path: 5 + path: 0 + path: 2 + path: 5 + path: 1 + span: 86 + span: 2 + span: 14 + } + location: { + path: 5 + path: 0 + path: 2 + path: 5 + path: 2 + span: 86 + span: 17 + span: 21 + } + location: { + path: 5 + path: 0 + path: 2 + path: 6 + span: 90 + span: 2 + span: 26 + leading_comments: " Placeholder editions for testing feature resolution. These should not be\n used or relied on outside of tests.\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 6 + path: 1 + span: 90 + span: 2 + span: 21 + } + location: { + path: 5 + path: 0 + path: 2 + path: 6 + path: 2 + span: 90 + span: 24 + span: 25 + } + location: { + path: 5 + path: 0 + path: 2 + path: 7 + span: 91 + span: 2 + span: 26 + } + location: { + path: 5 + path: 0 + path: 2 + path: 7 + path: 1 + span: 91 + span: 2 + span: 21 + } + location: { + path: 5 + path: 0 + path: 2 + path: 7 + path: 2 + span: 91 + span: 24 + span: 25 + } + location: { + path: 5 + path: 0 + path: 2 + path: 8 + span: 92 + span: 2 + span: 34 + } + location: { + path: 5 + path: 0 + path: 2 + path: 8 + path: 1 + span: 92 + span: 2 + span: 25 + } + location: { + path: 5 + path: 0 + path: 2 + path: 8 + path: 2 + span: 92 + span: 28 + span: 33 + } + location: { + path: 5 + path: 0 + path: 2 + path: 9 + span: 93 + span: 2 + span: 34 + } + location: { + path: 5 + path: 0 + path: 2 + path: 9 + path: 1 + span: 93 + span: 2 + span: 25 + } + location: { + path: 5 + path: 0 + path: 2 + path: 9 + path: 2 + span: 93 + span: 28 + span: 33 + } + location: { + path: 5 + path: 0 + path: 2 + path: 10 + span: 94 + span: 2 + span: 34 + } + location: { + path: 5 + path: 0 + path: 2 + path: 10 + path: 1 + span: 94 + span: 2 + span: 25 + } + location: { + path: 5 + path: 0 + path: 2 + path: 10 + path: 2 + span: 94 + span: 28 + span: 33 + } + location: { + path: 5 + path: 0 + path: 2 + path: 11 + span: 99 + span: 2 + span: 27 + leading_comments: " Placeholder for specifying unbounded edition support. This should only\n ever be used by plugins that can expect to never require any changes to\n support a new edition.\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 11 + path: 1 + span: 99 + span: 2 + span: 13 + } + location: { + path: 5 + path: 0 + path: 2 + path: 11 + path: 2 + span: 99 + span: 16 + span: 26 + } + location: { + path: 4 + path: 1 + span: 103 + span: 0 + span: 147 + span: 1 + leading_comments: " Describes a complete .proto file.\n" + } + location: { + path: 4 + path: 1 + path: 1 + span: 103 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 104 + span: 2 + span: 27 + trailing_comments: " file name, relative to root of source tree\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 4 + span: 104 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 104 + span: 11 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 104 + span: 18 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 104 + span: 25 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 105 + span: 2 + span: 30 + trailing_comments: " e.g. \"foo\", \"foo.bar\", etc.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 4 + span: 105 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 105 + span: 11 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 105 + span: 18 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 105 + span: 28 + span: 29 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + span: 108 + span: 2 + span: 33 + leading_comments: " Names of files imported by this file.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 4 + span: 108 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 5 + span: 108 + span: 11 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 108 + span: 18 + span: 28 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 3 + span: 108 + span: 31 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + span: 110 + span: 2 + span: 40 + leading_comments: " Indexes of the public imported files in the dependency list above.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 4 + span: 110 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 5 + span: 110 + span: 11 + span: 16 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 1 + span: 110 + span: 17 + span: 34 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 3 + span: 110 + span: 37 + span: 39 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + span: 113 + span: 2 + span: 38 + leading_comments: " Indexes of the weak imported files in the dependency list.\n For Google-internal migration only. Do not use.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 4 + span: 113 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 5 + span: 113 + span: 11 + span: 16 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 1 + span: 113 + span: 17 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 3 + span: 113 + span: 35 + span: 37 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + span: 117 + span: 2 + span: 41 + leading_comments: " Names of files imported by this file purely for the purpose of providing\n option extensions. These are excluded from the dependency list above.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 4 + span: 117 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 5 + span: 117 + span: 11 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 1 + span: 117 + span: 18 + span: 35 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 3 + span: 117 + span: 38 + span: 40 + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + span: 120 + span: 2 + span: 44 + leading_comments: " All top-level definitions in this file.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + path: 4 + span: 120 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + path: 6 + span: 120 + span: 11 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + path: 1 + span: 120 + span: 27 + span: 39 + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + path: 3 + span: 120 + span: 42 + span: 43 + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + span: 121 + span: 2 + span: 45 + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + path: 4 + span: 121 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + path: 6 + span: 121 + span: 11 + span: 30 + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + path: 1 + span: 121 + span: 31 + span: 40 + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + path: 3 + span: 121 + span: 43 + span: 44 + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + span: 122 + span: 2 + span: 46 + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + path: 4 + span: 122 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + path: 6 + span: 122 + span: 11 + span: 33 + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + path: 1 + span: 122 + span: 34 + span: 41 + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + path: 3 + span: 122 + span: 44 + span: 45 + } + location: { + path: 4 + path: 1 + path: 2 + path: 9 + span: 123 + span: 2 + span: 46 + } + location: { + path: 4 + path: 1 + path: 2 + path: 9 + path: 4 + span: 123 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 9 + path: 6 + span: 123 + span: 11 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 9 + path: 1 + span: 123 + span: 32 + span: 41 + } + location: { + path: 4 + path: 1 + path: 2 + path: 9 + path: 3 + span: 123 + span: 44 + span: 45 + } + location: { + path: 4 + path: 1 + path: 2 + path: 10 + span: 125 + span: 2 + span: 35 + } + location: { + path: 4 + path: 1 + path: 2 + path: 10 + path: 4 + span: 125 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 10 + path: 6 + span: 125 + span: 11 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 10 + path: 1 + span: 125 + span: 23 + span: 30 + } + location: { + path: 4 + path: 1 + path: 2 + path: 10 + path: 3 + span: 125 + span: 33 + span: 34 + } + location: { + path: 4 + path: 1 + path: 2 + path: 11 + span: 131 + span: 2 + span: 47 + leading_comments: " This field contains optional information about the original source code.\n You may safely remove this entire field without harming runtime\n functionality of the descriptors -- the information is needed only by\n development tools.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 11 + path: 4 + span: 131 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 11 + path: 6 + span: 131 + span: 11 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 11 + path: 1 + span: 131 + span: 26 + span: 42 + } + location: { + path: 4 + path: 1 + path: 2 + path: 11 + path: 3 + span: 131 + span: 45 + span: 46 + } + location: { + path: 4 + path: 1 + path: 2 + path: 12 + span: 140 + span: 2 + span: 30 + leading_comments: " The syntax of the proto file.\n The supported values are \"proto2\", \"proto3\", and \"editions\".\n\n If `edition` is present, this value must be \"editions\".\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 12 + path: 4 + span: 140 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 12 + path: 5 + span: 140 + span: 11 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 12 + path: 1 + span: 140 + span: 18 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 12 + path: 3 + span: 140 + span: 27 + span: 29 + } + location: { + path: 4 + path: 1 + path: 2 + path: 13 + span: 146 + span: 2 + span: 32 + leading_comments: " The edition of the proto file.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 13 + path: 4 + span: 146 + span: 2 + span: 10 + } + location: { + path: 4 + path: 1 + path: 2 + path: 13 + path: 6 + span: 146 + span: 11 + span: 18 + } + location: { + path: 4 + path: 1 + path: 2 + path: 13 + path: 1 + span: 146 + span: 19 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 13 + path: 3 + span: 146 + span: 29 + span: 31 + } + location: { + path: 4 + path: 2 + span: 150 + span: 0 + span: 185 + span: 1 + leading_comments: " Describes a message type.\n" + } + location: { + path: 4 + path: 2 + path: 1 + span: 150 + span: 8 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 151 + span: 2 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 4 + span: 151 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 151 + span: 11 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 151 + span: 18 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 151 + span: 25 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 153 + span: 2 + span: 42 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 4 + span: 153 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 6 + span: 153 + span: 11 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 153 + span: 32 + span: 37 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 153 + span: 40 + span: 41 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 154 + span: 2 + span: 46 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 4 + span: 154 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 6 + span: 154 + span: 11 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 154 + span: 32 + span: 41 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 154 + span: 44 + span: 45 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + span: 156 + span: 2 + span: 43 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 4 + span: 156 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 6 + span: 156 + span: 11 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 1 + span: 156 + span: 27 + span: 38 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 3 + span: 156 + span: 41 + span: 42 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + span: 157 + span: 2 + span: 45 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 4 + span: 157 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 6 + span: 157 + span: 11 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 1 + span: 157 + span: 31 + span: 40 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 3 + span: 157 + span: 43 + span: 44 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + span: 159 + span: 2 + span: 164 + span: 3 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 1 + span: 159 + span: 10 + span: 24 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 0 + span: 160 + span: 4 + span: 29 + trailing_comments: " Inclusive.\n" + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 0 + path: 4 + span: 160 + span: 4 + span: 12 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 0 + path: 5 + span: 160 + span: 13 + span: 18 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 160 + span: 19 + span: 24 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 160 + span: 27 + span: 28 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 1 + span: 161 + span: 4 + span: 27 + trailing_comments: " Exclusive.\n" + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 1 + path: 4 + span: 161 + span: 4 + span: 12 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 1 + path: 5 + span: 161 + span: 13 + span: 18 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 161 + span: 19 + span: 22 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 161 + span: 25 + span: 26 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 2 + span: 163 + span: 4 + span: 47 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 2 + path: 4 + span: 163 + span: 4 + span: 12 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 2 + path: 6 + span: 163 + span: 13 + span: 34 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 2 + path: 1 + span: 163 + span: 35 + span: 42 + } + location: { + path: 4 + path: 2 + path: 3 + path: 0 + path: 2 + path: 2 + path: 3 + span: 163 + span: 45 + span: 46 + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + span: 165 + span: 2 + span: 46 + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + path: 4 + span: 165 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + path: 6 + span: 165 + span: 11 + span: 25 + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + path: 1 + span: 165 + span: 26 + span: 41 + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + path: 3 + span: 165 + span: 44 + span: 45 + } + location: { + path: 4 + path: 2 + path: 2 + path: 6 + span: 167 + span: 2 + span: 47 + } + location: { + path: 4 + path: 2 + path: 2 + path: 6 + path: 4 + span: 167 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 6 + path: 6 + span: 167 + span: 11 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 6 + path: 1 + span: 167 + span: 32 + span: 42 + } + location: { + path: 4 + path: 2 + path: 2 + path: 6 + path: 3 + span: 167 + span: 45 + span: 46 + } + location: { + path: 4 + path: 2 + path: 2 + path: 7 + span: 169 + span: 2 + span: 38 + } + location: { + path: 4 + path: 2 + path: 2 + path: 7 + path: 4 + span: 169 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 7 + path: 6 + span: 169 + span: 11 + span: 25 + } + location: { + path: 4 + path: 2 + path: 2 + path: 7 + path: 1 + span: 169 + span: 26 + span: 33 + } + location: { + path: 4 + path: 2 + path: 2 + path: 7 + path: 3 + span: 169 + span: 36 + span: 37 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + span: 174 + span: 2 + span: 177 + span: 3 + leading_comments: " Range of reserved tag numbers. Reserved tag numbers may not be used by\n fields or extension ranges in the same message. Reserved ranges may\n not overlap.\n" + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 1 + span: 174 + span: 10 + span: 23 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 0 + span: 175 + span: 4 + span: 29 + trailing_comments: " Inclusive.\n" + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 0 + path: 4 + span: 175 + span: 4 + span: 12 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 0 + path: 5 + span: 175 + span: 13 + span: 18 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 0 + path: 1 + span: 175 + span: 19 + span: 24 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 0 + path: 3 + span: 175 + span: 27 + span: 28 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 1 + span: 176 + span: 4 + span: 27 + trailing_comments: " Exclusive.\n" + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 1 + path: 4 + span: 176 + span: 4 + span: 12 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 1 + path: 5 + span: 176 + span: 13 + span: 18 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 1 + path: 1 + span: 176 + span: 19 + span: 22 + } + location: { + path: 4 + path: 2 + path: 3 + path: 1 + path: 2 + path: 1 + path: 3 + span: 176 + span: 25 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 8 + span: 178 + span: 2 + span: 44 + } + location: { + path: 4 + path: 2 + path: 2 + path: 8 + path: 4 + span: 178 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 8 + path: 6 + span: 178 + span: 11 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 8 + path: 1 + span: 178 + span: 25 + span: 39 + } + location: { + path: 4 + path: 2 + path: 2 + path: 8 + path: 3 + span: 178 + span: 42 + span: 43 + } + location: { + path: 4 + path: 2 + path: 2 + path: 9 + span: 181 + span: 2 + span: 37 + leading_comments: " Reserved field names, which may not be used by fields in the same message.\n A given name may only be reserved once.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 9 + path: 4 + span: 181 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 9 + path: 5 + span: 181 + span: 11 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 9 + path: 1 + span: 181 + span: 18 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 9 + path: 3 + span: 181 + span: 34 + span: 36 + } + location: { + path: 4 + path: 2 + path: 2 + path: 10 + span: 184 + span: 2 + span: 44 + leading_comments: " Support for `export` and `local` keywords on enums.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 10 + path: 4 + span: 184 + span: 2 + span: 10 + } + location: { + path: 4 + path: 2 + path: 2 + path: 10 + path: 6 + span: 184 + span: 11 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 10 + path: 1 + span: 184 + span: 28 + span: 38 + } + location: { + path: 4 + path: 2 + path: 2 + path: 10 + path: 3 + span: 184 + span: 41 + span: 43 + } + location: { + path: 4 + path: 3 + span: 187 + span: 0 + span: 239 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 187 + span: 8 + span: 29 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 189 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here. See above.\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 4 + span: 189 + span: 2 + span: 10 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 6 + span: 189 + span: 11 + span: 30 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 189 + span: 31 + span: 51 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 189 + span: 54 + span: 57 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + span: 191 + span: 2 + span: 214 + span: 3 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 1 + span: 191 + span: 10 + span: 21 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 0 + span: 193 + span: 4 + span: 30 + leading_comments: " The extension number declared within the extension range.\n" + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 0 + path: 4 + span: 193 + span: 4 + span: 12 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 0 + path: 5 + span: 193 + span: 13 + span: 18 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 193 + span: 19 + span: 25 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 193 + span: 28 + span: 29 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 1 + span: 197 + span: 4 + span: 34 + leading_comments: " The fully-qualified name of the extension field. There must be a leading\n dot in front of the full name.\n" + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 1 + path: 4 + span: 197 + span: 4 + span: 12 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 1 + path: 5 + span: 197 + span: 13 + span: 19 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 197 + span: 20 + span: 29 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 197 + span: 32 + span: 33 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 2 + span: 202 + span: 4 + span: 29 + leading_comments: " The fully-qualified type name of the extension field. Unlike\n Metadata.type, Declaration.type must have a leading dot for messages\n and enums.\n" + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 2 + path: 4 + span: 202 + span: 4 + span: 12 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 2 + path: 5 + span: 202 + span: 13 + span: 19 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 2 + path: 1 + span: 202 + span: 20 + span: 24 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 2 + path: 3 + span: 202 + span: 27 + span: 28 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 3 + span: 207 + span: 4 + span: 31 + leading_comments: " If true, indicates that the number is reserved in the extension range,\n and any extension field with the number will fail to compile. Set this\n when a declared extension field is deleted.\n" + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 3 + path: 4 + span: 207 + span: 4 + span: 12 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 3 + path: 5 + span: 207 + span: 13 + span: 17 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 3 + path: 1 + span: 207 + span: 18 + span: 26 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 3 + path: 3 + span: 207 + span: 29 + span: 30 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 4 + span: 211 + span: 4 + span: 31 + leading_comments: " If true, indicates that the extension must be defined as repeated.\n Otherwise the extension must be defined as optional.\n" + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 4 + path: 4 + span: 211 + span: 4 + span: 12 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 4 + path: 5 + span: 211 + span: 13 + span: 17 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 4 + path: 1 + span: 211 + span: 18 + span: 26 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 2 + path: 4 + path: 3 + span: 211 + span: 29 + span: 30 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 9 + span: 213 + span: 4 + span: 15 + trailing_comments: " removed is_repeated\n" + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 9 + path: 0 + span: 213 + span: 13 + span: 14 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 9 + path: 0 + path: 1 + span: 213 + span: 13 + span: 14 + } + location: { + path: 4 + path: 3 + path: 3 + path: 0 + path: 9 + path: 0 + path: 2 + span: 213 + span: 13 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 219 + span: 2 + span: 70 + leading_comments: " For external users: DO NOT USE. We are in the process of open sourcing\n extension declaration and executing internal cleanups before it can be\n used externally.\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 4 + span: 219 + span: 2 + span: 10 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 6 + span: 219 + span: 11 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 219 + span: 23 + span: 34 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 219 + span: 37 + span: 38 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 8 + span: 219 + span: 39 + span: 69 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 8 + path: 17 + span: 219 + span: 40 + span: 68 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + span: 222 + span: 2 + span: 36 + leading_comments: " Any features defined in the specific edition.\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 4 + span: 222 + span: 2 + span: 10 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 6 + span: 222 + span: 11 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 1 + span: 222 + span: 22 + span: 30 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 3 + span: 222 + span: 33 + span: 35 + } + location: { + path: 4 + path: 3 + path: 4 + path: 0 + span: 225 + span: 2 + span: 229 + span: 3 + leading_comments: " The verification state of the extension range.\n" + } + location: { + path: 4 + path: 3 + path: 4 + path: 0 + path: 1 + span: 225 + span: 7 + span: 24 + } + location: { + path: 4 + path: 3 + path: 4 + path: 0 + path: 2 + path: 0 + span: 227 + span: 4 + span: 20 + leading_comments: " All the extensions of the range must be declared.\n" + } + location: { + path: 4 + path: 3 + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 227 + span: 4 + span: 15 + } + location: { + path: 4 + path: 3 + path: 4 + path: 0 + path: 2 + path: 0 + path: 2 + span: 227 + span: 18 + span: 19 + } + location: { + path: 4 + path: 3 + path: 4 + path: 0 + path: 2 + path: 1 + span: 228 + span: 4 + span: 19 + } + location: { + path: 4 + path: 3 + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 228 + span: 4 + span: 14 + } + location: { + path: 4 + path: 3 + path: 4 + path: 0 + path: 2 + path: 1 + path: 2 + span: 228 + span: 17 + span: 18 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + span: 234 + span: 2 + span: 235 + span: 59 + leading_comments: " The verification state of the range.\n TODO: flip the default to DECLARATION once all empty ranges\n are marked as UNVERIFIED.\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 4 + span: 234 + span: 2 + span: 10 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 6 + span: 234 + span: 11 + span: 28 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 1 + span: 234 + span: 29 + span: 41 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 3 + span: 234 + span: 44 + span: 45 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 8 + span: 235 + span: 6 + span: 58 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 7 + span: 235 + span: 7 + span: 27 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 8 + path: 17 + span: 235 + span: 29 + span: 57 + } + location: { + path: 4 + path: 3 + path: 5 + span: 238 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message. See above.\n" + } + location: { + path: 4 + path: 3 + path: 5 + path: 0 + span: 238 + span: 13 + span: 24 + } + location: { + path: 4 + path: 3 + path: 5 + path: 0 + path: 1 + span: 238 + span: 13 + span: 17 + } + location: { + path: 4 + path: 3 + path: 5 + path: 0 + path: 2 + span: 238 + span: 21 + span: 24 + } + location: { + path: 4 + path: 4 + span: 242 + span: 0 + span: 346 + span: 1 + leading_comments: " Describes a field within a message.\n" + } + location: { + path: 4 + path: 4 + path: 1 + span: 242 + span: 8 + span: 28 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + span: 243 + span: 2 + span: 275 + span: 3 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 1 + span: 243 + span: 7 + span: 11 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 0 + span: 246 + span: 4 + span: 20 + leading_comments: " 0 is reserved for errors.\n Order is weird for historical reasons.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 246 + span: 4 + span: 15 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 0 + path: 2 + span: 246 + span: 18 + span: 19 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 1 + span: 247 + span: 4 + span: 19 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 247 + span: 4 + span: 14 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 1 + path: 2 + span: 247 + span: 17 + span: 18 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 2 + span: 250 + span: 4 + span: 19 + leading_comments: " Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if\n negative values are likely.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 250 + span: 4 + span: 14 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 2 + path: 2 + span: 250 + span: 17 + span: 18 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 3 + span: 251 + span: 4 + span: 20 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 251 + span: 4 + span: 15 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 3 + path: 2 + span: 251 + span: 18 + span: 19 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 4 + span: 254 + span: 4 + span: 19 + leading_comments: " Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if\n negative values are likely.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 254 + span: 4 + span: 14 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 4 + path: 2 + span: 254 + span: 17 + span: 18 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 5 + span: 255 + span: 4 + span: 21 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 255 + span: 4 + span: 16 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 5 + path: 2 + span: 255 + span: 19 + span: 20 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 6 + span: 256 + span: 4 + span: 21 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 256 + span: 4 + span: 16 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 6 + path: 2 + span: 256 + span: 19 + span: 20 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 7 + span: 257 + span: 4 + span: 18 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 7 + path: 1 + span: 257 + span: 4 + span: 13 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 7 + path: 2 + span: 257 + span: 16 + span: 17 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 8 + span: 258 + span: 4 + span: 20 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 8 + path: 1 + span: 258 + span: 4 + span: 15 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 8 + path: 2 + span: 258 + span: 18 + span: 19 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 9 + span: 264 + span: 4 + span: 20 + leading_comments: " Tag-delimited aggregate.\n Group type is deprecated and not supported after google.protobuf. However, Proto3\n implementations should still be able to parse the group wire format and\n treat group fields as unknown fields. In Editions, the group wire format\n can be enabled via the `message_encoding` feature.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 9 + path: 1 + span: 264 + span: 4 + span: 14 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 9 + path: 2 + span: 264 + span: 17 + span: 19 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 10 + span: 265 + span: 4 + span: 22 + trailing_comments: " Length-delimited aggregate.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 10 + path: 1 + span: 265 + span: 4 + span: 16 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 10 + path: 2 + span: 265 + span: 19 + span: 21 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 11 + span: 268 + span: 4 + span: 20 + leading_comments: " New in version 2.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 11 + path: 1 + span: 268 + span: 4 + span: 14 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 11 + path: 2 + span: 268 + span: 17 + span: 19 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 12 + span: 269 + span: 4 + span: 21 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 12 + path: 1 + span: 269 + span: 4 + span: 15 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 12 + path: 2 + span: 269 + span: 18 + span: 20 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 13 + span: 270 + span: 4 + span: 19 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 13 + path: 1 + span: 270 + span: 4 + span: 13 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 13 + path: 2 + span: 270 + span: 16 + span: 18 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 14 + span: 271 + span: 4 + span: 23 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 14 + path: 1 + span: 271 + span: 4 + span: 17 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 14 + path: 2 + span: 271 + span: 20 + span: 22 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 15 + span: 272 + span: 4 + span: 23 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 15 + path: 1 + span: 272 + span: 4 + span: 17 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 15 + path: 2 + span: 272 + span: 20 + span: 22 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 16 + span: 273 + span: 4 + span: 21 + trailing_comments: " Uses ZigZag encoding.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 16 + path: 1 + span: 273 + span: 4 + span: 15 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 16 + path: 2 + span: 273 + span: 18 + span: 20 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 17 + span: 274 + span: 4 + span: 21 + trailing_comments: " Uses ZigZag encoding.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 17 + path: 1 + span: 274 + span: 4 + span: 15 + } + location: { + path: 4 + path: 4 + path: 4 + path: 0 + path: 2 + path: 17 + path: 2 + span: 274 + span: 18 + span: 20 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + span: 277 + span: 2 + span: 285 + span: 3 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 1 + span: 277 + span: 7 + span: 12 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 0 + span: 279 + span: 4 + span: 23 + leading_comments: " 0 is reserved for errors\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 279 + span: 4 + span: 18 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 0 + path: 2 + span: 279 + span: 21 + span: 22 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 1 + span: 280 + span: 4 + span: 23 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 280 + span: 4 + span: 18 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 1 + path: 2 + span: 280 + span: 21 + span: 22 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 2 + span: 284 + span: 4 + span: 23 + leading_comments: " The required label is only allowed in google.protobuf. In proto3 and Editions\n it's explicitly prohibited. In Editions, the `field_presence` feature\n can be used to get this behavior.\n" + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 284 + span: 4 + span: 18 + } + location: { + path: 4 + path: 4 + path: 4 + path: 1 + path: 2 + path: 2 + path: 2 + span: 284 + span: 21 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 287 + span: 2 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 4 + span: 287 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 287 + span: 11 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 287 + span: 18 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 287 + span: 25 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + span: 288 + span: 2 + span: 28 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 4 + span: 288 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 5 + span: 288 + span: 11 + span: 16 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 1 + span: 288 + span: 17 + span: 23 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 3 + span: 288 + span: 26 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + span: 289 + span: 2 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 4 + span: 289 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 6 + span: 289 + span: 11 + span: 16 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 1 + span: 289 + span: 17 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 3 + span: 289 + span: 25 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + span: 293 + span: 2 + span: 25 + leading_comments: " If type_name is set, this need not be set. If both this and type_name\n are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.\n" + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 4 + span: 293 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 6 + span: 293 + span: 11 + span: 15 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 1 + span: 293 + span: 16 + span: 20 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 3 + span: 293 + span: 23 + span: 24 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + span: 300 + span: 2 + span: 32 + leading_comments: " For message and enum types, this is the name of the type. If the name\n starts with a '.', it is fully-qualified. Otherwise, C++-like scoping\n rules are used to find the type (i.e. first the nested types within this\n message are searched, then within the parent, on up to the root\n namespace).\n" + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 4 + span: 300 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 5 + span: 300 + span: 11 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 1 + span: 300 + span: 18 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 3 + span: 300 + span: 30 + span: 31 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + span: 304 + span: 2 + span: 31 + leading_comments: " For extensions, this is the name of the type being extended. It is\n resolved in the same manner as type_name.\n" + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 4 + span: 304 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 5 + span: 304 + span: 11 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 1 + span: 304 + span: 18 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 3 + span: 304 + span: 29 + span: 30 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + span: 310 + span: 2 + span: 36 + leading_comments: " For numeric types, contains the original text representation of the value.\n For booleans, \"true\" or \"false\".\n For strings, contains the default text contents (not escaped in any way).\n For bytes, contains the C escaped value. All bytes >= 128 are escaped.\n" + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 4 + span: 310 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 5 + span: 310 + span: 11 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 1 + span: 310 + span: 18 + span: 31 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 3 + span: 310 + span: 34 + span: 35 + } + location: { + path: 4 + path: 4 + path: 2 + path: 7 + span: 314 + span: 2 + span: 33 + leading_comments: " If set, gives the index of a oneof in the containing type's oneof_decl\n list. This field is a member of that oneof.\n" + } + location: { + path: 4 + path: 4 + path: 2 + path: 7 + path: 4 + span: 314 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 7 + path: 5 + span: 314 + span: 11 + span: 16 + } + location: { + path: 4 + path: 4 + path: 2 + path: 7 + path: 1 + span: 314 + span: 17 + span: 28 + } + location: { + path: 4 + path: 4 + path: 2 + path: 7 + path: 3 + span: 314 + span: 31 + span: 32 + } + location: { + path: 4 + path: 4 + path: 2 + path: 8 + span: 320 + span: 2 + span: 33 + leading_comments: " JSON name of this field. The value is set by protocol compiler. If the\n user has set a \"json_name\" option on this field, that option's value\n will be used. Otherwise, it's deduced from the field's name by converting\n it to camelCase.\n" + } + location: { + path: 4 + path: 4 + path: 2 + path: 8 + path: 4 + span: 320 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 8 + path: 5 + span: 320 + span: 11 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 8 + path: 1 + span: 320 + span: 18 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 8 + path: 3 + span: 320 + span: 30 + span: 32 + } + location: { + path: 4 + path: 4 + path: 2 + path: 9 + span: 322 + span: 2 + span: 36 + } + location: { + path: 4 + path: 4 + path: 2 + path: 9 + path: 4 + span: 322 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 9 + path: 6 + span: 322 + span: 11 + span: 23 + } + location: { + path: 4 + path: 4 + path: 2 + path: 9 + path: 1 + span: 322 + span: 24 + span: 31 + } + location: { + path: 4 + path: 4 + path: 2 + path: 9 + path: 3 + span: 322 + span: 34 + span: 35 + } + location: { + path: 4 + path: 4 + path: 2 + path: 10 + span: 345 + span: 2 + span: 37 + leading_comments: " If true, this is a proto3 \"optional\". When a proto3 field is optional, it\n tracks presence regardless of field type.\n\n When proto3_optional is true, this field must belong to a oneof to signal\n to old proto3 clients that presence is tracked for this field. This oneof\n is known as a \"synthetic\" oneof, and this field must be its sole member\n (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs\n exist in the descriptor only, and do not generate any API. Synthetic oneofs\n must be ordered after all \"real\" oneofs.\n\n For message fields, proto3_optional doesn't create any semantic change,\n since non-repeated message fields always track presence. However it still\n indicates the semantic detail of whether the user wrote \"optional\" or not.\n This can be useful for round-tripping the .proto file. For consistency we\n give message fields a synthetic oneof also, even though it is not required\n to track presence. This is especially important because the parser can't\n tell if a field is a message or an enum, so it must always create a\n synthetic oneof.\n\n Proto2 optional fields do not set this flag, because they already indicate\n optional with `LABEL_OPTIONAL`.\n" + } + location: { + path: 4 + path: 4 + path: 2 + path: 10 + path: 4 + span: 345 + span: 2 + span: 10 + } + location: { + path: 4 + path: 4 + path: 2 + path: 10 + path: 5 + span: 345 + span: 11 + span: 15 + } + location: { + path: 4 + path: 4 + path: 2 + path: 10 + path: 1 + span: 345 + span: 16 + span: 31 + } + location: { + path: 4 + path: 4 + path: 2 + path: 10 + path: 3 + span: 345 + span: 34 + span: 36 + } + location: { + path: 4 + path: 5 + span: 349 + span: 0 + span: 352 + span: 1 + leading_comments: " Describes a oneof.\n" + } + location: { + path: 4 + path: 5 + path: 1 + span: 349 + span: 8 + span: 28 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 350 + span: 2 + span: 27 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 4 + span: 350 + span: 2 + span: 10 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 5 + span: 350 + span: 11 + span: 17 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 350 + span: 18 + span: 22 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 350 + span: 25 + span: 26 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + span: 351 + span: 2 + span: 36 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 4 + span: 351 + span: 2 + span: 10 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 6 + span: 351 + span: 11 + span: 23 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 1 + span: 351 + span: 24 + span: 31 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 3 + span: 351 + span: 34 + span: 35 + } + location: { + path: 4 + path: 6 + span: 355 + span: 0 + span: 384 + span: 1 + leading_comments: " Describes an enum type.\n" + } + location: { + path: 4 + path: 6 + path: 1 + span: 355 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 356 + span: 2 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 4 + span: 356 + span: 2 + span: 10 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 356 + span: 11 + span: 17 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 356 + span: 18 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 356 + span: 25 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 358 + span: 2 + span: 46 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 4 + span: 358 + span: 2 + span: 10 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 6 + span: 358 + span: 11 + span: 35 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 358 + span: 36 + span: 41 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 358 + span: 44 + span: 45 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + span: 360 + span: 2 + span: 35 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 4 + span: 360 + span: 2 + span: 10 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 6 + span: 360 + span: 11 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 1 + span: 360 + span: 23 + span: 30 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 3 + span: 360 + span: 33 + span: 34 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + span: 368 + span: 2 + span: 371 + span: 3 + leading_comments: " Range of reserved numeric values. Reserved values may not be used by\n entries in the same enum. Reserved ranges may not overlap.\n\n Note that this is distinct from DescriptorProto.ReservedRange in that it\n is inclusive such that it can appropriately represent the entire int32\n domain.\n" + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 1 + span: 368 + span: 10 + span: 27 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 0 + span: 369 + span: 4 + span: 29 + trailing_comments: " Inclusive.\n" + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 0 + path: 4 + span: 369 + span: 4 + span: 12 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 0 + path: 5 + span: 369 + span: 13 + span: 18 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 369 + span: 19 + span: 24 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 369 + span: 27 + span: 28 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 1 + span: 370 + span: 4 + span: 27 + trailing_comments: " Inclusive.\n" + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 1 + path: 4 + span: 370 + span: 4 + span: 12 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 1 + path: 5 + span: 370 + span: 13 + span: 18 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 370 + span: 19 + span: 22 + } + location: { + path: 4 + path: 6 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 370 + span: 25 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + span: 376 + span: 2 + span: 48 + leading_comments: " Range of reserved numeric values. Reserved numeric values may not be used\n by enum values in the same enum declaration. Reserved ranges may not\n overlap.\n" + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 4 + span: 376 + span: 2 + span: 10 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 6 + span: 376 + span: 11 + span: 28 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 1 + span: 376 + span: 29 + span: 43 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 3 + span: 376 + span: 46 + span: 47 + } + location: { + path: 4 + path: 6 + path: 2 + path: 4 + span: 380 + span: 2 + span: 36 + leading_comments: " Reserved enum value names, which may not be reused. A given name may only\n be reserved once.\n" + } + location: { + path: 4 + path: 6 + path: 2 + path: 4 + path: 4 + span: 380 + span: 2 + span: 10 + } + location: { + path: 4 + path: 6 + path: 2 + path: 4 + path: 5 + span: 380 + span: 11 + span: 17 + } + location: { + path: 4 + path: 6 + path: 2 + path: 4 + path: 1 + span: 380 + span: 18 + span: 31 + } + location: { + path: 4 + path: 6 + path: 2 + path: 4 + path: 3 + span: 380 + span: 34 + span: 35 + } + location: { + path: 4 + path: 6 + path: 2 + path: 5 + span: 383 + span: 2 + span: 43 + leading_comments: " Support for `export` and `local` keywords on enums.\n" + } + location: { + path: 4 + path: 6 + path: 2 + path: 5 + path: 4 + span: 383 + span: 2 + span: 10 + } + location: { + path: 4 + path: 6 + path: 2 + path: 5 + path: 6 + span: 383 + span: 11 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 5 + path: 1 + span: 383 + span: 28 + span: 38 + } + location: { + path: 4 + path: 6 + path: 2 + path: 5 + path: 3 + span: 383 + span: 41 + span: 42 + } + location: { + path: 4 + path: 7 + span: 387 + span: 0 + span: 392 + span: 1 + leading_comments: " Describes a value within an enum.\n" + } + location: { + path: 4 + path: 7 + path: 1 + span: 387 + span: 8 + span: 32 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 388 + span: 2 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 4 + span: 388 + span: 2 + span: 10 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 388 + span: 11 + span: 17 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 388 + span: 18 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 388 + span: 25 + span: 26 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 389 + span: 2 + span: 28 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 4 + span: 389 + span: 2 + span: 10 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 5 + span: 389 + span: 11 + span: 16 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 389 + span: 17 + span: 23 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 389 + span: 26 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + span: 391 + span: 2 + span: 40 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 4 + span: 391 + span: 2 + span: 10 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 6 + span: 391 + span: 11 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 1 + span: 391 + span: 28 + span: 35 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 3 + span: 391 + span: 38 + span: 39 + } + location: { + path: 4 + path: 8 + span: 395 + span: 0 + span: 400 + span: 1 + leading_comments: " Describes a service.\n" + } + location: { + path: 4 + path: 8 + path: 1 + span: 395 + span: 8 + span: 30 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 396 + span: 2 + span: 27 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 4 + span: 396 + span: 2 + span: 10 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 396 + span: 11 + span: 17 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 396 + span: 18 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 396 + span: 25 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + span: 397 + span: 2 + span: 44 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 4 + span: 397 + span: 2 + span: 10 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 6 + span: 397 + span: 11 + span: 32 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 1 + span: 397 + span: 33 + span: 39 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 3 + span: 397 + span: 42 + span: 43 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + span: 399 + span: 2 + span: 38 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 4 + span: 399 + span: 2 + span: 10 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 6 + span: 399 + span: 11 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 1 + span: 399 + span: 26 + span: 33 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 3 + span: 399 + span: 36 + span: 37 + } + location: { + path: 4 + path: 9 + span: 403 + span: 0 + span: 417 + span: 1 + leading_comments: " Describes a method of a service.\n" + } + location: { + path: 4 + path: 9 + path: 1 + span: 403 + span: 8 + span: 29 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 404 + span: 2 + span: 27 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 4 + span: 404 + span: 2 + span: 10 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 404 + span: 11 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 404 + span: 18 + span: 22 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 404 + span: 25 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + span: 408 + span: 2 + span: 33 + leading_comments: " Input and output type names. These are resolved in the same way as\n FieldDescriptorProto.type_name, but must refer to a message type.\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 4 + span: 408 + span: 2 + span: 10 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 5 + span: 408 + span: 11 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 1 + span: 408 + span: 18 + span: 28 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 3 + span: 408 + span: 31 + span: 32 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + span: 409 + span: 2 + span: 34 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 4 + span: 409 + span: 2 + span: 10 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 5 + span: 409 + span: 11 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 1 + span: 409 + span: 18 + span: 29 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 3 + span: 409 + span: 32 + span: 33 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + span: 411 + span: 2 + span: 37 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 4 + span: 411 + span: 2 + span: 10 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 6 + span: 411 + span: 11 + span: 24 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 1 + span: 411 + span: 25 + span: 32 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 3 + span: 411 + span: 35 + span: 36 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + span: 414 + span: 2 + span: 55 + leading_comments: " Identifies if client streams multiple client messages\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 4 + span: 414 + span: 2 + span: 10 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 5 + span: 414 + span: 11 + span: 15 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 1 + span: 414 + span: 16 + span: 32 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 3 + span: 414 + span: 35 + span: 36 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 8 + span: 414 + span: 37 + span: 54 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 7 + span: 414 + span: 38 + span: 53 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + span: 416 + span: 2 + span: 55 + leading_comments: " Identifies if server streams multiple server messages\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 4 + span: 416 + span: 2 + span: 10 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 5 + span: 416 + span: 11 + span: 15 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 1 + span: 416 + span: 16 + span: 32 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 3 + span: 416 + span: 35 + span: 36 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 8 + span: 416 + span: 37 + span: 54 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 7 + span: 416 + span: 38 + span: 53 + } + location: { + path: 4 + path: 10 + span: 451 + span: 0 + span: 578 + span: 1 + leading_detached_comments: " ===================================================================\n Options\n" + leading_detached_comments: " Each of the definitions above may have \"options\" attached. These are\n just annotations which may cause code to be generated slightly differently\n or may contain hints for code that manipulates protocol messages.\n\n Clients may define custom options as extensions of the *Options messages.\n These extensions may not yet be known at parsing time, so the parser cannot\n store the values in them. Instead it stores them in a field in the *Options\n message called uninterpreted_option. This field must have the same name\n across all *Options messages. We then use this field to populate the\n extensions when we build a descriptor, at which point all protos have been\n parsed and so all extensions are known.\n\n Extension numbers for custom options may be chosen as follows:\n * For options which will only be used within a single application or\n organization, or for experimental options, use field numbers 50000\n through 99999. It is up to you to ensure that you do not use the\n same number for multiple options.\n * For options which will be published and used publicly by multiple\n independent entities, e-mail protobuf-global-extension-registry@google.com\n to reserve extension numbers. Simply provide your project name (e.g.\n Objective-C plugin) and your project website (if available) -- there's no\n need to explain how you intend to use them. Usually you only need one\n extension number. You can declare multiple options with only one extension\n number by putting them in a sub-message. See the Custom Options section of\n the docs for examples:\n https://developers.google.com/protocol-buffers/docs/proto#options\n If this turns out to be popular, a web service will be set up\n to automatically assign option numbers.\n" + } + location: { + path: 4 + path: 10 + path: 1 + span: 451 + span: 8 + span: 19 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 457 + span: 2 + span: 35 + leading_comments: " Sets the Java package where classes generated from this .proto will be\n placed. By default, the proto package is used, but this is often\n inappropriate because proto packages do not normally start with backwards\n domain names.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 4 + span: 457 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 5 + span: 457 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 457 + span: 18 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 457 + span: 33 + span: 34 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + span: 464 + span: 2 + span: 43 + leading_comments: " Controls the name of the wrapper Java class generated for the .proto file.\n That class will always contain the .proto file's getDescriptor() method as\n well as any top-level extensions defined in the .proto file.\n If java_multiple_files is disabled, then all the other classes from the\n .proto file will be nested inside the single wrapper outer class.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 4 + span: 464 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 5 + span: 464 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 1 + span: 464 + span: 18 + span: 38 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 3 + span: 464 + span: 41 + span: 42 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + span: 472 + span: 2 + span: 59 + leading_comments: " If enabled, then the Java code generator will generate a separate .java\n file for each top-level message, enum, and service defined in the .proto\n file. Thus, these types will *not* be nested inside the wrapper class\n named by java_outer_classname. However, the wrapper class will still be\n generated to contain the file's getDescriptor() method as well as any\n top-level extensions defined in the file.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 4 + span: 472 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 5 + span: 472 + span: 11 + span: 15 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 1 + span: 472 + span: 16 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 3 + span: 472 + span: 38 + span: 40 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 8 + span: 472 + span: 41 + span: 58 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 7 + span: 472 + span: 42 + span: 57 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + span: 475 + span: 2 + span: 69 + leading_comments: " This option does nothing.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 4 + span: 475 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 5 + span: 475 + span: 11 + span: 15 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 1 + span: 475 + span: 16 + span: 45 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 3 + span: 475 + span: 48 + span: 50 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 8 + span: 475 + span: 51 + span: 68 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 8 + path: 3 + span: 475 + span: 52 + span: 67 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + span: 487 + span: 2 + span: 62 + leading_comments: " A proto2 file can set this to true to opt in to UTF-8 checking for Java,\n which will throw an exception if invalid UTF-8 is parsed from the wire or\n assigned to a string field.\n\n TODO: clarify exactly what kinds of field types this option\n applies to, and update these docs accordingly.\n\n Proto3 files already perform these checks. Setting the option explicitly to\n false has no effect: it cannot be used to opt proto3 files out of UTF-8\n checks.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 4 + span: 487 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 5 + span: 487 + span: 11 + span: 15 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 1 + span: 487 + span: 16 + span: 38 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 3 + span: 487 + span: 41 + span: 43 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 8 + span: 487 + span: 44 + span: 61 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 7 + span: 487 + span: 45 + span: 60 + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + span: 490 + span: 2 + span: 495 + span: 3 + leading_comments: " Generated classes can be optimized for speed or code size.\n" + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 1 + span: 490 + span: 7 + span: 19 + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 0 + span: 491 + span: 4 + span: 14 + trailing_comments: " Generate complete code for parsing, serialization,\n" + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 491 + span: 4 + span: 9 + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 0 + path: 2 + span: 491 + span: 12 + span: 13 + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 1 + span: 493 + span: 4 + span: 18 + leading_comments: " etc.\n" + trailing_comments: " Use ReflectionOps to implement these methods.\n" + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 493 + span: 4 + span: 13 + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 1 + path: 2 + span: 493 + span: 16 + span: 17 + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 2 + span: 494 + span: 4 + span: 21 + trailing_comments: " Generate code using MessageLite and the lite runtime.\n" + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 494 + span: 4 + span: 16 + } + location: { + path: 4 + path: 10 + path: 4 + path: 0 + path: 2 + path: 2 + path: 2 + span: 494 + span: 19 + span: 20 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + span: 496 + span: 2 + span: 59 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 4 + span: 496 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 6 + span: 496 + span: 11 + span: 23 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 1 + span: 496 + span: 24 + span: 36 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 3 + span: 496 + span: 39 + span: 40 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 8 + span: 496 + span: 41 + span: 58 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 7 + span: 496 + span: 42 + span: 57 + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + span: 503 + span: 2 + span: 34 + leading_comments: " Sets the Go package where structs generated from this .proto will be\n placed. If omitted, the Go package will be derived from the following:\n - The basename of the package import path, if provided.\n - Otherwise, the package statement in the .proto file, if present.\n - Otherwise, the basename of the .proto file, without extension.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + path: 4 + span: 503 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + path: 5 + span: 503 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + path: 1 + span: 503 + span: 18 + span: 28 + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + path: 3 + span: 503 + span: 31 + span: 33 + } + location: { + path: 4 + path: 10 + path: 2 + path: 7 + span: 515 + span: 2 + span: 59 + leading_comments: " Should generic services be generated in each language? \"Generic\" services\n are not specific to any particular RPC system. They are generated by the\n main code generators in each language (without additional plugins).\n Generic services were the only kind of service generation supported by\n early versions of google.protobuf.\n\n Generic services are now considered deprecated in favor of using plugins\n that generate code specific to your particular RPC system. Therefore,\n these default to false. Old code which depends on generic services should\n explicitly set them to true.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 7 + path: 4 + span: 515 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 7 + path: 5 + span: 515 + span: 11 + span: 15 + } + location: { + path: 4 + path: 10 + path: 2 + path: 7 + path: 1 + span: 515 + span: 16 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 7 + path: 3 + span: 515 + span: 38 + span: 40 + } + location: { + path: 4 + path: 10 + path: 2 + path: 7 + path: 8 + span: 515 + span: 41 + span: 58 + } + location: { + path: 4 + path: 10 + path: 2 + path: 7 + path: 7 + span: 515 + span: 42 + span: 57 + } + location: { + path: 4 + path: 10 + path: 2 + path: 8 + span: 516 + span: 2 + span: 61 + } + location: { + path: 4 + path: 10 + path: 2 + path: 8 + path: 4 + span: 516 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 8 + path: 5 + span: 516 + span: 11 + span: 15 + } + location: { + path: 4 + path: 10 + path: 2 + path: 8 + path: 1 + span: 516 + span: 16 + span: 37 + } + location: { + path: 4 + path: 10 + path: 2 + path: 8 + path: 3 + span: 516 + span: 40 + span: 42 + } + location: { + path: 4 + path: 10 + path: 2 + path: 8 + path: 8 + span: 516 + span: 43 + span: 60 + } + location: { + path: 4 + path: 10 + path: 2 + path: 8 + path: 7 + span: 516 + span: 44 + span: 59 + } + location: { + path: 4 + path: 10 + path: 2 + path: 9 + span: 517 + span: 2 + span: 59 + } + location: { + path: 4 + path: 10 + path: 2 + path: 9 + path: 4 + span: 517 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 9 + path: 5 + span: 517 + span: 11 + span: 15 + } + location: { + path: 4 + path: 10 + path: 2 + path: 9 + path: 1 + span: 517 + span: 16 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 9 + path: 3 + span: 517 + span: 38 + span: 40 + } + location: { + path: 4 + path: 10 + path: 2 + path: 9 + path: 8 + span: 517 + span: 41 + span: 58 + } + location: { + path: 4 + path: 10 + path: 2 + path: 9 + path: 7 + span: 517 + span: 42 + span: 57 + } + location: { + path: 4 + path: 10 + path: 9 + span: 518 + span: 2 + span: 14 + trailing_comments: " removed php_generic_services\n" + } + location: { + path: 4 + path: 10 + path: 9 + path: 0 + span: 518 + span: 11 + span: 13 + } + location: { + path: 4 + path: 10 + path: 9 + path: 0 + path: 1 + span: 518 + span: 11 + span: 13 + } + location: { + path: 4 + path: 10 + path: 9 + path: 0 + path: 2 + span: 518 + span: 11 + span: 13 + } + location: { + path: 4 + path: 10 + path: 10 + span: 519 + span: 2 + span: 34 + } + location: { + path: 4 + path: 10 + path: 10 + path: 0 + span: 519 + span: 11 + span: 33 + } + location: { + path: 4 + path: 10 + path: 2 + path: 10 + span: 525 + span: 2 + span: 50 + leading_comments: " Is this file deprecated?\n Depending on the target platform, this can emit Deprecated annotations\n for everything in the file, or it will be completely ignored; in the very\n least, this is a formalization for deprecating files.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 10 + path: 4 + span: 525 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 10 + path: 5 + span: 525 + span: 11 + span: 15 + } + location: { + path: 4 + path: 10 + path: 2 + path: 10 + path: 1 + span: 525 + span: 16 + span: 26 + } + location: { + path: 4 + path: 10 + path: 2 + path: 10 + path: 3 + span: 525 + span: 29 + span: 31 + } + location: { + path: 4 + path: 10 + path: 2 + path: 10 + path: 8 + span: 525 + span: 32 + span: 49 + } + location: { + path: 4 + path: 10 + path: 2 + path: 10 + path: 7 + span: 525 + span: 33 + span: 48 + } + location: { + path: 4 + path: 10 + path: 2 + path: 11 + span: 529 + span: 2 + span: 55 + leading_comments: " Enables the use of arenas for the proto messages in this file. This applies\n only to generated classes for C++.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 11 + path: 4 + span: 529 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 11 + path: 5 + span: 529 + span: 11 + span: 15 + } + location: { + path: 4 + path: 10 + path: 2 + path: 11 + path: 1 + span: 529 + span: 16 + span: 32 + } + location: { + path: 4 + path: 10 + path: 2 + path: 11 + path: 3 + span: 529 + span: 35 + span: 37 + } + location: { + path: 4 + path: 10 + path: 2 + path: 11 + path: 8 + span: 529 + span: 38 + span: 54 + } + location: { + path: 4 + path: 10 + path: 2 + path: 11 + path: 7 + span: 529 + span: 39 + span: 53 + } + location: { + path: 4 + path: 10 + path: 2 + path: 12 + span: 533 + span: 2 + span: 41 + leading_comments: " Sets the objective c class prefix which is prepended to all objective c\n generated classes from this .proto. There is no default.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 12 + path: 4 + span: 533 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 12 + path: 5 + span: 533 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 12 + path: 1 + span: 533 + span: 18 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 12 + path: 3 + span: 533 + span: 38 + span: 40 + } + location: { + path: 4 + path: 10 + path: 2 + path: 13 + span: 536 + span: 2 + span: 40 + leading_comments: " Namespace for generated classes; defaults to the package.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 13 + path: 4 + span: 536 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 13 + path: 5 + span: 536 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 13 + path: 1 + span: 536 + span: 18 + span: 34 + } + location: { + path: 4 + path: 10 + path: 2 + path: 13 + path: 3 + span: 536 + span: 37 + span: 39 + } + location: { + path: 4 + path: 10 + path: 2 + path: 14 + span: 542 + span: 2 + span: 36 + leading_comments: " By default Swift generators will take the proto package and CamelCase it\n replacing '.' with underscore and use that to prefix the types/symbols\n defined. When this options is provided, they will use this value instead\n to prefix the types/symbols defined.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 14 + path: 4 + span: 542 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 14 + path: 5 + span: 542 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 14 + path: 1 + span: 542 + span: 18 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 14 + path: 3 + span: 542 + span: 33 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 15 + span: 546 + span: 2 + span: 40 + leading_comments: " Sets the php class prefix which is prepended to all php generated classes\n from this .proto. Default is empty.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 15 + path: 4 + span: 546 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 15 + path: 5 + span: 546 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 15 + path: 1 + span: 546 + span: 18 + span: 34 + } + location: { + path: 4 + path: 10 + path: 2 + path: 15 + path: 3 + span: 546 + span: 37 + span: 39 + } + location: { + path: 4 + path: 10 + path: 2 + path: 16 + span: 551 + span: 2 + span: 37 + leading_comments: " Use this option to change the namespace of php generated classes. Default\n is empty. When this option is empty, the package name will be used for\n determining the namespace.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 16 + path: 4 + span: 551 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 16 + path: 5 + span: 551 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 16 + path: 1 + span: 551 + span: 18 + span: 31 + } + location: { + path: 4 + path: 10 + path: 2 + path: 16 + path: 3 + span: 551 + span: 34 + span: 36 + } + location: { + path: 4 + path: 10 + path: 2 + path: 17 + span: 556 + span: 2 + span: 46 + leading_comments: " Use this option to change the namespace of php generated metadata classes.\n Default is empty. When this option is empty, the proto file name will be\n used for determining the namespace.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 17 + path: 4 + span: 556 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 17 + path: 5 + span: 556 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 17 + path: 1 + span: 556 + span: 18 + span: 40 + } + location: { + path: 4 + path: 10 + path: 2 + path: 17 + path: 3 + span: 556 + span: 43 + span: 45 + } + location: { + path: 4 + path: 10 + path: 2 + path: 18 + span: 561 + span: 2 + span: 36 + leading_comments: " Use this option to change the package of ruby generated classes. Default\n is empty. When this option is not set, the package name will be used for\n determining the ruby package.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 18 + path: 4 + span: 561 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 18 + path: 5 + span: 561 + span: 11 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 18 + path: 1 + span: 561 + span: 18 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 18 + path: 3 + span: 561 + span: 33 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 19 + span: 567 + span: 2 + span: 36 + leading_comments: " Any features defined in the specific edition.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 19 + path: 4 + span: 567 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 19 + path: 6 + span: 567 + span: 11 + span: 21 + } + location: { + path: 4 + path: 10 + path: 2 + path: 19 + path: 1 + span: 567 + span: 22 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 19 + path: 3 + span: 567 + span: 33 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 20 + span: 571 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here.\n See the documentation for the \"Options\" section above.\n" + } + location: { + path: 4 + path: 10 + path: 2 + path: 20 + path: 4 + span: 571 + span: 2 + span: 10 + } + location: { + path: 4 + path: 10 + path: 2 + path: 20 + path: 6 + span: 571 + span: 11 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 20 + path: 1 + span: 571 + span: 31 + span: 51 + } + location: { + path: 4 + path: 10 + path: 2 + path: 20 + path: 3 + span: 571 + span: 54 + span: 57 + } + location: { + path: 4 + path: 10 + path: 5 + span: 575 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message.\n See the documentation for the \"Options\" section above.\n" + } + location: { + path: 4 + path: 10 + path: 5 + path: 0 + span: 575 + span: 13 + span: 24 + } + location: { + path: 4 + path: 10 + path: 5 + path: 0 + path: 1 + span: 575 + span: 13 + span: 17 + } + location: { + path: 4 + path: 10 + path: 5 + path: 0 + path: 2 + span: 575 + span: 21 + span: 24 + } + location: { + path: 4 + path: 10 + path: 9 + span: 577 + span: 2 + span: 14 + } + location: { + path: 4 + path: 10 + path: 9 + path: 1 + span: 577 + span: 11 + span: 13 + } + location: { + path: 4 + path: 10 + path: 9 + path: 1 + path: 1 + span: 577 + span: 11 + span: 13 + } + location: { + path: 4 + path: 10 + path: 9 + path: 1 + path: 2 + span: 577 + span: 11 + span: 13 + } + location: { + path: 4 + path: 11 + span: 580 + span: 0 + span: 663 + span: 1 + } + location: { + path: 4 + path: 11 + path: 1 + span: 580 + span: 8 + span: 22 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + span: 599 + span: 2 + span: 62 + leading_comments: " Set true to use the old proto1 MessageSet wire format for extensions.\n This is provided for backwards-compatibility with the MessageSet wire\n format. You should not use this for any other reason: It's less\n efficient, has fewer features, and is more complicated.\n\n The message must be defined exactly as follows:\n message Foo {\n option message_set_wire_format = true;\n extensions 4 to max;\n }\n Note that the message cannot have any defined fields; MessageSets only\n have extensions.\n\n All extensions of your type must be singular messages; e.g. they cannot\n be int32s, enums, or repeated messages.\n\n Because this is an option, the above two restrictions are not enforced by\n the protocol compiler.\n" + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 4 + span: 599 + span: 2 + span: 10 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 5 + span: 599 + span: 11 + span: 15 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 1 + span: 599 + span: 16 + span: 39 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 3 + span: 599 + span: 42 + span: 43 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 8 + span: 599 + span: 44 + span: 61 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 7 + span: 599 + span: 45 + span: 60 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + span: 604 + span: 2 + span: 70 + leading_comments: " Disables the generation of the standard \"descriptor()\" accessor, which can\n conflict with a field of the same name. This is meant to make migration\n from proto1 easier; new code should avoid fields named \"descriptor\".\n" + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 4 + span: 604 + span: 2 + span: 10 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 5 + span: 604 + span: 11 + span: 15 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 1 + span: 604 + span: 16 + span: 47 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 3 + span: 604 + span: 50 + span: 51 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 8 + span: 604 + span: 52 + span: 69 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 7 + span: 604 + span: 53 + span: 68 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + span: 610 + span: 2 + span: 49 + leading_comments: " Is this message deprecated?\n Depending on the target platform, this can emit Deprecated annotations\n for the message, or it will be completely ignored; in the very least,\n this is a formalization for deprecating messages.\n" + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 4 + span: 610 + span: 2 + span: 10 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 5 + span: 610 + span: 11 + span: 15 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 1 + span: 610 + span: 16 + span: 26 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 3 + span: 610 + span: 29 + span: 30 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 8 + span: 610 + span: 31 + span: 48 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 7 + span: 610 + span: 32 + span: 47 + } + location: { + path: 4 + path: 11 + path: 9 + span: 612 + span: 2 + span: 19 + } + location: { + path: 4 + path: 11 + path: 9 + path: 0 + span: 612 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 9 + path: 0 + path: 1 + span: 612 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 9 + path: 0 + path: 2 + span: 612 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 9 + path: 1 + span: 612 + span: 14 + span: 15 + } + location: { + path: 4 + path: 11 + path: 9 + path: 1 + path: 1 + span: 612 + span: 14 + span: 15 + } + location: { + path: 4 + path: 11 + path: 9 + path: 1 + path: 2 + span: 612 + span: 14 + span: 15 + } + location: { + path: 4 + path: 11 + path: 9 + path: 2 + span: 612 + span: 17 + span: 18 + } + location: { + path: 4 + path: 11 + path: 9 + path: 2 + path: 1 + span: 612 + span: 17 + span: 18 + } + location: { + path: 4 + path: 11 + path: 9 + path: 2 + path: 2 + span: 612 + span: 17 + span: 18 + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + span: 635 + span: 2 + span: 30 + leading_comments: " Whether the message is an automatically generated map entry type for the\n maps field.\n\n For maps fields:\n map map_field = 1;\n The parsed descriptor looks like:\n message MapFieldEntry {\n option map_entry = true;\n optional KeyType key = 1;\n optional ValueType value = 2;\n }\n repeated MapFieldEntry map_field = 1;\n\n Implementations may choose not to generate the map_entry=true message, but\n use a native map in the target language to hold the keys and values.\n The reflection APIs in such implementations still need to work as\n if the field is a repeated message field.\n\n NOTE: Do not set the option in .proto files. Always use the maps syntax\n instead. The option should only be implicitly set by the proto compiler\n parser.\n" + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + path: 4 + span: 635 + span: 2 + span: 10 + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + path: 5 + span: 635 + span: 11 + span: 15 + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + path: 1 + span: 635 + span: 16 + span: 25 + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + path: 3 + span: 635 + span: 28 + span: 29 + } + location: { + path: 4 + path: 11 + path: 9 + span: 637 + span: 2 + span: 13 + trailing_comments: " javalite_serializable\n" + } + location: { + path: 4 + path: 11 + path: 9 + path: 3 + span: 637 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 9 + path: 3 + path: 1 + span: 637 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 9 + path: 3 + path: 2 + span: 637 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 9 + span: 638 + span: 2 + span: 13 + trailing_comments: " javanano_as_lite\n" + } + location: { + path: 4 + path: 11 + path: 9 + path: 4 + span: 638 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 9 + path: 4 + path: 1 + span: 638 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 9 + path: 4 + path: 2 + span: 638 + span: 11 + span: 12 + } + location: { + path: 4 + path: 11 + path: 2 + path: 4 + span: 650 + span: 2 + span: 80 + leading_comments: " Enable the legacy handling of JSON field name conflicts. This lowercases\n and strips underscored from the fields before comparison in proto3 only.\n The new behavior takes `json_name` into account and applies to proto2 as\n well.\n\n This should only be used as a temporary measure against broken builds due\n to the change in behavior for JSON field name conflicts.\n\n TODO This is legacy behavior we plan to remove once downstream\n teams have had time to migrate.\n" + } + location: { + path: 4 + path: 11 + path: 2 + path: 4 + path: 4 + span: 650 + span: 2 + span: 10 + } + location: { + path: 4 + path: 11 + path: 2 + path: 4 + path: 5 + span: 650 + span: 11 + span: 15 + } + location: { + path: 4 + path: 11 + path: 2 + path: 4 + path: 1 + span: 650 + span: 16 + span: 54 + } + location: { + path: 4 + path: 11 + path: 2 + path: 4 + path: 3 + span: 650 + span: 57 + span: 59 + } + location: { + path: 4 + path: 11 + path: 2 + path: 4 + path: 8 + span: 650 + span: 60 + span: 79 + } + location: { + path: 4 + path: 11 + path: 2 + path: 4 + path: 8 + path: 3 + span: 650 + span: 61 + span: 78 + } + location: { + path: 4 + path: 11 + path: 2 + path: 5 + span: 656 + span: 2 + span: 36 + leading_comments: " Any features defined in the specific edition.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 11 + path: 2 + path: 5 + path: 4 + span: 656 + span: 2 + span: 10 + } + location: { + path: 4 + path: 11 + path: 2 + path: 5 + path: 6 + span: 656 + span: 11 + span: 21 + } + location: { + path: 4 + path: 11 + path: 2 + path: 5 + path: 1 + span: 656 + span: 22 + span: 30 + } + location: { + path: 4 + path: 11 + path: 2 + path: 5 + path: 3 + span: 656 + span: 33 + span: 35 + } + location: { + path: 4 + path: 11 + path: 2 + path: 6 + span: 659 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here. See above.\n" + } + location: { + path: 4 + path: 11 + path: 2 + path: 6 + path: 4 + span: 659 + span: 2 + span: 10 + } + location: { + path: 4 + path: 11 + path: 2 + path: 6 + path: 6 + span: 659 + span: 11 + span: 30 + } + location: { + path: 4 + path: 11 + path: 2 + path: 6 + path: 1 + span: 659 + span: 31 + span: 51 + } + location: { + path: 4 + path: 11 + path: 2 + path: 6 + path: 3 + span: 659 + span: 54 + span: 57 + } + location: { + path: 4 + path: 11 + path: 5 + span: 662 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message. See above.\n" + } + location: { + path: 4 + path: 11 + path: 5 + path: 0 + span: 662 + span: 13 + span: 24 + } + location: { + path: 4 + path: 11 + path: 5 + path: 0 + path: 1 + span: 662 + span: 13 + span: 17 + } + location: { + path: 4 + path: 11 + path: 5 + path: 0 + path: 2 + span: 662 + span: 21 + span: 24 + } + location: { + path: 4 + path: 12 + span: 665 + span: 0 + span: 831 + span: 1 + } + location: { + path: 4 + path: 12 + path: 1 + span: 665 + span: 8 + span: 20 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + span: 673 + span: 2 + span: 69 + leading_comments: " NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead.\n The ctype option instructs the C++ code generator to use a different\n representation of the field than it normally would. See the specific\n options below. This option is only implemented to support use of\n [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of\n type \"bytes\" in the open source release.\n TODO: make ctype actually deprecated.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 4 + span: 673 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 6 + span: 673 + span: 11 + span: 16 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 1 + span: 673 + span: 17 + span: 22 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 3 + span: 673 + span: 25 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 8 + span: 673 + span: 27 + span: 68 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 7 + span: 673 + span: 51 + span: 67 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + span: 674 + span: 2 + span: 687 + span: 3 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 1 + span: 674 + span: 7 + span: 12 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 0 + span: 676 + span: 4 + span: 15 + leading_comments: " Default mode.\n" + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 676 + span: 4 + span: 10 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 0 + path: 2 + span: 676 + span: 13 + span: 14 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 1 + span: 684 + span: 4 + span: 13 + leading_comments: " The option [ctype=CORD] may be applied to a non-repeated field of type\n \"bytes\". It indicates that in C++, the data should be stored in a Cord\n instead of a string. For very large strings, this may reduce memory\n fragmentation. It may also allow better performance when parsing from a\n Cord, or when parsing with aliasing enabled, as the parsed Cord may then\n alias the original buffer.\n" + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 684 + span: 4 + span: 8 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 1 + path: 2 + span: 684 + span: 11 + span: 12 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 2 + span: 686 + span: 4 + span: 21 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 686 + span: 4 + span: 16 + } + location: { + path: 4 + path: 12 + path: 4 + path: 0 + path: 2 + path: 2 + path: 2 + span: 686 + span: 19 + span: 20 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + span: 695 + span: 2 + span: 27 + leading_comments: " The packed option can be enabled for repeated primitive fields to enable\n a more efficient representation on the wire. Rather than repeatedly\n writing the tag and type for each element, the entire array is encoded as\n a single length-delimited blob. In proto3, only explicit setting it to\n false will avoid using packed encoding. This option is prohibited in\n Editions, but the `repeated_field_encoding` feature can be used to control\n the behavior.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 4 + span: 695 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 5 + span: 695 + span: 11 + span: 15 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 1 + span: 695 + span: 16 + span: 22 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 3 + span: 695 + span: 25 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + span: 708 + span: 2 + span: 51 + leading_comments: " The jstype option determines the JavaScript type used for values of the\n field. The option is permitted only for 64 bit integral and fixed types\n (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING\n is represented as JavaScript string, which avoids loss of precision that\n can happen when a large value is converted to a floating point JavaScript.\n Specifying JS_NUMBER for the jstype causes the generated JavaScript code to\n use the JavaScript \"number\" type. The behavior of the default option\n JS_NORMAL is implementation dependent.\n\n This option is an enum to permit additional types to be added, e.g.\n goog.math.Integer.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 4 + span: 708 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 6 + span: 708 + span: 11 + span: 17 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 1 + span: 708 + span: 18 + span: 24 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 3 + span: 708 + span: 27 + span: 28 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 8 + span: 708 + span: 29 + span: 50 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 7 + span: 708 + span: 30 + span: 49 + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + span: 709 + span: 2 + span: 718 + span: 3 + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 1 + span: 709 + span: 7 + span: 13 + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 0 + span: 711 + span: 4 + span: 18 + leading_comments: " Use the default type.\n" + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 711 + span: 4 + span: 13 + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 0 + path: 2 + span: 711 + span: 16 + span: 17 + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 1 + span: 714 + span: 4 + span: 18 + leading_comments: " Use JavaScript strings.\n" + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 714 + span: 4 + span: 13 + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 1 + path: 2 + span: 714 + span: 16 + span: 17 + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 2 + span: 717 + span: 4 + span: 18 + leading_comments: " Use JavaScript numbers.\n" + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 717 + span: 4 + span: 13 + } + location: { + path: 4 + path: 12 + path: 4 + path: 1 + path: 2 + path: 2 + path: 2 + span: 717 + span: 16 + span: 17 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + span: 742 + span: 2 + span: 43 + leading_comments: " Should this field be parsed lazily? Lazy applies only to message-type\n fields. It means that when the outer message is initially parsed, the\n inner message's contents will not be parsed but instead stored in encoded\n form. The inner message will actually be parsed when it is first accessed.\n\n This is only a hint. Implementations are free to choose whether to use\n eager or lazy parsing regardless of the value of this option. However,\n setting this option true suggests that the protocol author believes that\n using lazy parsing on this field is worth the additional bookkeeping\n overhead typically needed to implement it.\n\n This option does not affect the public interface of any generated code;\n all method signatures remain the same. Furthermore, thread-safety of the\n interface is not affected by this option; const methods remain safe to\n call from multiple threads concurrently, while non-const methods continue\n to require exclusive access.\n\n Note that lazy message fields are still eagerly verified to check\n ill-formed wireformat or missing required fields. Calling IsInitialized()\n on the outer message would fail if the inner message has missing required\n fields. Failed verification would result in parsing failure (except when\n uninitialized messages are acceptable).\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 4 + span: 742 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 5 + span: 742 + span: 11 + span: 15 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 1 + span: 742 + span: 16 + span: 20 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 3 + span: 742 + span: 23 + span: 24 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 8 + span: 742 + span: 25 + span: 42 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 7 + span: 742 + span: 26 + span: 41 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + span: 747 + span: 2 + span: 55 + leading_comments: " unverified_lazy does no correctness checks on the byte stream. This should\n only be used where lazy with verification is prohibitive for performance\n reasons.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 4 + span: 747 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 5 + span: 747 + span: 11 + span: 15 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 1 + span: 747 + span: 16 + span: 31 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 3 + span: 747 + span: 34 + span: 36 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 8 + span: 747 + span: 37 + span: 54 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 7 + span: 747 + span: 38 + span: 53 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + span: 753 + span: 2 + span: 49 + leading_comments: " Is this field deprecated?\n Depending on the target platform, this can emit Deprecated annotations\n for accessors, or it will be completely ignored; in the very least, this\n is a formalization for deprecating fields.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 4 + span: 753 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 5 + span: 753 + span: 11 + span: 15 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 1 + span: 753 + span: 16 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 3 + span: 753 + span: 29 + span: 30 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 8 + span: 753 + span: 31 + span: 48 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 7 + span: 753 + span: 32 + span: 47 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + span: 756 + span: 2 + span: 44 + leading_comments: " For Google-internal migration only. Do not use.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 4 + span: 756 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 5 + span: 756 + span: 11 + span: 15 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 1 + span: 756 + span: 16 + span: 20 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 3 + span: 756 + span: 23 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 8 + span: 756 + span: 26 + span: 43 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 7 + span: 756 + span: 27 + span: 42 + } + location: { + path: 4 + path: 12 + path: 2 + path: 7 + span: 760 + span: 2 + span: 52 + leading_comments: " Indicate that the field value should not be printed out when using debug\n formats, e.g. when the field contains sensitive credentials.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 7 + path: 4 + span: 760 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 7 + path: 5 + span: 760 + span: 11 + span: 15 + } + location: { + path: 4 + path: 12 + path: 2 + path: 7 + path: 1 + span: 760 + span: 16 + span: 28 + } + location: { + path: 4 + path: 12 + path: 2 + path: 7 + path: 3 + span: 760 + span: 31 + span: 33 + } + location: { + path: 4 + path: 12 + path: 2 + path: 7 + path: 8 + span: 760 + span: 34 + span: 51 + } + location: { + path: 4 + path: 12 + path: 2 + path: 7 + path: 7 + span: 760 + span: 35 + span: 50 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + span: 763 + span: 2 + span: 767 + span: 3 + leading_comments: " If set to RETENTION_SOURCE, the option will be omitted from the binary.\n" + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 1 + span: 763 + span: 7 + span: 22 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 0 + span: 764 + span: 4 + span: 26 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 764 + span: 4 + span: 21 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 0 + path: 2 + span: 764 + span: 24 + span: 25 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 1 + span: 765 + span: 4 + span: 26 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 765 + span: 4 + span: 21 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 1 + path: 2 + span: 765 + span: 24 + span: 25 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 2 + span: 766 + span: 4 + span: 25 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 766 + span: 4 + span: 20 + } + location: { + path: 4 + path: 12 + path: 4 + path: 2 + path: 2 + path: 2 + path: 2 + span: 766 + span: 23 + span: 24 + } + location: { + path: 4 + path: 12 + path: 2 + path: 8 + span: 769 + span: 2 + span: 42 + } + location: { + path: 4 + path: 12 + path: 2 + path: 8 + path: 4 + span: 769 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 8 + path: 6 + span: 769 + span: 11 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 8 + path: 1 + span: 769 + span: 27 + span: 36 + } + location: { + path: 4 + path: 12 + path: 2 + path: 8 + path: 3 + span: 769 + span: 39 + span: 41 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + span: 774 + span: 2 + span: 785 + span: 3 + leading_comments: " This indicates the types of entities that the field may apply to when used\n as an option. If it is unset, then the field may be freely used as an\n option on any kind of entity.\n" + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 1 + span: 774 + span: 7 + span: 23 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 0 + span: 775 + span: 4 + span: 28 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 775 + span: 4 + span: 23 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 0 + path: 2 + span: 775 + span: 26 + span: 27 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 1 + span: 776 + span: 4 + span: 25 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 776 + span: 4 + span: 20 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 1 + path: 2 + span: 776 + span: 23 + span: 24 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 2 + span: 777 + span: 4 + span: 36 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 2 + path: 1 + span: 777 + span: 4 + span: 31 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 2 + path: 2 + span: 777 + span: 34 + span: 35 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 3 + span: 778 + span: 4 + span: 28 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 3 + path: 1 + span: 778 + span: 4 + span: 23 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 3 + path: 2 + span: 778 + span: 26 + span: 27 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 4 + span: 779 + span: 4 + span: 26 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 4 + path: 1 + span: 779 + span: 4 + span: 21 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 4 + path: 2 + span: 779 + span: 24 + span: 25 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 5 + span: 780 + span: 4 + span: 26 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 5 + path: 1 + span: 780 + span: 4 + span: 21 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 5 + path: 2 + span: 780 + span: 24 + span: 25 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 6 + span: 781 + span: 4 + span: 25 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 6 + path: 1 + span: 781 + span: 4 + span: 20 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 6 + path: 2 + span: 781 + span: 23 + span: 24 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 7 + span: 782 + span: 4 + span: 31 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 7 + path: 1 + span: 782 + span: 4 + span: 26 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 7 + path: 2 + span: 782 + span: 29 + span: 30 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 8 + span: 783 + span: 4 + span: 28 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 8 + path: 1 + span: 783 + span: 4 + span: 23 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 8 + path: 2 + span: 783 + span: 26 + span: 27 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 9 + span: 784 + span: 4 + span: 27 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 9 + path: 1 + span: 784 + span: 4 + span: 22 + } + location: { + path: 4 + path: 12 + path: 4 + path: 3 + path: 2 + path: 9 + path: 2 + span: 784 + span: 25 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 9 + span: 787 + span: 2 + span: 41 + } + location: { + path: 4 + path: 12 + path: 2 + path: 9 + path: 4 + span: 787 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 9 + path: 6 + span: 787 + span: 11 + span: 27 + } + location: { + path: 4 + path: 12 + path: 2 + path: 9 + path: 1 + span: 787 + span: 28 + span: 35 + } + location: { + path: 4 + path: 12 + path: 2 + path: 9 + path: 3 + span: 787 + span: 38 + span: 40 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + span: 789 + span: 2 + span: 792 + span: 3 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 1 + span: 789 + span: 10 + span: 24 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 0 + span: 790 + span: 4 + span: 33 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 0 + path: 4 + span: 790 + span: 4 + span: 12 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 0 + path: 6 + span: 790 + span: 13 + span: 20 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 790 + span: 21 + span: 28 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 790 + span: 31 + span: 32 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 1 + span: 791 + span: 4 + span: 30 + trailing_comments: " Textproto value.\n" + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 1 + path: 4 + span: 791 + span: 4 + span: 12 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 1 + path: 5 + span: 791 + span: 13 + span: 19 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 791 + span: 20 + span: 25 + } + location: { + path: 4 + path: 12 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 791 + span: 28 + span: 29 + } + location: { + path: 4 + path: 12 + path: 2 + path: 10 + span: 793 + span: 2 + span: 48 + } + location: { + path: 4 + path: 12 + path: 2 + path: 10 + path: 4 + span: 793 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 10 + path: 6 + span: 793 + span: 11 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 10 + path: 1 + span: 793 + span: 26 + span: 42 + } + location: { + path: 4 + path: 12 + path: 2 + path: 10 + path: 3 + span: 793 + span: 45 + span: 47 + } + location: { + path: 4 + path: 12 + path: 2 + path: 11 + span: 799 + span: 2 + span: 36 + leading_comments: " Any features defined in the specific edition.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 11 + path: 4 + span: 799 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 11 + path: 6 + span: 799 + span: 11 + span: 21 + } + location: { + path: 4 + path: 12 + path: 2 + path: 11 + path: 1 + span: 799 + span: 22 + span: 30 + } + location: { + path: 4 + path: 12 + path: 2 + path: 11 + path: 3 + span: 799 + span: 33 + span: 35 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + span: 802 + span: 2 + span: 820 + span: 3 + leading_comments: " Information about the support window of a feature.\n" + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 1 + span: 802 + span: 10 + span: 24 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 0 + span: 806 + span: 4 + span: 44 + leading_comments: " The edition that this feature was first available in. In editions\n earlier than this one, the default assigned to EDITION_LEGACY will be\n used, and proto files will not be able to override it.\n" + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 0 + path: 4 + span: 806 + span: 4 + span: 12 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 0 + path: 6 + span: 806 + span: 13 + span: 20 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 0 + path: 1 + span: 806 + span: 21 + span: 39 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 0 + path: 3 + span: 806 + span: 42 + span: 43 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 1 + span: 810 + span: 4 + span: 44 + leading_comments: " The edition this feature becomes deprecated in. Using this after this\n edition may trigger warnings.\n" + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 1 + path: 4 + span: 810 + span: 4 + span: 12 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 1 + path: 6 + span: 810 + span: 13 + span: 20 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 1 + path: 1 + span: 810 + span: 21 + span: 39 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 1 + path: 3 + span: 810 + span: 42 + span: 43 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 2 + span: 814 + span: 4 + span: 44 + leading_comments: " The deprecation warning text if this feature is used after the edition it\n was marked deprecated in.\n" + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 2 + path: 4 + span: 814 + span: 4 + span: 12 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 2 + path: 5 + span: 814 + span: 13 + span: 19 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 2 + path: 1 + span: 814 + span: 20 + span: 39 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 2 + path: 3 + span: 814 + span: 42 + span: 43 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 3 + span: 819 + span: 4 + span: 41 + leading_comments: " The edition this feature is no longer available in. In editions after\n this one, the last default assigned will be used, and proto files will\n not be able to override it.\n" + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 3 + path: 4 + span: 819 + span: 4 + span: 12 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 3 + path: 6 + span: 819 + span: 13 + span: 20 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 3 + path: 1 + span: 819 + span: 21 + span: 36 + } + location: { + path: 4 + path: 12 + path: 3 + path: 1 + path: 2 + path: 3 + path: 3 + span: 819 + span: 39 + span: 40 + } + location: { + path: 4 + path: 12 + path: 2 + path: 12 + span: 821 + span: 2 + span: 47 + } + location: { + path: 4 + path: 12 + path: 2 + path: 12 + path: 4 + span: 821 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 12 + path: 6 + span: 821 + span: 11 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 12 + path: 1 + span: 821 + span: 26 + span: 41 + } + location: { + path: 4 + path: 12 + path: 2 + path: 12 + path: 3 + span: 821 + span: 44 + span: 46 + } + location: { + path: 4 + path: 12 + path: 2 + path: 13 + span: 824 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here. See above.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 13 + path: 4 + span: 824 + span: 2 + span: 10 + } + location: { + path: 4 + path: 12 + path: 2 + path: 13 + path: 6 + span: 824 + span: 11 + span: 30 + } + location: { + path: 4 + path: 12 + path: 2 + path: 13 + path: 1 + span: 824 + span: 31 + span: 51 + } + location: { + path: 4 + path: 12 + path: 2 + path: 13 + path: 3 + span: 824 + span: 54 + span: 57 + } + location: { + path: 4 + path: 12 + path: 5 + span: 827 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message. See above.\n" + } + location: { + path: 4 + path: 12 + path: 5 + path: 0 + span: 827 + span: 13 + span: 24 + } + location: { + path: 4 + path: 12 + path: 5 + path: 0 + path: 1 + span: 827 + span: 13 + span: 17 + } + location: { + path: 4 + path: 12 + path: 5 + path: 0 + path: 2 + span: 827 + span: 21 + span: 24 + } + location: { + path: 4 + path: 12 + path: 9 + span: 829 + span: 2 + span: 13 + trailing_comments: " removed jtype\n" + } + location: { + path: 4 + path: 12 + path: 9 + path: 0 + span: 829 + span: 11 + span: 12 + } + location: { + path: 4 + path: 12 + path: 9 + path: 0 + path: 1 + span: 829 + span: 11 + span: 12 + } + location: { + path: 4 + path: 12 + path: 9 + path: 0 + path: 2 + span: 829 + span: 11 + span: 12 + } + location: { + path: 4 + path: 12 + path: 9 + span: 830 + span: 2 + span: 14 + trailing_comments: " reserve target, target_obsolete_do_not_use\n" + } + location: { + path: 4 + path: 12 + path: 9 + path: 1 + span: 830 + span: 11 + span: 13 + } + location: { + path: 4 + path: 12 + path: 9 + path: 1 + path: 1 + span: 830 + span: 11 + span: 13 + } + location: { + path: 4 + path: 12 + path: 9 + path: 1 + path: 2 + span: 830 + span: 11 + span: 13 + } + location: { + path: 4 + path: 13 + span: 833 + span: 0 + span: 845 + span: 1 + } + location: { + path: 4 + path: 13 + path: 1 + span: 833 + span: 8 + span: 20 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + span: 838 + span: 2 + span: 35 + leading_comments: " Any features defined in the specific edition.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 4 + span: 838 + span: 2 + span: 10 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 6 + span: 838 + span: 11 + span: 21 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 1 + span: 838 + span: 22 + span: 30 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 3 + span: 838 + span: 33 + span: 34 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + span: 841 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here. See above.\n" + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 4 + span: 841 + span: 2 + span: 10 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 6 + span: 841 + span: 11 + span: 30 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 1 + span: 841 + span: 31 + span: 51 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 3 + span: 841 + span: 54 + span: 57 + } + location: { + path: 4 + path: 13 + path: 5 + span: 844 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message. See above.\n" + } + location: { + path: 4 + path: 13 + path: 5 + path: 0 + span: 844 + span: 13 + span: 24 + } + location: { + path: 4 + path: 13 + path: 5 + path: 0 + path: 1 + span: 844 + span: 13 + span: 17 + } + location: { + path: 4 + path: 13 + path: 5 + path: 0 + path: 2 + span: 844 + span: 21 + span: 24 + } + location: { + path: 4 + path: 14 + span: 847 + span: 0 + span: 880 + span: 1 + } + location: { + path: 4 + path: 14 + path: 1 + span: 847 + span: 8 + span: 19 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + span: 851 + span: 2 + span: 32 + leading_comments: " Set this option to true to allow mapping different tag names to the same\n value.\n" + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 4 + span: 851 + span: 2 + span: 10 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 5 + span: 851 + span: 11 + span: 15 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 1 + span: 851 + span: 16 + span: 27 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 3 + span: 851 + span: 30 + span: 31 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + span: 857 + span: 2 + span: 49 + leading_comments: " Is this enum deprecated?\n Depending on the target platform, this can emit Deprecated annotations\n for the enum, or it will be completely ignored; in the very least, this\n is a formalization for deprecating enums.\n" + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 4 + span: 857 + span: 2 + span: 10 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 5 + span: 857 + span: 11 + span: 15 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 1 + span: 857 + span: 16 + span: 26 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 3 + span: 857 + span: 29 + span: 30 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 8 + span: 857 + span: 31 + span: 48 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 7 + span: 857 + span: 32 + span: 47 + } + location: { + path: 4 + path: 14 + path: 9 + span: 859 + span: 2 + span: 13 + trailing_comments: " javanano_as_lite\n" + } + location: { + path: 4 + path: 14 + path: 9 + path: 0 + span: 859 + span: 11 + span: 12 + } + location: { + path: 4 + path: 14 + path: 9 + path: 0 + path: 1 + span: 859 + span: 11 + span: 12 + } + location: { + path: 4 + path: 14 + path: 9 + path: 0 + path: 2 + span: 859 + span: 11 + span: 12 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + span: 867 + span: 2 + span: 79 + leading_comments: " Enable the legacy handling of JSON field name conflicts. This lowercases\n and strips underscored from the fields before comparison in proto3 only.\n The new behavior takes `json_name` into account and applies to proto2 as\n well.\n TODO Remove this legacy behavior once downstream teams have\n had time to migrate.\n" + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 4 + span: 867 + span: 2 + span: 10 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 5 + span: 867 + span: 11 + span: 15 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 1 + span: 867 + span: 16 + span: 54 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 3 + span: 867 + span: 57 + span: 58 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 8 + span: 867 + span: 59 + span: 78 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 8 + path: 3 + span: 867 + span: 60 + span: 77 + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + span: 873 + span: 2 + span: 35 + leading_comments: " Any features defined in the specific edition.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + path: 4 + span: 873 + span: 2 + span: 10 + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + path: 6 + span: 873 + span: 11 + span: 21 + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + path: 1 + span: 873 + span: 22 + span: 30 + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + path: 3 + span: 873 + span: 33 + span: 34 + } + location: { + path: 4 + path: 14 + path: 2 + path: 4 + span: 876 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here. See above.\n" + } + location: { + path: 4 + path: 14 + path: 2 + path: 4 + path: 4 + span: 876 + span: 2 + span: 10 + } + location: { + path: 4 + path: 14 + path: 2 + path: 4 + path: 6 + span: 876 + span: 11 + span: 30 + } + location: { + path: 4 + path: 14 + path: 2 + path: 4 + path: 1 + span: 876 + span: 31 + span: 51 + } + location: { + path: 4 + path: 14 + path: 2 + path: 4 + path: 3 + span: 876 + span: 54 + span: 57 + } + location: { + path: 4 + path: 14 + path: 5 + span: 879 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message. See above.\n" + } + location: { + path: 4 + path: 14 + path: 5 + path: 0 + span: 879 + span: 13 + span: 24 + } + location: { + path: 4 + path: 14 + path: 5 + path: 0 + path: 1 + span: 879 + span: 13 + span: 17 + } + location: { + path: 4 + path: 14 + path: 5 + path: 0 + path: 2 + span: 879 + span: 21 + span: 24 + } + location: { + path: 4 + path: 15 + span: 882 + span: 0 + span: 908 + span: 1 + } + location: { + path: 4 + path: 15 + path: 1 + span: 882 + span: 8 + span: 24 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + span: 887 + span: 2 + span: 49 + leading_comments: " Is this enum value deprecated?\n Depending on the target platform, this can emit Deprecated annotations\n for the enum value, or it will be completely ignored; in the very least,\n this is a formalization for deprecating enum values.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 4 + span: 887 + span: 2 + span: 10 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 5 + span: 887 + span: 11 + span: 15 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 1 + span: 887 + span: 16 + span: 26 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 3 + span: 887 + span: 29 + span: 30 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 8 + span: 887 + span: 31 + span: 48 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 7 + span: 887 + span: 32 + span: 47 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + span: 893 + span: 2 + span: 35 + leading_comments: " Any features defined in the specific edition.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 4 + span: 893 + span: 2 + span: 10 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 6 + span: 893 + span: 11 + span: 21 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 1 + span: 893 + span: 22 + span: 30 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 3 + span: 893 + span: 33 + span: 34 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + span: 898 + span: 2 + span: 51 + leading_comments: " Indicate that fields annotated with this enum value should not be printed\n out when using debug formats, e.g. when the field contains sensitive\n credentials.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 4 + span: 898 + span: 2 + span: 10 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 5 + span: 898 + span: 11 + span: 15 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 1 + span: 898 + span: 16 + span: 28 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 3 + span: 898 + span: 31 + span: 32 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 8 + span: 898 + span: 33 + span: 50 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 7 + span: 898 + span: 34 + span: 49 + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + span: 901 + span: 2 + span: 59 + leading_comments: " Information about the support window of a feature value.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + path: 4 + span: 901 + span: 2 + span: 10 + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + path: 6 + span: 901 + span: 11 + span: 38 + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + path: 1 + span: 901 + span: 39 + span: 54 + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + path: 3 + span: 901 + span: 57 + span: 58 + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + span: 904 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here. See above.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + path: 4 + span: 904 + span: 2 + span: 10 + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + path: 6 + span: 904 + span: 11 + span: 30 + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + path: 1 + span: 904 + span: 31 + span: 51 + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + path: 3 + span: 904 + span: 54 + span: 57 + } + location: { + path: 4 + path: 15 + path: 5 + span: 907 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message. See above.\n" + } + location: { + path: 4 + path: 15 + path: 5 + path: 0 + span: 907 + span: 13 + span: 24 + } + location: { + path: 4 + path: 15 + path: 5 + path: 0 + path: 1 + span: 907 + span: 13 + span: 17 + } + location: { + path: 4 + path: 15 + path: 5 + path: 0 + path: 2 + span: 907 + span: 21 + span: 24 + } + location: { + path: 4 + path: 16 + span: 910 + span: 0 + span: 934 + span: 1 + } + location: { + path: 4 + path: 16 + path: 1 + span: 910 + span: 8 + span: 22 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + span: 916 + span: 2 + span: 36 + leading_comments: " Any features defined in the specific edition.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 4 + span: 916 + span: 2 + span: 10 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 6 + span: 916 + span: 11 + span: 21 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 1 + span: 916 + span: 22 + span: 30 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 3 + span: 916 + span: 33 + span: 35 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + span: 927 + span: 2 + span: 50 + leading_comments: " Is this service deprecated?\n Depending on the target platform, this can emit Deprecated annotations\n for the service, or it will be completely ignored; in the very least,\n this is a formalization for deprecating services.\n" + leading_detached_comments: " Note: Field numbers 1 through 32 are reserved for Google's internal RPC\n framework. We apologize for hoarding these numbers to ourselves, but\n we were already using them long before we decided to release Protocol\n Buffers.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 4 + span: 927 + span: 2 + span: 10 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 5 + span: 927 + span: 11 + span: 15 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 1 + span: 927 + span: 16 + span: 26 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 3 + span: 927 + span: 29 + span: 31 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 8 + span: 927 + span: 32 + span: 49 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 7 + span: 927 + span: 33 + span: 48 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + span: 930 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here. See above.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 4 + span: 930 + span: 2 + span: 10 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 6 + span: 930 + span: 11 + span: 30 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 1 + span: 930 + span: 31 + span: 51 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 3 + span: 930 + span: 54 + span: 57 + } + location: { + path: 4 + path: 16 + path: 5 + span: 933 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message. See above.\n" + } + location: { + path: 4 + path: 16 + path: 5 + path: 0 + span: 933 + span: 13 + span: 24 + } + location: { + path: 4 + path: 16 + path: 5 + path: 0 + path: 1 + span: 933 + span: 13 + span: 17 + } + location: { + path: 4 + path: 16 + path: 5 + path: 0 + path: 2 + span: 933 + span: 21 + span: 24 + } + location: { + path: 4 + path: 17 + span: 936 + span: 0 + span: 971 + span: 1 + } + location: { + path: 4 + path: 17 + path: 1 + span: 936 + span: 8 + span: 21 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + span: 947 + span: 2 + span: 50 + leading_comments: " Is this method deprecated?\n Depending on the target platform, this can emit Deprecated annotations\n for the method, or it will be completely ignored; in the very least,\n this is a formalization for deprecating methods.\n" + leading_detached_comments: " Note: Field numbers 1 through 32 are reserved for Google's internal RPC\n framework. We apologize for hoarding these numbers to ourselves, but\n we were already using them long before we decided to release Protocol\n Buffers.\n" + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 4 + span: 947 + span: 2 + span: 10 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 5 + span: 947 + span: 11 + span: 15 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 1 + span: 947 + span: 16 + span: 26 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 3 + span: 947 + span: 29 + span: 31 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 8 + span: 947 + span: 32 + span: 49 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 7 + span: 947 + span: 33 + span: 48 + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + span: 952 + span: 2 + span: 956 + span: 3 + leading_comments: " Is this method side-effect-free (or safe in HTTP parlance), or idempotent,\n or neither? HTTP based RPC implementation may choose GET verb for safe\n methods, and PUT verb for idempotent methods instead of the default POST.\n" + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 1 + span: 952 + span: 7 + span: 23 + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 0 + span: 953 + span: 4 + span: 28 + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 953 + span: 4 + span: 23 + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 0 + path: 2 + span: 953 + span: 26 + span: 27 + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 1 + span: 954 + span: 4 + span: 24 + trailing_comments: " implies idempotent\n" + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 954 + span: 4 + span: 19 + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 1 + path: 2 + span: 954 + span: 22 + span: 23 + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 2 + span: 955 + span: 4 + span: 19 + trailing_comments: " idempotent, but may have side effects\n" + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 955 + span: 4 + span: 14 + } + location: { + path: 4 + path: 17 + path: 4 + path: 0 + path: 2 + path: 2 + path: 2 + span: 955 + span: 17 + span: 18 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + span: 957 + span: 2 + span: 958 + span: 38 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 4 + span: 957 + span: 2 + span: 10 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 6 + span: 957 + span: 11 + span: 27 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 1 + span: 957 + span: 28 + span: 45 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 3 + span: 957 + span: 48 + span: 50 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 8 + span: 958 + span: 6 + span: 37 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 7 + span: 958 + span: 7 + span: 36 + } + location: { + path: 4 + path: 17 + path: 2 + path: 2 + span: 964 + span: 2 + span: 36 + leading_comments: " Any features defined in the specific edition.\n WARNING: This field should only be used by protobuf plugins or special\n cases like the proto compiler. Other uses are discouraged and\n developers should rely on the protoreflect APIs for their client language.\n" + } + location: { + path: 4 + path: 17 + path: 2 + path: 2 + path: 4 + span: 964 + span: 2 + span: 10 + } + location: { + path: 4 + path: 17 + path: 2 + path: 2 + path: 6 + span: 964 + span: 11 + span: 21 + } + location: { + path: 4 + path: 17 + path: 2 + path: 2 + path: 1 + span: 964 + span: 22 + span: 30 + } + location: { + path: 4 + path: 17 + path: 2 + path: 2 + path: 3 + span: 964 + span: 33 + span: 35 + } + location: { + path: 4 + path: 17 + path: 2 + path: 3 + span: 967 + span: 2 + span: 58 + leading_comments: " The parser stores options it doesn't recognize here. See above.\n" + } + location: { + path: 4 + path: 17 + path: 2 + path: 3 + path: 4 + span: 967 + span: 2 + span: 10 + } + location: { + path: 4 + path: 17 + path: 2 + path: 3 + path: 6 + span: 967 + span: 11 + span: 30 + } + location: { + path: 4 + path: 17 + path: 2 + path: 3 + path: 1 + span: 967 + span: 31 + span: 51 + } + location: { + path: 4 + path: 17 + path: 2 + path: 3 + path: 3 + span: 967 + span: 54 + span: 57 + } + location: { + path: 4 + path: 17 + path: 5 + span: 970 + span: 2 + span: 25 + leading_comments: " Clients can define custom options in extensions of this message. See above.\n" + } + location: { + path: 4 + path: 17 + path: 5 + path: 0 + span: 970 + span: 13 + span: 24 + } + location: { + path: 4 + path: 17 + path: 5 + path: 0 + path: 1 + span: 970 + span: 13 + span: 17 + } + location: { + path: 4 + path: 17 + path: 5 + path: 0 + path: 2 + span: 970 + span: 21 + span: 24 + } + location: { + path: 4 + path: 18 + span: 979 + span: 0 + span: 999 + span: 1 + leading_comments: " A message representing a option the parser does not recognize. This only\n appears in options protos created by the compiler::Parser class.\n DescriptorPool resolves these when building Descriptor objects. Therefore,\n options protos in descriptor objects (e.g. returned by Descriptor::options(),\n or produced by Descriptor::CopyTo()) will never have UninterpretedOptions\n in them.\n" + } + location: { + path: 4 + path: 18 + path: 1 + span: 979 + span: 8 + span: 27 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + span: 985 + span: 2 + span: 988 + span: 3 + leading_comments: " The name of the uninterpreted option. Each string represents a segment in\n a dot-separated name. is_extension is true iff a segment represents an\n extension (denoted with parentheses in options specs in .proto files).\n E.g.,{ [\"foo\", false], [\"bar.baz\", true], [\"moo\", false] } represents\n \"foo.(bar.baz).moo\".\n" + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 1 + span: 985 + span: 10 + span: 18 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 0 + span: 986 + span: 4 + span: 34 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 0 + path: 4 + span: 986 + span: 4 + span: 12 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 0 + path: 5 + span: 986 + span: 13 + span: 19 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 986 + span: 20 + span: 29 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 986 + span: 32 + span: 33 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 1 + span: 987 + span: 4 + span: 35 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 1 + path: 4 + span: 987 + span: 4 + span: 12 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 1 + path: 5 + span: 987 + span: 13 + span: 17 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 987 + span: 18 + span: 30 + } + location: { + path: 4 + path: 18 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 987 + span: 33 + span: 34 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + span: 989 + span: 2 + span: 29 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 4 + span: 989 + span: 2 + span: 10 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 6 + span: 989 + span: 11 + span: 19 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 1 + span: 989 + span: 20 + span: 24 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 3 + span: 989 + span: 27 + span: 28 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + span: 993 + span: 2 + span: 39 + leading_comments: " The value of the uninterpreted option, in whatever type the tokenizer\n identified it as during parsing. Exactly one of these should be set.\n" + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 4 + span: 993 + span: 2 + span: 10 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 5 + span: 993 + span: 11 + span: 17 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 1 + span: 993 + span: 18 + span: 34 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 3 + span: 993 + span: 37 + span: 38 + } + location: { + path: 4 + path: 18 + path: 2 + path: 2 + span: 994 + span: 2 + span: 41 + } + location: { + path: 4 + path: 18 + path: 2 + path: 2 + path: 4 + span: 994 + span: 2 + span: 10 + } + location: { + path: 4 + path: 18 + path: 2 + path: 2 + path: 5 + span: 994 + span: 11 + span: 17 + } + location: { + path: 4 + path: 18 + path: 2 + path: 2 + path: 1 + span: 994 + span: 18 + span: 36 + } + location: { + path: 4 + path: 18 + path: 2 + path: 2 + path: 3 + span: 994 + span: 39 + span: 40 + } + location: { + path: 4 + path: 18 + path: 2 + path: 3 + span: 995 + span: 2 + span: 40 + } + location: { + path: 4 + path: 18 + path: 2 + path: 3 + path: 4 + span: 995 + span: 2 + span: 10 + } + location: { + path: 4 + path: 18 + path: 2 + path: 3 + path: 5 + span: 995 + span: 11 + span: 16 + } + location: { + path: 4 + path: 18 + path: 2 + path: 3 + path: 1 + span: 995 + span: 17 + span: 35 + } + location: { + path: 4 + path: 18 + path: 2 + path: 3 + path: 3 + span: 995 + span: 38 + span: 39 + } + location: { + path: 4 + path: 18 + path: 2 + path: 4 + span: 996 + span: 2 + span: 35 + } + location: { + path: 4 + path: 18 + path: 2 + path: 4 + path: 4 + span: 996 + span: 2 + span: 10 + } + location: { + path: 4 + path: 18 + path: 2 + path: 4 + path: 5 + span: 996 + span: 11 + span: 17 + } + location: { + path: 4 + path: 18 + path: 2 + path: 4 + path: 1 + span: 996 + span: 18 + span: 30 + } + location: { + path: 4 + path: 18 + path: 2 + path: 4 + path: 3 + span: 996 + span: 33 + span: 34 + } + location: { + path: 4 + path: 18 + path: 2 + path: 5 + span: 997 + span: 2 + span: 34 + } + location: { + path: 4 + path: 18 + path: 2 + path: 5 + path: 4 + span: 997 + span: 2 + span: 10 + } + location: { + path: 4 + path: 18 + path: 2 + path: 5 + path: 5 + span: 997 + span: 11 + span: 16 + } + location: { + path: 4 + path: 18 + path: 2 + path: 5 + path: 1 + span: 997 + span: 17 + span: 29 + } + location: { + path: 4 + path: 18 + path: 2 + path: 5 + path: 3 + span: 997 + span: 32 + span: 33 + } + location: { + path: 4 + path: 18 + path: 2 + path: 6 + span: 998 + span: 2 + span: 38 + } + location: { + path: 4 + path: 18 + path: 2 + path: 6 + path: 4 + span: 998 + span: 2 + span: 10 + } + location: { + path: 4 + path: 18 + path: 2 + path: 6 + path: 5 + span: 998 + span: 11 + span: 17 + } + location: { + path: 4 + path: 18 + path: 2 + path: 6 + path: 1 + span: 998 + span: 18 + span: 33 + } + location: { + path: 4 + path: 18 + path: 2 + path: 6 + path: 3 + span: 998 + span: 36 + span: 37 + } + location: { + path: 4 + path: 19 + span: 1010 + span: 0 + span: 1192 + span: 1 + leading_comments: " TODO Enums in C++ gencode (and potentially other languages) are\n not well scoped. This means that each of the feature enums below can clash\n with each other. The short names we've chosen maximize call-site\n readability, but leave us very open to this scenario. A future feature will\n be designed and implemented to handle this, hopefully before we ever hit a\n conflict here.\n" + leading_detached_comments: " ===================================================================\n Features\n" + } + location: { + path: 4 + path: 19 + path: 1 + span: 1010 + span: 8 + span: 18 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + span: 1011 + span: 2 + span: 1016 + span: 3 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 1 + span: 1011 + span: 7 + span: 20 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 0 + span: 1012 + span: 4 + span: 31 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 1012 + span: 4 + span: 26 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 0 + path: 2 + span: 1012 + span: 29 + span: 30 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 1 + span: 1013 + span: 4 + span: 17 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 1013 + span: 4 + span: 12 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 1 + path: 2 + span: 1013 + span: 15 + span: 16 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 2 + span: 1014 + span: 4 + span: 17 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 1014 + span: 4 + span: 12 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 2 + path: 2 + span: 1014 + span: 15 + span: 16 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 3 + span: 1015 + span: 4 + span: 24 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 1015 + span: 4 + span: 19 + } + location: { + path: 4 + path: 19 + path: 4 + path: 0 + path: 2 + path: 3 + path: 2 + span: 1015 + span: 22 + span: 23 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + span: 1017 + span: 2 + span: 1027 + span: 4 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 4 + span: 1017 + span: 2 + span: 10 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 6 + span: 1017 + span: 11 + span: 24 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 1 + span: 1017 + span: 25 + span: 39 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 3 + span: 1017 + span: 42 + span: 43 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + span: 1017 + span: 44 + span: 1027 + span: 3 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 17 + span: 1018 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 19 + path: 0 + span: 1019 + span: 4 + span: 31 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 19 + path: 1 + span: 1020 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 22 + span: 1021 + span: 4 + span: 1023 + span: 5 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 22 + path: 1 + span: 1022 + span: 6 + span: 38 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 0 + span: 1024 + span: 4 + span: 69 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 0 + path: 3 + span: 1024 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 0 + path: 2 + span: 1024 + span: 50 + span: 67 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 1 + span: 1025 + span: 4 + span: 69 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 1 + path: 3 + span: 1025 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 1 + path: 2 + span: 1025 + span: 50 + span: 67 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 2 + span: 1026 + span: 4 + span: 67 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 2 + path: 3 + span: 1026 + span: 25 + span: 46 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 8 + path: 20 + path: 2 + path: 2 + span: 1026 + span: 48 + span: 65 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + span: 1029 + span: 2 + span: 1033 + span: 3 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 1 + span: 1029 + span: 7 + span: 15 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 0 + span: 1030 + span: 4 + span: 26 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 1030 + span: 4 + span: 21 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 0 + path: 2 + span: 1030 + span: 24 + span: 25 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 1 + span: 1031 + span: 4 + span: 13 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 1031 + span: 4 + span: 8 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 1 + path: 2 + span: 1031 + span: 11 + span: 12 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 2 + span: 1032 + span: 4 + span: 15 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 1032 + span: 4 + span: 10 + } + location: { + path: 4 + path: 19 + path: 4 + path: 1 + path: 2 + path: 2 + path: 2 + span: 1032 + span: 13 + span: 14 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + span: 1034 + span: 2 + span: 1043 + span: 4 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 4 + span: 1034 + span: 2 + span: 10 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 6 + span: 1034 + span: 11 + span: 19 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 1 + span: 1034 + span: 20 + span: 29 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 3 + span: 1034 + span: 32 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + span: 1034 + span: 34 + span: 1043 + span: 3 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 17 + span: 1035 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 19 + path: 0 + span: 1036 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 19 + path: 1 + span: 1037 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 22 + span: 1038 + span: 4 + span: 1040 + span: 5 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 22 + path: 1 + span: 1039 + span: 6 + span: 38 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 20 + path: 0 + span: 1041 + span: 4 + span: 67 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 20 + path: 0 + path: 3 + span: 1041 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 20 + path: 0 + path: 2 + span: 1041 + span: 50 + span: 65 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 20 + path: 1 + span: 1042 + span: 4 + span: 65 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 20 + path: 1 + path: 3 + span: 1042 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 8 + path: 20 + path: 1 + path: 2 + span: 1042 + span: 50 + span: 63 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + span: 1045 + span: 2 + span: 1049 + span: 3 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 1 + span: 1045 + span: 7 + span: 28 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 0 + span: 1046 + span: 4 + span: 40 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 1046 + span: 4 + span: 35 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 0 + path: 2 + span: 1046 + span: 38 + span: 39 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 1 + span: 1047 + span: 4 + span: 15 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 1047 + span: 4 + span: 10 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 1 + path: 2 + span: 1047 + span: 13 + span: 14 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 2 + span: 1048 + span: 4 + span: 17 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 1048 + span: 4 + span: 12 + } + location: { + path: 4 + path: 19 + path: 4 + path: 2 + path: 2 + path: 2 + path: 2 + span: 1048 + span: 15 + span: 16 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + span: 1050 + span: 2 + span: 1059 + span: 4 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 4 + span: 1050 + span: 2 + span: 10 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 6 + span: 1050 + span: 11 + span: 32 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 1 + span: 1050 + span: 33 + span: 56 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 3 + span: 1050 + span: 59 + span: 60 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + span: 1050 + span: 61 + span: 1059 + span: 3 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 17 + span: 1051 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 19 + path: 0 + span: 1052 + span: 4 + span: 31 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 19 + path: 1 + span: 1053 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 22 + span: 1054 + span: 4 + span: 1056 + span: 5 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 22 + path: 1 + span: 1055 + span: 6 + span: 38 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 20 + path: 0 + span: 1057 + span: 4 + span: 69 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 20 + path: 0 + path: 3 + span: 1057 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 20 + path: 0 + path: 2 + span: 1057 + span: 50 + span: 67 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 20 + path: 1 + span: 1058 + span: 4 + span: 67 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 20 + path: 1 + path: 3 + span: 1058 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 2 + path: 8 + path: 20 + path: 1 + path: 2 + span: 1058 + span: 50 + span: 65 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + span: 1061 + span: 2 + span: 1066 + span: 3 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 1 + span: 1061 + span: 7 + span: 21 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 0 + span: 1062 + span: 4 + span: 32 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 1062 + span: 4 + span: 27 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 0 + path: 2 + span: 1062 + span: 30 + span: 31 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 1 + span: 1063 + span: 4 + span: 15 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 1063 + span: 4 + span: 10 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 1 + path: 2 + span: 1063 + span: 13 + span: 14 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 2 + span: 1064 + span: 4 + span: 13 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 2 + path: 1 + span: 1064 + span: 4 + span: 8 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 2 + path: 2 + path: 2 + span: 1064 + span: 11 + span: 12 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 4 + span: 1065 + span: 4 + span: 15 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 4 + path: 0 + span: 1065 + span: 13 + span: 14 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 4 + path: 0 + path: 1 + span: 1065 + span: 13 + span: 14 + } + location: { + path: 4 + path: 19 + path: 4 + path: 3 + path: 4 + path: 0 + path: 2 + span: 1065 + span: 13 + span: 14 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + span: 1067 + span: 2 + span: 1076 + span: 4 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 4 + span: 1067 + span: 2 + span: 10 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 6 + span: 1067 + span: 11 + span: 25 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 1 + span: 1067 + span: 26 + span: 41 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 3 + span: 1067 + span: 44 + span: 45 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + span: 1067 + span: 46 + span: 1076 + span: 3 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 17 + span: 1068 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 19 + path: 0 + span: 1069 + span: 4 + span: 31 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 19 + path: 1 + span: 1070 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 22 + span: 1071 + span: 4 + span: 1073 + span: 5 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 22 + path: 1 + span: 1072 + span: 6 + span: 38 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 20 + path: 0 + span: 1074 + span: 4 + span: 65 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 20 + path: 0 + path: 3 + span: 1074 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 20 + path: 0 + path: 2 + span: 1074 + span: 50 + span: 63 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 20 + path: 1 + span: 1075 + span: 4 + span: 67 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 20 + path: 1 + path: 3 + span: 1075 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 3 + path: 8 + path: 20 + path: 1 + path: 2 + span: 1075 + span: 50 + span: 65 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + span: 1078 + span: 2 + span: 1082 + span: 3 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 1 + span: 1078 + span: 7 + span: 22 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 0 + span: 1079 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 1079 + span: 4 + span: 28 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 0 + path: 2 + span: 1079 + span: 31 + span: 32 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 1 + span: 1080 + span: 4 + span: 24 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 1 + path: 1 + span: 1080 + span: 4 + span: 19 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 1 + path: 2 + span: 1080 + span: 22 + span: 23 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 2 + span: 1081 + span: 4 + span: 18 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 2 + path: 1 + span: 1081 + span: 4 + span: 13 + } + location: { + path: 4 + path: 19 + path: 4 + path: 4 + path: 2 + path: 2 + path: 2 + span: 1081 + span: 16 + span: 17 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + span: 1083 + span: 2 + span: 1091 + span: 4 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 4 + span: 1083 + span: 2 + span: 10 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 6 + span: 1083 + span: 11 + span: 26 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 1 + span: 1083 + span: 27 + span: 43 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 3 + span: 1083 + span: 46 + span: 47 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + span: 1083 + span: 48 + span: 1091 + span: 3 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + path: 17 + span: 1084 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + path: 19 + path: 0 + span: 1085 + span: 4 + span: 31 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + path: 19 + path: 1 + span: 1086 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + path: 22 + span: 1087 + span: 4 + span: 1089 + span: 5 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + path: 22 + path: 1 + span: 1088 + span: 6 + span: 38 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + path: 20 + path: 0 + span: 1090 + span: 4 + span: 76 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + path: 20 + path: 0 + path: 3 + span: 1090 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 4 + path: 8 + path: 20 + path: 0 + path: 2 + span: 1090 + span: 50 + span: 74 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + span: 1093 + span: 2 + span: 1097 + span: 3 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 1 + span: 1093 + span: 7 + span: 17 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 0 + span: 1094 + span: 4 + span: 28 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 1094 + span: 4 + span: 23 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 0 + path: 2 + span: 1094 + span: 26 + span: 27 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 1 + span: 1095 + span: 4 + span: 14 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 1 + path: 1 + span: 1095 + span: 4 + span: 9 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 1 + path: 2 + span: 1095 + span: 12 + span: 13 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 2 + span: 1096 + span: 4 + span: 27 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 2 + path: 1 + span: 1096 + span: 4 + span: 22 + } + location: { + path: 4 + path: 19 + path: 4 + path: 5 + path: 2 + path: 2 + path: 2 + span: 1096 + span: 25 + span: 26 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + span: 1098 + span: 2 + span: 1108 + span: 4 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 4 + span: 1098 + span: 2 + span: 10 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 6 + span: 1098 + span: 11 + span: 21 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 1 + span: 1098 + span: 22 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 3 + span: 1098 + span: 36 + span: 37 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + span: 1098 + span: 38 + span: 1108 + span: 3 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 17 + span: 1099 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 19 + path: 0 + span: 1100 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 19 + path: 1 + span: 1101 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 19 + path: 2 + span: 1102 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 22 + span: 1103 + span: 4 + span: 1105 + span: 5 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 22 + path: 1 + span: 1104 + span: 6 + span: 38 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 20 + path: 0 + span: 1106 + span: 4 + span: 79 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 20 + path: 0 + path: 3 + span: 1106 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 20 + path: 0 + path: 2 + span: 1106 + span: 50 + span: 77 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 20 + path: 1 + span: 1107 + span: 4 + span: 66 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 20 + path: 1 + path: 3 + span: 1107 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 5 + path: 8 + path: 20 + path: 1 + path: 2 + span: 1107 + span: 50 + span: 64 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + span: 1110 + span: 2 + span: 1114 + span: 3 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 1 + span: 1110 + span: 7 + span: 25 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 0 + span: 1111 + span: 4 + span: 37 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 1111 + span: 4 + span: 32 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 0 + path: 2 + span: 1111 + span: 35 + span: 36 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 1 + span: 1112 + span: 4 + span: 18 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 1112 + span: 4 + span: 13 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 1 + path: 2 + span: 1112 + span: 16 + span: 17 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 2 + span: 1113 + span: 4 + span: 21 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 2 + path: 1 + span: 1113 + span: 4 + span: 16 + } + location: { + path: 4 + path: 19 + path: 4 + path: 6 + path: 2 + path: 2 + path: 2 + span: 1113 + span: 19 + span: 20 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + span: 1115 + span: 2 + span: 1131 + span: 4 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 4 + span: 1115 + span: 2 + span: 10 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 6 + span: 1115 + span: 11 + span: 29 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 1 + span: 1115 + span: 30 + span: 50 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 3 + span: 1115 + span: 53 + span: 54 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + span: 1115 + span: 55 + span: 1131 + span: 3 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 17 + span: 1116 + span: 4 + span: 32 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 0 + span: 1117 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 1 + span: 1118 + span: 4 + span: 41 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 2 + span: 1119 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 3 + span: 1120 + span: 4 + span: 31 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 4 + span: 1121 + span: 4 + span: 31 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 5 + span: 1122 + span: 4 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 6 + span: 1123 + span: 4 + span: 36 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 7 + span: 1124 + span: 4 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 19 + path: 8 + span: 1125 + span: 4 + span: 32 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 22 + span: 1126 + span: 4 + span: 1128 + span: 5 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 22 + path: 1 + span: 1127 + span: 6 + span: 38 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 20 + path: 0 + span: 1129 + span: 4 + span: 73 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 20 + path: 0 + path: 3 + span: 1129 + span: 25 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 20 + path: 0 + path: 2 + span: 1129 + span: 50 + span: 71 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 20 + path: 1 + span: 1130 + span: 4 + span: 68 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 20 + path: 1 + path: 3 + span: 1130 + span: 25 + span: 46 + } + location: { + path: 4 + path: 19 + path: 2 + path: 6 + path: 8 + path: 20 + path: 1 + path: 2 + span: 1130 + span: 48 + span: 66 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + span: 1133 + span: 2 + span: 1152 + span: 3 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 1 + span: 1133 + span: 10 + span: 27 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + span: 1134 + span: 4 + span: 1150 + span: 5 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 1 + span: 1134 + span: 9 + span: 32 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 0 + span: 1135 + span: 6 + span: 44 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 1135 + span: 6 + span: 39 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 0 + path: 2 + span: 1135 + span: 42 + span: 43 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 1 + span: 1138 + span: 6 + span: 21 + leading_comments: " Default pre-EDITION_2024, all UNSET visibility are export.\n" + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 1138 + span: 6 + span: 16 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 1 + path: 2 + span: 1138 + span: 19 + span: 20 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 2 + span: 1141 + span: 6 + span: 27 + leading_comments: " All top-level symbols default to export, nested default to local.\n" + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 1141 + span: 6 + span: 22 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 2 + path: 2 + span: 1141 + span: 25 + span: 26 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 3 + span: 1144 + span: 6 + span: 20 + leading_comments: " All symbols default to local.\n" + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 1144 + span: 6 + span: 15 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 3 + path: 2 + span: 1144 + span: 18 + span: 19 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 4 + span: 1149 + span: 6 + span: 17 + leading_comments: " All symbols local by default. Nested types cannot be exported.\n With special case caveat for message { enum {} reserved 1 to max; }\n This is the recommended setting for new protos.\n" + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 1149 + span: 6 + span: 12 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 4 + path: 2 + span: 1149 + span: 15 + span: 16 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 9 + span: 1151 + span: 4 + span: 22 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 9 + path: 0 + span: 1151 + span: 13 + span: 21 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 9 + path: 0 + path: 1 + span: 1151 + span: 13 + span: 14 + } + location: { + path: 4 + path: 19 + path: 3 + path: 0 + path: 9 + path: 0 + path: 2 + span: 1151 + span: 18 + span: 21 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + span: 1153 + span: 2 + span: 1162 + span: 8 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 4 + span: 1153 + span: 2 + span: 10 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 6 + span: 1153 + span: 11 + span: 52 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 1 + span: 1153 + span: 53 + span: 78 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 3 + span: 1154 + span: 6 + span: 7 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + span: 1154 + span: 8 + span: 1162 + span: 7 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 17 + span: 1155 + span: 8 + span: 36 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 19 + path: 0 + span: 1156 + span: 8 + span: 34 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 22 + span: 1157 + span: 8 + span: 1159 + span: 9 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 22 + path: 1 + span: 1158 + span: 10 + span: 42 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 20 + path: 0 + span: 1160 + span: 8 + span: 75 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 20 + path: 0 + path: 3 + span: 1160 + span: 29 + span: 52 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 20 + path: 0 + path: 2 + span: 1160 + span: 54 + span: 73 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 20 + path: 1 + span: 1161 + span: 8 + span: 79 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 20 + path: 1 + path: 3 + span: 1161 + span: 29 + span: 50 + } + location: { + path: 4 + path: 19 + path: 2 + path: 7 + path: 8 + path: 20 + path: 1 + path: 2 + span: 1161 + span: 52 + span: 77 + } + location: { + path: 4 + path: 19 + path: 9 + span: 1164 + span: 2 + span: 15 + } + location: { + path: 4 + path: 19 + path: 9 + path: 0 + span: 1164 + span: 11 + span: 14 + } + location: { + path: 4 + path: 19 + path: 9 + path: 0 + path: 1 + span: 1164 + span: 11 + span: 14 + } + location: { + path: 4 + path: 19 + path: 9 + path: 0 + path: 2 + span: 1164 + span: 11 + span: 14 + } + location: { + path: 4 + path: 19 + path: 5 + span: 1166 + span: 2 + span: 1188 + span: 4 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + span: 1166 + span: 13 + span: 25 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 1 + span: 1166 + span: 13 + span: 17 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 2 + span: 1166 + span: 21 + span: 25 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + span: 1166 + span: 26 + span: 1188 + span: 3 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + span: 1167 + span: 4 + span: 1171 + span: 5 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 1 + span: 1168 + span: 6 + span: 18 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 2 + span: 1169 + span: 6 + span: 26 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 3 + span: 1170 + span: 6 + span: 29 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 1 + span: 1172 + span: 4 + span: 1176 + span: 5 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 1 + path: 1 + span: 1173 + span: 6 + span: 18 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 1 + path: 2 + span: 1174 + span: 6 + span: 27 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 1 + path: 3 + span: 1175 + span: 6 + span: 30 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 2 + span: 1177 + span: 4 + span: 79 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 2 + path: 1 + span: 1177 + span: 20 + span: 32 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 2 + path: 2 + span: 1177 + span: 34 + span: 53 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 2 + path: 3 + span: 1177 + span: 55 + span: 77 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 3 + span: 1178 + span: 4 + span: 1182 + span: 5 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 3 + path: 1 + span: 1179 + span: 6 + span: 18 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 3 + path: 2 + span: 1180 + span: 6 + span: 29 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 3 + path: 3 + span: 1181 + span: 6 + span: 32 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 4 + span: 1183 + span: 4 + span: 1187 + span: 5 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 4 + path: 1 + span: 1184 + span: 6 + span: 18 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 4 + path: 2 + span: 1185 + span: 6 + span: 29 + } + location: { + path: 4 + path: 19 + path: 5 + path: 0 + path: 3 + path: 2 + path: 4 + path: 3 + span: 1186 + span: 6 + span: 32 + } + location: { + path: 4 + path: 19 + path: 5 + span: 1190 + span: 2 + span: 26 + trailing_comments: " For internal testing\n" + } + location: { + path: 4 + path: 19 + path: 5 + path: 1 + span: 1190 + span: 13 + span: 25 + } + location: { + path: 4 + path: 19 + path: 5 + path: 1 + path: 1 + span: 1190 + span: 13 + span: 17 + } + location: { + path: 4 + path: 19 + path: 5 + path: 1 + path: 2 + span: 1190 + span: 21 + span: 25 + } + location: { + path: 4 + path: 19 + path: 5 + span: 1191 + span: 2 + span: 19 + trailing_comments: " for https://github.com/bufbuild/protobuf-es\n" + } + location: { + path: 4 + path: 19 + path: 5 + path: 2 + span: 1191 + span: 13 + span: 18 + } + location: { + path: 4 + path: 19 + path: 5 + path: 2 + path: 1 + span: 1191 + span: 13 + span: 18 + } + location: { + path: 4 + path: 19 + path: 5 + path: 2 + path: 2 + span: 1191 + span: 13 + span: 18 + } + location: { + path: 4 + path: 20 + span: 1198 + span: 0 + span: 1224 + span: 1 + leading_comments: " A compiled specification for the defaults of a set of features. These\n messages are generated from FeatureSet extensions and can be used to seed\n feature resolution. The resolution with this object becomes a simple search\n for the closest matching edition, followed by proto merges.\n" + } + location: { + path: 4 + path: 20 + path: 1 + span: 1198 + span: 8 + span: 26 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + span: 1203 + span: 2 + span: 1214 + span: 3 + leading_comments: " A map from every known edition with a unique set of defaults to its\n defaults. Not all editions may be contained here. For a given edition,\n the defaults at the closest matching edition ordered at or before it should\n be used. This field must be in strict ascending order by edition.\n" + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 1 + span: 1203 + span: 10 + span: 34 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 0 + span: 1204 + span: 4 + span: 33 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 0 + path: 4 + span: 1204 + span: 4 + span: 12 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 0 + path: 6 + span: 1204 + span: 13 + span: 20 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 1204 + span: 21 + span: 28 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 1204 + span: 31 + span: 32 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 1 + span: 1207 + span: 4 + span: 49 + leading_comments: " Defaults of features that can be overridden in this edition.\n" + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 1 + path: 4 + span: 1207 + span: 4 + span: 12 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 1 + path: 6 + span: 1207 + span: 13 + span: 23 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 1207 + span: 24 + span: 44 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 1207 + span: 47 + span: 48 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 2 + span: 1210 + span: 4 + span: 43 + leading_comments: " Defaults of features that can't be overridden in this edition.\n" + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 2 + path: 4 + span: 1210 + span: 4 + span: 12 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 2 + path: 6 + span: 1210 + span: 13 + span: 23 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 2 + path: 1 + span: 1210 + span: 24 + span: 38 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 2 + path: 2 + path: 3 + span: 1210 + span: 41 + span: 42 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 9 + span: 1212 + span: 4 + span: 18 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 9 + path: 0 + span: 1212 + span: 13 + span: 14 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 9 + path: 0 + path: 1 + span: 1212 + span: 13 + span: 14 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 9 + path: 0 + path: 2 + span: 1212 + span: 13 + span: 14 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 9 + path: 1 + span: 1212 + span: 16 + span: 17 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 9 + path: 1 + path: 1 + span: 1212 + span: 16 + span: 17 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 9 + path: 1 + path: 2 + span: 1212 + span: 16 + span: 17 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 10 + span: 1213 + span: 4 + span: 24 + } + location: { + path: 4 + path: 20 + path: 3 + path: 0 + path: 10 + path: 0 + span: 1213 + span: 13 + span: 23 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + span: 1215 + span: 2 + span: 49 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 4 + span: 1215 + span: 2 + span: 10 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 6 + span: 1215 + span: 11 + span: 35 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 1 + span: 1215 + span: 36 + span: 44 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 3 + span: 1215 + span: 47 + span: 48 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + span: 1219 + span: 2 + span: 39 + leading_comments: " The minimum supported edition (inclusive) when this was constructed.\n Editions before this will not have defaults.\n" + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 4 + span: 1219 + span: 2 + span: 10 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 6 + span: 1219 + span: 11 + span: 18 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 1 + span: 1219 + span: 19 + span: 34 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 3 + span: 1219 + span: 37 + span: 38 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + span: 1223 + span: 2 + span: 39 + leading_comments: " The maximum known edition (inclusive) when this was constructed. Editions\n after this will not have reliable defaults.\n" + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 4 + span: 1223 + span: 2 + span: 10 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 6 + span: 1223 + span: 11 + span: 18 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 1 + span: 1223 + span: 19 + span: 34 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 3 + span: 1223 + span: 37 + span: 38 + } + location: { + path: 4 + path: 21 + span: 1231 + span: 0 + span: 1367 + span: 1 + leading_comments: " Encapsulates information about the original source file from which a\n FileDescriptorProto was generated.\n" + leading_detached_comments: " ===================================================================\n Optional source code info\n" + } + location: { + path: 4 + path: 21 + path: 1 + span: 1231 + span: 8 + span: 22 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + span: 1275 + span: 2 + span: 33 + leading_comments: " A Location identifies a piece of source code in a .proto file which\n corresponds to a particular definition. This information is intended\n to be useful to IDEs, code indexers, documentation generators, and similar\n tools.\n\n For example, say we have a file like:\n message Foo {\n optional string foo = 1;\n }\n Let's look at just the field definition:\n optional string foo = 1;\n ^ ^^ ^^ ^ ^^^\n a bc de f ghi\n We have the following locations:\n span path represents\n [a,i) [ 4, 0, 2, 0 ] The whole field definition.\n [a,b) [ 4, 0, 2, 0, 4 ] The label (optional).\n [c,d) [ 4, 0, 2, 0, 5 ] The type (string).\n [e,f) [ 4, 0, 2, 0, 1 ] The name (foo).\n [g,h) [ 4, 0, 2, 0, 3 ] The number (1).\n\n Notes:\n - A location may refer to a repeated field itself (i.e. not to any\n particular index within it). This is used whenever a set of elements are\n logically enclosed in a single code segment. For example, an entire\n extend block (possibly containing multiple extension definitions) will\n have an outer location whose path refers to the \"extensions\" repeated\n field without an index.\n - Multiple locations may have the same path. This happens when a single\n logical declaration is spread out across multiple places. The most\n obvious example is the \"extend\" block again -- there may be multiple\n extend blocks in the same scope, each of which will have the same path.\n - A location's span is not always a subset of its parent's span. For\n example, the \"extendee\" of an extension declaration appears at the\n beginning of the \"extend\" block and is shared by all extensions within\n the block.\n - Just because a location's span is a subset of some other location's span\n does not mean that it is a descendant. For example, a \"group\" defines\n both a type and a field in a single declaration. Thus, the locations\n corresponding to the type and field and their components will overlap.\n - Code which tries to interpret locations should probably be designed to\n ignore those that it doesn't understand, as more types of locations could\n be recorded in the future.\n" + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 4 + span: 1275 + span: 2 + span: 10 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 6 + span: 1275 + span: 11 + span: 19 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 1 + span: 1275 + span: 20 + span: 28 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 3 + span: 1275 + span: 31 + span: 32 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + span: 1276 + span: 2 + span: 1359 + span: 3 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 1 + span: 1276 + span: 10 + span: 18 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 0 + span: 1300 + span: 4 + span: 44 + leading_comments: " Identifies which part of the FileDescriptorProto was defined at this\n location.\n\n Each element is a field number or an index. They form a path from\n the root FileDescriptorProto to the place where the definition appears.\n For example, this path:\n [ 4, 3, 2, 7, 1 ]\n refers to:\n file.message_type(3) // 4, 3\n .field(7) // 2, 7\n .name() // 1\n This is because FileDescriptorProto.message_type has field number 4:\n repeated DescriptorProto message_type = 4;\n and DescriptorProto.field has field number 2:\n repeated FieldDescriptorProto field = 2;\n and FieldDescriptorProto.name has field number 1:\n optional string name = 1;\n\n Thus, the above path gives the location of a field name. If we removed\n the last element:\n [ 4, 3, 2, 7 ]\n this path refers to the whole field declaration (from the beginning\n of the label to the terminating semicolon).\n" + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 0 + path: 4 + span: 1300 + span: 4 + span: 12 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 0 + path: 5 + span: 1300 + span: 13 + span: 18 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 1300 + span: 19 + span: 23 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 1300 + span: 26 + span: 27 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 0 + path: 8 + span: 1300 + span: 28 + span: 43 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 0 + path: 8 + path: 2 + span: 1300 + span: 29 + span: 42 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 1 + span: 1307 + span: 4 + span: 44 + leading_comments: " Always has exactly three or four elements: start line, start column,\n end line (optional, otherwise assumed same as start line), end column.\n These are packed into a single field for efficiency. Note that line\n and column numbers are zero-based -- typically you will want to add\n 1 to each before displaying to a user.\n" + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 1 + path: 4 + span: 1307 + span: 4 + span: 12 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 1 + path: 5 + span: 1307 + span: 13 + span: 18 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 1307 + span: 19 + span: 23 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 1307 + span: 26 + span: 27 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 1 + path: 8 + span: 1307 + span: 28 + span: 43 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 1 + path: 8 + path: 2 + span: 1307 + span: 29 + span: 42 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 2 + span: 1356 + span: 4 + span: 41 + leading_comments: " If this SourceCodeInfo represents a complete declaration, these are any\n comments appearing before and after the declaration which appear to be\n attached to the declaration.\n\n A series of line comments appearing on consecutive lines, with no other\n tokens appearing on those lines, will be treated as a single comment.\n\n leading_detached_comments will keep paragraphs of comments that appear\n before (but not connected to) the current element. Each paragraph,\n separated by empty lines, will be one comment element in the repeated\n field.\n\n Only the comment content is provided; comment markers (e.g. //) are\n stripped out. For block comments, leading whitespace and an asterisk\n will be stripped from the beginning of each line other than the first.\n Newlines are included in the output.\n\n Examples:\n\n optional int32 foo = 1; // Comment attached to foo.\n // Comment attached to bar.\n optional int32 bar = 2;\n\n optional string baz = 3;\n // Comment attached to baz.\n // Another line attached to baz.\n\n // Comment attached to moo.\n //\n // Another line attached to moo.\n optional double moo = 4;\n\n // Detached comment for corge. This is not leading or trailing comments\n // to moo or corge because there are blank lines separating it from\n // both.\n\n // Detached comment for corge paragraph 2.\n\n optional string corge = 5;\n /* Block comment attached\n * to corge. Leading asterisks\n * will be removed. */\n /* Block comment attached to\n * grault. */\n optional int32 grault = 6;\n\n // ignored detached comments.\n" + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 2 + path: 4 + span: 1356 + span: 4 + span: 12 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 2 + path: 5 + span: 1356 + span: 13 + span: 19 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 2 + path: 1 + span: 1356 + span: 20 + span: 36 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 2 + path: 3 + span: 1356 + span: 39 + span: 40 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 3 + span: 1357 + span: 4 + span: 42 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 3 + path: 4 + span: 1357 + span: 4 + span: 12 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 3 + path: 5 + span: 1357 + span: 13 + span: 19 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 3 + path: 1 + span: 1357 + span: 20 + span: 37 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 3 + path: 3 + span: 1357 + span: 40 + span: 41 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 4 + span: 1358 + span: 4 + span: 50 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 4 + path: 4 + span: 1358 + span: 4 + span: 12 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 4 + path: 5 + span: 1358 + span: 13 + span: 19 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 4 + path: 1 + span: 1358 + span: 20 + span: 45 + } + location: { + path: 4 + path: 21 + path: 3 + path: 0 + path: 2 + path: 4 + path: 3 + span: 1358 + span: 48 + span: 49 + } + location: { + path: 4 + path: 21 + path: 5 + span: 1362 + span: 2 + span: 1366 + span: 5 + leading_comments: " Extensions for tooling.\n" + } + location: { + path: 4 + path: 21 + path: 5 + path: 0 + span: 1362 + span: 13 + span: 22 + } + location: { + path: 4 + path: 21 + path: 5 + path: 0 + path: 1 + span: 1362 + span: 13 + span: 22 + } + location: { + path: 4 + path: 21 + path: 5 + path: 0 + path: 2 + span: 1362 + span: 13 + span: 22 + } + location: { + path: 4 + path: 21 + path: 5 + path: 0 + path: 3 + span: 1362 + span: 23 + span: 1366 + span: 4 + } + location: { + path: 4 + path: 21 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + span: 1362 + span: 24 + span: 1366 + span: 3 + } + location: { + path: 4 + path: 21 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 1 + span: 1363 + span: 4 + span: 21 + } + location: { + path: 4 + path: 21 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 3 + span: 1364 + span: 4 + span: 54 + } + location: { + path: 4 + path: 21 + path: 5 + path: 0 + path: 3 + path: 2 + path: 0 + path: 2 + span: 1365 + span: 4 + span: 66 + } + location: { + path: 4 + path: 22 + span: 1372 + span: 0 + span: 1405 + span: 1 + leading_comments: " Describes the relationship between generated code and its original source\n file. A GeneratedCodeInfo message is associated with only one generated\n source file, but may contain references to different source .proto files.\n" + } + location: { + path: 4 + path: 22 + path: 1 + span: 1372 + span: 8 + span: 25 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + span: 1375 + span: 2 + span: 37 + leading_comments: " An Annotation connects some span of text in generated code to an element\n of its generating .proto file.\n" + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 4 + span: 1375 + span: 2 + span: 10 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 6 + span: 1375 + span: 11 + span: 21 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 1 + span: 1375 + span: 22 + span: 32 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 3 + span: 1375 + span: 35 + span: 36 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + span: 1376 + span: 2 + span: 1404 + span: 3 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 1 + span: 1376 + span: 10 + span: 20 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 0 + span: 1379 + span: 4 + span: 44 + leading_comments: " Identifies the element in the original source .proto file. This field\n is formatted the same as SourceCodeInfo.Location.path.\n" + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 0 + path: 4 + span: 1379 + span: 4 + span: 12 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 0 + path: 5 + span: 1379 + span: 13 + span: 18 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 1379 + span: 19 + span: 23 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 1379 + span: 26 + span: 27 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 0 + path: 8 + span: 1379 + span: 28 + span: 43 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 0 + path: 8 + path: 2 + span: 1379 + span: 29 + span: 42 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 1 + span: 1382 + span: 4 + span: 36 + leading_comments: " Identifies the filesystem path to the original source .proto.\n" + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 1 + path: 4 + span: 1382 + span: 4 + span: 12 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 1 + path: 5 + span: 1382 + span: 13 + span: 19 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 1382 + span: 20 + span: 31 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 1382 + span: 34 + span: 35 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 2 + span: 1386 + span: 4 + span: 29 + leading_comments: " Identifies the starting offset in bytes in the generated code\n that relates to the identified object.\n" + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 2 + path: 4 + span: 1386 + span: 4 + span: 12 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 2 + path: 5 + span: 1386 + span: 13 + span: 18 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 2 + path: 1 + span: 1386 + span: 19 + span: 24 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 2 + path: 3 + span: 1386 + span: 27 + span: 28 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 3 + span: 1391 + span: 4 + span: 27 + leading_comments: " Identifies the ending offset in bytes in the generated code that\n relates to the identified object. The end offset should be one past\n the last relevant byte (so the length of the text = end - begin).\n" + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 3 + path: 4 + span: 1391 + span: 4 + span: 12 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 3 + path: 5 + span: 1391 + span: 13 + span: 18 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 3 + path: 1 + span: 1391 + span: 19 + span: 22 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 3 + path: 3 + span: 1391 + span: 25 + span: 26 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + span: 1395 + span: 4 + span: 1402 + span: 5 + leading_comments: " Represents the identified object's effect on the element in the original\n .proto file.\n" + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 1 + span: 1395 + span: 9 + span: 17 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 0 + span: 1397 + span: 6 + span: 15 + leading_comments: " There is no effect or the effect is indescribable.\n" + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 1397 + span: 6 + span: 10 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 0 + path: 2 + span: 1397 + span: 13 + span: 14 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 1 + span: 1399 + span: 6 + span: 14 + leading_comments: " The element is set or otherwise mutated.\n" + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 1399 + span: 6 + span: 9 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 1 + path: 2 + span: 1399 + span: 12 + span: 13 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 2 + span: 1401 + span: 6 + span: 16 + leading_comments: " An alias to the element is returned.\n" + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 1401 + span: 6 + span: 11 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 4 + path: 0 + path: 2 + path: 2 + path: 2 + span: 1401 + span: 14 + span: 15 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 4 + span: 1403 + span: 4 + span: 35 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 4 + path: 4 + span: 1403 + span: 4 + span: 12 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 4 + path: 6 + span: 1403 + span: 13 + span: 21 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 4 + path: 1 + span: 1403 + span: 22 + span: 30 + } + location: { + path: 4 + path: 22 + path: 3 + path: 0 + path: 2 + path: 4 + path: 3 + span: 1403 + span: 33 + span: 34 + } + location: { + path: 5 + path: 1 + span: 1412 + span: 0 + span: 1416 + span: 1 + leading_comments: " Describes the 'visibility' of a symbol with respect to the proto import\n system. Symbols can only be imported when the visibility rules do not prevent\n it (ex: local symbols cannot be imported). Visibility modifiers can only set\n on `message` and `enum` as they are the only types available to be referenced\n from other files.\n" + } + location: { + path: 5 + path: 1 + path: 1 + span: 1412 + span: 5 + span: 21 + } + location: { + path: 5 + path: 1 + path: 2 + path: 0 + span: 1413 + span: 2 + span: 23 + } + location: { + path: 5 + path: 1 + path: 2 + path: 0 + path: 1 + span: 1413 + span: 2 + span: 18 + } + location: { + path: 5 + path: 1 + path: 2 + path: 0 + path: 2 + span: 1413 + span: 21 + span: 22 + } + location: { + path: 5 + path: 1 + path: 2 + path: 1 + span: 1414 + span: 2 + span: 23 + } + location: { + path: 5 + path: 1 + path: 2 + path: 1 + path: 1 + span: 1414 + span: 2 + span: 18 + } + location: { + path: 5 + path: 1 + path: 2 + path: 1 + path: 2 + span: 1414 + span: 21 + span: 22 + } + location: { + path: 5 + path: 1 + path: 2 + path: 2 + span: 1415 + span: 2 + span: 24 + } + location: { + path: 5 + path: 1 + path: 2 + path: 2 + path: 1 + span: 1415 + span: 2 + span: 19 + } + location: { + path: 5 + path: 1 + path: 2 + path: 2 + path: 2 + span: 1415 + span: 22 + span: 23 + } + } + buf_extension: { + is_import: true + is_syntax_unspecified: false + } +} +file: { + name: "types/fieldpath.proto" + package: "containerd.types" + dependency: "google/protobuf/descriptor.proto" + extension: { + name: "fieldpath_all" + number: 63300 + label: LABEL_OPTIONAL + type: TYPE_BOOL + extendee: ".google.protobuf.FileOptions" + json_name: "fieldpathAll" + proto3_optional: true + } + extension: { + name: "fieldpath" + number: 64400 + label: LABEL_OPTIONAL + type: TYPE_BOOL + extendee: ".google.protobuf.MessageOptions" + json_name: "fieldpath" + proto3_optional: true + } + options: { + go_package: "github.com/containerd/containerd/api/types;types" + } + source_code_info: { + location: { + span: 28 + span: 0 + span: 41 + span: 1 + } + location: { + path: 12 + span: 28 + span: 0 + span: 18 + leading_detached_comments: " Protocol Buffers for Go with Gadgets\n\n Copyright (c) 2013, The GoGo Authors. All rights reserved.\n http://github.com/gogo/protobuf\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following disclaimer\n in the documentation and/or other materials provided with the\n distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" + } + location: { + path: 2 + span: 29 + span: 0 + span: 25 + } + location: { + path: 3 + path: 0 + span: 31 + span: 0 + span: 42 + } + location: { + path: 8 + span: 33 + span: 0 + span: 71 + } + location: { + path: 8 + path: 11 + span: 33 + span: 0 + span: 71 + } + location: { + path: 7 + span: 35 + span: 0 + span: 37 + span: 1 + } + location: { + path: 7 + path: 0 + span: 36 + span: 8 + span: 44 + } + location: { + path: 7 + path: 0 + path: 2 + span: 35 + span: 7 + span: 34 + } + location: { + path: 7 + path: 0 + path: 4 + span: 36 + span: 8 + span: 16 + } + location: { + path: 7 + path: 0 + path: 5 + span: 36 + span: 17 + span: 21 + } + location: { + path: 7 + path: 0 + path: 1 + span: 36 + span: 22 + span: 35 + } + location: { + path: 7 + path: 0 + path: 3 + span: 36 + span: 38 + span: 43 + } + location: { + path: 7 + span: 39 + span: 0 + span: 41 + span: 1 + } + location: { + path: 7 + path: 1 + span: 40 + span: 8 + span: 40 + } + location: { + path: 7 + path: 1 + path: 2 + span: 39 + span: 7 + span: 37 + } + location: { + path: 7 + path: 1 + path: 4 + span: 40 + span: 8 + span: 16 + } + location: { + path: 7 + path: 1 + path: 5 + span: 40 + span: 17 + span: 21 + } + location: { + path: 7 + path: 1 + path: 1 + span: 40 + span: 22 + span: 31 + } + location: { + path: 7 + path: 1 + path: 3 + span: 40 + span: 34 + span: 39 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "events/container.proto" + package: "containerd.events" + dependency: "google/protobuf/any.proto" + dependency: "types/fieldpath.proto" + message_type: { + name: "ContainerCreate" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "image" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "image" + } + field: { + name: "runtime" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.events.ContainerCreate.Runtime" + json_name: "runtime" + } + nested_type: { + name: "Runtime" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "options" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + } + message_type: { + name: "ContainerUpdate" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "image" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "image" + } + field: { + name: "labels" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.events.ContainerUpdate.LabelsEntry" + json_name: "labels" + } + field: { + name: "snapshot_key" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotKey" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ContainerDelete" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + options: { + go_package: "github.com/containerd/containerd/api/events;events" + [containerd.types.fieldpath_all]: true + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 45 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 26 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 31 + } + location: { + path: 8 + span: 23 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 73 + } + location: { + path: 8 + span: 24 + span: 0 + span: 47 + } + location: { + path: 8 + path: 63300 + span: 24 + span: 0 + span: 47 + } + location: { + path: 4 + path: 0 + span: 26 + span: 0 + span: 34 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 26 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 27 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 27 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 27 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 27 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 28 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 28 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 28 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 28 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + span: 29 + span: 8 + span: 32 + span: 9 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 1 + span: 29 + span: 16 + span: 23 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 0 + span: 30 + span: 16 + span: 32 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 0 + path: 5 + span: 30 + span: 16 + span: 22 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 30 + span: 23 + span: 27 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 30 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 1 + span: 31 + span: 16 + span: 48 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 1 + path: 6 + span: 31 + span: 16 + span: 35 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 31 + span: 36 + span: 43 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 31 + span: 46 + span: 47 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 33 + span: 8 + span: 28 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 33 + span: 8 + span: 15 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 33 + span: 16 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 33 + span: 26 + span: 27 + } + location: { + path: 4 + path: 1 + span: 36 + span: 0 + span: 41 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 36 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 37 + span: 8 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 37 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 37 + span: 15 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 37 + span: 20 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 38 + span: 8 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 38 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 38 + span: 15 + span: 20 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 38 + span: 23 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + span: 39 + span: 8 + span: 40 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 6 + span: 39 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 39 + span: 28 + span: 34 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 3 + span: 39 + span: 38 + span: 39 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + span: 40 + span: 8 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 5 + span: 40 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 1 + span: 40 + span: 15 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 3 + span: 40 + span: 30 + span: 31 + } + location: { + path: 4 + path: 2 + span: 43 + span: 0 + span: 45 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 43 + span: 8 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 44 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 44 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 44 + span: 15 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 44 + span: 20 + span: 21 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "events/content.proto" + package: "containerd.events" + dependency: "types/fieldpath.proto" + message_type: { + name: "ContentCreate" + field: { + name: "digest" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "digest" + } + field: { + name: "size" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "size" + } + } + message_type: { + name: "ContentDelete" + field: { + name: "digest" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "digest" + } + } + options: { + go_package: "github.com/containerd/containerd/api/events;events" + [containerd.types.fieldpath_all]: true + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 32 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 26 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 31 + } + location: { + path: 8 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + span: 23 + span: 0 + span: 47 + } + location: { + path: 8 + path: 63300 + span: 23 + span: 0 + span: 47 + } + location: { + path: 4 + path: 0 + span: 25 + span: 0 + span: 28 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 25 + span: 8 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 26 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 26 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 26 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 26 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 27 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 27 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 27 + span: 14 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 27 + span: 21 + span: 22 + } + location: { + path: 4 + path: 1 + span: 30 + span: 0 + span: 32 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 30 + span: 8 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 31 + span: 8 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 31 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 31 + span: 15 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 31 + span: 24 + span: 25 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "events/image.proto" + package: "containerd.services.images.v1" + dependency: "types/fieldpath.proto" + message_type: { + name: "ImageCreate" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "labels" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.ImageCreate.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ImageUpdate" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "labels" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.ImageUpdate.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ImageDelete" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + } + options: { + go_package: "github.com/containerd/containerd/api/events;events" + [containerd.types.fieldpath_all]: true + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 37 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 38 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 31 + } + location: { + path: 8 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + span: 23 + span: 0 + span: 47 + } + location: { + path: 8 + path: 63300 + span: 23 + span: 0 + span: 47 + } + location: { + path: 4 + path: 0 + span: 25 + span: 0 + span: 28 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 25 + span: 8 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 26 + span: 8 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 26 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 26 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 26 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 27 + span: 8 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 27 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 27 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 27 + span: 37 + span: 38 + } + location: { + path: 4 + path: 1 + span: 30 + span: 0 + span: 33 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 30 + span: 8 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 31 + span: 8 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 31 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 31 + span: 15 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 31 + span: 22 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 32 + span: 8 + span: 39 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 6 + span: 32 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 32 + span: 28 + span: 34 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 32 + span: 37 + span: 38 + } + location: { + path: 4 + path: 2 + span: 35 + span: 0 + span: 37 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 35 + span: 8 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 36 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 36 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 36 + span: 15 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 36 + span: 22 + span: 23 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "events/namespace.proto" + package: "containerd.events" + dependency: "types/fieldpath.proto" + message_type: { + name: "NamespaceCreate" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "labels" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.events.NamespaceCreate.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "NamespaceUpdate" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "labels" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.events.NamespaceUpdate.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "NamespaceDelete" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + } + options: { + go_package: "github.com/containerd/containerd/api/events;events" + [containerd.types.fieldpath_all]: true + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 37 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 26 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 31 + } + location: { + path: 8 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + span: 23 + span: 0 + span: 47 + } + location: { + path: 8 + path: 63300 + span: 23 + span: 0 + span: 47 + } + location: { + path: 4 + path: 0 + span: 25 + span: 0 + span: 28 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 25 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 26 + span: 8 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 26 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 26 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 26 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 27 + span: 8 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 27 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 27 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 27 + span: 38 + span: 39 + } + location: { + path: 4 + path: 1 + span: 30 + span: 0 + span: 33 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 30 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 31 + span: 8 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 31 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 31 + span: 15 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 31 + span: 22 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 32 + span: 8 + span: 40 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 6 + span: 32 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 32 + span: 28 + span: 34 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 32 + span: 38 + span: 39 + } + location: { + path: 4 + path: 2 + span: 35 + span: 0 + span: 37 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 35 + span: 8 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 36 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 36 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 36 + span: 15 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 36 + span: 22 + span: 23 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "google/protobuf/timestamp.proto" + package: "google.protobuf" + message_type: { + name: "Timestamp" + field: { + name: "seconds" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "seconds" + } + field: { + name: "nanos" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "nanos" + } + } + options: { + java_package: "com.google.protobuf" + java_outer_classname: "TimestampProto" + java_multiple_files: true + go_package: "google.golang.org/protobuf/types/known/timestamppb" + cc_enable_arenas: true + objc_class_prefix: "GPB" + csharp_namespace: "Google.Protobuf.WellKnownTypes" + } + source_code_info: { + location: { + span: 30 + span: 0 + span: 143 + span: 1 + } + location: { + path: 12 + span: 30 + span: 0 + span: 18 + leading_detached_comments: " Protocol Buffers - Google's data interchange format\n Copyright 2008 Google Inc. All rights reserved.\n https://developers.google.com/protocol-buffers/\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following disclaimer\n in the documentation and/or other materials provided with the\n distribution.\n * Neither the name of Google Inc. nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" + } + location: { + path: 2 + span: 32 + span: 0 + span: 24 + } + location: { + path: 8 + span: 34 + span: 0 + span: 31 + } + location: { + path: 8 + path: 31 + span: 34 + span: 0 + span: 31 + } + location: { + path: 8 + span: 35 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 35 + span: 0 + span: 73 + } + location: { + path: 8 + span: 36 + span: 0 + span: 44 + } + location: { + path: 8 + path: 1 + span: 36 + span: 0 + span: 44 + } + location: { + path: 8 + span: 37 + span: 0 + span: 47 + } + location: { + path: 8 + path: 8 + span: 37 + span: 0 + span: 47 + } + location: { + path: 8 + span: 38 + span: 0 + span: 34 + } + location: { + path: 8 + path: 10 + span: 38 + span: 0 + span: 34 + } + location: { + path: 8 + span: 39 + span: 0 + span: 33 + } + location: { + path: 8 + path: 36 + span: 39 + span: 0 + span: 33 + } + location: { + path: 8 + span: 40 + span: 0 + span: 59 + } + location: { + path: 8 + path: 37 + span: 40 + span: 0 + span: 59 + } + location: { + path: 4 + path: 0 + span: 132 + span: 0 + span: 143 + span: 1 + leading_comments: " A Timestamp represents a point in time independent of any time zone or local\n calendar, encoded as a count of seconds and fractions of seconds at\n nanosecond resolution. The count is relative to an epoch at UTC midnight on\n January 1, 1970, in the proleptic Gregorian calendar which extends the\n Gregorian calendar backwards to year one.\n\n All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n second table is needed for interpretation, using a [24-hour linear\n smear](https://developers.google.com/time/smear).\n\n The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n restricting to that range, we ensure that we can convert to and from [RFC\n 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n # Examples\n\n Example 1: Compute Timestamp from POSIX `time()`.\n\n Timestamp timestamp;\n timestamp.set_seconds(time(NULL));\n timestamp.set_nanos(0);\n\n Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n\n struct timeval tv;\n gettimeofday(&tv, NULL);\n\n Timestamp timestamp;\n timestamp.set_seconds(tv.tv_sec);\n timestamp.set_nanos(tv.tv_usec * 1000);\n\n Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\n FILETIME ft;\n GetSystemTimeAsFileTime(&ft);\n UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n\n // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n Timestamp timestamp;\n timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\n Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\n long millis = System.currentTimeMillis();\n\n Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n Example 5: Compute Timestamp from Java `Instant.now()`.\n\n Instant now = Instant.now();\n\n Timestamp timestamp =\n Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n .setNanos(now.getNano()).build();\n\n Example 6: Compute Timestamp from current time in Python.\n\n timestamp = Timestamp()\n timestamp.GetCurrentTime()\n\n # JSON Mapping\n\n In JSON format, the Timestamp type is encoded as a string in the\n [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n where {year} is always expressed using four digits while {month}, {day},\n {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n is required. A proto3 JSON serializer should always use UTC (as indicated by\n \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n able to accept both UTC and other timezones (as indicated by an offset).\n\n For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n 01:30 UTC on January 15, 2017.\n\n In JavaScript, one can convert a Date object to this format using the\n standard\n [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n method. In Python, a standard `datetime.datetime` object can be converted\n to this format using\n [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n the Joda Time's [`ISODateTimeFormat.dateTime()`](\n http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n ) to obtain a formatter capable of generating timestamps in this format.\n\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 132 + span: 8 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 136 + span: 2 + span: 20 + leading_comments: " Represents seconds of UTC time since Unix epoch\n 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n 9999-12-31T23:59:59Z inclusive.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 136 + span: 2 + span: 7 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 136 + span: 8 + span: 15 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 136 + span: 18 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 142 + span: 2 + span: 18 + leading_comments: " Non-negative fractions of a second at nanosecond resolution. Negative\n second values with fractions must still have non-negative nanos values\n that count forward in time. Must be from 0 to 999,999,999\n inclusive.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 142 + span: 2 + span: 7 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 142 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 142 + span: 16 + span: 17 + } + } + syntax: "proto3" + buf_extension: { + is_import: true + is_syntax_unspecified: false + } +} +file: { + name: "events/sandbox.proto" + package: "containerd.events" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "SandboxCreate" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "SandboxStart" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "SandboxExit" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "exit_status" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + options: { + go_package: "github.com/containerd/containerd/api/events;events" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 36 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 26 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 41 + } + location: { + path: 8 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 73 + } + location: { + path: 4 + path: 0 + span: 24 + span: 0 + span: 26 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 24 + span: 8 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 25 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 25 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 25 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 25 + span: 28 + span: 29 + } + location: { + path: 4 + path: 1 + span: 28 + span: 0 + span: 30 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 28 + span: 8 + span: 20 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 29 + span: 8 + span: 30 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 29 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 29 + span: 15 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 29 + span: 28 + span: 29 + } + location: { + path: 4 + path: 2 + span: 32 + span: 0 + span: 36 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 32 + span: 8 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 33 + span: 8 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 33 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 33 + span: 15 + span: 25 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 33 + span: 28 + span: 29 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 34 + span: 8 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 34 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 34 + span: 15 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 34 + span: 29 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 35 + span: 8 + span: 48 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 6 + span: 35 + span: 8 + span: 33 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 35 + span: 34 + span: 43 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 35 + span: 46 + span: 47 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "events/snapshot.proto" + package: "containerd.events" + dependency: "types/fieldpath.proto" + message_type: { + name: "SnapshotPrepare" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "parent" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "parent" + } + field: { + name: "snapshotter" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + } + message_type: { + name: "SnapshotCommit" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "name" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "snapshotter" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + } + message_type: { + name: "SnapshotRemove" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "snapshotter" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + } + options: { + go_package: "github.com/containerd/containerd/api/events;events" + [containerd.types.fieldpath_all]: true + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 40 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 26 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 31 + } + location: { + path: 8 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 73 + } + location: { + path: 8 + span: 23 + span: 0 + span: 47 + } + location: { + path: 8 + path: 63300 + span: 23 + span: 0 + span: 47 + } + location: { + path: 4 + path: 0 + span: 25 + span: 0 + span: 29 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 25 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 26 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 26 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 26 + span: 15 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 26 + span: 21 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 27 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 27 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 27 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 27 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 28 + span: 8 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 28 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 28 + span: 15 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 28 + span: 29 + span: 30 + } + location: { + path: 4 + path: 1 + span: 31 + span: 0 + span: 35 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 31 + span: 8 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 32 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 32 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 32 + span: 15 + span: 18 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 32 + span: 21 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 33 + span: 8 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 33 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 33 + span: 15 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 33 + span: 22 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + span: 34 + span: 8 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 5 + span: 34 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 34 + span: 15 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 3 + span: 34 + span: 29 + span: 30 + } + location: { + path: 4 + path: 2 + span: 37 + span: 0 + span: 40 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 37 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 38 + span: 8 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 38 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 38 + span: 15 + span: 18 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 38 + span: 21 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 39 + span: 8 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 39 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 39 + span: 15 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 39 + span: 29 + span: 30 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/mount.proto" + package: "containerd.types" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "Mount" + field: { + name: "type" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "type" + } + field: { + name: "source" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "source" + } + field: { + name: "target" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "target" + } + field: { + name: "options" + number: 4 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "options" + } + } + message_type: { + name: "ActiveMount" + field: { + name: "mount" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "mount" + } + field: { + name: "mounted_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "mountedAt" + } + field: { + name: "mount_point" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "mountPoint" + } + field: { + name: "data" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.ActiveMount.DataEntry" + json_name: "data" + } + nested_type: { + name: "DataEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ActivationInfo" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "active" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.ActiveMount" + json_name: "active" + } + field: { + name: "system" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "system" + } + field: { + name: "labels" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.ActivationInfo.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + options: { + go_package: "github.com/containerd/containerd/api/types;types" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 64 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 25 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 41 + } + location: { + path: 8 + span: 22 + span: 0 + span: 71 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 71 + } + location: { + path: 4 + path: 0 + span: 31 + span: 0 + span: 44 + span: 1 + leading_comments: " Mount describes mounts for a container.\n\n This type is the lingua franca of ContainerD. All services provide mounts\n to be used with the container at creation time.\n\n The Mount type follows the structure of the mount syscall, including a type,\n source, target and options.\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 31 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 33 + span: 8 + span: 24 + leading_comments: " Type defines the nature of the mount.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 33 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 33 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 33 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 37 + span: 8 + span: 26 + leading_comments: " Source specifies the name of the mount. Depending on mount type, this\n may be a volume name or a host path, or even ignored.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 37 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 37 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 37 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 40 + span: 8 + span: 26 + leading_comments: " Target path in container\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 40 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 40 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 40 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 43 + span: 8 + span: 36 + leading_comments: " Options specifies zero or more fstab style mount options.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 4 + span: 43 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 43 + span: 17 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 43 + span: 24 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 43 + span: 34 + span: 35 + } + location: { + path: 4 + path: 1 + span: 46 + span: 0 + span: 54 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 46 + span: 8 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 47 + span: 8 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 6 + span: 47 + span: 8 + span: 13 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 47 + span: 14 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 47 + span: 22 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 49 + span: 8 + span: 49 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 6 + span: 49 + span: 8 + span: 33 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 49 + span: 34 + span: 44 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 49 + span: 47 + span: 48 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + span: 51 + span: 8 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 5 + span: 51 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 51 + span: 15 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 3 + span: 51 + span: 29 + span: 30 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + span: 53 + span: 8 + span: 37 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 6 + span: 53 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 1 + span: 53 + span: 28 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 3 + span: 53 + span: 35 + span: 36 + } + location: { + path: 4 + path: 2 + span: 56 + span: 0 + span: 64 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 56 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 57 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 57 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 57 + span: 15 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 57 + span: 22 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 59 + span: 8 + span: 40 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 4 + span: 59 + span: 8 + span: 16 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 6 + span: 59 + span: 17 + span: 28 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 59 + span: 29 + span: 35 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 59 + span: 38 + span: 39 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 61 + span: 8 + span: 34 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 4 + span: 61 + span: 8 + span: 16 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 6 + span: 61 + span: 17 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 61 + span: 23 + span: 29 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 61 + span: 32 + span: 33 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + span: 63 + span: 8 + span: 39 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 6 + span: 63 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 1 + span: 63 + span: 28 + span: 34 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 3 + span: 63 + span: 37 + span: 38 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "events/task.proto" + package: "containerd.events" + dependency: "google/protobuf/timestamp.proto" + dependency: "types/mount.proto" + dependency: "types/fieldpath.proto" + message_type: { + name: "TaskCreate" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "bundle" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "bundle" + } + field: { + name: "rootfs" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "rootfs" + } + field: { + name: "io" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.events.TaskIO" + json_name: "io" + } + field: { + name: "checkpoint" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "checkpoint" + } + field: { + name: "pid" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "TaskStart" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "TaskDelete" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "exit_status" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + field: { + name: "id" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "TaskIO" + field: { + name: "stdin" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "terminal" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + } + message_type: { + name: "TaskExit" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "pid" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "exit_status" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "TaskOOM" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + } + message_type: { + name: "TaskExecAdded" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "TaskExecStarted" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "pid" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "TaskPaused" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + } + message_type: { + name: "TaskResumed" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + } + message_type: { + name: "TaskCheckpointed" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "checkpoint" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "checkpoint" + } + } + options: { + go_package: "github.com/containerd/containerd/api/events;events" + [containerd.types.fieldpath_all]: true + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 92 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 26 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 41 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 27 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 31 + } + location: { + path: 8 + span: 24 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 24 + span: 0 + span: 73 + } + location: { + path: 8 + span: 25 + span: 0 + span: 47 + } + location: { + path: 8 + path: 63300 + span: 25 + span: 0 + span: 47 + } + location: { + path: 4 + path: 0 + span: 27 + span: 0 + span: 34 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 27 + span: 8 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 28 + span: 8 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 28 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 28 + span: 15 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 28 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 29 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 29 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 29 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 29 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 30 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 4 + span: 30 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 30 + span: 17 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 30 + span: 40 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 30 + span: 49 + span: 50 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 31 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 31 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 31 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 31 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 32 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 32 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 32 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 32 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 33 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 5 + span: 33 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 33 + span: 15 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 33 + span: 21 + span: 22 + } + location: { + path: 4 + path: 1 + span: 36 + span: 0 + span: 39 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 36 + span: 8 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 37 + span: 8 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 37 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 37 + span: 15 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 37 + span: 30 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 38 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 38 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 38 + span: 15 + span: 18 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 38 + span: 21 + span: 22 + } + location: { + path: 4 + path: 2 + span: 41 + span: 0 + span: 49 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 41 + span: 8 + span: 18 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 42 + span: 8 + span: 32 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 42 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 42 + span: 15 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 42 + span: 30 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 43 + span: 8 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 43 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 43 + span: 15 + span: 18 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 43 + span: 21 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 44 + span: 8 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 5 + span: 44 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 44 + span: 15 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 44 + span: 29 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + span: 45 + span: 8 + span: 48 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 6 + span: 45 + span: 8 + span: 33 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 1 + span: 45 + span: 34 + span: 43 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 3 + span: 45 + span: 46 + span: 47 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + span: 48 + span: 8 + span: 22 + leading_comments: " id is the specific exec. By default if omitted will be `\"\"` thus matches\n the init exec of the task matching `container_id`.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 5 + span: 48 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 1 + span: 48 + span: 15 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 3 + span: 48 + span: 20 + span: 21 + } + location: { + path: 4 + path: 3 + span: 51 + span: 0 + span: 56 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 51 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 52 + span: 8 + span: 25 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 52 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 52 + span: 15 + span: 20 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 52 + span: 23 + span: 24 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 53 + span: 8 + span: 26 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 5 + span: 53 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 53 + span: 15 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 53 + span: 24 + span: 25 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + span: 54 + span: 8 + span: 26 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 5 + span: 54 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 1 + span: 54 + span: 15 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 3 + span: 54 + span: 24 + span: 25 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + span: 55 + span: 8 + span: 26 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 5 + span: 55 + span: 8 + span: 12 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 1 + span: 55 + span: 13 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 3 + span: 55 + span: 24 + span: 25 + } + location: { + path: 4 + path: 4 + span: 58 + span: 0 + span: 64 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 58 + span: 8 + span: 16 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 59 + span: 8 + span: 32 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 59 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 59 + span: 15 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 59 + span: 30 + span: 31 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + span: 60 + span: 8 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 5 + span: 60 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 1 + span: 60 + span: 15 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 3 + span: 60 + span: 20 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + span: 61 + span: 8 + span: 23 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 5 + span: 61 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 1 + span: 61 + span: 15 + span: 18 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 3 + span: 61 + span: 21 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + span: 62 + span: 8 + span: 31 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 5 + span: 62 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 1 + span: 62 + span: 15 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 3 + span: 62 + span: 29 + span: 30 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + span: 63 + span: 8 + span: 48 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 6 + span: 63 + span: 8 + span: 33 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 1 + span: 63 + span: 34 + span: 43 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 3 + span: 63 + span: 46 + span: 47 + } + location: { + path: 4 + path: 5 + span: 66 + span: 0 + span: 68 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 66 + span: 8 + span: 15 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 67 + span: 8 + span: 32 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 5 + span: 67 + span: 8 + span: 14 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 67 + span: 15 + span: 27 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 67 + span: 30 + span: 31 + } + location: { + path: 4 + path: 6 + span: 70 + span: 0 + span: 73 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 70 + span: 8 + span: 21 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 71 + span: 8 + span: 32 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 71 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 71 + span: 15 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 71 + span: 30 + span: 31 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 72 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 5 + span: 72 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 72 + span: 15 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 72 + span: 25 + span: 26 + } + location: { + path: 4 + path: 7 + span: 75 + span: 0 + span: 79 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 75 + span: 8 + span: 23 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 76 + span: 8 + span: 32 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 76 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 76 + span: 15 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 76 + span: 30 + span: 31 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 77 + span: 8 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 5 + span: 77 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 77 + span: 15 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 77 + span: 25 + span: 26 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + span: 78 + span: 8 + span: 23 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 5 + span: 78 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 1 + span: 78 + span: 15 + span: 18 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 3 + span: 78 + span: 21 + span: 22 + } + location: { + path: 4 + path: 8 + span: 81 + span: 0 + span: 83 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 81 + span: 8 + span: 18 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 82 + span: 8 + span: 32 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 82 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 82 + span: 15 + span: 27 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 82 + span: 30 + span: 31 + } + location: { + path: 4 + path: 9 + span: 85 + span: 0 + span: 87 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 85 + span: 8 + span: 19 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 86 + span: 8 + span: 32 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 86 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 86 + span: 15 + span: 27 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 86 + span: 30 + span: 31 + } + location: { + path: 4 + path: 10 + span: 89 + span: 0 + span: 92 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 89 + span: 8 + span: 24 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 90 + span: 8 + span: 32 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 5 + span: 90 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 90 + span: 15 + span: 27 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 90 + span: 30 + span: 31 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + span: 91 + span: 8 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 5 + span: 91 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 1 + span: 91 + span: 15 + span: 25 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 3 + span: 91 + span: 28 + span: 29 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/platform.proto" + package: "containerd.types" + message_type: { + name: "Platform" + field: { + name: "os" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "os" + } + field: { + name: "architecture" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "architecture" + } + field: { + name: "variant" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "variant" + } + field: { + name: "os_version" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "osVersion" + } + } + options: { + go_package: "github.com/containerd/containerd/api/types;types" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 29 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 25 + } + location: { + path: 8 + span: 20 + span: 0 + span: 71 + } + location: { + path: 8 + path: 11 + span: 20 + span: 0 + span: 71 + } + location: { + path: 4 + path: 0 + span: 24 + span: 0 + span: 29 + span: 1 + leading_comments: " Platform follows the structure of the OCI platform specification, from\n descriptors.\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 24 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 25 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 25 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 25 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 25 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 26 + span: 8 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 26 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 26 + span: 15 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 26 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 27 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 27 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 27 + span: 15 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 27 + span: 25 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 28 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 28 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 28 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 28 + span: 28 + span: 29 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/metrics.proto" + package: "containerd.types" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "Metric" + field: { + name: "timestamp" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "timestamp" + } + field: { + name: "id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "data" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "data" + } + } + options: { + go_package: "github.com/containerd/containerd/api/types;types" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 29 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 25 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 41 + } + location: { + path: 8 + span: 23 + span: 0 + span: 71 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 71 + } + location: { + path: 4 + path: 0 + span: 25 + span: 0 + span: 29 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 25 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 26 + span: 8 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 6 + span: 26 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 26 + span: 34 + span: 43 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 26 + span: 46 + span: 47 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 27 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 27 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 27 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 27 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 28 + span: 8 + span: 37 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 28 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 28 + span: 28 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 28 + span: 35 + span: 36 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "runtime/sandbox/v1/sandbox.proto" + package: "containerd.runtime.sandbox.v1" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/timestamp.proto" + dependency: "types/mount.proto" + dependency: "types/platform.proto" + dependency: "types/metrics.proto" + message_type: { + name: "CreateSandboxRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "bundle_path" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "bundlePath" + } + field: { + name: "rootfs" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "rootfs" + } + field: { + name: "options" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + field: { + name: "netns_path" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "netnsPath" + } + field: { + name: "annotations" + number: 6 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.runtime.sandbox.v1.CreateSandboxRequest.AnnotationsEntry" + json_name: "annotations" + } + nested_type: { + name: "AnnotationsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "CreateSandboxResponse" + } + message_type: { + name: "StartSandboxRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "StartSandboxResponse" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "created_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + } + message_type: { + name: "PlatformRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "PlatformResponse" + field: { + name: "platform" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Platform" + json_name: "platform" + } + } + message_type: { + name: "StopSandboxRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "timeout_secs" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "timeoutSecs" + } + } + message_type: { + name: "StopSandboxResponse" + } + message_type: { + name: "UpdateSandboxRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "resources" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "resources" + } + field: { + name: "annotations" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.runtime.sandbox.v1.UpdateSandboxRequest.AnnotationsEntry" + json_name: "annotations" + } + nested_type: { + name: "AnnotationsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "WaitSandboxRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "WaitSandboxResponse" + field: { + name: "exit_status" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "UpdateSandboxResponse" + } + message_type: { + name: "SandboxStatusRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "verbose" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "verbose" + } + } + message_type: { + name: "SandboxStatusResponse" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "state" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "state" + } + field: { + name: "info" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.runtime.sandbox.v1.SandboxStatusResponse.InfoEntry" + json_name: "info" + } + field: { + name: "created_at" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "exited_at" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + field: { + name: "extra" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "extra" + } + nested_type: { + name: "InfoEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "PingRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "PingResponse" + } + message_type: { + name: "ShutdownSandboxRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "ShutdownSandboxResponse" + } + message_type: { + name: "SandboxMetricsRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "SandboxMetricsResponse" + field: { + name: "metrics" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Metric" + json_name: "metrics" + } + } + service: { + name: "Sandbox" + method: { + name: "CreateSandbox" + input_type: ".containerd.runtime.sandbox.v1.CreateSandboxRequest" + output_type: ".containerd.runtime.sandbox.v1.CreateSandboxResponse" + } + method: { + name: "StartSandbox" + input_type: ".containerd.runtime.sandbox.v1.StartSandboxRequest" + output_type: ".containerd.runtime.sandbox.v1.StartSandboxResponse" + } + method: { + name: "Platform" + input_type: ".containerd.runtime.sandbox.v1.PlatformRequest" + output_type: ".containerd.runtime.sandbox.v1.PlatformResponse" + } + method: { + name: "StopSandbox" + input_type: ".containerd.runtime.sandbox.v1.StopSandboxRequest" + output_type: ".containerd.runtime.sandbox.v1.StopSandboxResponse" + } + method: { + name: "WaitSandbox" + input_type: ".containerd.runtime.sandbox.v1.WaitSandboxRequest" + output_type: ".containerd.runtime.sandbox.v1.WaitSandboxResponse" + } + method: { + name: "SandboxStatus" + input_type: ".containerd.runtime.sandbox.v1.SandboxStatusRequest" + output_type: ".containerd.runtime.sandbox.v1.SandboxStatusResponse" + } + method: { + name: "PingSandbox" + input_type: ".containerd.runtime.sandbox.v1.PingRequest" + output_type: ".containerd.runtime.sandbox.v1.PingResponse" + } + method: { + name: "ShutdownSandbox" + input_type: ".containerd.runtime.sandbox.v1.ShutdownSandboxRequest" + output_type: ".containerd.runtime.sandbox.v1.ShutdownSandboxResponse" + } + method: { + name: "SandboxMetrics" + input_type: ".containerd.runtime.sandbox.v1.SandboxMetricsRequest" + output_type: ".containerd.runtime.sandbox.v1.SandboxMetricsResponse" + } + } + options: { + go_package: "github.com/containerd/containerd/api/runtime/sandbox/v1;sandbox" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 148 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 38 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 41 + } + location: { + path: 3 + path: 2 + span: 23 + span: 0 + span: 27 + } + location: { + path: 3 + path: 3 + span: 24 + span: 0 + span: 30 + } + location: { + path: 3 + path: 4 + span: 25 + span: 0 + span: 29 + } + location: { + path: 8 + span: 27 + span: 0 + span: 86 + } + location: { + path: 8 + path: 11 + span: 27 + span: 0 + span: 86 + } + location: { + path: 6 + path: 0 + span: 32 + span: 0 + span: 61 + span: 1 + leading_comments: " Sandbox is an optional interface that shim may implement to support sandboxes environments.\n A typical example of sandbox is microVM or pause container - an entity that groups containers and/or\n holds resources relevant for this group.\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 32 + span: 8 + span: 15 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 35 + span: 8 + span: 80 + leading_comments: " CreateSandbox will be called right after sandbox shim instance launched.\n It is a good place to initialize sandbox environment.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 35 + span: 12 + span: 25 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 35 + span: 26 + span: 46 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 35 + span: 57 + span: 78 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 38 + span: 8 + span: 77 + leading_comments: " StartSandbox will start a previously created sandbox.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 38 + span: 12 + span: 24 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 38 + span: 25 + span: 44 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 38 + span: 55 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 42 + span: 8 + span: 65 + leading_comments: " Platform queries the platform the sandbox is going to run containers on.\n containerd will use this to generate a proper OCI spec.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 42 + span: 12 + span: 20 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 42 + span: 21 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 42 + span: 47 + span: 63 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 45 + span: 8 + span: 74 + leading_comments: " StopSandbox will stop existing sandbox instance\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 45 + span: 12 + span: 23 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 45 + span: 24 + span: 42 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 45 + span: 53 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 48 + span: 8 + span: 74 + leading_comments: " WaitSandbox blocks until sandbox exits.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 48 + span: 12 + span: 23 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 48 + span: 24 + span: 42 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 48 + span: 53 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + span: 51 + span: 8 + span: 80 + leading_comments: " SandboxStatus will return current status of the running sandbox instance\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 1 + span: 51 + span: 12 + span: 25 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 2 + span: 51 + span: 26 + span: 46 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 3 + span: 51 + span: 57 + span: 78 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + span: 54 + span: 8 + span: 60 + leading_comments: " PingSandbox is a lightweight API call to check whether sandbox alive.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 1 + span: 54 + span: 12 + span: 23 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 2 + span: 54 + span: 24 + span: 35 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 3 + span: 54 + span: 46 + span: 58 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + span: 57 + span: 8 + span: 86 + leading_comments: " ShutdownSandbox must shutdown shim instance.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 1 + span: 57 + span: 12 + span: 27 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 2 + span: 57 + span: 28 + span: 50 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 3 + span: 57 + span: 61 + span: 84 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + span: 60 + span: 8 + span: 83 + leading_comments: " SandboxMetrics retrieves metrics about a sandbox instance.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 1 + span: 60 + span: 12 + span: 26 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 2 + span: 60 + span: 27 + span: 48 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 3 + span: 60 + span: 59 + span: 81 + } + location: { + path: 4 + path: 0 + span: 63 + span: 0 + span: 70 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 63 + span: 8 + span: 28 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 64 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 64 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 64 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 64 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 65 + span: 8 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 65 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 65 + span: 15 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 65 + span: 29 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 66 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 4 + span: 66 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 66 + span: 17 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 66 + span: 40 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 66 + span: 49 + span: 50 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 67 + span: 8 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 67 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 67 + span: 28 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 67 + span: 38 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 68 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 68 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 68 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 68 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 69 + span: 8 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 6 + span: 69 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 69 + span: 28 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 69 + span: 42 + span: 43 + } + location: { + path: 4 + path: 1 + span: 72 + span: 0 + span: 32 + } + location: { + path: 4 + path: 1 + path: 1 + span: 72 + span: 8 + span: 29 + } + location: { + path: 4 + path: 2 + span: 74 + span: 0 + span: 76 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 74 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 75 + span: 8 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 75 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 75 + span: 15 + span: 25 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 75 + span: 28 + span: 29 + } + location: { + path: 4 + path: 3 + span: 78 + span: 0 + span: 81 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 78 + span: 8 + span: 28 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 79 + span: 8 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 79 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 79 + span: 15 + span: 18 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 79 + span: 21 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 80 + span: 8 + span: 49 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 6 + span: 80 + span: 8 + span: 33 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 80 + span: 34 + span: 44 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 80 + span: 47 + span: 48 + } + location: { + path: 4 + path: 4 + span: 83 + span: 0 + span: 85 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 83 + span: 8 + span: 23 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 84 + span: 8 + span: 30 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 84 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 84 + span: 15 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 84 + span: 28 + span: 29 + } + location: { + path: 4 + path: 5 + span: 87 + span: 0 + span: 89 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 87 + span: 8 + span: 24 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 88 + span: 8 + span: 47 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 6 + span: 88 + span: 8 + span: 33 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 88 + span: 34 + span: 42 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 88 + span: 45 + span: 46 + } + location: { + path: 4 + path: 6 + span: 91 + span: 0 + span: 94 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 91 + span: 8 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 92 + span: 8 + span: 30 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 92 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 92 + span: 15 + span: 25 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 92 + span: 28 + span: 29 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 93 + span: 8 + span: 32 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 5 + span: 93 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 93 + span: 15 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 93 + span: 30 + span: 31 + } + location: { + path: 4 + path: 7 + span: 96 + span: 0 + span: 30 + } + location: { + path: 4 + path: 7 + path: 1 + span: 96 + span: 8 + span: 27 + } + location: { + path: 4 + path: 8 + span: 98 + span: 0 + span: 102 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 98 + span: 8 + span: 28 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 99 + span: 8 + span: 30 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 99 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 99 + span: 15 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 99 + span: 28 + span: 29 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + span: 100 + span: 8 + span: 42 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 6 + span: 100 + span: 8 + span: 27 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 1 + span: 100 + span: 28 + span: 37 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 3 + span: 100 + span: 40 + span: 41 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + span: 101 + span: 8 + span: 44 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 6 + span: 101 + span: 8 + span: 27 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 1 + span: 101 + span: 28 + span: 39 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 3 + span: 101 + span: 42 + span: 43 + } + location: { + path: 4 + path: 9 + span: 104 + span: 0 + span: 106 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 104 + span: 8 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 105 + span: 8 + span: 30 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 105 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 105 + span: 15 + span: 25 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 105 + span: 28 + span: 29 + } + location: { + path: 4 + path: 10 + span: 108 + span: 0 + span: 111 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 108 + span: 8 + span: 27 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 109 + span: 8 + span: 31 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 5 + span: 109 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 109 + span: 15 + span: 26 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 109 + span: 29 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + span: 110 + span: 8 + span: 48 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 6 + span: 110 + span: 8 + span: 33 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 1 + span: 110 + span: 34 + span: 43 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 3 + span: 110 + span: 46 + span: 47 + } + location: { + path: 4 + path: 11 + span: 113 + span: 0 + span: 32 + } + location: { + path: 4 + path: 11 + path: 1 + span: 113 + span: 8 + span: 29 + } + location: { + path: 4 + path: 12 + span: 115 + span: 0 + span: 118 + span: 1 + } + location: { + path: 4 + path: 12 + path: 1 + span: 115 + span: 8 + span: 28 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + span: 116 + span: 8 + span: 30 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 5 + span: 116 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 1 + span: 116 + span: 15 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 3 + span: 116 + span: 28 + span: 29 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + span: 117 + span: 8 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 5 + span: 117 + span: 8 + span: 12 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 1 + span: 117 + span: 13 + span: 20 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 3 + span: 117 + span: 23 + span: 24 + } + location: { + path: 4 + path: 13 + span: 120 + span: 0 + span: 128 + span: 1 + } + location: { + path: 4 + path: 13 + path: 1 + span: 120 + span: 8 + span: 29 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + span: 121 + span: 8 + span: 30 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 5 + span: 121 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 1 + span: 121 + span: 15 + span: 25 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 3 + span: 121 + span: 28 + span: 29 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + span: 122 + span: 8 + span: 23 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 5 + span: 122 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 1 + span: 122 + span: 15 + span: 18 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 3 + span: 122 + span: 21 + span: 22 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + span: 123 + span: 8 + span: 25 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 5 + span: 123 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 1 + span: 123 + span: 15 + span: 20 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 3 + span: 123 + span: 23 + span: 24 + } + location: { + path: 4 + path: 13 + path: 2 + path: 3 + span: 124 + span: 8 + span: 37 + } + location: { + path: 4 + path: 13 + path: 2 + path: 3 + path: 6 + span: 124 + span: 8 + span: 27 + } + location: { + path: 4 + path: 13 + path: 2 + path: 3 + path: 1 + span: 124 + span: 28 + span: 32 + } + location: { + path: 4 + path: 13 + path: 2 + path: 3 + path: 3 + span: 124 + span: 35 + span: 36 + } + location: { + path: 4 + path: 13 + path: 2 + path: 4 + span: 125 + span: 8 + span: 49 + } + location: { + path: 4 + path: 13 + path: 2 + path: 4 + path: 6 + span: 125 + span: 8 + span: 33 + } + location: { + path: 4 + path: 13 + path: 2 + path: 4 + path: 1 + span: 125 + span: 34 + span: 44 + } + location: { + path: 4 + path: 13 + path: 2 + path: 4 + path: 3 + span: 125 + span: 47 + span: 48 + } + location: { + path: 4 + path: 13 + path: 2 + path: 5 + span: 126 + span: 8 + span: 48 + } + location: { + path: 4 + path: 13 + path: 2 + path: 5 + path: 6 + span: 126 + span: 8 + span: 33 + } + location: { + path: 4 + path: 13 + path: 2 + path: 5 + path: 1 + span: 126 + span: 34 + span: 43 + } + location: { + path: 4 + path: 13 + path: 2 + path: 5 + path: 3 + span: 126 + span: 46 + span: 47 + } + location: { + path: 4 + path: 13 + path: 2 + path: 6 + span: 127 + span: 8 + span: 38 + } + location: { + path: 4 + path: 13 + path: 2 + path: 6 + path: 6 + span: 127 + span: 8 + span: 27 + } + location: { + path: 4 + path: 13 + path: 2 + path: 6 + path: 1 + span: 127 + span: 28 + span: 33 + } + location: { + path: 4 + path: 13 + path: 2 + path: 6 + path: 3 + span: 127 + span: 36 + span: 37 + } + location: { + path: 4 + path: 14 + span: 130 + span: 0 + span: 132 + span: 1 + } + location: { + path: 4 + path: 14 + path: 1 + span: 130 + span: 8 + span: 19 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + span: 131 + span: 8 + span: 30 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 5 + span: 131 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 1 + span: 131 + span: 15 + span: 25 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 3 + span: 131 + span: 28 + span: 29 + } + location: { + path: 4 + path: 15 + span: 134 + span: 0 + span: 23 + } + location: { + path: 4 + path: 15 + path: 1 + span: 134 + span: 8 + span: 20 + } + location: { + path: 4 + path: 16 + span: 136 + span: 0 + span: 138 + span: 1 + } + location: { + path: 4 + path: 16 + path: 1 + span: 136 + span: 8 + span: 30 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + span: 137 + span: 8 + span: 30 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 5 + span: 137 + span: 8 + span: 14 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 1 + span: 137 + span: 15 + span: 25 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 3 + span: 137 + span: 28 + span: 29 + } + location: { + path: 4 + path: 17 + span: 140 + span: 0 + span: 34 + } + location: { + path: 4 + path: 17 + path: 1 + span: 140 + span: 8 + span: 31 + } + location: { + path: 4 + path: 18 + span: 142 + span: 0 + span: 144 + span: 1 + } + location: { + path: 4 + path: 18 + path: 1 + span: 142 + span: 8 + span: 29 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + span: 143 + span: 8 + span: 30 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 5 + span: 143 + span: 8 + span: 14 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 1 + span: 143 + span: 15 + span: 25 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 3 + span: 143 + span: 28 + span: 29 + } + location: { + path: 4 + path: 19 + span: 146 + span: 0 + span: 148 + span: 1 + } + location: { + path: 4 + path: 19 + path: 1 + span: 146 + span: 8 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + span: 147 + span: 8 + span: 44 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 6 + span: 147 + span: 8 + span: 31 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 1 + span: 147 + span: 32 + span: 39 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 3 + span: 147 + span: 42 + span: 43 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "google/protobuf/empty.proto" + package: "google.protobuf" + message_type: { + name: "Empty" + } + options: { + java_package: "com.google.protobuf" + java_outer_classname: "EmptyProto" + java_multiple_files: true + go_package: "google.golang.org/protobuf/types/known/emptypb" + cc_enable_arenas: true + objc_class_prefix: "GPB" + csharp_namespace: "Google.Protobuf.WellKnownTypes" + } + source_code_info: { + location: { + span: 30 + span: 0 + span: 50 + span: 16 + } + location: { + path: 12 + span: 30 + span: 0 + span: 18 + leading_detached_comments: " Protocol Buffers - Google's data interchange format\n Copyright 2008 Google Inc. All rights reserved.\n https://developers.google.com/protocol-buffers/\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following disclaimer\n in the documentation and/or other materials provided with the\n distribution.\n * Neither the name of Google Inc. nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" + } + location: { + path: 2 + span: 32 + span: 0 + span: 24 + } + location: { + path: 8 + span: 34 + span: 0 + span: 69 + } + location: { + path: 8 + path: 11 + span: 34 + span: 0 + span: 69 + } + location: { + path: 8 + span: 35 + span: 0 + span: 44 + } + location: { + path: 8 + path: 1 + span: 35 + span: 0 + span: 44 + } + location: { + path: 8 + span: 36 + span: 0 + span: 43 + } + location: { + path: 8 + path: 8 + span: 36 + span: 0 + span: 43 + } + location: { + path: 8 + span: 37 + span: 0 + span: 34 + } + location: { + path: 8 + path: 10 + span: 37 + span: 0 + span: 34 + } + location: { + path: 8 + span: 38 + span: 0 + span: 33 + } + location: { + path: 8 + path: 36 + span: 38 + span: 0 + span: 33 + } + location: { + path: 8 + span: 39 + span: 0 + span: 59 + } + location: { + path: 8 + path: 37 + span: 39 + span: 0 + span: 59 + } + location: { + path: 8 + span: 40 + span: 0 + span: 31 + } + location: { + path: 8 + path: 31 + span: 40 + span: 0 + span: 31 + } + location: { + path: 4 + path: 0 + span: 50 + span: 0 + span: 16 + leading_comments: " A generic empty message that you can re-use to avoid defining duplicated\n empty messages in your APIs. A typical example is to use it as the request\n or the response type of an API method. For instance:\n\n service Foo {\n rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n }\n\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 50 + span: 8 + span: 13 + } + } + syntax: "proto3" + buf_extension: { + is_import: true + is_syntax_unspecified: false + } +} +file: { + name: "types/task/task.proto" + package: "containerd.v1.types" + dependency: "google/protobuf/timestamp.proto" + dependency: "google/protobuf/any.proto" + message_type: { + name: "Process" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "pid" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "status" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".containerd.v1.types.Status" + json_name: "status" + } + field: { + name: "stdin" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "terminal" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "exit_status" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "ProcessInfo" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "info" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "info" + } + } + enum_type: { + name: "Status" + value: { + name: "UNKNOWN" + number: 0 + } + value: { + name: "CREATED" + number: 1 + } + value: { + name: "RUNNING" + number: 2 + } + value: { + name: "STOPPED" + number: 3 + } + value: { + name: "PAUSED" + number: 4 + } + value: { + name: "PAUSING" + number: 5 + } + } + options: { + go_package: "github.com/containerd/containerd/api/types/task" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 54 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 28 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 41 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 35 + } + location: { + path: 8 + span: 23 + span: 0 + span: 70 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 70 + } + location: { + path: 5 + path: 0 + span: 25 + span: 0 + span: 32 + span: 1 + } + location: { + path: 5 + path: 0 + path: 1 + span: 25 + span: 5 + span: 11 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + span: 26 + span: 8 + span: 20 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 1 + span: 26 + span: 8 + span: 15 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 2 + span: 26 + span: 18 + span: 19 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + span: 27 + span: 8 + span: 20 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 1 + span: 27 + span: 8 + span: 15 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 2 + span: 27 + span: 18 + span: 19 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + span: 28 + span: 8 + span: 20 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 1 + span: 28 + span: 8 + span: 15 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 2 + span: 28 + span: 18 + span: 19 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + span: 29 + span: 8 + span: 20 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + path: 1 + span: 29 + span: 8 + span: 15 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + path: 2 + span: 29 + span: 18 + span: 19 + } + location: { + path: 5 + path: 0 + path: 2 + path: 4 + span: 30 + span: 8 + span: 19 + } + location: { + path: 5 + path: 0 + path: 2 + path: 4 + path: 1 + span: 30 + span: 8 + span: 14 + } + location: { + path: 5 + path: 0 + path: 2 + path: 4 + path: 2 + span: 30 + span: 17 + span: 18 + } + location: { + path: 5 + path: 0 + path: 2 + path: 5 + span: 31 + span: 8 + span: 20 + } + location: { + path: 5 + path: 0 + path: 2 + path: 5 + path: 1 + span: 31 + span: 8 + span: 15 + } + location: { + path: 5 + path: 0 + path: 2 + path: 5 + path: 2 + span: 31 + span: 18 + span: 19 + } + location: { + path: 4 + path: 0 + span: 34 + span: 0 + span: 45 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 34 + span: 8 + span: 15 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 35 + span: 8 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 35 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 35 + span: 15 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 35 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 36 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 36 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 36 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 36 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 37 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 37 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 37 + span: 15 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 37 + span: 21 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 38 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 38 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 38 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 38 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 39 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 39 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 39 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 39 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 40 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 5 + span: 40 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 40 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 40 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 41 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 5 + span: 41 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 41 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 41 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + span: 42 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 5 + span: 42 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 1 + span: 42 + span: 13 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 3 + span: 42 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + span: 43 + span: 8 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 5 + span: 43 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 1 + span: 43 + span: 15 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 3 + span: 43 + span: 29 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + span: 44 + span: 8 + span: 49 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 6 + span: 44 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 1 + span: 44 + span: 34 + span: 43 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 3 + span: 44 + span: 46 + span: 48 + } + location: { + path: 4 + path: 1 + span: 47 + span: 0 + span: 54 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 47 + span: 8 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 49 + span: 8 + span: 23 + leading_comments: " PID is the process ID.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 49 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 49 + span: 15 + span: 18 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 49 + span: 21 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 53 + span: 8 + span: 37 + leading_comments: " Info contains additional process information.\n\n Info varies by platform.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 6 + span: 53 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 53 + span: 28 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 53 + span: 35 + span: 36 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "runtime/task/v2/shim.proto" + package: "containerd.task.v2" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/timestamp.proto" + dependency: "types/mount.proto" + dependency: "types/task/task.proto" + message_type: { + name: "CreateTaskRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "bundle" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "bundle" + } + field: { + name: "rootfs" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "rootfs" + } + field: { + name: "terminal" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "stdin" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "checkpoint" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "checkpoint" + } + field: { + name: "parent_checkpoint" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "parentCheckpoint" + } + field: { + name: "options" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + message_type: { + name: "CreateTaskResponse" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "DeleteRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "DeleteResponse" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "exit_status" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "ExecProcessRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "terminal" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "stdin" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "spec" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "spec" + } + } + message_type: { + name: "ExecProcessResponse" + } + message_type: { + name: "ResizePtyRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "width" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "width" + } + field: { + name: "height" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "height" + } + } + message_type: { + name: "StateRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "StateResponse" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "bundle" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "bundle" + } + field: { + name: "pid" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "status" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".containerd.v1.types.Status" + json_name: "status" + } + field: { + name: "stdin" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "terminal" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "exit_status" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + field: { + name: "exec_id" + number: 11 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "KillRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "signal" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "signal" + } + field: { + name: "all" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "all" + } + } + message_type: { + name: "CloseIORequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "stdin" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "stdin" + } + } + message_type: { + name: "PidsRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "PidsResponse" + field: { + name: "processes" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.v1.types.ProcessInfo" + json_name: "processes" + } + } + message_type: { + name: "CheckpointTaskRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "path" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "path" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + message_type: { + name: "UpdateTaskRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "resources" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "resources" + } + field: { + name: "annotations" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.task.v2.UpdateTaskRequest.AnnotationsEntry" + json_name: "annotations" + } + nested_type: { + name: "AnnotationsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "StartRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "StartResponse" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "WaitRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "WaitResponse" + field: { + name: "exit_status" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "StatsRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "StatsResponse" + field: { + name: "stats" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "stats" + } + } + message_type: { + name: "ConnectRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "ConnectResponse" + field: { + name: "shim_pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "shimPid" + } + field: { + name: "task_pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "taskPid" + } + field: { + name: "version" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "version" + } + } + message_type: { + name: "ShutdownRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "now" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "now" + } + } + message_type: { + name: "PauseRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "ResumeRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + service: { + name: "Task" + method: { + name: "State" + input_type: ".containerd.task.v2.StateRequest" + output_type: ".containerd.task.v2.StateResponse" + } + method: { + name: "Create" + input_type: ".containerd.task.v2.CreateTaskRequest" + output_type: ".containerd.task.v2.CreateTaskResponse" + } + method: { + name: "Start" + input_type: ".containerd.task.v2.StartRequest" + output_type: ".containerd.task.v2.StartResponse" + } + method: { + name: "Delete" + input_type: ".containerd.task.v2.DeleteRequest" + output_type: ".containerd.task.v2.DeleteResponse" + } + method: { + name: "Pids" + input_type: ".containerd.task.v2.PidsRequest" + output_type: ".containerd.task.v2.PidsResponse" + } + method: { + name: "Pause" + input_type: ".containerd.task.v2.PauseRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Resume" + input_type: ".containerd.task.v2.ResumeRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Checkpoint" + input_type: ".containerd.task.v2.CheckpointTaskRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Kill" + input_type: ".containerd.task.v2.KillRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Exec" + input_type: ".containerd.task.v2.ExecProcessRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "ResizePty" + input_type: ".containerd.task.v2.ResizePtyRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "CloseIO" + input_type: ".containerd.task.v2.CloseIORequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Update" + input_type: ".containerd.task.v2.UpdateTaskRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Wait" + input_type: ".containerd.task.v2.WaitRequest" + output_type: ".containerd.task.v2.WaitResponse" + } + method: { + name: "Stats" + input_type: ".containerd.task.v2.StatsRequest" + output_type: ".containerd.task.v2.StatsResponse" + } + method: { + name: "Connect" + input_type: ".containerd.task.v2.ConnectRequest" + output_type: ".containerd.task.v2.ConnectResponse" + } + method: { + name: "Shutdown" + input_type: ".containerd.task.v2.ShutdownRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/runtime/task/v2;task" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 200 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 27 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 37 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 41 + } + location: { + path: 3 + path: 3 + span: 23 + span: 0 + span: 27 + } + location: { + path: 3 + path: 4 + span: 24 + span: 0 + span: 31 + } + location: { + path: 8 + span: 26 + span: 0 + span: 80 + } + location: { + path: 8 + path: 11 + span: 26 + span: 0 + span: 80 + } + location: { + path: 6 + path: 0 + span: 32 + span: 0 + span: 50 + span: 1 + leading_comments: " Shim service is launched for each container and is responsible for owning the IO\n for the container and its additional processes. The shim is also the parent of\n each container and allows reattaching to the IO and receiving the exit status\n for the container processes.\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 32 + span: 8 + span: 12 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 33 + span: 8 + span: 56 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 33 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 33 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 33 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 34 + span: 8 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 34 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 34 + span: 19 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 34 + span: 47 + span: 65 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 35 + span: 8 + span: 56 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 35 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 35 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 35 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 36 + span: 8 + span: 59 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 36 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 36 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 36 + span: 43 + span: 57 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 37 + span: 8 + span: 53 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 37 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 37 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 37 + span: 39 + span: 51 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + span: 38 + span: 8 + span: 64 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 1 + span: 38 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 2 + span: 38 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 3 + span: 38 + span: 41 + span: 62 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + span: 39 + span: 8 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 1 + span: 39 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 2 + span: 39 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 3 + span: 39 + span: 43 + span: 64 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + span: 40 + span: 8 + span: 78 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 1 + span: 40 + span: 12 + span: 22 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 2 + span: 40 + span: 23 + span: 44 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 3 + span: 40 + span: 55 + span: 76 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + span: 41 + span: 8 + span: 62 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 1 + span: 41 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 2 + span: 41 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 3 + span: 41 + span: 39 + span: 60 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + span: 42 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 1 + span: 42 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 2 + span: 42 + span: 17 + span: 35 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 3 + span: 42 + span: 46 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + span: 43 + span: 8 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 1 + span: 43 + span: 12 + span: 21 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 2 + span: 43 + span: 22 + span: 38 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 3 + span: 43 + span: 49 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + span: 44 + span: 8 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 1 + span: 44 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 2 + span: 44 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 3 + span: 44 + span: 45 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + span: 45 + span: 8 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 1 + span: 45 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 2 + span: 45 + span: 19 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 3 + span: 45 + span: 47 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + span: 46 + span: 8 + span: 53 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 1 + span: 46 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 2 + span: 46 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 3 + span: 46 + span: 39 + span: 51 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + span: 47 + span: 8 + span: 56 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 1 + span: 47 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 2 + span: 47 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 3 + span: 47 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + span: 48 + span: 8 + span: 62 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 1 + span: 48 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 2 + span: 48 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 3 + span: 48 + span: 45 + span: 60 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + span: 49 + span: 8 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 1 + span: 49 + span: 12 + span: 20 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 2 + span: 49 + span: 21 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 3 + span: 49 + span: 47 + span: 68 + } + location: { + path: 4 + path: 0 + span: 52 + span: 0 + span: 63 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 52 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 53 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 53 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 53 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 53 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 54 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 54 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 54 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 54 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 55 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 4 + span: 55 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 55 + span: 17 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 55 + span: 40 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 55 + span: 49 + span: 50 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 56 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 56 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 56 + span: 13 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 56 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 57 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 57 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 57 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 57 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 58 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 5 + span: 58 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 58 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 58 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 59 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 5 + span: 59 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 59 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 59 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + span: 60 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 5 + span: 60 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 1 + span: 60 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 3 + span: 60 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + span: 61 + span: 8 + span: 37 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 5 + span: 61 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 1 + span: 61 + span: 15 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 3 + span: 61 + span: 35 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + span: 62 + span: 8 + span: 41 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 6 + span: 62 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 1 + span: 62 + span: 28 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 3 + span: 62 + span: 38 + span: 40 + } + location: { + path: 4 + path: 1 + span: 65 + span: 0 + span: 67 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 65 + span: 8 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 66 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 66 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 66 + span: 15 + span: 18 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 66 + span: 21 + span: 22 + } + location: { + path: 4 + path: 2 + span: 69 + span: 0 + span: 72 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 69 + span: 8 + span: 21 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 70 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 70 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 70 + span: 15 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 70 + span: 20 + span: 21 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 71 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 71 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 71 + span: 15 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 71 + span: 25 + span: 26 + } + location: { + path: 4 + path: 3 + span: 74 + span: 0 + span: 78 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 74 + span: 8 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 75 + span: 8 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 75 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 75 + span: 15 + span: 18 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 75 + span: 21 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 76 + span: 8 + span: 31 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 5 + span: 76 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 76 + span: 15 + span: 26 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 76 + span: 29 + span: 30 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + span: 77 + span: 8 + span: 48 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 6 + span: 77 + span: 8 + span: 33 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 1 + span: 77 + span: 34 + span: 43 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 3 + span: 77 + span: 46 + span: 47 + } + location: { + path: 4 + path: 4 + span: 80 + span: 0 + span: 88 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 80 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 81 + span: 8 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 81 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 81 + span: 15 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 81 + span: 20 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + span: 82 + span: 8 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 5 + span: 82 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 1 + span: 82 + span: 15 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 3 + span: 82 + span: 25 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + span: 83 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 5 + span: 83 + span: 8 + span: 12 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 1 + span: 83 + span: 13 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 3 + span: 83 + span: 24 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + span: 84 + span: 8 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 5 + span: 84 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 1 + span: 84 + span: 15 + span: 20 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 3 + span: 84 + span: 23 + span: 24 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + span: 85 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 5 + span: 85 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 1 + span: 85 + span: 15 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 3 + span: 85 + span: 24 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + span: 86 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 5 + span: 86 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 1 + span: 86 + span: 15 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 3 + span: 86 + span: 24 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + span: 87 + span: 8 + span: 37 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 6 + span: 87 + span: 8 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 1 + span: 87 + span: 28 + span: 32 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 3 + span: 87 + span: 35 + span: 36 + } + location: { + path: 4 + path: 5 + span: 90 + span: 0 + span: 91 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 90 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + span: 93 + span: 0 + span: 98 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 93 + span: 8 + span: 24 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 94 + span: 8 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 94 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 94 + span: 15 + span: 17 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 94 + span: 20 + span: 21 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 95 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 5 + span: 95 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 95 + span: 15 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 95 + span: 25 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + span: 96 + span: 8 + span: 25 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 5 + span: 96 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 1 + span: 96 + span: 15 + span: 20 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 3 + span: 96 + span: 23 + span: 24 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + span: 97 + span: 8 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 5 + span: 97 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 1 + span: 97 + span: 15 + span: 21 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 3 + span: 97 + span: 24 + span: 25 + } + location: { + path: 4 + path: 7 + span: 100 + span: 0 + span: 103 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 100 + span: 8 + span: 20 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 101 + span: 8 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 101 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 101 + span: 15 + span: 17 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 101 + span: 20 + span: 21 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 102 + span: 8 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 5 + span: 102 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 102 + span: 15 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 102 + span: 25 + span: 26 + } + location: { + path: 4 + path: 8 + span: 105 + span: 0 + span: 117 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 105 + span: 8 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 106 + span: 8 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 106 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 106 + span: 15 + span: 17 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 106 + span: 20 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + span: 107 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 5 + span: 107 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 1 + span: 107 + span: 15 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 3 + span: 107 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + span: 108 + span: 8 + span: 23 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 5 + span: 108 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 1 + span: 108 + span: 15 + span: 18 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 3 + span: 108 + span: 21 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 3 + span: 109 + span: 8 + span: 46 + } + location: { + path: 4 + path: 8 + path: 2 + path: 3 + path: 6 + span: 109 + span: 8 + span: 34 + } + location: { + path: 4 + path: 8 + path: 2 + path: 3 + path: 1 + span: 109 + span: 35 + span: 41 + } + location: { + path: 4 + path: 8 + path: 2 + path: 3 + path: 3 + span: 109 + span: 44 + span: 45 + } + location: { + path: 4 + path: 8 + path: 2 + path: 4 + span: 110 + span: 8 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 4 + path: 5 + span: 110 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 4 + path: 1 + span: 110 + span: 15 + span: 20 + } + location: { + path: 4 + path: 8 + path: 2 + path: 4 + path: 3 + span: 110 + span: 23 + span: 24 + } + location: { + path: 4 + path: 8 + path: 2 + path: 5 + span: 111 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 5 + path: 5 + span: 111 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 5 + path: 1 + span: 111 + span: 15 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 5 + path: 3 + span: 111 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 6 + span: 112 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 6 + path: 5 + span: 112 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 6 + path: 1 + span: 112 + span: 15 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 6 + path: 3 + span: 112 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 7 + span: 113 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 7 + path: 5 + span: 113 + span: 8 + span: 12 + } + location: { + path: 4 + path: 8 + path: 2 + path: 7 + path: 1 + span: 113 + span: 13 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 7 + path: 3 + span: 113 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 8 + span: 114 + span: 8 + span: 31 + } + location: { + path: 4 + path: 8 + path: 2 + path: 8 + path: 5 + span: 114 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 8 + path: 1 + span: 114 + span: 15 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 8 + path: 3 + span: 114 + span: 29 + span: 30 + } + location: { + path: 4 + path: 8 + path: 2 + path: 9 + span: 115 + span: 8 + span: 49 + } + location: { + path: 4 + path: 8 + path: 2 + path: 9 + path: 6 + span: 115 + span: 8 + span: 33 + } + location: { + path: 4 + path: 8 + path: 2 + path: 9 + path: 1 + span: 115 + span: 34 + span: 43 + } + location: { + path: 4 + path: 8 + path: 2 + path: 9 + path: 3 + span: 115 + span: 46 + span: 48 + } + location: { + path: 4 + path: 8 + path: 2 + path: 10 + span: 116 + span: 8 + span: 28 + } + location: { + path: 4 + path: 8 + path: 2 + path: 10 + path: 5 + span: 116 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 10 + path: 1 + span: 116 + span: 15 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 10 + path: 3 + span: 116 + span: 25 + span: 27 + } + location: { + path: 4 + path: 9 + span: 119 + span: 0 + span: 124 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 119 + span: 8 + span: 19 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 120 + span: 8 + span: 22 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 120 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 120 + span: 15 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 120 + span: 20 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + span: 121 + span: 8 + span: 27 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 5 + span: 121 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 1 + span: 121 + span: 15 + span: 22 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 3 + span: 121 + span: 25 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + span: 122 + span: 8 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 5 + span: 122 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 1 + span: 122 + span: 15 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 3 + span: 122 + span: 24 + span: 25 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + span: 123 + span: 8 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 5 + span: 123 + span: 8 + span: 12 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 1 + span: 123 + span: 13 + span: 16 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 3 + span: 123 + span: 19 + span: 20 + } + location: { + path: 4 + path: 10 + span: 126 + span: 0 + span: 130 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 126 + span: 8 + span: 22 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 127 + span: 8 + span: 22 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 5 + span: 127 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 127 + span: 15 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 127 + span: 20 + span: 21 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + span: 128 + span: 8 + span: 27 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 5 + span: 128 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 1 + span: 128 + span: 15 + span: 22 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 3 + span: 128 + span: 25 + span: 26 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + span: 129 + span: 8 + span: 23 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 5 + span: 129 + span: 8 + span: 12 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 1 + span: 129 + span: 13 + span: 18 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 3 + span: 129 + span: 21 + span: 22 + } + location: { + path: 4 + path: 11 + span: 132 + span: 0 + span: 134 + span: 1 + } + location: { + path: 4 + path: 11 + path: 1 + span: 132 + span: 8 + span: 19 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + span: 133 + span: 8 + span: 22 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 5 + span: 133 + span: 8 + span: 14 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 1 + span: 133 + span: 15 + span: 17 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 3 + span: 133 + span: 20 + span: 21 + } + location: { + path: 4 + path: 12 + span: 136 + span: 0 + span: 138 + span: 1 + } + location: { + path: 4 + path: 12 + path: 1 + span: 136 + span: 8 + span: 20 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + span: 137 + span: 8 + span: 63 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 4 + span: 137 + span: 8 + span: 16 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 6 + span: 137 + span: 17 + span: 48 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 1 + span: 137 + span: 49 + span: 58 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 3 + span: 137 + span: 61 + span: 62 + } + location: { + path: 4 + path: 13 + span: 140 + span: 0 + span: 144 + span: 1 + } + location: { + path: 4 + path: 13 + path: 1 + span: 140 + span: 8 + span: 29 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + span: 141 + span: 8 + span: 22 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 5 + span: 141 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 1 + span: 141 + span: 15 + span: 17 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 3 + span: 141 + span: 20 + span: 21 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + span: 142 + span: 8 + span: 24 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 5 + span: 142 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 1 + span: 142 + span: 15 + span: 19 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 3 + span: 142 + span: 22 + span: 23 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + span: 143 + span: 8 + span: 40 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 6 + span: 143 + span: 8 + span: 27 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 1 + span: 143 + span: 28 + span: 35 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 3 + span: 143 + span: 38 + span: 39 + } + location: { + path: 4 + path: 14 + span: 146 + span: 0 + span: 150 + span: 1 + } + location: { + path: 4 + path: 14 + path: 1 + span: 146 + span: 8 + span: 25 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + span: 147 + span: 8 + span: 22 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 5 + span: 147 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 1 + span: 147 + span: 15 + span: 17 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 3 + span: 147 + span: 20 + span: 21 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + span: 148 + span: 8 + span: 42 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 6 + span: 148 + span: 8 + span: 27 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 1 + span: 148 + span: 28 + span: 37 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 3 + span: 148 + span: 40 + span: 41 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + span: 149 + span: 8 + span: 44 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 6 + span: 149 + span: 8 + span: 27 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 1 + span: 149 + span: 28 + span: 39 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 3 + span: 149 + span: 42 + span: 43 + } + location: { + path: 4 + path: 15 + span: 152 + span: 0 + span: 155 + span: 1 + } + location: { + path: 4 + path: 15 + path: 1 + span: 152 + span: 8 + span: 20 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + span: 153 + span: 8 + span: 22 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 5 + span: 153 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 1 + span: 153 + span: 15 + span: 17 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 3 + span: 153 + span: 20 + span: 21 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + span: 154 + span: 8 + span: 27 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 5 + span: 154 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 1 + span: 154 + span: 15 + span: 22 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 3 + span: 154 + span: 25 + span: 26 + } + location: { + path: 4 + path: 16 + span: 157 + span: 0 + span: 159 + span: 1 + } + location: { + path: 4 + path: 16 + path: 1 + span: 157 + span: 8 + span: 21 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + span: 158 + span: 8 + span: 23 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 5 + span: 158 + span: 8 + span: 14 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 1 + span: 158 + span: 15 + span: 18 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 3 + span: 158 + span: 21 + span: 22 + } + location: { + path: 4 + path: 17 + span: 161 + span: 0 + span: 164 + span: 1 + } + location: { + path: 4 + path: 17 + path: 1 + span: 161 + span: 8 + span: 19 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + span: 162 + span: 8 + span: 22 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 5 + span: 162 + span: 8 + span: 14 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 1 + span: 162 + span: 15 + span: 17 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 3 + span: 162 + span: 20 + span: 21 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + span: 163 + span: 8 + span: 27 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 5 + span: 163 + span: 8 + span: 14 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 1 + span: 163 + span: 15 + span: 22 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 3 + span: 163 + span: 25 + span: 26 + } + location: { + path: 4 + path: 18 + span: 166 + span: 0 + span: 169 + span: 1 + } + location: { + path: 4 + path: 18 + path: 1 + span: 166 + span: 8 + span: 20 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + span: 167 + span: 8 + span: 31 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 5 + span: 167 + span: 8 + span: 14 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 1 + span: 167 + span: 15 + span: 26 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 3 + span: 167 + span: 29 + span: 30 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + span: 168 + span: 8 + span: 48 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 6 + span: 168 + span: 8 + span: 33 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 1 + span: 168 + span: 34 + span: 43 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 3 + span: 168 + span: 46 + span: 47 + } + location: { + path: 4 + path: 19 + span: 171 + span: 0 + span: 173 + span: 1 + } + location: { + path: 4 + path: 19 + path: 1 + span: 171 + span: 8 + span: 20 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + span: 172 + span: 8 + span: 22 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 5 + span: 172 + span: 8 + span: 14 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 1 + span: 172 + span: 15 + span: 17 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 3 + span: 172 + span: 20 + span: 21 + } + location: { + path: 4 + path: 20 + span: 175 + span: 0 + span: 177 + span: 1 + } + location: { + path: 4 + path: 20 + path: 1 + span: 175 + span: 8 + span: 21 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + span: 176 + span: 8 + span: 38 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 6 + span: 176 + span: 8 + span: 27 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 1 + span: 176 + span: 28 + span: 33 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 3 + span: 176 + span: 36 + span: 37 + } + location: { + path: 4 + path: 21 + span: 179 + span: 0 + span: 181 + span: 1 + } + location: { + path: 4 + path: 21 + path: 1 + span: 179 + span: 8 + span: 22 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + span: 180 + span: 8 + span: 22 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 5 + span: 180 + span: 8 + span: 14 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 1 + span: 180 + span: 15 + span: 17 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 3 + span: 180 + span: 20 + span: 21 + } + location: { + path: 4 + path: 22 + span: 183 + span: 0 + span: 187 + span: 1 + } + location: { + path: 4 + path: 22 + path: 1 + span: 183 + span: 8 + span: 23 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + span: 184 + span: 8 + span: 28 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 5 + span: 184 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 1 + span: 184 + span: 15 + span: 23 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 3 + span: 184 + span: 26 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + span: 185 + span: 8 + span: 28 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 5 + span: 185 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 1 + span: 185 + span: 15 + span: 23 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 3 + span: 185 + span: 26 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + span: 186 + span: 8 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 5 + span: 186 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 1 + span: 186 + span: 15 + span: 22 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 3 + span: 186 + span: 25 + span: 26 + } + location: { + path: 4 + path: 23 + span: 189 + span: 0 + span: 192 + span: 1 + } + location: { + path: 4 + path: 23 + path: 1 + span: 189 + span: 8 + span: 23 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + span: 190 + span: 8 + span: 22 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 5 + span: 190 + span: 8 + span: 14 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 1 + span: 190 + span: 15 + span: 17 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 3 + span: 190 + span: 20 + span: 21 + } + location: { + path: 4 + path: 23 + path: 2 + path: 1 + span: 191 + span: 8 + span: 21 + } + location: { + path: 4 + path: 23 + path: 2 + path: 1 + path: 5 + span: 191 + span: 8 + span: 12 + } + location: { + path: 4 + path: 23 + path: 2 + path: 1 + path: 1 + span: 191 + span: 13 + span: 16 + } + location: { + path: 4 + path: 23 + path: 2 + path: 1 + path: 3 + span: 191 + span: 19 + span: 20 + } + location: { + path: 4 + path: 24 + span: 194 + span: 0 + span: 196 + span: 1 + } + location: { + path: 4 + path: 24 + path: 1 + span: 194 + span: 8 + span: 20 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + span: 195 + span: 8 + span: 22 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 5 + span: 195 + span: 8 + span: 14 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 1 + span: 195 + span: 15 + span: 17 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 3 + span: 195 + span: 20 + span: 21 + } + location: { + path: 4 + path: 25 + span: 198 + span: 0 + span: 200 + span: 1 + } + location: { + path: 4 + path: 25 + path: 1 + span: 198 + span: 8 + span: 21 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + span: 199 + span: 8 + span: 22 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 5 + span: 199 + span: 8 + span: 14 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 1 + span: 199 + span: 15 + span: 17 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 3 + span: 199 + span: 20 + span: 21 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "runtime/task/v3/shim.proto" + package: "containerd.task.v3" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/timestamp.proto" + dependency: "types/mount.proto" + dependency: "types/task/task.proto" + message_type: { + name: "CreateTaskRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "bundle" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "bundle" + } + field: { + name: "rootfs" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "rootfs" + } + field: { + name: "terminal" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "stdin" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "checkpoint" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "checkpoint" + } + field: { + name: "parent_checkpoint" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "parentCheckpoint" + } + field: { + name: "options" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + message_type: { + name: "CreateTaskResponse" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "DeleteRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "DeleteResponse" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "exit_status" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "ExecProcessRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "terminal" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "stdin" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "spec" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "spec" + } + } + message_type: { + name: "ExecProcessResponse" + } + message_type: { + name: "ResizePtyRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "width" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "width" + } + field: { + name: "height" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "height" + } + } + message_type: { + name: "StateRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "StateResponse" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "bundle" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "bundle" + } + field: { + name: "pid" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "status" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".containerd.v1.types.Status" + json_name: "status" + } + field: { + name: "stdin" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "terminal" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "exit_status" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + field: { + name: "exec_id" + number: 11 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "KillRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "signal" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "signal" + } + field: { + name: "all" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "all" + } + } + message_type: { + name: "CloseIORequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "stdin" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "stdin" + } + } + message_type: { + name: "PidsRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "PidsResponse" + field: { + name: "processes" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.v1.types.ProcessInfo" + json_name: "processes" + } + } + message_type: { + name: "CheckpointTaskRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "path" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "path" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + message_type: { + name: "UpdateTaskRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "resources" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "resources" + } + field: { + name: "annotations" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.task.v3.UpdateTaskRequest.AnnotationsEntry" + json_name: "annotations" + } + nested_type: { + name: "AnnotationsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "StartRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "StartResponse" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "WaitRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "WaitResponse" + field: { + name: "exit_status" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "StatsRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "StatsResponse" + field: { + name: "stats" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "stats" + } + } + message_type: { + name: "ConnectRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "ConnectResponse" + field: { + name: "shim_pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "shimPid" + } + field: { + name: "task_pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "taskPid" + } + field: { + name: "version" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "version" + } + } + message_type: { + name: "ShutdownRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "now" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "now" + } + } + message_type: { + name: "PauseRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "ResumeRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + service: { + name: "Task" + method: { + name: "State" + input_type: ".containerd.task.v3.StateRequest" + output_type: ".containerd.task.v3.StateResponse" + } + method: { + name: "Create" + input_type: ".containerd.task.v3.CreateTaskRequest" + output_type: ".containerd.task.v3.CreateTaskResponse" + } + method: { + name: "Start" + input_type: ".containerd.task.v3.StartRequest" + output_type: ".containerd.task.v3.StartResponse" + } + method: { + name: "Delete" + input_type: ".containerd.task.v3.DeleteRequest" + output_type: ".containerd.task.v3.DeleteResponse" + } + method: { + name: "Pids" + input_type: ".containerd.task.v3.PidsRequest" + output_type: ".containerd.task.v3.PidsResponse" + } + method: { + name: "Pause" + input_type: ".containerd.task.v3.PauseRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Resume" + input_type: ".containerd.task.v3.ResumeRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Checkpoint" + input_type: ".containerd.task.v3.CheckpointTaskRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Kill" + input_type: ".containerd.task.v3.KillRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Exec" + input_type: ".containerd.task.v3.ExecProcessRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "ResizePty" + input_type: ".containerd.task.v3.ResizePtyRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "CloseIO" + input_type: ".containerd.task.v3.CloseIORequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Update" + input_type: ".containerd.task.v3.UpdateTaskRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Wait" + input_type: ".containerd.task.v3.WaitRequest" + output_type: ".containerd.task.v3.WaitResponse" + } + method: { + name: "Stats" + input_type: ".containerd.task.v3.StatsRequest" + output_type: ".containerd.task.v3.StatsResponse" + } + method: { + name: "Connect" + input_type: ".containerd.task.v3.ConnectRequest" + output_type: ".containerd.task.v3.ConnectResponse" + } + method: { + name: "Shutdown" + input_type: ".containerd.task.v3.ShutdownRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/runtime/task/v3;task" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 200 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 27 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 37 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 41 + } + location: { + path: 3 + path: 3 + span: 23 + span: 0 + span: 27 + } + location: { + path: 3 + path: 4 + span: 24 + span: 0 + span: 31 + } + location: { + path: 8 + span: 26 + span: 0 + span: 80 + } + location: { + path: 8 + path: 11 + span: 26 + span: 0 + span: 80 + } + location: { + path: 6 + path: 0 + span: 32 + span: 0 + span: 50 + span: 1 + leading_comments: " Shim service is launched for each container and is responsible for owning the IO\n for the container and its additional processes. The shim is also the parent of\n each container and allows reattaching to the IO and receiving the exit status\n for the container processes.\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 32 + span: 8 + span: 12 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 33 + span: 8 + span: 56 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 33 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 33 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 33 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 34 + span: 8 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 34 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 34 + span: 19 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 34 + span: 47 + span: 65 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 35 + span: 8 + span: 56 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 35 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 35 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 35 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 36 + span: 8 + span: 59 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 36 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 36 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 36 + span: 43 + span: 57 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 37 + span: 8 + span: 53 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 37 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 37 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 37 + span: 39 + span: 51 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + span: 38 + span: 8 + span: 64 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 1 + span: 38 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 2 + span: 38 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 3 + span: 38 + span: 41 + span: 62 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + span: 39 + span: 8 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 1 + span: 39 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 2 + span: 39 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 3 + span: 39 + span: 43 + span: 64 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + span: 40 + span: 8 + span: 78 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 1 + span: 40 + span: 12 + span: 22 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 2 + span: 40 + span: 23 + span: 44 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 3 + span: 40 + span: 55 + span: 76 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + span: 41 + span: 8 + span: 62 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 1 + span: 41 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 2 + span: 41 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 3 + span: 41 + span: 39 + span: 60 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + span: 42 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 1 + span: 42 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 2 + span: 42 + span: 17 + span: 35 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 3 + span: 42 + span: 46 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + span: 43 + span: 8 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 1 + span: 43 + span: 12 + span: 21 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 2 + span: 43 + span: 22 + span: 38 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 3 + span: 43 + span: 49 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + span: 44 + span: 8 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 1 + span: 44 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 2 + span: 44 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 3 + span: 44 + span: 45 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + span: 45 + span: 8 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 1 + span: 45 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 2 + span: 45 + span: 19 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 3 + span: 45 + span: 47 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + span: 46 + span: 8 + span: 53 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 1 + span: 46 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 2 + span: 46 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 3 + span: 46 + span: 39 + span: 51 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + span: 47 + span: 8 + span: 56 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 1 + span: 47 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 2 + span: 47 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 3 + span: 47 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + span: 48 + span: 8 + span: 62 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 1 + span: 48 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 2 + span: 48 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 3 + span: 48 + span: 45 + span: 60 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + span: 49 + span: 8 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 1 + span: 49 + span: 12 + span: 20 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 2 + span: 49 + span: 21 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 3 + span: 49 + span: 47 + span: 68 + } + location: { + path: 4 + path: 0 + span: 52 + span: 0 + span: 63 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 52 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 53 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 53 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 53 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 53 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 54 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 54 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 54 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 54 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 55 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 4 + span: 55 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 55 + span: 17 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 55 + span: 40 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 55 + span: 49 + span: 50 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 56 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 56 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 56 + span: 13 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 56 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 57 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 57 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 57 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 57 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 58 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 5 + span: 58 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 58 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 58 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 59 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 5 + span: 59 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 59 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 59 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + span: 60 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 5 + span: 60 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 1 + span: 60 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 3 + span: 60 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + span: 61 + span: 8 + span: 37 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 5 + span: 61 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 1 + span: 61 + span: 15 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 3 + span: 61 + span: 35 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + span: 62 + span: 8 + span: 41 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 6 + span: 62 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 1 + span: 62 + span: 28 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 3 + span: 62 + span: 38 + span: 40 + } + location: { + path: 4 + path: 1 + span: 65 + span: 0 + span: 67 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 65 + span: 8 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 66 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 66 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 66 + span: 15 + span: 18 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 66 + span: 21 + span: 22 + } + location: { + path: 4 + path: 2 + span: 69 + span: 0 + span: 72 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 69 + span: 8 + span: 21 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 70 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 70 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 70 + span: 15 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 70 + span: 20 + span: 21 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 71 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 71 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 71 + span: 15 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 71 + span: 25 + span: 26 + } + location: { + path: 4 + path: 3 + span: 74 + span: 0 + span: 78 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 74 + span: 8 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 75 + span: 8 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 75 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 75 + span: 15 + span: 18 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 75 + span: 21 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 76 + span: 8 + span: 31 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 5 + span: 76 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 76 + span: 15 + span: 26 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 76 + span: 29 + span: 30 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + span: 77 + span: 8 + span: 48 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 6 + span: 77 + span: 8 + span: 33 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 1 + span: 77 + span: 34 + span: 43 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 3 + span: 77 + span: 46 + span: 47 + } + location: { + path: 4 + path: 4 + span: 80 + span: 0 + span: 88 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 80 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 81 + span: 8 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 81 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 81 + span: 15 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 81 + span: 20 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + span: 82 + span: 8 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 5 + span: 82 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 1 + span: 82 + span: 15 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 3 + span: 82 + span: 25 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + span: 83 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 5 + span: 83 + span: 8 + span: 12 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 1 + span: 83 + span: 13 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 3 + span: 83 + span: 24 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + span: 84 + span: 8 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 5 + span: 84 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 1 + span: 84 + span: 15 + span: 20 + } + location: { + path: 4 + path: 4 + path: 2 + path: 3 + path: 3 + span: 84 + span: 23 + span: 24 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + span: 85 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 5 + span: 85 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 1 + span: 85 + span: 15 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 4 + path: 3 + span: 85 + span: 24 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + span: 86 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 5 + span: 86 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 1 + span: 86 + span: 15 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 5 + path: 3 + span: 86 + span: 24 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + span: 87 + span: 8 + span: 37 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 6 + span: 87 + span: 8 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 1 + span: 87 + span: 28 + span: 32 + } + location: { + path: 4 + path: 4 + path: 2 + path: 6 + path: 3 + span: 87 + span: 35 + span: 36 + } + location: { + path: 4 + path: 5 + span: 90 + span: 0 + span: 91 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 90 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + span: 93 + span: 0 + span: 98 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 93 + span: 8 + span: 24 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 94 + span: 8 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 94 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 94 + span: 15 + span: 17 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 94 + span: 20 + span: 21 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 95 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 5 + span: 95 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 95 + span: 15 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 95 + span: 25 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + span: 96 + span: 8 + span: 25 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 5 + span: 96 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 1 + span: 96 + span: 15 + span: 20 + } + location: { + path: 4 + path: 6 + path: 2 + path: 2 + path: 3 + span: 96 + span: 23 + span: 24 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + span: 97 + span: 8 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 5 + span: 97 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 1 + span: 97 + span: 15 + span: 21 + } + location: { + path: 4 + path: 6 + path: 2 + path: 3 + path: 3 + span: 97 + span: 24 + span: 25 + } + location: { + path: 4 + path: 7 + span: 100 + span: 0 + span: 103 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 100 + span: 8 + span: 20 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 101 + span: 8 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 101 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 101 + span: 15 + span: 17 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 101 + span: 20 + span: 21 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 102 + span: 8 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 5 + span: 102 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 102 + span: 15 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 102 + span: 25 + span: 26 + } + location: { + path: 4 + path: 8 + span: 105 + span: 0 + span: 117 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 105 + span: 8 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 106 + span: 8 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 106 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 106 + span: 15 + span: 17 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 106 + span: 20 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + span: 107 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 5 + span: 107 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 1 + span: 107 + span: 15 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 3 + span: 107 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + span: 108 + span: 8 + span: 23 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 5 + span: 108 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 1 + span: 108 + span: 15 + span: 18 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 3 + span: 108 + span: 21 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 3 + span: 109 + span: 8 + span: 46 + } + location: { + path: 4 + path: 8 + path: 2 + path: 3 + path: 6 + span: 109 + span: 8 + span: 34 + } + location: { + path: 4 + path: 8 + path: 2 + path: 3 + path: 1 + span: 109 + span: 35 + span: 41 + } + location: { + path: 4 + path: 8 + path: 2 + path: 3 + path: 3 + span: 109 + span: 44 + span: 45 + } + location: { + path: 4 + path: 8 + path: 2 + path: 4 + span: 110 + span: 8 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 4 + path: 5 + span: 110 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 4 + path: 1 + span: 110 + span: 15 + span: 20 + } + location: { + path: 4 + path: 8 + path: 2 + path: 4 + path: 3 + span: 110 + span: 23 + span: 24 + } + location: { + path: 4 + path: 8 + path: 2 + path: 5 + span: 111 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 5 + path: 5 + span: 111 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 5 + path: 1 + span: 111 + span: 15 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 5 + path: 3 + span: 111 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 6 + span: 112 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 6 + path: 5 + span: 112 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 6 + path: 1 + span: 112 + span: 15 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 6 + path: 3 + span: 112 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 7 + span: 113 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 7 + path: 5 + span: 113 + span: 8 + span: 12 + } + location: { + path: 4 + path: 8 + path: 2 + path: 7 + path: 1 + span: 113 + span: 13 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 7 + path: 3 + span: 113 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 8 + span: 114 + span: 8 + span: 31 + } + location: { + path: 4 + path: 8 + path: 2 + path: 8 + path: 5 + span: 114 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 8 + path: 1 + span: 114 + span: 15 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 8 + path: 3 + span: 114 + span: 29 + span: 30 + } + location: { + path: 4 + path: 8 + path: 2 + path: 9 + span: 115 + span: 8 + span: 49 + } + location: { + path: 4 + path: 8 + path: 2 + path: 9 + path: 6 + span: 115 + span: 8 + span: 33 + } + location: { + path: 4 + path: 8 + path: 2 + path: 9 + path: 1 + span: 115 + span: 34 + span: 43 + } + location: { + path: 4 + path: 8 + path: 2 + path: 9 + path: 3 + span: 115 + span: 46 + span: 48 + } + location: { + path: 4 + path: 8 + path: 2 + path: 10 + span: 116 + span: 8 + span: 28 + } + location: { + path: 4 + path: 8 + path: 2 + path: 10 + path: 5 + span: 116 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 10 + path: 1 + span: 116 + span: 15 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 10 + path: 3 + span: 116 + span: 25 + span: 27 + } + location: { + path: 4 + path: 9 + span: 119 + span: 0 + span: 124 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 119 + span: 8 + span: 19 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 120 + span: 8 + span: 22 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 120 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 120 + span: 15 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 120 + span: 20 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + span: 121 + span: 8 + span: 27 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 5 + span: 121 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 1 + span: 121 + span: 15 + span: 22 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 3 + span: 121 + span: 25 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + span: 122 + span: 8 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 5 + span: 122 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 1 + span: 122 + span: 15 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 3 + span: 122 + span: 24 + span: 25 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + span: 123 + span: 8 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 5 + span: 123 + span: 8 + span: 12 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 1 + span: 123 + span: 13 + span: 16 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 3 + span: 123 + span: 19 + span: 20 + } + location: { + path: 4 + path: 10 + span: 126 + span: 0 + span: 130 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 126 + span: 8 + span: 22 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 127 + span: 8 + span: 22 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 5 + span: 127 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 127 + span: 15 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 127 + span: 20 + span: 21 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + span: 128 + span: 8 + span: 27 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 5 + span: 128 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 1 + span: 128 + span: 15 + span: 22 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 3 + span: 128 + span: 25 + span: 26 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + span: 129 + span: 8 + span: 23 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 5 + span: 129 + span: 8 + span: 12 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 1 + span: 129 + span: 13 + span: 18 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 3 + span: 129 + span: 21 + span: 22 + } + location: { + path: 4 + path: 11 + span: 132 + span: 0 + span: 134 + span: 1 + } + location: { + path: 4 + path: 11 + path: 1 + span: 132 + span: 8 + span: 19 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + span: 133 + span: 8 + span: 22 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 5 + span: 133 + span: 8 + span: 14 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 1 + span: 133 + span: 15 + span: 17 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 3 + span: 133 + span: 20 + span: 21 + } + location: { + path: 4 + path: 12 + span: 136 + span: 0 + span: 138 + span: 1 + } + location: { + path: 4 + path: 12 + path: 1 + span: 136 + span: 8 + span: 20 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + span: 137 + span: 8 + span: 63 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 4 + span: 137 + span: 8 + span: 16 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 6 + span: 137 + span: 17 + span: 48 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 1 + span: 137 + span: 49 + span: 58 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 3 + span: 137 + span: 61 + span: 62 + } + location: { + path: 4 + path: 13 + span: 140 + span: 0 + span: 144 + span: 1 + } + location: { + path: 4 + path: 13 + path: 1 + span: 140 + span: 8 + span: 29 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + span: 141 + span: 8 + span: 22 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 5 + span: 141 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 1 + span: 141 + span: 15 + span: 17 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 3 + span: 141 + span: 20 + span: 21 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + span: 142 + span: 8 + span: 24 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 5 + span: 142 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 1 + span: 142 + span: 15 + span: 19 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 3 + span: 142 + span: 22 + span: 23 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + span: 143 + span: 8 + span: 40 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 6 + span: 143 + span: 8 + span: 27 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 1 + span: 143 + span: 28 + span: 35 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 3 + span: 143 + span: 38 + span: 39 + } + location: { + path: 4 + path: 14 + span: 146 + span: 0 + span: 150 + span: 1 + } + location: { + path: 4 + path: 14 + path: 1 + span: 146 + span: 8 + span: 25 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + span: 147 + span: 8 + span: 22 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 5 + span: 147 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 1 + span: 147 + span: 15 + span: 17 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 3 + span: 147 + span: 20 + span: 21 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + span: 148 + span: 8 + span: 42 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 6 + span: 148 + span: 8 + span: 27 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 1 + span: 148 + span: 28 + span: 37 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 3 + span: 148 + span: 40 + span: 41 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + span: 149 + span: 8 + span: 44 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 6 + span: 149 + span: 8 + span: 27 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 1 + span: 149 + span: 28 + span: 39 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 3 + span: 149 + span: 42 + span: 43 + } + location: { + path: 4 + path: 15 + span: 152 + span: 0 + span: 155 + span: 1 + } + location: { + path: 4 + path: 15 + path: 1 + span: 152 + span: 8 + span: 20 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + span: 153 + span: 8 + span: 22 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 5 + span: 153 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 1 + span: 153 + span: 15 + span: 17 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 3 + span: 153 + span: 20 + span: 21 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + span: 154 + span: 8 + span: 27 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 5 + span: 154 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 1 + span: 154 + span: 15 + span: 22 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 3 + span: 154 + span: 25 + span: 26 + } + location: { + path: 4 + path: 16 + span: 157 + span: 0 + span: 159 + span: 1 + } + location: { + path: 4 + path: 16 + path: 1 + span: 157 + span: 8 + span: 21 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + span: 158 + span: 8 + span: 23 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 5 + span: 158 + span: 8 + span: 14 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 1 + span: 158 + span: 15 + span: 18 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 3 + span: 158 + span: 21 + span: 22 + } + location: { + path: 4 + path: 17 + span: 161 + span: 0 + span: 164 + span: 1 + } + location: { + path: 4 + path: 17 + path: 1 + span: 161 + span: 8 + span: 19 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + span: 162 + span: 8 + span: 22 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 5 + span: 162 + span: 8 + span: 14 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 1 + span: 162 + span: 15 + span: 17 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 3 + span: 162 + span: 20 + span: 21 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + span: 163 + span: 8 + span: 27 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 5 + span: 163 + span: 8 + span: 14 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 1 + span: 163 + span: 15 + span: 22 + } + location: { + path: 4 + path: 17 + path: 2 + path: 1 + path: 3 + span: 163 + span: 25 + span: 26 + } + location: { + path: 4 + path: 18 + span: 166 + span: 0 + span: 169 + span: 1 + } + location: { + path: 4 + path: 18 + path: 1 + span: 166 + span: 8 + span: 20 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + span: 167 + span: 8 + span: 31 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 5 + span: 167 + span: 8 + span: 14 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 1 + span: 167 + span: 15 + span: 26 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 3 + span: 167 + span: 29 + span: 30 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + span: 168 + span: 8 + span: 48 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 6 + span: 168 + span: 8 + span: 33 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 1 + span: 168 + span: 34 + span: 43 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 3 + span: 168 + span: 46 + span: 47 + } + location: { + path: 4 + path: 19 + span: 171 + span: 0 + span: 173 + span: 1 + } + location: { + path: 4 + path: 19 + path: 1 + span: 171 + span: 8 + span: 20 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + span: 172 + span: 8 + span: 22 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 5 + span: 172 + span: 8 + span: 14 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 1 + span: 172 + span: 15 + span: 17 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 3 + span: 172 + span: 20 + span: 21 + } + location: { + path: 4 + path: 20 + span: 175 + span: 0 + span: 177 + span: 1 + } + location: { + path: 4 + path: 20 + path: 1 + span: 175 + span: 8 + span: 21 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + span: 176 + span: 8 + span: 38 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 6 + span: 176 + span: 8 + span: 27 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 1 + span: 176 + span: 28 + span: 33 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 3 + span: 176 + span: 36 + span: 37 + } + location: { + path: 4 + path: 21 + span: 179 + span: 0 + span: 181 + span: 1 + } + location: { + path: 4 + path: 21 + path: 1 + span: 179 + span: 8 + span: 22 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + span: 180 + span: 8 + span: 22 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 5 + span: 180 + span: 8 + span: 14 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 1 + span: 180 + span: 15 + span: 17 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 3 + span: 180 + span: 20 + span: 21 + } + location: { + path: 4 + path: 22 + span: 183 + span: 0 + span: 187 + span: 1 + } + location: { + path: 4 + path: 22 + path: 1 + span: 183 + span: 8 + span: 23 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + span: 184 + span: 8 + span: 28 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 5 + span: 184 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 1 + span: 184 + span: 15 + span: 23 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 3 + span: 184 + span: 26 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + span: 185 + span: 8 + span: 28 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 5 + span: 185 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 1 + span: 185 + span: 15 + span: 23 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 3 + span: 185 + span: 26 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + span: 186 + span: 8 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 5 + span: 186 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 1 + span: 186 + span: 15 + span: 22 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 3 + span: 186 + span: 25 + span: 26 + } + location: { + path: 4 + path: 23 + span: 189 + span: 0 + span: 192 + span: 1 + } + location: { + path: 4 + path: 23 + path: 1 + span: 189 + span: 8 + span: 23 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + span: 190 + span: 8 + span: 22 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 5 + span: 190 + span: 8 + span: 14 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 1 + span: 190 + span: 15 + span: 17 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 3 + span: 190 + span: 20 + span: 21 + } + location: { + path: 4 + path: 23 + path: 2 + path: 1 + span: 191 + span: 8 + span: 21 + } + location: { + path: 4 + path: 23 + path: 2 + path: 1 + path: 5 + span: 191 + span: 8 + span: 12 + } + location: { + path: 4 + path: 23 + path: 2 + path: 1 + path: 1 + span: 191 + span: 13 + span: 16 + } + location: { + path: 4 + path: 23 + path: 2 + path: 1 + path: 3 + span: 191 + span: 19 + span: 20 + } + location: { + path: 4 + path: 24 + span: 194 + span: 0 + span: 196 + span: 1 + } + location: { + path: 4 + path: 24 + path: 1 + span: 194 + span: 8 + span: 20 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + span: 195 + span: 8 + span: 22 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 5 + span: 195 + span: 8 + span: 14 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 1 + span: 195 + span: 15 + span: 17 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 3 + span: 195 + span: 20 + span: 21 + } + location: { + path: 4 + path: 25 + span: 198 + span: 0 + span: 200 + span: 1 + } + location: { + path: 4 + path: 25 + path: 1 + span: 198 + span: 8 + span: 21 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + span: 199 + span: 8 + span: 22 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 5 + span: 199 + span: 8 + span: 14 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 1 + span: 199 + span: 15 + span: 17 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 3 + span: 199 + span: 20 + span: 21 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "google/protobuf/field_mask.proto" + package: "google.protobuf" + message_type: { + name: "FieldMask" + field: { + name: "paths" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "paths" + } + } + options: { + java_package: "com.google.protobuf" + java_outer_classname: "FieldMaskProto" + java_multiple_files: true + go_package: "google.golang.org/protobuf/types/known/fieldmaskpb" + cc_enable_arenas: true + objc_class_prefix: "GPB" + csharp_namespace: "Google.Protobuf.WellKnownTypes" + } + source_code_info: { + location: { + span: 30 + span: 0 + span: 244 + span: 1 + } + location: { + path: 12 + span: 30 + span: 0 + span: 18 + leading_detached_comments: " Protocol Buffers - Google's data interchange format\n Copyright 2008 Google Inc. All rights reserved.\n https://developers.google.com/protocol-buffers/\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following disclaimer\n in the documentation and/or other materials provided with the\n distribution.\n * Neither the name of Google Inc. nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" + } + location: { + path: 2 + span: 32 + span: 0 + span: 24 + } + location: { + path: 8 + span: 34 + span: 0 + span: 44 + } + location: { + path: 8 + path: 1 + span: 34 + span: 0 + span: 44 + } + location: { + path: 8 + span: 35 + span: 0 + span: 47 + } + location: { + path: 8 + path: 8 + span: 35 + span: 0 + span: 47 + } + location: { + path: 8 + span: 36 + span: 0 + span: 34 + } + location: { + path: 8 + path: 10 + span: 36 + span: 0 + span: 34 + } + location: { + path: 8 + span: 37 + span: 0 + span: 33 + } + location: { + path: 8 + path: 36 + span: 37 + span: 0 + span: 33 + } + location: { + path: 8 + span: 38 + span: 0 + span: 59 + } + location: { + path: 8 + path: 37 + span: 38 + span: 0 + span: 59 + } + location: { + path: 8 + span: 39 + span: 0 + span: 73 + } + location: { + path: 8 + path: 11 + span: 39 + span: 0 + span: 73 + } + location: { + path: 8 + span: 40 + span: 0 + span: 31 + } + location: { + path: 8 + path: 31 + span: 40 + span: 0 + span: 31 + } + location: { + path: 4 + path: 0 + span: 241 + span: 0 + span: 244 + span: 1 + leading_comments: " `FieldMask` represents a set of symbolic field paths, for example:\n\n paths: \"f.a\"\n paths: \"f.b.d\"\n\n Here `f` represents a field in some root message, `a` and `b`\n fields in the message found in `f`, and `d` a field found in the\n message in `f.b`.\n\n Field masks are used to specify a subset of fields that should be\n returned by a get operation or modified by an update operation.\n Field masks also have a custom JSON encoding (see below).\n\n # Field Masks in Projections\n\n When used in the context of a projection, a response message or\n sub-message is filtered by the API to only contain those fields as\n specified in the mask. For example, if the mask in the previous\n example is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\n The result will not contain specific values for fields x,y and z\n (their value will be set to the default, and omitted in proto text\n output):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\n A repeated field is not allowed except at the last position of a\n paths string.\n\n If a FieldMask object is not present in a get operation, the\n operation applies to all fields (as if a FieldMask of all fields\n had been specified).\n\n Note that a field mask does not necessarily apply to the\n top-level response message. In case of a REST get operation, the\n field mask applies directly to the response, but in case of a REST\n list operation, the mask instead applies to each individual message\n in the returned resource list. In case of a REST custom method,\n other definitions may be used. Where the mask applies will be\n clearly documented together with its declaration in the API. In\n any case, the effect on the returned resource/resources is required\n behavior for APIs.\n\n # Field Masks in Update Operations\n\n A field mask in update operations specifies which fields of the\n targeted resource are going to be updated. The API is required\n to only change the values of the fields as specified in the mask\n and leave the others untouched. If a resource is passed in to\n describe the updated values, the API ignores the values of all\n fields not covered by the mask.\n\n If a repeated field is specified for an update operation, new values will\n be appended to the existing repeated field in the target resource. Note that\n a repeated field is only allowed in the last position of a `paths` string.\n\n If a sub-message is specified in the last position of the field mask for an\n update operation, then new value will be merged into the existing sub-message\n in the target resource.\n\n For example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\n And an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\n then if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\n then the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\n An implementation may provide options to override this default behavior for\n repeated and message fields.\n\n In order to reset a field's value to the default, the field must\n be in the mask and set to the default value in the provided resource.\n Hence, in order to reset all fields of a resource, provide a default\n instance of the resource and set all fields in the mask, or do\n not provide a mask as described below.\n\n If a field mask is not present on update, the operation applies to\n all fields (as if a field mask of all fields has been specified).\n Note that in the presence of schema evolution, this may mean that\n fields the client does not know and has therefore not filled into\n the request will be reset to their default. If this is unwanted\n behavior, a specific service may require a client to always specify\n a field mask, producing an error if not.\n\n As with get operations, the location of the resource which\n describes the updated values in the request message depends on the\n operation kind. In any case, the effect of the field mask is\n required to be honored by the API.\n\n ## Considerations for HTTP REST\n\n The HTTP kind of an update operation which uses a field mask must\n be set to PATCH instead of PUT in order to satisfy HTTP semantics\n (PUT must only be used for full updates).\n\n # JSON Encoding of Field Masks\n\n In JSON, a field mask is encoded as a single string where paths are\n separated by a comma. Fields name in each path are converted\n to/from lower-camel naming conventions.\n\n As an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\n In proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\n In JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n # Field Masks and Oneof Fields\n\n Field masks treat fields in oneofs just as regular fields. Consider the\n following message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\n The field mask can be:\n\n mask {\n paths: \"name\"\n }\n\n Or:\n\n mask {\n paths: \"sub_message\"\n }\n\n Note that oneof type names (\"test_oneof\" in this case) cannot be used in\n paths.\n\n ## Field Mask Verification\n\n The implementation of any API method which has a FieldMask type field in the\n request should verify the included field paths, and return an\n `INVALID_ARGUMENT` error if any path is unmappable.\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 241 + span: 8 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 243 + span: 2 + span: 28 + leading_comments: " The set of field mask paths.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 4 + span: 243 + span: 2 + span: 10 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 243 + span: 11 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 243 + span: 18 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 243 + span: 26 + span: 27 + } + } + syntax: "proto3" + buf_extension: { + is_import: true + is_syntax_unspecified: false + } +} +file: { + name: "services/containers/v1/containers.proto" + package: "containerd.services.containers.v1" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/field_mask.proto" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "Container" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "labels" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container.LabelsEntry" + json_name: "labels" + } + field: { + name: "image" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "image" + } + field: { + name: "runtime" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container.Runtime" + json_name: "runtime" + } + field: { + name: "spec" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "spec" + } + field: { + name: "snapshotter" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "snapshot_key" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotKey" + } + field: { + name: "created_at" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "updated_at" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "updatedAt" + } + field: { + name: "extensions" + number: 10 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container.ExtensionsEntry" + json_name: "extensions" + } + field: { + name: "sandbox" + number: 11 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandbox" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + nested_type: { + name: "Runtime" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "options" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + nested_type: { + name: "ExtensionsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "GetContainerRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "GetContainerResponse" + field: { + name: "container" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container" + json_name: "container" + } + } + message_type: { + name: "ListContainersRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "ListContainersResponse" + field: { + name: "containers" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container" + json_name: "containers" + } + } + message_type: { + name: "CreateContainerRequest" + field: { + name: "container" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container" + json_name: "container" + } + } + message_type: { + name: "CreateContainerResponse" + field: { + name: "container" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container" + json_name: "container" + } + } + message_type: { + name: "UpdateContainerRequest" + field: { + name: "container" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container" + json_name: "container" + } + field: { + name: "update_mask" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldMask" + json_name: "updateMask" + } + } + message_type: { + name: "UpdateContainerResponse" + field: { + name: "container" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container" + json_name: "container" + } + } + message_type: { + name: "DeleteContainerRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "ListContainerMessage" + field: { + name: "container" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.containers.v1.Container" + json_name: "container" + } + } + service: { + name: "Containers" + method: { + name: "Get" + input_type: ".containerd.services.containers.v1.GetContainerRequest" + output_type: ".containerd.services.containers.v1.GetContainerResponse" + } + method: { + name: "List" + input_type: ".containerd.services.containers.v1.ListContainersRequest" + output_type: ".containerd.services.containers.v1.ListContainersResponse" + } + method: { + name: "ListStream" + input_type: ".containerd.services.containers.v1.ListContainersRequest" + output_type: ".containerd.services.containers.v1.ListContainerMessage" + server_streaming: true + } + method: { + name: "Create" + input_type: ".containerd.services.containers.v1.CreateContainerRequest" + output_type: ".containerd.services.containers.v1.CreateContainerResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.containers.v1.UpdateContainerRequest" + output_type: ".containerd.services.containers.v1.UpdateContainerResponse" + } + method: { + name: "Delete" + input_type: ".containerd.services.containers.v1.DeleteContainerRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/containers/v1;containers" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 180 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 42 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 37 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 42 + } + location: { + path: 3 + path: 3 + span: 23 + span: 0 + span: 41 + } + location: { + path: 8 + span: 25 + span: 0 + span: 93 + } + location: { + path: 8 + path: 11 + span: 25 + span: 0 + span: 93 + } + location: { + path: 6 + path: 0 + span: 43 + span: 0 + span: 50 + span: 1 + leading_comments: " Containers provides metadata storage for containers used in the execution\n service.\n\n The objects here provide an state-independent view of containers for use in\n management and resource pinning. From that perspective, containers do not\n have a \"state\" but rather this is the set of resources that will be\n considered in use by the container.\n\n From the perspective of the execution service, these objects represent the\n base parameters for creating a container process.\n\n In general, when looking to add fields for this type, first ask yourself\n whether or not the function of the field has to do with runtime execution or\n is invariant of the runtime state of the container. If it has to do with\n runtime, or changes as the \"container\" is started and stops, it probably\n doesn't belong on this object.\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 43 + span: 8 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 44 + span: 8 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 44 + span: 12 + span: 15 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 44 + span: 16 + span: 35 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 44 + span: 46 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 45 + span: 8 + span: 73 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 45 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 45 + span: 17 + span: 38 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 45 + span: 49 + span: 71 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 46 + span: 8 + span: 84 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 46 + span: 12 + span: 22 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 46 + span: 23 + span: 44 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 6 + span: 46 + span: 55 + span: 61 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 46 + span: 62 + span: 82 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 47 + span: 8 + span: 77 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 47 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 47 + span: 19 + span: 41 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 47 + span: 52 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 48 + span: 8 + span: 77 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 48 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 48 + span: 19 + span: 41 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 48 + span: 52 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + span: 49 + span: 8 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 1 + span: 49 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 2 + span: 49 + span: 19 + span: 41 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 3 + span: 49 + span: 52 + span: 73 + } + location: { + path: 4 + path: 0 + span: 52 + span: 0 + span: 118 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 52 + span: 8 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 56 + span: 8 + span: 22 + leading_comments: " ID is the user-specified identifier.\n\n This field may not be updated.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 56 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 56 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 56 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 64 + span: 8 + span: 40 + leading_comments: " Labels provides an area to include arbitrary data on containers.\n\n The combined size of a key/value pair cannot exceed 4096 bytes.\n\n Note that to add a new value to this field, read the existing set and\n include the entire result in the update call.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 64 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 64 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 64 + span: 38 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 70 + span: 8 + span: 25 + leading_comments: " Image contains the reference of the image used to build the\n specification and snapshots for running this container.\n\n If this field is updated, the spec and rootfs needed to updated, as well.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 70 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 70 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 70 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + span: 72 + span: 8 + span: 77 + span: 9 + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 1 + span: 72 + span: 16 + span: 23 + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 2 + path: 0 + span: 74 + span: 16 + span: 32 + leading_comments: " Name is the name of the runtime.\n" + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 2 + path: 0 + path: 5 + span: 74 + span: 16 + span: 22 + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 2 + path: 0 + path: 1 + span: 74 + span: 23 + span: 27 + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 2 + path: 0 + path: 3 + span: 74 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 2 + path: 1 + span: 76 + span: 16 + span: 48 + leading_comments: " Options specify additional runtime initialization options.\n" + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 2 + path: 1 + path: 6 + span: 76 + span: 16 + span: 35 + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 2 + path: 1 + path: 1 + span: 76 + span: 36 + span: 43 + } + location: { + path: 4 + path: 0 + path: 3 + path: 1 + path: 2 + path: 1 + path: 3 + span: 76 + span: 46 + span: 47 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 79 + span: 8 + span: 28 + leading_comments: " Runtime specifies which runtime to use for executing this container.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 79 + span: 8 + span: 15 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 79 + span: 16 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 79 + span: 26 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 82 + span: 8 + span: 37 + leading_comments: " Spec to be used when creating the container. This is runtime specific.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 6 + span: 82 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 82 + span: 28 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 82 + span: 35 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 85 + span: 8 + span: 31 + leading_comments: " Snapshotter specifies the snapshotter name used for rootfs\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 5 + span: 85 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 85 + span: 15 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 85 + span: 29 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 97 + span: 8 + span: 32 + leading_comments: " SnapshotKey specifies the snapshot key to use for the container's root\n filesystem. When starting a task from this container, a caller should\n look up the mounts from the snapshot service and include those on the\n task create request.\n\n Snapshots referenced in this field will not be garbage collected.\n\n This field is set to empty when the rootfs is not a snapshot.\n\n This field may be updated.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 5 + span: 97 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 97 + span: 15 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 97 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + span: 100 + span: 8 + span: 49 + leading_comments: " CreatedAt is the time the container was first created.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 6 + span: 100 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 1 + span: 100 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 3 + span: 100 + span: 47 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + span: 103 + span: 8 + span: 49 + leading_comments: " UpdatedAt is the last time the container was mutated.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 6 + span: 103 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 1 + span: 103 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 3 + span: 103 + span: 47 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + span: 114 + span: 8 + span: 57 + leading_comments: " Extensions allow clients to provide zero or more blobs that are directly\n associated with the container. One may provide protobuf, json, or other\n encoding formats. The primary use of this is to further decorate the\n container object with fields that may be specific to a client integration.\n\n The key portion of this map should identify a \"name\" for the extension\n that should be unique against other extensions. When updating extension\n data, one should only update the specified extension using field paths\n to select a specific map key.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 6 + span: 114 + span: 8 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 1 + span: 114 + span: 41 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 3 + span: 114 + span: 54 + span: 56 + } + location: { + path: 4 + path: 0 + path: 2 + path: 10 + span: 117 + span: 8 + span: 28 + leading_comments: " Sandbox ID this container belongs to.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 10 + path: 5 + span: 117 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 10 + path: 1 + span: 117 + span: 15 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 10 + path: 3 + span: 117 + span: 25 + span: 27 + } + location: { + path: 4 + path: 1 + span: 120 + span: 0 + span: 122 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 120 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 121 + span: 8 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 121 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 121 + span: 15 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 121 + span: 20 + span: 21 + } + location: { + path: 4 + path: 2 + span: 124 + span: 0 + span: 126 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 124 + span: 8 + span: 28 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 125 + span: 8 + span: 32 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 6 + span: 125 + span: 8 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 125 + span: 18 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 125 + span: 30 + span: 31 + } + location: { + path: 4 + path: 3 + span: 128 + span: 0 + span: 140 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 128 + span: 8 + span: 29 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 139 + span: 8 + span: 36 + leading_comments: " Filters contains one or more filters using the syntax defined in the\n containerd filter package.\n\n The returned result will be those that match any of the provided\n filters. Expanded, containers that match the following will be\n returned:\n\n\tfilters[0] or filters[1] or ... or filters[n-1] or filters[n]\n\n If filters is zero-length or nil, all items will be returned.\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 4 + span: 139 + span: 8 + span: 16 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 139 + span: 17 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 139 + span: 24 + span: 31 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 139 + span: 34 + span: 35 + } + location: { + path: 4 + path: 4 + span: 142 + span: 0 + span: 144 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 142 + span: 8 + span: 30 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 143 + span: 8 + span: 42 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 4 + span: 143 + span: 8 + span: 16 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 6 + span: 143 + span: 17 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 143 + span: 27 + span: 37 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 143 + span: 40 + span: 41 + } + location: { + path: 4 + path: 5 + span: 146 + span: 0 + span: 148 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 146 + span: 8 + span: 30 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 147 + span: 8 + span: 32 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 6 + span: 147 + span: 8 + span: 17 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 147 + span: 18 + span: 27 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 147 + span: 30 + span: 31 + } + location: { + path: 4 + path: 6 + span: 150 + span: 0 + span: 152 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 150 + span: 8 + span: 31 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 151 + span: 8 + span: 32 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 6 + span: 151 + span: 8 + span: 17 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 151 + span: 18 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 151 + span: 30 + span: 31 + } + location: { + path: 4 + path: 7 + span: 159 + span: 0 + span: 168 + span: 1 + leading_comments: " UpdateContainerRequest updates the metadata on one or more container.\n\n The operation should follow semantics described in\n https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/field-mask,\n unless otherwise qualified.\n" + } + location: { + path: 4 + path: 7 + path: 1 + span: 159 + span: 8 + span: 30 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 163 + span: 8 + span: 32 + leading_comments: " Container provides the target values, as declared by the mask, for the update.\n\n The ID field must be set.\n" + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 6 + span: 163 + span: 8 + span: 17 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 163 + span: 18 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 163 + span: 30 + span: 31 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 167 + span: 8 + span: 50 + leading_comments: " UpdateMask specifies which fields to perform the update on. If empty,\n the operation applies to all fields.\n" + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 6 + span: 167 + span: 8 + span: 33 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 167 + span: 34 + span: 45 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 167 + span: 48 + span: 49 + } + location: { + path: 4 + path: 8 + span: 170 + span: 0 + span: 172 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 170 + span: 8 + span: 31 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 171 + span: 8 + span: 32 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 6 + span: 171 + span: 8 + span: 17 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 171 + span: 18 + span: 27 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 171 + span: 30 + span: 31 + } + location: { + path: 4 + path: 9 + span: 174 + span: 0 + span: 176 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 174 + span: 8 + span: 30 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 175 + span: 8 + span: 22 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 175 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 175 + span: 15 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 175 + span: 20 + span: 21 + } + location: { + path: 4 + path: 10 + span: 178 + span: 0 + span: 180 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 178 + span: 8 + span: 28 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 179 + span: 8 + span: 32 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 6 + span: 179 + span: 8 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 179 + span: 18 + span: 27 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 179 + span: 30 + span: 31 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/content/v1/content.proto" + package: "containerd.services.content.v1" + dependency: "google/protobuf/field_mask.proto" + dependency: "google/protobuf/timestamp.proto" + dependency: "google/protobuf/empty.proto" + message_type: { + name: "Info" + field: { + name: "digest" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "digest" + } + field: { + name: "size" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "size" + } + field: { + name: "created_at" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "updated_at" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "updatedAt" + } + field: { + name: "labels" + number: 5 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.content.v1.Info.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "InfoRequest" + field: { + name: "digest" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "digest" + } + } + message_type: { + name: "InfoResponse" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.content.v1.Info" + json_name: "info" + } + } + message_type: { + name: "UpdateRequest" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.content.v1.Info" + json_name: "info" + } + field: { + name: "update_mask" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldMask" + json_name: "updateMask" + } + } + message_type: { + name: "UpdateResponse" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.content.v1.Info" + json_name: "info" + } + } + message_type: { + name: "ListContentRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "ListContentResponse" + field: { + name: "info" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.content.v1.Info" + json_name: "info" + } + } + message_type: { + name: "DeleteContentRequest" + field: { + name: "digest" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "digest" + } + } + message_type: { + name: "ReadContentRequest" + field: { + name: "digest" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "digest" + } + field: { + name: "offset" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "offset" + } + field: { + name: "size" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "size" + } + } + message_type: { + name: "ReadContentResponse" + field: { + name: "offset" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "offset" + } + field: { + name: "data" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BYTES + json_name: "data" + } + } + message_type: { + name: "Status" + field: { + name: "started_at" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "startedAt" + } + field: { + name: "updated_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "updatedAt" + } + field: { + name: "ref" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "ref" + } + field: { + name: "offset" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "offset" + } + field: { + name: "total" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "total" + } + field: { + name: "expected" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "expected" + } + } + message_type: { + name: "StatusRequest" + field: { + name: "ref" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "ref" + } + } + message_type: { + name: "StatusResponse" + field: { + name: "status" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.content.v1.Status" + json_name: "status" + } + } + message_type: { + name: "ListStatusesRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "ListStatusesResponse" + field: { + name: "statuses" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.content.v1.Status" + json_name: "statuses" + } + } + message_type: { + name: "WriteContentRequest" + field: { + name: "action" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".containerd.services.content.v1.WriteAction" + json_name: "action" + } + field: { + name: "ref" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "ref" + } + field: { + name: "total" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "total" + } + field: { + name: "expected" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "expected" + } + field: { + name: "offset" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "offset" + } + field: { + name: "data" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_BYTES + json_name: "data" + } + field: { + name: "labels" + number: 7 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.content.v1.WriteContentRequest.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "WriteContentResponse" + field: { + name: "action" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".containerd.services.content.v1.WriteAction" + json_name: "action" + } + field: { + name: "started_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "startedAt" + } + field: { + name: "updated_at" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "updatedAt" + } + field: { + name: "offset" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "offset" + } + field: { + name: "total" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "total" + } + field: { + name: "digest" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "digest" + } + } + message_type: { + name: "AbortRequest" + field: { + name: "ref" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "ref" + } + } + enum_type: { + name: "WriteAction" + value: { + name: "STAT" + number: 0 + } + value: { + name: "WRITE" + number: 1 + } + value: { + name: "COMMIT" + number: 2 + } + } + service: { + name: "Content" + method: { + name: "Info" + input_type: ".containerd.services.content.v1.InfoRequest" + output_type: ".containerd.services.content.v1.InfoResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.content.v1.UpdateRequest" + output_type: ".containerd.services.content.v1.UpdateResponse" + } + method: { + name: "List" + input_type: ".containerd.services.content.v1.ListContentRequest" + output_type: ".containerd.services.content.v1.ListContentResponse" + server_streaming: true + } + method: { + name: "Delete" + input_type: ".containerd.services.content.v1.DeleteContentRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Read" + input_type: ".containerd.services.content.v1.ReadContentRequest" + output_type: ".containerd.services.content.v1.ReadContentResponse" + server_streaming: true + } + method: { + name: "Status" + input_type: ".containerd.services.content.v1.StatusRequest" + output_type: ".containerd.services.content.v1.StatusResponse" + } + method: { + name: "ListStatuses" + input_type: ".containerd.services.content.v1.ListStatusesRequest" + output_type: ".containerd.services.content.v1.ListStatusesResponse" + } + method: { + name: "Write" + input_type: ".containerd.services.content.v1.WriteContentRequest" + output_type: ".containerd.services.content.v1.WriteContentResponse" + client_streaming: true + server_streaming: true + } + method: { + name: "Abort" + input_type: ".containerd.services.content.v1.AbortRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/content/v1;content" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 329 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 39 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 42 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 41 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 37 + } + location: { + path: 8 + span: 24 + span: 0 + span: 87 + } + location: { + path: 8 + path: 11 + span: 24 + span: 0 + span: 87 + } + location: { + path: 6 + path: 0 + span: 27 + span: 0 + span: 89 + span: 1 + leading_comments: " Content provides access to a content addressable storage system.\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 27 + span: 8 + span: 15 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 32 + span: 8 + span: 53 + leading_comments: " Info returns information about a committed object.\n\n This call can be used for getting the size of content and checking for\n existence.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 32 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 32 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 32 + span: 39 + span: 51 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 39 + span: 8 + span: 59 + leading_comments: " Update updates content metadata.\n\n This call can be used to manage the mutable content labels. The\n immutable metadata such as digest, size, and committed at cannot\n be updated.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 39 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 39 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 39 + span: 43 + span: 57 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 47 + span: 8 + span: 74 + leading_comments: " List streams the entire set of content as Info objects and closes the\n stream.\n\n Typically, this will yield a large response, chunked into messages.\n Clients should make provisions to ensure they can handle the entire data\n set.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 47 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 47 + span: 17 + span: 35 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 6 + span: 47 + span: 46 + span: 52 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 47 + span: 53 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 50 + span: 8 + span: 73 + leading_comments: " Delete will delete the referenced object.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 50 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 50 + span: 19 + span: 39 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 50 + span: 50 + span: 71 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 55 + span: 8 + span: 74 + leading_comments: " Read allows one to read an object based on the offset into the content.\n\n The requested data may be returned in one or more messages.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 55 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 55 + span: 17 + span: 35 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 6 + span: 55 + span: 46 + span: 52 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 55 + span: 53 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + span: 58 + span: 8 + span: 59 + leading_comments: " Status returns the status for a single reference.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 1 + span: 58 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 2 + span: 58 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 3 + span: 58 + span: 43 + span: 57 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + span: 66 + span: 8 + span: 77 + leading_comments: " ListStatuses returns the status of ongoing object ingestions, started via\n Write.\n\n Only those matching the regular expression will be provided in the\n response. If the provided regular expression is empty, all ingestions\n will be provided.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 1 + span: 66 + span: 12 + span: 24 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 2 + span: 66 + span: 25 + span: 44 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 3 + span: 66 + span: 55 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + span: 84 + span: 8 + span: 84 + leading_comments: " Write begins or resumes writes to a resource identified by a unique ref.\n Only one active stream may exist at a time for each ref.\n\n Once a write stream has started, it may only write to a single ref, thus\n once a stream is started, the ref may be omitted on subsequent writes.\n\n For any write transaction represented by a ref, only a single write may\n be made to a given offset. If overlapping writes occur, it is an error.\n Writes should be sequential and implementations may throw an error if\n this is required.\n\n If expected_digest is set and already part of the content store, the\n write will fail.\n\n When completed, the commit flag should be set to true. If expected size\n or digest is set, the content will be validated against those values.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 1 + span: 84 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 5 + span: 84 + span: 18 + span: 24 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 2 + span: 84 + span: 25 + span: 44 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 6 + span: 84 + span: 55 + span: 61 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 3 + span: 84 + span: 62 + span: 82 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + span: 88 + span: 8 + span: 64 + leading_comments: " Abort cancels the ongoing write named in the request. Any resources\n associated with the write will be collected.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 1 + span: 88 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 2 + span: 88 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 3 + span: 88 + span: 41 + span: 62 + } + location: { + path: 4 + path: 0 + span: 91 + span: 0 + span: 108 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 91 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 93 + span: 8 + span: 26 + leading_comments: " Digest is the hash identity of the blob.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 93 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 93 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 93 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 96 + span: 8 + span: 23 + leading_comments: " Size is the total number of bytes in the blob.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 96 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 96 + span: 14 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 96 + span: 21 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 99 + span: 8 + span: 49 + leading_comments: " CreatedAt provides the time at which the blob was committed.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 99 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 99 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 99 + span: 47 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 102 + span: 8 + span: 49 + leading_comments: " UpdatedAt provides the time the info was last updated.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 102 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 102 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 102 + span: 47 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 107 + span: 8 + span: 40 + leading_comments: " Labels are arbitrary data on snapshots.\n\n The combined size of a key/value pair cannot exceed 4096 bytes.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 6 + span: 107 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 107 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 107 + span: 38 + span: 39 + } + location: { + path: 4 + path: 1 + span: 110 + span: 0 + span: 112 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 110 + span: 8 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 111 + span: 8 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 111 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 111 + span: 15 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 111 + span: 24 + span: 25 + } + location: { + path: 4 + path: 2 + span: 114 + span: 0 + span: 116 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 114 + span: 8 + span: 20 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 115 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 6 + span: 115 + span: 8 + span: 12 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 115 + span: 13 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 115 + span: 20 + span: 21 + } + location: { + path: 4 + path: 3 + span: 118 + span: 0 + span: 128 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 118 + span: 8 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 119 + span: 8 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 6 + span: 119 + span: 8 + span: 12 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 119 + span: 13 + span: 17 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 119 + span: 20 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 127 + span: 8 + span: 50 + leading_comments: " UpdateMask specifies which fields to perform the update on. If empty,\n the operation applies to all fields.\n\n In info, Digest, Size, and CreatedAt are immutable,\n other field may be updated using this mask.\n If no mask is provided, all mutable field are updated.\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 6 + span: 127 + span: 8 + span: 33 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 127 + span: 34 + span: 45 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 127 + span: 48 + span: 49 + } + location: { + path: 4 + path: 4 + span: 130 + span: 0 + span: 132 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 130 + span: 8 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 131 + span: 8 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 6 + span: 131 + span: 8 + span: 12 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 131 + span: 13 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 131 + span: 20 + span: 21 + } + location: { + path: 4 + path: 5 + span: 134 + span: 0 + span: 146 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 134 + span: 8 + span: 26 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 145 + span: 8 + span: 36 + leading_comments: " Filters contains one or more filters using the syntax defined in the\n containerd filter package.\n\n The returned result will be those that match any of the provided\n filters. Expanded, containers that match the following will be\n returned:\n\n\tfilters[0] or filters[1] or ... or filters[n-1] or filters[n]\n\n If filters is zero-length or nil, all items will be returned.\n" + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 4 + span: 145 + span: 8 + span: 16 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 5 + span: 145 + span: 17 + span: 23 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 145 + span: 24 + span: 31 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 145 + span: 34 + span: 35 + } + location: { + path: 4 + path: 6 + span: 148 + span: 0 + span: 150 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 148 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 149 + span: 8 + span: 31 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 4 + span: 149 + span: 8 + span: 16 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 6 + span: 149 + span: 17 + span: 21 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 149 + span: 22 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 149 + span: 29 + span: 30 + } + location: { + path: 4 + path: 7 + span: 152 + span: 0 + span: 155 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 152 + span: 8 + span: 28 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 154 + span: 8 + span: 26 + leading_comments: " Digest specifies which content to delete.\n" + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 154 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 154 + span: 15 + span: 21 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 154 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + span: 159 + span: 0 + span: 171 + span: 1 + leading_comments: " ReadContentRequest defines the fields that make up a request to read a portion of\n data from a stored object.\n" + } + location: { + path: 4 + path: 8 + path: 1 + span: 159 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 161 + span: 8 + span: 26 + leading_comments: " Digest is the hash identity to read.\n" + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 161 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 161 + span: 15 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 161 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + span: 166 + span: 8 + span: 25 + leading_comments: " Offset specifies the number of bytes from the start at which to begin\n the read. If zero or less, the read will be from the start. This uses\n standard zero-indexed semantics.\n" + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 5 + span: 166 + span: 8 + span: 13 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 1 + span: 166 + span: 14 + span: 20 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 3 + span: 166 + span: 23 + span: 24 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + span: 170 + span: 8 + span: 23 + leading_comments: " size is the total size of the read. If zero, the entire blob will be\n returned by the service.\n" + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 5 + span: 170 + span: 8 + span: 13 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 1 + span: 170 + span: 14 + span: 18 + } + location: { + path: 4 + path: 8 + path: 2 + path: 2 + path: 3 + span: 170 + span: 21 + span: 22 + } + location: { + path: 4 + path: 9 + span: 174 + span: 0 + span: 177 + span: 1 + leading_comments: " ReadContentResponse carries byte data for a read request.\n" + } + location: { + path: 4 + path: 9 + path: 1 + span: 174 + span: 8 + span: 27 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 175 + span: 8 + span: 25 + trailing_comments: " offset of the returned data\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 175 + span: 8 + span: 13 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 175 + span: 14 + span: 20 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 175 + span: 23 + span: 24 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + span: 176 + span: 8 + span: 23 + trailing_comments: " actual data\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 5 + span: 176 + span: 8 + span: 13 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 1 + span: 176 + span: 14 + span: 18 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 3 + span: 176 + span: 21 + span: 22 + } + location: { + path: 4 + path: 10 + span: 179 + span: 0 + span: 186 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 179 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 180 + span: 8 + span: 49 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 6 + span: 180 + span: 8 + span: 33 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 180 + span: 34 + span: 44 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 180 + span: 47 + span: 48 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + span: 181 + span: 8 + span: 49 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 6 + span: 181 + span: 8 + span: 33 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 1 + span: 181 + span: 34 + span: 44 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 3 + span: 181 + span: 47 + span: 48 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + span: 182 + span: 8 + span: 23 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 5 + span: 182 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 1 + span: 182 + span: 15 + span: 18 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 3 + span: 182 + span: 21 + span: 22 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + span: 183 + span: 8 + span: 25 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 5 + span: 183 + span: 8 + span: 13 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 1 + span: 183 + span: 14 + span: 20 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 3 + span: 183 + span: 23 + span: 24 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + span: 184 + span: 8 + span: 24 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 5 + span: 184 + span: 8 + span: 13 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 1 + span: 184 + span: 14 + span: 19 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 3 + span: 184 + span: 22 + span: 23 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + span: 185 + span: 8 + span: 28 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 5 + span: 185 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 1 + span: 185 + span: 15 + span: 23 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 3 + span: 185 + span: 26 + span: 27 + } + location: { + path: 4 + path: 11 + span: 189 + span: 0 + span: 191 + span: 1 + } + location: { + path: 4 + path: 11 + path: 1 + span: 189 + span: 8 + span: 21 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + span: 190 + span: 8 + span: 23 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 5 + span: 190 + span: 8 + span: 14 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 1 + span: 190 + span: 15 + span: 18 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 3 + span: 190 + span: 21 + span: 22 + } + location: { + path: 4 + path: 12 + span: 193 + span: 0 + span: 195 + span: 1 + } + location: { + path: 4 + path: 12 + path: 1 + span: 193 + span: 8 + span: 22 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + span: 194 + span: 8 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 6 + span: 194 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 1 + span: 194 + span: 15 + span: 21 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 3 + span: 194 + span: 24 + span: 25 + } + location: { + path: 4 + path: 13 + span: 197 + span: 0 + span: 199 + span: 1 + } + location: { + path: 4 + path: 13 + path: 1 + span: 197 + span: 8 + span: 27 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + span: 198 + span: 8 + span: 36 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 4 + span: 198 + span: 8 + span: 16 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 5 + span: 198 + span: 17 + span: 23 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 1 + span: 198 + span: 24 + span: 31 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 3 + span: 198 + span: 34 + span: 35 + } + location: { + path: 4 + path: 14 + span: 201 + span: 0 + span: 203 + span: 1 + } + location: { + path: 4 + path: 14 + path: 1 + span: 201 + span: 8 + span: 28 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + span: 202 + span: 8 + span: 37 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 4 + span: 202 + span: 8 + span: 16 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 6 + span: 202 + span: 17 + span: 23 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 1 + span: 202 + span: 24 + span: 32 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 3 + span: 202 + span: 35 + span: 36 + } + location: { + path: 5 + path: 0 + span: 206 + span: 0 + span: 227 + span: 1 + leading_comments: " WriteAction defines the behavior of a WriteRequest.\n" + } + location: { + path: 5 + path: 0 + path: 1 + span: 206 + span: 5 + span: 16 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + span: 209 + span: 8 + span: 17 + leading_comments: " WriteActionStat instructs the writer to return the current status while\n holding the lock on the write.\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 1 + span: 209 + span: 8 + span: 12 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 2 + span: 209 + span: 15 + span: 16 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + span: 217 + span: 8 + span: 18 + leading_comments: " WriteActionWrite sets the action for the write request to write data.\n\n Any data included will be written at the provided offset. The\n transaction will be left open for further writes.\n\n This is the default.\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 1 + span: 217 + span: 8 + span: 13 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 2 + span: 217 + span: 16 + span: 17 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + span: 226 + span: 8 + span: 19 + leading_comments: " WriteActionCommit will write any outstanding data in the message and\n commit the write, storing it under the digest.\n\n This can be used in a single message to send the data, verify it and\n commit it.\n\n This action will always terminate the write.\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 1 + span: 226 + span: 8 + span: 14 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 2 + span: 226 + span: 17 + span: 18 + } + location: { + path: 4 + path: 15 + span: 230 + span: 0 + span: 290 + span: 1 + leading_comments: " WriteContentRequest writes data to the request ref at offset.\n" + } + location: { + path: 4 + path: 15 + path: 1 + span: 230 + span: 8 + span: 27 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + span: 242 + span: 8 + span: 31 + leading_comments: " Action sets the behavior of the write.\n\n When this is a write and the ref is not yet allocated, the ref will be\n allocated and the data will be written at offset.\n\n If the action is write and the ref is allocated, it will accept data to\n an offset that has not yet been written.\n\n If the action is write and there is no data, the current write status\n will be returned. This works differently from status because the stream\n holds a lock.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 6 + span: 242 + span: 8 + span: 19 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 1 + span: 242 + span: 20 + span: 26 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 3 + span: 242 + span: 29 + span: 30 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + span: 245 + span: 8 + span: 23 + leading_comments: " Ref identifies the pre-commit object to write to.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 5 + span: 245 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 1 + span: 245 + span: 15 + span: 18 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 3 + span: 245 + span: 21 + span: 22 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + span: 256 + span: 8 + span: 24 + leading_comments: " Total can be set to have the service validate the total size of the\n committed content.\n\n The latest value before or with the commit action message will be use to\n validate the content. If the offset overflows total, the service may\n report an error. It is only required on one message for the write.\n\n If the value is zero or less, no validation of the final content will be\n performed.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 5 + span: 256 + span: 8 + span: 13 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 1 + span: 256 + span: 14 + span: 19 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 3 + span: 256 + span: 22 + span: 23 + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + span: 267 + span: 8 + span: 28 + leading_comments: " Expected can be set to have the service validate the final content against\n the provided digest.\n\n If the digest is already present in the object store, an AlreadyExists\n error will be returned.\n\n Only the latest version will be used to check the content against the\n digest. It is only required to include it on a single message, before or\n with the commit action message.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + path: 5 + span: 267 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + path: 1 + span: 267 + span: 15 + span: 23 + } + location: { + path: 4 + path: 15 + path: 2 + path: 3 + path: 3 + span: 267 + span: 26 + span: 27 + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + span: 278 + span: 8 + span: 25 + leading_comments: " Offset specifies the number of bytes from the start at which to begin\n the write. For most implementations, this means from the start of the\n file. This uses standard, zero-indexed semantics.\n\n If the action is write, the remote may remove all previously written\n data after the offset. Implementations may support arbitrary offsets but\n MUST support reseting this value to zero with a write. If an\n implementation does not support a write at a particular offset, an\n OutOfRange error must be returned.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + path: 5 + span: 278 + span: 8 + span: 13 + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + path: 1 + span: 278 + span: 14 + span: 20 + } + location: { + path: 4 + path: 15 + path: 2 + path: 4 + path: 3 + span: 278 + span: 23 + span: 24 + } + location: { + path: 4 + path: 15 + path: 2 + path: 5 + span: 284 + span: 8 + span: 23 + leading_comments: " Data is the actual bytes to be written.\n\n If this is empty and the message is not a commit, a response will be\n returned with the current write state.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 5 + path: 5 + span: 284 + span: 8 + span: 13 + } + location: { + path: 4 + path: 15 + path: 2 + path: 5 + path: 1 + span: 284 + span: 14 + span: 18 + } + location: { + path: 4 + path: 15 + path: 2 + path: 5 + path: 3 + span: 284 + span: 21 + span: 22 + } + location: { + path: 4 + path: 15 + path: 2 + path: 6 + span: 289 + span: 8 + span: 40 + leading_comments: " Labels are arbitrary data on snapshots.\n\n The combined size of a key/value pair cannot exceed 4096 bytes.\n" + } + location: { + path: 4 + path: 15 + path: 2 + path: 6 + path: 6 + span: 289 + span: 8 + span: 27 + } + location: { + path: 4 + path: 15 + path: 2 + path: 6 + path: 1 + span: 289 + span: 28 + span: 34 + } + location: { + path: 4 + path: 15 + path: 2 + path: 6 + path: 3 + span: 289 + span: 38 + span: 39 + } + location: { + path: 4 + path: 16 + span: 293 + span: 0 + span: 325 + span: 1 + leading_comments: " WriteContentResponse is returned on the culmination of a write call.\n" + } + location: { + path: 4 + path: 16 + path: 1 + span: 293 + span: 8 + span: 28 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + span: 296 + span: 8 + span: 31 + leading_comments: " Action contains the action for the final message of the stream. A writer\n should confirm that they match the intended result.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 6 + span: 296 + span: 8 + span: 19 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 1 + span: 296 + span: 20 + span: 26 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 3 + span: 296 + span: 29 + span: 30 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + span: 302 + span: 8 + span: 49 + leading_comments: " StartedAt provides the time at which the write began.\n\n This must be set for stat and commit write actions. All other write\n actions may omit this.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 6 + span: 302 + span: 8 + span: 33 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 1 + span: 302 + span: 34 + span: 44 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 3 + span: 302 + span: 47 + span: 48 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + span: 308 + span: 8 + span: 49 + leading_comments: " UpdatedAt provides the last time of a successful write.\n\n This must be set for stat and commit write actions. All other write\n actions may omit this.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 6 + span: 308 + span: 8 + span: 33 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 1 + span: 308 + span: 34 + span: 44 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 3 + span: 308 + span: 47 + span: 48 + } + location: { + path: 4 + path: 16 + path: 2 + path: 3 + span: 311 + span: 8 + span: 25 + leading_comments: " Offset is the current committed size for the write.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 3 + path: 5 + span: 311 + span: 8 + span: 13 + } + location: { + path: 4 + path: 16 + path: 2 + path: 3 + path: 1 + span: 311 + span: 14 + span: 20 + } + location: { + path: 4 + path: 16 + path: 2 + path: 3 + path: 3 + span: 311 + span: 23 + span: 24 + } + location: { + path: 4 + path: 16 + path: 2 + path: 4 + span: 319 + span: 8 + span: 24 + leading_comments: " Total provides the current, expected total size of the write.\n\n We include this to provide consistency with the Status structure on the\n client writer.\n\n This is only valid on the Stat and Commit response.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 4 + path: 5 + span: 319 + span: 8 + span: 13 + } + location: { + path: 4 + path: 16 + path: 2 + path: 4 + path: 1 + span: 319 + span: 14 + span: 19 + } + location: { + path: 4 + path: 16 + path: 2 + path: 4 + path: 3 + span: 319 + span: 22 + span: 23 + } + location: { + path: 4 + path: 16 + path: 2 + path: 5 + span: 324 + span: 8 + span: 26 + leading_comments: " Digest, if present, includes the digest up to the currently committed\n bytes. If action is commit, this field will be set. It is implementation\n defined if this is set for other actions.\n" + } + location: { + path: 4 + path: 16 + path: 2 + path: 5 + path: 5 + span: 324 + span: 8 + span: 14 + } + location: { + path: 4 + path: 16 + path: 2 + path: 5 + path: 1 + span: 324 + span: 15 + span: 21 + } + location: { + path: 4 + path: 16 + path: 2 + path: 5 + path: 3 + span: 324 + span: 24 + span: 25 + } + location: { + path: 4 + path: 17 + span: 327 + span: 0 + span: 329 + span: 1 + } + location: { + path: 4 + path: 17 + path: 1 + span: 327 + span: 8 + span: 20 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + span: 328 + span: 8 + span: 23 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 5 + span: 328 + span: 8 + span: 14 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 1 + span: 328 + span: 15 + span: 18 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 3 + span: 328 + span: 21 + span: 22 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/descriptor.proto" + package: "containerd.types" + message_type: { + name: "Descriptor" + field: { + name: "media_type" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "mediaType" + } + field: { + name: "digest" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "digest" + } + field: { + name: "size" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "size" + } + field: { + name: "annotations" + number: 5 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor.AnnotationsEntry" + json_name: "annotations" + } + nested_type: { + name: "AnnotationsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + options: { + go_package: "github.com/containerd/containerd/api/types;types" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 32 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 25 + } + location: { + path: 8 + span: 20 + span: 0 + span: 71 + } + location: { + path: 8 + path: 11 + span: 20 + span: 0 + span: 71 + } + location: { + path: 4 + path: 0 + span: 27 + span: 0 + span: 32 + span: 1 + leading_comments: " Descriptor describes a blob in a content store.\n\n This descriptor can be used to reference content from an\n oci descriptor found in a manifest.\n See https://godoc.org/github.com/opencontainers/image-spec/specs-go/v1#Descriptor\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 27 + span: 8 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 28 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 28 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 28 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 28 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 29 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 29 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 29 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 29 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 30 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 30 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 30 + span: 14 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 30 + span: 21 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 31 + span: 8 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 31 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 31 + span: 28 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 31 + span: 42 + span: 43 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/diff/v1/diff.proto" + package: "containerd.services.diff.v1" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/timestamp.proto" + dependency: "types/mount.proto" + dependency: "types/descriptor.proto" + message_type: { + name: "ApplyRequest" + field: { + name: "diff" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor" + json_name: "diff" + } + field: { + name: "mounts" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "mounts" + } + field: { + name: "payloads" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.diff.v1.ApplyRequest.PayloadsEntry" + json_name: "payloads" + } + field: { + name: "sync_fs" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "syncFs" + } + nested_type: { + name: "PayloadsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ApplyResponse" + field: { + name: "applied" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor" + json_name: "applied" + } + } + message_type: { + name: "DiffRequest" + field: { + name: "left" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "left" + } + field: { + name: "right" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "right" + } + field: { + name: "media_type" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "mediaType" + } + field: { + name: "ref" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "ref" + } + field: { + name: "labels" + number: 5 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.diff.v1.DiffRequest.LabelsEntry" + json_name: "labels" + } + field: { + name: "source_date_epoch" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "sourceDateEpoch" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "DiffResponse" + field: { + name: "diff" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor" + json_name: "diff" + } + } + service: { + name: "Diff" + method: { + name: "Apply" + input_type: ".containerd.services.diff.v1.ApplyRequest" + output_type: ".containerd.services.diff.v1.ApplyResponse" + } + method: { + name: "Diff" + input_type: ".containerd.services.diff.v1.DiffRequest" + output_type: ".containerd.services.diff.v1.DiffResponse" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/diff/v1;diff" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 89 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 36 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 41 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 27 + } + location: { + path: 3 + path: 3 + span: 23 + span: 0 + span: 32 + } + location: { + path: 8 + span: 25 + span: 0 + span: 81 + } + location: { + path: 8 + path: 11 + span: 25 + span: 0 + span: 81 + } + location: { + path: 6 + path: 0 + span: 28 + span: 0 + span: 37 + span: 1 + leading_comments: " Diff service creates and applies diffs\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 28 + span: 8 + span: 12 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 32 + span: 8 + span: 56 + leading_comments: " Apply applies the content associated with the provided digests onto\n the provided mounts. Archive content will be extracted and\n decompressed if necessary.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 32 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 32 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 32 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 36 + span: 8 + span: 53 + leading_comments: " Diff creates a diff between the given mounts and uploads the result\n to the content store.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 36 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 36 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 36 + span: 39 + span: 51 + } + location: { + path: 4 + path: 0 + span: 39 + span: 0 + span: 48 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 39 + span: 8 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 41 + span: 8 + span: 45 + leading_comments: " Diff is the descriptor of the diff to be extracted\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 6 + span: 41 + span: 8 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 41 + span: 36 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 41 + span: 43 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 43 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 4 + span: 43 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 43 + span: 17 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 43 + span: 40 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 43 + span: 49 + span: 50 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 45 + span: 8 + span: 54 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 45 + span: 8 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 45 + span: 41 + span: 49 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 45 + span: 52 + span: 53 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 47 + span: 8 + span: 25 + leading_comments: " SyncFs is to synchronize the underlying filesystem containing files.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 47 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 47 + span: 13 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 47 + span: 23 + span: 24 + } + location: { + path: 4 + path: 1 + span: 50 + span: 0 + span: 55 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 50 + span: 8 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 54 + span: 8 + span: 48 + leading_comments: " Applied is the descriptor for the object which was applied.\n If the input was a compressed blob then the result will be\n the descriptor for the uncompressed blob.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 6 + span: 54 + span: 8 + span: 35 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 54 + span: 36 + span: 43 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 54 + span: 46 + span: 47 + } + location: { + path: 4 + path: 2 + span: 57 + span: 0 + span: 84 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 57 + span: 8 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 60 + span: 8 + span: 49 + leading_comments: " Left are the mounts which represent the older copy\n in which is the base of the computed changes.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 4 + span: 60 + span: 8 + span: 16 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 6 + span: 60 + span: 17 + span: 39 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 60 + span: 40 + span: 44 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 60 + span: 47 + span: 48 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 64 + span: 8 + span: 50 + leading_comments: " Right are the mounts which represents the newer copy\n in which changes from the left were made into.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 4 + span: 64 + span: 8 + span: 16 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 6 + span: 64 + span: 17 + span: 39 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 64 + span: 40 + span: 45 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 64 + span: 48 + span: 49 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 68 + span: 8 + span: 30 + leading_comments: " MediaType is the media type descriptor for the created diff\n object\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 5 + span: 68 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 68 + span: 15 + span: 25 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 68 + span: 28 + span: 29 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + span: 72 + span: 8 + span: 23 + leading_comments: " Ref identifies the pre-commit content store object. This\n reference can be used to get the status from the content store.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 5 + span: 72 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 1 + span: 72 + span: 15 + span: 18 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 3 + span: 72 + span: 21 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + span: 76 + span: 8 + span: 39 + leading_comments: " Labels are the labels to apply to the generated content\n on content store commit.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 6 + span: 76 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 1 + span: 76 + span: 28 + span: 34 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 3 + span: 76 + span: 37 + span: 38 + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + span: 83 + span: 8 + span: 56 + leading_comments: " SourceDateEpoch specifies the timestamp used to provide control for reproducibility.\n See also https://reproducible-builds.org/docs/source-date-epoch/ .\n\n Since containerd v2.0, the whiteout timestamps are set to zero (1970-01-01),\n not to the source date epoch.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + path: 6 + span: 83 + span: 8 + span: 33 + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + path: 1 + span: 83 + span: 34 + span: 51 + } + location: { + path: 4 + path: 2 + path: 2 + path: 5 + path: 3 + span: 83 + span: 54 + span: 55 + } + location: { + path: 4 + path: 3 + span: 86 + span: 0 + span: 89 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 86 + span: 8 + span: 20 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 88 + span: 8 + span: 45 + leading_comments: " Diff is the descriptor of the diff which can be applied\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 6 + span: 88 + span: 8 + span: 35 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 88 + span: 36 + span: 40 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 88 + span: 43 + span: 44 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/event.proto" + package: "containerd.types" + dependency: "types/fieldpath.proto" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "Envelope" + field: { + name: "timestamp" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "timestamp" + } + field: { + name: "namespace" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "namespace" + } + field: { + name: "topic" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "topic" + } + field: { + name: "event" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "event" + } + options: { + [containerd.types.fieldpath]: true + } + } + options: { + go_package: "github.com/containerd/containerd/api/types;types" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 32 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 25 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 31 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 35 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 41 + } + location: { + path: 8 + span: 24 + span: 0 + span: 71 + } + location: { + path: 8 + path: 11 + span: 24 + span: 0 + span: 71 + } + location: { + path: 4 + path: 0 + span: 26 + span: 0 + span: 32 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 26 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 7 + span: 27 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 7 + path: 64400 + span: 27 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 28 + span: 8 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 6 + span: 28 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 28 + span: 34 + span: 43 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 28 + span: 46 + span: 47 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 29 + span: 8 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 29 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 29 + span: 15 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 29 + span: 27 + span: 28 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 30 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 30 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 30 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 30 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 31 + span: 8 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 31 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 31 + span: 28 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 31 + span: 36 + span: 37 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/events/v1/events.proto" + package: "containerd.services.events.v1" + dependency: "types/event.proto" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/empty.proto" + message_type: { + name: "PublishRequest" + field: { + name: "topic" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "topic" + } + field: { + name: "event" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "event" + } + } + message_type: { + name: "ForwardRequest" + field: { + name: "envelope" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Envelope" + json_name: "envelope" + } + } + message_type: { + name: "SubscribeRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + service: { + name: "Events" + method: { + name: "Publish" + input_type: ".containerd.services.events.v1.PublishRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Forward" + input_type: ".containerd.services.events.v1.ForwardRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Subscribe" + input_type: ".containerd.services.events.v1.SubscribeRequest" + output_type: ".containerd.types.Envelope" + server_streaming: true + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/events/v1;events" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 61 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 38 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 27 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 35 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 37 + } + location: { + path: 8 + span: 24 + span: 0 + span: 85 + } + location: { + path: 8 + path: 11 + span: 24 + span: 0 + span: 85 + } + location: { + path: 6 + path: 0 + span: 26 + span: 0 + span: 48 + span: 1 + } + location: { + path: 6 + path: 0 + path: 1 + span: 26 + span: 8 + span: 14 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 31 + span: 8 + span: 68 + leading_comments: " Publish an event to a topic.\n\n The event will be packed into a timestamp envelope with the namespace\n introspected from the context. The envelope will then be dispatched.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 31 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 31 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 31 + span: 45 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 38 + span: 8 + span: 68 + leading_comments: " Forward sends an event that has already been packaged into an envelope\n with a timestamp and namespace.\n\n This is useful if earlier timestamping is required or when forwarding on\n behalf of another component, namespace or publisher.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 38 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 38 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 38 + span: 45 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 47 + span: 8 + span: 83 + leading_comments: " Subscribe to a stream of events, possibly returning only that match any\n of the provided filters.\n\n Unlike many other methods in containerd, subscribers will get messages\n from all namespaces unless otherwise specified. If this is not desired,\n a filter can be provided in the format 'namespace==' to\n restrict the received events.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 47 + span: 12 + span: 21 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 47 + span: 22 + span: 38 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 6 + span: 47 + span: 49 + span: 55 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 47 + span: 56 + span: 81 + } + location: { + path: 4 + path: 0 + span: 50 + span: 0 + span: 53 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 50 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 51 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 51 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 51 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 51 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 52 + span: 8 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 52 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 52 + span: 28 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 52 + span: 36 + span: 37 + } + location: { + path: 4 + path: 1 + span: 55 + span: 0 + span: 57 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 55 + span: 8 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 56 + span: 8 + span: 47 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 6 + span: 56 + span: 8 + span: 33 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 56 + span: 34 + span: 42 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 56 + span: 45 + span: 46 + } + location: { + path: 4 + path: 2 + span: 59 + span: 0 + span: 61 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 59 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 60 + span: 8 + span: 36 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 4 + span: 60 + span: 8 + span: 16 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 60 + span: 17 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 60 + span: 24 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 60 + span: 34 + span: 35 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/images/v1/images.proto" + package: "containerd.services.images.v1" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/field_mask.proto" + dependency: "google/protobuf/timestamp.proto" + dependency: "types/descriptor.proto" + message_type: { + name: "Image" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "labels" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.Image.LabelsEntry" + json_name: "labels" + } + field: { + name: "target" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor" + json_name: "target" + } + field: { + name: "created_at" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "updated_at" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "updatedAt" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "GetImageRequest" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + } + message_type: { + name: "GetImageResponse" + field: { + name: "image" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.Image" + json_name: "image" + } + } + message_type: { + name: "CreateImageRequest" + field: { + name: "image" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.Image" + json_name: "image" + } + field: { + name: "source_date_epoch" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "sourceDateEpoch" + } + } + message_type: { + name: "CreateImageResponse" + field: { + name: "image" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.Image" + json_name: "image" + } + } + message_type: { + name: "UpdateImageRequest" + field: { + name: "image" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.Image" + json_name: "image" + } + field: { + name: "update_mask" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldMask" + json_name: "updateMask" + } + field: { + name: "source_date_epoch" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "sourceDateEpoch" + } + } + message_type: { + name: "UpdateImageResponse" + field: { + name: "image" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.Image" + json_name: "image" + } + } + message_type: { + name: "ListImagesRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "ListImagesResponse" + field: { + name: "images" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.images.v1.Image" + json_name: "images" + } + } + message_type: { + name: "DeleteImageRequest" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "sync" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "sync" + } + field: { + name: "target" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor" + oneof_index: 0 + json_name: "target" + proto3_optional: true + } + oneof_decl: { + name: "_target" + } + } + service: { + name: "Images" + method: { + name: "Get" + input_type: ".containerd.services.images.v1.GetImageRequest" + output_type: ".containerd.services.images.v1.GetImageResponse" + } + method: { + name: "List" + input_type: ".containerd.services.images.v1.ListImagesRequest" + output_type: ".containerd.services.images.v1.ListImagesResponse" + } + method: { + name: "Create" + input_type: ".containerd.services.images.v1.CreateImageRequest" + output_type: ".containerd.services.images.v1.CreateImageResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.images.v1.UpdateImageRequest" + output_type: ".containerd.services.images.v1.UpdateImageResponse" + } + method: { + name: "Delete" + input_type: ".containerd.services.images.v1.DeleteImageRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/images/v1;images" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 148 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 38 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 37 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 42 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 41 + } + location: { + path: 3 + path: 3 + span: 23 + span: 0 + span: 32 + } + location: { + path: 8 + span: 25 + span: 0 + span: 85 + } + location: { + path: 8 + path: 11 + span: 25 + span: 0 + span: 85 + } + location: { + path: 6 + path: 0 + span: 38 + span: 0 + span: 56 + span: 1 + leading_comments: " Images is a service that allows one to register images with containerd.\n\n In containerd, an image is merely the mapping of a name to a content root,\n described by a descriptor. The behavior and state of image is purely\n dictated by the type of the descriptor.\n\n From the perspective of this service, these references are mostly shallow,\n in that the existence of the required content won't be validated until\n required by consuming services.\n\n As such, this can really be considered a \"metadata service\".\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 38 + span: 8 + span: 14 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 40 + span: 8 + span: 60 + leading_comments: " Get returns an image by name.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 40 + span: 12 + span: 15 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 40 + span: 16 + span: 31 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 40 + span: 42 + span: 58 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 43 + span: 8 + span: 65 + leading_comments: " List returns a list of all images known to containerd.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 43 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 43 + span: 17 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 43 + span: 45 + span: 63 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 48 + span: 8 + span: 69 + leading_comments: " Create an image record in the metadata store.\n\n The name of the image must be unique.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 48 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 48 + span: 19 + span: 37 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 48 + span: 48 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 52 + span: 8 + span: 69 + leading_comments: " Update assigns the name to a given target image based on the provided\n image.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 52 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 52 + span: 19 + span: 37 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 52 + span: 48 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 55 + span: 8 + span: 71 + leading_comments: " Delete deletes the image by name.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 55 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 55 + span: 19 + span: 37 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 55 + span: 48 + span: 69 + } + location: { + path: 4 + path: 0 + span: 58 + span: 0 + span: 79 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 58 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 62 + span: 8 + span: 24 + leading_comments: " Name provides a unique name for the image.\n\n Containerd treats this as the primary identifier.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 62 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 62 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 62 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 69 + span: 8 + span: 39 + leading_comments: " Labels provides free form labels for the image. These are runtime only\n and do not get inherited into the package image in any way.\n\n Labels may be updated using the field mask.\n The combined size of a key/value pair cannot exceed 4096 bytes.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 69 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 69 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 69 + span: 37 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 72 + span: 8 + span: 47 + leading_comments: " Target describes the content entry point of the image.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 72 + span: 8 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 72 + span: 36 + span: 42 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 72 + span: 45 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 75 + span: 8 + span: 49 + leading_comments: " CreatedAt is the time the image was first created.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 75 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 75 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 75 + span: 47 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 78 + span: 8 + span: 49 + leading_comments: " UpdatedAt is the last time the image was mutated.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 6 + span: 78 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 78 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 78 + span: 47 + span: 48 + } + location: { + path: 4 + path: 1 + span: 81 + span: 0 + span: 83 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 81 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 82 + span: 8 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 82 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 82 + span: 15 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 82 + span: 22 + span: 23 + } + location: { + path: 4 + path: 2 + span: 85 + span: 0 + span: 87 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 85 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 86 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 6 + span: 86 + span: 8 + span: 13 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 86 + span: 14 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 86 + span: 22 + span: 23 + } + location: { + path: 4 + path: 3 + span: 89 + span: 0 + span: 93 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 89 + span: 8 + span: 26 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 90 + span: 8 + span: 24 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 6 + span: 90 + span: 8 + span: 13 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 90 + span: 14 + span: 19 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 90 + span: 22 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 92 + span: 8 + span: 56 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 6 + span: 92 + span: 8 + span: 33 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 92 + span: 34 + span: 51 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 92 + span: 54 + span: 55 + } + location: { + path: 4 + path: 4 + span: 95 + span: 0 + span: 97 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 95 + span: 8 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 96 + span: 8 + span: 24 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 6 + span: 96 + span: 8 + span: 13 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 96 + span: 14 + span: 19 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 96 + span: 22 + span: 23 + } + location: { + path: 4 + path: 5 + span: 99 + span: 0 + span: 110 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 99 + span: 8 + span: 26 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 103 + span: 8 + span: 24 + leading_comments: " Image provides a full or partial image for update.\n\n The name field must be set or an error will be returned.\n" + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 6 + span: 103 + span: 8 + span: 13 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 103 + span: 14 + span: 19 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 103 + span: 22 + span: 23 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + span: 107 + span: 8 + span: 50 + leading_comments: " UpdateMask specifies which fields to perform the update on. If empty,\n the operation applies to all fields.\n" + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 6 + span: 107 + span: 8 + span: 33 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 1 + span: 107 + span: 34 + span: 45 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 3 + span: 107 + span: 48 + span: 49 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + span: 109 + span: 8 + span: 56 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 6 + span: 109 + span: 8 + span: 33 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 1 + span: 109 + span: 34 + span: 51 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 3 + span: 109 + span: 54 + span: 55 + } + location: { + path: 4 + path: 6 + span: 112 + span: 0 + span: 114 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 112 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 113 + span: 8 + span: 24 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 6 + span: 113 + span: 8 + span: 13 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 113 + span: 14 + span: 19 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 113 + span: 22 + span: 23 + } + location: { + path: 4 + path: 7 + span: 116 + span: 0 + span: 128 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 116 + span: 8 + span: 25 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 127 + span: 8 + span: 36 + leading_comments: " Filters contains one or more filters using the syntax defined in the\n containerd filter package.\n\n The returned result will be those that match any of the provided\n filters. Expanded, images that match the following will be\n returned:\n\n\tfilters[0] or filters[1] or ... or filters[n-1] or filters[n]\n\n If filters is zero-length or nil, all items will be returned.\n" + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 4 + span: 127 + span: 8 + span: 16 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 127 + span: 17 + span: 23 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 127 + span: 24 + span: 31 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 127 + span: 34 + span: 35 + } + location: { + path: 4 + path: 8 + span: 130 + span: 0 + span: 132 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 130 + span: 8 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 131 + span: 8 + span: 34 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 4 + span: 131 + span: 8 + span: 16 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 6 + span: 131 + span: 17 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 131 + span: 23 + span: 29 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 131 + span: 32 + span: 33 + } + location: { + path: 4 + path: 9 + span: 134 + span: 0 + span: 148 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 134 + span: 8 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 135 + span: 8 + span: 24 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 135 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 135 + span: 15 + span: 19 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 135 + span: 22 + span: 23 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + span: 141 + span: 8 + span: 22 + leading_comments: " Sync indicates that the delete and cleanup should be done\n synchronously before returning to the caller\n\n Default is false\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 5 + span: 141 + span: 8 + span: 12 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 1 + span: 141 + span: 13 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 3 + span: 141 + span: 20 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + span: 147 + span: 8 + span: 56 + leading_comments: " Target value for image to be deleted\n\n If image descriptor does not match the same digest,\n the delete operation will return \"not found\" error.\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 4 + span: 147 + span: 8 + span: 16 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 6 + span: 147 + span: 17 + span: 44 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 1 + span: 147 + span: 45 + span: 51 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 3 + span: 147 + span: 54 + span: 55 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/introspection.proto" + package: "containerd.types" + dependency: "google/protobuf/any.proto" + message_type: { + name: "RuntimeRequest" + field: { + name: "runtime_path" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "runtimePath" + } + field: { + name: "options" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + message_type: { + name: "RuntimeVersion" + field: { + name: "version" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "version" + } + field: { + name: "revision" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "revision" + } + } + message_type: { + name: "RuntimeInfo" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "version" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.RuntimeVersion" + json_name: "version" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + field: { + name: "features" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "features" + } + field: { + name: "annotations" + number: 5 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.RuntimeInfo.AnnotationsEntry" + json_name: "annotations" + } + nested_type: { + name: "AnnotationsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + options: { + go_package: "github.com/containerd/containerd/api/types;types" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 45 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 25 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 8 + span: 22 + span: 0 + span: 71 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 71 + } + location: { + path: 4 + path: 0 + span: 24 + span: 0 + span: 29 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 24 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 25 + span: 8 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 25 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 25 + span: 15 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 25 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 28 + span: 8 + span: 40 + leading_comments: " Options correspond to CreateTaskRequest.options.\n This is needed to pass the runc binary path, etc.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 28 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 28 + span: 28 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 28 + span: 38 + span: 39 + } + location: { + path: 4 + path: 1 + span: 31 + span: 0 + span: 34 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 31 + span: 8 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 32 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 32 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 32 + span: 15 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 32 + span: 25 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 33 + span: 8 + span: 28 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 33 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 33 + span: 15 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 33 + span: 26 + span: 27 + } + location: { + path: 4 + path: 2 + span: 36 + span: 0 + span: 45 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 36 + span: 8 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 37 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 37 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 37 + span: 15 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 37 + span: 22 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 38 + span: 8 + span: 35 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 6 + span: 38 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 38 + span: 23 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 38 + span: 33 + span: 34 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 40 + span: 8 + span: 40 + leading_comments: " Options correspond to RuntimeInfoRequest.Options (contains runc binary path, etc.)\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 6 + span: 40 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 40 + span: 28 + span: 35 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 40 + span: 38 + span: 39 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + span: 42 + span: 8 + span: 41 + leading_comments: " OCI-compatible runtimes should use https://github.com/opencontainers/runtime-spec/blob/main/features.md\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 6 + span: 42 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 1 + span: 42 + span: 28 + span: 36 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 3 + span: 42 + span: 39 + span: 40 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + span: 44 + span: 8 + span: 44 + leading_comments: " Annotations of the shim. Irrelevant to features.Annotations.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 6 + span: 44 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 1 + span: 44 + span: 28 + span: 39 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 3 + span: 44 + span: 42 + span: 43 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "google/rpc/status.proto" + package: "google.rpc" + dependency: "google/protobuf/any.proto" + message_type: { + name: "Status" + field: { + name: "code" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "code" + } + field: { + name: "message" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "message" + } + field: { + name: "details" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "details" + } + } + options: { + java_package: "com.google.rpc" + java_outer_classname: "StatusProto" + java_multiple_files: true + go_package: "google.golang.org/genproto/googleapis/rpc/status;status" + cc_enable_arenas: true + objc_class_prefix: "RPC" + } + source_code_info: { + location: { + span: 14 + span: 0 + span: 48 + span: 1 + } + location: { + path: 12 + span: 14 + span: 0 + span: 18 + leading_detached_comments: " Copyright 2025 Google LLC\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n" + } + location: { + path: 2 + span: 16 + span: 0 + span: 19 + } + location: { + path: 3 + path: 0 + span: 18 + span: 0 + span: 35 + } + location: { + path: 8 + span: 20 + span: 0 + span: 31 + } + location: { + path: 8 + path: 31 + span: 20 + span: 0 + span: 31 + } + location: { + path: 8 + span: 21 + span: 0 + span: 78 + } + location: { + path: 8 + path: 11 + span: 21 + span: 0 + span: 78 + } + location: { + path: 8 + span: 22 + span: 0 + span: 34 + } + location: { + path: 8 + path: 10 + span: 22 + span: 0 + span: 34 + } + location: { + path: 8 + span: 23 + span: 0 + span: 44 + } + location: { + path: 8 + path: 8 + span: 23 + span: 0 + span: 44 + } + location: { + path: 8 + span: 24 + span: 0 + span: 39 + } + location: { + path: 8 + path: 1 + span: 24 + span: 0 + span: 39 + } + location: { + path: 8 + span: 25 + span: 0 + span: 33 + } + location: { + path: 8 + path: 36 + span: 25 + span: 0 + span: 33 + } + location: { + path: 4 + path: 0 + span: 34 + span: 0 + span: 48 + span: 1 + leading_comments: " The `Status` type defines a logical error model that is suitable for\n different programming environments, including REST APIs and RPC APIs. It is\n used by [gRPC](https://github.com/grpc). Each `Status` message contains\n three pieces of data: error code, error message, and error details.\n\n You can find out more about this error model and how to work with it in the\n [API Design Guide](https://cloud.google.com/apis/design/errors).\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 34 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 37 + span: 2 + span: 17 + leading_comments: " The status code, which should be an enum value of\n [google.rpc.Code][google.rpc.Code].\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 37 + span: 2 + span: 7 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 37 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 37 + span: 15 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 43 + span: 2 + span: 21 + leading_comments: " A developer-facing error message, which should be in English. Any\n user-facing error message should be localized and sent in the\n [google.rpc.Status.details][google.rpc.Status.details] field, or localized\n by the client.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 43 + span: 2 + span: 8 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 43 + span: 9 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 43 + span: 19 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 47 + span: 2 + span: 43 + leading_comments: " A list of messages that carry the error details. There is a common set of\n message types for APIs to use.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 4 + span: 47 + span: 2 + span: 10 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 47 + span: 11 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 47 + span: 31 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 47 + span: 41 + span: 42 + } + } + syntax: "proto3" + buf_extension: { + is_import: true + module_info: { + name: { + remote: "buf.build" + owner: "googleapis" + repository: "googleapis" + } + commit: "004180b77378443887d3b55cabc00384" + } + is_syntax_unspecified: false + } +} +file: { + name: "services/introspection/v1/introspection.proto" + package: "containerd.services.introspection.v1" + dependency: "google/protobuf/any.proto" + dependency: "types/introspection.proto" + dependency: "types/platform.proto" + dependency: "google/rpc/status.proto" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "Plugin" + field: { + name: "type" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "type" + } + field: { + name: "id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "requires" + number: 3 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "requires" + } + field: { + name: "platforms" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Platform" + json_name: "platforms" + } + field: { + name: "exports" + number: 5 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.introspection.v1.Plugin.ExportsEntry" + json_name: "exports" + } + field: { + name: "capabilities" + number: 6 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "capabilities" + } + field: { + name: "init_err" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.rpc.Status" + json_name: "initErr" + } + nested_type: { + name: "ExportsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "PluginsRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "PluginsResponse" + field: { + name: "plugins" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.introspection.v1.Plugin" + json_name: "plugins" + } + } + message_type: { + name: "ServerResponse" + field: { + name: "uuid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "uuid" + } + field: { + name: "pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT64 + json_name: "pid" + } + field: { + name: "pidns" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT64 + json_name: "pidns" + } + field: { + name: "deprecations" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.introspection.v1.DeprecationWarning" + json_name: "deprecations" + } + } + message_type: { + name: "DeprecationWarning" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "message" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "message" + } + field: { + name: "last_occurrence" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "lastOccurrence" + } + } + message_type: { + name: "PluginInfoRequest" + field: { + name: "type" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "type" + } + field: { + name: "id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + message_type: { + name: "PluginInfoResponse" + field: { + name: "plugin" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.introspection.v1.Plugin" + json_name: "plugin" + } + field: { + name: "extra" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "extra" + } + } + service: { + name: "Introspection" + method: { + name: "Plugins" + input_type: ".containerd.services.introspection.v1.PluginsRequest" + output_type: ".containerd.services.introspection.v1.PluginsResponse" + } + method: { + name: "Server" + input_type: ".google.protobuf.Empty" + output_type: ".containerd.services.introspection.v1.ServerResponse" + } + method: { + name: "PluginInfo" + input_type: ".containerd.services.introspection.v1.PluginInfoRequest" + output_type: ".containerd.services.introspection.v1.PluginInfoResponse" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/introspection/v1;introspection" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 132 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 45 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 35 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 30 + } + location: { + path: 3 + path: 3 + span: 23 + span: 0 + span: 33 + } + location: { + path: 3 + path: 4 + span: 24 + span: 0 + span: 37 + } + location: { + path: 3 + path: 5 + span: 25 + span: 0 + span: 41 + } + location: { + path: 8 + span: 27 + span: 0 + span: 99 + } + location: { + path: 8 + path: 11 + span: 27 + span: 0 + span: 99 + } + location: { + path: 6 + path: 0 + span: 29 + span: 0 + span: 39 + span: 1 + } + location: { + path: 6 + path: 0 + path: 1 + span: 29 + span: 8 + span: 21 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 34 + span: 8 + span: 62 + leading_comments: " Plugins returns a list of plugins in containerd.\n\n Clients can use this to detect features and capabilities when using\n containerd.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 34 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 34 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 34 + span: 45 + span: 60 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 36 + span: 8 + span: 67 + leading_comments: " Server returns information about the containerd server\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 36 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 36 + span: 19 + span: 40 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 36 + span: 51 + span: 65 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 38 + span: 8 + span: 71 + leading_comments: " PluginInfo returns information directly from a plugin if the plugin supports it\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 38 + span: 12 + span: 22 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 38 + span: 23 + span: 40 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 38 + span: 51 + span: 69 + } + location: { + path: 4 + path: 0 + span: 41 + span: 0 + span: 85 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 41 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 46 + span: 8 + span: 24 + leading_comments: " Type defines the type of plugin.\n\n See package plugin for a list of possible values. Non core plugins may\n define their own values during registration.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 46 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 46 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 46 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 49 + span: 8 + span: 22 + leading_comments: " ID identifies the plugin uniquely in the system.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 49 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 49 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 49 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 52 + span: 8 + span: 37 + leading_comments: " Requires lists the plugin types required by this plugin.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 4 + span: 52 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 52 + span: 17 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 52 + span: 24 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 52 + span: 35 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 63 + span: 8 + span: 46 + leading_comments: " Platforms enumerates the platforms this plugin will support.\n\n If values are provided here, the plugin will only be operable under the\n provided platforms.\n\n If this is empty, the plugin will work across all platforms.\n\n If the plugin prefers certain platforms over others, they should be\n listed from most to least preferred.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 4 + span: 63 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 63 + span: 17 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 63 + span: 32 + span: 41 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 63 + span: 44 + span: 45 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 69 + span: 8 + span: 40 + leading_comments: " Exports allows plugins to provide values about state or configuration to\n interested parties.\n\n One example is exposing the configured path of a snapshotter plugin.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 6 + span: 69 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 69 + span: 28 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 69 + span: 38 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 76 + span: 8 + span: 41 + leading_comments: " Capabilities allows plugins to communicate feature switches to allow\n clients to detect features that may not be on be default or may be\n different from version to version.\n\n Use this sparingly.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 4 + span: 76 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 5 + span: 76 + span: 17 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 76 + span: 24 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 76 + span: 39 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 84 + span: 8 + span: 39 + leading_comments: " InitErr will be set if the plugin fails initialization.\n\n This means the plugin may have been registered but a non-terminal error\n was encountered during initialization.\n\n Plugins that have this value set cannot be used.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 6 + span: 84 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 84 + span: 26 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 84 + span: 37 + span: 38 + } + location: { + path: 4 + path: 1 + span: 87 + span: 0 + span: 99 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 87 + span: 8 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 98 + span: 8 + span: 36 + leading_comments: " Filters contains one or more filters using the syntax defined in the\n containerd filter package.\n\n The returned result will be those that match any of the provided\n filters. Expanded, plugins that match the following will be\n returned:\n\n\tfilters[0] or filters[1] or ... or filters[n-1] or filters[n]\n\n If filters is zero-length or nil, all items will be returned.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 4 + span: 98 + span: 8 + span: 16 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 98 + span: 17 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 98 + span: 24 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 98 + span: 34 + span: 35 + } + location: { + path: 4 + path: 2 + span: 101 + span: 0 + span: 103 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 101 + span: 8 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 102 + span: 8 + span: 36 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 4 + span: 102 + span: 8 + span: 16 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 6 + span: 102 + span: 17 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 102 + span: 24 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 102 + span: 34 + span: 35 + } + location: { + path: 4 + path: 3 + span: 105 + span: 0 + span: 110 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 105 + span: 8 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 106 + span: 8 + span: 24 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 106 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 106 + span: 15 + span: 19 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 106 + span: 22 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 107 + span: 8 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 5 + span: 107 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 107 + span: 15 + span: 18 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 107 + span: 21 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + span: 108 + span: 8 + span: 25 + trailing_comments: " PID namespace, such as 4026531836\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 5 + span: 108 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 1 + span: 108 + span: 15 + span: 20 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 3 + span: 108 + span: 23 + span: 24 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + span: 109 + span: 8 + span: 53 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 4 + span: 109 + span: 8 + span: 16 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 6 + span: 109 + span: 17 + span: 35 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 1 + span: 109 + span: 36 + span: 48 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 3 + span: 109 + span: 51 + span: 52 + } + location: { + path: 4 + path: 4 + span: 112 + span: 0 + span: 116 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 112 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 113 + span: 8 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 113 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 113 + span: 15 + span: 17 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 113 + span: 20 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + span: 114 + span: 8 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 5 + span: 114 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 1 + span: 114 + span: 15 + span: 22 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 3 + span: 114 + span: 25 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + span: 115 + span: 8 + span: 54 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 6 + span: 115 + span: 8 + span: 33 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 1 + span: 115 + span: 34 + span: 49 + } + location: { + path: 4 + path: 4 + path: 2 + path: 2 + path: 3 + span: 115 + span: 52 + span: 53 + } + location: { + path: 4 + path: 5 + span: 118 + span: 0 + span: 127 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 118 + span: 8 + span: 25 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 119 + span: 8 + span: 24 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 5 + span: 119 + span: 8 + span: 14 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 119 + span: 15 + span: 19 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 119 + span: 22 + span: 23 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + span: 120 + span: 8 + span: 22 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 5 + span: 120 + span: 8 + span: 14 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 1 + span: 120 + span: 15 + span: 17 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 3 + span: 120 + span: 20 + span: 21 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + span: 126 + span: 8 + span: 40 + leading_comments: " Options may be used to request extra dynamic information from\n a plugin.\n This object is determined by the plugin and the plugin may return\n NotImplemented or InvalidArgument if it is not supported\n" + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 6 + span: 126 + span: 8 + span: 27 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 1 + span: 126 + span: 28 + span: 35 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 3 + span: 126 + span: 38 + span: 39 + } + location: { + path: 4 + path: 6 + span: 129 + span: 0 + span: 132 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 129 + span: 8 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 130 + span: 8 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 6 + span: 130 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 130 + span: 15 + span: 21 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 130 + span: 24 + span: 25 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 131 + span: 8 + span: 38 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 6 + span: 131 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 131 + span: 28 + span: 33 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 131 + span: 36 + span: 37 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/leases/v1/leases.proto" + package: "containerd.services.leases.v1" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "Lease" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "created_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "labels" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.leases.v1.Lease.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "CreateRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "labels" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.leases.v1.CreateRequest.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "CreateResponse" + field: { + name: "lease" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.leases.v1.Lease" + json_name: "lease" + } + } + message_type: { + name: "DeleteRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "sync" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "sync" + } + } + message_type: { + name: "ListRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "ListResponse" + field: { + name: "leases" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.leases.v1.Lease" + json_name: "leases" + } + } + message_type: { + name: "Resource" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "type" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "type" + } + } + message_type: { + name: "AddResourceRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "resource" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.leases.v1.Resource" + json_name: "resource" + } + } + message_type: { + name: "DeleteResourceRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "resource" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.leases.v1.Resource" + json_name: "resource" + } + } + message_type: { + name: "ListResourcesRequest" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + message_type: { + name: "ListResourcesResponse" + field: { + name: "resources" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.leases.v1.Resource" + json_name: "resources" + } + } + service: { + name: "Leases" + method: { + name: "Create" + input_type: ".containerd.services.leases.v1.CreateRequest" + output_type: ".containerd.services.leases.v1.CreateResponse" + } + method: { + name: "Delete" + input_type: ".containerd.services.leases.v1.DeleteRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "List" + input_type: ".containerd.services.leases.v1.ListRequest" + output_type: ".containerd.services.leases.v1.ListResponse" + } + method: { + name: "AddResource" + input_type: ".containerd.services.leases.v1.AddResourceRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "DeleteResource" + input_type: ".containerd.services.leases.v1.DeleteResourceRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "ListResources" + input_type: ".containerd.services.leases.v1.ListResourcesRequest" + output_type: ".containerd.services.leases.v1.ListResourcesResponse" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/leases/v1;leases" + } + source_code_info: { + location: { + span: 15 + span: 0 + span: 115 + span: 1 + } + location: { + path: 12 + span: 15 + span: 0 + span: 18 + leading_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 17 + span: 0 + span: 38 + } + location: { + path: 3 + path: 0 + span: 19 + span: 0 + span: 37 + } + location: { + path: 3 + path: 1 + span: 20 + span: 0 + span: 41 + } + location: { + path: 8 + span: 22 + span: 0 + span: 85 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 85 + } + location: { + path: 6 + path: 0 + span: 25 + span: 0 + span: 47 + span: 1 + leading_comments: " Leases service manages resources leases within the metadata store.\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 25 + span: 8 + span: 14 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 28 + span: 8 + span: 59 + leading_comments: " Create creates a new lease for managing changes to metadata. A lease\n can be used to protect objects from being removed.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 28 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 28 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 28 + span: 43 + span: 57 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 33 + span: 8 + span: 66 + leading_comments: " Delete deletes the lease and makes any unreferenced objects created\n during the lease eligible for garbage collection if not referenced\n or retained by other resources during the lease.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 33 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 33 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 33 + span: 43 + span: 64 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 37 + span: 8 + span: 53 + leading_comments: " List lists all active leases, returning the full list of\n leases and optionally including the referenced resources.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 37 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 37 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 37 + span: 39 + span: 51 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 40 + span: 8 + span: 76 + leading_comments: " AddResource references the resource by the provided lease.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 40 + span: 12 + span: 23 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 40 + span: 24 + span: 42 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 40 + span: 53 + span: 74 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 43 + span: 8 + span: 82 + leading_comments: " DeleteResource dereferences the resource by the provided lease.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 43 + span: 12 + span: 26 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 43 + span: 27 + span: 48 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 43 + span: 59 + span: 80 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + span: 46 + span: 8 + span: 80 + leading_comments: " ListResources lists all the resources referenced by the lease.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 1 + span: 46 + span: 12 + span: 25 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 2 + span: 46 + span: 26 + span: 46 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 3 + span: 46 + span: 57 + span: 78 + } + location: { + path: 4 + path: 0 + span: 50 + span: 0 + span: 56 + span: 1 + leading_comments: " Lease is an object which retains resources while it exists.\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 50 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 51 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 51 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 51 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 51 + span: 20 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 53 + span: 8 + span: 49 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 53 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 53 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 53 + span: 47 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 55 + span: 8 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 55 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 55 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 55 + span: 37 + span: 38 + } + location: { + path: 4 + path: 1 + span: 58 + span: 0 + span: 64 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 58 + span: 8 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 61 + span: 8 + span: 22 + leading_comments: " ID is used to identity the lease, when the id is not set the service\n generates a random identifier for the lease.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 61 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 61 + span: 15 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 61 + span: 20 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 63 + span: 8 + span: 39 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 6 + span: 63 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 63 + span: 28 + span: 34 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 63 + span: 37 + span: 38 + } + location: { + path: 4 + path: 2 + span: 66 + span: 0 + span: 68 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 66 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 67 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 6 + span: 67 + span: 8 + span: 13 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 67 + span: 14 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 67 + span: 22 + span: 23 + } + location: { + path: 4 + path: 3 + span: 70 + span: 0 + span: 78 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 70 + span: 8 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 71 + span: 8 + span: 22 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 71 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 71 + span: 15 + span: 17 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 71 + span: 20 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 77 + span: 8 + span: 22 + leading_comments: " Sync indicates that the delete and cleanup should be done\n synchronously before returning to the caller\n\n Default is false\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 5 + span: 77 + span: 8 + span: 12 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 77 + span: 13 + span: 17 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 77 + span: 20 + span: 21 + } + location: { + path: 4 + path: 4 + span: 80 + span: 0 + span: 82 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 80 + span: 8 + span: 19 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 81 + span: 8 + span: 36 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 4 + span: 81 + span: 8 + span: 16 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 81 + span: 17 + span: 23 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 81 + span: 24 + span: 31 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 81 + span: 34 + span: 35 + } + location: { + path: 4 + path: 5 + span: 84 + span: 0 + span: 86 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 84 + span: 8 + span: 20 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 85 + span: 8 + span: 34 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 4 + span: 85 + span: 8 + span: 16 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 6 + span: 85 + span: 17 + span: 22 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 85 + span: 23 + span: 29 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 85 + span: 32 + span: 33 + } + location: { + path: 4 + path: 6 + span: 88 + span: 0 + span: 95 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 88 + span: 8 + span: 16 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 89 + span: 8 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 89 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 89 + span: 15 + span: 17 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 89 + span: 20 + span: 21 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 94 + span: 8 + span: 24 + leading_comments: " For snapshotter resource, there are many snapshotter types here, like\n overlayfs, devmapper etc. The type will be formatted with type,\n like \"snapshotter/overlayfs\".\n" + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 5 + span: 94 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 94 + span: 15 + span: 19 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 94 + span: 22 + span: 23 + } + location: { + path: 4 + path: 7 + span: 97 + span: 0 + span: 101 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 97 + span: 8 + span: 26 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 98 + span: 8 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 98 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 98 + span: 15 + span: 17 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 98 + span: 20 + span: 21 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 100 + span: 8 + span: 30 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 6 + span: 100 + span: 8 + span: 16 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 100 + span: 17 + span: 25 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 100 + span: 28 + span: 29 + } + location: { + path: 4 + path: 8 + span: 103 + span: 0 + span: 107 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 103 + span: 8 + span: 29 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 104 + span: 8 + span: 22 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 104 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 104 + span: 15 + span: 17 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 104 + span: 20 + span: 21 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + span: 106 + span: 8 + span: 30 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 6 + span: 106 + span: 8 + span: 16 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 1 + span: 106 + span: 17 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 3 + span: 106 + span: 28 + span: 29 + } + location: { + path: 4 + path: 9 + span: 109 + span: 0 + span: 111 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 109 + span: 8 + span: 28 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 110 + span: 8 + span: 22 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 110 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 110 + span: 15 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 110 + span: 20 + span: 21 + } + location: { + path: 4 + path: 10 + span: 113 + span: 0 + span: 115 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 113 + span: 8 + span: 29 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 114 + span: 8 + span: 41 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 4 + span: 114 + span: 8 + span: 16 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 6 + span: 114 + span: 17 + span: 25 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 114 + span: 26 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 114 + span: 38 + span: 39 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/mounts/v1/mounts.proto" + package: "containerd.services.mounts.v1" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/field_mask.proto" + dependency: "types/mount.proto" + message_type: { + name: "ActivateRequest" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "mounts" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "mounts" + } + field: { + name: "labels" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.mounts.v1.ActivateRequest.LabelsEntry" + json_name: "labels" + } + field: { + name: "temporary" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "temporary" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ActivateResponse" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.ActivationInfo" + json_name: "info" + } + } + message_type: { + name: "DeactivateRequest" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + } + message_type: { + name: "InfoRequest" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + } + message_type: { + name: "InfoResponse" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.ActivationInfo" + json_name: "info" + } + } + message_type: { + name: "UpdateRequest" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.ActivationInfo" + json_name: "info" + } + field: { + name: "update_mask" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldMask" + json_name: "updateMask" + } + } + message_type: { + name: "UpdateResponse" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.ActivationInfo" + json_name: "info" + } + } + message_type: { + name: "ListRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "ListMessage" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.ActivationInfo" + json_name: "info" + } + } + service: { + name: "Mounts" + method: { + name: "Activate" + input_type: ".containerd.services.mounts.v1.ActivateRequest" + output_type: ".containerd.services.mounts.v1.ActivateResponse" + } + method: { + name: "Deactivate" + input_type: ".containerd.services.mounts.v1.DeactivateRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Info" + input_type: ".containerd.services.mounts.v1.InfoRequest" + output_type: ".containerd.services.mounts.v1.InfoResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.mounts.v1.UpdateRequest" + output_type: ".containerd.services.mounts.v1.UpdateResponse" + } + method: { + name: "List" + input_type: ".containerd.services.mounts.v1.ListRequest" + output_type: ".containerd.services.mounts.v1.ListMessage" + server_streaming: true + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/mounts/v1;mounts" + } + source_code_info: { + location: { + span: 15 + span: 0 + span: 77 + span: 1 + } + location: { + path: 12 + span: 15 + span: 0 + span: 18 + leading_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 17 + span: 0 + span: 38 + } + location: { + path: 3 + path: 0 + span: 19 + span: 0 + span: 37 + } + location: { + path: 3 + path: 1 + span: 20 + span: 0 + span: 42 + } + location: { + path: 3 + path: 2 + span: 21 + span: 0 + span: 27 + } + location: { + path: 8 + span: 23 + span: 0 + span: 85 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 85 + } + location: { + path: 6 + path: 0 + span: 26 + span: 0 + span: 32 + span: 1 + leading_comments: " Mounts service manages mounts\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 26 + span: 8 + span: 14 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 27 + span: 8 + span: 65 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 27 + span: 12 + span: 20 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 27 + span: 21 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 27 + span: 47 + span: 63 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 28 + span: 8 + span: 74 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 28 + span: 12 + span: 22 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 28 + span: 23 + span: 40 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 28 + span: 51 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 29 + span: 8 + span: 53 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 29 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 29 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 29 + span: 39 + span: 51 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 30 + span: 8 + span: 59 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 30 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 30 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 30 + span: 43 + span: 57 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 31 + span: 8 + span: 59 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 31 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 31 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 6 + span: 31 + span: 39 + span: 45 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 31 + span: 46 + span: 57 + } + location: { + path: 4 + path: 0 + span: 34 + span: 0 + span: 43 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 34 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 35 + span: 8 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 35 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 35 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 35 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 37 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 4 + span: 37 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 37 + span: 17 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 37 + span: 40 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 37 + span: 49 + span: 50 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 39 + span: 8 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 39 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 39 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 39 + span: 37 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 41 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 41 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 41 + span: 13 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 41 + span: 25 + span: 26 + } + location: { + path: 4 + path: 1 + span: 45 + span: 0 + span: 47 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 45 + span: 8 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 46 + span: 8 + span: 49 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 6 + span: 46 + span: 8 + span: 39 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 46 + span: 40 + span: 44 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 46 + span: 47 + span: 48 + } + location: { + path: 4 + path: 2 + span: 49 + span: 0 + span: 51 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 49 + span: 8 + span: 25 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 50 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 50 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 50 + span: 15 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 50 + span: 22 + span: 23 + } + location: { + path: 4 + path: 3 + span: 53 + span: 0 + span: 55 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 53 + span: 8 + span: 19 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 54 + span: 8 + span: 24 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 54 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 54 + span: 15 + span: 19 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 54 + span: 22 + span: 23 + } + location: { + path: 4 + path: 4 + span: 57 + span: 0 + span: 59 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 57 + span: 8 + span: 20 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 58 + span: 8 + span: 49 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 6 + span: 58 + span: 8 + span: 39 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 58 + span: 40 + span: 44 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 58 + span: 47 + span: 48 + } + location: { + path: 4 + path: 5 + span: 61 + span: 0 + span: 65 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 61 + span: 8 + span: 21 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 62 + span: 8 + span: 49 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 6 + span: 62 + span: 8 + span: 39 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 62 + span: 40 + span: 44 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 62 + span: 47 + span: 48 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + span: 64 + span: 8 + span: 50 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 6 + span: 64 + span: 8 + span: 33 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 1 + span: 64 + span: 34 + span: 45 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 3 + span: 64 + span: 48 + span: 49 + } + location: { + path: 4 + path: 6 + span: 67 + span: 0 + span: 69 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 67 + span: 8 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 68 + span: 8 + span: 49 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 6 + span: 68 + span: 8 + span: 39 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 68 + span: 40 + span: 44 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 68 + span: 47 + span: 48 + } + location: { + path: 4 + path: 7 + span: 71 + span: 0 + span: 73 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 71 + span: 8 + span: 19 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 72 + span: 8 + span: 36 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 4 + span: 72 + span: 8 + span: 16 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 72 + span: 17 + span: 23 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 72 + span: 24 + span: 31 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 72 + span: 34 + span: 35 + } + location: { + path: 4 + path: 8 + span: 75 + span: 0 + span: 77 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 75 + span: 8 + span: 19 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 76 + span: 8 + span: 49 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 6 + span: 76 + span: 8 + span: 39 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 76 + span: 40 + span: 44 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 76 + span: 47 + span: 48 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/namespaces/v1/namespace.proto" + package: "containerd.services.namespaces.v1" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/field_mask.proto" + message_type: { + name: "Namespace" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "labels" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.namespaces.v1.Namespace.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "GetNamespaceRequest" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + } + message_type: { + name: "GetNamespaceResponse" + field: { + name: "namespace" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.namespaces.v1.Namespace" + json_name: "namespace" + } + } + message_type: { + name: "ListNamespacesRequest" + field: { + name: "filter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "filter" + } + } + message_type: { + name: "ListNamespacesResponse" + field: { + name: "namespaces" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.namespaces.v1.Namespace" + json_name: "namespaces" + } + } + message_type: { + name: "CreateNamespaceRequest" + field: { + name: "namespace" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.namespaces.v1.Namespace" + json_name: "namespace" + } + } + message_type: { + name: "CreateNamespaceResponse" + field: { + name: "namespace" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.namespaces.v1.Namespace" + json_name: "namespace" + } + } + message_type: { + name: "UpdateNamespaceRequest" + field: { + name: "namespace" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.namespaces.v1.Namespace" + json_name: "namespace" + } + field: { + name: "update_mask" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldMask" + json_name: "updateMask" + } + } + message_type: { + name: "UpdateNamespaceResponse" + field: { + name: "namespace" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.namespaces.v1.Namespace" + json_name: "namespace" + } + } + message_type: { + name: "DeleteNamespaceRequest" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + } + service: { + name: "Namespaces" + method: { + name: "Get" + input_type: ".containerd.services.namespaces.v1.GetNamespaceRequest" + output_type: ".containerd.services.namespaces.v1.GetNamespaceResponse" + } + method: { + name: "List" + input_type: ".containerd.services.namespaces.v1.ListNamespacesRequest" + output_type: ".containerd.services.namespaces.v1.ListNamespacesResponse" + } + method: { + name: "Create" + input_type: ".containerd.services.namespaces.v1.CreateNamespaceRequest" + output_type: ".containerd.services.namespaces.v1.CreateNamespaceResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.namespaces.v1.UpdateNamespaceRequest" + output_type: ".containerd.services.namespaces.v1.UpdateNamespaceResponse" + } + method: { + name: "Delete" + input_type: ".containerd.services.namespaces.v1.DeleteNamespaceRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/namespaces/v1;namespaces" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 106 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 42 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 37 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 42 + } + location: { + path: 8 + span: 23 + span: 0 + span: 93 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 93 + } + location: { + path: 6 + path: 0 + span: 36 + span: 0 + span: 42 + span: 1 + leading_comments: " Namespaces provides the ability to manipulate containerd namespaces.\n\n All objects in the system are required to be a member of a namespace. If a\n namespace is deleted, all objects, including containers, images and\n snapshots, will be deleted, as well.\n\n Unless otherwise noted, operations in containerd apply only to the namespace\n supplied per request.\n\n I hope this goes without saying, but namespaces are themselves NOT\n namespaced.\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 36 + span: 8 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 37 + span: 8 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 37 + span: 12 + span: 15 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 37 + span: 16 + span: 35 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 37 + span: 46 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 38 + span: 8 + span: 73 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 38 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 38 + span: 17 + span: 38 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 38 + span: 49 + span: 71 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 39 + span: 8 + span: 77 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 39 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 39 + span: 19 + span: 41 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 39 + span: 52 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 40 + span: 8 + span: 77 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 40 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 40 + span: 19 + span: 41 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 40 + span: 52 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 41 + span: 8 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 41 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 41 + span: 19 + span: 41 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 41 + span: 52 + span: 73 + } + location: { + path: 4 + path: 0 + span: 44 + span: 0 + span: 54 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 44 + span: 8 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 45 + span: 8 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 45 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 45 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 45 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 53 + span: 8 + span: 40 + leading_comments: " Labels provides an area to include arbitrary data on namespaces.\n\n The combined size of a key/value pair cannot exceed 4096 bytes.\n\n Note that to add a new value to this field, read the existing set and\n include the entire result in the update call.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 53 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 53 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 53 + span: 38 + span: 39 + } + location: { + path: 4 + path: 1 + span: 56 + span: 0 + span: 58 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 56 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 57 + span: 8 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 57 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 57 + span: 15 + span: 19 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 57 + span: 22 + span: 23 + } + location: { + path: 4 + path: 2 + span: 60 + span: 0 + span: 62 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 60 + span: 8 + span: 28 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 61 + span: 8 + span: 32 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 6 + span: 61 + span: 8 + span: 17 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 61 + span: 18 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 61 + span: 30 + span: 31 + } + location: { + path: 4 + path: 3 + span: 64 + span: 0 + span: 66 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 64 + span: 8 + span: 29 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 65 + span: 8 + span: 26 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 65 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 65 + span: 15 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 65 + span: 24 + span: 25 + } + location: { + path: 4 + path: 4 + span: 68 + span: 0 + span: 70 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 68 + span: 8 + span: 30 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 69 + span: 8 + span: 42 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 4 + span: 69 + span: 8 + span: 16 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 6 + span: 69 + span: 17 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 69 + span: 27 + span: 37 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 69 + span: 40 + span: 41 + } + location: { + path: 4 + path: 5 + span: 72 + span: 0 + span: 74 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 72 + span: 8 + span: 30 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 73 + span: 8 + span: 32 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 6 + span: 73 + span: 8 + span: 17 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 73 + span: 18 + span: 27 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 73 + span: 30 + span: 31 + } + location: { + path: 4 + path: 6 + span: 76 + span: 0 + span: 78 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 76 + span: 8 + span: 31 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 77 + span: 8 + span: 32 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 6 + span: 77 + span: 8 + span: 17 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 77 + span: 18 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 77 + span: 30 + span: 31 + } + location: { + path: 4 + path: 7 + span: 85 + span: 0 + span: 98 + span: 1 + leading_comments: " UpdateNamespaceRequest updates the metadata for a namespace.\n\n The operation should follow semantics described in\n https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/field-mask,\n unless otherwise qualified.\n" + } + location: { + path: 4 + path: 7 + path: 1 + span: 85 + span: 8 + span: 30 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 89 + span: 8 + span: 32 + leading_comments: " Namespace provides the target value, as declared by the mask, for the update.\n\n The namespace field must be set.\n" + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 6 + span: 89 + span: 8 + span: 17 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 89 + span: 18 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 89 + span: 30 + span: 31 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 97 + span: 8 + span: 50 + leading_comments: " UpdateMask specifies which fields to perform the update on. If empty,\n the operation applies to all fields.\n\n For the most part, this applies only to selectively updating labels on\n the namespace. While field masks are typically limited to ascii alphas\n and digits, we just take everything after the \"labels.\" as the map key.\n" + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 6 + span: 97 + span: 8 + span: 33 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 97 + span: 34 + span: 45 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 97 + span: 48 + span: 49 + } + location: { + path: 4 + path: 8 + span: 100 + span: 0 + span: 102 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 100 + span: 8 + span: 31 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 101 + span: 8 + span: 32 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 6 + span: 101 + span: 8 + span: 17 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 101 + span: 18 + span: 27 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 101 + span: 30 + span: 31 + } + location: { + path: 4 + path: 9 + span: 104 + span: 0 + span: 106 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 104 + span: 8 + span: 30 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 105 + span: 8 + span: 24 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 105 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 105 + span: 15 + span: 19 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 105 + span: 22 + span: 23 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/sandbox.proto" + package: "containerd.types" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "Sandbox" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "runtime" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox.Runtime" + json_name: "runtime" + } + field: { + name: "spec" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "spec" + } + field: { + name: "labels" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox.LabelsEntry" + json_name: "labels" + } + field: { + name: "created_at" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "updated_at" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "updatedAt" + } + field: { + name: "extensions" + number: 7 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox.ExtensionsEntry" + json_name: "extensions" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + nested_type: { + name: "Runtime" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "options" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + nested_type: { + name: "ExtensionsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "value" + } + options: { + map_entry: true + } + } + } + options: { + go_package: "github.com/containerd/containerd/api/types;types" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 53 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 25 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 41 + } + location: { + path: 8 + span: 23 + span: 0 + span: 71 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 71 + } + location: { + path: 4 + path: 0 + span: 27 + span: 0 + span: 53 + span: 1 + leading_comments: " Sandbox represents a sandbox metadata object that keeps all info required by controller to\n work with a particular instance.\n" + } + location: { + path: 4 + path: 0 + path: 1 + span: 27 + span: 8 + span: 15 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 29 + span: 8 + span: 30 + leading_comments: " SandboxID is a unique instance identifier within namespace\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 29 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 29 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 29 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + span: 30 + span: 8 + span: 36 + span: 9 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 1 + span: 30 + span: 16 + span: 23 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 0 + span: 32 + span: 16 + span: 32 + leading_comments: " Name is the name of the runtime.\n" + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 0 + path: 5 + span: 32 + span: 16 + span: 22 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 0 + path: 1 + span: 32 + span: 23 + span: 27 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 0 + path: 3 + span: 32 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 1 + span: 35 + span: 16 + span: 48 + leading_comments: " Options specify additional runtime initialization options for the shim (this data will be available in StartShim).\n Typically this data expected to be runtime shim implementation specific.\n" + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 1 + path: 6 + span: 35 + span: 16 + span: 35 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 1 + path: 1 + span: 35 + span: 36 + span: 43 + } + location: { + path: 4 + path: 0 + path: 3 + path: 0 + path: 2 + path: 1 + path: 3 + span: 35 + span: 46 + span: 47 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 38 + span: 8 + span: 28 + leading_comments: " Runtime specifies which runtime to use for executing this container.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 38 + span: 8 + span: 15 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 38 + span: 16 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 38 + span: 26 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 41 + span: 8 + span: 37 + leading_comments: " Spec is sandbox configuration (kin of OCI runtime spec), spec's data will be written to a config.json file in the\n bundle directory (similary to OCI spec).\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 41 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 41 + span: 28 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 41 + span: 35 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 43 + span: 8 + span: 39 + leading_comments: " Labels provides an area to include arbitrary data on containers.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 43 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 43 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 43 + span: 37 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 45 + span: 8 + span: 49 + leading_comments: " CreatedAt is the time the container was first created.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 6 + span: 45 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 45 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 45 + span: 47 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 47 + span: 8 + span: 49 + leading_comments: " UpdatedAt is the last time the container was mutated.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 6 + span: 47 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 47 + span: 34 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 47 + span: 47 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 49 + span: 8 + span: 56 + leading_comments: " Extensions allow clients to provide optional blobs that can be handled by runtime.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 6 + span: 49 + span: 8 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 49 + span: 41 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 49 + span: 54 + span: 55 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + span: 51 + span: 8 + span: 30 + leading_comments: " Sandboxer is the name of the sandbox controller who manages the sandbox.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 5 + span: 51 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 1 + span: 51 + span: 15 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 3 + span: 51 + span: 27 + span: 29 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/sandbox/v1/sandbox.proto" + package: "containerd.services.sandbox.v1" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/timestamp.proto" + dependency: "types/sandbox.proto" + dependency: "types/mount.proto" + dependency: "types/platform.proto" + dependency: "types/metrics.proto" + message_type: { + name: "StoreCreateRequest" + field: { + name: "sandbox" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox" + json_name: "sandbox" + } + } + message_type: { + name: "StoreCreateResponse" + field: { + name: "sandbox" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox" + json_name: "sandbox" + } + } + message_type: { + name: "StoreUpdateRequest" + field: { + name: "sandbox" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox" + json_name: "sandbox" + } + field: { + name: "fields" + number: 2 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "fields" + } + } + message_type: { + name: "StoreUpdateResponse" + field: { + name: "sandbox" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox" + json_name: "sandbox" + } + } + message_type: { + name: "StoreDeleteRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "StoreDeleteResponse" + } + message_type: { + name: "StoreListRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "StoreListResponse" + field: { + name: "list" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox" + json_name: "list" + } + } + message_type: { + name: "StoreGetRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "StoreGetResponse" + field: { + name: "sandbox" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox" + json_name: "sandbox" + } + } + message_type: { + name: "ControllerCreateRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "rootfs" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "rootfs" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + field: { + name: "netns_path" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "netnsPath" + } + field: { + name: "annotations" + number: 5 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.sandbox.v1.ControllerCreateRequest.AnnotationsEntry" + json_name: "annotations" + } + field: { + name: "sandbox" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox" + json_name: "sandbox" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + nested_type: { + name: "AnnotationsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ControllerCreateResponse" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + } + message_type: { + name: "ControllerStartRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + } + message_type: { + name: "ControllerStartResponse" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "created_at" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "labels" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.sandbox.v1.ControllerStartResponse.LabelsEntry" + json_name: "labels" + } + field: { + name: "address" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "address" + } + field: { + name: "version" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "version" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ControllerPlatformRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + } + message_type: { + name: "ControllerPlatformResponse" + field: { + name: "platform" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Platform" + json_name: "platform" + } + } + message_type: { + name: "ControllerStopRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "timeout_secs" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "timeoutSecs" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + } + message_type: { + name: "ControllerStopResponse" + } + message_type: { + name: "ControllerWaitRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + } + message_type: { + name: "ControllerWaitResponse" + field: { + name: "exit_status" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "ControllerStatusRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "verbose" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "verbose" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + } + message_type: { + name: "ControllerStatusResponse" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "state" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "state" + } + field: { + name: "info" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.sandbox.v1.ControllerStatusResponse.InfoEntry" + json_name: "info" + } + field: { + name: "created_at" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "exited_at" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + field: { + name: "extra" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "extra" + } + field: { + name: "address" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "address" + } + field: { + name: "version" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "version" + } + nested_type: { + name: "InfoEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ControllerShutdownRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + } + message_type: { + name: "ControllerShutdownResponse" + } + message_type: { + name: "ControllerMetricsRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "sandboxer" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + } + message_type: { + name: "ControllerMetricsResponse" + field: { + name: "metrics" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Metric" + json_name: "metrics" + } + } + message_type: { + name: "ControllerUpdateRequest" + field: { + name: "sandbox_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxId" + } + field: { + name: "sandboxer" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "sandboxer" + } + field: { + name: "sandbox" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Sandbox" + json_name: "sandbox" + } + field: { + name: "fields" + number: 4 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "fields" + } + } + message_type: { + name: "ControllerUpdateResponse" + } + service: { + name: "Store" + method: { + name: "Create" + input_type: ".containerd.services.sandbox.v1.StoreCreateRequest" + output_type: ".containerd.services.sandbox.v1.StoreCreateResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.sandbox.v1.StoreUpdateRequest" + output_type: ".containerd.services.sandbox.v1.StoreUpdateResponse" + } + method: { + name: "Delete" + input_type: ".containerd.services.sandbox.v1.StoreDeleteRequest" + output_type: ".containerd.services.sandbox.v1.StoreDeleteResponse" + } + method: { + name: "List" + input_type: ".containerd.services.sandbox.v1.StoreListRequest" + output_type: ".containerd.services.sandbox.v1.StoreListResponse" + } + method: { + name: "Get" + input_type: ".containerd.services.sandbox.v1.StoreGetRequest" + output_type: ".containerd.services.sandbox.v1.StoreGetResponse" + } + } + service: { + name: "Controller" + method: { + name: "Create" + input_type: ".containerd.services.sandbox.v1.ControllerCreateRequest" + output_type: ".containerd.services.sandbox.v1.ControllerCreateResponse" + } + method: { + name: "Start" + input_type: ".containerd.services.sandbox.v1.ControllerStartRequest" + output_type: ".containerd.services.sandbox.v1.ControllerStartResponse" + } + method: { + name: "Platform" + input_type: ".containerd.services.sandbox.v1.ControllerPlatformRequest" + output_type: ".containerd.services.sandbox.v1.ControllerPlatformResponse" + } + method: { + name: "Stop" + input_type: ".containerd.services.sandbox.v1.ControllerStopRequest" + output_type: ".containerd.services.sandbox.v1.ControllerStopResponse" + } + method: { + name: "Wait" + input_type: ".containerd.services.sandbox.v1.ControllerWaitRequest" + output_type: ".containerd.services.sandbox.v1.ControllerWaitResponse" + } + method: { + name: "Status" + input_type: ".containerd.services.sandbox.v1.ControllerStatusRequest" + output_type: ".containerd.services.sandbox.v1.ControllerStatusResponse" + } + method: { + name: "Shutdown" + input_type: ".containerd.services.sandbox.v1.ControllerShutdownRequest" + output_type: ".containerd.services.sandbox.v1.ControllerShutdownResponse" + } + method: { + name: "Metrics" + input_type: ".containerd.services.sandbox.v1.ControllerMetricsRequest" + output_type: ".containerd.services.sandbox.v1.ControllerMetricsResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.sandbox.v1.ControllerUpdateRequest" + output_type: ".containerd.services.sandbox.v1.ControllerUpdateResponse" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/sandbox/v1;sandbox" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 203 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 25 + span: 0 + span: 39 + leading_comments: " Sandbox is a v2 runtime extension that allows more complex execution environments for containers.\n This adds a notion of groups of containers that share same lifecycle and/or resources.\n A few good fits for sandbox can be:\n - A \"pause\" container in k8s, that acts as a parent process for child containers to hold network namespace.\n - (micro)VMs that launch a VM process and executes containers inside guest OS.\n containerd in this case remains implementation agnostic and delegates sandbox handling to runtimes.\n See proposal and discussion here: https://github.com/containerd/containerd/issues/4131\n" + } + location: { + path: 3 + path: 0 + span: 27 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 28 + span: 0 + span: 41 + } + location: { + path: 3 + path: 2 + span: 30 + span: 0 + span: 29 + } + location: { + path: 3 + path: 3 + span: 31 + span: 0 + span: 27 + } + location: { + path: 3 + path: 4 + span: 32 + span: 0 + span: 30 + } + location: { + path: 3 + path: 5 + span: 33 + span: 0 + span: 29 + } + location: { + path: 8 + span: 35 + span: 0 + span: 87 + } + location: { + path: 8 + path: 11 + span: 35 + span: 0 + span: 87 + } + location: { + path: 6 + path: 0 + span: 40 + span: 0 + span: 46 + span: 1 + leading_comments: " Store provides a metadata storage interface for sandboxes. Similarly to `Containers`,\n sandbox object includes info required to start a new instance, but no runtime state.\n When running a new sandbox instance, store objects are used as base type to create from.\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 40 + span: 8 + span: 13 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 41 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 41 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 41 + span: 19 + span: 37 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 41 + span: 48 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 42 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 42 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 42 + span: 19 + span: 37 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 42 + span: 48 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 43 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 43 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 43 + span: 19 + span: 37 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 43 + span: 48 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 44 + span: 8 + span: 63 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 44 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 44 + span: 17 + span: 33 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 44 + span: 44 + span: 61 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 45 + span: 8 + span: 60 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 45 + span: 12 + span: 15 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 45 + span: 16 + span: 31 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 45 + span: 42 + span: 58 + } + location: { + path: 4 + path: 0 + span: 48 + span: 0 + span: 50 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 48 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 49 + span: 8 + span: 45 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 6 + span: 49 + span: 8 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 49 + span: 33 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 49 + span: 43 + span: 44 + } + location: { + path: 4 + path: 1 + span: 52 + span: 0 + span: 54 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 52 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 53 + span: 8 + span: 45 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 6 + span: 53 + span: 8 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 53 + span: 33 + span: 40 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 53 + span: 43 + span: 44 + } + location: { + path: 4 + path: 2 + span: 56 + span: 0 + span: 59 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 56 + span: 8 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 57 + span: 8 + span: 45 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 6 + span: 57 + span: 8 + span: 32 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 57 + span: 33 + span: 40 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 57 + span: 43 + span: 44 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 58 + span: 8 + span: 35 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 4 + span: 58 + span: 8 + span: 16 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 58 + span: 17 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 58 + span: 24 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 58 + span: 33 + span: 34 + } + location: { + path: 4 + path: 3 + span: 61 + span: 0 + span: 63 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 61 + span: 8 + span: 27 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 62 + span: 8 + span: 45 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 6 + span: 62 + span: 8 + span: 32 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 62 + span: 33 + span: 40 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 62 + span: 43 + span: 44 + } + location: { + path: 4 + path: 4 + span: 65 + span: 0 + span: 67 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 65 + span: 8 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 66 + span: 8 + span: 30 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 66 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 66 + span: 15 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 66 + span: 28 + span: 29 + } + location: { + path: 4 + path: 5 + span: 69 + span: 0 + span: 30 + } + location: { + path: 4 + path: 5 + path: 1 + span: 69 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + span: 71 + span: 0 + span: 73 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 71 + span: 8 + span: 24 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 72 + span: 8 + span: 36 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 4 + span: 72 + span: 8 + span: 16 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 72 + span: 17 + span: 23 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 72 + span: 24 + span: 31 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 72 + span: 34 + span: 35 + } + location: { + path: 4 + path: 7 + span: 75 + span: 0 + span: 77 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 75 + span: 8 + span: 25 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 76 + span: 8 + span: 51 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 4 + span: 76 + span: 8 + span: 16 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 6 + span: 76 + span: 17 + span: 41 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 76 + span: 42 + span: 46 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 76 + span: 49 + span: 50 + } + location: { + path: 4 + path: 8 + span: 79 + span: 0 + span: 81 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 79 + span: 8 + span: 23 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 80 + span: 8 + span: 30 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 80 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 80 + span: 15 + span: 25 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 80 + span: 28 + span: 29 + } + location: { + path: 4 + path: 9 + span: 83 + span: 0 + span: 85 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 83 + span: 8 + span: 24 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 84 + span: 8 + span: 45 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 6 + span: 84 + span: 8 + span: 32 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 84 + span: 33 + span: 40 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 84 + span: 43 + span: 44 + } + location: { + path: 6 + path: 1 + span: 88 + span: 0 + span: 98 + span: 1 + leading_comments: " Controller is an interface to manage runtime sandbox instances.\n" + } + location: { + path: 6 + path: 1 + path: 1 + span: 88 + span: 8 + span: 18 + } + location: { + path: 6 + path: 1 + path: 2 + path: 0 + span: 89 + span: 8 + span: 79 + } + location: { + path: 6 + path: 1 + path: 2 + path: 0 + path: 1 + span: 89 + span: 12 + span: 18 + } + location: { + path: 6 + path: 1 + path: 2 + path: 0 + path: 2 + span: 89 + span: 19 + span: 42 + } + location: { + path: 6 + path: 1 + path: 2 + path: 0 + path: 3 + span: 89 + span: 53 + span: 77 + } + location: { + path: 6 + path: 1 + path: 2 + path: 1 + span: 90 + span: 8 + span: 76 + } + location: { + path: 6 + path: 1 + path: 2 + path: 1 + path: 1 + span: 90 + span: 12 + span: 17 + } + location: { + path: 6 + path: 1 + path: 2 + path: 1 + path: 2 + span: 90 + span: 18 + span: 40 + } + location: { + path: 6 + path: 1 + path: 2 + path: 1 + path: 3 + span: 90 + span: 51 + span: 74 + } + location: { + path: 6 + path: 1 + path: 2 + path: 2 + span: 91 + span: 8 + span: 85 + } + location: { + path: 6 + path: 1 + path: 2 + path: 2 + path: 1 + span: 91 + span: 12 + span: 20 + } + location: { + path: 6 + path: 1 + path: 2 + path: 2 + path: 2 + span: 91 + span: 21 + span: 46 + } + location: { + path: 6 + path: 1 + path: 2 + path: 2 + path: 3 + span: 91 + span: 57 + span: 83 + } + location: { + path: 6 + path: 1 + path: 2 + path: 3 + span: 92 + span: 8 + span: 73 + } + location: { + path: 6 + path: 1 + path: 2 + path: 3 + path: 1 + span: 92 + span: 12 + span: 16 + } + location: { + path: 6 + path: 1 + path: 2 + path: 3 + path: 2 + span: 92 + span: 17 + span: 38 + } + location: { + path: 6 + path: 1 + path: 2 + path: 3 + path: 3 + span: 92 + span: 49 + span: 71 + } + location: { + path: 6 + path: 1 + path: 2 + path: 4 + span: 93 + span: 8 + span: 73 + } + location: { + path: 6 + path: 1 + path: 2 + path: 4 + path: 1 + span: 93 + span: 12 + span: 16 + } + location: { + path: 6 + path: 1 + path: 2 + path: 4 + path: 2 + span: 93 + span: 17 + span: 38 + } + location: { + path: 6 + path: 1 + path: 2 + path: 4 + path: 3 + span: 93 + span: 49 + span: 71 + } + location: { + path: 6 + path: 1 + path: 2 + path: 5 + span: 94 + span: 8 + span: 79 + } + location: { + path: 6 + path: 1 + path: 2 + path: 5 + path: 1 + span: 94 + span: 12 + span: 18 + } + location: { + path: 6 + path: 1 + path: 2 + path: 5 + path: 2 + span: 94 + span: 19 + span: 42 + } + location: { + path: 6 + path: 1 + path: 2 + path: 5 + path: 3 + span: 94 + span: 53 + span: 77 + } + location: { + path: 6 + path: 1 + path: 2 + path: 6 + span: 95 + span: 8 + span: 85 + } + location: { + path: 6 + path: 1 + path: 2 + path: 6 + path: 1 + span: 95 + span: 12 + span: 20 + } + location: { + path: 6 + path: 1 + path: 2 + path: 6 + path: 2 + span: 95 + span: 21 + span: 46 + } + location: { + path: 6 + path: 1 + path: 2 + path: 6 + path: 3 + span: 95 + span: 57 + span: 83 + } + location: { + path: 6 + path: 1 + path: 2 + path: 7 + span: 96 + span: 8 + span: 82 + } + location: { + path: 6 + path: 1 + path: 2 + path: 7 + path: 1 + span: 96 + span: 12 + span: 19 + } + location: { + path: 6 + path: 1 + path: 2 + path: 7 + path: 2 + span: 96 + span: 20 + span: 44 + } + location: { + path: 6 + path: 1 + path: 2 + path: 7 + path: 3 + span: 96 + span: 55 + span: 80 + } + location: { + path: 6 + path: 1 + path: 2 + path: 8 + span: 97 + span: 8 + span: 79 + } + location: { + path: 6 + path: 1 + path: 2 + path: 8 + path: 1 + span: 97 + span: 12 + span: 18 + } + location: { + path: 6 + path: 1 + path: 2 + path: 8 + path: 2 + span: 97 + span: 19 + span: 42 + } + location: { + path: 6 + path: 1 + path: 2 + path: 8 + path: 3 + span: 97 + span: 53 + span: 77 + } + location: { + path: 4 + path: 10 + span: 100 + span: 0 + span: 108 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 100 + span: 8 + span: 31 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 101 + span: 8 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 5 + span: 101 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 101 + span: 15 + span: 25 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 101 + span: 28 + span: 29 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + span: 102 + span: 8 + span: 51 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 4 + span: 102 + span: 8 + span: 16 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 6 + span: 102 + span: 17 + span: 39 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 1 + span: 102 + span: 40 + span: 46 + } + location: { + path: 4 + path: 10 + path: 2 + path: 1 + path: 3 + span: 102 + span: 49 + span: 50 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + span: 103 + span: 8 + span: 40 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 6 + span: 103 + span: 8 + span: 27 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 1 + span: 103 + span: 28 + span: 35 + } + location: { + path: 4 + path: 10 + path: 2 + path: 2 + path: 3 + span: 103 + span: 38 + span: 39 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + span: 104 + span: 8 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 5 + span: 104 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 1 + span: 104 + span: 15 + span: 25 + } + location: { + path: 4 + path: 10 + path: 2 + path: 3 + path: 3 + span: 104 + span: 28 + span: 29 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + span: 105 + span: 8 + span: 44 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 6 + span: 105 + span: 8 + span: 27 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 1 + span: 105 + span: 28 + span: 39 + } + location: { + path: 4 + path: 10 + path: 2 + path: 4 + path: 3 + span: 105 + span: 42 + span: 43 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + span: 106 + span: 8 + span: 45 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 6 + span: 106 + span: 8 + span: 32 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 1 + span: 106 + span: 33 + span: 40 + } + location: { + path: 4 + path: 10 + path: 2 + path: 5 + path: 3 + span: 106 + span: 43 + span: 44 + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + span: 107 + span: 8 + span: 30 + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + path: 5 + span: 107 + span: 8 + span: 14 + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + path: 1 + span: 107 + span: 15 + span: 24 + } + location: { + path: 4 + path: 10 + path: 2 + path: 6 + path: 3 + span: 107 + span: 27 + span: 29 + } + location: { + path: 4 + path: 11 + span: 110 + span: 0 + span: 112 + span: 1 + } + location: { + path: 4 + path: 11 + path: 1 + span: 110 + span: 8 + span: 32 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + span: 111 + span: 8 + span: 30 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 5 + span: 111 + span: 8 + span: 14 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 1 + span: 111 + span: 15 + span: 25 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 3 + span: 111 + span: 28 + span: 29 + } + location: { + path: 4 + path: 12 + span: 114 + span: 0 + span: 117 + span: 1 + } + location: { + path: 4 + path: 12 + path: 1 + span: 114 + span: 8 + span: 30 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + span: 115 + span: 8 + span: 30 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 5 + span: 115 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 1 + span: 115 + span: 15 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 3 + span: 115 + span: 28 + span: 29 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + span: 116 + span: 8 + span: 30 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 5 + span: 116 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 1 + span: 116 + span: 15 + span: 24 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 3 + span: 116 + span: 27 + span: 29 + } + location: { + path: 4 + path: 13 + span: 119 + span: 0 + span: 129 + span: 1 + } + location: { + path: 4 + path: 13 + path: 1 + span: 119 + span: 8 + span: 31 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + span: 120 + span: 8 + span: 30 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 5 + span: 120 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 1 + span: 120 + span: 15 + span: 25 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 3 + span: 120 + span: 28 + span: 29 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + span: 121 + span: 8 + span: 23 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 5 + span: 121 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 1 + span: 121 + span: 15 + span: 18 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 3 + span: 121 + span: 21 + span: 22 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + span: 122 + span: 8 + span: 49 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 6 + span: 122 + span: 8 + span: 33 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 1 + span: 122 + span: 34 + span: 44 + } + location: { + path: 4 + path: 13 + path: 2 + path: 2 + path: 3 + span: 122 + span: 47 + span: 48 + } + location: { + path: 4 + path: 13 + path: 2 + path: 3 + span: 123 + span: 8 + span: 39 + } + location: { + path: 4 + path: 13 + path: 2 + path: 3 + path: 6 + span: 123 + span: 8 + span: 27 + } + location: { + path: 4 + path: 13 + path: 2 + path: 3 + path: 1 + span: 123 + span: 28 + span: 34 + } + location: { + path: 4 + path: 13 + path: 2 + path: 3 + path: 3 + span: 123 + span: 37 + span: 38 + } + location: { + path: 4 + path: 13 + path: 2 + path: 4 + span: 127 + span: 8 + span: 27 + leading_comments: " Address of the sandbox for containerd to connect,\n for calling Task or other APIs serving in the sandbox.\n it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:.\n" + } + location: { + path: 4 + path: 13 + path: 2 + path: 4 + path: 5 + span: 127 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 4 + path: 1 + span: 127 + span: 15 + span: 22 + } + location: { + path: 4 + path: 13 + path: 2 + path: 4 + path: 3 + span: 127 + span: 25 + span: 26 + } + location: { + path: 4 + path: 13 + path: 2 + path: 5 + span: 128 + span: 8 + span: 27 + } + location: { + path: 4 + path: 13 + path: 2 + path: 5 + path: 5 + span: 128 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 5 + path: 1 + span: 128 + span: 15 + span: 22 + } + location: { + path: 4 + path: 13 + path: 2 + path: 5 + path: 3 + span: 128 + span: 25 + span: 26 + } + location: { + path: 4 + path: 14 + span: 131 + span: 0 + span: 134 + span: 1 + } + location: { + path: 4 + path: 14 + path: 1 + span: 131 + span: 8 + span: 33 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + span: 132 + span: 8 + span: 30 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 5 + span: 132 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 1 + span: 132 + span: 15 + span: 25 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 3 + span: 132 + span: 28 + span: 29 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + span: 133 + span: 8 + span: 30 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 5 + span: 133 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 1 + span: 133 + span: 15 + span: 24 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 3 + span: 133 + span: 27 + span: 29 + } + location: { + path: 4 + path: 15 + span: 136 + span: 0 + span: 138 + span: 1 + } + location: { + path: 4 + path: 15 + path: 1 + span: 136 + span: 8 + span: 34 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + span: 137 + span: 8 + span: 47 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 6 + span: 137 + span: 8 + span: 33 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 1 + span: 137 + span: 34 + span: 42 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 3 + span: 137 + span: 45 + span: 46 + } + location: { + path: 4 + path: 16 + span: 140 + span: 0 + span: 144 + span: 1 + } + location: { + path: 4 + path: 16 + path: 1 + span: 140 + span: 8 + span: 29 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + span: 141 + span: 8 + span: 30 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 5 + span: 141 + span: 8 + span: 14 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 1 + span: 141 + span: 15 + span: 25 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 3 + span: 141 + span: 28 + span: 29 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + span: 142 + span: 8 + span: 32 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 5 + span: 142 + span: 8 + span: 14 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 1 + span: 142 + span: 15 + span: 27 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 3 + span: 142 + span: 30 + span: 31 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + span: 143 + span: 8 + span: 30 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 5 + span: 143 + span: 8 + span: 14 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 1 + span: 143 + span: 15 + span: 24 + } + location: { + path: 4 + path: 16 + path: 2 + path: 2 + path: 3 + span: 143 + span: 27 + span: 29 + } + location: { + path: 4 + path: 17 + span: 146 + span: 0 + span: 33 + } + location: { + path: 4 + path: 17 + path: 1 + span: 146 + span: 8 + span: 30 + } + location: { + path: 4 + path: 18 + span: 148 + span: 0 + span: 151 + span: 1 + } + location: { + path: 4 + path: 18 + path: 1 + span: 148 + span: 8 + span: 29 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + span: 149 + span: 8 + span: 30 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 5 + span: 149 + span: 8 + span: 14 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 1 + span: 149 + span: 15 + span: 25 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 3 + span: 149 + span: 28 + span: 29 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + span: 150 + span: 8 + span: 30 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 5 + span: 150 + span: 8 + span: 14 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 1 + span: 150 + span: 15 + span: 24 + } + location: { + path: 4 + path: 18 + path: 2 + path: 1 + path: 3 + span: 150 + span: 27 + span: 29 + } + location: { + path: 4 + path: 19 + span: 153 + span: 0 + span: 156 + span: 1 + } + location: { + path: 4 + path: 19 + path: 1 + span: 153 + span: 8 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + span: 154 + span: 8 + span: 31 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 5 + span: 154 + span: 8 + span: 14 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 1 + span: 154 + span: 15 + span: 26 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 3 + span: 154 + span: 29 + span: 30 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + span: 155 + span: 8 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 6 + span: 155 + span: 8 + span: 33 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 1 + span: 155 + span: 34 + span: 43 + } + location: { + path: 4 + path: 19 + path: 2 + path: 1 + path: 3 + span: 155 + span: 46 + span: 47 + } + location: { + path: 4 + path: 20 + span: 158 + span: 0 + span: 162 + span: 1 + } + location: { + path: 4 + path: 20 + path: 1 + span: 158 + span: 8 + span: 31 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + span: 159 + span: 8 + span: 30 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 5 + span: 159 + span: 8 + span: 14 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 1 + span: 159 + span: 15 + span: 25 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 3 + span: 159 + span: 28 + span: 29 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + span: 160 + span: 8 + span: 25 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 5 + span: 160 + span: 8 + span: 12 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 1 + span: 160 + span: 13 + span: 20 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 3 + span: 160 + span: 23 + span: 24 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + span: 161 + span: 8 + span: 30 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 5 + span: 161 + span: 8 + span: 14 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 1 + span: 161 + span: 15 + span: 24 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 3 + span: 161 + span: 27 + span: 29 + } + location: { + path: 4 + path: 21 + span: 164 + span: 0 + span: 177 + span: 1 + } + location: { + path: 4 + path: 21 + path: 1 + span: 164 + span: 8 + span: 32 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + span: 165 + span: 8 + span: 30 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 5 + span: 165 + span: 8 + span: 14 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 1 + span: 165 + span: 15 + span: 25 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 3 + span: 165 + span: 28 + span: 29 + } + location: { + path: 4 + path: 21 + path: 2 + path: 1 + span: 166 + span: 8 + span: 23 + } + location: { + path: 4 + path: 21 + path: 2 + path: 1 + path: 5 + span: 166 + span: 8 + span: 14 + } + location: { + path: 4 + path: 21 + path: 2 + path: 1 + path: 1 + span: 166 + span: 15 + span: 18 + } + location: { + path: 4 + path: 21 + path: 2 + path: 1 + path: 3 + span: 166 + span: 21 + span: 22 + } + location: { + path: 4 + path: 21 + path: 2 + path: 2 + span: 167 + span: 8 + span: 25 + } + location: { + path: 4 + path: 21 + path: 2 + path: 2 + path: 5 + span: 167 + span: 8 + span: 14 + } + location: { + path: 4 + path: 21 + path: 2 + path: 2 + path: 1 + span: 167 + span: 15 + span: 20 + } + location: { + path: 4 + path: 21 + path: 2 + path: 2 + path: 3 + span: 167 + span: 23 + span: 24 + } + location: { + path: 4 + path: 21 + path: 2 + path: 3 + span: 168 + span: 8 + span: 37 + } + location: { + path: 4 + path: 21 + path: 2 + path: 3 + path: 6 + span: 168 + span: 8 + span: 27 + } + location: { + path: 4 + path: 21 + path: 2 + path: 3 + path: 1 + span: 168 + span: 28 + span: 32 + } + location: { + path: 4 + path: 21 + path: 2 + path: 3 + path: 3 + span: 168 + span: 35 + span: 36 + } + location: { + path: 4 + path: 21 + path: 2 + path: 4 + span: 169 + span: 8 + span: 49 + } + location: { + path: 4 + path: 21 + path: 2 + path: 4 + path: 6 + span: 169 + span: 8 + span: 33 + } + location: { + path: 4 + path: 21 + path: 2 + path: 4 + path: 1 + span: 169 + span: 34 + span: 44 + } + location: { + path: 4 + path: 21 + path: 2 + path: 4 + path: 3 + span: 169 + span: 47 + span: 48 + } + location: { + path: 4 + path: 21 + path: 2 + path: 5 + span: 170 + span: 8 + span: 48 + } + location: { + path: 4 + path: 21 + path: 2 + path: 5 + path: 6 + span: 170 + span: 8 + span: 33 + } + location: { + path: 4 + path: 21 + path: 2 + path: 5 + path: 1 + span: 170 + span: 34 + span: 43 + } + location: { + path: 4 + path: 21 + path: 2 + path: 5 + path: 3 + span: 170 + span: 46 + span: 47 + } + location: { + path: 4 + path: 21 + path: 2 + path: 6 + span: 171 + span: 8 + span: 38 + } + location: { + path: 4 + path: 21 + path: 2 + path: 6 + path: 6 + span: 171 + span: 8 + span: 27 + } + location: { + path: 4 + path: 21 + path: 2 + path: 6 + path: 1 + span: 171 + span: 28 + span: 33 + } + location: { + path: 4 + path: 21 + path: 2 + path: 6 + path: 3 + span: 171 + span: 36 + span: 37 + } + location: { + path: 4 + path: 21 + path: 2 + path: 7 + span: 175 + span: 8 + span: 27 + leading_comments: " Address of the sandbox for containerd to connect,\n for calling Task or other APIs serving in the sandbox.\n it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:.\n" + } + location: { + path: 4 + path: 21 + path: 2 + path: 7 + path: 5 + span: 175 + span: 8 + span: 14 + } + location: { + path: 4 + path: 21 + path: 2 + path: 7 + path: 1 + span: 175 + span: 15 + span: 22 + } + location: { + path: 4 + path: 21 + path: 2 + path: 7 + path: 3 + span: 175 + span: 25 + span: 26 + } + location: { + path: 4 + path: 21 + path: 2 + path: 8 + span: 176 + span: 8 + span: 27 + } + location: { + path: 4 + path: 21 + path: 2 + path: 8 + path: 5 + span: 176 + span: 8 + span: 14 + } + location: { + path: 4 + path: 21 + path: 2 + path: 8 + path: 1 + span: 176 + span: 15 + span: 22 + } + location: { + path: 4 + path: 21 + path: 2 + path: 8 + path: 3 + span: 176 + span: 25 + span: 26 + } + location: { + path: 4 + path: 22 + span: 179 + span: 0 + span: 182 + span: 1 + } + location: { + path: 4 + path: 22 + path: 1 + span: 179 + span: 8 + span: 33 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + span: 180 + span: 8 + span: 30 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 5 + span: 180 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 1 + span: 180 + span: 15 + span: 25 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 3 + span: 180 + span: 28 + span: 29 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + span: 181 + span: 8 + span: 30 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 5 + span: 181 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 1 + span: 181 + span: 15 + span: 24 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 3 + span: 181 + span: 27 + span: 29 + } + location: { + path: 4 + path: 23 + span: 184 + span: 0 + span: 37 + } + location: { + path: 4 + path: 23 + path: 1 + span: 184 + span: 8 + span: 34 + } + location: { + path: 4 + path: 24 + span: 186 + span: 0 + span: 189 + span: 1 + } + location: { + path: 4 + path: 24 + path: 1 + span: 186 + span: 8 + span: 32 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + span: 187 + span: 8 + span: 30 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 5 + span: 187 + span: 8 + span: 14 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 1 + span: 187 + span: 15 + span: 25 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 3 + span: 187 + span: 28 + span: 29 + } + location: { + path: 4 + path: 24 + path: 2 + path: 1 + span: 188 + span: 8 + span: 30 + } + location: { + path: 4 + path: 24 + path: 2 + path: 1 + path: 5 + span: 188 + span: 8 + span: 14 + } + location: { + path: 4 + path: 24 + path: 2 + path: 1 + path: 1 + span: 188 + span: 15 + span: 24 + } + location: { + path: 4 + path: 24 + path: 2 + path: 1 + path: 3 + span: 188 + span: 27 + span: 29 + } + location: { + path: 4 + path: 25 + span: 191 + span: 0 + span: 193 + span: 1 + } + location: { + path: 4 + path: 25 + path: 1 + span: 191 + span: 8 + span: 33 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + span: 192 + span: 8 + span: 33 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 6 + span: 192 + span: 8 + span: 20 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 1 + span: 192 + span: 21 + span: 28 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 3 + span: 192 + span: 31 + span: 32 + } + location: { + path: 4 + path: 26 + span: 195 + span: 0 + span: 200 + span: 1 + } + location: { + path: 4 + path: 26 + path: 1 + span: 195 + span: 8 + span: 31 + } + location: { + path: 4 + path: 26 + path: 2 + path: 0 + span: 196 + span: 8 + span: 30 + } + location: { + path: 4 + path: 26 + path: 2 + path: 0 + path: 5 + span: 196 + span: 8 + span: 14 + } + location: { + path: 4 + path: 26 + path: 2 + path: 0 + path: 1 + span: 196 + span: 15 + span: 25 + } + location: { + path: 4 + path: 26 + path: 2 + path: 0 + path: 3 + span: 196 + span: 28 + span: 29 + } + location: { + path: 4 + path: 26 + path: 2 + path: 1 + span: 197 + span: 8 + span: 29 + } + location: { + path: 4 + path: 26 + path: 2 + path: 1 + path: 5 + span: 197 + span: 8 + span: 14 + } + location: { + path: 4 + path: 26 + path: 2 + path: 1 + path: 1 + span: 197 + span: 15 + span: 24 + } + location: { + path: 4 + path: 26 + path: 2 + path: 1 + path: 3 + span: 197 + span: 27 + span: 28 + } + location: { + path: 4 + path: 26 + path: 2 + path: 2 + span: 198 + span: 8 + span: 45 + } + location: { + path: 4 + path: 26 + path: 2 + path: 2 + path: 6 + span: 198 + span: 8 + span: 32 + } + location: { + path: 4 + path: 26 + path: 2 + path: 2 + path: 1 + span: 198 + span: 33 + span: 40 + } + location: { + path: 4 + path: 26 + path: 2 + path: 2 + path: 3 + span: 198 + span: 43 + span: 44 + } + location: { + path: 4 + path: 26 + path: 2 + path: 3 + span: 199 + span: 8 + span: 35 + } + location: { + path: 4 + path: 26 + path: 2 + path: 3 + path: 4 + span: 199 + span: 8 + span: 16 + } + location: { + path: 4 + path: 26 + path: 2 + path: 3 + path: 5 + span: 199 + span: 17 + span: 23 + } + location: { + path: 4 + path: 26 + path: 2 + path: 3 + path: 1 + span: 199 + span: 24 + span: 30 + } + location: { + path: 4 + path: 26 + path: 2 + path: 3 + path: 3 + span: 199 + span: 33 + span: 34 + } + location: { + path: 4 + path: 27 + span: 202 + span: 0 + span: 203 + span: 1 + } + location: { + path: 4 + path: 27 + path: 1 + span: 202 + span: 8 + span: 32 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/snapshots/v1/snapshots.proto" + package: "containerd.services.snapshots.v1" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/field_mask.proto" + dependency: "google/protobuf/timestamp.proto" + dependency: "types/mount.proto" + message_type: { + name: "PrepareSnapshotRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "key" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "parent" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "parent" + } + field: { + name: "labels" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.snapshots.v1.PrepareSnapshotRequest.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "PrepareSnapshotResponse" + field: { + name: "mounts" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "mounts" + } + } + message_type: { + name: "ViewSnapshotRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "key" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "parent" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "parent" + } + field: { + name: "labels" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.snapshots.v1.ViewSnapshotRequest.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "ViewSnapshotResponse" + field: { + name: "mounts" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "mounts" + } + } + message_type: { + name: "MountsRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "key" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + } + message_type: { + name: "MountsResponse" + field: { + name: "mounts" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "mounts" + } + } + message_type: { + name: "RemoveSnapshotRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "key" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + } + message_type: { + name: "CommitSnapshotRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "name" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "key" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "labels" + number: 4 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.snapshots.v1.CommitSnapshotRequest.LabelsEntry" + json_name: "labels" + } + field: { + name: "parent" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "parent" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "StatSnapshotRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "key" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + } + message_type: { + name: "Info" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "parent" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "parent" + } + field: { + name: "kind" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".containerd.services.snapshots.v1.Kind" + json_name: "kind" + } + field: { + name: "created_at" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "createdAt" + } + field: { + name: "updated_at" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "updatedAt" + } + field: { + name: "labels" + number: 6 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.snapshots.v1.Info.LabelsEntry" + json_name: "labels" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "StatSnapshotResponse" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.snapshots.v1.Info" + json_name: "info" + } + } + message_type: { + name: "UpdateSnapshotRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "info" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.snapshots.v1.Info" + json_name: "info" + } + field: { + name: "update_mask" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.FieldMask" + json_name: "updateMask" + } + } + message_type: { + name: "UpdateSnapshotResponse" + field: { + name: "info" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.snapshots.v1.Info" + json_name: "info" + } + } + message_type: { + name: "ListSnapshotsRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "filters" + number: 2 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "ListSnapshotsResponse" + field: { + name: "info" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.snapshots.v1.Info" + json_name: "info" + } + } + message_type: { + name: "UsageRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + field: { + name: "key" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + } + message_type: { + name: "UsageResponse" + field: { + name: "size" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "size" + } + field: { + name: "inodes" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "inodes" + } + } + message_type: { + name: "CleanupRequest" + field: { + name: "snapshotter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + } + enum_type: { + name: "Kind" + value: { + name: "UNKNOWN" + number: 0 + } + value: { + name: "VIEW" + number: 1 + } + value: { + name: "ACTIVE" + number: 2 + } + value: { + name: "COMMITTED" + number: 3 + } + } + service: { + name: "Snapshots" + method: { + name: "Prepare" + input_type: ".containerd.services.snapshots.v1.PrepareSnapshotRequest" + output_type: ".containerd.services.snapshots.v1.PrepareSnapshotResponse" + } + method: { + name: "View" + input_type: ".containerd.services.snapshots.v1.ViewSnapshotRequest" + output_type: ".containerd.services.snapshots.v1.ViewSnapshotResponse" + } + method: { + name: "Mounts" + input_type: ".containerd.services.snapshots.v1.MountsRequest" + output_type: ".containerd.services.snapshots.v1.MountsResponse" + } + method: { + name: "Commit" + input_type: ".containerd.services.snapshots.v1.CommitSnapshotRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Remove" + input_type: ".containerd.services.snapshots.v1.RemoveSnapshotRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Stat" + input_type: ".containerd.services.snapshots.v1.StatSnapshotRequest" + output_type: ".containerd.services.snapshots.v1.StatSnapshotResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.snapshots.v1.UpdateSnapshotRequest" + output_type: ".containerd.services.snapshots.v1.UpdateSnapshotResponse" + } + method: { + name: "List" + input_type: ".containerd.services.snapshots.v1.ListSnapshotsRequest" + output_type: ".containerd.services.snapshots.v1.ListSnapshotsResponse" + server_streaming: true + } + method: { + name: "Usage" + input_type: ".containerd.services.snapshots.v1.UsageRequest" + output_type: ".containerd.services.snapshots.v1.UsageResponse" + } + method: { + name: "Cleanup" + input_type: ".containerd.services.snapshots.v1.CleanupRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/snapshots/v1;snapshots" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 180 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 41 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 37 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 42 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 41 + } + location: { + path: 3 + path: 3 + span: 23 + span: 0 + span: 27 + } + location: { + path: 8 + span: 25 + span: 0 + span: 91 + } + location: { + path: 8 + path: 11 + span: 25 + span: 0 + span: 91 + } + location: { + path: 6 + path: 0 + span: 28 + span: 0 + span: 39 + span: 1 + leading_comments: " Snapshot service manages snapshots\n" + } + location: { + path: 6 + path: 0 + path: 1 + span: 28 + span: 8 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 29 + span: 8 + span: 78 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 29 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 29 + span: 20 + span: 42 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 29 + span: 53 + span: 76 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 30 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 30 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 30 + span: 17 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 30 + span: 47 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 31 + span: 8 + span: 59 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 31 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 31 + span: 19 + span: 32 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 31 + span: 43 + span: 57 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 32 + span: 8 + span: 74 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 32 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 32 + span: 19 + span: 40 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 32 + span: 51 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 33 + span: 8 + span: 74 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 33 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 33 + span: 19 + span: 40 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 33 + span: 51 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + span: 34 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 1 + span: 34 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 2 + span: 34 + span: 17 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 3 + span: 34 + span: 47 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + span: 35 + span: 8 + span: 75 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 1 + span: 35 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 2 + span: 35 + span: 19 + span: 40 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 3 + span: 35 + span: 51 + span: 73 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + span: 36 + span: 8 + span: 78 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 1 + span: 36 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 2 + span: 36 + span: 17 + span: 37 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 6 + span: 36 + span: 48 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 3 + span: 36 + span: 55 + span: 76 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + span: 37 + span: 8 + span: 56 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 1 + span: 37 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 2 + span: 37 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 3 + span: 37 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + span: 38 + span: 8 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 1 + span: 38 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 2 + span: 38 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 3 + span: 38 + span: 45 + span: 66 + } + location: { + path: 4 + path: 0 + span: 41 + span: 0 + span: 50 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 41 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 42 + span: 8 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 42 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 42 + span: 15 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 42 + span: 29 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 43 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 43 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 43 + span: 15 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 43 + span: 21 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 44 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 44 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 44 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 44 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 49 + span: 8 + span: 40 + leading_comments: " Labels are arbitrary data on snapshots.\n\n The combined size of a key/value pair cannot exceed 4096 bytes.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 6 + span: 49 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 49 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 49 + span: 38 + span: 39 + } + location: { + path: 4 + path: 1 + span: 52 + span: 0 + span: 54 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 52 + span: 8 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 53 + span: 8 + span: 51 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 4 + span: 53 + span: 8 + span: 16 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 6 + span: 53 + span: 17 + span: 39 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 53 + span: 40 + span: 46 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 53 + span: 49 + span: 50 + } + location: { + path: 4 + path: 2 + span: 56 + span: 0 + span: 65 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 56 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 57 + span: 8 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 57 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 57 + span: 15 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 57 + span: 29 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 58 + span: 8 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 58 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 58 + span: 15 + span: 18 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 58 + span: 21 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 59 + span: 8 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 5 + span: 59 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 59 + span: 15 + span: 21 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 59 + span: 24 + span: 25 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + span: 64 + span: 8 + span: 40 + leading_comments: " Labels are arbitrary data on snapshots.\n\n The combined size of a key/value pair cannot exceed 4096 bytes.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 6 + span: 64 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 1 + span: 64 + span: 28 + span: 34 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 3 + span: 64 + span: 38 + span: 39 + } + location: { + path: 4 + path: 3 + span: 67 + span: 0 + span: 69 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 67 + span: 8 + span: 28 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 68 + span: 8 + span: 51 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 4 + span: 68 + span: 8 + span: 16 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 6 + span: 68 + span: 17 + span: 39 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 68 + span: 40 + span: 46 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 68 + span: 49 + span: 50 + } + location: { + path: 4 + path: 4 + span: 71 + span: 0 + span: 74 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 71 + span: 8 + span: 21 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 72 + span: 8 + span: 31 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 72 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 72 + span: 15 + span: 26 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 72 + span: 29 + span: 30 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + span: 73 + span: 8 + span: 23 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 5 + span: 73 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 1 + span: 73 + span: 15 + span: 18 + } + location: { + path: 4 + path: 4 + path: 2 + path: 1 + path: 3 + span: 73 + span: 21 + span: 22 + } + location: { + path: 4 + path: 5 + span: 76 + span: 0 + span: 78 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 76 + span: 8 + span: 22 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 77 + span: 8 + span: 51 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 4 + span: 77 + span: 8 + span: 16 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 6 + span: 77 + span: 17 + span: 39 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 77 + span: 40 + span: 46 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 77 + span: 49 + span: 50 + } + location: { + path: 4 + path: 6 + span: 80 + span: 0 + span: 83 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 80 + span: 8 + span: 29 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 81 + span: 8 + span: 31 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 81 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 81 + span: 15 + span: 26 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 81 + span: 29 + span: 30 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 82 + span: 8 + span: 23 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 5 + span: 82 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 82 + span: 15 + span: 18 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 82 + span: 21 + span: 22 + } + location: { + path: 4 + path: 7 + span: 85 + span: 0 + span: 96 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 85 + span: 8 + span: 29 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 86 + span: 8 + span: 31 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 86 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 86 + span: 15 + span: 26 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 86 + span: 29 + span: 30 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 87 + span: 8 + span: 24 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 5 + span: 87 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 87 + span: 15 + span: 19 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 87 + span: 22 + span: 23 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + span: 88 + span: 8 + span: 23 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 5 + span: 88 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 1 + span: 88 + span: 15 + span: 18 + } + location: { + path: 4 + path: 7 + path: 2 + path: 2 + path: 3 + span: 88 + span: 21 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 3 + span: 93 + span: 8 + span: 40 + leading_comments: " Labels are arbitrary data on snapshots.\n\n The combined size of a key/value pair cannot exceed 4096 bytes.\n" + } + location: { + path: 4 + path: 7 + path: 2 + path: 3 + path: 6 + span: 93 + span: 8 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 3 + path: 1 + span: 93 + span: 28 + span: 34 + } + location: { + path: 4 + path: 7 + path: 2 + path: 3 + path: 3 + span: 93 + span: 38 + span: 39 + } + location: { + path: 4 + path: 7 + path: 2 + path: 4 + span: 95 + span: 8 + span: 26 + } + location: { + path: 4 + path: 7 + path: 2 + path: 4 + path: 5 + span: 95 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 4 + path: 1 + span: 95 + span: 15 + span: 21 + } + location: { + path: 4 + path: 7 + path: 2 + path: 4 + path: 3 + span: 95 + span: 24 + span: 25 + } + location: { + path: 4 + path: 8 + span: 98 + span: 0 + span: 101 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 98 + span: 8 + span: 27 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 99 + span: 8 + span: 31 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 5 + span: 99 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 99 + span: 15 + span: 26 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 99 + span: 29 + span: 30 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + span: 100 + span: 8 + span: 23 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 5 + span: 100 + span: 8 + span: 14 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 1 + span: 100 + span: 15 + span: 18 + } + location: { + path: 4 + path: 8 + path: 2 + path: 1 + path: 3 + span: 100 + span: 21 + span: 22 + } + location: { + path: 5 + path: 0 + span: 103 + span: 0 + span: 108 + span: 1 + } + location: { + path: 5 + path: 0 + path: 1 + span: 103 + span: 5 + span: 9 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + span: 104 + span: 8 + span: 20 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 1 + span: 104 + span: 8 + span: 15 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 2 + span: 104 + span: 18 + span: 19 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + span: 105 + span: 8 + span: 17 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 1 + span: 105 + span: 8 + span: 12 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 2 + span: 105 + span: 15 + span: 16 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + span: 106 + span: 8 + span: 19 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 1 + span: 106 + span: 8 + span: 14 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 2 + span: 106 + span: 17 + span: 18 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + span: 107 + span: 8 + span: 22 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + path: 1 + span: 107 + span: 8 + span: 17 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + path: 2 + span: 107 + span: 20 + span: 21 + } + location: { + path: 4 + path: 9 + span: 110 + span: 0 + span: 125 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 110 + span: 8 + span: 12 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 111 + span: 8 + span: 24 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 111 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 111 + span: 15 + span: 19 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 111 + span: 22 + span: 23 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + span: 112 + span: 8 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 5 + span: 112 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 1 + span: 112 + span: 15 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 1 + path: 3 + span: 112 + span: 24 + span: 25 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + span: 113 + span: 8 + span: 22 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 6 + span: 113 + span: 8 + span: 12 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 1 + span: 113 + span: 13 + span: 17 + } + location: { + path: 4 + path: 9 + path: 2 + path: 2 + path: 3 + span: 113 + span: 20 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + span: 116 + span: 8 + span: 49 + leading_comments: " CreatedAt provides the time at which the snapshot was created.\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 6 + span: 116 + span: 8 + span: 33 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 1 + span: 116 + span: 34 + span: 44 + } + location: { + path: 4 + path: 9 + path: 2 + path: 3 + path: 3 + span: 116 + span: 47 + span: 48 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + span: 119 + span: 8 + span: 49 + leading_comments: " UpdatedAt provides the time the info was last updated.\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 6 + span: 119 + span: 8 + span: 33 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 1 + span: 119 + span: 34 + span: 44 + } + location: { + path: 4 + path: 9 + path: 2 + path: 4 + path: 3 + span: 119 + span: 47 + span: 48 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + span: 124 + span: 8 + span: 40 + leading_comments: " Labels are arbitrary data on snapshots.\n\n The combined size of a key/value pair cannot exceed 4096 bytes.\n" + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 6 + span: 124 + span: 8 + span: 27 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 1 + span: 124 + span: 28 + span: 34 + } + location: { + path: 4 + path: 9 + path: 2 + path: 5 + path: 3 + span: 124 + span: 38 + span: 39 + } + location: { + path: 4 + path: 10 + span: 127 + span: 0 + span: 129 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 127 + span: 8 + span: 28 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 128 + span: 8 + span: 22 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 6 + span: 128 + span: 8 + span: 12 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 128 + span: 13 + span: 17 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 128 + span: 20 + span: 21 + } + location: { + path: 4 + path: 11 + span: 131 + span: 0 + span: 142 + span: 1 + } + location: { + path: 4 + path: 11 + path: 1 + span: 131 + span: 8 + span: 29 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + span: 132 + span: 8 + span: 31 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 5 + span: 132 + span: 8 + span: 14 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 1 + span: 132 + span: 15 + span: 26 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 3 + span: 132 + span: 29 + span: 30 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + span: 133 + span: 8 + span: 22 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 6 + span: 133 + span: 8 + span: 12 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 1 + span: 133 + span: 13 + span: 17 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 3 + span: 133 + span: 20 + span: 21 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + span: 141 + span: 8 + span: 50 + leading_comments: " UpdateMask specifies which fields to perform the update on. If empty,\n the operation applies to all fields.\n\n In info, Name, Parent, Kind, Created are immutable,\n other field may be updated using this mask.\n If no mask is provided, all mutable field are updated.\n" + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 6 + span: 141 + span: 8 + span: 33 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 1 + span: 141 + span: 34 + span: 45 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 3 + span: 141 + span: 48 + span: 49 + } + location: { + path: 4 + path: 12 + span: 144 + span: 0 + span: 146 + span: 1 + } + location: { + path: 4 + path: 12 + path: 1 + span: 144 + span: 8 + span: 30 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + span: 145 + span: 8 + span: 22 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 6 + span: 145 + span: 8 + span: 12 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 1 + span: 145 + span: 13 + span: 17 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 3 + span: 145 + span: 20 + span: 21 + } + location: { + path: 4 + path: 13 + span: 148 + span: 0 + span: 162 + span: 1 + } + location: { + path: 4 + path: 13 + path: 1 + span: 148 + span: 8 + span: 28 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + span: 149 + span: 8 + span: 31 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 5 + span: 149 + span: 8 + span: 14 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 1 + span: 149 + span: 15 + span: 26 + } + location: { + path: 4 + path: 13 + path: 2 + path: 0 + path: 3 + span: 149 + span: 29 + span: 30 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + span: 161 + span: 8 + span: 36 + leading_comments: " Filters contains one or more filters using the syntax defined in the\n containerd filter package.\n\n The returned result will be those that match any of the provided\n filters. Expanded, images that match the following will be\n returned:\n\n\tfilters[0] or filters[1] or ... or filters[n-1] or filters[n]\n\n If filters is zero-length or nil, all items will be returned.\n" + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 4 + span: 161 + span: 8 + span: 16 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 5 + span: 161 + span: 17 + span: 23 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 1 + span: 161 + span: 24 + span: 31 + } + location: { + path: 4 + path: 13 + path: 2 + path: 1 + path: 3 + span: 161 + span: 34 + span: 35 + } + location: { + path: 4 + path: 14 + span: 164 + span: 0 + span: 166 + span: 1 + } + location: { + path: 4 + path: 14 + path: 1 + span: 164 + span: 8 + span: 29 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + span: 165 + span: 8 + span: 31 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 4 + span: 165 + span: 8 + span: 16 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 6 + span: 165 + span: 17 + span: 21 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 1 + span: 165 + span: 22 + span: 26 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 3 + span: 165 + span: 29 + span: 30 + } + location: { + path: 4 + path: 15 + span: 168 + span: 0 + span: 171 + span: 1 + } + location: { + path: 4 + path: 15 + path: 1 + span: 168 + span: 8 + span: 20 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + span: 169 + span: 8 + span: 31 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 5 + span: 169 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 1 + span: 169 + span: 15 + span: 26 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 3 + span: 169 + span: 29 + span: 30 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + span: 170 + span: 8 + span: 23 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 5 + span: 170 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 1 + span: 170 + span: 15 + span: 18 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 3 + span: 170 + span: 21 + span: 22 + } + location: { + path: 4 + path: 16 + span: 173 + span: 0 + span: 176 + span: 1 + } + location: { + path: 4 + path: 16 + path: 1 + span: 173 + span: 8 + span: 21 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + span: 174 + span: 8 + span: 23 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 5 + span: 174 + span: 8 + span: 13 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 1 + span: 174 + span: 14 + span: 18 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 3 + span: 174 + span: 21 + span: 22 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + span: 175 + span: 8 + span: 25 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 5 + span: 175 + span: 8 + span: 13 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 1 + span: 175 + span: 14 + span: 20 + } + location: { + path: 4 + path: 16 + path: 2 + path: 1 + path: 3 + span: 175 + span: 23 + span: 24 + } + location: { + path: 4 + path: 17 + span: 178 + span: 0 + span: 180 + span: 1 + } + location: { + path: 4 + path: 17 + path: 1 + span: 178 + span: 8 + span: 22 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + span: 179 + span: 8 + span: 31 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 5 + span: 179 + span: 8 + span: 14 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 1 + span: 179 + span: 15 + span: 26 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 3 + span: 179 + span: 29 + span: 30 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/streaming/v1/streaming.proto" + package: "containerd.services.streaming.v1" + dependency: "google/protobuf/any.proto" + message_type: { + name: "StreamInit" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + } + service: { + name: "Streaming" + method: { + name: "Stream" + input_type: ".google.protobuf.Any" + output_type: ".google.protobuf.Any" + client_streaming: true + server_streaming: true + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/streaming/v1;streaming" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 30 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 41 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 8 + span: 22 + span: 0 + span: 91 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 91 + } + location: { + path: 6 + path: 0 + span: 24 + span: 0 + span: 26 + span: 1 + } + location: { + path: 6 + path: 0 + path: 1 + span: 24 + span: 8 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 25 + span: 8 + span: 84 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 25 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 5 + span: 25 + span: 19 + span: 25 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 25 + span: 26 + span: 45 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 6 + span: 25 + span: 56 + span: 62 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 25 + span: 63 + span: 82 + } + location: { + path: 4 + path: 0 + span: 28 + span: 0 + span: 30 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 28 + span: 8 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 29 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 29 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 29 + span: 15 + span: 17 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 29 + span: 20 + span: 21 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/tasks/v1/tasks.proto" + package: "containerd.services.tasks.v1" + dependency: "google/protobuf/empty.proto" + dependency: "google/protobuf/any.proto" + dependency: "types/mount.proto" + dependency: "types/metrics.proto" + dependency: "types/descriptor.proto" + dependency: "types/task/task.proto" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "CreateTaskRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "rootfs" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Mount" + json_name: "rootfs" + } + field: { + name: "stdin" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "terminal" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "checkpoint" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor" + json_name: "checkpoint" + } + field: { + name: "options" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + field: { + name: "runtime_path" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "runtimePath" + } + } + message_type: { + name: "CreateTaskResponse" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "StartRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "StartResponse" + field: { + name: "pid" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + } + message_type: { + name: "DeleteTaskRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + } + message_type: { + name: "DeleteResponse" + field: { + name: "id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "id" + } + field: { + name: "pid" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "pid" + } + field: { + name: "exit_status" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + message_type: { + name: "DeleteProcessRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "GetRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "GetResponse" + field: { + name: "process" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.v1.types.Process" + json_name: "process" + } + } + message_type: { + name: "ListTasksRequest" + field: { + name: "filter" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "filter" + } + } + message_type: { + name: "ListTasksResponse" + field: { + name: "tasks" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.v1.types.Process" + json_name: "tasks" + } + } + message_type: { + name: "KillRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "signal" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "signal" + } + field: { + name: "all" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "all" + } + } + message_type: { + name: "ExecProcessRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "stdin" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdin" + } + field: { + name: "stdout" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stdout" + } + field: { + name: "stderr" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stderr" + } + field: { + name: "terminal" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "spec" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "spec" + } + field: { + name: "exec_id" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "ExecProcessResponse" + } + message_type: { + name: "ResizePtyRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "width" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "width" + } + field: { + name: "height" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "height" + } + } + message_type: { + name: "CloseIORequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + field: { + name: "stdin" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "stdin" + } + } + message_type: { + name: "PauseTaskRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + } + message_type: { + name: "ResumeTaskRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + } + message_type: { + name: "ListPidsRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + } + message_type: { + name: "ListPidsResponse" + field: { + name: "processes" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.v1.types.ProcessInfo" + json_name: "processes" + } + } + message_type: { + name: "CheckpointTaskRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "parent_checkpoint" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "parentCheckpoint" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "options" + } + } + message_type: { + name: "CheckpointTaskResponse" + field: { + name: "descriptors" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor" + json_name: "descriptors" + } + } + message_type: { + name: "UpdateTaskRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "resources" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "resources" + } + field: { + name: "annotations" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.services.tasks.v1.UpdateTaskRequest.AnnotationsEntry" + json_name: "annotations" + } + nested_type: { + name: "AnnotationsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "MetricsRequest" + field: { + name: "filters" + number: 1 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "filters" + } + } + message_type: { + name: "MetricsResponse" + field: { + name: "metrics" + number: 1 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Metric" + json_name: "metrics" + } + } + message_type: { + name: "WaitRequest" + field: { + name: "container_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "containerId" + } + field: { + name: "exec_id" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + message_type: { + name: "WaitResponse" + field: { + name: "exit_status" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "exitStatus" + } + field: { + name: "exited_at" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "exitedAt" + } + } + service: { + name: "Tasks" + method: { + name: "Create" + input_type: ".containerd.services.tasks.v1.CreateTaskRequest" + output_type: ".containerd.services.tasks.v1.CreateTaskResponse" + } + method: { + name: "Start" + input_type: ".containerd.services.tasks.v1.StartRequest" + output_type: ".containerd.services.tasks.v1.StartResponse" + } + method: { + name: "Delete" + input_type: ".containerd.services.tasks.v1.DeleteTaskRequest" + output_type: ".containerd.services.tasks.v1.DeleteResponse" + } + method: { + name: "DeleteProcess" + input_type: ".containerd.services.tasks.v1.DeleteProcessRequest" + output_type: ".containerd.services.tasks.v1.DeleteResponse" + } + method: { + name: "Get" + input_type: ".containerd.services.tasks.v1.GetRequest" + output_type: ".containerd.services.tasks.v1.GetResponse" + } + method: { + name: "List" + input_type: ".containerd.services.tasks.v1.ListTasksRequest" + output_type: ".containerd.services.tasks.v1.ListTasksResponse" + } + method: { + name: "Kill" + input_type: ".containerd.services.tasks.v1.KillRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Exec" + input_type: ".containerd.services.tasks.v1.ExecProcessRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "ResizePty" + input_type: ".containerd.services.tasks.v1.ResizePtyRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "CloseIO" + input_type: ".containerd.services.tasks.v1.CloseIORequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Pause" + input_type: ".containerd.services.tasks.v1.PauseTaskRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Resume" + input_type: ".containerd.services.tasks.v1.ResumeTaskRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "ListPids" + input_type: ".containerd.services.tasks.v1.ListPidsRequest" + output_type: ".containerd.services.tasks.v1.ListPidsResponse" + } + method: { + name: "Checkpoint" + input_type: ".containerd.services.tasks.v1.CheckpointTaskRequest" + output_type: ".containerd.services.tasks.v1.CheckpointTaskResponse" + } + method: { + name: "Update" + input_type: ".containerd.services.tasks.v1.UpdateTaskRequest" + output_type: ".google.protobuf.Empty" + } + method: { + name: "Metrics" + input_type: ".containerd.services.tasks.v1.MetricsRequest" + output_type: ".containerd.services.tasks.v1.MetricsResponse" + } + method: { + name: "Wait" + input_type: ".containerd.services.tasks.v1.WaitRequest" + output_type: ".containerd.services.tasks.v1.WaitResponse" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/tasks/v1;tasks" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 226 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 37 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 37 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 35 + } + location: { + path: 3 + path: 2 + span: 22 + span: 0 + span: 27 + } + location: { + path: 3 + path: 3 + span: 23 + span: 0 + span: 29 + } + location: { + path: 3 + path: 4 + span: 24 + span: 0 + span: 32 + } + location: { + path: 3 + path: 5 + span: 25 + span: 0 + span: 31 + } + location: { + path: 3 + path: 6 + span: 26 + span: 0 + span: 41 + } + location: { + path: 8 + span: 28 + span: 0 + span: 83 + } + location: { + path: 8 + path: 11 + span: 28 + span: 0 + span: 83 + } + location: { + path: 6 + path: 0 + span: 30 + span: 0 + span: 68 + span: 1 + } + location: { + path: 6 + path: 0 + path: 1 + span: 30 + span: 8 + span: 13 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 32 + span: 8 + span: 67 + leading_comments: " Create a task.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 32 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 32 + span: 19 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 32 + span: 47 + span: 65 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + span: 35 + span: 8 + span: 56 + leading_comments: " Start a process.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 1 + span: 35 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 2 + span: 35 + span: 18 + span: 30 + } + location: { + path: 6 + path: 0 + path: 2 + path: 1 + path: 3 + span: 35 + span: 41 + span: 54 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + span: 38 + span: 8 + span: 63 + leading_comments: " Delete a task and on disk state.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 1 + span: 38 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 2 + span: 38 + span: 19 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 2 + path: 3 + span: 38 + span: 47 + span: 61 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + span: 40 + span: 8 + span: 73 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 1 + span: 40 + span: 12 + span: 25 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 2 + span: 40 + span: 26 + span: 46 + } + location: { + path: 6 + path: 0 + path: 2 + path: 3 + path: 3 + span: 40 + span: 57 + span: 71 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + span: 42 + span: 8 + span: 50 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 1 + span: 42 + span: 12 + span: 15 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 2 + span: 42 + span: 16 + span: 26 + } + location: { + path: 6 + path: 0 + path: 2 + path: 4 + path: 3 + span: 42 + span: 37 + span: 48 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + span: 44 + span: 8 + span: 63 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 1 + span: 44 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 2 + span: 44 + span: 17 + span: 33 + } + location: { + path: 6 + path: 0 + path: 2 + path: 5 + path: 3 + span: 44 + span: 44 + span: 61 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + span: 47 + span: 8 + span: 62 + leading_comments: " Kill a task or process.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 1 + span: 47 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 2 + span: 47 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 6 + path: 3 + span: 47 + span: 39 + span: 60 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + span: 49 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 1 + span: 49 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 2 + span: 49 + span: 17 + span: 35 + } + location: { + path: 6 + path: 0 + path: 2 + path: 7 + path: 3 + span: 49 + span: 46 + span: 67 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + span: 51 + span: 8 + span: 72 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 1 + span: 51 + span: 12 + span: 21 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 2 + span: 51 + span: 22 + span: 38 + } + location: { + path: 6 + path: 0 + path: 2 + path: 8 + path: 3 + span: 51 + span: 49 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + span: 53 + span: 8 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 1 + span: 53 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 2 + span: 53 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 9 + path: 3 + span: 53 + span: 45 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + span: 55 + span: 8 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 1 + span: 55 + span: 12 + span: 17 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 2 + span: 55 + span: 18 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 10 + path: 3 + span: 55 + span: 45 + span: 66 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + span: 57 + span: 8 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 1 + span: 57 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 2 + span: 57 + span: 19 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 11 + path: 3 + span: 57 + span: 47 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + span: 59 + span: 8 + span: 65 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 1 + span: 59 + span: 12 + span: 20 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 2 + span: 59 + span: 21 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 12 + path: 3 + span: 59 + span: 47 + span: 63 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + span: 61 + span: 8 + span: 79 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 1 + span: 61 + span: 12 + span: 22 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 2 + span: 61 + span: 23 + span: 44 + } + location: { + path: 6 + path: 0 + path: 2 + path: 13 + path: 3 + span: 61 + span: 55 + span: 77 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + span: 63 + span: 8 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 1 + span: 63 + span: 12 + span: 18 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 2 + span: 63 + span: 19 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 14 + path: 3 + span: 63 + span: 47 + span: 68 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + span: 65 + span: 8 + span: 62 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 1 + span: 65 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 2 + span: 65 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 15 + path: 3 + span: 65 + span: 45 + span: 60 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + span: 67 + span: 8 + span: 53 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 1 + span: 67 + span: 12 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 2 + span: 67 + span: 17 + span: 28 + } + location: { + path: 6 + path: 0 + path: 2 + path: 16 + path: 3 + span: 67 + span: 39 + span: 51 + } + location: { + path: 4 + path: 0 + span: 70 + span: 0 + span: 91 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 70 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 71 + span: 8 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 71 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 71 + span: 15 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 71 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 79 + span: 8 + span: 51 + leading_comments: " RootFS provides the pre-chroot mounts to perform in the shim before\n executing the container task.\n\n These are for mounts that cannot be performed in the user namespace.\n Typically, these mounts should be resolved from snapshots specified on\n the container object.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 4 + span: 79 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 79 + span: 17 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 79 + span: 40 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 79 + span: 49 + span: 50 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 81 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 81 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 81 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 81 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 82 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 82 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 82 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 82 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 83 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 83 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 83 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 83 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 84 + span: 8 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 5 + span: 84 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 84 + span: 13 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 84 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 86 + span: 8 + span: 51 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 6 + span: 86 + span: 8 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 86 + span: 36 + span: 46 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 86 + span: 49 + span: 50 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + span: 88 + span: 8 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 6 + span: 88 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 1 + span: 88 + span: 28 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 3 + span: 88 + span: 38 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + span: 90 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 5 + span: 90 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 1 + span: 90 + span: 15 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 3 + span: 90 + span: 30 + span: 32 + } + location: { + path: 4 + path: 1 + span: 93 + span: 0 + span: 96 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 93 + span: 8 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 94 + span: 8 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 94 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 94 + span: 15 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 94 + span: 30 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 95 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 95 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 95 + span: 15 + span: 18 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 95 + span: 21 + span: 22 + } + location: { + path: 4 + path: 2 + span: 98 + span: 0 + span: 101 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 98 + span: 8 + span: 20 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 99 + span: 8 + span: 32 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 99 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 99 + span: 15 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 99 + span: 30 + span: 31 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 100 + span: 8 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 100 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 100 + span: 15 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 100 + span: 25 + span: 26 + } + location: { + path: 4 + path: 3 + span: 103 + span: 0 + span: 105 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 103 + span: 8 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 104 + span: 8 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 5 + span: 104 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 104 + span: 15 + span: 18 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 104 + span: 21 + span: 22 + } + location: { + path: 4 + path: 4 + span: 107 + span: 0 + span: 109 + span: 1 + } + location: { + path: 4 + path: 4 + path: 1 + span: 107 + span: 8 + span: 25 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + span: 108 + span: 8 + span: 32 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 5 + span: 108 + span: 8 + span: 14 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 1 + span: 108 + span: 15 + span: 27 + } + location: { + path: 4 + path: 4 + path: 2 + path: 0 + path: 3 + span: 108 + span: 30 + span: 31 + } + location: { + path: 4 + path: 5 + span: 111 + span: 0 + span: 116 + span: 1 + } + location: { + path: 4 + path: 5 + path: 1 + span: 111 + span: 8 + span: 22 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + span: 112 + span: 8 + span: 22 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 5 + span: 112 + span: 8 + span: 14 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 1 + span: 112 + span: 15 + span: 17 + } + location: { + path: 4 + path: 5 + path: 2 + path: 0 + path: 3 + span: 112 + span: 20 + span: 21 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + span: 113 + span: 8 + span: 23 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 5 + span: 113 + span: 8 + span: 14 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 1 + span: 113 + span: 15 + span: 18 + } + location: { + path: 4 + path: 5 + path: 2 + path: 1 + path: 3 + span: 113 + span: 21 + span: 22 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + span: 114 + span: 8 + span: 31 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 5 + span: 114 + span: 8 + span: 14 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 1 + span: 114 + span: 15 + span: 26 + } + location: { + path: 4 + path: 5 + path: 2 + path: 2 + path: 3 + span: 114 + span: 29 + span: 30 + } + location: { + path: 4 + path: 5 + path: 2 + path: 3 + span: 115 + span: 8 + span: 48 + } + location: { + path: 4 + path: 5 + path: 2 + path: 3 + path: 6 + span: 115 + span: 8 + span: 33 + } + location: { + path: 4 + path: 5 + path: 2 + path: 3 + path: 1 + span: 115 + span: 34 + span: 43 + } + location: { + path: 4 + path: 5 + path: 2 + path: 3 + path: 3 + span: 115 + span: 46 + span: 47 + } + location: { + path: 4 + path: 6 + span: 118 + span: 0 + span: 121 + span: 1 + } + location: { + path: 4 + path: 6 + path: 1 + span: 118 + span: 8 + span: 28 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + span: 119 + span: 8 + span: 32 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 5 + span: 119 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 1 + span: 119 + span: 15 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 0 + path: 3 + span: 119 + span: 30 + span: 31 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + span: 120 + span: 8 + span: 27 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 5 + span: 120 + span: 8 + span: 14 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 1 + span: 120 + span: 15 + span: 22 + } + location: { + path: 4 + path: 6 + path: 2 + path: 1 + path: 3 + span: 120 + span: 25 + span: 26 + } + location: { + path: 4 + path: 7 + span: 123 + span: 0 + span: 126 + span: 1 + } + location: { + path: 4 + path: 7 + path: 1 + span: 123 + span: 8 + span: 18 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + span: 124 + span: 8 + span: 32 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 5 + span: 124 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 1 + span: 124 + span: 15 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 0 + path: 3 + span: 124 + span: 30 + span: 31 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + span: 125 + span: 8 + span: 27 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 5 + span: 125 + span: 8 + span: 14 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 1 + span: 125 + span: 15 + span: 22 + } + location: { + path: 4 + path: 7 + path: 2 + path: 1 + path: 3 + span: 125 + span: 25 + span: 26 + } + location: { + path: 4 + path: 8 + span: 128 + span: 0 + span: 130 + span: 1 + } + location: { + path: 4 + path: 8 + path: 1 + span: 128 + span: 8 + span: 19 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + span: 129 + span: 8 + span: 48 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 6 + span: 129 + span: 8 + span: 35 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 1 + span: 129 + span: 36 + span: 43 + } + location: { + path: 4 + path: 8 + path: 2 + path: 0 + path: 3 + span: 129 + span: 46 + span: 47 + } + location: { + path: 4 + path: 9 + span: 132 + span: 0 + span: 134 + span: 1 + } + location: { + path: 4 + path: 9 + path: 1 + span: 132 + span: 8 + span: 24 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + span: 133 + span: 8 + span: 26 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 5 + span: 133 + span: 8 + span: 14 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 1 + span: 133 + span: 15 + span: 21 + } + location: { + path: 4 + path: 9 + path: 2 + path: 0 + path: 3 + span: 133 + span: 24 + span: 25 + } + location: { + path: 4 + path: 10 + span: 136 + span: 0 + span: 138 + span: 1 + } + location: { + path: 4 + path: 10 + path: 1 + span: 136 + span: 8 + span: 25 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + span: 137 + span: 8 + span: 55 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 4 + span: 137 + span: 8 + span: 16 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 6 + span: 137 + span: 17 + span: 44 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 1 + span: 137 + span: 45 + span: 50 + } + location: { + path: 4 + path: 10 + path: 2 + path: 0 + path: 3 + span: 137 + span: 53 + span: 54 + } + location: { + path: 4 + path: 11 + span: 140 + span: 0 + span: 145 + span: 1 + } + location: { + path: 4 + path: 11 + path: 1 + span: 140 + span: 8 + span: 19 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + span: 141 + span: 8 + span: 32 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 5 + span: 141 + span: 8 + span: 14 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 1 + span: 141 + span: 15 + span: 27 + } + location: { + path: 4 + path: 11 + path: 2 + path: 0 + path: 3 + span: 141 + span: 30 + span: 31 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + span: 142 + span: 8 + span: 27 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 5 + span: 142 + span: 8 + span: 14 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 1 + span: 142 + span: 15 + span: 22 + } + location: { + path: 4 + path: 11 + path: 2 + path: 1 + path: 3 + span: 142 + span: 25 + span: 26 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + span: 143 + span: 8 + span: 26 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 5 + span: 143 + span: 8 + span: 14 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 1 + span: 143 + span: 15 + span: 21 + } + location: { + path: 4 + path: 11 + path: 2 + path: 2 + path: 3 + span: 143 + span: 24 + span: 25 + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + span: 144 + span: 8 + span: 21 + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + path: 5 + span: 144 + span: 8 + span: 12 + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + path: 1 + span: 144 + span: 13 + span: 16 + } + location: { + path: 4 + path: 11 + path: 2 + path: 3 + path: 3 + span: 144 + span: 19 + span: 20 + } + location: { + path: 4 + path: 12 + span: 147 + span: 0 + span: 159 + span: 1 + } + location: { + path: 4 + path: 12 + path: 1 + span: 147 + span: 8 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + span: 148 + span: 8 + span: 32 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 5 + span: 148 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 1 + span: 148 + span: 15 + span: 27 + } + location: { + path: 4 + path: 12 + path: 2 + path: 0 + path: 3 + span: 148 + span: 30 + span: 31 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + span: 149 + span: 8 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 5 + span: 149 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 1 + span: 149 + span: 15 + span: 20 + } + location: { + path: 4 + path: 12 + path: 2 + path: 1 + path: 3 + span: 149 + span: 23 + span: 24 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + span: 150 + span: 8 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 5 + span: 150 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 1 + span: 150 + span: 15 + span: 21 + } + location: { + path: 4 + path: 12 + path: 2 + path: 2 + path: 3 + span: 150 + span: 24 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + span: 151 + span: 8 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 5 + span: 151 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 1 + span: 151 + span: 15 + span: 21 + } + location: { + path: 4 + path: 12 + path: 2 + path: 3 + path: 3 + span: 151 + span: 24 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + span: 152 + span: 8 + span: 26 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 5 + span: 152 + span: 8 + span: 12 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 1 + span: 152 + span: 13 + span: 21 + } + location: { + path: 4 + path: 12 + path: 2 + path: 4 + path: 3 + span: 152 + span: 24 + span: 25 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + span: 156 + span: 8 + span: 37 + leading_comments: " Spec for starting a process in the target container.\n\n For runc, this is a process spec, for example.\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 6 + span: 156 + span: 8 + span: 27 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 1 + span: 156 + span: 28 + span: 32 + } + location: { + path: 4 + path: 12 + path: 2 + path: 5 + path: 3 + span: 156 + span: 35 + span: 36 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + span: 158 + span: 8 + span: 27 + leading_comments: " id of the exec process\n" + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 5 + span: 158 + span: 8 + span: 14 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 1 + span: 158 + span: 15 + span: 22 + } + location: { + path: 4 + path: 12 + path: 2 + path: 6 + path: 3 + span: 158 + span: 25 + span: 26 + } + location: { + path: 4 + path: 13 + span: 161 + span: 0 + span: 162 + span: 1 + } + location: { + path: 4 + path: 13 + path: 1 + span: 161 + span: 8 + span: 27 + } + location: { + path: 4 + path: 14 + span: 164 + span: 0 + span: 169 + span: 1 + } + location: { + path: 4 + path: 14 + path: 1 + span: 164 + span: 8 + span: 24 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + span: 165 + span: 8 + span: 32 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 5 + span: 165 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 1 + span: 165 + span: 15 + span: 27 + } + location: { + path: 4 + path: 14 + path: 2 + path: 0 + path: 3 + span: 165 + span: 30 + span: 31 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + span: 166 + span: 8 + span: 27 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 5 + span: 166 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 1 + span: 166 + span: 15 + span: 22 + } + location: { + path: 4 + path: 14 + path: 2 + path: 1 + path: 3 + span: 166 + span: 25 + span: 26 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + span: 167 + span: 8 + span: 25 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 5 + span: 167 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 1 + span: 167 + span: 15 + span: 20 + } + location: { + path: 4 + path: 14 + path: 2 + path: 2 + path: 3 + span: 167 + span: 23 + span: 24 + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + span: 168 + span: 8 + span: 26 + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + path: 5 + span: 168 + span: 8 + span: 14 + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + path: 1 + span: 168 + span: 15 + span: 21 + } + location: { + path: 4 + path: 14 + path: 2 + path: 3 + path: 3 + span: 168 + span: 24 + span: 25 + } + location: { + path: 4 + path: 15 + span: 171 + span: 0 + span: 175 + span: 1 + } + location: { + path: 4 + path: 15 + path: 1 + span: 171 + span: 8 + span: 22 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + span: 172 + span: 8 + span: 32 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 5 + span: 172 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 1 + span: 172 + span: 15 + span: 27 + } + location: { + path: 4 + path: 15 + path: 2 + path: 0 + path: 3 + span: 172 + span: 30 + span: 31 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + span: 173 + span: 8 + span: 27 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 5 + span: 173 + span: 8 + span: 14 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 1 + span: 173 + span: 15 + span: 22 + } + location: { + path: 4 + path: 15 + path: 2 + path: 1 + path: 3 + span: 173 + span: 25 + span: 26 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + span: 174 + span: 8 + span: 23 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 5 + span: 174 + span: 8 + span: 12 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 1 + span: 174 + span: 13 + span: 18 + } + location: { + path: 4 + path: 15 + path: 2 + path: 2 + path: 3 + span: 174 + span: 21 + span: 22 + } + location: { + path: 4 + path: 16 + span: 177 + span: 0 + span: 179 + span: 1 + } + location: { + path: 4 + path: 16 + path: 1 + span: 177 + span: 8 + span: 24 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + span: 178 + span: 8 + span: 32 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 5 + span: 178 + span: 8 + span: 14 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 1 + span: 178 + span: 15 + span: 27 + } + location: { + path: 4 + path: 16 + path: 2 + path: 0 + path: 3 + span: 178 + span: 30 + span: 31 + } + location: { + path: 4 + path: 17 + span: 181 + span: 0 + span: 183 + span: 1 + } + location: { + path: 4 + path: 17 + path: 1 + span: 181 + span: 8 + span: 25 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + span: 182 + span: 8 + span: 32 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 5 + span: 182 + span: 8 + span: 14 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 1 + span: 182 + span: 15 + span: 27 + } + location: { + path: 4 + path: 17 + path: 2 + path: 0 + path: 3 + span: 182 + span: 30 + span: 31 + } + location: { + path: 4 + path: 18 + span: 185 + span: 0 + span: 187 + span: 1 + } + location: { + path: 4 + path: 18 + path: 1 + span: 185 + span: 8 + span: 23 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + span: 186 + span: 8 + span: 32 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 5 + span: 186 + span: 8 + span: 14 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 1 + span: 186 + span: 15 + span: 27 + } + location: { + path: 4 + path: 18 + path: 2 + path: 0 + path: 3 + span: 186 + span: 30 + span: 31 + } + location: { + path: 4 + path: 19 + span: 189 + span: 0 + span: 192 + span: 1 + } + location: { + path: 4 + path: 19 + path: 1 + span: 189 + span: 8 + span: 24 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + span: 191 + span: 8 + span: 63 + leading_comments: " Processes includes the process ID and additional process information\n" + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 4 + span: 191 + span: 8 + span: 16 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 6 + span: 191 + span: 17 + span: 48 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 1 + span: 191 + span: 49 + span: 58 + } + location: { + path: 4 + path: 19 + path: 2 + path: 0 + path: 3 + span: 191 + span: 61 + span: 62 + } + location: { + path: 4 + path: 20 + span: 194 + span: 0 + span: 198 + span: 1 + } + location: { + path: 4 + path: 20 + path: 1 + span: 194 + span: 8 + span: 29 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + span: 195 + span: 8 + span: 32 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 5 + span: 195 + span: 8 + span: 14 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 1 + span: 195 + span: 15 + span: 27 + } + location: { + path: 4 + path: 20 + path: 2 + path: 0 + path: 3 + span: 195 + span: 30 + span: 31 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + span: 196 + span: 8 + span: 37 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 5 + span: 196 + span: 8 + span: 14 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 1 + span: 196 + span: 15 + span: 32 + } + location: { + path: 4 + path: 20 + path: 2 + path: 1 + path: 3 + span: 196 + span: 35 + span: 36 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + span: 197 + span: 8 + span: 40 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 6 + span: 197 + span: 8 + span: 27 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 1 + span: 197 + span: 28 + span: 35 + } + location: { + path: 4 + path: 20 + path: 2 + path: 2 + path: 3 + span: 197 + span: 38 + span: 39 + } + location: { + path: 4 + path: 21 + span: 200 + span: 0 + span: 202 + span: 1 + } + location: { + path: 4 + path: 21 + path: 1 + span: 200 + span: 8 + span: 30 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + span: 201 + span: 8 + span: 61 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 4 + span: 201 + span: 8 + span: 16 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 6 + span: 201 + span: 17 + span: 44 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 1 + span: 201 + span: 45 + span: 56 + } + location: { + path: 4 + path: 21 + path: 2 + path: 0 + path: 3 + span: 201 + span: 59 + span: 60 + } + location: { + path: 4 + path: 22 + span: 204 + span: 0 + span: 208 + span: 1 + } + location: { + path: 4 + path: 22 + path: 1 + span: 204 + span: 8 + span: 25 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + span: 205 + span: 8 + span: 32 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 5 + span: 205 + span: 8 + span: 14 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 1 + span: 205 + span: 15 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 0 + path: 3 + span: 205 + span: 30 + span: 31 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + span: 206 + span: 8 + span: 42 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 6 + span: 206 + span: 8 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 1 + span: 206 + span: 28 + span: 37 + } + location: { + path: 4 + path: 22 + path: 2 + path: 1 + path: 3 + span: 206 + span: 40 + span: 41 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + span: 207 + span: 8 + span: 44 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 6 + span: 207 + span: 8 + span: 27 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 1 + span: 207 + span: 28 + span: 39 + } + location: { + path: 4 + path: 22 + path: 2 + path: 2 + path: 3 + span: 207 + span: 42 + span: 43 + } + location: { + path: 4 + path: 23 + span: 210 + span: 0 + span: 212 + span: 1 + } + location: { + path: 4 + path: 23 + path: 1 + span: 210 + span: 8 + span: 22 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + span: 211 + span: 8 + span: 36 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 4 + span: 211 + span: 8 + span: 16 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 5 + span: 211 + span: 17 + span: 23 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 1 + span: 211 + span: 24 + span: 31 + } + location: { + path: 4 + path: 23 + path: 2 + path: 0 + path: 3 + span: 211 + span: 34 + span: 35 + } + location: { + path: 4 + path: 24 + span: 214 + span: 0 + span: 216 + span: 1 + } + location: { + path: 4 + path: 24 + path: 1 + span: 214 + span: 8 + span: 23 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + span: 215 + span: 8 + span: 42 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 4 + span: 215 + span: 8 + span: 16 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 6 + span: 215 + span: 17 + span: 29 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 1 + span: 215 + span: 30 + span: 37 + } + location: { + path: 4 + path: 24 + path: 2 + path: 0 + path: 3 + span: 215 + span: 40 + span: 41 + } + location: { + path: 4 + path: 25 + span: 218 + span: 0 + span: 221 + span: 1 + } + location: { + path: 4 + path: 25 + path: 1 + span: 218 + span: 8 + span: 19 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + span: 219 + span: 8 + span: 32 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 5 + span: 219 + span: 8 + span: 14 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 1 + span: 219 + span: 15 + span: 27 + } + location: { + path: 4 + path: 25 + path: 2 + path: 0 + path: 3 + span: 219 + span: 30 + span: 31 + } + location: { + path: 4 + path: 25 + path: 2 + path: 1 + span: 220 + span: 8 + span: 27 + } + location: { + path: 4 + path: 25 + path: 2 + path: 1 + path: 5 + span: 220 + span: 8 + span: 14 + } + location: { + path: 4 + path: 25 + path: 2 + path: 1 + path: 1 + span: 220 + span: 15 + span: 22 + } + location: { + path: 4 + path: 25 + path: 2 + path: 1 + path: 3 + span: 220 + span: 25 + span: 26 + } + location: { + path: 4 + path: 26 + span: 223 + span: 0 + span: 226 + span: 1 + } + location: { + path: 4 + path: 26 + path: 1 + span: 223 + span: 8 + span: 20 + } + location: { + path: 4 + path: 26 + path: 2 + path: 0 + span: 224 + span: 8 + span: 31 + } + location: { + path: 4 + path: 26 + path: 2 + path: 0 + path: 5 + span: 224 + span: 8 + span: 14 + } + location: { + path: 4 + path: 26 + path: 2 + path: 0 + path: 1 + span: 224 + span: 15 + span: 26 + } + location: { + path: 4 + path: 26 + path: 2 + path: 0 + path: 3 + span: 224 + span: 29 + span: 30 + } + location: { + path: 4 + path: 26 + path: 2 + path: 1 + span: 225 + span: 8 + span: 48 + } + location: { + path: 4 + path: 26 + path: 2 + path: 1 + path: 6 + span: 225 + span: 8 + span: 33 + } + location: { + path: 4 + path: 26 + path: 2 + path: 1 + path: 1 + span: 225 + span: 34 + span: 43 + } + location: { + path: 4 + path: 26 + path: 2 + path: 1 + path: 3 + span: 225 + span: 46 + span: 47 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/transfer/v1/transfer.proto" + package: "containerd.services.transfer.v1" + dependency: "google/protobuf/any.proto" + dependency: "google/protobuf/empty.proto" + message_type: { + name: "TransferRequest" + field: { + name: "source" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "source" + } + field: { + name: "destination" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Any" + json_name: "destination" + } + field: { + name: "options" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.services.transfer.v1.TransferOptions" + json_name: "options" + } + } + message_type: { + name: "TransferOptions" + field: { + name: "progress_stream" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "progressStream" + } + } + service: { + name: "Transfer" + method: { + name: "Transfer" + input_type: ".containerd.services.transfer.v1.TransferRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/transfer/v1;transfer" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 38 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 40 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 35 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 37 + } + location: { + path: 8 + span: 23 + span: 0 + span: 89 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 89 + } + location: { + path: 6 + path: 0 + span: 25 + span: 0 + span: 27 + span: 1 + } + location: { + path: 6 + path: 0 + path: 1 + span: 25 + span: 8 + span: 16 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 26 + span: 8 + span: 70 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 26 + span: 12 + span: 20 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 26 + span: 21 + span: 36 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 26 + span: 47 + span: 68 + } + location: { + path: 4 + path: 0 + span: 29 + span: 0 + span: 33 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 29 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 30 + span: 8 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 6 + span: 30 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 30 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 30 + span: 37 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 31 + span: 8 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 31 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 31 + span: 28 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 31 + span: 42 + span: 43 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 32 + span: 8 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 32 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 32 + span: 24 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 32 + span: 34 + span: 35 + } + location: { + path: 4 + path: 1 + span: 35 + span: 0 + span: 38 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 35 + span: 8 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 36 + span: 8 + span: 35 + trailing_comments: " Progress min interval\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 36 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 36 + span: 15 + span: 30 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 36 + span: 33 + span: 34 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/ttrpc/events/v1/events.proto" + package: "containerd.services.events.ttrpc.v1" + dependency: "types/event.proto" + dependency: "google/protobuf/empty.proto" + message_type: { + name: "ForwardRequest" + field: { + name: "envelope" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Envelope" + json_name: "envelope" + } + } + service: { + name: "Events" + method: { + name: "Forward" + input_type: ".containerd.services.events.ttrpc.v1.ForwardRequest" + output_type: ".google.protobuf.Empty" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/ttrpc/events/v1;events" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 36 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 44 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 27 + } + location: { + path: 3 + path: 1 + span: 21 + span: 0 + span: 37 + } + location: { + path: 8 + span: 23 + span: 0 + span: 91 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 91 + } + location: { + path: 6 + path: 0 + span: 25 + span: 0 + span: 32 + span: 1 + } + location: { + path: 6 + path: 0 + path: 1 + span: 25 + span: 8 + span: 14 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 31 + span: 8 + span: 68 + leading_comments: " Forward sends an event that has already been packaged into an envelope\n with a timestamp and namespace.\n\n This is useful if earlier timestamping is required or when forwarding on\n behalf of another component, namespace or publisher.\n" + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 31 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 31 + span: 20 + span: 34 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 31 + span: 45 + span: 66 + } + location: { + path: 4 + path: 0 + span: 34 + span: 0 + span: 36 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 34 + span: 8 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 35 + span: 8 + span: 47 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 6 + span: 35 + span: 8 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 35 + span: 34 + span: 42 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 35 + span: 45 + span: 46 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "services/version/v1/version.proto" + package: "containerd.services.version.v1" + dependency: "google/protobuf/empty.proto" + message_type: { + name: "VersionResponse" + field: { + name: "version" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "version" + } + field: { + name: "revision" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "revision" + } + } + service: { + name: "Version" + method: { + name: "Version" + input_type: ".google.protobuf.Empty" + output_type: ".containerd.services.version.v1.VersionResponse" + } + } + options: { + go_package: "github.com/containerd/containerd/api/services/version/v1;version" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 32 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 39 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 37 + } + location: { + path: 8 + span: 23 + span: 0 + span: 87 + } + location: { + path: 8 + path: 11 + span: 23 + span: 0 + span: 87 + leading_comments: " TODO(stevvooe): Should version service actually be versioned?\n" + } + location: { + path: 6 + path: 0 + span: 25 + span: 0 + span: 27 + span: 1 + } + location: { + path: 6 + path: 0 + path: 1 + span: 25 + span: 8 + span: 15 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + span: 26 + span: 8 + span: 69 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 1 + span: 26 + span: 12 + span: 19 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 2 + span: 26 + span: 20 + span: 41 + } + location: { + path: 6 + path: 0 + path: 2 + path: 0 + path: 3 + span: 26 + span: 52 + span: 67 + } + location: { + path: 4 + path: 0 + span: 29 + span: 0 + span: 32 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 29 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 30 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 30 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 30 + span: 15 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 30 + span: 25 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 31 + span: 8 + span: 28 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 31 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 31 + span: 15 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 31 + span: 26 + span: 27 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/runc/options/oci.proto" + package: "containerd.runc.v1" + message_type: { + name: "Options" + field: { + name: "no_pivot_root" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "noPivotRoot" + } + field: { + name: "no_new_keyring" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "noNewKeyring" + } + field: { + name: "shim_cgroup" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "shimCgroup" + } + field: { + name: "io_uid" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "ioUid" + } + field: { + name: "io_gid" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "ioGid" + } + field: { + name: "binary_name" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "binaryName" + } + field: { + name: "root" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "root" + } + field: { + name: "systemd_cgroup" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "systemdCgroup" + } + field: { + name: "criu_image_path" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "criuImagePath" + } + field: { + name: "criu_work_path" + number: 11 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "criuWorkPath" + } + field: { + name: "task_api_address" + number: 12 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "taskApiAddress" + } + field: { + name: "task_api_version" + number: 13 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "taskApiVersion" + } + reserved_range: { + start: 8 + end: 9 + } + } + message_type: { + name: "CheckpointOptions" + field: { + name: "exit" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "exit" + } + field: { + name: "open_tcp" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "openTcp" + } + field: { + name: "external_unix_sockets" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "externalUnixSockets" + } + field: { + name: "terminal" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field: { + name: "file_locks" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "fileLocks" + } + field: { + name: "empty_namespaces" + number: 6 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "emptyNamespaces" + } + field: { + name: "cgroups_mode" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "cgroupsMode" + } + field: { + name: "image_path" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "imagePath" + } + field: { + name: "work_path" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "workPath" + } + } + message_type: { + name: "ProcessDetails" + field: { + name: "exec_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + options: { + go_package: "github.com/containerd/containerd/api/types/runc/options;options" + } + source_code_info: { + location: { + span: 0 + span: 0 + span: 62 + span: 1 + } + location: { + path: 12 + span: 0 + span: 0 + span: 18 + } + location: { + path: 2 + span: 2 + span: 0 + span: 27 + } + location: { + path: 8 + span: 4 + span: 0 + span: 86 + } + location: { + path: 8 + path: 11 + span: 4 + span: 0 + span: 86 + } + location: { + path: 4 + path: 0 + span: 6 + span: 0 + span: 36 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 6 + span: 8 + span: 15 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 8 + span: 8 + span: 31 + leading_comments: " disable pivot root when creating a container\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 8 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 8 + span: 13 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 8 + span: 29 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 10 + span: 8 + span: 32 + leading_comments: " create a new keyring for the container\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 10 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 10 + span: 13 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 10 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 12 + span: 8 + span: 31 + leading_comments: " place the shim in a cgroup\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 12 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 12 + span: 15 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 12 + span: 29 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 14 + span: 8 + span: 26 + leading_comments: " set the I/O's pipes uid\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 14 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 14 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 14 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 16 + span: 8 + span: 26 + leading_comments: " set the I/O's pipes gid\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 16 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 16 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 16 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 18 + span: 8 + span: 31 + leading_comments: " binary name of the runc binary\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 5 + span: 18 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 18 + span: 15 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 18 + span: 29 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 20 + span: 8 + span: 24 + leading_comments: " runc root directory\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 5 + span: 20 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 20 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 20 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 9 + span: 24 + span: 8 + span: 19 + leading_comments: " criu binary path.\n\n Removed in containerd v2.0: string criu_path = 8;\n" + } + location: { + path: 4 + path: 0 + path: 9 + path: 0 + span: 24 + span: 17 + span: 18 + } + location: { + path: 4 + path: 0 + path: 9 + path: 0 + path: 1 + span: 24 + span: 17 + span: 18 + } + location: { + path: 4 + path: 0 + path: 9 + path: 0 + path: 2 + span: 24 + span: 17 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + span: 26 + span: 8 + span: 32 + leading_comments: " enable systemd cgroups\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 5 + span: 26 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 1 + span: 26 + span: 13 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 7 + path: 3 + span: 26 + span: 30 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + span: 28 + span: 8 + span: 36 + leading_comments: " criu image path\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 5 + span: 28 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 1 + span: 28 + span: 15 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 8 + path: 3 + span: 28 + span: 33 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + span: 30 + span: 8 + span: 35 + leading_comments: " criu work path\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 5 + span: 30 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 1 + span: 30 + span: 15 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 9 + path: 3 + span: 30 + span: 32 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 10 + span: 33 + span: 8 + span: 37 + leading_comments: " task api address, can be a unix domain socket, or vsock address.\n it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 10 + path: 5 + span: 33 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 10 + path: 1 + span: 33 + span: 15 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 10 + path: 3 + span: 33 + span: 34 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 11 + span: 35 + span: 8 + span: 37 + leading_comments: " task api version, currently supported value is 2 and 3.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 11 + path: 5 + span: 35 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 11 + path: 1 + span: 35 + span: 15 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 11 + path: 3 + span: 35 + span: 34 + span: 36 + } + location: { + path: 4 + path: 1 + span: 38 + span: 0 + span: 57 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 38 + span: 8 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 40 + span: 8 + span: 22 + leading_comments: " exit the container after a checkpoint\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 40 + span: 8 + span: 12 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 40 + span: 13 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 40 + span: 20 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 42 + span: 8 + span: 26 + leading_comments: " checkpoint open tcp connections\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 42 + span: 8 + span: 12 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 42 + span: 13 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 42 + span: 24 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + span: 44 + span: 8 + span: 39 + leading_comments: " checkpoint external unix sockets\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 5 + span: 44 + span: 8 + span: 12 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 44 + span: 13 + span: 34 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 3 + span: 44 + span: 37 + span: 38 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + span: 46 + span: 8 + span: 26 + leading_comments: " checkpoint terminals (ptys)\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 5 + span: 46 + span: 8 + span: 12 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 1 + span: 46 + span: 13 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 3 + span: 46 + span: 24 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + span: 48 + span: 8 + span: 28 + leading_comments: " allow checkpointing of file locks\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 5 + span: 48 + span: 8 + span: 12 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 1 + span: 48 + span: 13 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 3 + span: 48 + span: 26 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + span: 50 + span: 8 + span: 45 + leading_comments: " restore provided namespaces as empty namespaces\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 4 + span: 50 + span: 8 + span: 16 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 5 + span: 50 + span: 17 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 1 + span: 50 + span: 24 + span: 40 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 3 + span: 50 + span: 43 + span: 44 + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + span: 52 + span: 8 + span: 32 + leading_comments: " set the cgroups mode, soft, full, strict\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + path: 5 + span: 52 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + path: 1 + span: 52 + span: 15 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 6 + path: 3 + span: 52 + span: 30 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + span: 54 + span: 8 + span: 30 + leading_comments: " checkpoint image path\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + path: 5 + span: 54 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + path: 1 + span: 54 + span: 15 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 7 + path: 3 + span: 54 + span: 28 + span: 29 + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + span: 56 + span: 8 + span: 29 + leading_comments: " checkpoint work path\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + path: 5 + span: 56 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + path: 1 + span: 56 + span: 15 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 8 + path: 3 + span: 56 + span: 27 + span: 28 + } + location: { + path: 4 + path: 2 + span: 59 + span: 0 + span: 62 + span: 1 + } + location: { + path: 4 + path: 2 + path: 1 + span: 59 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 61 + span: 8 + span: 27 + leading_comments: " exec process id if the process is managed by a shim\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 61 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 61 + span: 15 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 61 + span: 25 + span: 26 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/runtimeoptions/v1/api.proto" + package: "runtimeoptions.v1" + message_type: { + name: "Options" + field: { + name: "type_url" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "typeUrl" + } + field: { + name: "config_path" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "configPath" + } + field: { + name: "config_body" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BYTES + json_name: "configBody" + } + } + options: { + go_package: "github.com/containerd/containerd/api/types/runtimeoptions/v1;runtimeoptions" + } + source_code_info: { + location: { + span: 1 + span: 0 + span: 16 + span: 1 + } + location: { + path: 12 + span: 1 + span: 0 + span: 18 + leading_comments: " To regenerate api.pb.go run `make protos`\n" + } + location: { + path: 2 + span: 3 + span: 0 + span: 26 + } + location: { + path: 8 + span: 5 + span: 0 + span: 98 + } + location: { + path: 8 + path: 11 + span: 5 + span: 0 + span: 98 + } + location: { + path: 4 + path: 0 + span: 7 + span: 0 + span: 16 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 7 + span: 8 + span: 15 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 9 + span: 8 + span: 28 + leading_comments: " TypeUrl specifies the type of the content inside the config file.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 9 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 9 + span: 15 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 9 + span: 26 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 12 + span: 8 + span: 31 + leading_comments: " ConfigPath specifies the filesystem location of the config file\n used by the runtime.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 12 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 12 + span: 15 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 12 + span: 29 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 15 + span: 8 + span: 30 + leading_comments: " Blob specifies an in-memory TOML blob passed from containerd's configuration section\n for this runtime. This will be used if config_path is not specified.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 15 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 15 + span: 14 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 15 + span: 28 + span: 29 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/transfer/imagestore.proto" + package: "containerd.types.transfer" + dependency: "types/platform.proto" + message_type: { + name: "ImageStore" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "labels" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.transfer.ImageStore.LabelsEntry" + json_name: "labels" + } + field: { + name: "platforms" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Platform" + json_name: "platforms" + } + field: { + name: "all_metadata" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "allMetadata" + } + field: { + name: "manifest_limit" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "manifestLimit" + } + field: { + name: "extra_references" + number: 6 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.transfer.ImageReference" + json_name: "extraReferences" + } + field: { + name: "unpacks" + number: 10 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.transfer.UnpackConfiguration" + json_name: "unpacks" + } + nested_type: { + name: "LabelsEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "UnpackConfiguration" + field: { + name: "platform" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Platform" + json_name: "platform" + } + field: { + name: "snapshotter" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "snapshotter" + } + } + message_type: { + name: "ImageReference" + field: { + name: "name" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "is_prefix" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "isPrefix" + } + field: { + name: "allow_overwrite" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "allowOverwrite" + } + field: { + name: "add_digest" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "addDigest" + } + field: { + name: "skip_named_digest" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "skipNamedDigest" + } + } + options: { + go_package: "github.com/containerd/containerd/api/types/transfer" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 81 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 34 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 30 + } + location: { + path: 8 + span: 22 + span: 0 + span: 74 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 74 + } + location: { + path: 4 + path: 0 + span: 24 + span: 0 + span: 42 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 24 + span: 8 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 25 + span: 8 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 25 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 25 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 25 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 26 + span: 8 + span: 39 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 26 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 26 + span: 28 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 26 + span: 37 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 30 + span: 8 + span: 46 + leading_detached_comments: " Content filters\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 4 + span: 30 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 6 + span: 30 + span: 17 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 30 + span: 32 + span: 41 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 30 + span: 44 + span: 45 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 31 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 31 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 31 + span: 13 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 31 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 32 + span: 8 + span: 34 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 32 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 32 + span: 15 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 32 + span: 32 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 37 + span: 8 + span: 53 + leading_comments: " extra_references are used to set image names on imports of sub-images from the index\n" + leading_detached_comments: " Import naming\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 4 + span: 37 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 6 + span: 37 + span: 17 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 37 + span: 32 + span: 48 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 37 + span: 51 + span: 52 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + span: 41 + span: 8 + span: 50 + leading_detached_comments: " Unpack Configuration, multiple allowed\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 4 + span: 41 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 6 + span: 41 + span: 17 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 1 + span: 41 + span: 37 + span: 44 + } + location: { + path: 4 + path: 0 + path: 2 + path: 6 + path: 3 + span: 41 + span: 47 + span: 49 + } + location: { + path: 4 + path: 1 + span: 44 + span: 0 + span: 51 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 44 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 47 + span: 8 + span: 36 + leading_comments: " platform is the platform to unpack for, used for resolving manifest and snapshotter\n if not provided\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 6 + span: 47 + span: 8 + span: 22 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 47 + span: 23 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 47 + span: 34 + span: 35 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 50 + span: 8 + span: 31 + leading_comments: " snapshotter to unpack to, if not provided default for platform shoudl be used\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 50 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 50 + span: 15 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 50 + span: 29 + span: 30 + } + location: { + path: 4 + path: 2 + span: 54 + span: 0 + span: 81 + span: 1 + leading_comments: " ImageReference is used to create or find a reference for an image\n" + } + location: { + path: 4 + path: 2 + path: 1 + span: 54 + span: 8 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 55 + span: 8 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 55 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 55 + span: 15 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 55 + span: 22 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 61 + span: 8 + span: 27 + leading_comments: " is_prefix determines whether the Name should be considered\n a prefix (without tag or digest).\n For lookup, this may allow matching multiple tags.\n For store, this must have a tag or digest added.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 61 + span: 8 + span: 12 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 61 + span: 13 + span: 22 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 61 + span: 25 + span: 26 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 66 + span: 8 + span: 33 + leading_comments: " allow_overwrite allows overwriting or ignoring the name if\n another reference is provided (such as through an annotation).\n Only used if IsPrefix is true.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 5 + span: 66 + span: 8 + span: 12 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 66 + span: 13 + span: 28 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 66 + span: 31 + span: 32 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + span: 72 + span: 8 + span: 28 + leading_comments: " add_digest adds the manifest digest to the reference.\n For lookup, this allows matching tags with any digest.\n For store, this allows adding the digest to the name.\n Only used if IsPrefix is true.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 5 + span: 72 + span: 8 + span: 12 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 1 + span: 72 + span: 13 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 3 + path: 3 + span: 72 + span: 26 + span: 27 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + span: 80 + span: 8 + span: 35 + leading_comments: " skip_named_digest only considers digest references which do not\n have a non-digested named reference.\n For lookup, this will deduplicate digest references when there is a named match.\n For store, this only adds this digest reference when there is no matching full\n name reference from the prefix.\n Only used if IsPrefix is true.\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 5 + span: 80 + span: 8 + span: 12 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 1 + span: 80 + span: 13 + span: 30 + } + location: { + path: 4 + path: 2 + path: 2 + path: 4 + path: 3 + span: 80 + span: 33 + span: 34 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/transfer/importexport.proto" + package: "containerd.types.transfer" + dependency: "types/platform.proto" + message_type: { + name: "ImageImportStream" + field: { + name: "stream" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stream" + } + field: { + name: "media_type" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "mediaType" + } + field: { + name: "force_compress" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "forceCompress" + } + } + message_type: { + name: "ImageExportStream" + field: { + name: "stream" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "stream" + } + field: { + name: "media_type" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "mediaType" + } + field: { + name: "platforms" + number: 3 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.Platform" + json_name: "platforms" + } + field: { + name: "all_platforms" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "allPlatforms" + } + field: { + name: "skip_compatibility_manifest" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "skipCompatibilityManifest" + } + field: { + name: "skip_non_distributable" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "skipNonDistributable" + } + } + options: { + go_package: "github.com/containerd/containerd/api/types/transfer" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 51 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 34 + } + location: { + path: 8 + span: 20 + span: 0 + span: 74 + } + location: { + path: 8 + path: 11 + span: 20 + span: 0 + span: 74 + } + location: { + path: 3 + path: 0 + span: 22 + span: 0 + span: 30 + } + location: { + path: 4 + path: 0 + span: 24 + span: 0 + span: 33 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 24 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 28 + span: 8 + span: 26 + leading_comments: " Stream is used to identify the binary input stream for the import operation.\n The stream uses the transfer binary stream protocol with the client as the sender.\n The binary data is expected to be a raw tar stream.\n" + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 28 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 28 + span: 15 + span: 21 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 28 + span: 24 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 30 + span: 8 + span: 30 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 30 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 30 + span: 15 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 30 + span: 28 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 32 + span: 8 + span: 32 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 32 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 32 + span: 13 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 32 + span: 30 + span: 31 + } + location: { + path: 4 + path: 1 + span: 35 + span: 0 + span: 51 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 35 + span: 8 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 39 + span: 8 + span: 26 + leading_comments: " Stream is used to identify the binary output stream for the export operation.\n The stream uses the transfer binary stream protocol with the server as the sender.\n The binary data is expected to be a raw tar stream.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 39 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 39 + span: 15 + span: 21 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 39 + span: 24 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 41 + span: 8 + span: 30 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 5 + span: 41 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 41 + span: 15 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 41 + span: 28 + span: 29 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + span: 44 + span: 8 + span: 46 + leading_comments: " The specified platforms\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 4 + span: 44 + span: 8 + span: 16 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 6 + span: 44 + span: 17 + span: 31 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 44 + span: 32 + span: 41 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 3 + span: 44 + span: 44 + span: 45 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + span: 46 + span: 8 + span: 31 + leading_comments: " Whether to include all platforms\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 5 + span: 46 + span: 8 + span: 12 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 1 + span: 46 + span: 13 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 3 + span: 46 + span: 29 + span: 30 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + span: 48 + span: 8 + span: 45 + leading_comments: " Skips the creation of the Docker compatible manifest.json file\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 5 + span: 48 + span: 8 + span: 12 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 1 + span: 48 + span: 13 + span: 40 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 3 + span: 48 + span: 43 + span: 44 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + span: 50 + span: 8 + span: 40 + leading_comments: " Excludes non-distributable blobs such as Windows base layers.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 5 + span: 50 + span: 8 + span: 12 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 1 + span: 50 + span: 13 + span: 35 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 3 + span: 50 + span: 38 + span: 39 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/transfer/progress.proto" + package: "containerd.types.transfer" + dependency: "types/descriptor.proto" + message_type: { + name: "Progress" + field: { + name: "event" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "event" + } + field: { + name: "name" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "name" + } + field: { + name: "parents" + number: 3 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "parents" + } + field: { + name: "progress" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "progress" + } + field: { + name: "total" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_INT64 + json_name: "total" + } + field: { + name: "desc" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.Descriptor" + json_name: "desc" + } + } + options: { + go_package: "github.com/containerd/containerd/api/types/transfer" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 31 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 34 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 32 + } + location: { + path: 8 + span: 22 + span: 0 + span: 74 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 74 + } + location: { + path: 4 + path: 0 + span: 24 + span: 0 + span: 31 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 24 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 25 + span: 8 + span: 25 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 25 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 25 + span: 15 + span: 20 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 25 + span: 23 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 26 + span: 8 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 5 + span: 26 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 26 + span: 15 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 26 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + span: 27 + span: 8 + span: 36 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 4 + span: 27 + span: 8 + span: 16 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 5 + span: 27 + span: 17 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 1 + span: 27 + span: 24 + span: 31 + } + location: { + path: 4 + path: 0 + path: 2 + path: 2 + path: 3 + span: 27 + span: 34 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + span: 28 + span: 8 + span: 27 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 5 + span: 28 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 1 + span: 28 + span: 14 + span: 22 + } + location: { + path: 4 + path: 0 + path: 2 + path: 3 + path: 3 + span: 28 + span: 25 + span: 26 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + span: 29 + span: 8 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 5 + span: 29 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 1 + span: 29 + span: 14 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 4 + path: 3 + span: 29 + span: 22 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + span: 30 + span: 8 + span: 45 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 6 + span: 30 + span: 8 + span: 35 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 1 + span: 30 + span: 36 + span: 40 + } + location: { + path: 4 + path: 0 + path: 2 + path: 5 + path: 3 + span: 30 + span: 43 + span: 44 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/transfer/registry.proto" + package: "containerd.types.transfer" + dependency: "google/protobuf/timestamp.proto" + message_type: { + name: "OCIRegistry" + field: { + name: "reference" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "reference" + } + field: { + name: "resolver" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".containerd.types.transfer.RegistryResolver" + json_name: "resolver" + } + } + message_type: { + name: "RegistryResolver" + field: { + name: "auth_stream" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "authStream" + } + field: { + name: "headers" + number: 2 + label: LABEL_REPEATED + type: TYPE_MESSAGE + type_name: ".containerd.types.transfer.RegistryResolver.HeadersEntry" + json_name: "headers" + } + field: { + name: "host_dir" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "hostDir" + } + field: { + name: "default_scheme" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "defaultScheme" + } + field: { + name: "http_debug" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".containerd.types.transfer.HTTPDebug" + json_name: "httpDebug" + } + field: { + name: "logs_stream" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "logsStream" + } + nested_type: { + name: "HeadersEntry" + field: { + name: "key" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "key" + } + field: { + name: "value" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "value" + } + options: { + map_entry: true + } + } + } + message_type: { + name: "AuthRequest" + field: { + name: "host" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "host" + } + field: { + name: "reference" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "reference" + } + field: { + name: "wwwauthenticate" + number: 3 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "wwwauthenticate" + } + } + message_type: { + name: "AuthResponse" + field: { + name: "authType" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_ENUM + type_name: ".containerd.types.transfer.AuthType" + json_name: "authType" + } + field: { + name: "secret" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "secret" + } + field: { + name: "username" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "username" + } + field: { + name: "expire_at" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_MESSAGE + type_name: ".google.protobuf.Timestamp" + json_name: "expireAt" + } + } + enum_type: { + name: "HTTPDebug" + value: { + name: "DISABLED" + number: 0 + } + value: { + name: "DEBUG" + number: 1 + } + value: { + name: "TRACE" + number: 2 + } + value: { + name: "BOTH" + number: 3 + } + } + enum_type: { + name: "AuthType" + value: { + name: "NONE" + number: 0 + } + value: { + name: "CREDENTIALS" + number: 1 + } + value: { + name: "REFRESH" + number: 2 + } + value: { + name: "HEADER" + number: 3 + } + } + options: { + go_package: "github.com/containerd/containerd/api/types/transfer" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 96 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 34 + } + location: { + path: 3 + path: 0 + span: 20 + span: 0 + span: 41 + } + location: { + path: 8 + span: 22 + span: 0 + span: 74 + } + location: { + path: 8 + path: 11 + span: 22 + span: 0 + span: 74 + } + location: { + path: 4 + path: 0 + span: 24 + span: 0 + span: 27 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 24 + span: 8 + span: 19 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 25 + span: 8 + span: 29 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 25 + span: 8 + span: 14 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 25 + span: 15 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 25 + span: 27 + span: 28 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + span: 26 + span: 8 + span: 38 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 6 + span: 26 + span: 8 + span: 24 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 1 + span: 26 + span: 25 + span: 33 + } + location: { + path: 4 + path: 0 + path: 2 + path: 1 + path: 3 + span: 26 + span: 36 + span: 37 + } + location: { + path: 5 + path: 0 + span: 29 + span: 0 + span: 37 + span: 1 + } + location: { + path: 5 + path: 0 + path: 1 + span: 29 + span: 5 + span: 14 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + span: 30 + span: 8 + span: 21 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 1 + span: 30 + span: 8 + span: 16 + } + location: { + path: 5 + path: 0 + path: 2 + path: 0 + path: 2 + span: 30 + span: 19 + span: 20 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + span: 32 + span: 8 + span: 18 + leading_comments: " Enable HTTP debugging\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 1 + span: 32 + span: 8 + span: 13 + } + location: { + path: 5 + path: 0 + path: 2 + path: 1 + path: 2 + span: 32 + span: 16 + span: 17 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + span: 34 + span: 8 + span: 18 + leading_comments: " Enable HTTP requests tracing\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 1 + span: 34 + span: 8 + span: 13 + } + location: { + path: 5 + path: 0 + path: 2 + path: 2 + path: 2 + span: 34 + span: 16 + span: 17 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + span: 36 + span: 8 + span: 17 + leading_comments: " Enable both HTTP debugging and requests tracing\n" + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + path: 1 + span: 36 + span: 8 + span: 12 + } + location: { + path: 5 + path: 0 + path: 2 + path: 3 + path: 2 + span: 36 + span: 15 + span: 16 + } + location: { + path: 4 + path: 1 + span: 39 + span: 0 + span: 59 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 39 + span: 8 + span: 24 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 42 + span: 8 + span: 31 + leading_comments: " auth_stream is used to refer to a stream which auth callbacks may be\n made on.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 42 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 42 + span: 15 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 42 + span: 29 + span: 30 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + span: 45 + span: 8 + span: 40 + leading_comments: " Headers\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 6 + span: 45 + span: 8 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 1 + span: 45 + span: 28 + span: 35 + } + location: { + path: 4 + path: 1 + path: 2 + path: 1 + path: 3 + span: 45 + span: 38 + span: 39 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + span: 47 + span: 8 + span: 28 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 5 + span: 47 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 1 + span: 47 + span: 15 + span: 23 + } + location: { + path: 4 + path: 1 + path: 2 + path: 2 + path: 3 + span: 47 + span: 26 + span: 27 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + span: 49 + span: 8 + span: 34 + trailing_comments: " Force skip verify\n CA callback? Client TLS callback?\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 5 + span: 49 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 1 + span: 49 + span: 15 + span: 29 + } + location: { + path: 4 + path: 1 + path: 2 + path: 3 + path: 3 + span: 49 + span: 32 + span: 33 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + span: 54 + span: 8 + span: 33 + leading_comments: " Whether to debug/trace HTTP requests to OCI registry.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 6 + span: 54 + span: 8 + span: 17 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 1 + span: 54 + span: 18 + span: 28 + } + location: { + path: 4 + path: 1 + path: 2 + path: 4 + path: 3 + span: 54 + span: 31 + span: 32 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + span: 58 + span: 8 + span: 31 + leading_comments: " Stream ID to use for HTTP logs (when logs are streamed to client).\n When empty, logs are written to containerd logs.\n" + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 5 + span: 58 + span: 8 + span: 14 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 1 + span: 58 + span: 15 + span: 26 + } + location: { + path: 4 + path: 1 + path: 2 + path: 5 + path: 3 + span: 58 + span: 29 + span: 30 + } + location: { + path: 4 + path: 2 + span: 62 + span: 0 + span: 71 + span: 1 + leading_comments: " AuthRequest is sent as a callback on a stream\n" + } + location: { + path: 4 + path: 2 + path: 1 + span: 62 + span: 8 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + span: 64 + span: 8 + span: 24 + leading_comments: " host is the registry host\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 5 + span: 64 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 1 + span: 64 + span: 15 + span: 19 + } + location: { + path: 4 + path: 2 + path: 2 + path: 0 + path: 3 + span: 64 + span: 22 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + span: 67 + span: 8 + span: 29 + leading_comments: " reference is the namespace and repository name requested from the registry\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 5 + span: 67 + span: 8 + span: 14 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 1 + span: 67 + span: 15 + span: 24 + } + location: { + path: 4 + path: 2 + path: 2 + path: 1 + path: 3 + span: 67 + span: 27 + span: 28 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + span: 70 + span: 8 + span: 44 + leading_comments: " wwwauthenticate is the HTTP WWW-Authenticate header values returned from the registry\n" + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 4 + span: 70 + span: 8 + span: 16 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 5 + span: 70 + span: 17 + span: 23 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 1 + span: 70 + span: 24 + span: 39 + } + location: { + path: 4 + path: 2 + path: 2 + path: 2 + path: 3 + span: 70 + span: 42 + span: 43 + } + location: { + path: 5 + path: 1 + span: 73 + span: 0 + span: 88 + span: 1 + } + location: { + path: 5 + path: 1 + path: 1 + span: 73 + span: 5 + span: 13 + } + location: { + path: 5 + path: 1 + path: 2 + path: 0 + span: 74 + span: 8 + span: 17 + } + location: { + path: 5 + path: 1 + path: 2 + path: 0 + path: 1 + span: 74 + span: 8 + span: 12 + } + location: { + path: 5 + path: 1 + path: 2 + path: 0 + path: 2 + span: 74 + span: 15 + span: 16 + } + location: { + path: 5 + path: 1 + path: 2 + path: 1 + span: 78 + span: 8 + span: 24 + leading_comments: " CREDENTIALS is used to exchange username/password for access token\n using an oauth or \"Docker Registry Token\" server\n" + } + location: { + path: 5 + path: 1 + path: 2 + path: 1 + path: 1 + span: 78 + span: 8 + span: 19 + } + location: { + path: 5 + path: 1 + path: 2 + path: 1 + path: 2 + span: 78 + span: 22 + span: 23 + } + location: { + path: 5 + path: 1 + path: 2 + path: 2 + span: 82 + span: 8 + span: 20 + leading_comments: " REFRESH is used to exchange secret for access token using an oauth\n or \"Docker Registry Token\" server\n" + } + location: { + path: 5 + path: 1 + path: 2 + path: 2 + path: 1 + span: 82 + span: 8 + span: 15 + } + location: { + path: 5 + path: 1 + path: 2 + path: 2 + path: 2 + span: 82 + span: 18 + span: 19 + } + location: { + path: 5 + path: 1 + path: 2 + path: 3 + span: 87 + span: 8 + span: 19 + leading_comments: " HEADER is used to set the HTTP Authorization header to secret\n directly for the registry.\n Value should be ` `\n" + } + location: { + path: 5 + path: 1 + path: 2 + path: 3 + path: 1 + span: 87 + span: 8 + span: 14 + } + location: { + path: 5 + path: 1 + path: 2 + path: 3 + path: 2 + span: 87 + span: 17 + span: 18 + } + location: { + path: 4 + path: 3 + span: 90 + span: 0 + span: 96 + span: 1 + } + location: { + path: 4 + path: 3 + path: 1 + span: 90 + span: 8 + span: 20 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + span: 91 + span: 8 + span: 30 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 6 + span: 91 + span: 8 + span: 16 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 1 + span: 91 + span: 17 + span: 25 + } + location: { + path: 4 + path: 3 + path: 2 + path: 0 + path: 3 + span: 91 + span: 28 + span: 29 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + span: 92 + span: 8 + span: 26 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 5 + span: 92 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 1 + span: 92 + span: 15 + span: 21 + } + location: { + path: 4 + path: 3 + path: 2 + path: 1 + path: 3 + span: 92 + span: 24 + span: 25 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + span: 93 + span: 8 + span: 28 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 5 + span: 93 + span: 8 + span: 14 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 1 + span: 93 + span: 15 + span: 23 + } + location: { + path: 4 + path: 3 + path: 2 + path: 2 + path: 3 + span: 93 + span: 26 + span: 27 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + span: 94 + span: 8 + span: 48 + trailing_comments: " TODO: Stream error\n" + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 6 + span: 94 + span: 8 + span: 33 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 1 + span: 94 + span: 34 + span: 43 + } + location: { + path: 4 + path: 3 + path: 2 + path: 3 + path: 3 + span: 94 + span: 46 + span: 47 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} +file: { + name: "types/transfer/streaming.proto" + package: "containerd.types.transfer" + message_type: { + name: "Data" + field: { + name: "data" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_BYTES + json_name: "data" + } + } + message_type: { + name: "WindowUpdate" + field: { + name: "update" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_INT32 + json_name: "update" + } + } + options: { + go_package: "github.com/containerd/containerd/api/types/transfer" + } + source_code_info: { + location: { + span: 16 + span: 0 + span: 28 + span: 1 + } + location: { + path: 12 + span: 16 + span: 0 + span: 18 + leading_detached_comments: "\nCopyright The containerd Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n" + } + location: { + path: 2 + span: 18 + span: 0 + span: 34 + } + location: { + path: 8 + span: 20 + span: 0 + span: 74 + } + location: { + path: 8 + path: 11 + span: 20 + span: 0 + span: 74 + } + location: { + path: 4 + path: 0 + span: 22 + span: 0 + span: 24 + span: 1 + } + location: { + path: 4 + path: 0 + path: 1 + span: 22 + span: 8 + span: 12 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + span: 23 + span: 8 + span: 23 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 5 + span: 23 + span: 8 + span: 13 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 1 + span: 23 + span: 14 + span: 18 + } + location: { + path: 4 + path: 0 + path: 2 + path: 0 + path: 3 + span: 23 + span: 21 + span: 22 + } + location: { + path: 4 + path: 1 + span: 26 + span: 0 + span: 28 + span: 1 + } + location: { + path: 4 + path: 1 + path: 1 + span: 26 + span: 8 + span: 20 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + span: 27 + span: 8 + span: 25 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 5 + span: 27 + span: 8 + span: 13 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 1 + span: 27 + span: 14 + span: 20 + } + location: { + path: 4 + path: 1 + path: 2 + path: 0 + path: 3 + span: 27 + span: 23 + span: 24 + } + } + syntax: "proto3" + buf_extension: { + is_import: false + module_info: { + name: { + remote: "buf.build" + owner: "containerd" + repository: "api-dev" + } + } + is_syntax_unspecified: false + } +} diff --git a/api/releases/v1.10.0.toml b/api/releases/v1.10.0.toml new file mode 100644 index 000000000000..fdf782316ba0 --- /dev/null +++ b/api/releases/v1.10.0.toml @@ -0,0 +1,16 @@ +# commit to be tagged for new release +commit = "HEAD" + +project_name = "containerd" +github_repo = "containerd/containerd" +sub_path = "api" +ignore_deps = [ "github.com/containerd/containerd" ] + +# previous release +previous = "api/v1.9.0" + +pre_release = false + +preface = """\ +The 11th release for the containerd 1.x API aligns with the containerd 2.2 release. +""" diff --git a/api/releases/v1.8.0.toml b/api/releases/v1.8.0.toml new file mode 100644 index 000000000000..ad3d12c83b59 --- /dev/null +++ b/api/releases/v1.8.0.toml @@ -0,0 +1,17 @@ +# commit to be tagged for new release +commit = "HEAD" + +project_name = "containerd" +github_repo = "containerd/containerd" +sub_path = "api" +ignore_deps = [ "github.com/containerd/containerd" ] + +# previous release +previous = "v1.7.0" + +pre_release = false + +preface = """\ +The first dedicated release for the containerd API. This release continues the 1.x +line of API compatibility with the 9th minor release of the 1.x API. +""" diff --git a/api/releases/v1.9.0.toml b/api/releases/v1.9.0.toml new file mode 100644 index 000000000000..50d37bc29e0d --- /dev/null +++ b/api/releases/v1.9.0.toml @@ -0,0 +1,16 @@ +# commit to be tagged for new release +commit = "HEAD" + +project_name = "containerd" +github_repo = "containerd/containerd" +sub_path = "api" +ignore_deps = [ "github.com/containerd/containerd" ] + +# previous release +previous = "api/v1.8.0" + +pre_release = false + +preface = """\ +The 10th release for the containerd 1.x API aligns with the containerd 2.1 release. +""" diff --git a/api/runtime/sandbox/v1/sandbox.pb.go b/api/runtime/sandbox/v1/sandbox.pb.go index 7c53e7bb041d..e3d8587d613d 100644 --- a/api/runtime/sandbox/v1/sandbox.pb.go +++ b/api/runtime/sandbox/v1/sandbox.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/runtime/sandbox/v1/sandbox.proto +// protoc (unknown) +// source: runtime/sandbox/v1/sandbox.proto package sandbox @@ -38,34 +38,36 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type StartSandboxRequest struct { +type CreateSandboxRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` - BundlePath string `protobuf:"bytes,2,opt,name=bundle_path,json=bundlePath,proto3" json:"bundle_path,omitempty"` - Rootfs []*types.Mount `protobuf:"bytes,3,rep,name=rootfs,proto3" json:"rootfs,omitempty"` - Options *anypb.Any `protobuf:"bytes,4,opt,name=options,proto3" json:"options,omitempty"` + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + BundlePath string `protobuf:"bytes,2,opt,name=bundle_path,json=bundlePath,proto3" json:"bundle_path,omitempty"` + Rootfs []*types.Mount `protobuf:"bytes,3,rep,name=rootfs,proto3" json:"rootfs,omitempty"` + Options *anypb.Any `protobuf:"bytes,4,opt,name=options,proto3" json:"options,omitempty"` + NetnsPath string `protobuf:"bytes,5,opt,name=netns_path,json=netnsPath,proto3" json:"netns_path,omitempty"` + Annotations map[string]string `protobuf:"bytes,6,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *StartSandboxRequest) Reset() { - *x = StartSandboxRequest{} +func (x *CreateSandboxRequest) Reset() { + *x = CreateSandboxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[0] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *StartSandboxRequest) String() string { +func (x *CreateSandboxRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StartSandboxRequest) ProtoMessage() {} +func (*CreateSandboxRequest) ProtoMessage() {} -func (x *StartSandboxRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[0] +func (x *CreateSandboxRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -76,51 +78,151 @@ func (x *StartSandboxRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StartSandboxRequest.ProtoReflect.Descriptor instead. -func (*StartSandboxRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{0} +// Deprecated: Use CreateSandboxRequest.ProtoReflect.Descriptor instead. +func (*CreateSandboxRequest) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{0} } -func (x *StartSandboxRequest) GetSandboxID() string { +func (x *CreateSandboxRequest) GetSandboxID() string { if x != nil { return x.SandboxID } return "" } -func (x *StartSandboxRequest) GetBundlePath() string { +func (x *CreateSandboxRequest) GetBundlePath() string { if x != nil { return x.BundlePath } return "" } -func (x *StartSandboxRequest) GetRootfs() []*types.Mount { +func (x *CreateSandboxRequest) GetRootfs() []*types.Mount { if x != nil { return x.Rootfs } return nil } -func (x *StartSandboxRequest) GetOptions() *anypb.Any { +func (x *CreateSandboxRequest) GetOptions() *anypb.Any { if x != nil { return x.Options } return nil } +func (x *CreateSandboxRequest) GetNetnsPath() string { + if x != nil { + return x.NetnsPath + } + return "" +} + +func (x *CreateSandboxRequest) GetAnnotations() map[string]string { + if x != nil { + return x.Annotations + } + return nil +} + +type CreateSandboxResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CreateSandboxResponse) Reset() { + *x = CreateSandboxResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateSandboxResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateSandboxResponse) ProtoMessage() {} + +func (x *CreateSandboxResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateSandboxResponse.ProtoReflect.Descriptor instead. +func (*CreateSandboxResponse) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{1} +} + +type StartSandboxRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` +} + +func (x *StartSandboxRequest) Reset() { + *x = StartSandboxRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartSandboxRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartSandboxRequest) ProtoMessage() {} + +func (x *StartSandboxRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartSandboxRequest.ProtoReflect.Descriptor instead. +func (*StartSandboxRequest) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{2} +} + +func (x *StartSandboxRequest) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + type StartSandboxResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` + Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` } func (x *StartSandboxResponse) Reset() { *x = StartSandboxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[1] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -133,7 +235,7 @@ func (x *StartSandboxResponse) String() string { func (*StartSandboxResponse) ProtoMessage() {} func (x *StartSandboxResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[1] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -146,7 +248,7 @@ func (x *StartSandboxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartSandboxResponse.ProtoReflect.Descriptor instead. func (*StartSandboxResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{1} + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{3} } func (x *StartSandboxResponse) GetPid() uint32 { @@ -156,6 +258,107 @@ func (x *StartSandboxResponse) GetPid() uint32 { return 0 } +func (x *StartSandboxResponse) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +type PlatformRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` +} + +func (x *PlatformRequest) Reset() { + *x = PlatformRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlatformRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformRequest) ProtoMessage() {} + +func (x *PlatformRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformRequest.ProtoReflect.Descriptor instead. +func (*PlatformRequest) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{4} +} + +func (x *PlatformRequest) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +type PlatformResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform *types.Platform `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` +} + +func (x *PlatformResponse) Reset() { + *x = PlatformResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PlatformResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlatformResponse) ProtoMessage() {} + +func (x *PlatformResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlatformResponse.ProtoReflect.Descriptor instead. +func (*PlatformResponse) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{5} +} + +func (x *PlatformResponse) GetPlatform() *types.Platform { + if x != nil { + return x.Platform + } + return nil +} + type StopSandboxRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -168,7 +371,7 @@ type StopSandboxRequest struct { func (x *StopSandboxRequest) Reset() { *x = StopSandboxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[2] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -181,7 +384,7 @@ func (x *StopSandboxRequest) String() string { func (*StopSandboxRequest) ProtoMessage() {} func (x *StopSandboxRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[2] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -194,7 +397,7 @@ func (x *StopSandboxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StopSandboxRequest.ProtoReflect.Descriptor instead. func (*StopSandboxRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{2} + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{6} } func (x *StopSandboxRequest) GetSandboxID() string { @@ -220,7 +423,7 @@ type StopSandboxResponse struct { func (x *StopSandboxResponse) Reset() { *x = StopSandboxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[3] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -233,7 +436,7 @@ func (x *StopSandboxResponse) String() string { func (*StopSandboxResponse) ProtoMessage() {} func (x *StopSandboxResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[3] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -246,7 +449,7 @@ func (x *StopSandboxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StopSandboxResponse.ProtoReflect.Descriptor instead. func (*StopSandboxResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{3} + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{7} } type UpdateSandboxRequest struct { @@ -262,7 +465,7 @@ type UpdateSandboxRequest struct { func (x *UpdateSandboxRequest) Reset() { *x = UpdateSandboxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[4] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -275,7 +478,7 @@ func (x *UpdateSandboxRequest) String() string { func (*UpdateSandboxRequest) ProtoMessage() {} func (x *UpdateSandboxRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[4] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -288,7 +491,7 @@ func (x *UpdateSandboxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSandboxRequest.ProtoReflect.Descriptor instead. func (*UpdateSandboxRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{4} + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{8} } func (x *UpdateSandboxRequest) GetSandboxID() string { @@ -323,7 +526,7 @@ type WaitSandboxRequest struct { func (x *WaitSandboxRequest) Reset() { *x = WaitSandboxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[5] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -336,7 +539,7 @@ func (x *WaitSandboxRequest) String() string { func (*WaitSandboxRequest) ProtoMessage() {} func (x *WaitSandboxRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[5] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -349,7 +552,7 @@ func (x *WaitSandboxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitSandboxRequest.ProtoReflect.Descriptor instead. func (*WaitSandboxRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{5} + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{9} } func (x *WaitSandboxRequest) GetSandboxID() string { @@ -371,7 +574,7 @@ type WaitSandboxResponse struct { func (x *WaitSandboxResponse) Reset() { *x = WaitSandboxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[6] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -384,7 +587,7 @@ func (x *WaitSandboxResponse) String() string { func (*WaitSandboxResponse) ProtoMessage() {} func (x *WaitSandboxResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[6] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -397,7 +600,7 @@ func (x *WaitSandboxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitSandboxResponse.ProtoReflect.Descriptor instead. func (*WaitSandboxResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{6} + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{10} } func (x *WaitSandboxResponse) GetExitStatus() uint32 { @@ -423,7 +626,7 @@ type UpdateSandboxResponse struct { func (x *UpdateSandboxResponse) Reset() { *x = UpdateSandboxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[7] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -436,7 +639,7 @@ func (x *UpdateSandboxResponse) String() string { func (*UpdateSandboxResponse) ProtoMessage() {} func (x *UpdateSandboxResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[7] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -449,7 +652,7 @@ func (x *UpdateSandboxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSandboxResponse.ProtoReflect.Descriptor instead. func (*UpdateSandboxResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{7} + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{11} } type SandboxStatusRequest struct { @@ -458,12 +661,13 @@ type SandboxStatusRequest struct { unknownFields protoimpl.UnknownFields SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Verbose bool `protobuf:"varint,2,opt,name=verbose,proto3" json:"verbose,omitempty"` } func (x *SandboxStatusRequest) Reset() { *x = SandboxStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[8] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -476,7 +680,7 @@ func (x *SandboxStatusRequest) String() string { func (*SandboxStatusRequest) ProtoMessage() {} func (x *SandboxStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[8] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -489,7 +693,7 @@ func (x *SandboxStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SandboxStatusRequest.ProtoReflect.Descriptor instead. func (*SandboxStatusRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{8} + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{12} } func (x *SandboxStatusRequest) GetSandboxID() string { @@ -499,31 +703,44 @@ func (x *SandboxStatusRequest) GetSandboxID() string { return "" } -type PauseSandboxRequest struct { +func (x *SandboxStatusRequest) GetVerbose() bool { + if x != nil { + return x.Verbose + } + return false +} + +type SandboxStatusResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` + State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + Info map[string]string `protobuf:"bytes,4,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + ExitedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` + Extra *anypb.Any `protobuf:"bytes,7,opt,name=extra,proto3" json:"extra,omitempty"` } -func (x *PauseSandboxRequest) Reset() { - *x = PauseSandboxRequest{} +func (x *SandboxStatusResponse) Reset() { + *x = SandboxStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[9] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *PauseSandboxRequest) String() string { +func (x *SandboxStatusResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PauseSandboxRequest) ProtoMessage() {} +func (*SandboxStatusResponse) ProtoMessage() {} -func (x *PauseSandboxRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[9] +func (x *SandboxStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -534,57 +751,61 @@ func (x *PauseSandboxRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PauseSandboxRequest.ProtoReflect.Descriptor instead. -func (*PauseSandboxRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{9} +// Deprecated: Use SandboxStatusResponse.ProtoReflect.Descriptor instead. +func (*SandboxStatusResponse) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{13} } -func (x *PauseSandboxRequest) GetSandboxID() string { +func (x *SandboxStatusResponse) GetSandboxID() string { if x != nil { return x.SandboxID } return "" } -type PauseSandboxResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *SandboxStatusResponse) GetPid() uint32 { + if x != nil { + return x.Pid + } + return 0 } -func (x *PauseSandboxResponse) Reset() { - *x = PauseSandboxResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *SandboxStatusResponse) GetState() string { + if x != nil { + return x.State } + return "" } -func (x *PauseSandboxResponse) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *SandboxStatusResponse) GetInfo() map[string]string { + if x != nil { + return x.Info + } + return nil } -func (*PauseSandboxResponse) ProtoMessage() {} +func (x *SandboxStatusResponse) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} -func (x *PauseSandboxResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *SandboxStatusResponse) GetExitedAt() *timestamppb.Timestamp { + if x != nil { + return x.ExitedAt } - return mi.MessageOf(x) + return nil } -// Deprecated: Use PauseSandboxResponse.ProtoReflect.Descriptor instead. -func (*PauseSandboxResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{10} +func (x *SandboxStatusResponse) GetExtra() *anypb.Any { + if x != nil { + return x.Extra + } + return nil } -type ResumeSandboxRequest struct { +type PingRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -592,23 +813,23 @@ type ResumeSandboxRequest struct { SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` } -func (x *ResumeSandboxRequest) Reset() { - *x = ResumeSandboxRequest{} +func (x *PingRequest) Reset() { + *x = PingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[11] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ResumeSandboxRequest) String() string { +func (x *PingRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResumeSandboxRequest) ProtoMessage() {} +func (*PingRequest) ProtoMessage() {} -func (x *ResumeSandboxRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[11] +func (x *PingRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -619,41 +840,41 @@ func (x *ResumeSandboxRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResumeSandboxRequest.ProtoReflect.Descriptor instead. -func (*ResumeSandboxRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{11} +// Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. +func (*PingRequest) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{14} } -func (x *ResumeSandboxRequest) GetSandboxID() string { +func (x *PingRequest) GetSandboxID() string { if x != nil { return x.SandboxID } return "" } -type ResumeSandboxResponse struct { +type PingResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *ResumeSandboxResponse) Reset() { - *x = ResumeSandboxResponse{} +func (x *PingResponse) Reset() { + *x = PingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[12] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ResumeSandboxResponse) String() string { +func (x *PingResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResumeSandboxResponse) ProtoMessage() {} +func (*PingResponse) ProtoMessage() {} -func (x *ResumeSandboxResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[12] +func (x *PingResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -664,41 +885,36 @@ func (x *ResumeSandboxResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResumeSandboxResponse.ProtoReflect.Descriptor instead. -func (*ResumeSandboxResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{12} +// Deprecated: Use PingResponse.ProtoReflect.Descriptor instead. +func (*PingResponse) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{15} } -type SandboxStatusResponse struct { +type ShutdownSandboxRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - ExitStatus uint32 `protobuf:"varint,4,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"` - ExitedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` - Extra *anypb.Any `protobuf:"bytes,6,opt,name=extra,proto3" json:"extra,omitempty"` + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` } -func (x *SandboxStatusResponse) Reset() { - *x = SandboxStatusResponse{} +func (x *ShutdownSandboxRequest) Reset() { + *x = ShutdownSandboxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[13] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *SandboxStatusResponse) String() string { +func (x *ShutdownSandboxRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SandboxStatusResponse) ProtoMessage() {} +func (*ShutdownSandboxRequest) ProtoMessage() {} -func (x *SandboxStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[13] +func (x *ShutdownSandboxRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -709,54 +925,57 @@ func (x *SandboxStatusResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SandboxStatusResponse.ProtoReflect.Descriptor instead. -func (*SandboxStatusResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{13} +// Deprecated: Use ShutdownSandboxRequest.ProtoReflect.Descriptor instead. +func (*ShutdownSandboxRequest) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{16} } -func (x *SandboxStatusResponse) GetID() string { +func (x *ShutdownSandboxRequest) GetSandboxID() string { if x != nil { - return x.ID + return x.SandboxID } return "" } -func (x *SandboxStatusResponse) GetPid() uint32 { - if x != nil { - return x.Pid - } - return 0 +type ShutdownSandboxResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -func (x *SandboxStatusResponse) GetState() string { - if x != nil { - return x.State +func (x *ShutdownSandboxResponse) Reset() { + *x = ShutdownSandboxResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return "" } -func (x *SandboxStatusResponse) GetExitStatus() uint32 { - if x != nil { - return x.ExitStatus - } - return 0 +func (x *ShutdownSandboxResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *SandboxStatusResponse) GetExitedAt() *timestamppb.Timestamp { - if x != nil { - return x.ExitedAt +func (*ShutdownSandboxResponse) ProtoMessage() {} + +func (x *ShutdownSandboxResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *SandboxStatusResponse) GetExtra() *anypb.Any { - if x != nil { - return x.Extra - } - return nil +// Deprecated: Use ShutdownSandboxResponse.ProtoReflect.Descriptor instead. +func (*ShutdownSandboxResponse) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{17} } -type PingRequest struct { +type SandboxMetricsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -764,23 +983,23 @@ type PingRequest struct { SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` } -func (x *PingRequest) Reset() { - *x = PingRequest{} +func (x *SandboxMetricsRequest) Reset() { + *x = SandboxMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[14] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *PingRequest) String() string { +func (x *SandboxMetricsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PingRequest) ProtoMessage() {} +func (*SandboxMetricsRequest) ProtoMessage() {} -func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[14] +func (x *SandboxMetricsRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -791,41 +1010,43 @@ func (x *PingRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. -func (*PingRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{14} +// Deprecated: Use SandboxMetricsRequest.ProtoReflect.Descriptor instead. +func (*SandboxMetricsRequest) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{18} } -func (x *PingRequest) GetSandboxID() string { +func (x *SandboxMetricsRequest) GetSandboxID() string { if x != nil { return x.SandboxID } return "" } -type PingResponse struct { +type SandboxMetricsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Metrics *types.Metric `protobuf:"bytes,1,opt,name=metrics,proto3" json:"metrics,omitempty"` } -func (x *PingResponse) Reset() { - *x = PingResponse{} +func (x *SandboxMetricsResponse) Reset() { + *x = SandboxMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[15] + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *PingResponse) String() string { +func (x *SandboxMetricsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PingResponse) ProtoMessage() {} +func (*SandboxMetricsResponse) ProtoMessage() {} -func (x *PingResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[15] +func (x *SandboxMetricsResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_sandbox_v1_sandbox_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -836,249 +1057,348 @@ func (x *PingResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PingResponse.ProtoReflect.Descriptor instead. -func (*PingResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{15} -} - -var File_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDesc = []byte{ - 0x0a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb6, 0x01, 0x0a, 0x13, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, - 0x74, 0x66, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x28, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x56, 0x0a, - 0x12, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, +// Deprecated: Use SandboxMetricsResponse.ProtoReflect.Descriptor instead. +func (*SandboxMetricsResponse) Descriptor() ([]byte, []int) { + return file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{19} +} + +func (x *SandboxMetricsResponse) GetMetrics() *types.Metric { + if x != nil { + return x.Metrics + } + return nil +} + +var File_runtime_sandbox_v1_sandbox_proto protoreflect.FileDescriptor + +var file_runtime_sandbox_v1_sandbox_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, + 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfe, 0x02, 0x0a, 0x14, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, + 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x6e, 0x73, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x66, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x17, 0x0a, 0x15, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x14, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x22, 0x30, 0x0a, 0x0f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, - 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x53, 0x65, 0x63, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x91, 0x02, 0x0a, - 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x33, 0x0a, 0x12, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, + 0x49, 0x64, 0x22, 0x4a, 0x0a, 0x10, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0x56, + 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, + 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x53, 0x65, 0x63, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x91, 0x02, + 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x13, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, - 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, - 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x35, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x33, 0x0a, 0x12, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x34, 0x0a, 0x13, 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, - 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x53, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x52, - 0x65, 0x73, 0x75, 0x6d, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x15, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, + 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x13, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, + 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, + 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x4f, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, + 0x65, 0x22, 0x8b, 0x03, 0x0a, 0x15, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x52, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x2c, 0x0a, 0x0b, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x0e, 0x0a, 0x0c, 0x50, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc3, 0x07, 0x0a, 0x07, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x77, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, - 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, + 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x2c, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x0e, 0x0a, + 0x0c, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x0a, + 0x16, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, + 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x36, 0x0a, 0x15, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x4c, 0x0a, 0x16, 0x53, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x32, 0xbd, 0x08, 0x0a, 0x07, 0x53, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x12, 0x7a, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x74, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x31, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, + 0x77, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, + 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x0d, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x33, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0c, 0x50, 0x61, 0x75, 0x73, 0x65, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, - 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x7a, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x0d, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x2e, + 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x57, + 0x61, 0x69, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, + 0x69, 0x74, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x7a, 0x0a, 0x0d, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, + 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x2a, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, + 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, + 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, + 0x76, 0x31, 0x3b, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescData = file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDesc + file_runtime_sandbox_v1_sandbox_proto_rawDescOnce sync.Once + file_runtime_sandbox_v1_sandbox_proto_rawDescData = file_runtime_sandbox_v1_sandbox_proto_rawDesc ) -func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescData) +func file_runtime_sandbox_v1_sandbox_proto_rawDescGZIP() []byte { + file_runtime_sandbox_v1_sandbox_proto_rawDescOnce.Do(func() { + file_runtime_sandbox_v1_sandbox_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_sandbox_v1_sandbox_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDescData -} - -var file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes = make([]protoimpl.MessageInfo, 17) -var file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_goTypes = []interface{}{ - (*StartSandboxRequest)(nil), // 0: containerd.runtime.sandbox.v1.StartSandboxRequest - (*StartSandboxResponse)(nil), // 1: containerd.runtime.sandbox.v1.StartSandboxResponse - (*StopSandboxRequest)(nil), // 2: containerd.runtime.sandbox.v1.StopSandboxRequest - (*StopSandboxResponse)(nil), // 3: containerd.runtime.sandbox.v1.StopSandboxResponse - (*UpdateSandboxRequest)(nil), // 4: containerd.runtime.sandbox.v1.UpdateSandboxRequest - (*WaitSandboxRequest)(nil), // 5: containerd.runtime.sandbox.v1.WaitSandboxRequest - (*WaitSandboxResponse)(nil), // 6: containerd.runtime.sandbox.v1.WaitSandboxResponse - (*UpdateSandboxResponse)(nil), // 7: containerd.runtime.sandbox.v1.UpdateSandboxResponse - (*SandboxStatusRequest)(nil), // 8: containerd.runtime.sandbox.v1.SandboxStatusRequest - (*PauseSandboxRequest)(nil), // 9: containerd.runtime.sandbox.v1.PauseSandboxRequest - (*PauseSandboxResponse)(nil), // 10: containerd.runtime.sandbox.v1.PauseSandboxResponse - (*ResumeSandboxRequest)(nil), // 11: containerd.runtime.sandbox.v1.ResumeSandboxRequest - (*ResumeSandboxResponse)(nil), // 12: containerd.runtime.sandbox.v1.ResumeSandboxResponse - (*SandboxStatusResponse)(nil), // 13: containerd.runtime.sandbox.v1.SandboxStatusResponse - (*PingRequest)(nil), // 14: containerd.runtime.sandbox.v1.PingRequest - (*PingResponse)(nil), // 15: containerd.runtime.sandbox.v1.PingResponse - nil, // 16: containerd.runtime.sandbox.v1.UpdateSandboxRequest.AnnotationsEntry - (*types.Mount)(nil), // 17: containerd.types.Mount - (*anypb.Any)(nil), // 18: google.protobuf.Any - (*timestamppb.Timestamp)(nil), // 19: google.protobuf.Timestamp -} -var file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_depIdxs = []int32{ - 17, // 0: containerd.runtime.sandbox.v1.StartSandboxRequest.rootfs:type_name -> containerd.types.Mount - 18, // 1: containerd.runtime.sandbox.v1.StartSandboxRequest.options:type_name -> google.protobuf.Any - 18, // 2: containerd.runtime.sandbox.v1.UpdateSandboxRequest.resources:type_name -> google.protobuf.Any - 16, // 3: containerd.runtime.sandbox.v1.UpdateSandboxRequest.annotations:type_name -> containerd.runtime.sandbox.v1.UpdateSandboxRequest.AnnotationsEntry - 19, // 4: containerd.runtime.sandbox.v1.WaitSandboxResponse.exited_at:type_name -> google.protobuf.Timestamp - 19, // 5: containerd.runtime.sandbox.v1.SandboxStatusResponse.exited_at:type_name -> google.protobuf.Timestamp - 18, // 6: containerd.runtime.sandbox.v1.SandboxStatusResponse.extra:type_name -> google.protobuf.Any - 0, // 7: containerd.runtime.sandbox.v1.Sandbox.StartSandbox:input_type -> containerd.runtime.sandbox.v1.StartSandboxRequest - 2, // 8: containerd.runtime.sandbox.v1.Sandbox.StopSandbox:input_type -> containerd.runtime.sandbox.v1.StopSandboxRequest - 5, // 9: containerd.runtime.sandbox.v1.Sandbox.WaitSandbox:input_type -> containerd.runtime.sandbox.v1.WaitSandboxRequest - 4, // 10: containerd.runtime.sandbox.v1.Sandbox.UpdateSandbox:input_type -> containerd.runtime.sandbox.v1.UpdateSandboxRequest - 9, // 11: containerd.runtime.sandbox.v1.Sandbox.PauseSandbox:input_type -> containerd.runtime.sandbox.v1.PauseSandboxRequest - 11, // 12: containerd.runtime.sandbox.v1.Sandbox.ResumeSandbox:input_type -> containerd.runtime.sandbox.v1.ResumeSandboxRequest - 8, // 13: containerd.runtime.sandbox.v1.Sandbox.SandboxStatus:input_type -> containerd.runtime.sandbox.v1.SandboxStatusRequest - 14, // 14: containerd.runtime.sandbox.v1.Sandbox.PingSandbox:input_type -> containerd.runtime.sandbox.v1.PingRequest - 1, // 15: containerd.runtime.sandbox.v1.Sandbox.StartSandbox:output_type -> containerd.runtime.sandbox.v1.StartSandboxResponse - 3, // 16: containerd.runtime.sandbox.v1.Sandbox.StopSandbox:output_type -> containerd.runtime.sandbox.v1.StopSandboxResponse - 6, // 17: containerd.runtime.sandbox.v1.Sandbox.WaitSandbox:output_type -> containerd.runtime.sandbox.v1.WaitSandboxResponse - 7, // 18: containerd.runtime.sandbox.v1.Sandbox.UpdateSandbox:output_type -> containerd.runtime.sandbox.v1.UpdateSandboxResponse - 10, // 19: containerd.runtime.sandbox.v1.Sandbox.PauseSandbox:output_type -> containerd.runtime.sandbox.v1.PauseSandboxResponse - 12, // 20: containerd.runtime.sandbox.v1.Sandbox.ResumeSandbox:output_type -> containerd.runtime.sandbox.v1.ResumeSandboxResponse - 13, // 21: containerd.runtime.sandbox.v1.Sandbox.SandboxStatus:output_type -> containerd.runtime.sandbox.v1.SandboxStatusResponse - 15, // 22: containerd.runtime.sandbox.v1.Sandbox.PingSandbox:output_type -> containerd.runtime.sandbox.v1.PingResponse - 15, // [15:23] is the sub-list for method output_type - 7, // [7:15] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name -} - -func init() { file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_init() } -func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_init() { - if File_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto != nil { + return file_runtime_sandbox_v1_sandbox_proto_rawDescData +} + +var file_runtime_sandbox_v1_sandbox_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_runtime_sandbox_v1_sandbox_proto_goTypes = []interface{}{ + (*CreateSandboxRequest)(nil), // 0: containerd.runtime.sandbox.v1.CreateSandboxRequest + (*CreateSandboxResponse)(nil), // 1: containerd.runtime.sandbox.v1.CreateSandboxResponse + (*StartSandboxRequest)(nil), // 2: containerd.runtime.sandbox.v1.StartSandboxRequest + (*StartSandboxResponse)(nil), // 3: containerd.runtime.sandbox.v1.StartSandboxResponse + (*PlatformRequest)(nil), // 4: containerd.runtime.sandbox.v1.PlatformRequest + (*PlatformResponse)(nil), // 5: containerd.runtime.sandbox.v1.PlatformResponse + (*StopSandboxRequest)(nil), // 6: containerd.runtime.sandbox.v1.StopSandboxRequest + (*StopSandboxResponse)(nil), // 7: containerd.runtime.sandbox.v1.StopSandboxResponse + (*UpdateSandboxRequest)(nil), // 8: containerd.runtime.sandbox.v1.UpdateSandboxRequest + (*WaitSandboxRequest)(nil), // 9: containerd.runtime.sandbox.v1.WaitSandboxRequest + (*WaitSandboxResponse)(nil), // 10: containerd.runtime.sandbox.v1.WaitSandboxResponse + (*UpdateSandboxResponse)(nil), // 11: containerd.runtime.sandbox.v1.UpdateSandboxResponse + (*SandboxStatusRequest)(nil), // 12: containerd.runtime.sandbox.v1.SandboxStatusRequest + (*SandboxStatusResponse)(nil), // 13: containerd.runtime.sandbox.v1.SandboxStatusResponse + (*PingRequest)(nil), // 14: containerd.runtime.sandbox.v1.PingRequest + (*PingResponse)(nil), // 15: containerd.runtime.sandbox.v1.PingResponse + (*ShutdownSandboxRequest)(nil), // 16: containerd.runtime.sandbox.v1.ShutdownSandboxRequest + (*ShutdownSandboxResponse)(nil), // 17: containerd.runtime.sandbox.v1.ShutdownSandboxResponse + (*SandboxMetricsRequest)(nil), // 18: containerd.runtime.sandbox.v1.SandboxMetricsRequest + (*SandboxMetricsResponse)(nil), // 19: containerd.runtime.sandbox.v1.SandboxMetricsResponse + nil, // 20: containerd.runtime.sandbox.v1.CreateSandboxRequest.AnnotationsEntry + nil, // 21: containerd.runtime.sandbox.v1.UpdateSandboxRequest.AnnotationsEntry + nil, // 22: containerd.runtime.sandbox.v1.SandboxStatusResponse.InfoEntry + (*types.Mount)(nil), // 23: containerd.types.Mount + (*anypb.Any)(nil), // 24: google.protobuf.Any + (*timestamppb.Timestamp)(nil), // 25: google.protobuf.Timestamp + (*types.Platform)(nil), // 26: containerd.types.Platform + (*types.Metric)(nil), // 27: containerd.types.Metric +} +var file_runtime_sandbox_v1_sandbox_proto_depIdxs = []int32{ + 23, // 0: containerd.runtime.sandbox.v1.CreateSandboxRequest.rootfs:type_name -> containerd.types.Mount + 24, // 1: containerd.runtime.sandbox.v1.CreateSandboxRequest.options:type_name -> google.protobuf.Any + 20, // 2: containerd.runtime.sandbox.v1.CreateSandboxRequest.annotations:type_name -> containerd.runtime.sandbox.v1.CreateSandboxRequest.AnnotationsEntry + 25, // 3: containerd.runtime.sandbox.v1.StartSandboxResponse.created_at:type_name -> google.protobuf.Timestamp + 26, // 4: containerd.runtime.sandbox.v1.PlatformResponse.platform:type_name -> containerd.types.Platform + 24, // 5: containerd.runtime.sandbox.v1.UpdateSandboxRequest.resources:type_name -> google.protobuf.Any + 21, // 6: containerd.runtime.sandbox.v1.UpdateSandboxRequest.annotations:type_name -> containerd.runtime.sandbox.v1.UpdateSandboxRequest.AnnotationsEntry + 25, // 7: containerd.runtime.sandbox.v1.WaitSandboxResponse.exited_at:type_name -> google.protobuf.Timestamp + 22, // 8: containerd.runtime.sandbox.v1.SandboxStatusResponse.info:type_name -> containerd.runtime.sandbox.v1.SandboxStatusResponse.InfoEntry + 25, // 9: containerd.runtime.sandbox.v1.SandboxStatusResponse.created_at:type_name -> google.protobuf.Timestamp + 25, // 10: containerd.runtime.sandbox.v1.SandboxStatusResponse.exited_at:type_name -> google.protobuf.Timestamp + 24, // 11: containerd.runtime.sandbox.v1.SandboxStatusResponse.extra:type_name -> google.protobuf.Any + 27, // 12: containerd.runtime.sandbox.v1.SandboxMetricsResponse.metrics:type_name -> containerd.types.Metric + 0, // 13: containerd.runtime.sandbox.v1.Sandbox.CreateSandbox:input_type -> containerd.runtime.sandbox.v1.CreateSandboxRequest + 2, // 14: containerd.runtime.sandbox.v1.Sandbox.StartSandbox:input_type -> containerd.runtime.sandbox.v1.StartSandboxRequest + 4, // 15: containerd.runtime.sandbox.v1.Sandbox.Platform:input_type -> containerd.runtime.sandbox.v1.PlatformRequest + 6, // 16: containerd.runtime.sandbox.v1.Sandbox.StopSandbox:input_type -> containerd.runtime.sandbox.v1.StopSandboxRequest + 9, // 17: containerd.runtime.sandbox.v1.Sandbox.WaitSandbox:input_type -> containerd.runtime.sandbox.v1.WaitSandboxRequest + 12, // 18: containerd.runtime.sandbox.v1.Sandbox.SandboxStatus:input_type -> containerd.runtime.sandbox.v1.SandboxStatusRequest + 14, // 19: containerd.runtime.sandbox.v1.Sandbox.PingSandbox:input_type -> containerd.runtime.sandbox.v1.PingRequest + 16, // 20: containerd.runtime.sandbox.v1.Sandbox.ShutdownSandbox:input_type -> containerd.runtime.sandbox.v1.ShutdownSandboxRequest + 18, // 21: containerd.runtime.sandbox.v1.Sandbox.SandboxMetrics:input_type -> containerd.runtime.sandbox.v1.SandboxMetricsRequest + 1, // 22: containerd.runtime.sandbox.v1.Sandbox.CreateSandbox:output_type -> containerd.runtime.sandbox.v1.CreateSandboxResponse + 3, // 23: containerd.runtime.sandbox.v1.Sandbox.StartSandbox:output_type -> containerd.runtime.sandbox.v1.StartSandboxResponse + 5, // 24: containerd.runtime.sandbox.v1.Sandbox.Platform:output_type -> containerd.runtime.sandbox.v1.PlatformResponse + 7, // 25: containerd.runtime.sandbox.v1.Sandbox.StopSandbox:output_type -> containerd.runtime.sandbox.v1.StopSandboxResponse + 10, // 26: containerd.runtime.sandbox.v1.Sandbox.WaitSandbox:output_type -> containerd.runtime.sandbox.v1.WaitSandboxResponse + 13, // 27: containerd.runtime.sandbox.v1.Sandbox.SandboxStatus:output_type -> containerd.runtime.sandbox.v1.SandboxStatusResponse + 15, // 28: containerd.runtime.sandbox.v1.Sandbox.PingSandbox:output_type -> containerd.runtime.sandbox.v1.PingResponse + 17, // 29: containerd.runtime.sandbox.v1.Sandbox.ShutdownSandbox:output_type -> containerd.runtime.sandbox.v1.ShutdownSandboxResponse + 19, // 30: containerd.runtime.sandbox.v1.Sandbox.SandboxMetrics:output_type -> containerd.runtime.sandbox.v1.SandboxMetricsResponse + 22, // [22:31] is the sub-list for method output_type + 13, // [13:22] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name +} + +func init() { file_runtime_sandbox_v1_sandbox_proto_init() } +func file_runtime_sandbox_v1_sandbox_proto_init() { + if File_runtime_sandbox_v1_sandbox_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateSandboxRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_sandbox_v1_sandbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateSandboxResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_sandbox_v1_sandbox_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartSandboxRequest); i { case 0: return &v.state @@ -1090,7 +1410,7 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartSandboxResponse); i { case 0: return &v.state @@ -1102,7 +1422,31 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PlatformRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_sandbox_v1_sandbox_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PlatformResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_sandbox_v1_sandbox_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StopSandboxRequest); i { case 0: return &v.state @@ -1114,7 +1458,7 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StopSandboxResponse); i { case 0: return &v.state @@ -1126,7 +1470,7 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateSandboxRequest); i { case 0: return &v.state @@ -1138,7 +1482,7 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WaitSandboxRequest); i { case 0: return &v.state @@ -1150,7 +1494,7 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WaitSandboxResponse); i { case 0: return &v.state @@ -1162,7 +1506,7 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateSandboxResponse); i { case 0: return &v.state @@ -1174,7 +1518,7 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SandboxStatusRequest); i { case 0: return &v.state @@ -1186,8 +1530,8 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PauseSandboxRequest); i { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SandboxStatusResponse); i { case 0: return &v.state case 1: @@ -1198,8 +1542,8 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PauseSandboxResponse); i { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PingRequest); i { case 0: return &v.state case 1: @@ -1210,8 +1554,8 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResumeSandboxRequest); i { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PingResponse); i { case 0: return &v.state case 1: @@ -1222,8 +1566,8 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResumeSandboxResponse); i { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShutdownSandboxRequest); i { case 0: return &v.state case 1: @@ -1234,8 +1578,8 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SandboxStatusResponse); i { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShutdownSandboxResponse); i { case 0: return &v.state case 1: @@ -1246,8 +1590,8 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingRequest); i { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SandboxMetricsRequest); i { case 0: return &v.state case 1: @@ -1258,8 +1602,8 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ return nil } } - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingResponse); i { + file_runtime_sandbox_v1_sandbox_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SandboxMetricsResponse); i { case 0: return &v.state case 1: @@ -1275,18 +1619,18 @@ func file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_ out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDesc, + RawDescriptor: file_runtime_sandbox_v1_sandbox_proto_rawDesc, NumEnums: 0, - NumMessages: 17, + NumMessages: 23, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_msgTypes, + GoTypes: file_runtime_sandbox_v1_sandbox_proto_goTypes, + DependencyIndexes: file_runtime_sandbox_v1_sandbox_proto_depIdxs, + MessageInfos: file_runtime_sandbox_v1_sandbox_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto = out.File - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_rawDesc = nil - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_goTypes = nil - file_github_com_containerd_containerd_api_runtime_sandbox_v1_sandbox_proto_depIdxs = nil + File_runtime_sandbox_v1_sandbox_proto = out.File + file_runtime_sandbox_v1_sandbox_proto_rawDesc = nil + file_runtime_sandbox_v1_sandbox_proto_goTypes = nil + file_runtime_sandbox_v1_sandbox_proto_depIdxs = nil } diff --git a/api/runtime/sandbox/v1/sandbox.proto b/api/runtime/sandbox/v1/sandbox.proto index a384f0261fdb..3d31ae873493 100644 --- a/api/runtime/sandbox/v1/sandbox.proto +++ b/api/runtime/sandbox/v1/sandbox.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -20,8 +20,9 @@ package containerd.runtime.sandbox.v1; import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; - -import "github.com/containerd/containerd/api/types/mount.proto"; +import "types/metrics.proto"; +import "types/mount.proto"; +import "types/platform.proto"; option go_package = "github.com/containerd/containerd/api/runtime/sandbox/v1;sandbox"; @@ -29,94 +30,119 @@ option go_package = "github.com/containerd/containerd/api/runtime/sandbox/v1;san // A typical example of sandbox is microVM or pause container - an entity that groups containers and/or // holds resources relevant for this group. service Sandbox { - // StartSandbox will create/start a new sandbox instance - rpc StartSandbox(StartSandboxRequest) returns (StartSandboxResponse); + // CreateSandbox will be called right after sandbox shim instance launched. + // It is a good place to initialize sandbox environment. + rpc CreateSandbox(CreateSandboxRequest) returns (CreateSandboxResponse); + + // StartSandbox will start a previously created sandbox. + rpc StartSandbox(StartSandboxRequest) returns (StartSandboxResponse); - // StopSandbox will stop existing sandbox instance - rpc StopSandbox(StopSandboxRequest) returns (StopSandboxResponse); + // Platform queries the platform the sandbox is going to run containers on. + // containerd will use this to generate a proper OCI spec. + rpc Platform(PlatformRequest) returns (PlatformResponse); - // WaitSandbox blocks until sanbox exits. - rpc WaitSandbox(WaitSandboxRequest) returns (WaitSandboxResponse); + // StopSandbox will stop existing sandbox instance + rpc StopSandbox(StopSandboxRequest) returns (StopSandboxResponse); - // Update can be used to amend the state of currently running sandbox instance (depending on - // implementation this can be used to resize/reacquire needed resources like RAM/CPU). - rpc UpdateSandbox(UpdateSandboxRequest) returns (UpdateSandboxResponse); + // WaitSandbox blocks until sandbox exits. + rpc WaitSandbox(WaitSandboxRequest) returns (WaitSandboxResponse); - // PauseSandbox will suspend currently running sandbox instance. - rpc PauseSandbox(PauseSandboxRequest) returns (PauseSandboxResponse); + // SandboxStatus will return current status of the running sandbox instance + rpc SandboxStatus(SandboxStatusRequest) returns (SandboxStatusResponse); - // ResumeSandbox will resuyme previously suspended sandbox instance. - rpc ResumeSandbox(ResumeSandboxRequest) returns (ResumeSandboxResponse); + // PingSandbox is a lightweight API call to check whether sandbox alive. + rpc PingSandbox(PingRequest) returns (PingResponse); - // SandboxStatus will return current status of the running sandbox instance - rpc SandboxStatus(SandboxStatusRequest) returns (SandboxStatusResponse); + // ShutdownSandbox must shutdown shim instance. + rpc ShutdownSandbox(ShutdownSandboxRequest) returns (ShutdownSandboxResponse); - // PingSandbox is a lightweight API call to check whether sandbox alive. - rpc PingSandbox(PingRequest) returns (PingResponse); + // SandboxMetrics retrieves metrics about a sandbox instance. + rpc SandboxMetrics(SandboxMetricsRequest) returns (SandboxMetricsResponse); } +message CreateSandboxRequest { + string sandbox_id = 1; + string bundle_path = 2; + repeated containerd.types.Mount rootfs = 3; + google.protobuf.Any options = 4; + string netns_path = 5; + map annotations = 6; +} + +message CreateSandboxResponse {} + message StartSandboxRequest { - string sandbox_id = 1; - string bundle_path = 2; - repeated containerd.types.Mount rootfs = 3; - google.protobuf.Any options = 4; + string sandbox_id = 1; } message StartSandboxResponse { - uint32 pid = 1; + uint32 pid = 1; + google.protobuf.Timestamp created_at = 2; +} + +message PlatformRequest { + string sandbox_id = 1; +} + +message PlatformResponse { + containerd.types.Platform platform = 1; } message StopSandboxRequest { - string sandbox_id = 1; - uint32 timeout_secs = 2; + string sandbox_id = 1; + uint32 timeout_secs = 2; } message StopSandboxResponse {} message UpdateSandboxRequest { - string sandbox_id = 1; - google.protobuf.Any resources = 2; - map annotations = 3; + string sandbox_id = 1; + google.protobuf.Any resources = 2; + map annotations = 3; } message WaitSandboxRequest { - string sandbox_id = 1; + string sandbox_id = 1; } message WaitSandboxResponse { - uint32 exit_status = 1; - google.protobuf.Timestamp exited_at = 2; + uint32 exit_status = 1; + google.protobuf.Timestamp exited_at = 2; } message UpdateSandboxResponse {} message SandboxStatusRequest { - string sandbox_id = 1; + string sandbox_id = 1; + bool verbose = 2; } -message PauseSandboxRequest { - string sandbox_id = 1; +message SandboxStatusResponse { + string sandbox_id = 1; + uint32 pid = 2; + string state = 3; + map info = 4; + google.protobuf.Timestamp created_at = 5; + google.protobuf.Timestamp exited_at = 6; + google.protobuf.Any extra = 7; } -message PauseSandboxResponse {} - -message ResumeSandboxRequest { - string sandbox_id = 1; +message PingRequest { + string sandbox_id = 1; } -message ResumeSandboxResponse {} +message PingResponse {} -message SandboxStatusResponse { - string id = 1; - uint32 pid = 2; - string state = 3; - uint32 exit_status = 4; - google.protobuf.Timestamp exited_at = 5; - google.protobuf.Any extra = 6; +message ShutdownSandboxRequest { + string sandbox_id = 1; } -message PingRequest { - string sandbox_id = 1; +message ShutdownSandboxResponse {} + +message SandboxMetricsRequest { + string sandbox_id = 1; } -message PingResponse {} +message SandboxMetricsResponse { + containerd.types.Metric metrics = 1; +} diff --git a/api/runtime/sandbox/v1/sandbox_grpc.pb.go b/api/runtime/sandbox/v1/sandbox_grpc.pb.go new file mode 100644 index 000000000000..d4834638a3e4 --- /dev/null +++ b/api/runtime/sandbox/v1/sandbox_grpc.pb.go @@ -0,0 +1,417 @@ +//go:build !no_grpc + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: runtime/sandbox/v1/sandbox.proto + +package sandbox + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// SandboxClient is the client API for Sandbox service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SandboxClient interface { + // CreateSandbox will be called right after sandbox shim instance launched. + // It is a good place to initialize sandbox environment. + CreateSandbox(ctx context.Context, in *CreateSandboxRequest, opts ...grpc.CallOption) (*CreateSandboxResponse, error) + // StartSandbox will start a previously created sandbox. + StartSandbox(ctx context.Context, in *StartSandboxRequest, opts ...grpc.CallOption) (*StartSandboxResponse, error) + // Platform queries the platform the sandbox is going to run containers on. + // containerd will use this to generate a proper OCI spec. + Platform(ctx context.Context, in *PlatformRequest, opts ...grpc.CallOption) (*PlatformResponse, error) + // StopSandbox will stop existing sandbox instance + StopSandbox(ctx context.Context, in *StopSandboxRequest, opts ...grpc.CallOption) (*StopSandboxResponse, error) + // WaitSandbox blocks until sandbox exits. + WaitSandbox(ctx context.Context, in *WaitSandboxRequest, opts ...grpc.CallOption) (*WaitSandboxResponse, error) + // SandboxStatus will return current status of the running sandbox instance + SandboxStatus(ctx context.Context, in *SandboxStatusRequest, opts ...grpc.CallOption) (*SandboxStatusResponse, error) + // PingSandbox is a lightweight API call to check whether sandbox alive. + PingSandbox(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) + // ShutdownSandbox must shutdown shim instance. + ShutdownSandbox(ctx context.Context, in *ShutdownSandboxRequest, opts ...grpc.CallOption) (*ShutdownSandboxResponse, error) + // SandboxMetrics retrieves metrics about a sandbox instance. + SandboxMetrics(ctx context.Context, in *SandboxMetricsRequest, opts ...grpc.CallOption) (*SandboxMetricsResponse, error) +} + +type sandboxClient struct { + cc grpc.ClientConnInterface +} + +func NewSandboxClient(cc grpc.ClientConnInterface) SandboxClient { + return &sandboxClient{cc} +} + +func (c *sandboxClient) CreateSandbox(ctx context.Context, in *CreateSandboxRequest, opts ...grpc.CallOption) (*CreateSandboxResponse, error) { + out := new(CreateSandboxResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/CreateSandbox", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sandboxClient) StartSandbox(ctx context.Context, in *StartSandboxRequest, opts ...grpc.CallOption) (*StartSandboxResponse, error) { + out := new(StartSandboxResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/StartSandbox", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sandboxClient) Platform(ctx context.Context, in *PlatformRequest, opts ...grpc.CallOption) (*PlatformResponse, error) { + out := new(PlatformResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/Platform", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sandboxClient) StopSandbox(ctx context.Context, in *StopSandboxRequest, opts ...grpc.CallOption) (*StopSandboxResponse, error) { + out := new(StopSandboxResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/StopSandbox", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sandboxClient) WaitSandbox(ctx context.Context, in *WaitSandboxRequest, opts ...grpc.CallOption) (*WaitSandboxResponse, error) { + out := new(WaitSandboxResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/WaitSandbox", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sandboxClient) SandboxStatus(ctx context.Context, in *SandboxStatusRequest, opts ...grpc.CallOption) (*SandboxStatusResponse, error) { + out := new(SandboxStatusResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/SandboxStatus", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sandboxClient) PingSandbox(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*PingResponse, error) { + out := new(PingResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/PingSandbox", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sandboxClient) ShutdownSandbox(ctx context.Context, in *ShutdownSandboxRequest, opts ...grpc.CallOption) (*ShutdownSandboxResponse, error) { + out := new(ShutdownSandboxResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/ShutdownSandbox", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sandboxClient) SandboxMetrics(ctx context.Context, in *SandboxMetricsRequest, opts ...grpc.CallOption) (*SandboxMetricsResponse, error) { + out := new(SandboxMetricsResponse) + err := c.cc.Invoke(ctx, "/containerd.runtime.sandbox.v1.Sandbox/SandboxMetrics", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SandboxServer is the server API for Sandbox service. +// All implementations must embed UnimplementedSandboxServer +// for forward compatibility +type SandboxServer interface { + // CreateSandbox will be called right after sandbox shim instance launched. + // It is a good place to initialize sandbox environment. + CreateSandbox(context.Context, *CreateSandboxRequest) (*CreateSandboxResponse, error) + // StartSandbox will start a previously created sandbox. + StartSandbox(context.Context, *StartSandboxRequest) (*StartSandboxResponse, error) + // Platform queries the platform the sandbox is going to run containers on. + // containerd will use this to generate a proper OCI spec. + Platform(context.Context, *PlatformRequest) (*PlatformResponse, error) + // StopSandbox will stop existing sandbox instance + StopSandbox(context.Context, *StopSandboxRequest) (*StopSandboxResponse, error) + // WaitSandbox blocks until sandbox exits. + WaitSandbox(context.Context, *WaitSandboxRequest) (*WaitSandboxResponse, error) + // SandboxStatus will return current status of the running sandbox instance + SandboxStatus(context.Context, *SandboxStatusRequest) (*SandboxStatusResponse, error) + // PingSandbox is a lightweight API call to check whether sandbox alive. + PingSandbox(context.Context, *PingRequest) (*PingResponse, error) + // ShutdownSandbox must shutdown shim instance. + ShutdownSandbox(context.Context, *ShutdownSandboxRequest) (*ShutdownSandboxResponse, error) + // SandboxMetrics retrieves metrics about a sandbox instance. + SandboxMetrics(context.Context, *SandboxMetricsRequest) (*SandboxMetricsResponse, error) + mustEmbedUnimplementedSandboxServer() +} + +// UnimplementedSandboxServer must be embedded to have forward compatible implementations. +type UnimplementedSandboxServer struct { +} + +func (UnimplementedSandboxServer) CreateSandbox(context.Context, *CreateSandboxRequest) (*CreateSandboxResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateSandbox not implemented") +} +func (UnimplementedSandboxServer) StartSandbox(context.Context, *StartSandboxRequest) (*StartSandboxResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartSandbox not implemented") +} +func (UnimplementedSandboxServer) Platform(context.Context, *PlatformRequest) (*PlatformResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Platform not implemented") +} +func (UnimplementedSandboxServer) StopSandbox(context.Context, *StopSandboxRequest) (*StopSandboxResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StopSandbox not implemented") +} +func (UnimplementedSandboxServer) WaitSandbox(context.Context, *WaitSandboxRequest) (*WaitSandboxResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WaitSandbox not implemented") +} +func (UnimplementedSandboxServer) SandboxStatus(context.Context, *SandboxStatusRequest) (*SandboxStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SandboxStatus not implemented") +} +func (UnimplementedSandboxServer) PingSandbox(context.Context, *PingRequest) (*PingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PingSandbox not implemented") +} +func (UnimplementedSandboxServer) ShutdownSandbox(context.Context, *ShutdownSandboxRequest) (*ShutdownSandboxResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ShutdownSandbox not implemented") +} +func (UnimplementedSandboxServer) SandboxMetrics(context.Context, *SandboxMetricsRequest) (*SandboxMetricsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SandboxMetrics not implemented") +} +func (UnimplementedSandboxServer) mustEmbedUnimplementedSandboxServer() {} + +// UnsafeSandboxServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SandboxServer will +// result in compilation errors. +type UnsafeSandboxServer interface { + mustEmbedUnimplementedSandboxServer() +} + +func RegisterSandboxServer(s grpc.ServiceRegistrar, srv SandboxServer) { + s.RegisterService(&Sandbox_ServiceDesc, srv) +} + +func _Sandbox_CreateSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSandboxRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).CreateSandbox(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/CreateSandbox", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).CreateSandbox(ctx, req.(*CreateSandboxRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sandbox_StartSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartSandboxRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).StartSandbox(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/StartSandbox", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).StartSandbox(ctx, req.(*StartSandboxRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sandbox_Platform_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PlatformRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).Platform(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/Platform", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).Platform(ctx, req.(*PlatformRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sandbox_StopSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StopSandboxRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).StopSandbox(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/StopSandbox", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).StopSandbox(ctx, req.(*StopSandboxRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sandbox_WaitSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WaitSandboxRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).WaitSandbox(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/WaitSandbox", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).WaitSandbox(ctx, req.(*WaitSandboxRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sandbox_SandboxStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SandboxStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).SandboxStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/SandboxStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).SandboxStatus(ctx, req.(*SandboxStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sandbox_PingSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).PingSandbox(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/PingSandbox", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).PingSandbox(ctx, req.(*PingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sandbox_ShutdownSandbox_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShutdownSandboxRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).ShutdownSandbox(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/ShutdownSandbox", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).ShutdownSandbox(ctx, req.(*ShutdownSandboxRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sandbox_SandboxMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SandboxMetricsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SandboxServer).SandboxMetrics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.runtime.sandbox.v1.Sandbox/SandboxMetrics", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SandboxServer).SandboxMetrics(ctx, req.(*SandboxMetricsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Sandbox_ServiceDesc is the grpc.ServiceDesc for Sandbox service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Sandbox_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "containerd.runtime.sandbox.v1.Sandbox", + HandlerType: (*SandboxServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateSandbox", + Handler: _Sandbox_CreateSandbox_Handler, + }, + { + MethodName: "StartSandbox", + Handler: _Sandbox_StartSandbox_Handler, + }, + { + MethodName: "Platform", + Handler: _Sandbox_Platform_Handler, + }, + { + MethodName: "StopSandbox", + Handler: _Sandbox_StopSandbox_Handler, + }, + { + MethodName: "WaitSandbox", + Handler: _Sandbox_WaitSandbox_Handler, + }, + { + MethodName: "SandboxStatus", + Handler: _Sandbox_SandboxStatus_Handler, + }, + { + MethodName: "PingSandbox", + Handler: _Sandbox_PingSandbox_Handler, + }, + { + MethodName: "ShutdownSandbox", + Handler: _Sandbox_ShutdownSandbox_Handler, + }, + { + MethodName: "SandboxMetrics", + Handler: _Sandbox_SandboxMetrics_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "runtime/sandbox/v1/sandbox.proto", +} diff --git a/api/runtime/sandbox/v1/sandbox_ttrpc.pb.go b/api/runtime/sandbox/v1/sandbox_ttrpc.pb.go index ae5d05e0b464..7fb6ea2643fa 100644 --- a/api/runtime/sandbox/v1/sandbox_ttrpc.pb.go +++ b/api/runtime/sandbox/v1/sandbox_ttrpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. -// source: github.com/containerd/containerd/api/runtime/sandbox/v1/sandbox.proto +// source: runtime/sandbox/v1/sandbox.proto package sandbox import ( @@ -7,20 +7,28 @@ import ( ttrpc "github.com/containerd/ttrpc" ) -type SandboxService interface { +type TTRPCSandboxService interface { + CreateSandbox(context.Context, *CreateSandboxRequest) (*CreateSandboxResponse, error) StartSandbox(context.Context, *StartSandboxRequest) (*StartSandboxResponse, error) + Platform(context.Context, *PlatformRequest) (*PlatformResponse, error) StopSandbox(context.Context, *StopSandboxRequest) (*StopSandboxResponse, error) WaitSandbox(context.Context, *WaitSandboxRequest) (*WaitSandboxResponse, error) - UpdateSandbox(context.Context, *UpdateSandboxRequest) (*UpdateSandboxResponse, error) - PauseSandbox(context.Context, *PauseSandboxRequest) (*PauseSandboxResponse, error) - ResumeSandbox(context.Context, *ResumeSandboxRequest) (*ResumeSandboxResponse, error) SandboxStatus(context.Context, *SandboxStatusRequest) (*SandboxStatusResponse, error) PingSandbox(context.Context, *PingRequest) (*PingResponse, error) + ShutdownSandbox(context.Context, *ShutdownSandboxRequest) (*ShutdownSandboxResponse, error) + SandboxMetrics(context.Context, *SandboxMetricsRequest) (*SandboxMetricsResponse, error) } -func RegisterSandboxService(srv *ttrpc.Server, svc SandboxService) { +func RegisterTTRPCSandboxService(srv *ttrpc.Server, svc TTRPCSandboxService) { srv.RegisterService("containerd.runtime.sandbox.v1.Sandbox", &ttrpc.ServiceDesc{ Methods: map[string]ttrpc.Method{ + "CreateSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CreateSandboxRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.CreateSandbox(ctx, &req) + }, "StartSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { var req StartSandboxRequest if err := unmarshal(&req); err != nil { @@ -28,6 +36,13 @@ func RegisterSandboxService(srv *ttrpc.Server, svc SandboxService) { } return svc.StartSandbox(ctx, &req) }, + "Platform": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PlatformRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Platform(ctx, &req) + }, "StopSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { var req StopSandboxRequest if err := unmarshal(&req); err != nil { @@ -42,56 +57,57 @@ func RegisterSandboxService(srv *ttrpc.Server, svc SandboxService) { } return svc.WaitSandbox(ctx, &req) }, - "UpdateSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { - var req UpdateSandboxRequest + "SandboxStatus": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req SandboxStatusRequest if err := unmarshal(&req); err != nil { return nil, err } - return svc.UpdateSandbox(ctx, &req) + return svc.SandboxStatus(ctx, &req) }, - "PauseSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { - var req PauseSandboxRequest + "PingSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PingRequest if err := unmarshal(&req); err != nil { return nil, err } - return svc.PauseSandbox(ctx, &req) + return svc.PingSandbox(ctx, &req) }, - "ResumeSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { - var req ResumeSandboxRequest + "ShutdownSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ShutdownSandboxRequest if err := unmarshal(&req); err != nil { return nil, err } - return svc.ResumeSandbox(ctx, &req) + return svc.ShutdownSandbox(ctx, &req) }, - "SandboxStatus": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { - var req SandboxStatusRequest + "SandboxMetrics": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req SandboxMetricsRequest if err := unmarshal(&req); err != nil { return nil, err } - return svc.SandboxStatus(ctx, &req) - }, - "PingSandbox": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { - var req PingRequest - if err := unmarshal(&req); err != nil { - return nil, err - } - return svc.PingSandbox(ctx, &req) + return svc.SandboxMetrics(ctx, &req) }, }, }) } -type sandboxClient struct { +type ttrpcsandboxClient struct { client *ttrpc.Client } -func NewSandboxClient(client *ttrpc.Client) SandboxService { - return &sandboxClient{ +func NewTTRPCSandboxClient(client *ttrpc.Client) TTRPCSandboxService { + return &ttrpcsandboxClient{ client: client, } } -func (c *sandboxClient) StartSandbox(ctx context.Context, req *StartSandboxRequest) (*StartSandboxResponse, error) { +func (c *ttrpcsandboxClient) CreateSandbox(ctx context.Context, req *CreateSandboxRequest) (*CreateSandboxResponse, error) { + var resp CreateSandboxResponse + if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "CreateSandbox", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsandboxClient) StartSandbox(ctx context.Context, req *StartSandboxRequest) (*StartSandboxResponse, error) { var resp StartSandboxResponse if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "StartSandbox", req, &resp); err != nil { return nil, err @@ -99,57 +115,57 @@ func (c *sandboxClient) StartSandbox(ctx context.Context, req *StartSandboxReque return &resp, nil } -func (c *sandboxClient) StopSandbox(ctx context.Context, req *StopSandboxRequest) (*StopSandboxResponse, error) { - var resp StopSandboxResponse - if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "StopSandbox", req, &resp); err != nil { +func (c *ttrpcsandboxClient) Platform(ctx context.Context, req *PlatformRequest) (*PlatformResponse, error) { + var resp PlatformResponse + if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "Platform", req, &resp); err != nil { return nil, err } return &resp, nil } -func (c *sandboxClient) WaitSandbox(ctx context.Context, req *WaitSandboxRequest) (*WaitSandboxResponse, error) { - var resp WaitSandboxResponse - if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "WaitSandbox", req, &resp); err != nil { +func (c *ttrpcsandboxClient) StopSandbox(ctx context.Context, req *StopSandboxRequest) (*StopSandboxResponse, error) { + var resp StopSandboxResponse + if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "StopSandbox", req, &resp); err != nil { return nil, err } return &resp, nil } -func (c *sandboxClient) UpdateSandbox(ctx context.Context, req *UpdateSandboxRequest) (*UpdateSandboxResponse, error) { - var resp UpdateSandboxResponse - if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "UpdateSandbox", req, &resp); err != nil { +func (c *ttrpcsandboxClient) WaitSandbox(ctx context.Context, req *WaitSandboxRequest) (*WaitSandboxResponse, error) { + var resp WaitSandboxResponse + if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "WaitSandbox", req, &resp); err != nil { return nil, err } return &resp, nil } -func (c *sandboxClient) PauseSandbox(ctx context.Context, req *PauseSandboxRequest) (*PauseSandboxResponse, error) { - var resp PauseSandboxResponse - if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "PauseSandbox", req, &resp); err != nil { +func (c *ttrpcsandboxClient) SandboxStatus(ctx context.Context, req *SandboxStatusRequest) (*SandboxStatusResponse, error) { + var resp SandboxStatusResponse + if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "SandboxStatus", req, &resp); err != nil { return nil, err } return &resp, nil } -func (c *sandboxClient) ResumeSandbox(ctx context.Context, req *ResumeSandboxRequest) (*ResumeSandboxResponse, error) { - var resp ResumeSandboxResponse - if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "ResumeSandbox", req, &resp); err != nil { +func (c *ttrpcsandboxClient) PingSandbox(ctx context.Context, req *PingRequest) (*PingResponse, error) { + var resp PingResponse + if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "PingSandbox", req, &resp); err != nil { return nil, err } return &resp, nil } -func (c *sandboxClient) SandboxStatus(ctx context.Context, req *SandboxStatusRequest) (*SandboxStatusResponse, error) { - var resp SandboxStatusResponse - if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "SandboxStatus", req, &resp); err != nil { +func (c *ttrpcsandboxClient) ShutdownSandbox(ctx context.Context, req *ShutdownSandboxRequest) (*ShutdownSandboxResponse, error) { + var resp ShutdownSandboxResponse + if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "ShutdownSandbox", req, &resp); err != nil { return nil, err } return &resp, nil } -func (c *sandboxClient) PingSandbox(ctx context.Context, req *PingRequest) (*PingResponse, error) { - var resp PingResponse - if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "PingSandbox", req, &resp); err != nil { +func (c *ttrpcsandboxClient) SandboxMetrics(ctx context.Context, req *SandboxMetricsRequest) (*SandboxMetricsResponse, error) { + var resp SandboxMetricsResponse + if err := c.client.Call(ctx, "containerd.runtime.sandbox.v1.Sandbox", "SandboxMetrics", req, &resp); err != nil { return nil, err } return &resp, nil diff --git a/api/runtime/task/v2/shim.pb.go b/api/runtime/task/v2/shim.pb.go index 383e29db4012..e62f4e70d58e 100644 --- a/api/runtime/task/v2/shim.pb.go +++ b/api/runtime/task/v2/shim.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/runtime/task/v2/shim.proto +// protoc (unknown) +// source: runtime/task/v2/shim.proto package task @@ -60,7 +60,7 @@ type CreateTaskRequest struct { func (x *CreateTaskRequest) Reset() { *x = CreateTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[0] + mi := &file_runtime_task_v2_shim_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -73,7 +73,7 @@ func (x *CreateTaskRequest) String() string { func (*CreateTaskRequest) ProtoMessage() {} func (x *CreateTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[0] + mi := &file_runtime_task_v2_shim_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -86,7 +86,7 @@ func (x *CreateTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTaskRequest.ProtoReflect.Descriptor instead. func (*CreateTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{0} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{0} } func (x *CreateTaskRequest) GetID() string { @@ -170,7 +170,7 @@ type CreateTaskResponse struct { func (x *CreateTaskResponse) Reset() { *x = CreateTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[1] + mi := &file_runtime_task_v2_shim_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -183,7 +183,7 @@ func (x *CreateTaskResponse) String() string { func (*CreateTaskResponse) ProtoMessage() {} func (x *CreateTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[1] + mi := &file_runtime_task_v2_shim_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -196,7 +196,7 @@ func (x *CreateTaskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTaskResponse.ProtoReflect.Descriptor instead. func (*CreateTaskResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{1} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{1} } func (x *CreateTaskResponse) GetPid() uint32 { @@ -218,7 +218,7 @@ type DeleteRequest struct { func (x *DeleteRequest) Reset() { *x = DeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[2] + mi := &file_runtime_task_v2_shim_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -231,7 +231,7 @@ func (x *DeleteRequest) String() string { func (*DeleteRequest) ProtoMessage() {} func (x *DeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[2] + mi := &file_runtime_task_v2_shim_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -244,7 +244,7 @@ func (x *DeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead. func (*DeleteRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{2} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{2} } func (x *DeleteRequest) GetID() string { @@ -274,7 +274,7 @@ type DeleteResponse struct { func (x *DeleteResponse) Reset() { *x = DeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[3] + mi := &file_runtime_task_v2_shim_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -287,7 +287,7 @@ func (x *DeleteResponse) String() string { func (*DeleteResponse) ProtoMessage() {} func (x *DeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[3] + mi := &file_runtime_task_v2_shim_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -300,7 +300,7 @@ func (x *DeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteResponse.ProtoReflect.Descriptor instead. func (*DeleteResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{3} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{3} } func (x *DeleteResponse) GetPid() uint32 { @@ -341,7 +341,7 @@ type ExecProcessRequest struct { func (x *ExecProcessRequest) Reset() { *x = ExecProcessRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[4] + mi := &file_runtime_task_v2_shim_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -354,7 +354,7 @@ func (x *ExecProcessRequest) String() string { func (*ExecProcessRequest) ProtoMessage() {} func (x *ExecProcessRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[4] + mi := &file_runtime_task_v2_shim_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -367,7 +367,7 @@ func (x *ExecProcessRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecProcessRequest.ProtoReflect.Descriptor instead. func (*ExecProcessRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{4} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{4} } func (x *ExecProcessRequest) GetID() string { @@ -428,7 +428,7 @@ type ExecProcessResponse struct { func (x *ExecProcessResponse) Reset() { *x = ExecProcessResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[5] + mi := &file_runtime_task_v2_shim_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -441,7 +441,7 @@ func (x *ExecProcessResponse) String() string { func (*ExecProcessResponse) ProtoMessage() {} func (x *ExecProcessResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[5] + mi := &file_runtime_task_v2_shim_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -454,7 +454,7 @@ func (x *ExecProcessResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecProcessResponse.ProtoReflect.Descriptor instead. func (*ExecProcessResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{5} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{5} } type ResizePtyRequest struct { @@ -471,7 +471,7 @@ type ResizePtyRequest struct { func (x *ResizePtyRequest) Reset() { *x = ResizePtyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[6] + mi := &file_runtime_task_v2_shim_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -484,7 +484,7 @@ func (x *ResizePtyRequest) String() string { func (*ResizePtyRequest) ProtoMessage() {} func (x *ResizePtyRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[6] + mi := &file_runtime_task_v2_shim_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -497,7 +497,7 @@ func (x *ResizePtyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResizePtyRequest.ProtoReflect.Descriptor instead. func (*ResizePtyRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{6} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{6} } func (x *ResizePtyRequest) GetID() string { @@ -540,7 +540,7 @@ type StateRequest struct { func (x *StateRequest) Reset() { *x = StateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[7] + mi := &file_runtime_task_v2_shim_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -553,7 +553,7 @@ func (x *StateRequest) String() string { func (*StateRequest) ProtoMessage() {} func (x *StateRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[7] + mi := &file_runtime_task_v2_shim_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -566,7 +566,7 @@ func (x *StateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StateRequest.ProtoReflect.Descriptor instead. func (*StateRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{7} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{7} } func (x *StateRequest) GetID() string { @@ -604,7 +604,7 @@ type StateResponse struct { func (x *StateResponse) Reset() { *x = StateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[8] + mi := &file_runtime_task_v2_shim_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -617,7 +617,7 @@ func (x *StateResponse) String() string { func (*StateResponse) ProtoMessage() {} func (x *StateResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[8] + mi := &file_runtime_task_v2_shim_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -630,7 +630,7 @@ func (x *StateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StateResponse.ProtoReflect.Descriptor instead. func (*StateResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{8} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{8} } func (x *StateResponse) GetID() string { @@ -724,7 +724,7 @@ type KillRequest struct { func (x *KillRequest) Reset() { *x = KillRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[9] + mi := &file_runtime_task_v2_shim_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -737,7 +737,7 @@ func (x *KillRequest) String() string { func (*KillRequest) ProtoMessage() {} func (x *KillRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[9] + mi := &file_runtime_task_v2_shim_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -750,7 +750,7 @@ func (x *KillRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KillRequest.ProtoReflect.Descriptor instead. func (*KillRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{9} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{9} } func (x *KillRequest) GetID() string { @@ -794,7 +794,7 @@ type CloseIORequest struct { func (x *CloseIORequest) Reset() { *x = CloseIORequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[10] + mi := &file_runtime_task_v2_shim_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -807,7 +807,7 @@ func (x *CloseIORequest) String() string { func (*CloseIORequest) ProtoMessage() {} func (x *CloseIORequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[10] + mi := &file_runtime_task_v2_shim_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -820,7 +820,7 @@ func (x *CloseIORequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseIORequest.ProtoReflect.Descriptor instead. func (*CloseIORequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{10} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{10} } func (x *CloseIORequest) GetID() string { @@ -855,7 +855,7 @@ type PidsRequest struct { func (x *PidsRequest) Reset() { *x = PidsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[11] + mi := &file_runtime_task_v2_shim_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -868,7 +868,7 @@ func (x *PidsRequest) String() string { func (*PidsRequest) ProtoMessage() {} func (x *PidsRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[11] + mi := &file_runtime_task_v2_shim_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -881,7 +881,7 @@ func (x *PidsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PidsRequest.ProtoReflect.Descriptor instead. func (*PidsRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{11} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{11} } func (x *PidsRequest) GetID() string { @@ -902,7 +902,7 @@ type PidsResponse struct { func (x *PidsResponse) Reset() { *x = PidsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[12] + mi := &file_runtime_task_v2_shim_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -915,7 +915,7 @@ func (x *PidsResponse) String() string { func (*PidsResponse) ProtoMessage() {} func (x *PidsResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[12] + mi := &file_runtime_task_v2_shim_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -928,7 +928,7 @@ func (x *PidsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PidsResponse.ProtoReflect.Descriptor instead. func (*PidsResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{12} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{12} } func (x *PidsResponse) GetProcesses() []*task.ProcessInfo { @@ -951,7 +951,7 @@ type CheckpointTaskRequest struct { func (x *CheckpointTaskRequest) Reset() { *x = CheckpointTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[13] + mi := &file_runtime_task_v2_shim_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -964,7 +964,7 @@ func (x *CheckpointTaskRequest) String() string { func (*CheckpointTaskRequest) ProtoMessage() {} func (x *CheckpointTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[13] + mi := &file_runtime_task_v2_shim_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -977,7 +977,7 @@ func (x *CheckpointTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckpointTaskRequest.ProtoReflect.Descriptor instead. func (*CheckpointTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{13} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{13} } func (x *CheckpointTaskRequest) GetID() string { @@ -1014,7 +1014,7 @@ type UpdateTaskRequest struct { func (x *UpdateTaskRequest) Reset() { *x = UpdateTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[14] + mi := &file_runtime_task_v2_shim_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1027,7 +1027,7 @@ func (x *UpdateTaskRequest) String() string { func (*UpdateTaskRequest) ProtoMessage() {} func (x *UpdateTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[14] + mi := &file_runtime_task_v2_shim_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1040,7 +1040,7 @@ func (x *UpdateTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTaskRequest.ProtoReflect.Descriptor instead. func (*UpdateTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{14} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{14} } func (x *UpdateTaskRequest) GetID() string { @@ -1076,7 +1076,7 @@ type StartRequest struct { func (x *StartRequest) Reset() { *x = StartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[15] + mi := &file_runtime_task_v2_shim_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1089,7 +1089,7 @@ func (x *StartRequest) String() string { func (*StartRequest) ProtoMessage() {} func (x *StartRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[15] + mi := &file_runtime_task_v2_shim_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1102,7 +1102,7 @@ func (x *StartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartRequest.ProtoReflect.Descriptor instead. func (*StartRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{15} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{15} } func (x *StartRequest) GetID() string { @@ -1130,7 +1130,7 @@ type StartResponse struct { func (x *StartResponse) Reset() { *x = StartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[16] + mi := &file_runtime_task_v2_shim_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1143,7 +1143,7 @@ func (x *StartResponse) String() string { func (*StartResponse) ProtoMessage() {} func (x *StartResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[16] + mi := &file_runtime_task_v2_shim_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1156,7 +1156,7 @@ func (x *StartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartResponse.ProtoReflect.Descriptor instead. func (*StartResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{16} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{16} } func (x *StartResponse) GetPid() uint32 { @@ -1178,7 +1178,7 @@ type WaitRequest struct { func (x *WaitRequest) Reset() { *x = WaitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[17] + mi := &file_runtime_task_v2_shim_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1191,7 +1191,7 @@ func (x *WaitRequest) String() string { func (*WaitRequest) ProtoMessage() {} func (x *WaitRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[17] + mi := &file_runtime_task_v2_shim_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1204,7 +1204,7 @@ func (x *WaitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitRequest.ProtoReflect.Descriptor instead. func (*WaitRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{17} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{17} } func (x *WaitRequest) GetID() string { @@ -1233,7 +1233,7 @@ type WaitResponse struct { func (x *WaitResponse) Reset() { *x = WaitResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[18] + mi := &file_runtime_task_v2_shim_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1246,7 +1246,7 @@ func (x *WaitResponse) String() string { func (*WaitResponse) ProtoMessage() {} func (x *WaitResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[18] + mi := &file_runtime_task_v2_shim_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1259,7 +1259,7 @@ func (x *WaitResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitResponse.ProtoReflect.Descriptor instead. func (*WaitResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{18} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{18} } func (x *WaitResponse) GetExitStatus() uint32 { @@ -1287,7 +1287,7 @@ type StatsRequest struct { func (x *StatsRequest) Reset() { *x = StatsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[19] + mi := &file_runtime_task_v2_shim_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1300,7 +1300,7 @@ func (x *StatsRequest) String() string { func (*StatsRequest) ProtoMessage() {} func (x *StatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[19] + mi := &file_runtime_task_v2_shim_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1313,7 +1313,7 @@ func (x *StatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatsRequest.ProtoReflect.Descriptor instead. func (*StatsRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{19} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{19} } func (x *StatsRequest) GetID() string { @@ -1334,7 +1334,7 @@ type StatsResponse struct { func (x *StatsResponse) Reset() { *x = StatsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[20] + mi := &file_runtime_task_v2_shim_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1347,7 +1347,7 @@ func (x *StatsResponse) String() string { func (*StatsResponse) ProtoMessage() {} func (x *StatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[20] + mi := &file_runtime_task_v2_shim_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1360,7 +1360,7 @@ func (x *StatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatsResponse.ProtoReflect.Descriptor instead. func (*StatsResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{20} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{20} } func (x *StatsResponse) GetStats() *anypb.Any { @@ -1381,7 +1381,7 @@ type ConnectRequest struct { func (x *ConnectRequest) Reset() { *x = ConnectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[21] + mi := &file_runtime_task_v2_shim_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1394,7 +1394,7 @@ func (x *ConnectRequest) String() string { func (*ConnectRequest) ProtoMessage() {} func (x *ConnectRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[21] + mi := &file_runtime_task_v2_shim_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1407,7 +1407,7 @@ func (x *ConnectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnectRequest.ProtoReflect.Descriptor instead. func (*ConnectRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{21} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{21} } func (x *ConnectRequest) GetID() string { @@ -1430,7 +1430,7 @@ type ConnectResponse struct { func (x *ConnectResponse) Reset() { *x = ConnectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[22] + mi := &file_runtime_task_v2_shim_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1443,7 +1443,7 @@ func (x *ConnectResponse) String() string { func (*ConnectResponse) ProtoMessage() {} func (x *ConnectResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[22] + mi := &file_runtime_task_v2_shim_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1456,7 +1456,7 @@ func (x *ConnectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnectResponse.ProtoReflect.Descriptor instead. func (*ConnectResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{22} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{22} } func (x *ConnectResponse) GetShimPid() uint32 { @@ -1492,7 +1492,7 @@ type ShutdownRequest struct { func (x *ShutdownRequest) Reset() { *x = ShutdownRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[23] + mi := &file_runtime_task_v2_shim_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1505,7 +1505,7 @@ func (x *ShutdownRequest) String() string { func (*ShutdownRequest) ProtoMessage() {} func (x *ShutdownRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[23] + mi := &file_runtime_task_v2_shim_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1518,7 +1518,7 @@ func (x *ShutdownRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ShutdownRequest.ProtoReflect.Descriptor instead. func (*ShutdownRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{23} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{23} } func (x *ShutdownRequest) GetID() string { @@ -1546,7 +1546,7 @@ type PauseRequest struct { func (x *PauseRequest) Reset() { *x = PauseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[24] + mi := &file_runtime_task_v2_shim_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1559,7 +1559,7 @@ func (x *PauseRequest) String() string { func (*PauseRequest) ProtoMessage() {} func (x *PauseRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[24] + mi := &file_runtime_task_v2_shim_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1572,7 +1572,7 @@ func (x *PauseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseRequest.ProtoReflect.Descriptor instead. func (*PauseRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{24} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{24} } func (x *PauseRequest) GetID() string { @@ -1593,7 +1593,7 @@ type ResumeRequest struct { func (x *ResumeRequest) Reset() { *x = ResumeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[25] + mi := &file_runtime_task_v2_shim_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1606,7 +1606,7 @@ func (x *ResumeRequest) String() string { func (*ResumeRequest) ProtoMessage() {} func (x *ResumeRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[25] + mi := &file_runtime_task_v2_shim_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1619,7 +1619,7 @@ func (x *ResumeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResumeRequest.ProtoReflect.Descriptor instead. func (*ResumeRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP(), []int{25} + return file_runtime_task_v2_shim_proto_rawDescGZIP(), []int{25} } func (x *ResumeRequest) GetID() string { @@ -1629,287 +1629,280 @@ func (x *ResumeRequest) GetID() string { return "" } -var File_github_com_containerd_containerd_api_runtime_task_v2_shim_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDesc = []byte{ - 0x0a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x74, - 0x61, 0x73, 0x6b, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x68, 0x69, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, - 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xcb, 0x02, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, +var File_runtime_task_v2_shim_proto protoreflect.FileDescriptor + +var file_runtime_task_v2_shim_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x76, + 0x32, 0x2f, 0x73, 0x68, 0x69, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, + 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xcb, 0x02, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, + 0x66, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, + 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x64, 0x65, 0x72, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x26, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x0d, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, + 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, + 0x63, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, + 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x22, 0xc9, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, - 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, + 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, + 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, - 0x65, 0x72, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, + 0x65, 0x72, 0x72, 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x26, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, - 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, - 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x22, 0xc9, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, - 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x64, 0x65, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, - 0x72, 0x72, 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x15, 0x0a, 0x13, - 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x37, - 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0xd3, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, - 0x70, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, - 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, - 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x60, 0x0a, - 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, - 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0x4f, 0x0a, 0x0e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x64, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, - 0x22, 0x1d, 0x0a, 0x0b, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x4e, 0x0a, 0x0c, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3e, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, - 0x6b, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2e, 0x0a, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf1, 0x01, 0x0a, - 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x15, 0x0a, + 0x13, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x37, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0xd3, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x70, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, + 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, + 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, + 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x65, + 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, + 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x60, + 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, + 0x22, 0x4f, 0x0a, 0x0e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x37, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x64, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, + 0x6e, 0x22, 0x1d, 0x0a, 0x0b, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x0d, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x36, 0x0a, 0x0b, - 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, - 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, - 0x65, 0x63, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x0c, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x1e, - 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, - 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x22, 0x4e, 0x0a, 0x0c, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3e, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x22, 0x6b, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2e, 0x0a, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x20, 0x0a, 0x0e, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x61, 0x0a, - 0x0f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x69, 0x6d, 0x5f, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x07, 0x73, 0x68, 0x69, 0x6d, 0x50, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, - 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, - 0x61, 0x73, 0x6b, 0x50, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x33, 0x0a, 0x0f, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf1, 0x01, + 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x6e, 0x6f, 0x77, 0x22, 0x1e, 0x0a, 0x0c, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1f, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, + 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x37, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x0d, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x36, 0x0a, + 0x0b, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, + 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, + 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x0c, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, + 0x1e, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x3b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x20, 0x0a, 0x0e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x61, + 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x69, 0x6d, 0x5f, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x68, 0x69, 0x6d, 0x50, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x74, 0x61, 0x73, 0x6b, 0x50, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x33, 0x0a, 0x0f, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x6e, 0x6f, 0x77, 0x22, 0x1e, 0x0a, 0x0c, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x32, 0x8a, 0x0a, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, - 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1f, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x32, 0x8a, 0x0a, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, + 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x50, 0x69, 0x64, 0x73, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, - 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x50, 0x69, 0x64, 0x73, 0x12, 0x1f, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, - 0x76, 0x32, 0x2e, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x41, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, - 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x41, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x50, - 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x21, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, - 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x04, 0x4b, 0x69, 0x6c, - 0x6c, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0a, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x04, 0x45, 0x78, - 0x65, 0x63, 0x12, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x49, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, 0x12, - 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, - 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x45, 0x0a, - 0x07, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6c, - 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x25, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, - 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, - 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x69, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x53, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x68, 0x75, 0x74, - 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x04, 0x4b, 0x69, + 0x6c, 0x6c, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x04, 0x45, + 0x78, 0x65, 0x63, 0x12, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x76, 0x32, 0x3b, 0x74, 0x61, 0x73, 0x6b, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, + 0x12, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x45, + 0x0a, 0x07, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, + 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x69, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x69, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x53, + 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x68, 0x75, + 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x76, 0x32, 0x3b, 0x74, 0x61, 0x73, + 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescData = file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDesc + file_runtime_task_v2_shim_proto_rawDescOnce sync.Once + file_runtime_task_v2_shim_proto_rawDescData = file_runtime_task_v2_shim_proto_rawDesc ) -func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescData) +func file_runtime_task_v2_shim_proto_rawDescGZIP() []byte { + file_runtime_task_v2_shim_proto_rawDescOnce.Do(func() { + file_runtime_task_v2_shim_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_task_v2_shim_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDescData + return file_runtime_task_v2_shim_proto_rawDescData } -var file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes = make([]protoimpl.MessageInfo, 27) -var file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_goTypes = []interface{}{ +var file_runtime_task_v2_shim_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_runtime_task_v2_shim_proto_goTypes = []interface{}{ (*CreateTaskRequest)(nil), // 0: containerd.task.v2.CreateTaskRequest (*CreateTaskResponse)(nil), // 1: containerd.task.v2.CreateTaskResponse (*DeleteRequest)(nil), // 2: containerd.task.v2.DeleteRequest @@ -1944,7 +1937,7 @@ var file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_goTypes (*task.ProcessInfo)(nil), // 31: containerd.v1.types.ProcessInfo (*emptypb.Empty)(nil), // 32: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_depIdxs = []int32{ +var file_runtime_task_v2_shim_proto_depIdxs = []int32{ 27, // 0: containerd.task.v2.CreateTaskRequest.rootfs:type_name -> containerd.types.Mount 28, // 1: containerd.task.v2.CreateTaskRequest.options:type_name -> google.protobuf.Any 29, // 2: containerd.task.v2.DeleteResponse.exited_at:type_name -> google.protobuf.Timestamp @@ -1998,13 +1991,13 @@ var file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_depIdxs 0, // [0:12] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() } -func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() { - if File_github_com_containerd_containerd_api_runtime_task_v2_shim_proto != nil { +func init() { file_runtime_task_v2_shim_proto_init() } +func file_runtime_task_v2_shim_proto_init() { + if File_runtime_task_v2_shim_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateTaskRequest); i { case 0: return &v.state @@ -2016,7 +2009,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateTaskResponse); i { case 0: return &v.state @@ -2028,7 +2021,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteRequest); i { case 0: return &v.state @@ -2040,7 +2033,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteResponse); i { case 0: return &v.state @@ -2052,7 +2045,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecProcessRequest); i { case 0: return &v.state @@ -2064,7 +2057,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecProcessResponse); i { case 0: return &v.state @@ -2076,7 +2069,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResizePtyRequest); i { case 0: return &v.state @@ -2088,7 +2081,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StateRequest); i { case 0: return &v.state @@ -2100,7 +2093,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StateResponse); i { case 0: return &v.state @@ -2112,7 +2105,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KillRequest); i { case 0: return &v.state @@ -2124,7 +2117,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloseIORequest); i { case 0: return &v.state @@ -2136,7 +2129,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PidsRequest); i { case 0: return &v.state @@ -2148,7 +2141,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PidsResponse); i { case 0: return &v.state @@ -2160,7 +2153,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckpointTaskRequest); i { case 0: return &v.state @@ -2172,7 +2165,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateTaskRequest); i { case 0: return &v.state @@ -2184,7 +2177,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartRequest); i { case 0: return &v.state @@ -2196,7 +2189,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartResponse); i { case 0: return &v.state @@ -2208,7 +2201,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WaitRequest); i { case 0: return &v.state @@ -2220,7 +2213,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WaitResponse); i { case 0: return &v.state @@ -2232,7 +2225,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatsRequest); i { case 0: return &v.state @@ -2244,7 +2237,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatsResponse); i { case 0: return &v.state @@ -2256,7 +2249,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConnectRequest); i { case 0: return &v.state @@ -2268,7 +2261,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConnectResponse); i { case 0: return &v.state @@ -2280,7 +2273,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ShutdownRequest); i { case 0: return &v.state @@ -2292,7 +2285,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PauseRequest); i { case 0: return &v.state @@ -2304,7 +2297,7 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() return nil } } - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_runtime_task_v2_shim_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResumeRequest); i { case 0: return &v.state @@ -2321,18 +2314,18 @@ func file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_init() out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDesc, + RawDescriptor: file_runtime_task_v2_shim_proto_rawDesc, NumEnums: 0, NumMessages: 27, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_msgTypes, + GoTypes: file_runtime_task_v2_shim_proto_goTypes, + DependencyIndexes: file_runtime_task_v2_shim_proto_depIdxs, + MessageInfos: file_runtime_task_v2_shim_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_runtime_task_v2_shim_proto = out.File - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_rawDesc = nil - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_goTypes = nil - file_github_com_containerd_containerd_api_runtime_task_v2_shim_proto_depIdxs = nil + File_runtime_task_v2_shim_proto = out.File + file_runtime_task_v2_shim_proto_rawDesc = nil + file_runtime_task_v2_shim_proto_goTypes = nil + file_runtime_task_v2_shim_proto_depIdxs = nil } diff --git a/api/runtime/task/v2/shim.proto b/api/runtime/task/v2/shim.proto index aad1bd66fdf7..6d9c36e03b5f 100644 --- a/api/runtime/task/v2/shim.proto +++ b/api/runtime/task/v2/shim.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -21,8 +21,8 @@ package containerd.task.v2; import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; -import "github.com/containerd/containerd/api/types/mount.proto"; -import "github.com/containerd/containerd/api/types/task/task.proto"; +import "types/mount.proto"; +import "types/task/task.proto"; option go_package = "github.com/containerd/containerd/api/runtime/task/v2;task"; @@ -31,171 +31,170 @@ option go_package = "github.com/containerd/containerd/api/runtime/task/v2;task"; // each container and allows reattaching to the IO and receiving the exit status // for the container processes. service Task { - rpc State(StateRequest) returns (StateResponse); - rpc Create(CreateTaskRequest) returns (CreateTaskResponse); - rpc Start(StartRequest) returns (StartResponse); - rpc Delete(DeleteRequest) returns (DeleteResponse); - rpc Pids(PidsRequest) returns (PidsResponse); - rpc Pause(PauseRequest) returns (google.protobuf.Empty); - rpc Resume(ResumeRequest) returns (google.protobuf.Empty); - rpc Checkpoint(CheckpointTaskRequest) returns (google.protobuf.Empty); - rpc Kill(KillRequest) returns (google.protobuf.Empty); - rpc Exec(ExecProcessRequest) returns (google.protobuf.Empty); - rpc ResizePty(ResizePtyRequest) returns (google.protobuf.Empty); - rpc CloseIO(CloseIORequest) returns (google.protobuf.Empty); - rpc Update(UpdateTaskRequest) returns (google.protobuf.Empty); - rpc Wait(WaitRequest) returns (WaitResponse); - rpc Stats(StatsRequest) returns (StatsResponse); - rpc Connect(ConnectRequest) returns (ConnectResponse); - rpc Shutdown(ShutdownRequest) returns (google.protobuf.Empty); + rpc State(StateRequest) returns (StateResponse); + rpc Create(CreateTaskRequest) returns (CreateTaskResponse); + rpc Start(StartRequest) returns (StartResponse); + rpc Delete(DeleteRequest) returns (DeleteResponse); + rpc Pids(PidsRequest) returns (PidsResponse); + rpc Pause(PauseRequest) returns (google.protobuf.Empty); + rpc Resume(ResumeRequest) returns (google.protobuf.Empty); + rpc Checkpoint(CheckpointTaskRequest) returns (google.protobuf.Empty); + rpc Kill(KillRequest) returns (google.protobuf.Empty); + rpc Exec(ExecProcessRequest) returns (google.protobuf.Empty); + rpc ResizePty(ResizePtyRequest) returns (google.protobuf.Empty); + rpc CloseIO(CloseIORequest) returns (google.protobuf.Empty); + rpc Update(UpdateTaskRequest) returns (google.protobuf.Empty); + rpc Wait(WaitRequest) returns (WaitResponse); + rpc Stats(StatsRequest) returns (StatsResponse); + rpc Connect(ConnectRequest) returns (ConnectResponse); + rpc Shutdown(ShutdownRequest) returns (google.protobuf.Empty); } message CreateTaskRequest { - string id = 1; - string bundle = 2; - repeated containerd.types.Mount rootfs = 3; - bool terminal = 4; - string stdin = 5; - string stdout = 6; - string stderr = 7; - string checkpoint = 8; - string parent_checkpoint = 9; - google.protobuf.Any options = 10; + string id = 1; + string bundle = 2; + repeated containerd.types.Mount rootfs = 3; + bool terminal = 4; + string stdin = 5; + string stdout = 6; + string stderr = 7; + string checkpoint = 8; + string parent_checkpoint = 9; + google.protobuf.Any options = 10; } message CreateTaskResponse { - uint32 pid = 1; + uint32 pid = 1; } message DeleteRequest { - string id = 1; - string exec_id = 2; + string id = 1; + string exec_id = 2; } message DeleteResponse { - uint32 pid = 1; - uint32 exit_status = 2; - google.protobuf.Timestamp exited_at = 3; + uint32 pid = 1; + uint32 exit_status = 2; + google.protobuf.Timestamp exited_at = 3; } message ExecProcessRequest { - string id = 1; - string exec_id = 2; - bool terminal = 3; - string stdin = 4; - string stdout = 5; - string stderr = 6; - google.protobuf.Any spec = 7; + string id = 1; + string exec_id = 2; + bool terminal = 3; + string stdin = 4; + string stdout = 5; + string stderr = 6; + google.protobuf.Any spec = 7; } -message ExecProcessResponse { -} +message ExecProcessResponse {} message ResizePtyRequest { - string id = 1; - string exec_id = 2; - uint32 width = 3; - uint32 height = 4; + string id = 1; + string exec_id = 2; + uint32 width = 3; + uint32 height = 4; } message StateRequest { - string id = 1; - string exec_id = 2; + string id = 1; + string exec_id = 2; } message StateResponse { - string id = 1; - string bundle = 2; - uint32 pid = 3; - containerd.v1.types.Status status = 4; - string stdin = 5; - string stdout = 6; - string stderr = 7; - bool terminal = 8; - uint32 exit_status = 9; - google.protobuf.Timestamp exited_at = 10; - string exec_id = 11; + string id = 1; + string bundle = 2; + uint32 pid = 3; + containerd.v1.types.Status status = 4; + string stdin = 5; + string stdout = 6; + string stderr = 7; + bool terminal = 8; + uint32 exit_status = 9; + google.protobuf.Timestamp exited_at = 10; + string exec_id = 11; } message KillRequest { - string id = 1; - string exec_id = 2; - uint32 signal = 3; - bool all = 4; + string id = 1; + string exec_id = 2; + uint32 signal = 3; + bool all = 4; } message CloseIORequest { - string id = 1; - string exec_id = 2; - bool stdin = 3; + string id = 1; + string exec_id = 2; + bool stdin = 3; } message PidsRequest { - string id = 1; + string id = 1; } message PidsResponse { - repeated containerd.v1.types.ProcessInfo processes = 1; + repeated containerd.v1.types.ProcessInfo processes = 1; } message CheckpointTaskRequest { - string id = 1; - string path = 2; - google.protobuf.Any options = 3; + string id = 1; + string path = 2; + google.protobuf.Any options = 3; } message UpdateTaskRequest { - string id = 1; - google.protobuf.Any resources = 2; - map annotations = 3; + string id = 1; + google.protobuf.Any resources = 2; + map annotations = 3; } message StartRequest { - string id = 1; - string exec_id = 2; + string id = 1; + string exec_id = 2; } message StartResponse { - uint32 pid = 1; + uint32 pid = 1; } message WaitRequest { - string id = 1; - string exec_id = 2; + string id = 1; + string exec_id = 2; } message WaitResponse { - uint32 exit_status = 1; - google.protobuf.Timestamp exited_at = 2; + uint32 exit_status = 1; + google.protobuf.Timestamp exited_at = 2; } message StatsRequest { - string id = 1; + string id = 1; } message StatsResponse { - google.protobuf.Any stats = 1; + google.protobuf.Any stats = 1; } message ConnectRequest { - string id = 1; + string id = 1; } message ConnectResponse { - uint32 shim_pid = 1; - uint32 task_pid = 2; - string version = 3; + uint32 shim_pid = 1; + uint32 task_pid = 2; + string version = 3; } message ShutdownRequest { - string id = 1; - bool now = 2; + string id = 1; + bool now = 2; } message PauseRequest { - string id = 1; + string id = 1; } message ResumeRequest { - string id = 1; + string id = 1; } diff --git a/api/runtime/task/v2/shim_ttrpc.pb.go b/api/runtime/task/v2/shim_ttrpc.pb.go index 1210371c2c95..822d7dadd61a 100644 --- a/api/runtime/task/v2/shim_ttrpc.pb.go +++ b/api/runtime/task/v2/shim_ttrpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. -// source: github.com/containerd/containerd/api/runtime/task/v2/shim.proto +// source: runtime/task/v2/shim.proto package task import ( @@ -8,7 +8,7 @@ import ( emptypb "google.golang.org/protobuf/types/known/emptypb" ) -type TaskService interface { +type TTRPCTaskService interface { State(context.Context, *StateRequest) (*StateResponse, error) Create(context.Context, *CreateTaskRequest) (*CreateTaskResponse, error) Start(context.Context, *StartRequest) (*StartResponse, error) @@ -28,7 +28,7 @@ type TaskService interface { Shutdown(context.Context, *ShutdownRequest) (*emptypb.Empty, error) } -func RegisterTaskService(srv *ttrpc.Server, svc TaskService) { +func RegisterTTRPCTaskService(srv *ttrpc.Server, svc TTRPCTaskService) { srv.RegisterService("containerd.task.v2.Task", &ttrpc.ServiceDesc{ Methods: map[string]ttrpc.Method{ "State": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { @@ -154,17 +154,17 @@ func RegisterTaskService(srv *ttrpc.Server, svc TaskService) { }) } -type taskClient struct { +type ttrpctaskClient struct { client *ttrpc.Client } -func NewTaskClient(client *ttrpc.Client) TaskService { - return &taskClient{ +func NewTTRPCTaskClient(client *ttrpc.Client) TTRPCTaskService { + return &ttrpctaskClient{ client: client, } } -func (c *taskClient) State(ctx context.Context, req *StateRequest) (*StateResponse, error) { +func (c *ttrpctaskClient) State(ctx context.Context, req *StateRequest) (*StateResponse, error) { var resp StateResponse if err := c.client.Call(ctx, "containerd.task.v2.Task", "State", req, &resp); err != nil { return nil, err @@ -172,7 +172,7 @@ func (c *taskClient) State(ctx context.Context, req *StateRequest) (*StateRespon return &resp, nil } -func (c *taskClient) Create(ctx context.Context, req *CreateTaskRequest) (*CreateTaskResponse, error) { +func (c *ttrpctaskClient) Create(ctx context.Context, req *CreateTaskRequest) (*CreateTaskResponse, error) { var resp CreateTaskResponse if err := c.client.Call(ctx, "containerd.task.v2.Task", "Create", req, &resp); err != nil { return nil, err @@ -180,7 +180,7 @@ func (c *taskClient) Create(ctx context.Context, req *CreateTaskRequest) (*Creat return &resp, nil } -func (c *taskClient) Start(ctx context.Context, req *StartRequest) (*StartResponse, error) { +func (c *ttrpctaskClient) Start(ctx context.Context, req *StartRequest) (*StartResponse, error) { var resp StartResponse if err := c.client.Call(ctx, "containerd.task.v2.Task", "Start", req, &resp); err != nil { return nil, err @@ -188,7 +188,7 @@ func (c *taskClient) Start(ctx context.Context, req *StartRequest) (*StartRespon return &resp, nil } -func (c *taskClient) Delete(ctx context.Context, req *DeleteRequest) (*DeleteResponse, error) { +func (c *ttrpctaskClient) Delete(ctx context.Context, req *DeleteRequest) (*DeleteResponse, error) { var resp DeleteResponse if err := c.client.Call(ctx, "containerd.task.v2.Task", "Delete", req, &resp); err != nil { return nil, err @@ -196,7 +196,7 @@ func (c *taskClient) Delete(ctx context.Context, req *DeleteRequest) (*DeleteRes return &resp, nil } -func (c *taskClient) Pids(ctx context.Context, req *PidsRequest) (*PidsResponse, error) { +func (c *ttrpctaskClient) Pids(ctx context.Context, req *PidsRequest) (*PidsResponse, error) { var resp PidsResponse if err := c.client.Call(ctx, "containerd.task.v2.Task", "Pids", req, &resp); err != nil { return nil, err @@ -204,7 +204,7 @@ func (c *taskClient) Pids(ctx context.Context, req *PidsRequest) (*PidsResponse, return &resp, nil } -func (c *taskClient) Pause(ctx context.Context, req *PauseRequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) Pause(ctx context.Context, req *PauseRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "Pause", req, &resp); err != nil { return nil, err @@ -212,7 +212,7 @@ func (c *taskClient) Pause(ctx context.Context, req *PauseRequest) (*emptypb.Emp return &resp, nil } -func (c *taskClient) Resume(ctx context.Context, req *ResumeRequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) Resume(ctx context.Context, req *ResumeRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "Resume", req, &resp); err != nil { return nil, err @@ -220,7 +220,7 @@ func (c *taskClient) Resume(ctx context.Context, req *ResumeRequest) (*emptypb.E return &resp, nil } -func (c *taskClient) Checkpoint(ctx context.Context, req *CheckpointTaskRequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) Checkpoint(ctx context.Context, req *CheckpointTaskRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "Checkpoint", req, &resp); err != nil { return nil, err @@ -228,7 +228,7 @@ func (c *taskClient) Checkpoint(ctx context.Context, req *CheckpointTaskRequest) return &resp, nil } -func (c *taskClient) Kill(ctx context.Context, req *KillRequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) Kill(ctx context.Context, req *KillRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "Kill", req, &resp); err != nil { return nil, err @@ -236,7 +236,7 @@ func (c *taskClient) Kill(ctx context.Context, req *KillRequest) (*emptypb.Empty return &resp, nil } -func (c *taskClient) Exec(ctx context.Context, req *ExecProcessRequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) Exec(ctx context.Context, req *ExecProcessRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "Exec", req, &resp); err != nil { return nil, err @@ -244,7 +244,7 @@ func (c *taskClient) Exec(ctx context.Context, req *ExecProcessRequest) (*emptyp return &resp, nil } -func (c *taskClient) ResizePty(ctx context.Context, req *ResizePtyRequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) ResizePty(ctx context.Context, req *ResizePtyRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "ResizePty", req, &resp); err != nil { return nil, err @@ -252,7 +252,7 @@ func (c *taskClient) ResizePty(ctx context.Context, req *ResizePtyRequest) (*emp return &resp, nil } -func (c *taskClient) CloseIO(ctx context.Context, req *CloseIORequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) CloseIO(ctx context.Context, req *CloseIORequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "CloseIO", req, &resp); err != nil { return nil, err @@ -260,7 +260,7 @@ func (c *taskClient) CloseIO(ctx context.Context, req *CloseIORequest) (*emptypb return &resp, nil } -func (c *taskClient) Update(ctx context.Context, req *UpdateTaskRequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) Update(ctx context.Context, req *UpdateTaskRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "Update", req, &resp); err != nil { return nil, err @@ -268,7 +268,7 @@ func (c *taskClient) Update(ctx context.Context, req *UpdateTaskRequest) (*empty return &resp, nil } -func (c *taskClient) Wait(ctx context.Context, req *WaitRequest) (*WaitResponse, error) { +func (c *ttrpctaskClient) Wait(ctx context.Context, req *WaitRequest) (*WaitResponse, error) { var resp WaitResponse if err := c.client.Call(ctx, "containerd.task.v2.Task", "Wait", req, &resp); err != nil { return nil, err @@ -276,7 +276,7 @@ func (c *taskClient) Wait(ctx context.Context, req *WaitRequest) (*WaitResponse, return &resp, nil } -func (c *taskClient) Stats(ctx context.Context, req *StatsRequest) (*StatsResponse, error) { +func (c *ttrpctaskClient) Stats(ctx context.Context, req *StatsRequest) (*StatsResponse, error) { var resp StatsResponse if err := c.client.Call(ctx, "containerd.task.v2.Task", "Stats", req, &resp); err != nil { return nil, err @@ -284,7 +284,7 @@ func (c *taskClient) Stats(ctx context.Context, req *StatsRequest) (*StatsRespon return &resp, nil } -func (c *taskClient) Connect(ctx context.Context, req *ConnectRequest) (*ConnectResponse, error) { +func (c *ttrpctaskClient) Connect(ctx context.Context, req *ConnectRequest) (*ConnectResponse, error) { var resp ConnectResponse if err := c.client.Call(ctx, "containerd.task.v2.Task", "Connect", req, &resp); err != nil { return nil, err @@ -292,7 +292,7 @@ func (c *taskClient) Connect(ctx context.Context, req *ConnectRequest) (*Connect return &resp, nil } -func (c *taskClient) Shutdown(ctx context.Context, req *ShutdownRequest) (*emptypb.Empty, error) { +func (c *ttrpctaskClient) Shutdown(ctx context.Context, req *ShutdownRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.task.v2.Task", "Shutdown", req, &resp); err != nil { return nil, err diff --git a/api/runtime/task/v3/doc.go b/api/runtime/task/v3/doc.go new file mode 100644 index 000000000000..f933dd8d41c4 --- /dev/null +++ b/api/runtime/task/v3/doc.go @@ -0,0 +1,17 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package task diff --git a/api/runtime/task/v3/shim.pb.go b/api/runtime/task/v3/shim.pb.go new file mode 100644 index 000000000000..588b41c6a9d1 --- /dev/null +++ b/api/runtime/task/v3/shim.pb.go @@ -0,0 +1,2331 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: runtime/task/v3/shim.proto + +package task + +import ( + types "github.com/containerd/containerd/api/types" + task "github.com/containerd/containerd/api/types/task" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CreateTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Bundle string `protobuf:"bytes,2,opt,name=bundle,proto3" json:"bundle,omitempty"` + Rootfs []*types.Mount `protobuf:"bytes,3,rep,name=rootfs,proto3" json:"rootfs,omitempty"` + Terminal bool `protobuf:"varint,4,opt,name=terminal,proto3" json:"terminal,omitempty"` + Stdin string `protobuf:"bytes,5,opt,name=stdin,proto3" json:"stdin,omitempty"` + Stdout string `protobuf:"bytes,6,opt,name=stdout,proto3" json:"stdout,omitempty"` + Stderr string `protobuf:"bytes,7,opt,name=stderr,proto3" json:"stderr,omitempty"` + Checkpoint string `protobuf:"bytes,8,opt,name=checkpoint,proto3" json:"checkpoint,omitempty"` + ParentCheckpoint string `protobuf:"bytes,9,opt,name=parent_checkpoint,json=parentCheckpoint,proto3" json:"parent_checkpoint,omitempty"` + Options *anypb.Any `protobuf:"bytes,10,opt,name=options,proto3" json:"options,omitempty"` +} + +func (x *CreateTaskRequest) Reset() { + *x = CreateTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTaskRequest) ProtoMessage() {} + +func (x *CreateTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTaskRequest.ProtoReflect.Descriptor instead. +func (*CreateTaskRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateTaskRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *CreateTaskRequest) GetBundle() string { + if x != nil { + return x.Bundle + } + return "" +} + +func (x *CreateTaskRequest) GetRootfs() []*types.Mount { + if x != nil { + return x.Rootfs + } + return nil +} + +func (x *CreateTaskRequest) GetTerminal() bool { + if x != nil { + return x.Terminal + } + return false +} + +func (x *CreateTaskRequest) GetStdin() string { + if x != nil { + return x.Stdin + } + return "" +} + +func (x *CreateTaskRequest) GetStdout() string { + if x != nil { + return x.Stdout + } + return "" +} + +func (x *CreateTaskRequest) GetStderr() string { + if x != nil { + return x.Stderr + } + return "" +} + +func (x *CreateTaskRequest) GetCheckpoint() string { + if x != nil { + return x.Checkpoint + } + return "" +} + +func (x *CreateTaskRequest) GetParentCheckpoint() string { + if x != nil { + return x.ParentCheckpoint + } + return "" +} + +func (x *CreateTaskRequest) GetOptions() *anypb.Any { + if x != nil { + return x.Options + } + return nil +} + +type CreateTaskResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *CreateTaskResponse) Reset() { + *x = CreateTaskResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTaskResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTaskResponse) ProtoMessage() {} + +func (x *CreateTaskResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTaskResponse.ProtoReflect.Descriptor instead. +func (*CreateTaskResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateTaskResponse) GetPid() uint32 { + if x != nil { + return x.Pid + } + return 0 +} + +type DeleteRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` +} + +func (x *DeleteRequest) Reset() { + *x = DeleteRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteRequest) ProtoMessage() {} + +func (x *DeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead. +func (*DeleteRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{2} +} + +func (x *DeleteRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *DeleteRequest) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +type DeleteResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` + ExitStatus uint32 `protobuf:"varint,2,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"` + ExitedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` +} + +func (x *DeleteResponse) Reset() { + *x = DeleteResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteResponse) ProtoMessage() {} + +func (x *DeleteResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteResponse.ProtoReflect.Descriptor instead. +func (*DeleteResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{3} +} + +func (x *DeleteResponse) GetPid() uint32 { + if x != nil { + return x.Pid + } + return 0 +} + +func (x *DeleteResponse) GetExitStatus() uint32 { + if x != nil { + return x.ExitStatus + } + return 0 +} + +func (x *DeleteResponse) GetExitedAt() *timestamppb.Timestamp { + if x != nil { + return x.ExitedAt + } + return nil +} + +type ExecProcessRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` + Terminal bool `protobuf:"varint,3,opt,name=terminal,proto3" json:"terminal,omitempty"` + Stdin string `protobuf:"bytes,4,opt,name=stdin,proto3" json:"stdin,omitempty"` + Stdout string `protobuf:"bytes,5,opt,name=stdout,proto3" json:"stdout,omitempty"` + Stderr string `protobuf:"bytes,6,opt,name=stderr,proto3" json:"stderr,omitempty"` + Spec *anypb.Any `protobuf:"bytes,7,opt,name=spec,proto3" json:"spec,omitempty"` +} + +func (x *ExecProcessRequest) Reset() { + *x = ExecProcessRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExecProcessRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExecProcessRequest) ProtoMessage() {} + +func (x *ExecProcessRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExecProcessRequest.ProtoReflect.Descriptor instead. +func (*ExecProcessRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{4} +} + +func (x *ExecProcessRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *ExecProcessRequest) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +func (x *ExecProcessRequest) GetTerminal() bool { + if x != nil { + return x.Terminal + } + return false +} + +func (x *ExecProcessRequest) GetStdin() string { + if x != nil { + return x.Stdin + } + return "" +} + +func (x *ExecProcessRequest) GetStdout() string { + if x != nil { + return x.Stdout + } + return "" +} + +func (x *ExecProcessRequest) GetStderr() string { + if x != nil { + return x.Stderr + } + return "" +} + +func (x *ExecProcessRequest) GetSpec() *anypb.Any { + if x != nil { + return x.Spec + } + return nil +} + +type ExecProcessResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ExecProcessResponse) Reset() { + *x = ExecProcessResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExecProcessResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExecProcessResponse) ProtoMessage() {} + +func (x *ExecProcessResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExecProcessResponse.ProtoReflect.Descriptor instead. +func (*ExecProcessResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{5} +} + +type ResizePtyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` + Width uint32 `protobuf:"varint,3,opt,name=width,proto3" json:"width,omitempty"` + Height uint32 `protobuf:"varint,4,opt,name=height,proto3" json:"height,omitempty"` +} + +func (x *ResizePtyRequest) Reset() { + *x = ResizePtyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResizePtyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResizePtyRequest) ProtoMessage() {} + +func (x *ResizePtyRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResizePtyRequest.ProtoReflect.Descriptor instead. +func (*ResizePtyRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{6} +} + +func (x *ResizePtyRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *ResizePtyRequest) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +func (x *ResizePtyRequest) GetWidth() uint32 { + if x != nil { + return x.Width + } + return 0 +} + +func (x *ResizePtyRequest) GetHeight() uint32 { + if x != nil { + return x.Height + } + return 0 +} + +type StateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` +} + +func (x *StateRequest) Reset() { + *x = StateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StateRequest) ProtoMessage() {} + +func (x *StateRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StateRequest.ProtoReflect.Descriptor instead. +func (*StateRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{7} +} + +func (x *StateRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *StateRequest) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +type StateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Bundle string `protobuf:"bytes,2,opt,name=bundle,proto3" json:"bundle,omitempty"` + Pid uint32 `protobuf:"varint,3,opt,name=pid,proto3" json:"pid,omitempty"` + Status task.Status `protobuf:"varint,4,opt,name=status,proto3,enum=containerd.v1.types.Status" json:"status,omitempty"` + Stdin string `protobuf:"bytes,5,opt,name=stdin,proto3" json:"stdin,omitempty"` + Stdout string `protobuf:"bytes,6,opt,name=stdout,proto3" json:"stdout,omitempty"` + Stderr string `protobuf:"bytes,7,opt,name=stderr,proto3" json:"stderr,omitempty"` + Terminal bool `protobuf:"varint,8,opt,name=terminal,proto3" json:"terminal,omitempty"` + ExitStatus uint32 `protobuf:"varint,9,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"` + ExitedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` + ExecID string `protobuf:"bytes,11,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` +} + +func (x *StateResponse) Reset() { + *x = StateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StateResponse) ProtoMessage() {} + +func (x *StateResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StateResponse.ProtoReflect.Descriptor instead. +func (*StateResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{8} +} + +func (x *StateResponse) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *StateResponse) GetBundle() string { + if x != nil { + return x.Bundle + } + return "" +} + +func (x *StateResponse) GetPid() uint32 { + if x != nil { + return x.Pid + } + return 0 +} + +func (x *StateResponse) GetStatus() task.Status { + if x != nil { + return x.Status + } + return task.Status(0) +} + +func (x *StateResponse) GetStdin() string { + if x != nil { + return x.Stdin + } + return "" +} + +func (x *StateResponse) GetStdout() string { + if x != nil { + return x.Stdout + } + return "" +} + +func (x *StateResponse) GetStderr() string { + if x != nil { + return x.Stderr + } + return "" +} + +func (x *StateResponse) GetTerminal() bool { + if x != nil { + return x.Terminal + } + return false +} + +func (x *StateResponse) GetExitStatus() uint32 { + if x != nil { + return x.ExitStatus + } + return 0 +} + +func (x *StateResponse) GetExitedAt() *timestamppb.Timestamp { + if x != nil { + return x.ExitedAt + } + return nil +} + +func (x *StateResponse) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +type KillRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` + Signal uint32 `protobuf:"varint,3,opt,name=signal,proto3" json:"signal,omitempty"` + All bool `protobuf:"varint,4,opt,name=all,proto3" json:"all,omitempty"` +} + +func (x *KillRequest) Reset() { + *x = KillRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KillRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KillRequest) ProtoMessage() {} + +func (x *KillRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KillRequest.ProtoReflect.Descriptor instead. +func (*KillRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{9} +} + +func (x *KillRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *KillRequest) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +func (x *KillRequest) GetSignal() uint32 { + if x != nil { + return x.Signal + } + return 0 +} + +func (x *KillRequest) GetAll() bool { + if x != nil { + return x.All + } + return false +} + +type CloseIORequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` + Stdin bool `protobuf:"varint,3,opt,name=stdin,proto3" json:"stdin,omitempty"` +} + +func (x *CloseIORequest) Reset() { + *x = CloseIORequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CloseIORequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloseIORequest) ProtoMessage() {} + +func (x *CloseIORequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloseIORequest.ProtoReflect.Descriptor instead. +func (*CloseIORequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{10} +} + +func (x *CloseIORequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *CloseIORequest) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +func (x *CloseIORequest) GetStdin() bool { + if x != nil { + return x.Stdin + } + return false +} + +type PidsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *PidsRequest) Reset() { + *x = PidsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PidsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PidsRequest) ProtoMessage() {} + +func (x *PidsRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PidsRequest.ProtoReflect.Descriptor instead. +func (*PidsRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{11} +} + +func (x *PidsRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +type PidsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Processes []*task.ProcessInfo `protobuf:"bytes,1,rep,name=processes,proto3" json:"processes,omitempty"` +} + +func (x *PidsResponse) Reset() { + *x = PidsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PidsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PidsResponse) ProtoMessage() {} + +func (x *PidsResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PidsResponse.ProtoReflect.Descriptor instead. +func (*PidsResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{12} +} + +func (x *PidsResponse) GetProcesses() []*task.ProcessInfo { + if x != nil { + return x.Processes + } + return nil +} + +type CheckpointTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Options *anypb.Any `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` +} + +func (x *CheckpointTaskRequest) Reset() { + *x = CheckpointTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckpointTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckpointTaskRequest) ProtoMessage() {} + +func (x *CheckpointTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckpointTaskRequest.ProtoReflect.Descriptor instead. +func (*CheckpointTaskRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{13} +} + +func (x *CheckpointTaskRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *CheckpointTaskRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *CheckpointTaskRequest) GetOptions() *anypb.Any { + if x != nil { + return x.Options + } + return nil +} + +type UpdateTaskRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Resources *anypb.Any `protobuf:"bytes,2,opt,name=resources,proto3" json:"resources,omitempty"` + Annotations map[string]string `protobuf:"bytes,3,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *UpdateTaskRequest) Reset() { + *x = UpdateTaskRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateTaskRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTaskRequest) ProtoMessage() {} + +func (x *UpdateTaskRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTaskRequest.ProtoReflect.Descriptor instead. +func (*UpdateTaskRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{14} +} + +func (x *UpdateTaskRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *UpdateTaskRequest) GetResources() *anypb.Any { + if x != nil { + return x.Resources + } + return nil +} + +func (x *UpdateTaskRequest) GetAnnotations() map[string]string { + if x != nil { + return x.Annotations + } + return nil +} + +type StartRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` +} + +func (x *StartRequest) Reset() { + *x = StartRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartRequest) ProtoMessage() {} + +func (x *StartRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartRequest.ProtoReflect.Descriptor instead. +func (*StartRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{15} +} + +func (x *StartRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *StartRequest) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +type StartResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pid uint32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` +} + +func (x *StartResponse) Reset() { + *x = StartResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartResponse) ProtoMessage() {} + +func (x *StartResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartResponse.ProtoReflect.Descriptor instead. +func (*StartResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{16} +} + +func (x *StartResponse) GetPid() uint32 { + if x != nil { + return x.Pid + } + return 0 +} + +type WaitRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` +} + +func (x *WaitRequest) Reset() { + *x = WaitRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WaitRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WaitRequest) ProtoMessage() {} + +func (x *WaitRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WaitRequest.ProtoReflect.Descriptor instead. +func (*WaitRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{17} +} + +func (x *WaitRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *WaitRequest) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +type WaitResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExitStatus uint32 `protobuf:"varint,1,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"` + ExitedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` +} + +func (x *WaitResponse) Reset() { + *x = WaitResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WaitResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WaitResponse) ProtoMessage() {} + +func (x *WaitResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WaitResponse.ProtoReflect.Descriptor instead. +func (*WaitResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{18} +} + +func (x *WaitResponse) GetExitStatus() uint32 { + if x != nil { + return x.ExitStatus + } + return 0 +} + +func (x *WaitResponse) GetExitedAt() *timestamppb.Timestamp { + if x != nil { + return x.ExitedAt + } + return nil +} + +type StatsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *StatsRequest) Reset() { + *x = StatsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatsRequest) ProtoMessage() {} + +func (x *StatsRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatsRequest.ProtoReflect.Descriptor instead. +func (*StatsRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{19} +} + +func (x *StatsRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +type StatsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Stats *anypb.Any `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` +} + +func (x *StatsResponse) Reset() { + *x = StatsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatsResponse) ProtoMessage() {} + +func (x *StatsResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatsResponse.ProtoReflect.Descriptor instead. +func (*StatsResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{20} +} + +func (x *StatsResponse) GetStats() *anypb.Any { + if x != nil { + return x.Stats + } + return nil +} + +type ConnectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *ConnectRequest) Reset() { + *x = ConnectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConnectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnectRequest) ProtoMessage() {} + +func (x *ConnectRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConnectRequest.ProtoReflect.Descriptor instead. +func (*ConnectRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{21} +} + +func (x *ConnectRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +type ConnectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ShimPid uint32 `protobuf:"varint,1,opt,name=shim_pid,json=shimPid,proto3" json:"shim_pid,omitempty"` + TaskPid uint32 `protobuf:"varint,2,opt,name=task_pid,json=taskPid,proto3" json:"task_pid,omitempty"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *ConnectResponse) Reset() { + *x = ConnectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConnectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnectResponse) ProtoMessage() {} + +func (x *ConnectResponse) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConnectResponse.ProtoReflect.Descriptor instead. +func (*ConnectResponse) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{22} +} + +func (x *ConnectResponse) GetShimPid() uint32 { + if x != nil { + return x.ShimPid + } + return 0 +} + +func (x *ConnectResponse) GetTaskPid() uint32 { + if x != nil { + return x.TaskPid + } + return 0 +} + +func (x *ConnectResponse) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +type ShutdownRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Now bool `protobuf:"varint,2,opt,name=now,proto3" json:"now,omitempty"` +} + +func (x *ShutdownRequest) Reset() { + *x = ShutdownRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShutdownRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShutdownRequest) ProtoMessage() {} + +func (x *ShutdownRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ShutdownRequest.ProtoReflect.Descriptor instead. +func (*ShutdownRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{23} +} + +func (x *ShutdownRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *ShutdownRequest) GetNow() bool { + if x != nil { + return x.Now + } + return false +} + +type PauseRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *PauseRequest) Reset() { + *x = PauseRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PauseRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PauseRequest) ProtoMessage() {} + +func (x *PauseRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PauseRequest.ProtoReflect.Descriptor instead. +func (*PauseRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{24} +} + +func (x *PauseRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +type ResumeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *ResumeRequest) Reset() { + *x = ResumeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_runtime_task_v3_shim_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResumeRequest) ProtoMessage() {} + +func (x *ResumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_runtime_task_v3_shim_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResumeRequest.ProtoReflect.Descriptor instead. +func (*ResumeRequest) Descriptor() ([]byte, []int) { + return file_runtime_task_v3_shim_proto_rawDescGZIP(), []int{25} +} + +func (x *ResumeRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +var File_runtime_task_v3_shim_proto protoreflect.FileDescriptor + +var file_runtime_task_v3_shim_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x76, + 0x33, 0x2f, 0x73, 0x68, 0x69, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, + 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xcb, 0x02, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, + 0x66, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, + 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x64, 0x65, 0x72, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x26, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x0d, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, + 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, + 0x63, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, + 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x22, 0xc9, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, + 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, + 0x65, 0x72, 0x72, 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x15, 0x0a, + 0x13, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x37, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0xd3, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x70, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, + 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, + 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, + 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x65, + 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, + 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x60, + 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x10, + 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, + 0x22, 0x4f, 0x0a, 0x0e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x64, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, + 0x6e, 0x22, 0x1d, 0x0a, 0x0b, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x4e, 0x0a, 0x0c, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3e, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x22, 0x6b, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2e, 0x0a, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf1, 0x01, + 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, + 0x33, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x37, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x0d, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x36, 0x0a, + 0x0b, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, + 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, + 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x0c, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, + 0x1e, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x3b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x20, 0x0a, 0x0e, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x61, + 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x69, 0x6d, 0x5f, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x68, 0x69, 0x6d, 0x50, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x74, 0x61, 0x73, 0x6b, 0x50, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x33, 0x0a, 0x0f, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x6e, 0x6f, 0x77, 0x22, 0x1e, 0x0a, 0x0c, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1f, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x32, 0x8a, 0x0a, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, + 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x50, 0x69, 0x64, 0x73, 0x12, 0x1f, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, + 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x41, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, + 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x21, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, + 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0a, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x04, 0x4b, 0x69, + 0x6c, 0x6c, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x04, 0x45, + 0x78, 0x65, 0x63, 0x12, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x12, 0x49, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, + 0x12, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x45, + 0x0a, 0x07, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x49, + 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x57, 0x61, 0x69, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x57, 0x61, 0x69, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x05, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x53, + 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x68, 0x75, + 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x76, 0x33, 0x3b, 0x74, 0x61, 0x73, + 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_runtime_task_v3_shim_proto_rawDescOnce sync.Once + file_runtime_task_v3_shim_proto_rawDescData = file_runtime_task_v3_shim_proto_rawDesc +) + +func file_runtime_task_v3_shim_proto_rawDescGZIP() []byte { + file_runtime_task_v3_shim_proto_rawDescOnce.Do(func() { + file_runtime_task_v3_shim_proto_rawDescData = protoimpl.X.CompressGZIP(file_runtime_task_v3_shim_proto_rawDescData) + }) + return file_runtime_task_v3_shim_proto_rawDescData +} + +var file_runtime_task_v3_shim_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_runtime_task_v3_shim_proto_goTypes = []interface{}{ + (*CreateTaskRequest)(nil), // 0: containerd.task.v3.CreateTaskRequest + (*CreateTaskResponse)(nil), // 1: containerd.task.v3.CreateTaskResponse + (*DeleteRequest)(nil), // 2: containerd.task.v3.DeleteRequest + (*DeleteResponse)(nil), // 3: containerd.task.v3.DeleteResponse + (*ExecProcessRequest)(nil), // 4: containerd.task.v3.ExecProcessRequest + (*ExecProcessResponse)(nil), // 5: containerd.task.v3.ExecProcessResponse + (*ResizePtyRequest)(nil), // 6: containerd.task.v3.ResizePtyRequest + (*StateRequest)(nil), // 7: containerd.task.v3.StateRequest + (*StateResponse)(nil), // 8: containerd.task.v3.StateResponse + (*KillRequest)(nil), // 9: containerd.task.v3.KillRequest + (*CloseIORequest)(nil), // 10: containerd.task.v3.CloseIORequest + (*PidsRequest)(nil), // 11: containerd.task.v3.PidsRequest + (*PidsResponse)(nil), // 12: containerd.task.v3.PidsResponse + (*CheckpointTaskRequest)(nil), // 13: containerd.task.v3.CheckpointTaskRequest + (*UpdateTaskRequest)(nil), // 14: containerd.task.v3.UpdateTaskRequest + (*StartRequest)(nil), // 15: containerd.task.v3.StartRequest + (*StartResponse)(nil), // 16: containerd.task.v3.StartResponse + (*WaitRequest)(nil), // 17: containerd.task.v3.WaitRequest + (*WaitResponse)(nil), // 18: containerd.task.v3.WaitResponse + (*StatsRequest)(nil), // 19: containerd.task.v3.StatsRequest + (*StatsResponse)(nil), // 20: containerd.task.v3.StatsResponse + (*ConnectRequest)(nil), // 21: containerd.task.v3.ConnectRequest + (*ConnectResponse)(nil), // 22: containerd.task.v3.ConnectResponse + (*ShutdownRequest)(nil), // 23: containerd.task.v3.ShutdownRequest + (*PauseRequest)(nil), // 24: containerd.task.v3.PauseRequest + (*ResumeRequest)(nil), // 25: containerd.task.v3.ResumeRequest + nil, // 26: containerd.task.v3.UpdateTaskRequest.AnnotationsEntry + (*types.Mount)(nil), // 27: containerd.types.Mount + (*anypb.Any)(nil), // 28: google.protobuf.Any + (*timestamppb.Timestamp)(nil), // 29: google.protobuf.Timestamp + (task.Status)(0), // 30: containerd.v1.types.Status + (*task.ProcessInfo)(nil), // 31: containerd.v1.types.ProcessInfo + (*emptypb.Empty)(nil), // 32: google.protobuf.Empty +} +var file_runtime_task_v3_shim_proto_depIdxs = []int32{ + 27, // 0: containerd.task.v3.CreateTaskRequest.rootfs:type_name -> containerd.types.Mount + 28, // 1: containerd.task.v3.CreateTaskRequest.options:type_name -> google.protobuf.Any + 29, // 2: containerd.task.v3.DeleteResponse.exited_at:type_name -> google.protobuf.Timestamp + 28, // 3: containerd.task.v3.ExecProcessRequest.spec:type_name -> google.protobuf.Any + 30, // 4: containerd.task.v3.StateResponse.status:type_name -> containerd.v1.types.Status + 29, // 5: containerd.task.v3.StateResponse.exited_at:type_name -> google.protobuf.Timestamp + 31, // 6: containerd.task.v3.PidsResponse.processes:type_name -> containerd.v1.types.ProcessInfo + 28, // 7: containerd.task.v3.CheckpointTaskRequest.options:type_name -> google.protobuf.Any + 28, // 8: containerd.task.v3.UpdateTaskRequest.resources:type_name -> google.protobuf.Any + 26, // 9: containerd.task.v3.UpdateTaskRequest.annotations:type_name -> containerd.task.v3.UpdateTaskRequest.AnnotationsEntry + 29, // 10: containerd.task.v3.WaitResponse.exited_at:type_name -> google.protobuf.Timestamp + 28, // 11: containerd.task.v3.StatsResponse.stats:type_name -> google.protobuf.Any + 7, // 12: containerd.task.v3.Task.State:input_type -> containerd.task.v3.StateRequest + 0, // 13: containerd.task.v3.Task.Create:input_type -> containerd.task.v3.CreateTaskRequest + 15, // 14: containerd.task.v3.Task.Start:input_type -> containerd.task.v3.StartRequest + 2, // 15: containerd.task.v3.Task.Delete:input_type -> containerd.task.v3.DeleteRequest + 11, // 16: containerd.task.v3.Task.Pids:input_type -> containerd.task.v3.PidsRequest + 24, // 17: containerd.task.v3.Task.Pause:input_type -> containerd.task.v3.PauseRequest + 25, // 18: containerd.task.v3.Task.Resume:input_type -> containerd.task.v3.ResumeRequest + 13, // 19: containerd.task.v3.Task.Checkpoint:input_type -> containerd.task.v3.CheckpointTaskRequest + 9, // 20: containerd.task.v3.Task.Kill:input_type -> containerd.task.v3.KillRequest + 4, // 21: containerd.task.v3.Task.Exec:input_type -> containerd.task.v3.ExecProcessRequest + 6, // 22: containerd.task.v3.Task.ResizePty:input_type -> containerd.task.v3.ResizePtyRequest + 10, // 23: containerd.task.v3.Task.CloseIO:input_type -> containerd.task.v3.CloseIORequest + 14, // 24: containerd.task.v3.Task.Update:input_type -> containerd.task.v3.UpdateTaskRequest + 17, // 25: containerd.task.v3.Task.Wait:input_type -> containerd.task.v3.WaitRequest + 19, // 26: containerd.task.v3.Task.Stats:input_type -> containerd.task.v3.StatsRequest + 21, // 27: containerd.task.v3.Task.Connect:input_type -> containerd.task.v3.ConnectRequest + 23, // 28: containerd.task.v3.Task.Shutdown:input_type -> containerd.task.v3.ShutdownRequest + 8, // 29: containerd.task.v3.Task.State:output_type -> containerd.task.v3.StateResponse + 1, // 30: containerd.task.v3.Task.Create:output_type -> containerd.task.v3.CreateTaskResponse + 16, // 31: containerd.task.v3.Task.Start:output_type -> containerd.task.v3.StartResponse + 3, // 32: containerd.task.v3.Task.Delete:output_type -> containerd.task.v3.DeleteResponse + 12, // 33: containerd.task.v3.Task.Pids:output_type -> containerd.task.v3.PidsResponse + 32, // 34: containerd.task.v3.Task.Pause:output_type -> google.protobuf.Empty + 32, // 35: containerd.task.v3.Task.Resume:output_type -> google.protobuf.Empty + 32, // 36: containerd.task.v3.Task.Checkpoint:output_type -> google.protobuf.Empty + 32, // 37: containerd.task.v3.Task.Kill:output_type -> google.protobuf.Empty + 32, // 38: containerd.task.v3.Task.Exec:output_type -> google.protobuf.Empty + 32, // 39: containerd.task.v3.Task.ResizePty:output_type -> google.protobuf.Empty + 32, // 40: containerd.task.v3.Task.CloseIO:output_type -> google.protobuf.Empty + 32, // 41: containerd.task.v3.Task.Update:output_type -> google.protobuf.Empty + 18, // 42: containerd.task.v3.Task.Wait:output_type -> containerd.task.v3.WaitResponse + 20, // 43: containerd.task.v3.Task.Stats:output_type -> containerd.task.v3.StatsResponse + 22, // 44: containerd.task.v3.Task.Connect:output_type -> containerd.task.v3.ConnectResponse + 32, // 45: containerd.task.v3.Task.Shutdown:output_type -> google.protobuf.Empty + 29, // [29:46] is the sub-list for method output_type + 12, // [12:29] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name +} + +func init() { file_runtime_task_v3_shim_proto_init() } +func file_runtime_task_v3_shim_proto_init() { + if File_runtime_task_v3_shim_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_runtime_task_v3_shim_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTaskResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExecProcessRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExecProcessResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResizePtyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KillRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CloseIORequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PidsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PidsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckpointTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateTaskRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WaitRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WaitResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConnectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConnectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ShutdownRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PauseRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_runtime_task_v3_shim_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResumeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_runtime_task_v3_shim_proto_rawDesc, + NumEnums: 0, + NumMessages: 27, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_runtime_task_v3_shim_proto_goTypes, + DependencyIndexes: file_runtime_task_v3_shim_proto_depIdxs, + MessageInfos: file_runtime_task_v3_shim_proto_msgTypes, + }.Build() + File_runtime_task_v3_shim_proto = out.File + file_runtime_task_v3_shim_proto_rawDesc = nil + file_runtime_task_v3_shim_proto_goTypes = nil + file_runtime_task_v3_shim_proto_depIdxs = nil +} diff --git a/api/runtime/task/v3/shim.proto b/api/runtime/task/v3/shim.proto new file mode 100644 index 000000000000..2dffd52db80a --- /dev/null +++ b/api/runtime/task/v3/shim.proto @@ -0,0 +1,200 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.task.v3; + +import "google/protobuf/any.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; +import "types/mount.proto"; +import "types/task/task.proto"; + +option go_package = "github.com/containerd/containerd/api/runtime/task/v3;task"; + +// Shim service is launched for each container and is responsible for owning the IO +// for the container and its additional processes. The shim is also the parent of +// each container and allows reattaching to the IO and receiving the exit status +// for the container processes. +service Task { + rpc State(StateRequest) returns (StateResponse); + rpc Create(CreateTaskRequest) returns (CreateTaskResponse); + rpc Start(StartRequest) returns (StartResponse); + rpc Delete(DeleteRequest) returns (DeleteResponse); + rpc Pids(PidsRequest) returns (PidsResponse); + rpc Pause(PauseRequest) returns (google.protobuf.Empty); + rpc Resume(ResumeRequest) returns (google.protobuf.Empty); + rpc Checkpoint(CheckpointTaskRequest) returns (google.protobuf.Empty); + rpc Kill(KillRequest) returns (google.protobuf.Empty); + rpc Exec(ExecProcessRequest) returns (google.protobuf.Empty); + rpc ResizePty(ResizePtyRequest) returns (google.protobuf.Empty); + rpc CloseIO(CloseIORequest) returns (google.protobuf.Empty); + rpc Update(UpdateTaskRequest) returns (google.protobuf.Empty); + rpc Wait(WaitRequest) returns (WaitResponse); + rpc Stats(StatsRequest) returns (StatsResponse); + rpc Connect(ConnectRequest) returns (ConnectResponse); + rpc Shutdown(ShutdownRequest) returns (google.protobuf.Empty); +} + +message CreateTaskRequest { + string id = 1; + string bundle = 2; + repeated containerd.types.Mount rootfs = 3; + bool terminal = 4; + string stdin = 5; + string stdout = 6; + string stderr = 7; + string checkpoint = 8; + string parent_checkpoint = 9; + google.protobuf.Any options = 10; +} + +message CreateTaskResponse { + uint32 pid = 1; +} + +message DeleteRequest { + string id = 1; + string exec_id = 2; +} + +message DeleteResponse { + uint32 pid = 1; + uint32 exit_status = 2; + google.protobuf.Timestamp exited_at = 3; +} + +message ExecProcessRequest { + string id = 1; + string exec_id = 2; + bool terminal = 3; + string stdin = 4; + string stdout = 5; + string stderr = 6; + google.protobuf.Any spec = 7; +} + +message ExecProcessResponse {} + +message ResizePtyRequest { + string id = 1; + string exec_id = 2; + uint32 width = 3; + uint32 height = 4; +} + +message StateRequest { + string id = 1; + string exec_id = 2; +} + +message StateResponse { + string id = 1; + string bundle = 2; + uint32 pid = 3; + containerd.v1.types.Status status = 4; + string stdin = 5; + string stdout = 6; + string stderr = 7; + bool terminal = 8; + uint32 exit_status = 9; + google.protobuf.Timestamp exited_at = 10; + string exec_id = 11; +} + +message KillRequest { + string id = 1; + string exec_id = 2; + uint32 signal = 3; + bool all = 4; +} + +message CloseIORequest { + string id = 1; + string exec_id = 2; + bool stdin = 3; +} + +message PidsRequest { + string id = 1; +} + +message PidsResponse { + repeated containerd.v1.types.ProcessInfo processes = 1; +} + +message CheckpointTaskRequest { + string id = 1; + string path = 2; + google.protobuf.Any options = 3; +} + +message UpdateTaskRequest { + string id = 1; + google.protobuf.Any resources = 2; + map annotations = 3; +} + +message StartRequest { + string id = 1; + string exec_id = 2; +} + +message StartResponse { + uint32 pid = 1; +} + +message WaitRequest { + string id = 1; + string exec_id = 2; +} + +message WaitResponse { + uint32 exit_status = 1; + google.protobuf.Timestamp exited_at = 2; +} + +message StatsRequest { + string id = 1; +} + +message StatsResponse { + google.protobuf.Any stats = 1; +} + +message ConnectRequest { + string id = 1; +} + +message ConnectResponse { + uint32 shim_pid = 1; + uint32 task_pid = 2; + string version = 3; +} + +message ShutdownRequest { + string id = 1; + bool now = 2; +} + +message PauseRequest { + string id = 1; +} + +message ResumeRequest { + string id = 1; +} diff --git a/api/runtime/task/v3/shim_grpc.pb.go b/api/runtime/task/v3/shim_grpc.pb.go new file mode 100644 index 000000000000..c3d45cf83500 --- /dev/null +++ b/api/runtime/task/v3/shim_grpc.pb.go @@ -0,0 +1,684 @@ +//go:build !no_grpc + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: runtime/task/v3/shim.proto + +package task + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// TaskClient is the client API for Task service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type TaskClient interface { + State(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error) + Create(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*CreateTaskResponse, error) + Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*StartResponse, error) + Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) + Pids(ctx context.Context, in *PidsRequest, opts ...grpc.CallOption) (*PidsResponse, error) + Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Resume(ctx context.Context, in *ResumeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Checkpoint(ctx context.Context, in *CheckpointTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Kill(ctx context.Context, in *KillRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Exec(ctx context.Context, in *ExecProcessRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + ResizePty(ctx context.Context, in *ResizePtyRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + CloseIO(ctx context.Context, in *CloseIORequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Update(ctx context.Context, in *UpdateTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Wait(ctx context.Context, in *WaitRequest, opts ...grpc.CallOption) (*WaitResponse, error) + Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (*StatsResponse, error) + Connect(ctx context.Context, in *ConnectRequest, opts ...grpc.CallOption) (*ConnectResponse, error) + Shutdown(ctx context.Context, in *ShutdownRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type taskClient struct { + cc grpc.ClientConnInterface +} + +func NewTaskClient(cc grpc.ClientConnInterface) TaskClient { + return &taskClient{cc} +} + +func (c *taskClient) State(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error) { + out := new(StateResponse) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/State", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Create(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*CreateTaskResponse, error) { + out := new(CreateTaskResponse) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Create", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*StartResponse, error) { + out := new(StartResponse) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Start", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Delete(ctx context.Context, in *DeleteRequest, opts ...grpc.CallOption) (*DeleteResponse, error) { + out := new(DeleteResponse) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Delete", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Pids(ctx context.Context, in *PidsRequest, opts ...grpc.CallOption) (*PidsResponse, error) { + out := new(PidsResponse) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Pids", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Pause(ctx context.Context, in *PauseRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Pause", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Resume(ctx context.Context, in *ResumeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Resume", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Checkpoint(ctx context.Context, in *CheckpointTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Checkpoint", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Kill(ctx context.Context, in *KillRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Kill", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Exec(ctx context.Context, in *ExecProcessRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Exec", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) ResizePty(ctx context.Context, in *ResizePtyRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/ResizePty", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) CloseIO(ctx context.Context, in *CloseIORequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/CloseIO", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Update(ctx context.Context, in *UpdateTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Update", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Wait(ctx context.Context, in *WaitRequest, opts ...grpc.CallOption) (*WaitResponse, error) { + out := new(WaitResponse) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Wait", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (*StatsResponse, error) { + out := new(StatsResponse) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Stats", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Connect(ctx context.Context, in *ConnectRequest, opts ...grpc.CallOption) (*ConnectResponse, error) { + out := new(ConnectResponse) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Connect", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *taskClient) Shutdown(ctx context.Context, in *ShutdownRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.task.v3.Task/Shutdown", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// TaskServer is the server API for Task service. +// All implementations must embed UnimplementedTaskServer +// for forward compatibility +type TaskServer interface { + State(context.Context, *StateRequest) (*StateResponse, error) + Create(context.Context, *CreateTaskRequest) (*CreateTaskResponse, error) + Start(context.Context, *StartRequest) (*StartResponse, error) + Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) + Pids(context.Context, *PidsRequest) (*PidsResponse, error) + Pause(context.Context, *PauseRequest) (*emptypb.Empty, error) + Resume(context.Context, *ResumeRequest) (*emptypb.Empty, error) + Checkpoint(context.Context, *CheckpointTaskRequest) (*emptypb.Empty, error) + Kill(context.Context, *KillRequest) (*emptypb.Empty, error) + Exec(context.Context, *ExecProcessRequest) (*emptypb.Empty, error) + ResizePty(context.Context, *ResizePtyRequest) (*emptypb.Empty, error) + CloseIO(context.Context, *CloseIORequest) (*emptypb.Empty, error) + Update(context.Context, *UpdateTaskRequest) (*emptypb.Empty, error) + Wait(context.Context, *WaitRequest) (*WaitResponse, error) + Stats(context.Context, *StatsRequest) (*StatsResponse, error) + Connect(context.Context, *ConnectRequest) (*ConnectResponse, error) + Shutdown(context.Context, *ShutdownRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedTaskServer() +} + +// UnimplementedTaskServer must be embedded to have forward compatible implementations. +type UnimplementedTaskServer struct { +} + +func (UnimplementedTaskServer) State(context.Context, *StateRequest) (*StateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method State not implemented") +} +func (UnimplementedTaskServer) Create(context.Context, *CreateTaskRequest) (*CreateTaskResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedTaskServer) Start(context.Context, *StartRequest) (*StartResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Start not implemented") +} +func (UnimplementedTaskServer) Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedTaskServer) Pids(context.Context, *PidsRequest) (*PidsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Pids not implemented") +} +func (UnimplementedTaskServer) Pause(context.Context, *PauseRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Pause not implemented") +} +func (UnimplementedTaskServer) Resume(context.Context, *ResumeRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Resume not implemented") +} +func (UnimplementedTaskServer) Checkpoint(context.Context, *CheckpointTaskRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Checkpoint not implemented") +} +func (UnimplementedTaskServer) Kill(context.Context, *KillRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Kill not implemented") +} +func (UnimplementedTaskServer) Exec(context.Context, *ExecProcessRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Exec not implemented") +} +func (UnimplementedTaskServer) ResizePty(context.Context, *ResizePtyRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResizePty not implemented") +} +func (UnimplementedTaskServer) CloseIO(context.Context, *CloseIORequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method CloseIO not implemented") +} +func (UnimplementedTaskServer) Update(context.Context, *UpdateTaskRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedTaskServer) Wait(context.Context, *WaitRequest) (*WaitResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Wait not implemented") +} +func (UnimplementedTaskServer) Stats(context.Context, *StatsRequest) (*StatsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Stats not implemented") +} +func (UnimplementedTaskServer) Connect(context.Context, *ConnectRequest) (*ConnectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Connect not implemented") +} +func (UnimplementedTaskServer) Shutdown(context.Context, *ShutdownRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Shutdown not implemented") +} +func (UnimplementedTaskServer) mustEmbedUnimplementedTaskServer() {} + +// UnsafeTaskServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to TaskServer will +// result in compilation errors. +type UnsafeTaskServer interface { + mustEmbedUnimplementedTaskServer() +} + +func RegisterTaskServer(s grpc.ServiceRegistrar, srv TaskServer) { + s.RegisterService(&Task_ServiceDesc, srv) +} + +func _Task_State_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).State(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/State", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).State(ctx, req.(*StateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Create", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Create(ctx, req.(*CreateTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Start_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Start(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Start", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Start(ctx, req.(*StartRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Delete", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Delete(ctx, req.(*DeleteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Pids_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PidsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Pids(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Pids", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Pids(ctx, req.(*PidsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Pause_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PauseRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Pause(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Pause", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Pause(ctx, req.(*PauseRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Resume_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResumeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Resume(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Resume", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Resume(ctx, req.(*ResumeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Checkpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckpointTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Checkpoint(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Checkpoint", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Checkpoint(ctx, req.(*CheckpointTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Kill_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(KillRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Kill(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Kill", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Kill(ctx, req.(*KillRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Exec_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExecProcessRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Exec(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Exec", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Exec(ctx, req.(*ExecProcessRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_ResizePty_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResizePtyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).ResizePty(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/ResizePty", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).ResizePty(ctx, req.(*ResizePtyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_CloseIO_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CloseIORequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).CloseIO(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/CloseIO", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).CloseIO(ctx, req.(*CloseIORequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTaskRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Update", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Update(ctx, req.(*UpdateTaskRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Wait_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WaitRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Wait(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Wait", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Wait(ctx, req.(*WaitRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Stats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Stats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Stats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Stats(ctx, req.(*StatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Connect_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ConnectRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Connect(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Connect", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Connect(ctx, req.(*ConnectRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Task_Shutdown_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShutdownRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TaskServer).Shutdown(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.task.v3.Task/Shutdown", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TaskServer).Shutdown(ctx, req.(*ShutdownRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Task_ServiceDesc is the grpc.ServiceDesc for Task service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Task_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "containerd.task.v3.Task", + HandlerType: (*TaskServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "State", + Handler: _Task_State_Handler, + }, + { + MethodName: "Create", + Handler: _Task_Create_Handler, + }, + { + MethodName: "Start", + Handler: _Task_Start_Handler, + }, + { + MethodName: "Delete", + Handler: _Task_Delete_Handler, + }, + { + MethodName: "Pids", + Handler: _Task_Pids_Handler, + }, + { + MethodName: "Pause", + Handler: _Task_Pause_Handler, + }, + { + MethodName: "Resume", + Handler: _Task_Resume_Handler, + }, + { + MethodName: "Checkpoint", + Handler: _Task_Checkpoint_Handler, + }, + { + MethodName: "Kill", + Handler: _Task_Kill_Handler, + }, + { + MethodName: "Exec", + Handler: _Task_Exec_Handler, + }, + { + MethodName: "ResizePty", + Handler: _Task_ResizePty_Handler, + }, + { + MethodName: "CloseIO", + Handler: _Task_CloseIO_Handler, + }, + { + MethodName: "Update", + Handler: _Task_Update_Handler, + }, + { + MethodName: "Wait", + Handler: _Task_Wait_Handler, + }, + { + MethodName: "Stats", + Handler: _Task_Stats_Handler, + }, + { + MethodName: "Connect", + Handler: _Task_Connect_Handler, + }, + { + MethodName: "Shutdown", + Handler: _Task_Shutdown_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "runtime/task/v3/shim.proto", +} diff --git a/api/runtime/task/v3/shim_ttrpc.pb.go b/api/runtime/task/v3/shim_ttrpc.pb.go new file mode 100644 index 000000000000..d06e0fba8502 --- /dev/null +++ b/api/runtime/task/v3/shim_ttrpc.pb.go @@ -0,0 +1,301 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: runtime/task/v3/shim.proto +package task + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCTaskService interface { + State(context.Context, *StateRequest) (*StateResponse, error) + Create(context.Context, *CreateTaskRequest) (*CreateTaskResponse, error) + Start(context.Context, *StartRequest) (*StartResponse, error) + Delete(context.Context, *DeleteRequest) (*DeleteResponse, error) + Pids(context.Context, *PidsRequest) (*PidsResponse, error) + Pause(context.Context, *PauseRequest) (*emptypb.Empty, error) + Resume(context.Context, *ResumeRequest) (*emptypb.Empty, error) + Checkpoint(context.Context, *CheckpointTaskRequest) (*emptypb.Empty, error) + Kill(context.Context, *KillRequest) (*emptypb.Empty, error) + Exec(context.Context, *ExecProcessRequest) (*emptypb.Empty, error) + ResizePty(context.Context, *ResizePtyRequest) (*emptypb.Empty, error) + CloseIO(context.Context, *CloseIORequest) (*emptypb.Empty, error) + Update(context.Context, *UpdateTaskRequest) (*emptypb.Empty, error) + Wait(context.Context, *WaitRequest) (*WaitResponse, error) + Stats(context.Context, *StatsRequest) (*StatsResponse, error) + Connect(context.Context, *ConnectRequest) (*ConnectResponse, error) + Shutdown(context.Context, *ShutdownRequest) (*emptypb.Empty, error) +} + +func RegisterTTRPCTaskService(srv *ttrpc.Server, svc TTRPCTaskService) { + srv.RegisterService("containerd.task.v3.Task", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "State": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.State(ctx, &req) + }, + "Create": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CreateTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Create(ctx, &req) + }, + "Start": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StartRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Start(ctx, &req) + }, + "Delete": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Delete(ctx, &req) + }, + "Pids": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PidsRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Pids(ctx, &req) + }, + "Pause": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PauseRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Pause(ctx, &req) + }, + "Resume": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ResumeRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Resume(ctx, &req) + }, + "Checkpoint": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CheckpointTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Checkpoint(ctx, &req) + }, + "Kill": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req KillRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Kill(ctx, &req) + }, + "Exec": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ExecProcessRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Exec(ctx, &req) + }, + "ResizePty": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ResizePtyRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.ResizePty(ctx, &req) + }, + "CloseIO": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CloseIORequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.CloseIO(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UpdateTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + "Wait": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req WaitRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Wait(ctx, &req) + }, + "Stats": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StatsRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Stats(ctx, &req) + }, + "Connect": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ConnectRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Connect(ctx, &req) + }, + "Shutdown": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ShutdownRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Shutdown(ctx, &req) + }, + }, + }) +} + +type ttrpctaskClient struct { + client *ttrpc.Client +} + +func NewTTRPCTaskClient(client *ttrpc.Client) TTRPCTaskService { + return &ttrpctaskClient{ + client: client, + } +} + +func (c *ttrpctaskClient) State(ctx context.Context, req *StateRequest) (*StateResponse, error) { + var resp StateResponse + if err := c.client.Call(ctx, "containerd.task.v3.Task", "State", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Create(ctx context.Context, req *CreateTaskRequest) (*CreateTaskResponse, error) { + var resp CreateTaskResponse + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Create", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Start(ctx context.Context, req *StartRequest) (*StartResponse, error) { + var resp StartResponse + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Start", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Delete(ctx context.Context, req *DeleteRequest) (*DeleteResponse, error) { + var resp DeleteResponse + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Delete", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Pids(ctx context.Context, req *PidsRequest) (*PidsResponse, error) { + var resp PidsResponse + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Pids", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Pause(ctx context.Context, req *PauseRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Pause", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Resume(ctx context.Context, req *ResumeRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Resume", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Checkpoint(ctx context.Context, req *CheckpointTaskRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Checkpoint", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Kill(ctx context.Context, req *KillRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Kill", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Exec(ctx context.Context, req *ExecProcessRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Exec", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) ResizePty(ctx context.Context, req *ResizePtyRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "ResizePty", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) CloseIO(ctx context.Context, req *CloseIORequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "CloseIO", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Update(ctx context.Context, req *UpdateTaskRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Wait(ctx context.Context, req *WaitRequest) (*WaitResponse, error) { + var resp WaitResponse + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Wait", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Stats(ctx context.Context, req *StatsRequest) (*StatsResponse, error) { + var resp StatsResponse + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Stats", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Connect(ctx context.Context, req *ConnectRequest) (*ConnectResponse, error) { + var resp ConnectResponse + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Connect", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctaskClient) Shutdown(ctx context.Context, req *ShutdownRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.task.v3.Task", "Shutdown", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/containers/v1/containers.pb.go b/api/services/containers/v1/containers.pb.go index fb989f045b1a..d26df97d83b2 100644 --- a/api/services/containers/v1/containers.pb.go +++ b/api/services/containers/v1/containers.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/containers/v1/containers.proto +// protoc (unknown) +// source: services/containers/v1/containers.proto package containers @@ -98,7 +98,7 @@ type Container struct { func (x *Container) Reset() { *x = Container{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[0] + mi := &file_services_containers_v1_containers_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -111,7 +111,7 @@ func (x *Container) String() string { func (*Container) ProtoMessage() {} func (x *Container) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[0] + mi := &file_services_containers_v1_containers_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -124,7 +124,7 @@ func (x *Container) ProtoReflect() protoreflect.Message { // Deprecated: Use Container.ProtoReflect.Descriptor instead. func (*Container) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{0} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{0} } func (x *Container) GetID() string { @@ -215,7 +215,7 @@ type GetContainerRequest struct { func (x *GetContainerRequest) Reset() { *x = GetContainerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[1] + mi := &file_services_containers_v1_containers_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -228,7 +228,7 @@ func (x *GetContainerRequest) String() string { func (*GetContainerRequest) ProtoMessage() {} func (x *GetContainerRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[1] + mi := &file_services_containers_v1_containers_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -241,7 +241,7 @@ func (x *GetContainerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetContainerRequest.ProtoReflect.Descriptor instead. func (*GetContainerRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{1} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{1} } func (x *GetContainerRequest) GetID() string { @@ -262,7 +262,7 @@ type GetContainerResponse struct { func (x *GetContainerResponse) Reset() { *x = GetContainerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[2] + mi := &file_services_containers_v1_containers_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -275,7 +275,7 @@ func (x *GetContainerResponse) String() string { func (*GetContainerResponse) ProtoMessage() {} func (x *GetContainerResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[2] + mi := &file_services_containers_v1_containers_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -288,7 +288,7 @@ func (x *GetContainerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetContainerResponse.ProtoReflect.Descriptor instead. func (*GetContainerResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{2} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{2} } func (x *GetContainerResponse) GetContainer() *Container { @@ -310,7 +310,7 @@ type ListContainersRequest struct { // filters. Expanded, containers that match the following will be // returned: // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] // // If filters is zero-length or nil, all items will be returned. Filters []string `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"` @@ -319,7 +319,7 @@ type ListContainersRequest struct { func (x *ListContainersRequest) Reset() { *x = ListContainersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[3] + mi := &file_services_containers_v1_containers_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -332,7 +332,7 @@ func (x *ListContainersRequest) String() string { func (*ListContainersRequest) ProtoMessage() {} func (x *ListContainersRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[3] + mi := &file_services_containers_v1_containers_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -345,7 +345,7 @@ func (x *ListContainersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListContainersRequest.ProtoReflect.Descriptor instead. func (*ListContainersRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{3} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{3} } func (x *ListContainersRequest) GetFilters() []string { @@ -366,7 +366,7 @@ type ListContainersResponse struct { func (x *ListContainersResponse) Reset() { *x = ListContainersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[4] + mi := &file_services_containers_v1_containers_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -379,7 +379,7 @@ func (x *ListContainersResponse) String() string { func (*ListContainersResponse) ProtoMessage() {} func (x *ListContainersResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[4] + mi := &file_services_containers_v1_containers_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -392,7 +392,7 @@ func (x *ListContainersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListContainersResponse.ProtoReflect.Descriptor instead. func (*ListContainersResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{4} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{4} } func (x *ListContainersResponse) GetContainers() []*Container { @@ -413,7 +413,7 @@ type CreateContainerRequest struct { func (x *CreateContainerRequest) Reset() { *x = CreateContainerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[5] + mi := &file_services_containers_v1_containers_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -426,7 +426,7 @@ func (x *CreateContainerRequest) String() string { func (*CreateContainerRequest) ProtoMessage() {} func (x *CreateContainerRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[5] + mi := &file_services_containers_v1_containers_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -439,7 +439,7 @@ func (x *CreateContainerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateContainerRequest.ProtoReflect.Descriptor instead. func (*CreateContainerRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{5} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{5} } func (x *CreateContainerRequest) GetContainer() *Container { @@ -460,7 +460,7 @@ type CreateContainerResponse struct { func (x *CreateContainerResponse) Reset() { *x = CreateContainerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[6] + mi := &file_services_containers_v1_containers_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -473,7 +473,7 @@ func (x *CreateContainerResponse) String() string { func (*CreateContainerResponse) ProtoMessage() {} func (x *CreateContainerResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[6] + mi := &file_services_containers_v1_containers_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -486,7 +486,7 @@ func (x *CreateContainerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateContainerResponse.ProtoReflect.Descriptor instead. func (*CreateContainerResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{6} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{6} } func (x *CreateContainerResponse) GetContainer() *Container { @@ -518,7 +518,7 @@ type UpdateContainerRequest struct { func (x *UpdateContainerRequest) Reset() { *x = UpdateContainerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[7] + mi := &file_services_containers_v1_containers_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -531,7 +531,7 @@ func (x *UpdateContainerRequest) String() string { func (*UpdateContainerRequest) ProtoMessage() {} func (x *UpdateContainerRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[7] + mi := &file_services_containers_v1_containers_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -544,7 +544,7 @@ func (x *UpdateContainerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateContainerRequest.ProtoReflect.Descriptor instead. func (*UpdateContainerRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{7} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{7} } func (x *UpdateContainerRequest) GetContainer() *Container { @@ -572,7 +572,7 @@ type UpdateContainerResponse struct { func (x *UpdateContainerResponse) Reset() { *x = UpdateContainerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[8] + mi := &file_services_containers_v1_containers_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -585,7 +585,7 @@ func (x *UpdateContainerResponse) String() string { func (*UpdateContainerResponse) ProtoMessage() {} func (x *UpdateContainerResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[8] + mi := &file_services_containers_v1_containers_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -598,7 +598,7 @@ func (x *UpdateContainerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateContainerResponse.ProtoReflect.Descriptor instead. func (*UpdateContainerResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{8} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{8} } func (x *UpdateContainerResponse) GetContainer() *Container { @@ -619,7 +619,7 @@ type DeleteContainerRequest struct { func (x *DeleteContainerRequest) Reset() { *x = DeleteContainerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[9] + mi := &file_services_containers_v1_containers_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -632,7 +632,7 @@ func (x *DeleteContainerRequest) String() string { func (*DeleteContainerRequest) ProtoMessage() {} func (x *DeleteContainerRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[9] + mi := &file_services_containers_v1_containers_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -645,7 +645,7 @@ func (x *DeleteContainerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteContainerRequest.ProtoReflect.Descriptor instead. func (*DeleteContainerRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{9} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{9} } func (x *DeleteContainerRequest) GetID() string { @@ -666,7 +666,7 @@ type ListContainerMessage struct { func (x *ListContainerMessage) Reset() { *x = ListContainerMessage{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[10] + mi := &file_services_containers_v1_containers_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -679,7 +679,7 @@ func (x *ListContainerMessage) String() string { func (*ListContainerMessage) ProtoMessage() {} func (x *ListContainerMessage) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[10] + mi := &file_services_containers_v1_containers_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -692,7 +692,7 @@ func (x *ListContainerMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ListContainerMessage.ProtoReflect.Descriptor instead. func (*ListContainerMessage) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{10} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{10} } func (x *ListContainerMessage) GetContainer() *Container { @@ -716,7 +716,7 @@ type Container_Runtime struct { func (x *Container_Runtime) Reset() { *x = Container_Runtime{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[12] + mi := &file_services_containers_v1_containers_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -729,7 +729,7 @@ func (x *Container_Runtime) String() string { func (*Container_Runtime) ProtoMessage() {} func (x *Container_Runtime) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[12] + mi := &file_services_containers_v1_containers_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -742,7 +742,7 @@ func (x *Container_Runtime) ProtoReflect() protoreflect.Message { // Deprecated: Use Container_Runtime.ProtoReflect.Descriptor instead. func (*Container_Runtime) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP(), []int{0, 1} + return file_services_containers_v1_containers_proto_rawDescGZIP(), []int{0, 1} } func (x *Container_Runtime) GetName() string { @@ -759,198 +759,195 @@ func (x *Container_Runtime) GetOptions() *anypb.Any { return nil } -var File_github_com_containerd_containerd_api_services_containers_v1_containers_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDesc = []byte{ - 0x0a, 0x4c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, - 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8f, 0x06, 0x0a, - 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x21, - 0x0a, 0x0c, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4b, 0x65, - 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, +var File_services_containers_v1_containers_proto protoreflect.FileDescriptor + +var file_services_containers_v1_containers_proto_rawDesc = []byte{ + 0x0a, 0x27, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8f, 0x06, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x4e, 0x0a, + 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x52, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, + 0x79, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x5c, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x6f, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x5c, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x53, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x07, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x53, 0x0a, 0x0f, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, - 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x31, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x66, 0x0a, 0x16, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x73, 0x22, 0x64, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, - 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, - 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x65, 0x0a, 0x17, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x22, 0xa1, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x09, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x65, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x22, 0x31, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x66, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4c, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, + 0x64, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x65, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x28, 0x0a, 0x16, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x62, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4a, - 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, - 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x32, 0xe4, 0x05, 0x0a, 0x0a, 0x43, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x76, 0x0a, 0x03, 0x47, 0x65, 0x74, - 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x7b, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, - 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x38, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x30, 0x01, 0x12, 0x7f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, + 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0xa1, 0x01, 0x0a, + 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, + 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, + 0x22, 0x65, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x28, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x62, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x32, 0xe4, 0x05, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x73, 0x12, 0x76, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x36, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x0a, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x30, 0x01, 0x12, 0x7f, 0x0a, + 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, + 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x39, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2f, 0x76, 0x31, - 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x48, 0x5a, 0x46, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescData = file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDesc + file_services_containers_v1_containers_proto_rawDescOnce sync.Once + file_services_containers_v1_containers_proto_rawDescData = file_services_containers_v1_containers_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescData) +func file_services_containers_v1_containers_proto_rawDescGZIP() []byte { + file_services_containers_v1_containers_proto_rawDescOnce.Do(func() { + file_services_containers_v1_containers_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_containers_v1_containers_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDescData + return file_services_containers_v1_containers_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes = make([]protoimpl.MessageInfo, 14) -var file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_goTypes = []interface{}{ +var file_services_containers_v1_containers_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_services_containers_v1_containers_proto_goTypes = []interface{}{ (*Container)(nil), // 0: containerd.services.containers.v1.Container (*GetContainerRequest)(nil), // 1: containerd.services.containers.v1.GetContainerRequest (*GetContainerResponse)(nil), // 2: containerd.services.containers.v1.GetContainerResponse @@ -970,7 +967,7 @@ var file_github_com_containerd_containerd_api_services_containers_v1_containers_ (*fieldmaskpb.FieldMask)(nil), // 16: google.protobuf.FieldMask (*emptypb.Empty)(nil), // 17: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_depIdxs = []int32{ +var file_services_containers_v1_containers_proto_depIdxs = []int32{ 11, // 0: containerd.services.containers.v1.Container.labels:type_name -> containerd.services.containers.v1.Container.LabelsEntry 12, // 1: containerd.services.containers.v1.Container.runtime:type_name -> containerd.services.containers.v1.Container.Runtime 14, // 2: containerd.services.containers.v1.Container.spec:type_name -> google.protobuf.Any @@ -1006,13 +1003,13 @@ var file_github_com_containerd_containerd_api_services_containers_v1_containers_ 0, // [0:16] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_init() } -func file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_init() { - if File_github_com_containerd_containerd_api_services_containers_v1_containers_proto != nil { +func init() { file_services_containers_v1_containers_proto_init() } +func file_services_containers_v1_containers_proto_init() { + if File_services_containers_v1_containers_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Container); i { case 0: return &v.state @@ -1024,7 +1021,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetContainerRequest); i { case 0: return &v.state @@ -1036,7 +1033,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetContainerResponse); i { case 0: return &v.state @@ -1048,7 +1045,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListContainersRequest); i { case 0: return &v.state @@ -1060,7 +1057,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListContainersResponse); i { case 0: return &v.state @@ -1072,7 +1069,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateContainerRequest); i { case 0: return &v.state @@ -1084,7 +1081,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateContainerResponse); i { case 0: return &v.state @@ -1096,7 +1093,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateContainerRequest); i { case 0: return &v.state @@ -1108,7 +1105,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateContainerResponse); i { case 0: return &v.state @@ -1120,7 +1117,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteContainerRequest); i { case 0: return &v.state @@ -1132,7 +1129,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListContainerMessage); i { case 0: return &v.state @@ -1144,7 +1141,7 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers return nil } } - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_services_containers_v1_containers_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Container_Runtime); i { case 0: return &v.state @@ -1161,18 +1158,18 @@ func file_github_com_containerd_containerd_api_services_containers_v1_containers out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDesc, + RawDescriptor: file_services_containers_v1_containers_proto_rawDesc, NumEnums: 0, NumMessages: 14, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_msgTypes, + GoTypes: file_services_containers_v1_containers_proto_goTypes, + DependencyIndexes: file_services_containers_v1_containers_proto_depIdxs, + MessageInfos: file_services_containers_v1_containers_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_containers_v1_containers_proto = out.File - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_containers_v1_containers_proto_depIdxs = nil + File_services_containers_v1_containers_proto = out.File + file_services_containers_v1_containers_proto_rawDesc = nil + file_services_containers_v1_containers_proto_goTypes = nil + file_services_containers_v1_containers_proto_depIdxs = nil } diff --git a/api/services/containers/v1/containers.proto b/api/services/containers/v1/containers.proto index b0d6c5af503b..d2460bf05762 100644 --- a/api/services/containers/v1/containers.proto +++ b/api/services/containers/v1/containers.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -42,114 +42,114 @@ option go_package = "github.com/containerd/containerd/api/services/containers/v1 // runtime, or changes as the "container" is started and stops, it probably // doesn't belong on this object. service Containers { - rpc Get(GetContainerRequest) returns (GetContainerResponse); - rpc List(ListContainersRequest) returns (ListContainersResponse); - rpc ListStream(ListContainersRequest) returns (stream ListContainerMessage); - rpc Create(CreateContainerRequest) returns (CreateContainerResponse); - rpc Update(UpdateContainerRequest) returns (UpdateContainerResponse); - rpc Delete(DeleteContainerRequest) returns (google.protobuf.Empty); + rpc Get(GetContainerRequest) returns (GetContainerResponse); + rpc List(ListContainersRequest) returns (ListContainersResponse); + rpc ListStream(ListContainersRequest) returns (stream ListContainerMessage); + rpc Create(CreateContainerRequest) returns (CreateContainerResponse); + rpc Update(UpdateContainerRequest) returns (UpdateContainerResponse); + rpc Delete(DeleteContainerRequest) returns (google.protobuf.Empty); } message Container { - // ID is the user-specified identifier. - // - // This field may not be updated. - string id = 1; - - // Labels provides an area to include arbitrary data on containers. - // - // The combined size of a key/value pair cannot exceed 4096 bytes. - // - // Note that to add a new value to this field, read the existing set and - // include the entire result in the update call. - map labels = 2; - - // Image contains the reference of the image used to build the - // specification and snapshots for running this container. - // - // If this field is updated, the spec and rootfs needed to updated, as well. - string image = 3; - - message Runtime { - // Name is the name of the runtime. - string name = 1; - // Options specify additional runtime initialization options. - google.protobuf.Any options = 2; - } - // Runtime specifies which runtime to use for executing this container. - Runtime runtime = 4; - - // Spec to be used when creating the container. This is runtime specific. - google.protobuf.Any spec = 5; - - // Snapshotter specifies the snapshotter name used for rootfs - string snapshotter = 6; - - // SnapshotKey specifies the snapshot key to use for the container's root - // filesystem. When starting a task from this container, a caller should - // look up the mounts from the snapshot service and include those on the - // task create request. - // - // Snapshots referenced in this field will not be garbage collected. - // - // This field is set to empty when the rootfs is not a snapshot. - // - // This field may be updated. - string snapshot_key = 7; - - // CreatedAt is the time the container was first created. - google.protobuf.Timestamp created_at = 8; - - // UpdatedAt is the last time the container was mutated. - google.protobuf.Timestamp updated_at = 9; - - // Extensions allow clients to provide zero or more blobs that are directly - // associated with the container. One may provide protobuf, json, or other - // encoding formats. The primary use of this is to further decorate the - // container object with fields that may be specific to a client integration. - // - // The key portion of this map should identify a "name" for the extension - // that should be unique against other extensions. When updating extension - // data, one should only update the specified extension using field paths - // to select a specific map key. - map extensions = 10; - - // Sandbox ID this container belongs to. - string sandbox = 11; + // ID is the user-specified identifier. + // + // This field may not be updated. + string id = 1; + + // Labels provides an area to include arbitrary data on containers. + // + // The combined size of a key/value pair cannot exceed 4096 bytes. + // + // Note that to add a new value to this field, read the existing set and + // include the entire result in the update call. + map labels = 2; + + // Image contains the reference of the image used to build the + // specification and snapshots for running this container. + // + // If this field is updated, the spec and rootfs needed to updated, as well. + string image = 3; + + message Runtime { + // Name is the name of the runtime. + string name = 1; + // Options specify additional runtime initialization options. + google.protobuf.Any options = 2; + } + // Runtime specifies which runtime to use for executing this container. + Runtime runtime = 4; + + // Spec to be used when creating the container. This is runtime specific. + google.protobuf.Any spec = 5; + + // Snapshotter specifies the snapshotter name used for rootfs + string snapshotter = 6; + + // SnapshotKey specifies the snapshot key to use for the container's root + // filesystem. When starting a task from this container, a caller should + // look up the mounts from the snapshot service and include those on the + // task create request. + // + // Snapshots referenced in this field will not be garbage collected. + // + // This field is set to empty when the rootfs is not a snapshot. + // + // This field may be updated. + string snapshot_key = 7; + + // CreatedAt is the time the container was first created. + google.protobuf.Timestamp created_at = 8; + + // UpdatedAt is the last time the container was mutated. + google.protobuf.Timestamp updated_at = 9; + + // Extensions allow clients to provide zero or more blobs that are directly + // associated with the container. One may provide protobuf, json, or other + // encoding formats. The primary use of this is to further decorate the + // container object with fields that may be specific to a client integration. + // + // The key portion of this map should identify a "name" for the extension + // that should be unique against other extensions. When updating extension + // data, one should only update the specified extension using field paths + // to select a specific map key. + map extensions = 10; + + // Sandbox ID this container belongs to. + string sandbox = 11; } message GetContainerRequest { - string id = 1; + string id = 1; } message GetContainerResponse { - Container container = 1; + Container container = 1; } message ListContainersRequest { - // Filters contains one or more filters using the syntax defined in the - // containerd filter package. - // - // The returned result will be those that match any of the provided - // filters. Expanded, containers that match the following will be - // returned: - // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] - // - // If filters is zero-length or nil, all items will be returned. - repeated string filters = 1; + // Filters contains one or more filters using the syntax defined in the + // containerd filter package. + // + // The returned result will be those that match any of the provided + // filters. Expanded, containers that match the following will be + // returned: + // + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // + // If filters is zero-length or nil, all items will be returned. + repeated string filters = 1; } message ListContainersResponse { - repeated Container containers = 1; + repeated Container containers = 1; } message CreateContainerRequest { - Container container = 1; + Container container = 1; } message CreateContainerResponse { - Container container = 1; + Container container = 1; } // UpdateContainerRequest updates the metadata on one or more container. @@ -158,24 +158,24 @@ message CreateContainerResponse { // https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/field-mask, // unless otherwise qualified. message UpdateContainerRequest { - // Container provides the target values, as declared by the mask, for the update. - // - // The ID field must be set. - Container container = 1; - - // UpdateMask specifies which fields to perform the update on. If empty, - // the operation applies to all fields. - google.protobuf.FieldMask update_mask = 2; + // Container provides the target values, as declared by the mask, for the update. + // + // The ID field must be set. + Container container = 1; + + // UpdateMask specifies which fields to perform the update on. If empty, + // the operation applies to all fields. + google.protobuf.FieldMask update_mask = 2; } message UpdateContainerResponse { - Container container = 1; + Container container = 1; } message DeleteContainerRequest { - string id = 1; + string id = 1; } message ListContainerMessage { - Container container = 1; + Container container = 1; } diff --git a/api/services/containers/v1/containers_grpc.pb.go b/api/services/containers/v1/containers_grpc.pb.go index 701e5c1ebce5..a83023c5af5e 100644 --- a/api/services/containers/v1/containers_grpc.pb.go +++ b/api/services/containers/v1/containers_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/containers/v1/containers.proto +// - protoc (unknown) +// source: services/containers/v1/containers.proto package containers @@ -310,5 +312,5 @@ var Containers_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, }, }, - Metadata: "github.com/containerd/containerd/api/services/containers/v1/containers.proto", + Metadata: "services/containers/v1/containers.proto", } diff --git a/api/services/containers/v1/containers_ttrpc.pb.go b/api/services/containers/v1/containers_ttrpc.pb.go new file mode 100644 index 000000000000..121342421b16 --- /dev/null +++ b/api/services/containers/v1/containers_ttrpc.pb.go @@ -0,0 +1,174 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/containers/v1/containers.proto +package containers + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCContainersService interface { + Get(context.Context, *GetContainerRequest) (*GetContainerResponse, error) + List(context.Context, *ListContainersRequest) (*ListContainersResponse, error) + ListStream(context.Context, *ListContainersRequest, TTRPCContainers_ListStreamServer) error + Create(context.Context, *CreateContainerRequest) (*CreateContainerResponse, error) + Update(context.Context, *UpdateContainerRequest) (*UpdateContainerResponse, error) + Delete(context.Context, *DeleteContainerRequest) (*emptypb.Empty, error) +} + +type TTRPCContainers_ListStreamServer interface { + Send(*ListContainerMessage) error + ttrpc.StreamServer +} + +type ttrpccontainersListStreamServer struct { + ttrpc.StreamServer +} + +func (x *ttrpccontainersListStreamServer) Send(m *ListContainerMessage) error { + return x.StreamServer.SendMsg(m) +} + +func RegisterTTRPCContainersService(srv *ttrpc.Server, svc TTRPCContainersService) { + srv.RegisterService("containerd.services.containers.v1.Containers", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Get": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req GetContainerRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Get(ctx, &req) + }, + "List": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ListContainersRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.List(ctx, &req) + }, + "Create": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CreateContainerRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Create(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UpdateContainerRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + "Delete": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteContainerRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Delete(ctx, &req) + }, + }, + Streams: map[string]ttrpc.Stream{ + "ListStream": { + Handler: func(ctx context.Context, stream ttrpc.StreamServer) (interface{}, error) { + m := new(ListContainersRequest) + if err := stream.RecvMsg(m); err != nil { + return nil, err + } + return nil, svc.ListStream(ctx, m, &ttrpccontainersListStreamServer{stream}) + }, + StreamingClient: false, + StreamingServer: true, + }, + }, + }) +} + +type TTRPCContainersClient interface { + Get(context.Context, *GetContainerRequest) (*GetContainerResponse, error) + List(context.Context, *ListContainersRequest) (*ListContainersResponse, error) + ListStream(context.Context, *ListContainersRequest) (TTRPCContainers_ListStreamClient, error) + Create(context.Context, *CreateContainerRequest) (*CreateContainerResponse, error) + Update(context.Context, *UpdateContainerRequest) (*UpdateContainerResponse, error) + Delete(context.Context, *DeleteContainerRequest) (*emptypb.Empty, error) +} + +type ttrpccontainersClient struct { + client *ttrpc.Client +} + +func NewTTRPCContainersClient(client *ttrpc.Client) TTRPCContainersClient { + return &ttrpccontainersClient{ + client: client, + } +} + +func (c *ttrpccontainersClient) Get(ctx context.Context, req *GetContainerRequest) (*GetContainerResponse, error) { + var resp GetContainerResponse + if err := c.client.Call(ctx, "containerd.services.containers.v1.Containers", "Get", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontainersClient) List(ctx context.Context, req *ListContainersRequest) (*ListContainersResponse, error) { + var resp ListContainersResponse + if err := c.client.Call(ctx, "containerd.services.containers.v1.Containers", "List", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontainersClient) ListStream(ctx context.Context, req *ListContainersRequest) (TTRPCContainers_ListStreamClient, error) { + stream, err := c.client.NewStream(ctx, &ttrpc.StreamDesc{ + StreamingClient: false, + StreamingServer: true, + }, "containerd.services.containers.v1.Containers", "ListStream", req) + if err != nil { + return nil, err + } + x := &ttrpccontainersListStreamClient{stream} + return x, nil +} + +type TTRPCContainers_ListStreamClient interface { + Recv() (*ListContainerMessage, error) + ttrpc.ClientStream +} + +type ttrpccontainersListStreamClient struct { + ttrpc.ClientStream +} + +func (x *ttrpccontainersListStreamClient) Recv() (*ListContainerMessage, error) { + m := new(ListContainerMessage) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *ttrpccontainersClient) Create(ctx context.Context, req *CreateContainerRequest) (*CreateContainerResponse, error) { + var resp CreateContainerResponse + if err := c.client.Call(ctx, "containerd.services.containers.v1.Containers", "Create", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontainersClient) Update(ctx context.Context, req *UpdateContainerRequest) (*UpdateContainerResponse, error) { + var resp UpdateContainerResponse + if err := c.client.Call(ctx, "containerd.services.containers.v1.Containers", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontainersClient) Delete(ctx context.Context, req *DeleteContainerRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.containers.v1.Containers", "Delete", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/content/v1/content.pb.go b/api/services/content/v1/content.pb.go index 7c028f678330..1fdfdbc05f5a 100644 --- a/api/services/content/v1/content.pb.go +++ b/api/services/content/v1/content.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/content/v1/content.proto +// protoc (unknown) +// source: services/content/v1/content.proto package content @@ -87,11 +87,11 @@ func (x WriteAction) String() string { } func (WriteAction) Descriptor() protoreflect.EnumDescriptor { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_enumTypes[0].Descriptor() + return file_services_content_v1_content_proto_enumTypes[0].Descriptor() } func (WriteAction) Type() protoreflect.EnumType { - return &file_github_com_containerd_containerd_api_services_content_v1_content_proto_enumTypes[0] + return &file_services_content_v1_content_proto_enumTypes[0] } func (x WriteAction) Number() protoreflect.EnumNumber { @@ -100,7 +100,7 @@ func (x WriteAction) Number() protoreflect.EnumNumber { // Deprecated: Use WriteAction.Descriptor instead. func (WriteAction) EnumDescriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{0} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{0} } type Info struct { @@ -125,7 +125,7 @@ type Info struct { func (x *Info) Reset() { *x = Info{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[0] + mi := &file_services_content_v1_content_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -138,7 +138,7 @@ func (x *Info) String() string { func (*Info) ProtoMessage() {} func (x *Info) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[0] + mi := &file_services_content_v1_content_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -151,7 +151,7 @@ func (x *Info) ProtoReflect() protoreflect.Message { // Deprecated: Use Info.ProtoReflect.Descriptor instead. func (*Info) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{0} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{0} } func (x *Info) GetDigest() string { @@ -200,7 +200,7 @@ type InfoRequest struct { func (x *InfoRequest) Reset() { *x = InfoRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[1] + mi := &file_services_content_v1_content_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -213,7 +213,7 @@ func (x *InfoRequest) String() string { func (*InfoRequest) ProtoMessage() {} func (x *InfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[1] + mi := &file_services_content_v1_content_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -226,7 +226,7 @@ func (x *InfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InfoRequest.ProtoReflect.Descriptor instead. func (*InfoRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{1} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{1} } func (x *InfoRequest) GetDigest() string { @@ -247,7 +247,7 @@ type InfoResponse struct { func (x *InfoResponse) Reset() { *x = InfoResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[2] + mi := &file_services_content_v1_content_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -260,7 +260,7 @@ func (x *InfoResponse) String() string { func (*InfoResponse) ProtoMessage() {} func (x *InfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[2] + mi := &file_services_content_v1_content_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -273,7 +273,7 @@ func (x *InfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InfoResponse.ProtoReflect.Descriptor instead. func (*InfoResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{2} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{2} } func (x *InfoResponse) GetInfo() *Info { @@ -301,7 +301,7 @@ type UpdateRequest struct { func (x *UpdateRequest) Reset() { *x = UpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[3] + mi := &file_services_content_v1_content_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -314,7 +314,7 @@ func (x *UpdateRequest) String() string { func (*UpdateRequest) ProtoMessage() {} func (x *UpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[3] + mi := &file_services_content_v1_content_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -327,7 +327,7 @@ func (x *UpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateRequest.ProtoReflect.Descriptor instead. func (*UpdateRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{3} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{3} } func (x *UpdateRequest) GetInfo() *Info { @@ -355,7 +355,7 @@ type UpdateResponse struct { func (x *UpdateResponse) Reset() { *x = UpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[4] + mi := &file_services_content_v1_content_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -368,7 +368,7 @@ func (x *UpdateResponse) String() string { func (*UpdateResponse) ProtoMessage() {} func (x *UpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[4] + mi := &file_services_content_v1_content_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -381,7 +381,7 @@ func (x *UpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateResponse.ProtoReflect.Descriptor instead. func (*UpdateResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{4} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{4} } func (x *UpdateResponse) GetInfo() *Info { @@ -403,7 +403,7 @@ type ListContentRequest struct { // filters. Expanded, containers that match the following will be // returned: // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] // // If filters is zero-length or nil, all items will be returned. Filters []string `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"` @@ -412,7 +412,7 @@ type ListContentRequest struct { func (x *ListContentRequest) Reset() { *x = ListContentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[5] + mi := &file_services_content_v1_content_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -425,7 +425,7 @@ func (x *ListContentRequest) String() string { func (*ListContentRequest) ProtoMessage() {} func (x *ListContentRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[5] + mi := &file_services_content_v1_content_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -438,7 +438,7 @@ func (x *ListContentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListContentRequest.ProtoReflect.Descriptor instead. func (*ListContentRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{5} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{5} } func (x *ListContentRequest) GetFilters() []string { @@ -459,7 +459,7 @@ type ListContentResponse struct { func (x *ListContentResponse) Reset() { *x = ListContentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[6] + mi := &file_services_content_v1_content_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -472,7 +472,7 @@ func (x *ListContentResponse) String() string { func (*ListContentResponse) ProtoMessage() {} func (x *ListContentResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[6] + mi := &file_services_content_v1_content_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -485,7 +485,7 @@ func (x *ListContentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListContentResponse.ProtoReflect.Descriptor instead. func (*ListContentResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{6} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{6} } func (x *ListContentResponse) GetInfo() []*Info { @@ -507,7 +507,7 @@ type DeleteContentRequest struct { func (x *DeleteContentRequest) Reset() { *x = DeleteContentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[7] + mi := &file_services_content_v1_content_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -520,7 +520,7 @@ func (x *DeleteContentRequest) String() string { func (*DeleteContentRequest) ProtoMessage() {} func (x *DeleteContentRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[7] + mi := &file_services_content_v1_content_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -533,7 +533,7 @@ func (x *DeleteContentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteContentRequest.ProtoReflect.Descriptor instead. func (*DeleteContentRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{7} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{7} } func (x *DeleteContentRequest) GetDigest() string { @@ -564,7 +564,7 @@ type ReadContentRequest struct { func (x *ReadContentRequest) Reset() { *x = ReadContentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[8] + mi := &file_services_content_v1_content_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -577,7 +577,7 @@ func (x *ReadContentRequest) String() string { func (*ReadContentRequest) ProtoMessage() {} func (x *ReadContentRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[8] + mi := &file_services_content_v1_content_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -590,7 +590,7 @@ func (x *ReadContentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadContentRequest.ProtoReflect.Descriptor instead. func (*ReadContentRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{8} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{8} } func (x *ReadContentRequest) GetDigest() string { @@ -627,7 +627,7 @@ type ReadContentResponse struct { func (x *ReadContentResponse) Reset() { *x = ReadContentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[9] + mi := &file_services_content_v1_content_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -640,7 +640,7 @@ func (x *ReadContentResponse) String() string { func (*ReadContentResponse) ProtoMessage() {} func (x *ReadContentResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[9] + mi := &file_services_content_v1_content_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -653,7 +653,7 @@ func (x *ReadContentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadContentResponse.ProtoReflect.Descriptor instead. func (*ReadContentResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{9} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{9} } func (x *ReadContentResponse) GetOffset() int64 { @@ -686,7 +686,7 @@ type Status struct { func (x *Status) Reset() { *x = Status{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[10] + mi := &file_services_content_v1_content_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -699,7 +699,7 @@ func (x *Status) String() string { func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[10] + mi := &file_services_content_v1_content_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -712,7 +712,7 @@ func (x *Status) ProtoReflect() protoreflect.Message { // Deprecated: Use Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{10} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{10} } func (x *Status) GetStartedAt() *timestamppb.Timestamp { @@ -768,7 +768,7 @@ type StatusRequest struct { func (x *StatusRequest) Reset() { *x = StatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[11] + mi := &file_services_content_v1_content_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -781,7 +781,7 @@ func (x *StatusRequest) String() string { func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[11] + mi := &file_services_content_v1_content_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -794,7 +794,7 @@ func (x *StatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{11} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{11} } func (x *StatusRequest) GetRef() string { @@ -815,7 +815,7 @@ type StatusResponse struct { func (x *StatusResponse) Reset() { *x = StatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[12] + mi := &file_services_content_v1_content_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -828,7 +828,7 @@ func (x *StatusResponse) String() string { func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[12] + mi := &file_services_content_v1_content_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -841,7 +841,7 @@ func (x *StatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. func (*StatusResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{12} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{12} } func (x *StatusResponse) GetStatus() *Status { @@ -862,7 +862,7 @@ type ListStatusesRequest struct { func (x *ListStatusesRequest) Reset() { *x = ListStatusesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[13] + mi := &file_services_content_v1_content_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -875,7 +875,7 @@ func (x *ListStatusesRequest) String() string { func (*ListStatusesRequest) ProtoMessage() {} func (x *ListStatusesRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[13] + mi := &file_services_content_v1_content_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -888,7 +888,7 @@ func (x *ListStatusesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListStatusesRequest.ProtoReflect.Descriptor instead. func (*ListStatusesRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{13} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{13} } func (x *ListStatusesRequest) GetFilters() []string { @@ -909,7 +909,7 @@ type ListStatusesResponse struct { func (x *ListStatusesResponse) Reset() { *x = ListStatusesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[14] + mi := &file_services_content_v1_content_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -922,7 +922,7 @@ func (x *ListStatusesResponse) String() string { func (*ListStatusesResponse) ProtoMessage() {} func (x *ListStatusesResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[14] + mi := &file_services_content_v1_content_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -935,7 +935,7 @@ func (x *ListStatusesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListStatusesResponse.ProtoReflect.Descriptor instead. func (*ListStatusesResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{14} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{14} } func (x *ListStatusesResponse) GetStatuses() []*Status { @@ -1009,7 +1009,7 @@ type WriteContentRequest struct { func (x *WriteContentRequest) Reset() { *x = WriteContentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[15] + mi := &file_services_content_v1_content_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1022,7 +1022,7 @@ func (x *WriteContentRequest) String() string { func (*WriteContentRequest) ProtoMessage() {} func (x *WriteContentRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[15] + mi := &file_services_content_v1_content_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1035,7 +1035,7 @@ func (x *WriteContentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WriteContentRequest.ProtoReflect.Descriptor instead. func (*WriteContentRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{15} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{15} } func (x *WriteContentRequest) GetAction() WriteAction { @@ -1124,7 +1124,7 @@ type WriteContentResponse struct { func (x *WriteContentResponse) Reset() { *x = WriteContentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[16] + mi := &file_services_content_v1_content_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1137,7 +1137,7 @@ func (x *WriteContentResponse) String() string { func (*WriteContentResponse) ProtoMessage() {} func (x *WriteContentResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[16] + mi := &file_services_content_v1_content_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1150,7 +1150,7 @@ func (x *WriteContentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WriteContentResponse.ProtoReflect.Descriptor instead. func (*WriteContentResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{16} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{16} } func (x *WriteContentResponse) GetAction() WriteAction { @@ -1206,7 +1206,7 @@ type AbortRequest struct { func (x *AbortRequest) Reset() { *x = AbortRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[17] + mi := &file_services_content_v1_content_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1219,7 +1219,7 @@ func (x *AbortRequest) String() string { func (*AbortRequest) ProtoMessage() {} func (x *AbortRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[17] + mi := &file_services_content_v1_content_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1232,7 +1232,7 @@ func (x *AbortRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AbortRequest.ProtoReflect.Descriptor instead. func (*AbortRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP(), []int{17} + return file_services_content_v1_content_proto_rawDescGZIP(), []int{17} } func (x *AbortRequest) GetRef() string { @@ -1242,239 +1242,236 @@ func (x *AbortRequest) GetRef() string { return "" } -var File_github_com_containerd_containerd_api_services_content_v1_content_proto protoreflect.FileDescriptor +var File_services_content_v1_content_proto protoreflect.FileDescriptor -var file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDesc = []byte{ - 0x0a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xad, 0x02, 0x0a, 0x04, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x39, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, +var file_services_content_v1_content_proto_rawDesc = []byte{ + 0x0a, 0x21, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xad, 0x02, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, - 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, - 0x48, 0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x48, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x48, 0x0a, 0x0c, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, + 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x86, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, + 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, + 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x4a, 0x0a, + 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x86, 0x01, 0x0a, 0x0d, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x04, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, - 0x73, 0x6b, 0x22, 0x4a, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x2e, - 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x4f, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, - 0x2e, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, - 0x58, 0x0a, 0x12, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x61, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xda, 0x01, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, - 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1a, 0x0a, - 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0x21, 0x0a, 0x0d, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, - 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x22, 0x50, 0x0a, 0x0e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x2e, 0x0a, 0x12, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x4f, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x38, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x2f, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, - 0x5a, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x2e, 0x0a, 0x14, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x12, 0x52, 0x65, + 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x22, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xda, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x22, 0x21, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x22, 0x50, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x22, 0xde, 0x02, 0x0a, 0x13, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x2f, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x5a, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x22, 0xde, 0x02, 0x0a, 0x13, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x65, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x57, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x57, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x02, 0x0a, - 0x14, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x20, 0x0a, 0x0c, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x2a, 0x2e, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x41, 0x54, 0x10, - 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, - 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xbe, 0x07, 0x0a, 0x07, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x61, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x02, 0x0a, 0x14, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x43, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x71, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, + 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x22, 0x20, 0x0a, 0x0c, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x72, 0x65, 0x66, 0x2a, 0x2e, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x41, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, + 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, + 0x54, 0x10, 0x02, 0x32, 0xbe, 0x07, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x61, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x67, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x71, 0x0a, 0x04, 0x52, - 0x65, 0x61, 0x64, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x67, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, + 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x71, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x32, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x67, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x79, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x65, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x76, 0x0a, 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x33, 0x2e, 0x63, 0x6f, + 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, + 0x05, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4d, 0x0a, 0x05, 0x41, 0x62, - 0x6f, 0x72, 0x74, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4d, 0x0a, 0x05, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x2c, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, + 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescData = file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDesc + file_services_content_v1_content_proto_rawDescOnce sync.Once + file_services_content_v1_content_proto_rawDescData = file_services_content_v1_content_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescData) +func file_services_content_v1_content_proto_rawDescGZIP() []byte { + file_services_content_v1_content_proto_rawDescOnce.Do(func() { + file_services_content_v1_content_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_content_v1_content_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDescData + return file_services_content_v1_content_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_content_v1_content_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_github_com_containerd_containerd_api_services_content_v1_content_proto_goTypes = []interface{}{ +var file_services_content_v1_content_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_services_content_v1_content_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_services_content_v1_content_proto_goTypes = []interface{}{ (WriteAction)(0), // 0: containerd.services.content.v1.WriteAction (*Info)(nil), // 1: containerd.services.content.v1.Info (*InfoRequest)(nil), // 2: containerd.services.content.v1.InfoRequest @@ -1500,7 +1497,7 @@ var file_github_com_containerd_containerd_api_services_content_v1_content_proto_ (*fieldmaskpb.FieldMask)(nil), // 22: google.protobuf.FieldMask (*emptypb.Empty)(nil), // 23: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_content_v1_content_proto_depIdxs = []int32{ +var file_services_content_v1_content_proto_depIdxs = []int32{ 21, // 0: containerd.services.content.v1.Info.created_at:type_name -> google.protobuf.Timestamp 21, // 1: containerd.services.content.v1.Info.updated_at:type_name -> google.protobuf.Timestamp 19, // 2: containerd.services.content.v1.Info.labels:type_name -> containerd.services.content.v1.Info.LabelsEntry @@ -1543,13 +1540,13 @@ var file_github_com_containerd_containerd_api_services_content_v1_content_proto_ 0, // [0:17] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_services_content_v1_content_proto_init() } -func file_github_com_containerd_containerd_api_services_content_v1_content_proto_init() { - if File_github_com_containerd_containerd_api_services_content_v1_content_proto != nil { +func init() { file_services_content_v1_content_proto_init() } +func file_services_content_v1_content_proto_init() { + if File_services_content_v1_content_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Info); i { case 0: return &v.state @@ -1561,7 +1558,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InfoRequest); i { case 0: return &v.state @@ -1573,7 +1570,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InfoResponse); i { case 0: return &v.state @@ -1585,7 +1582,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateRequest); i { case 0: return &v.state @@ -1597,7 +1594,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateResponse); i { case 0: return &v.state @@ -1609,7 +1606,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListContentRequest); i { case 0: return &v.state @@ -1621,7 +1618,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListContentResponse); i { case 0: return &v.state @@ -1633,7 +1630,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteContentRequest); i { case 0: return &v.state @@ -1645,7 +1642,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadContentRequest); i { case 0: return &v.state @@ -1657,7 +1654,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReadContentResponse); i { case 0: return &v.state @@ -1669,7 +1666,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Status); i { case 0: return &v.state @@ -1681,7 +1678,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusRequest); i { case 0: return &v.state @@ -1693,7 +1690,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusResponse); i { case 0: return &v.state @@ -1705,7 +1702,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListStatusesRequest); i { case 0: return &v.state @@ -1717,7 +1714,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListStatusesResponse); i { case 0: return &v.state @@ -1729,7 +1726,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WriteContentRequest); i { case 0: return &v.state @@ -1741,7 +1738,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WriteContentResponse); i { case 0: return &v.state @@ -1753,7 +1750,7 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto return nil } } - file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_services_content_v1_content_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AbortRequest); i { case 0: return &v.state @@ -1770,19 +1767,19 @@ func file_github_com_containerd_containerd_api_services_content_v1_content_proto out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDesc, + RawDescriptor: file_services_content_v1_content_proto_rawDesc, NumEnums: 1, NumMessages: 20, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_content_v1_content_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_content_v1_content_proto_depIdxs, - EnumInfos: file_github_com_containerd_containerd_api_services_content_v1_content_proto_enumTypes, - MessageInfos: file_github_com_containerd_containerd_api_services_content_v1_content_proto_msgTypes, + GoTypes: file_services_content_v1_content_proto_goTypes, + DependencyIndexes: file_services_content_v1_content_proto_depIdxs, + EnumInfos: file_services_content_v1_content_proto_enumTypes, + MessageInfos: file_services_content_v1_content_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_content_v1_content_proto = out.File - file_github_com_containerd_containerd_api_services_content_v1_content_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_content_v1_content_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_content_v1_content_proto_depIdxs = nil + File_services_content_v1_content_proto = out.File + file_services_content_v1_content_proto_rawDesc = nil + file_services_content_v1_content_proto_goTypes = nil + file_services_content_v1_content_proto_depIdxs = nil } diff --git a/api/services/content/v1/content.proto b/api/services/content/v1/content.proto index 6f455c0598d0..7e11305bbdd7 100644 --- a/api/services/content/v1/content.proto +++ b/api/services/content/v1/content.proto @@ -1,330 +1,329 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.services.content.v1; +import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/timestamp.proto"; -import "google/protobuf/empty.proto"; option go_package = "github.com/containerd/containerd/api/services/content/v1;content"; // Content provides access to a content addressable storage system. service Content { - // Info returns information about a committed object. - // - // This call can be used for getting the size of content and checking for - // existence. - rpc Info(InfoRequest) returns (InfoResponse); - - // Update updates content metadata. - // - // This call can be used to manage the mutable content labels. The - // immutable metadata such as digest, size, and committed at cannot - // be updated. - rpc Update(UpdateRequest) returns (UpdateResponse); - - // List streams the entire set of content as Info objects and closes the - // stream. - // - // Typically, this will yield a large response, chunked into messages. - // Clients should make provisions to ensure they can handle the entire data - // set. - rpc List(ListContentRequest) returns (stream ListContentResponse); - - // Delete will delete the referenced object. - rpc Delete(DeleteContentRequest) returns (google.protobuf.Empty); - - // Read allows one to read an object based on the offset into the content. - // - // The requested data may be returned in one or more messages. - rpc Read(ReadContentRequest) returns (stream ReadContentResponse); - - // Status returns the status for a single reference. - rpc Status(StatusRequest) returns (StatusResponse); - - // ListStatuses returns the status of ongoing object ingestions, started via - // Write. - // - // Only those matching the regular expression will be provided in the - // response. If the provided regular expression is empty, all ingestions - // will be provided. - rpc ListStatuses(ListStatusesRequest) returns (ListStatusesResponse); - - // Write begins or resumes writes to a resource identified by a unique ref. - // Only one active stream may exist at a time for each ref. - // - // Once a write stream has started, it may only write to a single ref, thus - // once a stream is started, the ref may be omitted on subsequent writes. - // - // For any write transaction represented by a ref, only a single write may - // be made to a given offset. If overlapping writes occur, it is an error. - // Writes should be sequential and implementations may throw an error if - // this is required. - // - // If expected_digest is set and already part of the content store, the - // write will fail. - // - // When completed, the commit flag should be set to true. If expected size - // or digest is set, the content will be validated against those values. - rpc Write(stream WriteContentRequest) returns (stream WriteContentResponse); - - // Abort cancels the ongoing write named in the request. Any resources - // associated with the write will be collected. - rpc Abort(AbortRequest) returns (google.protobuf.Empty); + // Info returns information about a committed object. + // + // This call can be used for getting the size of content and checking for + // existence. + rpc Info(InfoRequest) returns (InfoResponse); + + // Update updates content metadata. + // + // This call can be used to manage the mutable content labels. The + // immutable metadata such as digest, size, and committed at cannot + // be updated. + rpc Update(UpdateRequest) returns (UpdateResponse); + + // List streams the entire set of content as Info objects and closes the + // stream. + // + // Typically, this will yield a large response, chunked into messages. + // Clients should make provisions to ensure they can handle the entire data + // set. + rpc List(ListContentRequest) returns (stream ListContentResponse); + + // Delete will delete the referenced object. + rpc Delete(DeleteContentRequest) returns (google.protobuf.Empty); + + // Read allows one to read an object based on the offset into the content. + // + // The requested data may be returned in one or more messages. + rpc Read(ReadContentRequest) returns (stream ReadContentResponse); + + // Status returns the status for a single reference. + rpc Status(StatusRequest) returns (StatusResponse); + + // ListStatuses returns the status of ongoing object ingestions, started via + // Write. + // + // Only those matching the regular expression will be provided in the + // response. If the provided regular expression is empty, all ingestions + // will be provided. + rpc ListStatuses(ListStatusesRequest) returns (ListStatusesResponse); + + // Write begins or resumes writes to a resource identified by a unique ref. + // Only one active stream may exist at a time for each ref. + // + // Once a write stream has started, it may only write to a single ref, thus + // once a stream is started, the ref may be omitted on subsequent writes. + // + // For any write transaction represented by a ref, only a single write may + // be made to a given offset. If overlapping writes occur, it is an error. + // Writes should be sequential and implementations may throw an error if + // this is required. + // + // If expected_digest is set and already part of the content store, the + // write will fail. + // + // When completed, the commit flag should be set to true. If expected size + // or digest is set, the content will be validated against those values. + rpc Write(stream WriteContentRequest) returns (stream WriteContentResponse); + + // Abort cancels the ongoing write named in the request. Any resources + // associated with the write will be collected. + rpc Abort(AbortRequest) returns (google.protobuf.Empty); } message Info { - // Digest is the hash identity of the blob. - string digest = 1; + // Digest is the hash identity of the blob. + string digest = 1; - // Size is the total number of bytes in the blob. - int64 size = 2; + // Size is the total number of bytes in the blob. + int64 size = 2; - // CreatedAt provides the time at which the blob was committed. - google.protobuf.Timestamp created_at = 3; + // CreatedAt provides the time at which the blob was committed. + google.protobuf.Timestamp created_at = 3; - // UpdatedAt provides the time the info was last updated. - google.protobuf.Timestamp updated_at = 4; + // UpdatedAt provides the time the info was last updated. + google.protobuf.Timestamp updated_at = 4; - // Labels are arbitrary data on snapshots. - // - // The combined size of a key/value pair cannot exceed 4096 bytes. - map labels = 5; + // Labels are arbitrary data on snapshots. + // + // The combined size of a key/value pair cannot exceed 4096 bytes. + map labels = 5; } message InfoRequest { - string digest = 1; + string digest = 1; } message InfoResponse { - Info info = 1; + Info info = 1; } message UpdateRequest { - Info info = 1; - - // UpdateMask specifies which fields to perform the update on. If empty, - // the operation applies to all fields. - // - // In info, Digest, Size, and CreatedAt are immutable, - // other field may be updated using this mask. - // If no mask is provided, all mutable field are updated. - google.protobuf.FieldMask update_mask = 2; + Info info = 1; + + // UpdateMask specifies which fields to perform the update on. If empty, + // the operation applies to all fields. + // + // In info, Digest, Size, and CreatedAt are immutable, + // other field may be updated using this mask. + // If no mask is provided, all mutable field are updated. + google.protobuf.FieldMask update_mask = 2; } message UpdateResponse { - Info info = 1; + Info info = 1; } message ListContentRequest { - // Filters contains one or more filters using the syntax defined in the - // containerd filter package. - // - // The returned result will be those that match any of the provided - // filters. Expanded, containers that match the following will be - // returned: - // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] - // - // If filters is zero-length or nil, all items will be returned. - repeated string filters = 1; + // Filters contains one or more filters using the syntax defined in the + // containerd filter package. + // + // The returned result will be those that match any of the provided + // filters. Expanded, containers that match the following will be + // returned: + // + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // + // If filters is zero-length or nil, all items will be returned. + repeated string filters = 1; } message ListContentResponse { - repeated Info info = 1; + repeated Info info = 1; } message DeleteContentRequest { - // Digest specifies which content to delete. - string digest = 1; + // Digest specifies which content to delete. + string digest = 1; } // ReadContentRequest defines the fields that make up a request to read a portion of // data from a stored object. message ReadContentRequest { - // Digest is the hash identity to read. - string digest = 1; + // Digest is the hash identity to read. + string digest = 1; - // Offset specifies the number of bytes from the start at which to begin - // the read. If zero or less, the read will be from the start. This uses - // standard zero-indexed semantics. - int64 offset = 2; + // Offset specifies the number of bytes from the start at which to begin + // the read. If zero or less, the read will be from the start. This uses + // standard zero-indexed semantics. + int64 offset = 2; - // size is the total size of the read. If zero, the entire blob will be - // returned by the service. - int64 size = 3; + // size is the total size of the read. If zero, the entire blob will be + // returned by the service. + int64 size = 3; } // ReadContentResponse carries byte data for a read request. message ReadContentResponse { - int64 offset = 1; // offset of the returned data - bytes data = 2; // actual data + int64 offset = 1; // offset of the returned data + bytes data = 2; // actual data } message Status { - google.protobuf.Timestamp started_at = 1; - google.protobuf.Timestamp updated_at = 2; - string ref = 3; - int64 offset = 4; - int64 total = 5; - string expected = 6; + google.protobuf.Timestamp started_at = 1; + google.protobuf.Timestamp updated_at = 2; + string ref = 3; + int64 offset = 4; + int64 total = 5; + string expected = 6; } - message StatusRequest { - string ref = 1; + string ref = 1; } message StatusResponse { - Status status = 1; + Status status = 1; } message ListStatusesRequest { - repeated string filters = 1; + repeated string filters = 1; } message ListStatusesResponse { - repeated Status statuses = 1; + repeated Status statuses = 1; } // WriteAction defines the behavior of a WriteRequest. enum WriteAction { - // WriteActionStat instructs the writer to return the current status while - // holding the lock on the write. - STAT = 0; - - // WriteActionWrite sets the action for the write request to write data. - // - // Any data included will be written at the provided offset. The - // transaction will be left open for further writes. - // - // This is the default. - WRITE = 1; - - // WriteActionCommit will write any outstanding data in the message and - // commit the write, storing it under the digest. - // - // This can be used in a single message to send the data, verify it and - // commit it. - // - // This action will always terminate the write. - COMMIT = 2; + // WriteActionStat instructs the writer to return the current status while + // holding the lock on the write. + STAT = 0; + + // WriteActionWrite sets the action for the write request to write data. + // + // Any data included will be written at the provided offset. The + // transaction will be left open for further writes. + // + // This is the default. + WRITE = 1; + + // WriteActionCommit will write any outstanding data in the message and + // commit the write, storing it under the digest. + // + // This can be used in a single message to send the data, verify it and + // commit it. + // + // This action will always terminate the write. + COMMIT = 2; } // WriteContentRequest writes data to the request ref at offset. message WriteContentRequest { - // Action sets the behavior of the write. - // - // When this is a write and the ref is not yet allocated, the ref will be - // allocated and the data will be written at offset. - // - // If the action is write and the ref is allocated, it will accept data to - // an offset that has not yet been written. - // - // If the action is write and there is no data, the current write status - // will be returned. This works differently from status because the stream - // holds a lock. - WriteAction action = 1; - - // Ref identifies the pre-commit object to write to. - string ref = 2; - - // Total can be set to have the service validate the total size of the - // committed content. - // - // The latest value before or with the commit action message will be use to - // validate the content. If the offset overflows total, the service may - // report an error. It is only required on one message for the write. - // - // If the value is zero or less, no validation of the final content will be - // performed. - int64 total = 3; - - // Expected can be set to have the service validate the final content against - // the provided digest. - // - // If the digest is already present in the object store, an AlreadyExists - // error will be returned. - // - // Only the latest version will be used to check the content against the - // digest. It is only required to include it on a single message, before or - // with the commit action message. - string expected = 4; - - // Offset specifies the number of bytes from the start at which to begin - // the write. For most implementations, this means from the start of the - // file. This uses standard, zero-indexed semantics. - // - // If the action is write, the remote may remove all previously written - // data after the offset. Implementations may support arbitrary offsets but - // MUST support reseting this value to zero with a write. If an - // implementation does not support a write at a particular offset, an - // OutOfRange error must be returned. - int64 offset = 5; - - // Data is the actual bytes to be written. - // - // If this is empty and the message is not a commit, a response will be - // returned with the current write state. - bytes data = 6; - - // Labels are arbitrary data on snapshots. - // - // The combined size of a key/value pair cannot exceed 4096 bytes. - map labels = 7; + // Action sets the behavior of the write. + // + // When this is a write and the ref is not yet allocated, the ref will be + // allocated and the data will be written at offset. + // + // If the action is write and the ref is allocated, it will accept data to + // an offset that has not yet been written. + // + // If the action is write and there is no data, the current write status + // will be returned. This works differently from status because the stream + // holds a lock. + WriteAction action = 1; + + // Ref identifies the pre-commit object to write to. + string ref = 2; + + // Total can be set to have the service validate the total size of the + // committed content. + // + // The latest value before or with the commit action message will be use to + // validate the content. If the offset overflows total, the service may + // report an error. It is only required on one message for the write. + // + // If the value is zero or less, no validation of the final content will be + // performed. + int64 total = 3; + + // Expected can be set to have the service validate the final content against + // the provided digest. + // + // If the digest is already present in the object store, an AlreadyExists + // error will be returned. + // + // Only the latest version will be used to check the content against the + // digest. It is only required to include it on a single message, before or + // with the commit action message. + string expected = 4; + + // Offset specifies the number of bytes from the start at which to begin + // the write. For most implementations, this means from the start of the + // file. This uses standard, zero-indexed semantics. + // + // If the action is write, the remote may remove all previously written + // data after the offset. Implementations may support arbitrary offsets but + // MUST support reseting this value to zero with a write. If an + // implementation does not support a write at a particular offset, an + // OutOfRange error must be returned. + int64 offset = 5; + + // Data is the actual bytes to be written. + // + // If this is empty and the message is not a commit, a response will be + // returned with the current write state. + bytes data = 6; + + // Labels are arbitrary data on snapshots. + // + // The combined size of a key/value pair cannot exceed 4096 bytes. + map labels = 7; } // WriteContentResponse is returned on the culmination of a write call. message WriteContentResponse { - // Action contains the action for the final message of the stream. A writer - // should confirm that they match the intended result. - WriteAction action = 1; - - // StartedAt provides the time at which the write began. - // - // This must be set for stat and commit write actions. All other write - // actions may omit this. - google.protobuf.Timestamp started_at = 2; - - // UpdatedAt provides the last time of a successful write. - // - // This must be set for stat and commit write actions. All other write - // actions may omit this. - google.protobuf.Timestamp updated_at = 3; - - // Offset is the current committed size for the write. - int64 offset = 4; - - // Total provides the current, expected total size of the write. - // - // We include this to provide consistency with the Status structure on the - // client writer. - // - // This is only valid on the Stat and Commit response. - int64 total = 5; - - // Digest, if present, includes the digest up to the currently committed - // bytes. If action is commit, this field will be set. It is implementation - // defined if this is set for other actions. - string digest = 6; + // Action contains the action for the final message of the stream. A writer + // should confirm that they match the intended result. + WriteAction action = 1; + + // StartedAt provides the time at which the write began. + // + // This must be set for stat and commit write actions. All other write + // actions may omit this. + google.protobuf.Timestamp started_at = 2; + + // UpdatedAt provides the last time of a successful write. + // + // This must be set for stat and commit write actions. All other write + // actions may omit this. + google.protobuf.Timestamp updated_at = 3; + + // Offset is the current committed size for the write. + int64 offset = 4; + + // Total provides the current, expected total size of the write. + // + // We include this to provide consistency with the Status structure on the + // client writer. + // + // This is only valid on the Stat and Commit response. + int64 total = 5; + + // Digest, if present, includes the digest up to the currently committed + // bytes. If action is commit, this field will be set. It is implementation + // defined if this is set for other actions. + string digest = 6; } message AbortRequest { - string ref = 1; + string ref = 1; } diff --git a/api/services/content/v1/content_grpc.pb.go b/api/services/content/v1/content_grpc.pb.go index e230c45a6705..1ae2e3554650 100644 --- a/api/services/content/v1/content_grpc.pb.go +++ b/api/services/content/v1/content_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/content/v1/content.proto +// - protoc (unknown) +// source: services/content/v1/content.proto package content @@ -565,5 +567,5 @@ var Content_ServiceDesc = grpc.ServiceDesc{ ClientStreams: true, }, }, - Metadata: "github.com/containerd/containerd/api/services/content/v1/content.proto", + Metadata: "services/content/v1/content.proto", } diff --git a/api/services/content/v1/content_ttrpc.pb.go b/api/services/content/v1/content_ttrpc.pb.go new file mode 100644 index 000000000000..2110e941c625 --- /dev/null +++ b/api/services/content/v1/content_ttrpc.pb.go @@ -0,0 +1,311 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/content/v1/content.proto +package content + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCContentService interface { + Info(context.Context, *InfoRequest) (*InfoResponse, error) + Update(context.Context, *UpdateRequest) (*UpdateResponse, error) + List(context.Context, *ListContentRequest, TTRPCContent_ListServer) error + Delete(context.Context, *DeleteContentRequest) (*emptypb.Empty, error) + Read(context.Context, *ReadContentRequest, TTRPCContent_ReadServer) error + Status(context.Context, *StatusRequest) (*StatusResponse, error) + ListStatuses(context.Context, *ListStatusesRequest) (*ListStatusesResponse, error) + Write(context.Context, TTRPCContent_WriteServer) error + Abort(context.Context, *AbortRequest) (*emptypb.Empty, error) +} + +type TTRPCContent_ListServer interface { + Send(*ListContentResponse) error + ttrpc.StreamServer +} + +type ttrpccontentListServer struct { + ttrpc.StreamServer +} + +func (x *ttrpccontentListServer) Send(m *ListContentResponse) error { + return x.StreamServer.SendMsg(m) +} + +type TTRPCContent_ReadServer interface { + Send(*ReadContentResponse) error + ttrpc.StreamServer +} + +type ttrpccontentReadServer struct { + ttrpc.StreamServer +} + +func (x *ttrpccontentReadServer) Send(m *ReadContentResponse) error { + return x.StreamServer.SendMsg(m) +} + +type TTRPCContent_WriteServer interface { + Send(*WriteContentResponse) error + Recv() (*WriteContentRequest, error) + ttrpc.StreamServer +} + +type ttrpccontentWriteServer struct { + ttrpc.StreamServer +} + +func (x *ttrpccontentWriteServer) Send(m *WriteContentResponse) error { + return x.StreamServer.SendMsg(m) +} + +func (x *ttrpccontentWriteServer) Recv() (*WriteContentRequest, error) { + m := new(WriteContentRequest) + if err := x.StreamServer.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func RegisterTTRPCContentService(srv *ttrpc.Server, svc TTRPCContentService) { + srv.RegisterService("containerd.services.content.v1.Content", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Info": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req InfoRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Info(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UpdateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + "Delete": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteContentRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Delete(ctx, &req) + }, + "Status": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StatusRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Status(ctx, &req) + }, + "ListStatuses": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ListStatusesRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.ListStatuses(ctx, &req) + }, + "Abort": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req AbortRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Abort(ctx, &req) + }, + }, + Streams: map[string]ttrpc.Stream{ + "List": { + Handler: func(ctx context.Context, stream ttrpc.StreamServer) (interface{}, error) { + m := new(ListContentRequest) + if err := stream.RecvMsg(m); err != nil { + return nil, err + } + return nil, svc.List(ctx, m, &ttrpccontentListServer{stream}) + }, + StreamingClient: false, + StreamingServer: true, + }, + "Read": { + Handler: func(ctx context.Context, stream ttrpc.StreamServer) (interface{}, error) { + m := new(ReadContentRequest) + if err := stream.RecvMsg(m); err != nil { + return nil, err + } + return nil, svc.Read(ctx, m, &ttrpccontentReadServer{stream}) + }, + StreamingClient: false, + StreamingServer: true, + }, + "Write": { + Handler: func(ctx context.Context, stream ttrpc.StreamServer) (interface{}, error) { + return nil, svc.Write(ctx, &ttrpccontentWriteServer{stream}) + }, + StreamingClient: true, + StreamingServer: true, + }, + }, + }) +} + +type TTRPCContentClient interface { + Info(context.Context, *InfoRequest) (*InfoResponse, error) + Update(context.Context, *UpdateRequest) (*UpdateResponse, error) + List(context.Context, *ListContentRequest) (TTRPCContent_ListClient, error) + Delete(context.Context, *DeleteContentRequest) (*emptypb.Empty, error) + Read(context.Context, *ReadContentRequest) (TTRPCContent_ReadClient, error) + Status(context.Context, *StatusRequest) (*StatusResponse, error) + ListStatuses(context.Context, *ListStatusesRequest) (*ListStatusesResponse, error) + Write(context.Context) (TTRPCContent_WriteClient, error) + Abort(context.Context, *AbortRequest) (*emptypb.Empty, error) +} + +type ttrpccontentClient struct { + client *ttrpc.Client +} + +func NewTTRPCContentClient(client *ttrpc.Client) TTRPCContentClient { + return &ttrpccontentClient{ + client: client, + } +} + +func (c *ttrpccontentClient) Info(ctx context.Context, req *InfoRequest) (*InfoResponse, error) { + var resp InfoResponse + if err := c.client.Call(ctx, "containerd.services.content.v1.Content", "Info", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontentClient) Update(ctx context.Context, req *UpdateRequest) (*UpdateResponse, error) { + var resp UpdateResponse + if err := c.client.Call(ctx, "containerd.services.content.v1.Content", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontentClient) List(ctx context.Context, req *ListContentRequest) (TTRPCContent_ListClient, error) { + stream, err := c.client.NewStream(ctx, &ttrpc.StreamDesc{ + StreamingClient: false, + StreamingServer: true, + }, "containerd.services.content.v1.Content", "List", req) + if err != nil { + return nil, err + } + x := &ttrpccontentListClient{stream} + return x, nil +} + +type TTRPCContent_ListClient interface { + Recv() (*ListContentResponse, error) + ttrpc.ClientStream +} + +type ttrpccontentListClient struct { + ttrpc.ClientStream +} + +func (x *ttrpccontentListClient) Recv() (*ListContentResponse, error) { + m := new(ListContentResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *ttrpccontentClient) Delete(ctx context.Context, req *DeleteContentRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.content.v1.Content", "Delete", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontentClient) Read(ctx context.Context, req *ReadContentRequest) (TTRPCContent_ReadClient, error) { + stream, err := c.client.NewStream(ctx, &ttrpc.StreamDesc{ + StreamingClient: false, + StreamingServer: true, + }, "containerd.services.content.v1.Content", "Read", req) + if err != nil { + return nil, err + } + x := &ttrpccontentReadClient{stream} + return x, nil +} + +type TTRPCContent_ReadClient interface { + Recv() (*ReadContentResponse, error) + ttrpc.ClientStream +} + +type ttrpccontentReadClient struct { + ttrpc.ClientStream +} + +func (x *ttrpccontentReadClient) Recv() (*ReadContentResponse, error) { + m := new(ReadContentResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *ttrpccontentClient) Status(ctx context.Context, req *StatusRequest) (*StatusResponse, error) { + var resp StatusResponse + if err := c.client.Call(ctx, "containerd.services.content.v1.Content", "Status", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontentClient) ListStatuses(ctx context.Context, req *ListStatusesRequest) (*ListStatusesResponse, error) { + var resp ListStatusesResponse + if err := c.client.Call(ctx, "containerd.services.content.v1.Content", "ListStatuses", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontentClient) Write(ctx context.Context) (TTRPCContent_WriteClient, error) { + stream, err := c.client.NewStream(ctx, &ttrpc.StreamDesc{ + StreamingClient: true, + StreamingServer: true, + }, "containerd.services.content.v1.Content", "Write", nil) + if err != nil { + return nil, err + } + x := &ttrpccontentWriteClient{stream} + return x, nil +} + +type TTRPCContent_WriteClient interface { + Send(*WriteContentRequest) error + Recv() (*WriteContentResponse, error) + ttrpc.ClientStream +} + +type ttrpccontentWriteClient struct { + ttrpc.ClientStream +} + +func (x *ttrpccontentWriteClient) Send(m *WriteContentRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *ttrpccontentWriteClient) Recv() (*WriteContentResponse, error) { + m := new(WriteContentResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *ttrpccontentClient) Abort(ctx context.Context, req *AbortRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.content.v1.Content", "Abort", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/diff/v1/diff.pb.go b/api/services/diff/v1/diff.pb.go index fa58b91f6ea5..e3fd23afe7bd 100644 --- a/api/services/diff/v1/diff.pb.go +++ b/api/services/diff/v1/diff.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/diff/v1/diff.proto +// protoc (unknown) +// source: services/diff/v1/diff.proto package diff @@ -26,6 +26,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -46,12 +47,14 @@ type ApplyRequest struct { Diff *types.Descriptor `protobuf:"bytes,1,opt,name=diff,proto3" json:"diff,omitempty"` Mounts []*types.Mount `protobuf:"bytes,2,rep,name=mounts,proto3" json:"mounts,omitempty"` Payloads map[string]*anypb.Any `protobuf:"bytes,3,rep,name=payloads,proto3" json:"payloads,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // SyncFs is to synchronize the underlying filesystem containing files. + SyncFs bool `protobuf:"varint,4,opt,name=sync_fs,json=syncFs,proto3" json:"sync_fs,omitempty"` } func (x *ApplyRequest) Reset() { *x = ApplyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[0] + mi := &file_services_diff_v1_diff_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -64,7 +67,7 @@ func (x *ApplyRequest) String() string { func (*ApplyRequest) ProtoMessage() {} func (x *ApplyRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[0] + mi := &file_services_diff_v1_diff_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -77,7 +80,7 @@ func (x *ApplyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyRequest.ProtoReflect.Descriptor instead. func (*ApplyRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescGZIP(), []int{0} + return file_services_diff_v1_diff_proto_rawDescGZIP(), []int{0} } func (x *ApplyRequest) GetDiff() *types.Descriptor { @@ -101,6 +104,13 @@ func (x *ApplyRequest) GetPayloads() map[string]*anypb.Any { return nil } +func (x *ApplyRequest) GetSyncFs() bool { + if x != nil { + return x.SyncFs + } + return false +} + type ApplyResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -115,7 +125,7 @@ type ApplyResponse struct { func (x *ApplyResponse) Reset() { *x = ApplyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[1] + mi := &file_services_diff_v1_diff_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -128,7 +138,7 @@ func (x *ApplyResponse) String() string { func (*ApplyResponse) ProtoMessage() {} func (x *ApplyResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[1] + mi := &file_services_diff_v1_diff_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -141,7 +151,7 @@ func (x *ApplyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyResponse.ProtoReflect.Descriptor instead. func (*ApplyResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescGZIP(), []int{1} + return file_services_diff_v1_diff_proto_rawDescGZIP(), []int{1} } func (x *ApplyResponse) GetApplied() *types.Descriptor { @@ -171,12 +181,18 @@ type DiffRequest struct { // Labels are the labels to apply to the generated content // on content store commit. Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // SourceDateEpoch specifies the timestamp used to provide control for reproducibility. + // See also https://reproducible-builds.org/docs/source-date-epoch/ . + // + // Since containerd v2.0, the whiteout timestamps are set to zero (1970-01-01), + // not to the source date epoch. + SourceDateEpoch *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=source_date_epoch,json=sourceDateEpoch,proto3" json:"source_date_epoch,omitempty"` } func (x *DiffRequest) Reset() { *x = DiffRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[2] + mi := &file_services_diff_v1_diff_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -189,7 +205,7 @@ func (x *DiffRequest) String() string { func (*DiffRequest) ProtoMessage() {} func (x *DiffRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[2] + mi := &file_services_diff_v1_diff_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -202,7 +218,7 @@ func (x *DiffRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DiffRequest.ProtoReflect.Descriptor instead. func (*DiffRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescGZIP(), []int{2} + return file_services_diff_v1_diff_proto_rawDescGZIP(), []int{2} } func (x *DiffRequest) GetLeft() []*types.Mount { @@ -240,6 +256,13 @@ func (x *DiffRequest) GetLabels() map[string]string { return nil } +func (x *DiffRequest) GetSourceDateEpoch() *timestamppb.Timestamp { + if x != nil { + return x.SourceDateEpoch + } + return nil +} + type DiffResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -252,7 +275,7 @@ type DiffResponse struct { func (x *DiffResponse) Reset() { *x = DiffResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[3] + mi := &file_services_diff_v1_diff_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -265,7 +288,7 @@ func (x *DiffResponse) String() string { func (*DiffResponse) ProtoMessage() {} func (x *DiffResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[3] + mi := &file_services_diff_v1_diff_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -278,7 +301,7 @@ func (x *DiffResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DiffResponse.ProtoReflect.Descriptor instead. func (*DiffResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescGZIP(), []int{3} + return file_services_diff_v1_diff_proto_rawDescGZIP(), []int{3} } func (x *DiffResponse) GetDiff() *types.Descriptor { @@ -288,113 +311,115 @@ func (x *DiffResponse) GetDiff() *types.Descriptor { return nil } -var File_github_com_containerd_containerd_api_services_diff_v1_diff_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDesc = []byte{ - 0x0a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x64, 0x69, 0x66, 0x66, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x1b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x1a, - 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x99, 0x02, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x30, 0x0a, 0x04, 0x64, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x64, 0x69, - 0x66, 0x66, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x08, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x1a, 0x51, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x47, 0x0a, 0x0d, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, +var File_services_diff_v1_diff_proto protoreflect.FileDescriptor + +var file_services_diff_v1_diff_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x2f, + 0x76, 0x31, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1b, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xb2, 0x02, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x64, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x04, + 0x64, 0x69, 0x66, 0x66, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x08, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x64, 0x69, + 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x79, + 0x6e, 0x63, 0x5f, 0x66, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x79, 0x6e, + 0x63, 0x46, 0x73, 0x1a, 0x51, 0x0a, 0x0d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x47, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x22, + 0xeb, 0x02, 0x0a, 0x0b, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x2b, 0x0a, 0x04, 0x6c, 0x65, 0x66, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x65, 0x64, 0x22, 0xa3, 0x02, 0x0a, 0x0b, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x6c, 0x65, 0x66, 0x74, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x04, 0x6c, 0x65, 0x66, - 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x72, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x05, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, - 0x66, 0x12, 0x4c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x04, 0x6c, 0x65, 0x66, 0x74, 0x12, 0x2d, 0x0a, 0x05, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x05, 0x72, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, + 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x4c, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x46, 0x0a, 0x11, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x45, 0x70, 0x6f, + 0x63, 0x68, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x40, 0x0a, + 0x0c, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, + 0x04, 0x64, 0x69, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x64, 0x69, 0x66, 0x66, 0x32, + 0xc3, 0x01, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, 0x12, 0x5e, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x40, 0x0a, 0x0c, 0x44, 0x69, - 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x64, 0x69, - 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x64, 0x69, 0x66, 0x66, 0x32, 0xc3, 0x01, 0x0a, - 0x04, 0x44, 0x69, 0x66, 0x66, 0x12, 0x5e, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x29, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, - 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, 0x12, 0x28, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x64, 0x69, - 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x69, 0x66, 0x66, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, + 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x64, 0x69, 0x66, 0x66, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3c, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x2f, 0x76, 0x31, 0x3b, 0x64, + 0x69, 0x66, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescData = file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDesc + file_services_diff_v1_diff_proto_rawDescOnce sync.Once + file_services_diff_v1_diff_proto_rawDescData = file_services_diff_v1_diff_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescData) +func file_services_diff_v1_diff_proto_rawDescGZIP() []byte { + file_services_diff_v1_diff_proto_rawDescOnce.Do(func() { + file_services_diff_v1_diff_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_diff_v1_diff_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDescData -} - -var file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_goTypes = []interface{}{ - (*ApplyRequest)(nil), // 0: containerd.services.diff.v1.ApplyRequest - (*ApplyResponse)(nil), // 1: containerd.services.diff.v1.ApplyResponse - (*DiffRequest)(nil), // 2: containerd.services.diff.v1.DiffRequest - (*DiffResponse)(nil), // 3: containerd.services.diff.v1.DiffResponse - nil, // 4: containerd.services.diff.v1.ApplyRequest.PayloadsEntry - nil, // 5: containerd.services.diff.v1.DiffRequest.LabelsEntry - (*types.Descriptor)(nil), // 6: containerd.types.Descriptor - (*types.Mount)(nil), // 7: containerd.types.Mount - (*anypb.Any)(nil), // 8: google.protobuf.Any -} -var file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_depIdxs = []int32{ + return file_services_diff_v1_diff_proto_rawDescData +} + +var file_services_diff_v1_diff_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_services_diff_v1_diff_proto_goTypes = []interface{}{ + (*ApplyRequest)(nil), // 0: containerd.services.diff.v1.ApplyRequest + (*ApplyResponse)(nil), // 1: containerd.services.diff.v1.ApplyResponse + (*DiffRequest)(nil), // 2: containerd.services.diff.v1.DiffRequest + (*DiffResponse)(nil), // 3: containerd.services.diff.v1.DiffResponse + nil, // 4: containerd.services.diff.v1.ApplyRequest.PayloadsEntry + nil, // 5: containerd.services.diff.v1.DiffRequest.LabelsEntry + (*types.Descriptor)(nil), // 6: containerd.types.Descriptor + (*types.Mount)(nil), // 7: containerd.types.Mount + (*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp + (*anypb.Any)(nil), // 9: google.protobuf.Any +} +var file_services_diff_v1_diff_proto_depIdxs = []int32{ 6, // 0: containerd.services.diff.v1.ApplyRequest.diff:type_name -> containerd.types.Descriptor 7, // 1: containerd.services.diff.v1.ApplyRequest.mounts:type_name -> containerd.types.Mount 4, // 2: containerd.services.diff.v1.ApplyRequest.payloads:type_name -> containerd.services.diff.v1.ApplyRequest.PayloadsEntry @@ -402,26 +427,27 @@ var file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_depIdx 7, // 4: containerd.services.diff.v1.DiffRequest.left:type_name -> containerd.types.Mount 7, // 5: containerd.services.diff.v1.DiffRequest.right:type_name -> containerd.types.Mount 5, // 6: containerd.services.diff.v1.DiffRequest.labels:type_name -> containerd.services.diff.v1.DiffRequest.LabelsEntry - 6, // 7: containerd.services.diff.v1.DiffResponse.diff:type_name -> containerd.types.Descriptor - 8, // 8: containerd.services.diff.v1.ApplyRequest.PayloadsEntry.value:type_name -> google.protobuf.Any - 0, // 9: containerd.services.diff.v1.Diff.Apply:input_type -> containerd.services.diff.v1.ApplyRequest - 2, // 10: containerd.services.diff.v1.Diff.Diff:input_type -> containerd.services.diff.v1.DiffRequest - 1, // 11: containerd.services.diff.v1.Diff.Apply:output_type -> containerd.services.diff.v1.ApplyResponse - 3, // 12: containerd.services.diff.v1.Diff.Diff:output_type -> containerd.services.diff.v1.DiffResponse - 11, // [11:13] is the sub-list for method output_type - 9, // [9:11] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name -} - -func init() { file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_init() } -func file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_init() { - if File_github_com_containerd_containerd_api_services_diff_v1_diff_proto != nil { + 8, // 7: containerd.services.diff.v1.DiffRequest.source_date_epoch:type_name -> google.protobuf.Timestamp + 6, // 8: containerd.services.diff.v1.DiffResponse.diff:type_name -> containerd.types.Descriptor + 9, // 9: containerd.services.diff.v1.ApplyRequest.PayloadsEntry.value:type_name -> google.protobuf.Any + 0, // 10: containerd.services.diff.v1.Diff.Apply:input_type -> containerd.services.diff.v1.ApplyRequest + 2, // 11: containerd.services.diff.v1.Diff.Diff:input_type -> containerd.services.diff.v1.DiffRequest + 1, // 12: containerd.services.diff.v1.Diff.Apply:output_type -> containerd.services.diff.v1.ApplyResponse + 3, // 13: containerd.services.diff.v1.Diff.Diff:output_type -> containerd.services.diff.v1.DiffResponse + 12, // [12:14] is the sub-list for method output_type + 10, // [10:12] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name +} + +func init() { file_services_diff_v1_diff_proto_init() } +func file_services_diff_v1_diff_proto_init() { + if File_services_diff_v1_diff_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_diff_v1_diff_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplyRequest); i { case 0: return &v.state @@ -433,7 +459,7 @@ func file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_init( return nil } } - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_diff_v1_diff_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ApplyResponse); i { case 0: return &v.state @@ -445,7 +471,7 @@ func file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_init( return nil } } - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_diff_v1_diff_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiffRequest); i { case 0: return &v.state @@ -457,7 +483,7 @@ func file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_init( return nil } } - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_diff_v1_diff_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiffResponse); i { case 0: return &v.state @@ -474,18 +500,18 @@ func file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_init( out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDesc, + RawDescriptor: file_services_diff_v1_diff_proto_rawDesc, NumEnums: 0, NumMessages: 6, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_msgTypes, + GoTypes: file_services_diff_v1_diff_proto_goTypes, + DependencyIndexes: file_services_diff_v1_diff_proto_depIdxs, + MessageInfos: file_services_diff_v1_diff_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_diff_v1_diff_proto = out.File - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_diff_v1_diff_proto_depIdxs = nil + File_services_diff_v1_diff_proto = out.File + file_services_diff_v1_diff_proto_rawDesc = nil + file_services_diff_v1_diff_proto_goTypes = nil + file_services_diff_v1_diff_proto_depIdxs = nil } diff --git a/api/services/diff/v1/diff.proto b/api/services/diff/v1/diff.proto index 03438f39fe33..53c6aa2b2fbd 100644 --- a/api/services/diff/v1/diff.proto +++ b/api/services/diff/v1/diff.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -19,62 +19,72 @@ syntax = "proto3"; package containerd.services.diff.v1; import "google/protobuf/any.proto"; -import "github.com/containerd/containerd/api/types/mount.proto"; -import "github.com/containerd/containerd/api/types/descriptor.proto"; +import "google/protobuf/timestamp.proto"; +import "types/descriptor.proto"; +import "types/mount.proto"; option go_package = "github.com/containerd/containerd/api/services/diff/v1;diff"; // Diff service creates and applies diffs service Diff { - // Apply applies the content associated with the provided digests onto - // the provided mounts. Archive content will be extracted and - // decompressed if necessary. - rpc Apply(ApplyRequest) returns (ApplyResponse); - - // Diff creates a diff between the given mounts and uploads the result - // to the content store. - rpc Diff(DiffRequest) returns (DiffResponse); + // Apply applies the content associated with the provided digests onto + // the provided mounts. Archive content will be extracted and + // decompressed if necessary. + rpc Apply(ApplyRequest) returns (ApplyResponse); + + // Diff creates a diff between the given mounts and uploads the result + // to the content store. + rpc Diff(DiffRequest) returns (DiffResponse); } message ApplyRequest { - // Diff is the descriptor of the diff to be extracted - containerd.types.Descriptor diff = 1; + // Diff is the descriptor of the diff to be extracted + containerd.types.Descriptor diff = 1; - repeated containerd.types.Mount mounts = 2; + repeated containerd.types.Mount mounts = 2; - map payloads = 3; + map payloads = 3; + // SyncFs is to synchronize the underlying filesystem containing files. + bool sync_fs = 4; } message ApplyResponse { - // Applied is the descriptor for the object which was applied. - // If the input was a compressed blob then the result will be - // the descriptor for the uncompressed blob. - containerd.types.Descriptor applied = 1; + // Applied is the descriptor for the object which was applied. + // If the input was a compressed blob then the result will be + // the descriptor for the uncompressed blob. + containerd.types.Descriptor applied = 1; } message DiffRequest { - // Left are the mounts which represent the older copy - // in which is the base of the computed changes. - repeated containerd.types.Mount left = 1; - - // Right are the mounts which represents the newer copy - // in which changes from the left were made into. - repeated containerd.types.Mount right = 2; - - // MediaType is the media type descriptor for the created diff - // object - string media_type = 3; - - // Ref identifies the pre-commit content store object. This - // reference can be used to get the status from the content store. - string ref = 4; - - // Labels are the labels to apply to the generated content - // on content store commit. - map labels = 5; + // Left are the mounts which represent the older copy + // in which is the base of the computed changes. + repeated containerd.types.Mount left = 1; + + // Right are the mounts which represents the newer copy + // in which changes from the left were made into. + repeated containerd.types.Mount right = 2; + + // MediaType is the media type descriptor for the created diff + // object + string media_type = 3; + + // Ref identifies the pre-commit content store object. This + // reference can be used to get the status from the content store. + string ref = 4; + + // Labels are the labels to apply to the generated content + // on content store commit. + map labels = 5; + + // SourceDateEpoch specifies the timestamp used to provide control for reproducibility. + // See also https://reproducible-builds.org/docs/source-date-epoch/ . + // + // Since containerd v2.0, the whiteout timestamps are set to zero (1970-01-01), + // not to the source date epoch. + google.protobuf.Timestamp source_date_epoch = 6; } message DiffResponse { - // Diff is the descriptor of the diff which can be applied - containerd.types.Descriptor diff = 3; + // Diff is the descriptor of the diff which can be applied + containerd.types.Descriptor diff = 3; } diff --git a/api/services/diff/v1/diff_grpc.pb.go b/api/services/diff/v1/diff_grpc.pb.go index daa3b1801ac4..87f0c9b84bd9 100644 --- a/api/services/diff/v1/diff_grpc.pb.go +++ b/api/services/diff/v1/diff_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/diff/v1/diff.proto +// - protoc (unknown) +// source: services/diff/v1/diff.proto package diff @@ -147,5 +149,5 @@ var Diff_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/diff/v1/diff.proto", + Metadata: "services/diff/v1/diff.proto", } diff --git a/api/services/diff/v1/diff_ttrpc.pb.go b/api/services/diff/v1/diff_ttrpc.pb.go new file mode 100644 index 000000000000..bf55d35170bf --- /dev/null +++ b/api/services/diff/v1/diff_ttrpc.pb.go @@ -0,0 +1,60 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/diff/v1/diff.proto +package diff + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" +) + +type TTRPCDiffService interface { + Apply(context.Context, *ApplyRequest) (*ApplyResponse, error) + Diff(context.Context, *DiffRequest) (*DiffResponse, error) +} + +func RegisterTTRPCDiffService(srv *ttrpc.Server, svc TTRPCDiffService) { + srv.RegisterService("containerd.services.diff.v1.Diff", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Apply": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ApplyRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Apply(ctx, &req) + }, + "Diff": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DiffRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Diff(ctx, &req) + }, + }, + }) +} + +type ttrpcdiffClient struct { + client *ttrpc.Client +} + +func NewTTRPCDiffClient(client *ttrpc.Client) TTRPCDiffService { + return &ttrpcdiffClient{ + client: client, + } +} + +func (c *ttrpcdiffClient) Apply(ctx context.Context, req *ApplyRequest) (*ApplyResponse, error) { + var resp ApplyResponse + if err := c.client.Call(ctx, "containerd.services.diff.v1.Diff", "Apply", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcdiffClient) Diff(ctx context.Context, req *DiffRequest) (*DiffResponse, error) { + var resp DiffResponse + if err := c.client.Call(ctx, "containerd.services.diff.v1.Diff", "Diff", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/events/v1/doc.go b/api/services/events/v1/doc.go index b7f86da86951..4470a663e8e2 100644 --- a/api/services/events/v1/doc.go +++ b/api/services/events/v1/doc.go @@ -16,3 +16,8 @@ // Package events defines the event pushing and subscription service. package events + +import types "github.com/containerd/containerd/api/types" + +// Deprecated: Use [types.Envelope]. +type Envelope = types.Envelope diff --git a/api/services/events/v1/events.pb.go b/api/services/events/v1/events.pb.go index f083d9fce29c..335329609251 100644 --- a/api/services/events/v1/events.pb.go +++ b/api/services/events/v1/events.pb.go @@ -16,18 +16,17 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/events/v1/events.proto +// protoc (unknown) +// source: services/events/v1/events.proto package events import ( - _ "github.com/containerd/containerd/protobuf/plugin" + types "github.com/containerd/containerd/api/types" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -51,7 +50,7 @@ type PublishRequest struct { func (x *PublishRequest) Reset() { *x = PublishRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[0] + mi := &file_services_events_v1_events_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -64,7 +63,7 @@ func (x *PublishRequest) String() string { func (*PublishRequest) ProtoMessage() {} func (x *PublishRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[0] + mi := &file_services_events_v1_events_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -77,7 +76,7 @@ func (x *PublishRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PublishRequest.ProtoReflect.Descriptor instead. func (*PublishRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescGZIP(), []int{0} + return file_services_events_v1_events_proto_rawDescGZIP(), []int{0} } func (x *PublishRequest) GetTopic() string { @@ -99,13 +98,13 @@ type ForwardRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Envelope *Envelope `protobuf:"bytes,1,opt,name=envelope,proto3" json:"envelope,omitempty"` + Envelope *types.Envelope `protobuf:"bytes,1,opt,name=envelope,proto3" json:"envelope,omitempty"` } func (x *ForwardRequest) Reset() { *x = ForwardRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[1] + mi := &file_services_events_v1_events_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -118,7 +117,7 @@ func (x *ForwardRequest) String() string { func (*ForwardRequest) ProtoMessage() {} func (x *ForwardRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[1] + mi := &file_services_events_v1_events_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -131,10 +130,10 @@ func (x *ForwardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ForwardRequest.ProtoReflect.Descriptor instead. func (*ForwardRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescGZIP(), []int{1} + return file_services_events_v1_events_proto_rawDescGZIP(), []int{1} } -func (x *ForwardRequest) GetEnvelope() *Envelope { +func (x *ForwardRequest) GetEnvelope() *types.Envelope { if x != nil { return x.Envelope } @@ -152,7 +151,7 @@ type SubscribeRequest struct { func (x *SubscribeRequest) Reset() { *x = SubscribeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[2] + mi := &file_services_events_v1_events_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -165,7 +164,7 @@ func (x *SubscribeRequest) String() string { func (*SubscribeRequest) ProtoMessage() {} func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[2] + mi := &file_services_events_v1_events_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -178,7 +177,7 @@ func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeRequest.ProtoReflect.Descriptor instead. func (*SubscribeRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescGZIP(), []int{2} + return file_services_events_v1_events_proto_rawDescGZIP(), []int{2} } func (x *SubscribeRequest) GetFilters() []string { @@ -188,192 +187,98 @@ func (x *SubscribeRequest) GetFilters() []string { return nil } -type Envelope struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - Topic string `protobuf:"bytes,3,opt,name=topic,proto3" json:"topic,omitempty"` - Event *anypb.Any `protobuf:"bytes,4,opt,name=event,proto3" json:"event,omitempty"` -} - -func (x *Envelope) Reset() { - *x = Envelope{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Envelope) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Envelope) ProtoMessage() {} - -func (x *Envelope) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Envelope.ProtoReflect.Descriptor instead. -func (*Envelope) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescGZIP(), []int{3} -} - -func (x *Envelope) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (x *Envelope) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -func (x *Envelope) GetTopic() string { - if x != nil { - return x.Topic - } - return "" -} - -func (x *Envelope) GetEvent() *anypb.Any { - if x != nil { - return x.Event - } - return nil -} - -var File_github_com_containerd_containerd_api_services_events_v1_events_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDesc = []byte{ - 0x0a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, - 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x52, 0x0a, 0x0e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, - 0x65, 0x52, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x10, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x08, 0x45, 0x6e, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x3a, 0x04, 0x80, 0xb9, 0x1f, 0x01, 0x32, 0x95, 0x02, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x50, 0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x2d, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x12, 0x50, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2d, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x67, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, +var File_services_events_v1_events_proto protoreflect.FileDescriptor + +var file_services_events_v1_events_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x52, 0x0a, 0x0e, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, + 0x48, 0x0a, 0x0e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x36, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, + 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x10, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x32, 0x88, 0x02, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x50, 0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x2d, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x50, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, + 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5a, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x30, 0x01, 0x42, 0x40, - 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, + 0x30, 0x01, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescData = file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDesc + file_services_events_v1_events_proto_rawDescOnce sync.Once + file_services_events_v1_events_proto_rawDescData = file_services_events_v1_events_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescData) +func file_services_events_v1_events_proto_rawDescGZIP() []byte { + file_services_events_v1_events_proto_rawDescOnce.Do(func() { + file_services_events_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_events_v1_events_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDescData -} - -var file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_github_com_containerd_containerd_api_services_events_v1_events_proto_goTypes = []interface{}{ - (*PublishRequest)(nil), // 0: containerd.services.events.v1.PublishRequest - (*ForwardRequest)(nil), // 1: containerd.services.events.v1.ForwardRequest - (*SubscribeRequest)(nil), // 2: containerd.services.events.v1.SubscribeRequest - (*Envelope)(nil), // 3: containerd.services.events.v1.Envelope - (*anypb.Any)(nil), // 4: google.protobuf.Any - (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 6: google.protobuf.Empty -} -var file_github_com_containerd_containerd_api_services_events_v1_events_proto_depIdxs = []int32{ - 4, // 0: containerd.services.events.v1.PublishRequest.event:type_name -> google.protobuf.Any - 3, // 1: containerd.services.events.v1.ForwardRequest.envelope:type_name -> containerd.services.events.v1.Envelope - 5, // 2: containerd.services.events.v1.Envelope.timestamp:type_name -> google.protobuf.Timestamp - 4, // 3: containerd.services.events.v1.Envelope.event:type_name -> google.protobuf.Any - 0, // 4: containerd.services.events.v1.Events.Publish:input_type -> containerd.services.events.v1.PublishRequest - 1, // 5: containerd.services.events.v1.Events.Forward:input_type -> containerd.services.events.v1.ForwardRequest - 2, // 6: containerd.services.events.v1.Events.Subscribe:input_type -> containerd.services.events.v1.SubscribeRequest - 6, // 7: containerd.services.events.v1.Events.Publish:output_type -> google.protobuf.Empty - 6, // 8: containerd.services.events.v1.Events.Forward:output_type -> google.protobuf.Empty - 3, // 9: containerd.services.events.v1.Events.Subscribe:output_type -> containerd.services.events.v1.Envelope - 7, // [7:10] is the sub-list for method output_type - 4, // [4:7] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_github_com_containerd_containerd_api_services_events_v1_events_proto_init() } -func file_github_com_containerd_containerd_api_services_events_v1_events_proto_init() { - if File_github_com_containerd_containerd_api_services_events_v1_events_proto != nil { + return file_services_events_v1_events_proto_rawDescData +} + +var file_services_events_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_services_events_v1_events_proto_goTypes = []interface{}{ + (*PublishRequest)(nil), // 0: containerd.services.events.v1.PublishRequest + (*ForwardRequest)(nil), // 1: containerd.services.events.v1.ForwardRequest + (*SubscribeRequest)(nil), // 2: containerd.services.events.v1.SubscribeRequest + (*anypb.Any)(nil), // 3: google.protobuf.Any + (*types.Envelope)(nil), // 4: containerd.types.Envelope + (*emptypb.Empty)(nil), // 5: google.protobuf.Empty +} +var file_services_events_v1_events_proto_depIdxs = []int32{ + 3, // 0: containerd.services.events.v1.PublishRequest.event:type_name -> google.protobuf.Any + 4, // 1: containerd.services.events.v1.ForwardRequest.envelope:type_name -> containerd.types.Envelope + 0, // 2: containerd.services.events.v1.Events.Publish:input_type -> containerd.services.events.v1.PublishRequest + 1, // 3: containerd.services.events.v1.Events.Forward:input_type -> containerd.services.events.v1.ForwardRequest + 2, // 4: containerd.services.events.v1.Events.Subscribe:input_type -> containerd.services.events.v1.SubscribeRequest + 5, // 5: containerd.services.events.v1.Events.Publish:output_type -> google.protobuf.Empty + 5, // 6: containerd.services.events.v1.Events.Forward:output_type -> google.protobuf.Empty + 4, // 7: containerd.services.events.v1.Events.Subscribe:output_type -> containerd.types.Envelope + 5, // [5:8] is the sub-list for method output_type + 2, // [2:5] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_services_events_v1_events_proto_init() } +func file_services_events_v1_events_proto_init() { + if File_services_events_v1_events_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_events_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PublishRequest); i { case 0: return &v.state @@ -385,7 +290,7 @@ func file_github_com_containerd_containerd_api_services_events_v1_events_proto_i return nil } } - file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_events_v1_events_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardRequest); i { case 0: return &v.state @@ -397,7 +302,7 @@ func file_github_com_containerd_containerd_api_services_events_v1_events_proto_i return nil } } - file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_events_v1_events_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeRequest); i { case 0: return &v.state @@ -409,35 +314,23 @@ func file_github_com_containerd_containerd_api_services_events_v1_events_proto_i return nil } } - file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Envelope); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDesc, + RawDescriptor: file_services_events_v1_events_proto_rawDesc, NumEnums: 0, - NumMessages: 4, + NumMessages: 3, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_events_v1_events_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_events_v1_events_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_events_v1_events_proto_msgTypes, + GoTypes: file_services_events_v1_events_proto_goTypes, + DependencyIndexes: file_services_events_v1_events_proto_depIdxs, + MessageInfos: file_services_events_v1_events_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_events_v1_events_proto = out.File - file_github_com_containerd_containerd_api_services_events_v1_events_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_events_v1_events_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_events_v1_events_proto_depIdxs = nil + File_services_events_v1_events_proto = out.File + file_services_events_v1_events_proto_rawDesc = nil + file_services_events_v1_events_proto_goTypes = nil + file_services_events_v1_events_proto_depIdxs = nil } diff --git a/api/services/events/v1/events.proto b/api/services/events/v1/events.proto index 3e0f11ffb840..a87da21c4f0d 100644 --- a/api/services/events/v1/events.proto +++ b/api/services/events/v1/events.proto @@ -1,71 +1,62 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.services.events.v1; -import "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; +import "types/event.proto"; option go_package = "github.com/containerd/containerd/api/services/events/v1;events"; service Events { - // Publish an event to a topic. - // - // The event will be packed into a timestamp envelope with the namespace - // introspected from the context. The envelope will then be dispatched. - rpc Publish(PublishRequest) returns (google.protobuf.Empty); - - // Forward sends an event that has already been packaged into an envelope - // with a timestamp and namespace. - // - // This is useful if earlier timestamping is required or when forwarding on - // behalf of another component, namespace or publisher. - rpc Forward(ForwardRequest) returns (google.protobuf.Empty); - - // Subscribe to a stream of events, possibly returning only that match any - // of the provided filters. - // - // Unlike many other methods in containerd, subscribers will get messages - // from all namespaces unless otherwise specified. If this is not desired, - // a filter can be provided in the format 'namespace==' to - // restrict the received events. - rpc Subscribe(SubscribeRequest) returns (stream Envelope); + // Publish an event to a topic. + // + // The event will be packed into a timestamp envelope with the namespace + // introspected from the context. The envelope will then be dispatched. + rpc Publish(PublishRequest) returns (google.protobuf.Empty); + + // Forward sends an event that has already been packaged into an envelope + // with a timestamp and namespace. + // + // This is useful if earlier timestamping is required or when forwarding on + // behalf of another component, namespace or publisher. + rpc Forward(ForwardRequest) returns (google.protobuf.Empty); + + // Subscribe to a stream of events, possibly returning only that match any + // of the provided filters. + // + // Unlike many other methods in containerd, subscribers will get messages + // from all namespaces unless otherwise specified. If this is not desired, + // a filter can be provided in the format 'namespace==' to + // restrict the received events. + rpc Subscribe(SubscribeRequest) returns (stream containerd.types.Envelope); } message PublishRequest { - string topic = 1; - google.protobuf.Any event = 2; + string topic = 1; + google.protobuf.Any event = 2; } message ForwardRequest { - Envelope envelope = 1; + containerd.types.Envelope envelope = 1; } message SubscribeRequest { - repeated string filters = 1; -} - -message Envelope { - option (containerd.plugin.fieldpath) = true; - google.protobuf.Timestamp timestamp = 1; - string namespace = 2; - string topic = 3; - google.protobuf.Any event = 4; + repeated string filters = 1; } diff --git a/api/services/events/v1/events_grpc.pb.go b/api/services/events/v1/events_grpc.pb.go index 768306555cf1..500639bf5baa 100644 --- a/api/services/events/v1/events_grpc.pb.go +++ b/api/services/events/v1/events_grpc.pb.go @@ -1,13 +1,16 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/events/v1/events.proto +// - protoc (unknown) +// source: services/events/v1/events.proto package events import ( context "context" + types "github.com/containerd/containerd/api/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -86,7 +89,7 @@ func (c *eventsClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts } type Events_SubscribeClient interface { - Recv() (*Envelope, error) + Recv() (*types.Envelope, error) grpc.ClientStream } @@ -94,8 +97,8 @@ type eventsSubscribeClient struct { grpc.ClientStream } -func (x *eventsSubscribeClient) Recv() (*Envelope, error) { - m := new(Envelope) +func (x *eventsSubscribeClient) Recv() (*types.Envelope, error) { + m := new(types.Envelope) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } @@ -199,7 +202,7 @@ func _Events_Subscribe_Handler(srv interface{}, stream grpc.ServerStream) error } type Events_SubscribeServer interface { - Send(*Envelope) error + Send(*types.Envelope) error grpc.ServerStream } @@ -207,7 +210,7 @@ type eventsSubscribeServer struct { grpc.ServerStream } -func (x *eventsSubscribeServer) Send(m *Envelope) error { +func (x *eventsSubscribeServer) Send(m *types.Envelope) error { return x.ServerStream.SendMsg(m) } @@ -234,5 +237,5 @@ var Events_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, }, }, - Metadata: "github.com/containerd/containerd/api/services/events/v1/events.proto", + Metadata: "services/events/v1/events.proto", } diff --git a/api/services/events/v1/events_ttrpc.pb.go b/api/services/events/v1/events_ttrpc.pb.go new file mode 100644 index 000000000000..3a6ab38b136f --- /dev/null +++ b/api/services/events/v1/events_ttrpc.pb.go @@ -0,0 +1,124 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/events/v1/events.proto +package events + +import ( + context "context" + types "github.com/containerd/containerd/api/types" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCEventsService interface { + Publish(context.Context, *PublishRequest) (*emptypb.Empty, error) + Forward(context.Context, *ForwardRequest) (*emptypb.Empty, error) + Subscribe(context.Context, *SubscribeRequest, TTRPCEvents_SubscribeServer) error +} + +type TTRPCEvents_SubscribeServer interface { + Send(*types.Envelope) error + ttrpc.StreamServer +} + +type ttrpceventsSubscribeServer struct { + ttrpc.StreamServer +} + +func (x *ttrpceventsSubscribeServer) Send(m *types.Envelope) error { + return x.StreamServer.SendMsg(m) +} + +func RegisterTTRPCEventsService(srv *ttrpc.Server, svc TTRPCEventsService) { + srv.RegisterService("containerd.services.events.v1.Events", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Publish": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PublishRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Publish(ctx, &req) + }, + "Forward": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ForwardRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Forward(ctx, &req) + }, + }, + Streams: map[string]ttrpc.Stream{ + "Subscribe": { + Handler: func(ctx context.Context, stream ttrpc.StreamServer) (interface{}, error) { + m := new(SubscribeRequest) + if err := stream.RecvMsg(m); err != nil { + return nil, err + } + return nil, svc.Subscribe(ctx, m, &ttrpceventsSubscribeServer{stream}) + }, + StreamingClient: false, + StreamingServer: true, + }, + }, + }) +} + +type TTRPCEventsClient interface { + Publish(context.Context, *PublishRequest) (*emptypb.Empty, error) + Forward(context.Context, *ForwardRequest) (*emptypb.Empty, error) + Subscribe(context.Context, *SubscribeRequest) (TTRPCEvents_SubscribeClient, error) +} + +type ttrpceventsClient struct { + client *ttrpc.Client +} + +func NewTTRPCEventsClient(client *ttrpc.Client) TTRPCEventsClient { + return &ttrpceventsClient{ + client: client, + } +} + +func (c *ttrpceventsClient) Publish(ctx context.Context, req *PublishRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.events.v1.Events", "Publish", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpceventsClient) Forward(ctx context.Context, req *ForwardRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.events.v1.Events", "Forward", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpceventsClient) Subscribe(ctx context.Context, req *SubscribeRequest) (TTRPCEvents_SubscribeClient, error) { + stream, err := c.client.NewStream(ctx, &ttrpc.StreamDesc{ + StreamingClient: false, + StreamingServer: true, + }, "containerd.services.events.v1.Events", "Subscribe", req) + if err != nil { + return nil, err + } + x := &ttrpceventsSubscribeClient{stream} + return x, nil +} + +type TTRPCEvents_SubscribeClient interface { + Recv() (*types.Envelope, error) + ttrpc.ClientStream +} + +type ttrpceventsSubscribeClient struct { + ttrpc.ClientStream +} + +func (x *ttrpceventsSubscribeClient) Recv() (*types.Envelope, error) { + m := new(types.Envelope) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} diff --git a/api/services/images/v1/images.pb.go b/api/services/images/v1/images.pb.go index ebbd3f8422f9..3aaf7da0ce46 100644 --- a/api/services/images/v1/images.pb.go +++ b/api/services/images/v1/images.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/images/v1/images.proto +// protoc (unknown) +// source: services/images/v1/images.proto package images @@ -65,7 +65,7 @@ type Image struct { func (x *Image) Reset() { *x = Image{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[0] + mi := &file_services_images_v1_images_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -78,7 +78,7 @@ func (x *Image) String() string { func (*Image) ProtoMessage() {} func (x *Image) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[0] + mi := &file_services_images_v1_images_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -91,7 +91,7 @@ func (x *Image) ProtoReflect() protoreflect.Message { // Deprecated: Use Image.ProtoReflect.Descriptor instead. func (*Image) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{0} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{0} } func (x *Image) GetName() string { @@ -140,7 +140,7 @@ type GetImageRequest struct { func (x *GetImageRequest) Reset() { *x = GetImageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[1] + mi := &file_services_images_v1_images_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -153,7 +153,7 @@ func (x *GetImageRequest) String() string { func (*GetImageRequest) ProtoMessage() {} func (x *GetImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[1] + mi := &file_services_images_v1_images_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -166,7 +166,7 @@ func (x *GetImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetImageRequest.ProtoReflect.Descriptor instead. func (*GetImageRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{1} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{1} } func (x *GetImageRequest) GetName() string { @@ -187,7 +187,7 @@ type GetImageResponse struct { func (x *GetImageResponse) Reset() { *x = GetImageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[2] + mi := &file_services_images_v1_images_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -200,7 +200,7 @@ func (x *GetImageResponse) String() string { func (*GetImageResponse) ProtoMessage() {} func (x *GetImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[2] + mi := &file_services_images_v1_images_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -213,7 +213,7 @@ func (x *GetImageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetImageResponse.ProtoReflect.Descriptor instead. func (*GetImageResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{2} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{2} } func (x *GetImageResponse) GetImage() *Image { @@ -228,13 +228,14 @@ type CreateImageRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Image *Image `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` + Image *Image `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` + SourceDateEpoch *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=source_date_epoch,json=sourceDateEpoch,proto3" json:"source_date_epoch,omitempty"` } func (x *CreateImageRequest) Reset() { *x = CreateImageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[3] + mi := &file_services_images_v1_images_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -247,7 +248,7 @@ func (x *CreateImageRequest) String() string { func (*CreateImageRequest) ProtoMessage() {} func (x *CreateImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[3] + mi := &file_services_images_v1_images_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -260,7 +261,7 @@ func (x *CreateImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateImageRequest.ProtoReflect.Descriptor instead. func (*CreateImageRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{3} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{3} } func (x *CreateImageRequest) GetImage() *Image { @@ -270,6 +271,13 @@ func (x *CreateImageRequest) GetImage() *Image { return nil } +func (x *CreateImageRequest) GetSourceDateEpoch() *timestamppb.Timestamp { + if x != nil { + return x.SourceDateEpoch + } + return nil +} + type CreateImageResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -281,7 +289,7 @@ type CreateImageResponse struct { func (x *CreateImageResponse) Reset() { *x = CreateImageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[4] + mi := &file_services_images_v1_images_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -294,7 +302,7 @@ func (x *CreateImageResponse) String() string { func (*CreateImageResponse) ProtoMessage() {} func (x *CreateImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[4] + mi := &file_services_images_v1_images_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -307,7 +315,7 @@ func (x *CreateImageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateImageResponse.ProtoReflect.Descriptor instead. func (*CreateImageResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{4} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{4} } func (x *CreateImageResponse) GetImage() *Image { @@ -328,13 +336,14 @@ type UpdateImageRequest struct { Image *Image `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` // UpdateMask specifies which fields to perform the update on. If empty, // the operation applies to all fields. - UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + SourceDateEpoch *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=source_date_epoch,json=sourceDateEpoch,proto3" json:"source_date_epoch,omitempty"` } func (x *UpdateImageRequest) Reset() { *x = UpdateImageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[5] + mi := &file_services_images_v1_images_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -347,7 +356,7 @@ func (x *UpdateImageRequest) String() string { func (*UpdateImageRequest) ProtoMessage() {} func (x *UpdateImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[5] + mi := &file_services_images_v1_images_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -360,7 +369,7 @@ func (x *UpdateImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateImageRequest.ProtoReflect.Descriptor instead. func (*UpdateImageRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{5} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{5} } func (x *UpdateImageRequest) GetImage() *Image { @@ -377,6 +386,13 @@ func (x *UpdateImageRequest) GetUpdateMask() *fieldmaskpb.FieldMask { return nil } +func (x *UpdateImageRequest) GetSourceDateEpoch() *timestamppb.Timestamp { + if x != nil { + return x.SourceDateEpoch + } + return nil +} + type UpdateImageResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -388,7 +404,7 @@ type UpdateImageResponse struct { func (x *UpdateImageResponse) Reset() { *x = UpdateImageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[6] + mi := &file_services_images_v1_images_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -401,7 +417,7 @@ func (x *UpdateImageResponse) String() string { func (*UpdateImageResponse) ProtoMessage() {} func (x *UpdateImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[6] + mi := &file_services_images_v1_images_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -414,7 +430,7 @@ func (x *UpdateImageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateImageResponse.ProtoReflect.Descriptor instead. func (*UpdateImageResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{6} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{6} } func (x *UpdateImageResponse) GetImage() *Image { @@ -436,7 +452,7 @@ type ListImagesRequest struct { // filters. Expanded, images that match the following will be // returned: // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] // // If filters is zero-length or nil, all items will be returned. Filters []string `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"` @@ -445,7 +461,7 @@ type ListImagesRequest struct { func (x *ListImagesRequest) Reset() { *x = ListImagesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[7] + mi := &file_services_images_v1_images_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -458,7 +474,7 @@ func (x *ListImagesRequest) String() string { func (*ListImagesRequest) ProtoMessage() {} func (x *ListImagesRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[7] + mi := &file_services_images_v1_images_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -471,7 +487,7 @@ func (x *ListImagesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListImagesRequest.ProtoReflect.Descriptor instead. func (*ListImagesRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{7} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{7} } func (x *ListImagesRequest) GetFilters() []string { @@ -492,7 +508,7 @@ type ListImagesResponse struct { func (x *ListImagesResponse) Reset() { *x = ListImagesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[8] + mi := &file_services_images_v1_images_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -505,7 +521,7 @@ func (x *ListImagesResponse) String() string { func (*ListImagesResponse) ProtoMessage() {} func (x *ListImagesResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[8] + mi := &file_services_images_v1_images_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -518,7 +534,7 @@ func (x *ListImagesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListImagesResponse.ProtoReflect.Descriptor instead. func (*ListImagesResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{8} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{8} } func (x *ListImagesResponse) GetImages() []*Image { @@ -539,12 +555,17 @@ type DeleteImageRequest struct { // // Default is false Sync bool `protobuf:"varint,2,opt,name=sync,proto3" json:"sync,omitempty"` + // Target value for image to be deleted + // + // If image descriptor does not match the same digest, + // the delete operation will return "not found" error. + Target *types.Descriptor `protobuf:"bytes,3,opt,name=target,proto3,oneof" json:"target,omitempty"` } func (x *DeleteImageRequest) Reset() { *x = DeleteImageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[9] + mi := &file_services_images_v1_images_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -557,7 +578,7 @@ func (x *DeleteImageRequest) String() string { func (*DeleteImageRequest) ProtoMessage() {} func (x *DeleteImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[9] + mi := &file_services_images_v1_images_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -570,7 +591,7 @@ func (x *DeleteImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteImageRequest.ProtoReflect.Descriptor instead. func (*DeleteImageRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP(), []int{9} + return file_services_images_v1_images_proto_rawDescGZIP(), []int{9} } func (x *DeleteImageRequest) GetName() string { @@ -587,145 +608,160 @@ func (x *DeleteImageRequest) GetSync() bool { return false } -var File_github_com_containerd_containerd_api_services_images_v1_images_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDesc = []byte{ - 0x0a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xcc, 0x02, 0x0a, 0x05, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, +func (x *DeleteImageRequest) GetTarget() *types.Descriptor { + if x != nil { + return x.Target + } + return nil +} + +var File_services_images_v1_images_proto protoreflect.FileDescriptor + +var file_services_images_v1_images_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x34, 0x0a, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, + 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x16, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcc, 0x02, 0x0a, 0x05, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x34, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x06, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4e, + 0x0a, 0x10, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x98, + 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x12, 0x46, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x44, 0x61, 0x74, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x51, 0x0a, 0x13, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xd5, 0x01, 0x0a, + 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x25, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x05, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x50, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, - 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x8d, 0x01, - 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, - 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x51, 0x0a, - 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x22, 0x2d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, - 0x52, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x06, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, - 0x63, 0x32, 0x94, 0x04, 0x0a, 0x06, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x03, - 0x47, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x2e, 0x63, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, + 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x46, 0x0a, 0x11, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x65, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x22, 0x51, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x05, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x52, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x12, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x39, 0x0a, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x32, + 0x94, 0x04, 0x0a, 0x06, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x03, 0x47, 0x65, + 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, + 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, + 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x53, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, + 0x31, 0x3b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescData = file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDesc + file_services_images_v1_images_proto_rawDescOnce sync.Once + file_services_images_v1_images_proto_rawDescData = file_services_images_v1_images_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescData) +func file_services_images_v1_images_proto_rawDescGZIP() []byte { + file_services_images_v1_images_proto_rawDescOnce.Do(func() { + file_services_images_v1_images_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_images_v1_images_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDescData + return file_services_images_v1_images_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_github_com_containerd_containerd_api_services_images_v1_images_proto_goTypes = []interface{}{ +var file_services_images_v1_images_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_services_images_v1_images_proto_goTypes = []interface{}{ (*Image)(nil), // 0: containerd.services.images.v1.Image (*GetImageRequest)(nil), // 1: containerd.services.images.v1.GetImageRequest (*GetImageResponse)(nil), // 2: containerd.services.images.v1.GetImageResponse @@ -742,42 +778,45 @@ var file_github_com_containerd_containerd_api_services_images_v1_images_proto_go (*fieldmaskpb.FieldMask)(nil), // 13: google.protobuf.FieldMask (*emptypb.Empty)(nil), // 14: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_images_v1_images_proto_depIdxs = []int32{ +var file_services_images_v1_images_proto_depIdxs = []int32{ 10, // 0: containerd.services.images.v1.Image.labels:type_name -> containerd.services.images.v1.Image.LabelsEntry 11, // 1: containerd.services.images.v1.Image.target:type_name -> containerd.types.Descriptor 12, // 2: containerd.services.images.v1.Image.created_at:type_name -> google.protobuf.Timestamp 12, // 3: containerd.services.images.v1.Image.updated_at:type_name -> google.protobuf.Timestamp 0, // 4: containerd.services.images.v1.GetImageResponse.image:type_name -> containerd.services.images.v1.Image 0, // 5: containerd.services.images.v1.CreateImageRequest.image:type_name -> containerd.services.images.v1.Image - 0, // 6: containerd.services.images.v1.CreateImageResponse.image:type_name -> containerd.services.images.v1.Image - 0, // 7: containerd.services.images.v1.UpdateImageRequest.image:type_name -> containerd.services.images.v1.Image - 13, // 8: containerd.services.images.v1.UpdateImageRequest.update_mask:type_name -> google.protobuf.FieldMask - 0, // 9: containerd.services.images.v1.UpdateImageResponse.image:type_name -> containerd.services.images.v1.Image - 0, // 10: containerd.services.images.v1.ListImagesResponse.images:type_name -> containerd.services.images.v1.Image - 1, // 11: containerd.services.images.v1.Images.Get:input_type -> containerd.services.images.v1.GetImageRequest - 7, // 12: containerd.services.images.v1.Images.List:input_type -> containerd.services.images.v1.ListImagesRequest - 3, // 13: containerd.services.images.v1.Images.Create:input_type -> containerd.services.images.v1.CreateImageRequest - 5, // 14: containerd.services.images.v1.Images.Update:input_type -> containerd.services.images.v1.UpdateImageRequest - 9, // 15: containerd.services.images.v1.Images.Delete:input_type -> containerd.services.images.v1.DeleteImageRequest - 2, // 16: containerd.services.images.v1.Images.Get:output_type -> containerd.services.images.v1.GetImageResponse - 8, // 17: containerd.services.images.v1.Images.List:output_type -> containerd.services.images.v1.ListImagesResponse - 4, // 18: containerd.services.images.v1.Images.Create:output_type -> containerd.services.images.v1.CreateImageResponse - 6, // 19: containerd.services.images.v1.Images.Update:output_type -> containerd.services.images.v1.UpdateImageResponse - 14, // 20: containerd.services.images.v1.Images.Delete:output_type -> google.protobuf.Empty - 16, // [16:21] is the sub-list for method output_type - 11, // [11:16] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name -} - -func init() { file_github_com_containerd_containerd_api_services_images_v1_images_proto_init() } -func file_github_com_containerd_containerd_api_services_images_v1_images_proto_init() { - if File_github_com_containerd_containerd_api_services_images_v1_images_proto != nil { + 12, // 6: containerd.services.images.v1.CreateImageRequest.source_date_epoch:type_name -> google.protobuf.Timestamp + 0, // 7: containerd.services.images.v1.CreateImageResponse.image:type_name -> containerd.services.images.v1.Image + 0, // 8: containerd.services.images.v1.UpdateImageRequest.image:type_name -> containerd.services.images.v1.Image + 13, // 9: containerd.services.images.v1.UpdateImageRequest.update_mask:type_name -> google.protobuf.FieldMask + 12, // 10: containerd.services.images.v1.UpdateImageRequest.source_date_epoch:type_name -> google.protobuf.Timestamp + 0, // 11: containerd.services.images.v1.UpdateImageResponse.image:type_name -> containerd.services.images.v1.Image + 0, // 12: containerd.services.images.v1.ListImagesResponse.images:type_name -> containerd.services.images.v1.Image + 11, // 13: containerd.services.images.v1.DeleteImageRequest.target:type_name -> containerd.types.Descriptor + 1, // 14: containerd.services.images.v1.Images.Get:input_type -> containerd.services.images.v1.GetImageRequest + 7, // 15: containerd.services.images.v1.Images.List:input_type -> containerd.services.images.v1.ListImagesRequest + 3, // 16: containerd.services.images.v1.Images.Create:input_type -> containerd.services.images.v1.CreateImageRequest + 5, // 17: containerd.services.images.v1.Images.Update:input_type -> containerd.services.images.v1.UpdateImageRequest + 9, // 18: containerd.services.images.v1.Images.Delete:input_type -> containerd.services.images.v1.DeleteImageRequest + 2, // 19: containerd.services.images.v1.Images.Get:output_type -> containerd.services.images.v1.GetImageResponse + 8, // 20: containerd.services.images.v1.Images.List:output_type -> containerd.services.images.v1.ListImagesResponse + 4, // 21: containerd.services.images.v1.Images.Create:output_type -> containerd.services.images.v1.CreateImageResponse + 6, // 22: containerd.services.images.v1.Images.Update:output_type -> containerd.services.images.v1.UpdateImageResponse + 14, // 23: containerd.services.images.v1.Images.Delete:output_type -> google.protobuf.Empty + 19, // [19:24] is the sub-list for method output_type + 14, // [14:19] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name +} + +func init() { file_services_images_v1_images_proto_init() } +func file_services_images_v1_images_proto_init() { + if File_services_images_v1_images_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Image); i { case 0: return &v.state @@ -789,7 +828,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetImageRequest); i { case 0: return &v.state @@ -801,7 +840,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetImageResponse); i { case 0: return &v.state @@ -813,7 +852,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateImageRequest); i { case 0: return &v.state @@ -825,7 +864,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateImageResponse); i { case 0: return &v.state @@ -837,7 +876,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateImageRequest); i { case 0: return &v.state @@ -849,7 +888,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateImageResponse); i { case 0: return &v.state @@ -861,7 +900,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListImagesRequest); i { case 0: return &v.state @@ -873,7 +912,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListImagesResponse); i { case 0: return &v.state @@ -885,7 +924,7 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i return nil } } - file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_services_images_v1_images_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteImageRequest); i { case 0: return &v.state @@ -898,22 +937,23 @@ func file_github_com_containerd_containerd_api_services_images_v1_images_proto_i } } } + file_services_images_v1_images_proto_msgTypes[9].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDesc, + RawDescriptor: file_services_images_v1_images_proto_rawDesc, NumEnums: 0, NumMessages: 11, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_images_v1_images_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_images_v1_images_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_images_v1_images_proto_msgTypes, + GoTypes: file_services_images_v1_images_proto_goTypes, + DependencyIndexes: file_services_images_v1_images_proto_depIdxs, + MessageInfos: file_services_images_v1_images_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_images_v1_images_proto = out.File - file_github_com_containerd_containerd_api_services_images_v1_images_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_images_v1_images_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_images_v1_images_proto_depIdxs = nil + File_services_images_v1_images_proto = out.File + file_services_images_v1_images_proto_rawDesc = nil + file_services_images_v1_images_proto_goTypes = nil + file_services_images_v1_images_proto_depIdxs = nil } diff --git a/api/services/images/v1/images.proto b/api/services/images/v1/images.proto index 1a1b0146f938..19d19207a8c2 100644 --- a/api/services/images/v1/images.proto +++ b/api/services/images/v1/images.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -21,7 +21,7 @@ package containerd.services.images.v1; import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/timestamp.proto"; -import "github.com/containerd/containerd/api/types/descriptor.proto"; +import "types/descriptor.proto"; option go_package = "github.com/containerd/containerd/api/services/images/v1;images"; @@ -37,103 +37,113 @@ option go_package = "github.com/containerd/containerd/api/services/images/v1;ima // // As such, this can really be considered a "metadata service". service Images { - // Get returns an image by name. - rpc Get(GetImageRequest) returns (GetImageResponse); + // Get returns an image by name. + rpc Get(GetImageRequest) returns (GetImageResponse); - // List returns a list of all images known to containerd. - rpc List(ListImagesRequest) returns (ListImagesResponse); + // List returns a list of all images known to containerd. + rpc List(ListImagesRequest) returns (ListImagesResponse); - // Create an image record in the metadata store. - // - // The name of the image must be unique. - rpc Create(CreateImageRequest) returns (CreateImageResponse); + // Create an image record in the metadata store. + // + // The name of the image must be unique. + rpc Create(CreateImageRequest) returns (CreateImageResponse); - // Update assigns the name to a given target image based on the provided - // image. - rpc Update(UpdateImageRequest) returns (UpdateImageResponse); + // Update assigns the name to a given target image based on the provided + // image. + rpc Update(UpdateImageRequest) returns (UpdateImageResponse); - // Delete deletes the image by name. - rpc Delete(DeleteImageRequest) returns (google.protobuf.Empty); + // Delete deletes the image by name. + rpc Delete(DeleteImageRequest) returns (google.protobuf.Empty); } message Image { - // Name provides a unique name for the image. - // - // Containerd treats this as the primary identifier. - string name = 1; - - // Labels provides free form labels for the image. These are runtime only - // and do not get inherited into the package image in any way. - // - // Labels may be updated using the field mask. - // The combined size of a key/value pair cannot exceed 4096 bytes. - map labels = 2; - - // Target describes the content entry point of the image. - containerd.types.Descriptor target = 3; - - // CreatedAt is the time the image was first created. - google.protobuf.Timestamp created_at = 7; - - // UpdatedAt is the last time the image was mutated. - google.protobuf.Timestamp updated_at = 8; + // Name provides a unique name for the image. + // + // Containerd treats this as the primary identifier. + string name = 1; + + // Labels provides free form labels for the image. These are runtime only + // and do not get inherited into the package image in any way. + // + // Labels may be updated using the field mask. + // The combined size of a key/value pair cannot exceed 4096 bytes. + map labels = 2; + + // Target describes the content entry point of the image. + containerd.types.Descriptor target = 3; + + // CreatedAt is the time the image was first created. + google.protobuf.Timestamp created_at = 7; + + // UpdatedAt is the last time the image was mutated. + google.protobuf.Timestamp updated_at = 8; } message GetImageRequest { - string name = 1; + string name = 1; } message GetImageResponse { - Image image = 1; + Image image = 1; } message CreateImageRequest { - Image image = 1; + Image image = 1; + + google.protobuf.Timestamp source_date_epoch = 2; } message CreateImageResponse { - Image image = 1; + Image image = 1; } message UpdateImageRequest { - // Image provides a full or partial image for update. - // - // The name field must be set or an error will be returned. - Image image = 1; - - // UpdateMask specifies which fields to perform the update on. If empty, - // the operation applies to all fields. - google.protobuf.FieldMask update_mask = 2; + // Image provides a full or partial image for update. + // + // The name field must be set or an error will be returned. + Image image = 1; + + // UpdateMask specifies which fields to perform the update on. If empty, + // the operation applies to all fields. + google.protobuf.FieldMask update_mask = 2; + + google.protobuf.Timestamp source_date_epoch = 3; } message UpdateImageResponse { - Image image = 1; + Image image = 1; } message ListImagesRequest { - // Filters contains one or more filters using the syntax defined in the - // containerd filter package. - // - // The returned result will be those that match any of the provided - // filters. Expanded, images that match the following will be - // returned: - // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] - // - // If filters is zero-length or nil, all items will be returned. - repeated string filters = 1; + // Filters contains one or more filters using the syntax defined in the + // containerd filter package. + // + // The returned result will be those that match any of the provided + // filters. Expanded, images that match the following will be + // returned: + // + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // + // If filters is zero-length or nil, all items will be returned. + repeated string filters = 1; } message ListImagesResponse { - repeated Image images = 1; + repeated Image images = 1; } message DeleteImageRequest { - string name = 1; - - // Sync indicates that the delete and cleanup should be done - // synchronously before returning to the caller - // - // Default is false - bool sync = 2; + string name = 1; + + // Sync indicates that the delete and cleanup should be done + // synchronously before returning to the caller + // + // Default is false + bool sync = 2; + + // Target value for image to be deleted + // + // If image descriptor does not match the same digest, + // the delete operation will return "not found" error. + optional containerd.types.Descriptor target = 3; } diff --git a/api/services/images/v1/images_grpc.pb.go b/api/services/images/v1/images_grpc.pb.go index 86a4602e036a..b18a1cf70fae 100644 --- a/api/services/images/v1/images_grpc.pb.go +++ b/api/services/images/v1/images_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/images/v1/images.proto +// - protoc (unknown) +// source: services/images/v1/images.proto package images @@ -262,5 +264,5 @@ var Images_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/images/v1/images.proto", + Metadata: "services/images/v1/images.proto", } diff --git a/api/services/images/v1/images_ttrpc.pb.go b/api/services/images/v1/images_ttrpc.pb.go new file mode 100644 index 000000000000..673e40a24c3e --- /dev/null +++ b/api/services/images/v1/images_ttrpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/images/v1/images.proto +package images + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCImagesService interface { + Get(context.Context, *GetImageRequest) (*GetImageResponse, error) + List(context.Context, *ListImagesRequest) (*ListImagesResponse, error) + Create(context.Context, *CreateImageRequest) (*CreateImageResponse, error) + Update(context.Context, *UpdateImageRequest) (*UpdateImageResponse, error) + Delete(context.Context, *DeleteImageRequest) (*emptypb.Empty, error) +} + +func RegisterTTRPCImagesService(srv *ttrpc.Server, svc TTRPCImagesService) { + srv.RegisterService("containerd.services.images.v1.Images", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Get": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req GetImageRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Get(ctx, &req) + }, + "List": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ListImagesRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.List(ctx, &req) + }, + "Create": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CreateImageRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Create(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UpdateImageRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + "Delete": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteImageRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Delete(ctx, &req) + }, + }, + }) +} + +type ttrpcimagesClient struct { + client *ttrpc.Client +} + +func NewTTRPCImagesClient(client *ttrpc.Client) TTRPCImagesService { + return &ttrpcimagesClient{ + client: client, + } +} + +func (c *ttrpcimagesClient) Get(ctx context.Context, req *GetImageRequest) (*GetImageResponse, error) { + var resp GetImageResponse + if err := c.client.Call(ctx, "containerd.services.images.v1.Images", "Get", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcimagesClient) List(ctx context.Context, req *ListImagesRequest) (*ListImagesResponse, error) { + var resp ListImagesResponse + if err := c.client.Call(ctx, "containerd.services.images.v1.Images", "List", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcimagesClient) Create(ctx context.Context, req *CreateImageRequest) (*CreateImageResponse, error) { + var resp CreateImageResponse + if err := c.client.Call(ctx, "containerd.services.images.v1.Images", "Create", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcimagesClient) Update(ctx context.Context, req *UpdateImageRequest) (*UpdateImageResponse, error) { + var resp UpdateImageResponse + if err := c.client.Call(ctx, "containerd.services.images.v1.Images", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcimagesClient) Delete(ctx context.Context, req *DeleteImageRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.images.v1.Images", "Delete", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/introspection/v1/introspection.pb.go b/api/services/introspection/v1/introspection.pb.go index a2b1811c4a94..6877cda39316 100644 --- a/api/services/introspection/v1/introspection.pb.go +++ b/api/services/introspection/v1/introspection.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/introspection/v1/introspection.proto +// protoc (unknown) +// source: services/introspection/v1/introspection.proto package introspection @@ -26,7 +26,9 @@ import ( status "google.golang.org/genproto/googleapis/rpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -85,7 +87,7 @@ type Plugin struct { func (x *Plugin) Reset() { *x = Plugin{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[0] + mi := &file_services_introspection_v1_introspection_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -98,7 +100,7 @@ func (x *Plugin) String() string { func (*Plugin) ProtoMessage() {} func (x *Plugin) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[0] + mi := &file_services_introspection_v1_introspection_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -111,7 +113,7 @@ func (x *Plugin) ProtoReflect() protoreflect.Message { // Deprecated: Use Plugin.ProtoReflect.Descriptor instead. func (*Plugin) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{0} + return file_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{0} } func (x *Plugin) GetType() string { @@ -175,7 +177,7 @@ type PluginsRequest struct { // filters. Expanded, plugins that match the following will be // returned: // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] // // If filters is zero-length or nil, all items will be returned. Filters []string `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"` @@ -184,7 +186,7 @@ type PluginsRequest struct { func (x *PluginsRequest) Reset() { *x = PluginsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[1] + mi := &file_services_introspection_v1_introspection_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -197,7 +199,7 @@ func (x *PluginsRequest) String() string { func (*PluginsRequest) ProtoMessage() {} func (x *PluginsRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[1] + mi := &file_services_introspection_v1_introspection_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -210,7 +212,7 @@ func (x *PluginsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PluginsRequest.ProtoReflect.Descriptor instead. func (*PluginsRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{1} + return file_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{1} } func (x *PluginsRequest) GetFilters() []string { @@ -231,7 +233,7 @@ type PluginsResponse struct { func (x *PluginsResponse) Reset() { *x = PluginsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[2] + mi := &file_services_introspection_v1_introspection_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -244,7 +246,7 @@ func (x *PluginsResponse) String() string { func (*PluginsResponse) ProtoMessage() {} func (x *PluginsResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[2] + mi := &file_services_introspection_v1_introspection_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -257,7 +259,7 @@ func (x *PluginsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PluginsResponse.ProtoReflect.Descriptor instead. func (*PluginsResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{2} + return file_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{2} } func (x *PluginsResponse) GetPlugins() []*Plugin { @@ -272,13 +274,16 @@ type ServerResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - UUID string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + UUID string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Pid uint64 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` + Pidns uint64 `protobuf:"varint,3,opt,name=pidns,proto3" json:"pidns,omitempty"` // PID namespace, such as 4026531836 + Deprecations []*DeprecationWarning `protobuf:"bytes,4,rep,name=deprecations,proto3" json:"deprecations,omitempty"` } func (x *ServerResponse) Reset() { *x = ServerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[3] + mi := &file_services_introspection_v1_introspection_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -291,7 +296,7 @@ func (x *ServerResponse) String() string { func (*ServerResponse) ProtoMessage() {} func (x *ServerResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[3] + mi := &file_services_introspection_v1_introspection_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -304,7 +309,7 @@ func (x *ServerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ServerResponse.ProtoReflect.Descriptor instead. func (*ServerResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{3} + return file_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{3} } func (x *ServerResponse) GetUUID() string { @@ -314,127 +319,384 @@ func (x *ServerResponse) GetUUID() string { return "" } -var File_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDesc = []byte{ - 0x0a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, - 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x24, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x39, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, - 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe6, 0x02, 0x0a, 0x06, - 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, - 0x12, 0x53, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x70, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x08, 0x69, 0x6e, 0x69, - 0x74, 0x5f, 0x65, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x07, 0x69, 0x6e, 0x69, 0x74, 0x45, 0x72, 0x72, 0x1a, 0x3a, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2a, 0x0a, 0x0e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x22, 0x59, 0x0a, 0x0f, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x52, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x22, 0x24, 0x0a, 0x0e, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, - 0x64, 0x32, 0xdf, 0x01, 0x0a, 0x0d, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x07, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x34, +func (x *ServerResponse) GetPid() uint64 { + if x != nil { + return x.Pid + } + return 0 +} + +func (x *ServerResponse) GetPidns() uint64 { + if x != nil { + return x.Pidns + } + return 0 +} + +func (x *ServerResponse) GetDeprecations() []*DeprecationWarning { + if x != nil { + return x.Deprecations + } + return nil +} + +type DeprecationWarning struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + LastOccurrence *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=last_occurrence,json=lastOccurrence,proto3" json:"last_occurrence,omitempty"` +} + +func (x *DeprecationWarning) Reset() { + *x = DeprecationWarning{} + if protoimpl.UnsafeEnabled { + mi := &file_services_introspection_v1_introspection_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeprecationWarning) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeprecationWarning) ProtoMessage() {} + +func (x *DeprecationWarning) ProtoReflect() protoreflect.Message { + mi := &file_services_introspection_v1_introspection_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeprecationWarning.ProtoReflect.Descriptor instead. +func (*DeprecationWarning) Descriptor() ([]byte, []int) { + return file_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{4} +} + +func (x *DeprecationWarning) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *DeprecationWarning) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *DeprecationWarning) GetLastOccurrence() *timestamppb.Timestamp { + if x != nil { + return x.LastOccurrence + } + return nil +} + +type PluginInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + ID string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + // Options may be used to request extra dynamic information from + // a plugin. + // This object is determined by the plugin and the plugin may return + // NotImplemented or InvalidArgument if it is not supported + Options *anypb.Any `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` +} + +func (x *PluginInfoRequest) Reset() { + *x = PluginInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_introspection_v1_introspection_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PluginInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PluginInfoRequest) ProtoMessage() {} + +func (x *PluginInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_introspection_v1_introspection_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PluginInfoRequest.ProtoReflect.Descriptor instead. +func (*PluginInfoRequest) Descriptor() ([]byte, []int) { + return file_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{5} +} + +func (x *PluginInfoRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *PluginInfoRequest) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *PluginInfoRequest) GetOptions() *anypb.Any { + if x != nil { + return x.Options + } + return nil +} + +type PluginInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Plugin *Plugin `protobuf:"bytes,1,opt,name=plugin,proto3" json:"plugin,omitempty"` + Extra *anypb.Any `protobuf:"bytes,2,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *PluginInfoResponse) Reset() { + *x = PluginInfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_introspection_v1_introspection_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PluginInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PluginInfoResponse) ProtoMessage() {} + +func (x *PluginInfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_introspection_v1_introspection_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PluginInfoResponse.ProtoReflect.Descriptor instead. +func (*PluginInfoResponse) Descriptor() ([]byte, []int) { + return file_services_introspection_v1_introspection_proto_rawDescGZIP(), []int{6} +} + +func (x *PluginInfoResponse) GetPlugin() *Plugin { + if x != nil { + return x.Plugin + } + return nil +} + +func (x *PluginInfoResponse) GetExtra() *anypb.Any { + if x != nil { + return x.Extra + } + return nil +} + +var File_services_introspection_v1_introspection_proto protoreflect.FileDescriptor + +var file_services_introspection_v1_introspection_proto_rawDesc = []byte{ + 0x0a, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x74, 0x72, + 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x24, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe6, 0x02, 0x0a, 0x06, 0x50, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x53, 0x0a, + 0x07, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x06, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x34, 0x2e, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x08, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x65, + 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x07, 0x69, 0x6e, + 0x69, 0x74, 0x45, 0x72, 0x72, 0x1a, 0x3a, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x2a, 0x0a, 0x0e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x59, 0x0a, + 0x0f, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x46, 0x0a, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, + 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x70, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x69, 0x64, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x70, 0x69, 0x64, 0x6e, 0x73, 0x12, 0x5c, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, + 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x73, + 0x74, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x67, 0x0a, 0x11, 0x50, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x12, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x06, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x32, 0xe0, 0x02, + 0x0a, 0x0d, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x76, 0x0a, 0x07, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x7f, 0x0a, 0x0a, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x4e, 0x5a, 0x4c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x74, + 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x4e, 0x5a, 0x4c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x76, 0x31, 0x3b, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescData = file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDesc + file_services_introspection_v1_introspection_proto_rawDescOnce sync.Once + file_services_introspection_v1_introspection_proto_rawDescData = file_services_introspection_v1_introspection_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescData) +func file_services_introspection_v1_introspection_proto_rawDescGZIP() []byte { + file_services_introspection_v1_introspection_proto_rawDescOnce.Do(func() { + file_services_introspection_v1_introspection_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_introspection_v1_introspection_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDescData -} - -var file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_goTypes = []interface{}{ - (*Plugin)(nil), // 0: containerd.services.introspection.v1.Plugin - (*PluginsRequest)(nil), // 1: containerd.services.introspection.v1.PluginsRequest - (*PluginsResponse)(nil), // 2: containerd.services.introspection.v1.PluginsResponse - (*ServerResponse)(nil), // 3: containerd.services.introspection.v1.ServerResponse - nil, // 4: containerd.services.introspection.v1.Plugin.ExportsEntry - (*types.Platform)(nil), // 5: containerd.types.Platform - (*status.Status)(nil), // 6: google.rpc.Status - (*emptypb.Empty)(nil), // 7: google.protobuf.Empty -} -var file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_depIdxs = []int32{ - 5, // 0: containerd.services.introspection.v1.Plugin.platforms:type_name -> containerd.types.Platform - 4, // 1: containerd.services.introspection.v1.Plugin.exports:type_name -> containerd.services.introspection.v1.Plugin.ExportsEntry - 6, // 2: containerd.services.introspection.v1.Plugin.init_err:type_name -> google.rpc.Status - 0, // 3: containerd.services.introspection.v1.PluginsResponse.plugins:type_name -> containerd.services.introspection.v1.Plugin - 1, // 4: containerd.services.introspection.v1.Introspection.Plugins:input_type -> containerd.services.introspection.v1.PluginsRequest - 7, // 5: containerd.services.introspection.v1.Introspection.Server:input_type -> google.protobuf.Empty - 2, // 6: containerd.services.introspection.v1.Introspection.Plugins:output_type -> containerd.services.introspection.v1.PluginsResponse - 3, // 7: containerd.services.introspection.v1.Introspection.Server:output_type -> containerd.services.introspection.v1.ServerResponse - 6, // [6:8] is the sub-list for method output_type - 4, // [4:6] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_init() -} -func file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_init() { - if File_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto != nil { + return file_services_introspection_v1_introspection_proto_rawDescData +} + +var file_services_introspection_v1_introspection_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_services_introspection_v1_introspection_proto_goTypes = []interface{}{ + (*Plugin)(nil), // 0: containerd.services.introspection.v1.Plugin + (*PluginsRequest)(nil), // 1: containerd.services.introspection.v1.PluginsRequest + (*PluginsResponse)(nil), // 2: containerd.services.introspection.v1.PluginsResponse + (*ServerResponse)(nil), // 3: containerd.services.introspection.v1.ServerResponse + (*DeprecationWarning)(nil), // 4: containerd.services.introspection.v1.DeprecationWarning + (*PluginInfoRequest)(nil), // 5: containerd.services.introspection.v1.PluginInfoRequest + (*PluginInfoResponse)(nil), // 6: containerd.services.introspection.v1.PluginInfoResponse + nil, // 7: containerd.services.introspection.v1.Plugin.ExportsEntry + (*types.Platform)(nil), // 8: containerd.types.Platform + (*status.Status)(nil), // 9: google.rpc.Status + (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp + (*anypb.Any)(nil), // 11: google.protobuf.Any + (*emptypb.Empty)(nil), // 12: google.protobuf.Empty +} +var file_services_introspection_v1_introspection_proto_depIdxs = []int32{ + 8, // 0: containerd.services.introspection.v1.Plugin.platforms:type_name -> containerd.types.Platform + 7, // 1: containerd.services.introspection.v1.Plugin.exports:type_name -> containerd.services.introspection.v1.Plugin.ExportsEntry + 9, // 2: containerd.services.introspection.v1.Plugin.init_err:type_name -> google.rpc.Status + 0, // 3: containerd.services.introspection.v1.PluginsResponse.plugins:type_name -> containerd.services.introspection.v1.Plugin + 4, // 4: containerd.services.introspection.v1.ServerResponse.deprecations:type_name -> containerd.services.introspection.v1.DeprecationWarning + 10, // 5: containerd.services.introspection.v1.DeprecationWarning.last_occurrence:type_name -> google.protobuf.Timestamp + 11, // 6: containerd.services.introspection.v1.PluginInfoRequest.options:type_name -> google.protobuf.Any + 0, // 7: containerd.services.introspection.v1.PluginInfoResponse.plugin:type_name -> containerd.services.introspection.v1.Plugin + 11, // 8: containerd.services.introspection.v1.PluginInfoResponse.extra:type_name -> google.protobuf.Any + 1, // 9: containerd.services.introspection.v1.Introspection.Plugins:input_type -> containerd.services.introspection.v1.PluginsRequest + 12, // 10: containerd.services.introspection.v1.Introspection.Server:input_type -> google.protobuf.Empty + 5, // 11: containerd.services.introspection.v1.Introspection.PluginInfo:input_type -> containerd.services.introspection.v1.PluginInfoRequest + 2, // 12: containerd.services.introspection.v1.Introspection.Plugins:output_type -> containerd.services.introspection.v1.PluginsResponse + 3, // 13: containerd.services.introspection.v1.Introspection.Server:output_type -> containerd.services.introspection.v1.ServerResponse + 6, // 14: containerd.services.introspection.v1.Introspection.PluginInfo:output_type -> containerd.services.introspection.v1.PluginInfoResponse + 12, // [12:15] is the sub-list for method output_type + 9, // [9:12] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_services_introspection_v1_introspection_proto_init() } +func file_services_introspection_v1_introspection_proto_init() { + if File_services_introspection_v1_introspection_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_introspection_v1_introspection_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Plugin); i { case 0: return &v.state @@ -446,7 +708,7 @@ func file_github_com_containerd_containerd_api_services_introspection_v1_introsp return nil } } - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_introspection_v1_introspection_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PluginsRequest); i { case 0: return &v.state @@ -458,7 +720,7 @@ func file_github_com_containerd_containerd_api_services_introspection_v1_introsp return nil } } - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_introspection_v1_introspection_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PluginsResponse); i { case 0: return &v.state @@ -470,7 +732,7 @@ func file_github_com_containerd_containerd_api_services_introspection_v1_introsp return nil } } - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_introspection_v1_introspection_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServerResponse); i { case 0: return &v.state @@ -482,23 +744,59 @@ func file_github_com_containerd_containerd_api_services_introspection_v1_introsp return nil } } + file_services_introspection_v1_introspection_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeprecationWarning); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_introspection_v1_introspection_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PluginInfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_introspection_v1_introspection_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PluginInfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDesc, + RawDescriptor: file_services_introspection_v1_introspection_proto_rawDesc, NumEnums: 0, - NumMessages: 5, + NumMessages: 8, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_msgTypes, + GoTypes: file_services_introspection_v1_introspection_proto_goTypes, + DependencyIndexes: file_services_introspection_v1_introspection_proto_depIdxs, + MessageInfos: file_services_introspection_v1_introspection_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto = out.File - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_introspection_v1_introspection_proto_depIdxs = nil + File_services_introspection_v1_introspection_proto = out.File + file_services_introspection_v1_introspection_proto_rawDesc = nil + file_services_introspection_v1_introspection_proto_goTypes = nil + file_services_introspection_v1_introspection_proto_depIdxs = nil } diff --git a/api/services/introspection/v1/introspection.proto b/api/services/introspection/v1/introspection.proto index 2a053cc63d10..a012ac8281ef 100644 --- a/api/services/introspection/v1/introspection.proto +++ b/api/services/introspection/v1/introspection.proto @@ -1,103 +1,133 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.services.introspection.v1; -import "github.com/containerd/containerd/api/types/platform.proto"; -import "google/rpc/status.proto"; +import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; +import "google/rpc/status.proto"; +import "types/introspection.proto"; +import "types/platform.proto"; option go_package = "github.com/containerd/containerd/api/services/introspection/v1;introspection"; service Introspection { - // Plugins returns a list of plugins in containerd. - // - // Clients can use this to detect features and capabilities when using - // containerd. - rpc Plugins(PluginsRequest) returns (PluginsResponse); - // Server returns information about the containerd server - rpc Server(google.protobuf.Empty) returns (ServerResponse); + // Plugins returns a list of plugins in containerd. + // + // Clients can use this to detect features and capabilities when using + // containerd. + rpc Plugins(PluginsRequest) returns (PluginsResponse); + // Server returns information about the containerd server + rpc Server(google.protobuf.Empty) returns (ServerResponse); + // PluginInfo returns information directly from a plugin if the plugin supports it + rpc PluginInfo(PluginInfoRequest) returns (PluginInfoResponse); } message Plugin { - // Type defines the type of plugin. - // - // See package plugin for a list of possible values. Non core plugins may - // define their own values during registration. - string type = 1; - - // ID identifies the plugin uniquely in the system. - string id = 2; - - // Requires lists the plugin types required by this plugin. - repeated string requires = 3; - - // Platforms enumerates the platforms this plugin will support. - // - // If values are provided here, the plugin will only be operable under the - // provided platforms. - // - // If this is empty, the plugin will work across all platforms. - // - // If the plugin prefers certain platforms over others, they should be - // listed from most to least preferred. - repeated types.Platform platforms = 4; - - // Exports allows plugins to provide values about state or configuration to - // interested parties. - // - // One example is exposing the configured path of a snapshotter plugin. - map exports = 5; - - // Capabilities allows plugins to communicate feature switches to allow - // clients to detect features that may not be on be default or may be - // different from version to version. - // - // Use this sparingly. - repeated string capabilities = 6; - - // InitErr will be set if the plugin fails initialization. - // - // This means the plugin may have been registered but a non-terminal error - // was encountered during initialization. - // - // Plugins that have this value set cannot be used. - google.rpc.Status init_err = 7; + // Type defines the type of plugin. + // + // See package plugin for a list of possible values. Non core plugins may + // define their own values during registration. + string type = 1; + + // ID identifies the plugin uniquely in the system. + string id = 2; + + // Requires lists the plugin types required by this plugin. + repeated string requires = 3; + + // Platforms enumerates the platforms this plugin will support. + // + // If values are provided here, the plugin will only be operable under the + // provided platforms. + // + // If this is empty, the plugin will work across all platforms. + // + // If the plugin prefers certain platforms over others, they should be + // listed from most to least preferred. + repeated types.Platform platforms = 4; + + // Exports allows plugins to provide values about state or configuration to + // interested parties. + // + // One example is exposing the configured path of a snapshotter plugin. + map exports = 5; + + // Capabilities allows plugins to communicate feature switches to allow + // clients to detect features that may not be on be default or may be + // different from version to version. + // + // Use this sparingly. + repeated string capabilities = 6; + + // InitErr will be set if the plugin fails initialization. + // + // This means the plugin may have been registered but a non-terminal error + // was encountered during initialization. + // + // Plugins that have this value set cannot be used. + google.rpc.Status init_err = 7; } message PluginsRequest { - // Filters contains one or more filters using the syntax defined in the - // containerd filter package. - // - // The returned result will be those that match any of the provided - // filters. Expanded, plugins that match the following will be - // returned: - // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] - // - // If filters is zero-length or nil, all items will be returned. - repeated string filters = 1; + // Filters contains one or more filters using the syntax defined in the + // containerd filter package. + // + // The returned result will be those that match any of the provided + // filters. Expanded, plugins that match the following will be + // returned: + // + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // + // If filters is zero-length or nil, all items will be returned. + repeated string filters = 1; } message PluginsResponse { - repeated Plugin plugins = 1; + repeated Plugin plugins = 1; } message ServerResponse { - string uuid = 1; + string uuid = 1; + uint64 pid = 2; + uint64 pidns = 3; // PID namespace, such as 4026531836 + repeated DeprecationWarning deprecations = 4; +} + +message DeprecationWarning { + string id = 1; + string message = 2; + google.protobuf.Timestamp last_occurrence = 3; +} + +message PluginInfoRequest { + string type = 1; + string id = 2; + + // Options may be used to request extra dynamic information from + // a plugin. + // This object is determined by the plugin and the plugin may return + // NotImplemented or InvalidArgument if it is not supported + google.protobuf.Any options = 3; +} + +message PluginInfoResponse { + Plugin plugin = 1; + google.protobuf.Any extra = 2; } diff --git a/api/services/introspection/v1/introspection_grpc.pb.go b/api/services/introspection/v1/introspection_grpc.pb.go index c2cf80765ccb..e4ded4bd2c58 100644 --- a/api/services/introspection/v1/introspection_grpc.pb.go +++ b/api/services/introspection/v1/introspection_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/introspection/v1/introspection.proto +// - protoc (unknown) +// source: services/introspection/v1/introspection.proto package introspection @@ -30,6 +32,8 @@ type IntrospectionClient interface { Plugins(ctx context.Context, in *PluginsRequest, opts ...grpc.CallOption) (*PluginsResponse, error) // Server returns information about the containerd server Server(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ServerResponse, error) + // PluginInfo returns information directly from a plugin if the plugin supports it + PluginInfo(ctx context.Context, in *PluginInfoRequest, opts ...grpc.CallOption) (*PluginInfoResponse, error) } type introspectionClient struct { @@ -58,6 +62,15 @@ func (c *introspectionClient) Server(ctx context.Context, in *emptypb.Empty, opt return out, nil } +func (c *introspectionClient) PluginInfo(ctx context.Context, in *PluginInfoRequest, opts ...grpc.CallOption) (*PluginInfoResponse, error) { + out := new(PluginInfoResponse) + err := c.cc.Invoke(ctx, "/containerd.services.introspection.v1.Introspection/PluginInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // IntrospectionServer is the server API for Introspection service. // All implementations must embed UnimplementedIntrospectionServer // for forward compatibility @@ -69,6 +82,8 @@ type IntrospectionServer interface { Plugins(context.Context, *PluginsRequest) (*PluginsResponse, error) // Server returns information about the containerd server Server(context.Context, *emptypb.Empty) (*ServerResponse, error) + // PluginInfo returns information directly from a plugin if the plugin supports it + PluginInfo(context.Context, *PluginInfoRequest) (*PluginInfoResponse, error) mustEmbedUnimplementedIntrospectionServer() } @@ -82,6 +97,9 @@ func (UnimplementedIntrospectionServer) Plugins(context.Context, *PluginsRequest func (UnimplementedIntrospectionServer) Server(context.Context, *emptypb.Empty) (*ServerResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Server not implemented") } +func (UnimplementedIntrospectionServer) PluginInfo(context.Context, *PluginInfoRequest) (*PluginInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PluginInfo not implemented") +} func (UnimplementedIntrospectionServer) mustEmbedUnimplementedIntrospectionServer() {} // UnsafeIntrospectionServer may be embedded to opt out of forward compatibility for this service. @@ -131,6 +149,24 @@ func _Introspection_Server_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } +func _Introspection_PluginInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PluginInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IntrospectionServer).PluginInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.introspection.v1.Introspection/PluginInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IntrospectionServer).PluginInfo(ctx, req.(*PluginInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Introspection_ServiceDesc is the grpc.ServiceDesc for Introspection service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -146,7 +182,11 @@ var Introspection_ServiceDesc = grpc.ServiceDesc{ MethodName: "Server", Handler: _Introspection_Server_Handler, }, + { + MethodName: "PluginInfo", + Handler: _Introspection_PluginInfo_Handler, + }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/introspection/v1/introspection.proto", + Metadata: "services/introspection/v1/introspection.proto", } diff --git a/api/services/introspection/v1/introspection_ttrpc.pb.go b/api/services/introspection/v1/introspection_ttrpc.pb.go new file mode 100644 index 000000000000..3d042fb52f09 --- /dev/null +++ b/api/services/introspection/v1/introspection_ttrpc.pb.go @@ -0,0 +1,77 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/introspection/v1/introspection.proto +package introspection + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCIntrospectionService interface { + Plugins(context.Context, *PluginsRequest) (*PluginsResponse, error) + Server(context.Context, *emptypb.Empty) (*ServerResponse, error) + PluginInfo(context.Context, *PluginInfoRequest) (*PluginInfoResponse, error) +} + +func RegisterTTRPCIntrospectionService(srv *ttrpc.Server, svc TTRPCIntrospectionService) { + srv.RegisterService("containerd.services.introspection.v1.Introspection", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Plugins": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PluginsRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Plugins(ctx, &req) + }, + "Server": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req emptypb.Empty + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Server(ctx, &req) + }, + "PluginInfo": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PluginInfoRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.PluginInfo(ctx, &req) + }, + }, + }) +} + +type ttrpcintrospectionClient struct { + client *ttrpc.Client +} + +func NewTTRPCIntrospectionClient(client *ttrpc.Client) TTRPCIntrospectionService { + return &ttrpcintrospectionClient{ + client: client, + } +} + +func (c *ttrpcintrospectionClient) Plugins(ctx context.Context, req *PluginsRequest) (*PluginsResponse, error) { + var resp PluginsResponse + if err := c.client.Call(ctx, "containerd.services.introspection.v1.Introspection", "Plugins", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcintrospectionClient) Server(ctx context.Context, req *emptypb.Empty) (*ServerResponse, error) { + var resp ServerResponse + if err := c.client.Call(ctx, "containerd.services.introspection.v1.Introspection", "Server", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcintrospectionClient) PluginInfo(ctx context.Context, req *PluginInfoRequest) (*PluginInfoResponse, error) { + var resp PluginInfoResponse + if err := c.client.Call(ctx, "containerd.services.introspection.v1.Introspection", "PluginInfo", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/leases/v1/leases.pb.go b/api/services/leases/v1/leases.pb.go index 2a66f0f8b86b..b50abc6db249 100644 --- a/api/services/leases/v1/leases.pb.go +++ b/api/services/leases/v1/leases.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/leases/v1/leases.proto +// protoc (unknown) +// source: services/leases/v1/leases.proto package leases @@ -51,7 +51,7 @@ type Lease struct { func (x *Lease) Reset() { *x = Lease{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[0] + mi := &file_services_leases_v1_leases_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -64,7 +64,7 @@ func (x *Lease) String() string { func (*Lease) ProtoMessage() {} func (x *Lease) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[0] + mi := &file_services_leases_v1_leases_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -77,7 +77,7 @@ func (x *Lease) ProtoReflect() protoreflect.Message { // Deprecated: Use Lease.ProtoReflect.Descriptor instead. func (*Lease) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{0} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{0} } func (x *Lease) GetID() string { @@ -115,7 +115,7 @@ type CreateRequest struct { func (x *CreateRequest) Reset() { *x = CreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[1] + mi := &file_services_leases_v1_leases_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -128,7 +128,7 @@ func (x *CreateRequest) String() string { func (*CreateRequest) ProtoMessage() {} func (x *CreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[1] + mi := &file_services_leases_v1_leases_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -141,7 +141,7 @@ func (x *CreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRequest.ProtoReflect.Descriptor instead. func (*CreateRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{1} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{1} } func (x *CreateRequest) GetID() string { @@ -169,7 +169,7 @@ type CreateResponse struct { func (x *CreateResponse) Reset() { *x = CreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[2] + mi := &file_services_leases_v1_leases_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -182,7 +182,7 @@ func (x *CreateResponse) String() string { func (*CreateResponse) ProtoMessage() {} func (x *CreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[2] + mi := &file_services_leases_v1_leases_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -195,7 +195,7 @@ func (x *CreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateResponse.ProtoReflect.Descriptor instead. func (*CreateResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{2} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{2} } func (x *CreateResponse) GetLease() *Lease { @@ -221,7 +221,7 @@ type DeleteRequest struct { func (x *DeleteRequest) Reset() { *x = DeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[3] + mi := &file_services_leases_v1_leases_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -234,7 +234,7 @@ func (x *DeleteRequest) String() string { func (*DeleteRequest) ProtoMessage() {} func (x *DeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[3] + mi := &file_services_leases_v1_leases_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -247,7 +247,7 @@ func (x *DeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead. func (*DeleteRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{3} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{3} } func (x *DeleteRequest) GetID() string { @@ -275,7 +275,7 @@ type ListRequest struct { func (x *ListRequest) Reset() { *x = ListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[4] + mi := &file_services_leases_v1_leases_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -288,7 +288,7 @@ func (x *ListRequest) String() string { func (*ListRequest) ProtoMessage() {} func (x *ListRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[4] + mi := &file_services_leases_v1_leases_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -301,7 +301,7 @@ func (x *ListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRequest.ProtoReflect.Descriptor instead. func (*ListRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{4} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{4} } func (x *ListRequest) GetFilters() []string { @@ -322,7 +322,7 @@ type ListResponse struct { func (x *ListResponse) Reset() { *x = ListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[5] + mi := &file_services_leases_v1_leases_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -335,7 +335,7 @@ func (x *ListResponse) String() string { func (*ListResponse) ProtoMessage() {} func (x *ListResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[5] + mi := &file_services_leases_v1_leases_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -348,7 +348,7 @@ func (x *ListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResponse.ProtoReflect.Descriptor instead. func (*ListResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{5} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{5} } func (x *ListResponse) GetLeases() []*Lease { @@ -373,7 +373,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[6] + mi := &file_services_leases_v1_leases_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -386,7 +386,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[6] + mi := &file_services_leases_v1_leases_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -399,7 +399,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{6} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{6} } func (x *Resource) GetID() string { @@ -428,7 +428,7 @@ type AddResourceRequest struct { func (x *AddResourceRequest) Reset() { *x = AddResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[7] + mi := &file_services_leases_v1_leases_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -441,7 +441,7 @@ func (x *AddResourceRequest) String() string { func (*AddResourceRequest) ProtoMessage() {} func (x *AddResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[7] + mi := &file_services_leases_v1_leases_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -454,7 +454,7 @@ func (x *AddResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddResourceRequest.ProtoReflect.Descriptor instead. func (*AddResourceRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{7} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{7} } func (x *AddResourceRequest) GetID() string { @@ -483,7 +483,7 @@ type DeleteResourceRequest struct { func (x *DeleteResourceRequest) Reset() { *x = DeleteResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[8] + mi := &file_services_leases_v1_leases_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -496,7 +496,7 @@ func (x *DeleteResourceRequest) String() string { func (*DeleteResourceRequest) ProtoMessage() {} func (x *DeleteResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[8] + mi := &file_services_leases_v1_leases_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -509,7 +509,7 @@ func (x *DeleteResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteResourceRequest.ProtoReflect.Descriptor instead. func (*DeleteResourceRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{8} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{8} } func (x *DeleteResourceRequest) GetID() string { @@ -537,7 +537,7 @@ type ListResourcesRequest struct { func (x *ListResourcesRequest) Reset() { *x = ListResourcesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[9] + mi := &file_services_leases_v1_leases_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -550,7 +550,7 @@ func (x *ListResourcesRequest) String() string { func (*ListResourcesRequest) ProtoMessage() {} func (x *ListResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[9] + mi := &file_services_leases_v1_leases_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -563,7 +563,7 @@ func (x *ListResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourcesRequest.ProtoReflect.Descriptor instead. func (*ListResourcesRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{9} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{9} } func (x *ListResourcesRequest) GetID() string { @@ -584,7 +584,7 @@ type ListResourcesResponse struct { func (x *ListResourcesResponse) Reset() { *x = ListResourcesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[10] + mi := &file_services_leases_v1_leases_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -597,7 +597,7 @@ func (x *ListResourcesResponse) String() string { func (*ListResourcesResponse) ProtoMessage() {} func (x *ListResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[10] + mi := &file_services_leases_v1_leases_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -610,7 +610,7 @@ func (x *ListResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourcesResponse.ProtoReflect.Descriptor instead. func (*ListResourcesResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP(), []int{10} + return file_services_leases_v1_leases_proto_rawDescGZIP(), []int{10} } func (x *ListResourcesResponse) GetResources() []*Resource { @@ -620,143 +620,141 @@ func (x *ListResourcesResponse) GetResources() []*Resource { return nil } -var File_github_com_containerd_containerd_api_services_leases_v1_leases_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDesc = []byte{ - 0x0a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xd7, 0x01, 0x0a, 0x05, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xac, 0x01, - 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x50, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4c, 0x0a, 0x0e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, - 0x0a, 0x05, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, - 0x61, 0x73, 0x65, 0x52, 0x05, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x0d, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, - 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x22, - 0x27, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x06, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x22, 0x2e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x69, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x6c, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, - 0x26, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5e, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, +var File_services_leases_v1_leases_proto protoreflect.FileDescriptor + +var file_services_leases_v1_leases_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd7, + 0x01, 0x0a, 0x05, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x32, 0xd6, 0x04, 0x0a, 0x06, 0x4c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x12, 0x65, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xac, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x50, 0x0a, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4c, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x05, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x05, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x22, 0x27, 0x0a, 0x0b, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x22, 0x4c, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5f, 0x0a, 0x04, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0b, 0x41, 0x64, - 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x73, 0x22, 0x2e, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x69, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5e, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6c, 0x0a, 0x15, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x5e, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x09, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x32, 0xd6, 0x04, 0x0a, 0x06, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x65, 0x0a, + 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2c, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x7a, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x5f, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x5e, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x7a, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2f, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x40, 0x5a, 0x3e, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescData = file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDesc + file_services_leases_v1_leases_proto_rawDescOnce sync.Once + file_services_leases_v1_leases_proto_rawDescData = file_services_leases_v1_leases_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescData) +func file_services_leases_v1_leases_proto_rawDescGZIP() []byte { + file_services_leases_v1_leases_proto_rawDescOnce.Do(func() { + file_services_leases_v1_leases_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_leases_v1_leases_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDescData + return file_services_leases_v1_leases_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes = make([]protoimpl.MessageInfo, 13) -var file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_goTypes = []interface{}{ +var file_services_leases_v1_leases_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_services_leases_v1_leases_proto_goTypes = []interface{}{ (*Lease)(nil), // 0: containerd.services.leases.v1.Lease (*CreateRequest)(nil), // 1: containerd.services.leases.v1.CreateRequest (*CreateResponse)(nil), // 2: containerd.services.leases.v1.CreateResponse @@ -773,7 +771,7 @@ var file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_go (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp (*emptypb.Empty)(nil), // 14: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_depIdxs = []int32{ +var file_services_leases_v1_leases_proto_depIdxs = []int32{ 13, // 0: containerd.services.leases.v1.Lease.created_at:type_name -> google.protobuf.Timestamp 11, // 1: containerd.services.leases.v1.Lease.labels:type_name -> containerd.services.leases.v1.Lease.LabelsEntry 12, // 2: containerd.services.leases.v1.CreateRequest.labels:type_name -> containerd.services.leases.v1.CreateRequest.LabelsEntry @@ -801,13 +799,13 @@ var file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_de 0, // [0:8] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_init() } -func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_init() { - if File_github_com_containerd_containerd_api_services_leases_v1_leases_proto != nil { +func init() { file_services_leases_v1_leases_proto_init() } +func file_services_leases_v1_leases_proto_init() { + if File_services_leases_v1_leases_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Lease); i { case 0: return &v.state @@ -819,7 +817,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateRequest); i { case 0: return &v.state @@ -831,7 +829,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateResponse); i { case 0: return &v.state @@ -843,7 +841,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteRequest); i { case 0: return &v.state @@ -855,7 +853,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListRequest); i { case 0: return &v.state @@ -867,7 +865,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListResponse); i { case 0: return &v.state @@ -879,7 +877,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource); i { case 0: return &v.state @@ -891,7 +889,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AddResourceRequest); i { case 0: return &v.state @@ -903,7 +901,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteResourceRequest); i { case 0: return &v.state @@ -915,7 +913,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListResourcesRequest); i { case 0: return &v.state @@ -927,7 +925,7 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i return nil } } - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_services_leases_v1_leases_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListResourcesResponse); i { case 0: return &v.state @@ -944,18 +942,18 @@ func file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_i out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDesc, + RawDescriptor: file_services_leases_v1_leases_proto_rawDesc, NumEnums: 0, NumMessages: 13, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_msgTypes, + GoTypes: file_services_leases_v1_leases_proto_goTypes, + DependencyIndexes: file_services_leases_v1_leases_proto_depIdxs, + MessageInfos: file_services_leases_v1_leases_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_leases_v1_leases_proto = out.File - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_leases_v1_leases_proto_depIdxs = nil + File_services_leases_v1_leases_proto = out.File + file_services_leases_v1_leases_proto_rawDesc = nil + file_services_leases_v1_leases_proto_goTypes = nil + file_services_leases_v1_leases_proto_depIdxs = nil } diff --git a/api/services/leases/v1/leases.proto b/api/services/leases/v1/leases.proto index 8551fcea7f64..acfdbf3c44b6 100644 --- a/api/services/leases/v1/leases.proto +++ b/api/services/leases/v1/leases.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -24,93 +24,93 @@ option go_package = "github.com/containerd/containerd/api/services/leases/v1;lea // Leases service manages resources leases within the metadata store. service Leases { - // Create creates a new lease for managing changes to metadata. A lease - // can be used to protect objects from being removed. - rpc Create(CreateRequest) returns (CreateResponse); + // Create creates a new lease for managing changes to metadata. A lease + // can be used to protect objects from being removed. + rpc Create(CreateRequest) returns (CreateResponse); - // Delete deletes the lease and makes any unreferenced objects created - // during the lease eligible for garbage collection if not referenced - // or retained by other resources during the lease. - rpc Delete(DeleteRequest) returns (google.protobuf.Empty); + // Delete deletes the lease and makes any unreferenced objects created + // during the lease eligible for garbage collection if not referenced + // or retained by other resources during the lease. + rpc Delete(DeleteRequest) returns (google.protobuf.Empty); - // List lists all active leases, returning the full list of - // leases and optionally including the referenced resources. - rpc List(ListRequest) returns (ListResponse); + // List lists all active leases, returning the full list of + // leases and optionally including the referenced resources. + rpc List(ListRequest) returns (ListResponse); - // AddResource references the resource by the provided lease. - rpc AddResource(AddResourceRequest) returns (google.protobuf.Empty); + // AddResource references the resource by the provided lease. + rpc AddResource(AddResourceRequest) returns (google.protobuf.Empty); - // DeleteResource dereferences the resource by the provided lease. - rpc DeleteResource(DeleteResourceRequest) returns (google.protobuf.Empty); + // DeleteResource dereferences the resource by the provided lease. + rpc DeleteResource(DeleteResourceRequest) returns (google.protobuf.Empty); - // ListResources lists all the resources referenced by the lease. - rpc ListResources(ListResourcesRequest) returns (ListResourcesResponse); + // ListResources lists all the resources referenced by the lease. + rpc ListResources(ListResourcesRequest) returns (ListResourcesResponse); } // Lease is an object which retains resources while it exists. message Lease { - string id = 1; + string id = 1; - google.protobuf.Timestamp created_at = 2; + google.protobuf.Timestamp created_at = 2; - map labels = 3; + map labels = 3; } message CreateRequest { - // ID is used to identity the lease, when the id is not set the service - // generates a random identifier for the lease. - string id = 1; + // ID is used to identity the lease, when the id is not set the service + // generates a random identifier for the lease. + string id = 1; - map labels = 3; + map labels = 3; } message CreateResponse { - Lease lease = 1; + Lease lease = 1; } message DeleteRequest { - string id = 1; + string id = 1; - // Sync indicates that the delete and cleanup should be done - // synchronously before returning to the caller - // - // Default is false - bool sync = 2; + // Sync indicates that the delete and cleanup should be done + // synchronously before returning to the caller + // + // Default is false + bool sync = 2; } message ListRequest { - repeated string filters = 1; + repeated string filters = 1; } message ListResponse { - repeated Lease leases = 1; + repeated Lease leases = 1; } message Resource { - string id = 1; + string id = 1; - // For snapshotter resource, there are many snapshotter types here, like - // overlayfs, devmapper etc. The type will be formatted with type, - // like "snapshotter/overlayfs". - string type = 2; + // For snapshotter resource, there are many snapshotter types here, like + // overlayfs, devmapper etc. The type will be formatted with type, + // like "snapshotter/overlayfs". + string type = 2; } message AddResourceRequest { - string id = 1; + string id = 1; - Resource resource = 2; + Resource resource = 2; } message DeleteResourceRequest { - string id = 1; + string id = 1; - Resource resource = 2; + Resource resource = 2; } message ListResourcesRequest { - string id = 1; + string id = 1; } message ListResourcesResponse { - repeated Resource resources = 1 ; + repeated Resource resources = 1; } diff --git a/api/services/leases/v1/leases_grpc.pb.go b/api/services/leases/v1/leases_grpc.pb.go index 1ecf91ecf10a..f5efa9d642e9 100644 --- a/api/services/leases/v1/leases_grpc.pb.go +++ b/api/services/leases/v1/leases_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/leases/v1/leases.proto +// - protoc (unknown) +// source: services/leases/v1/leases.proto package leases @@ -302,5 +304,5 @@ var Leases_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/leases/v1/leases.proto", + Metadata: "services/leases/v1/leases.proto", } diff --git a/api/services/leases/v1/leases_ttrpc.pb.go b/api/services/leases/v1/leases_ttrpc.pb.go new file mode 100644 index 000000000000..68756f4fd5dc --- /dev/null +++ b/api/services/leases/v1/leases_ttrpc.pb.go @@ -0,0 +1,125 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/leases/v1/leases.proto +package leases + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCLeasesService interface { + Create(context.Context, *CreateRequest) (*CreateResponse, error) + Delete(context.Context, *DeleteRequest) (*emptypb.Empty, error) + List(context.Context, *ListRequest) (*ListResponse, error) + AddResource(context.Context, *AddResourceRequest) (*emptypb.Empty, error) + DeleteResource(context.Context, *DeleteResourceRequest) (*emptypb.Empty, error) + ListResources(context.Context, *ListResourcesRequest) (*ListResourcesResponse, error) +} + +func RegisterTTRPCLeasesService(srv *ttrpc.Server, svc TTRPCLeasesService) { + srv.RegisterService("containerd.services.leases.v1.Leases", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Create": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CreateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Create(ctx, &req) + }, + "Delete": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Delete(ctx, &req) + }, + "List": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ListRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.List(ctx, &req) + }, + "AddResource": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req AddResourceRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.AddResource(ctx, &req) + }, + "DeleteResource": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteResourceRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.DeleteResource(ctx, &req) + }, + "ListResources": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ListResourcesRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.ListResources(ctx, &req) + }, + }, + }) +} + +type ttrpcleasesClient struct { + client *ttrpc.Client +} + +func NewTTRPCLeasesClient(client *ttrpc.Client) TTRPCLeasesService { + return &ttrpcleasesClient{ + client: client, + } +} + +func (c *ttrpcleasesClient) Create(ctx context.Context, req *CreateRequest) (*CreateResponse, error) { + var resp CreateResponse + if err := c.client.Call(ctx, "containerd.services.leases.v1.Leases", "Create", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcleasesClient) Delete(ctx context.Context, req *DeleteRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.leases.v1.Leases", "Delete", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcleasesClient) List(ctx context.Context, req *ListRequest) (*ListResponse, error) { + var resp ListResponse + if err := c.client.Call(ctx, "containerd.services.leases.v1.Leases", "List", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcleasesClient) AddResource(ctx context.Context, req *AddResourceRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.leases.v1.Leases", "AddResource", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcleasesClient) DeleteResource(ctx context.Context, req *DeleteResourceRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.leases.v1.Leases", "DeleteResource", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcleasesClient) ListResources(ctx context.Context, req *ListResourcesRequest) (*ListResourcesResponse, error) { + var resp ListResourcesResponse + if err := c.client.Call(ctx, "containerd.services.leases.v1.Leases", "ListResources", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/mounts/v1/doc.go b/api/services/mounts/v1/doc.go new file mode 100644 index 000000000000..ece9d01b4b14 --- /dev/null +++ b/api/services/mounts/v1/doc.go @@ -0,0 +1,17 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package mounts diff --git a/api/services/mounts/v1/mounts.pb.go b/api/services/mounts/v1/mounts.pb.go new file mode 100644 index 000000000000..a1563a157869 --- /dev/null +++ b/api/services/mounts/v1/mounts.pb.go @@ -0,0 +1,785 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: services/mounts/v1/mounts.proto + +package mounts + +import ( + types "github.com/containerd/containerd/api/types" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ActivateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Mounts []*types.Mount `protobuf:"bytes,2,rep,name=mounts,proto3" json:"mounts,omitempty"` + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Temporary bool `protobuf:"varint,4,opt,name=temporary,proto3" json:"temporary,omitempty"` +} + +func (x *ActivateRequest) Reset() { + *x = ActivateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActivateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivateRequest) ProtoMessage() {} + +func (x *ActivateRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivateRequest.ProtoReflect.Descriptor instead. +func (*ActivateRequest) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{0} +} + +func (x *ActivateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ActivateRequest) GetMounts() []*types.Mount { + if x != nil { + return x.Mounts + } + return nil +} + +func (x *ActivateRequest) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *ActivateRequest) GetTemporary() bool { + if x != nil { + return x.Temporary + } + return false +} + +type ActivateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Info *types.ActivationInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *ActivateResponse) Reset() { + *x = ActivateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActivateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivateResponse) ProtoMessage() {} + +func (x *ActivateResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivateResponse.ProtoReflect.Descriptor instead. +func (*ActivateResponse) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{1} +} + +func (x *ActivateResponse) GetInfo() *types.ActivationInfo { + if x != nil { + return x.Info + } + return nil +} + +type DeactivateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *DeactivateRequest) Reset() { + *x = DeactivateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeactivateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeactivateRequest) ProtoMessage() {} + +func (x *DeactivateRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeactivateRequest.ProtoReflect.Descriptor instead. +func (*DeactivateRequest) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{2} +} + +func (x *DeactivateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type InfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *InfoRequest) Reset() { + *x = InfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoRequest) ProtoMessage() {} + +func (x *InfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoRequest.ProtoReflect.Descriptor instead. +func (*InfoRequest) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{3} +} + +func (x *InfoRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type InfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Info *types.ActivationInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *InfoResponse) Reset() { + *x = InfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoResponse) ProtoMessage() {} + +func (x *InfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoResponse.ProtoReflect.Descriptor instead. +func (*InfoResponse) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{4} +} + +func (x *InfoResponse) GetInfo() *types.ActivationInfo { + if x != nil { + return x.Info + } + return nil +} + +type UpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Info *types.ActivationInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` +} + +func (x *UpdateRequest) Reset() { + *x = UpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateRequest) ProtoMessage() {} + +func (x *UpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateRequest.ProtoReflect.Descriptor instead. +func (*UpdateRequest) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{5} +} + +func (x *UpdateRequest) GetInfo() *types.ActivationInfo { + if x != nil { + return x.Info + } + return nil +} + +func (x *UpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +type UpdateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Info *types.ActivationInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *UpdateResponse) Reset() { + *x = UpdateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateResponse) ProtoMessage() {} + +func (x *UpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateResponse.ProtoReflect.Descriptor instead. +func (*UpdateResponse) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{6} +} + +func (x *UpdateResponse) GetInfo() *types.ActivationInfo { + if x != nil { + return x.Info + } + return nil +} + +type ListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Filters []string `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"` +} + +func (x *ListRequest) Reset() { + *x = ListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListRequest) ProtoMessage() {} + +func (x *ListRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListRequest.ProtoReflect.Descriptor instead. +func (*ListRequest) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{7} +} + +func (x *ListRequest) GetFilters() []string { + if x != nil { + return x.Filters + } + return nil +} + +type ListMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Info *types.ActivationInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *ListMessage) Reset() { + *x = ListMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListMessage) ProtoMessage() {} + +func (x *ListMessage) ProtoReflect() protoreflect.Message { + mi := &file_services_mounts_v1_mounts_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListMessage.ProtoReflect.Descriptor instead. +func (*ListMessage) Descriptor() ([]byte, []int) { + return file_services_mounts_v1_mounts_proto_rawDescGZIP(), []int{8} +} + +func (x *ListMessage) GetInfo() *types.ActivationInfo { + if x != nil { + return x.Info + } + return nil +} + +var File_services_mounts_v1_mounts_proto protoreflect.FileDescriptor + +var file_services_mounts_v1_mounts_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x83, 0x02, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x48, 0x0a, 0x10, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, + 0x66, 0x6f, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x21, 0x0a, 0x0b, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x44, + 0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, + 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, + 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x82, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, 0x0b, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x46, 0x0a, 0x0e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, + 0x6f, 0x22, 0x27, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x43, 0x0a, 0x0b, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x32, + 0xf7, 0x03, 0x0a, 0x06, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x6b, 0x0a, 0x08, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0a, 0x44, 0x65, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x5f, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x65, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x30, 0x01, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_services_mounts_v1_mounts_proto_rawDescOnce sync.Once + file_services_mounts_v1_mounts_proto_rawDescData = file_services_mounts_v1_mounts_proto_rawDesc +) + +func file_services_mounts_v1_mounts_proto_rawDescGZIP() []byte { + file_services_mounts_v1_mounts_proto_rawDescOnce.Do(func() { + file_services_mounts_v1_mounts_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_mounts_v1_mounts_proto_rawDescData) + }) + return file_services_mounts_v1_mounts_proto_rawDescData +} + +var file_services_mounts_v1_mounts_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_services_mounts_v1_mounts_proto_goTypes = []interface{}{ + (*ActivateRequest)(nil), // 0: containerd.services.mounts.v1.ActivateRequest + (*ActivateResponse)(nil), // 1: containerd.services.mounts.v1.ActivateResponse + (*DeactivateRequest)(nil), // 2: containerd.services.mounts.v1.DeactivateRequest + (*InfoRequest)(nil), // 3: containerd.services.mounts.v1.InfoRequest + (*InfoResponse)(nil), // 4: containerd.services.mounts.v1.InfoResponse + (*UpdateRequest)(nil), // 5: containerd.services.mounts.v1.UpdateRequest + (*UpdateResponse)(nil), // 6: containerd.services.mounts.v1.UpdateResponse + (*ListRequest)(nil), // 7: containerd.services.mounts.v1.ListRequest + (*ListMessage)(nil), // 8: containerd.services.mounts.v1.ListMessage + nil, // 9: containerd.services.mounts.v1.ActivateRequest.LabelsEntry + (*types.Mount)(nil), // 10: containerd.types.Mount + (*types.ActivationInfo)(nil), // 11: containerd.types.ActivationInfo + (*fieldmaskpb.FieldMask)(nil), // 12: google.protobuf.FieldMask + (*emptypb.Empty)(nil), // 13: google.protobuf.Empty +} +var file_services_mounts_v1_mounts_proto_depIdxs = []int32{ + 10, // 0: containerd.services.mounts.v1.ActivateRequest.mounts:type_name -> containerd.types.Mount + 9, // 1: containerd.services.mounts.v1.ActivateRequest.labels:type_name -> containerd.services.mounts.v1.ActivateRequest.LabelsEntry + 11, // 2: containerd.services.mounts.v1.ActivateResponse.info:type_name -> containerd.types.ActivationInfo + 11, // 3: containerd.services.mounts.v1.InfoResponse.info:type_name -> containerd.types.ActivationInfo + 11, // 4: containerd.services.mounts.v1.UpdateRequest.info:type_name -> containerd.types.ActivationInfo + 12, // 5: containerd.services.mounts.v1.UpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 11, // 6: containerd.services.mounts.v1.UpdateResponse.info:type_name -> containerd.types.ActivationInfo + 11, // 7: containerd.services.mounts.v1.ListMessage.info:type_name -> containerd.types.ActivationInfo + 0, // 8: containerd.services.mounts.v1.Mounts.Activate:input_type -> containerd.services.mounts.v1.ActivateRequest + 2, // 9: containerd.services.mounts.v1.Mounts.Deactivate:input_type -> containerd.services.mounts.v1.DeactivateRequest + 3, // 10: containerd.services.mounts.v1.Mounts.Info:input_type -> containerd.services.mounts.v1.InfoRequest + 5, // 11: containerd.services.mounts.v1.Mounts.Update:input_type -> containerd.services.mounts.v1.UpdateRequest + 7, // 12: containerd.services.mounts.v1.Mounts.List:input_type -> containerd.services.mounts.v1.ListRequest + 1, // 13: containerd.services.mounts.v1.Mounts.Activate:output_type -> containerd.services.mounts.v1.ActivateResponse + 13, // 14: containerd.services.mounts.v1.Mounts.Deactivate:output_type -> google.protobuf.Empty + 4, // 15: containerd.services.mounts.v1.Mounts.Info:output_type -> containerd.services.mounts.v1.InfoResponse + 6, // 16: containerd.services.mounts.v1.Mounts.Update:output_type -> containerd.services.mounts.v1.UpdateResponse + 8, // 17: containerd.services.mounts.v1.Mounts.List:output_type -> containerd.services.mounts.v1.ListMessage + 13, // [13:18] is the sub-list for method output_type + 8, // [8:13] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_services_mounts_v1_mounts_proto_init() } +func file_services_mounts_v1_mounts_proto_init() { + if File_services_mounts_v1_mounts_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_services_mounts_v1_mounts_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActivateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_mounts_v1_mounts_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActivateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_mounts_v1_mounts_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeactivateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_mounts_v1_mounts_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_mounts_v1_mounts_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_mounts_v1_mounts_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_mounts_v1_mounts_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_mounts_v1_mounts_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_mounts_v1_mounts_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_services_mounts_v1_mounts_proto_rawDesc, + NumEnums: 0, + NumMessages: 10, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_services_mounts_v1_mounts_proto_goTypes, + DependencyIndexes: file_services_mounts_v1_mounts_proto_depIdxs, + MessageInfos: file_services_mounts_v1_mounts_proto_msgTypes, + }.Build() + File_services_mounts_v1_mounts_proto = out.File + file_services_mounts_v1_mounts_proto_rawDesc = nil + file_services_mounts_v1_mounts_proto_goTypes = nil + file_services_mounts_v1_mounts_proto_depIdxs = nil +} diff --git a/api/services/mounts/v1/mounts.proto b/api/services/mounts/v1/mounts.proto new file mode 100644 index 000000000000..d731a91d073c --- /dev/null +++ b/api/services/mounts/v1/mounts.proto @@ -0,0 +1,77 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +syntax = "proto3"; + +package containerd.services.mounts.v1; + +import "google/protobuf/empty.proto"; +import "google/protobuf/field_mask.proto"; +import "types/mount.proto"; + +option go_package = "github.com/containerd/containerd/api/services/mounts/v1;mounts"; + +// Mounts service manages mounts +service Mounts { + rpc Activate(ActivateRequest) returns (ActivateResponse); + rpc Deactivate(DeactivateRequest) returns (google.protobuf.Empty); + rpc Info(InfoRequest) returns (InfoResponse); + rpc Update(UpdateRequest) returns (UpdateResponse); + rpc List(ListRequest) returns (stream ListMessage); +} + +message ActivateRequest { + string name = 1; + + repeated containerd.types.Mount mounts = 2; + + map labels = 3; + + bool temporary = 4; +} + +message ActivateResponse { + containerd.types.ActivationInfo info = 1; +} + +message DeactivateRequest { + string name = 1; +} + +message InfoRequest { + string name = 1; +} + +message InfoResponse { + containerd.types.ActivationInfo info = 1; +} + +message UpdateRequest { + containerd.types.ActivationInfo info = 1; + + google.protobuf.FieldMask update_mask = 2; +} + +message UpdateResponse { + containerd.types.ActivationInfo info = 1; +} + +message ListRequest { + repeated string filters = 1; +} + +message ListMessage { + containerd.types.ActivationInfo info = 1; +} diff --git a/api/services/mounts/v1/mounts_grpc.pb.go b/api/services/mounts/v1/mounts_grpc.pb.go new file mode 100644 index 000000000000..758368921a58 --- /dev/null +++ b/api/services/mounts/v1/mounts_grpc.pb.go @@ -0,0 +1,280 @@ +//go:build !no_grpc + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: services/mounts/v1/mounts.proto + +package mounts + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// MountsClient is the client API for Mounts service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MountsClient interface { + Activate(ctx context.Context, in *ActivateRequest, opts ...grpc.CallOption) (*ActivateResponse, error) + Deactivate(ctx context.Context, in *DeactivateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Info(ctx context.Context, in *InfoRequest, opts ...grpc.CallOption) (*InfoResponse, error) + Update(ctx context.Context, in *UpdateRequest, opts ...grpc.CallOption) (*UpdateResponse, error) + List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (Mounts_ListClient, error) +} + +type mountsClient struct { + cc grpc.ClientConnInterface +} + +func NewMountsClient(cc grpc.ClientConnInterface) MountsClient { + return &mountsClient{cc} +} + +func (c *mountsClient) Activate(ctx context.Context, in *ActivateRequest, opts ...grpc.CallOption) (*ActivateResponse, error) { + out := new(ActivateResponse) + err := c.cc.Invoke(ctx, "/containerd.services.mounts.v1.Mounts/Activate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mountsClient) Deactivate(ctx context.Context, in *DeactivateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.services.mounts.v1.Mounts/Deactivate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mountsClient) Info(ctx context.Context, in *InfoRequest, opts ...grpc.CallOption) (*InfoResponse, error) { + out := new(InfoResponse) + err := c.cc.Invoke(ctx, "/containerd.services.mounts.v1.Mounts/Info", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mountsClient) Update(ctx context.Context, in *UpdateRequest, opts ...grpc.CallOption) (*UpdateResponse, error) { + out := new(UpdateResponse) + err := c.cc.Invoke(ctx, "/containerd.services.mounts.v1.Mounts/Update", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mountsClient) List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (Mounts_ListClient, error) { + stream, err := c.cc.NewStream(ctx, &Mounts_ServiceDesc.Streams[0], "/containerd.services.mounts.v1.Mounts/List", opts...) + if err != nil { + return nil, err + } + x := &mountsListClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Mounts_ListClient interface { + Recv() (*ListMessage, error) + grpc.ClientStream +} + +type mountsListClient struct { + grpc.ClientStream +} + +func (x *mountsListClient) Recv() (*ListMessage, error) { + m := new(ListMessage) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// MountsServer is the server API for Mounts service. +// All implementations must embed UnimplementedMountsServer +// for forward compatibility +type MountsServer interface { + Activate(context.Context, *ActivateRequest) (*ActivateResponse, error) + Deactivate(context.Context, *DeactivateRequest) (*emptypb.Empty, error) + Info(context.Context, *InfoRequest) (*InfoResponse, error) + Update(context.Context, *UpdateRequest) (*UpdateResponse, error) + List(*ListRequest, Mounts_ListServer) error + mustEmbedUnimplementedMountsServer() +} + +// UnimplementedMountsServer must be embedded to have forward compatible implementations. +type UnimplementedMountsServer struct { +} + +func (UnimplementedMountsServer) Activate(context.Context, *ActivateRequest) (*ActivateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Activate not implemented") +} +func (UnimplementedMountsServer) Deactivate(context.Context, *DeactivateRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Deactivate not implemented") +} +func (UnimplementedMountsServer) Info(context.Context, *InfoRequest) (*InfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Info not implemented") +} +func (UnimplementedMountsServer) Update(context.Context, *UpdateRequest) (*UpdateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedMountsServer) List(*ListRequest, Mounts_ListServer) error { + return status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedMountsServer) mustEmbedUnimplementedMountsServer() {} + +// UnsafeMountsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MountsServer will +// result in compilation errors. +type UnsafeMountsServer interface { + mustEmbedUnimplementedMountsServer() +} + +func RegisterMountsServer(s grpc.ServiceRegistrar, srv MountsServer) { + s.RegisterService(&Mounts_ServiceDesc, srv) +} + +func _Mounts_Activate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ActivateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MountsServer).Activate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.mounts.v1.Mounts/Activate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MountsServer).Activate(ctx, req.(*ActivateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Mounts_Deactivate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeactivateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MountsServer).Deactivate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.mounts.v1.Mounts/Deactivate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MountsServer).Deactivate(ctx, req.(*DeactivateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Mounts_Info_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MountsServer).Info(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.mounts.v1.Mounts/Info", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MountsServer).Info(ctx, req.(*InfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Mounts_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MountsServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.mounts.v1.Mounts/Update", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MountsServer).Update(ctx, req.(*UpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Mounts_List_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ListRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(MountsServer).List(m, &mountsListServer{stream}) +} + +type Mounts_ListServer interface { + Send(*ListMessage) error + grpc.ServerStream +} + +type mountsListServer struct { + grpc.ServerStream +} + +func (x *mountsListServer) Send(m *ListMessage) error { + return x.ServerStream.SendMsg(m) +} + +// Mounts_ServiceDesc is the grpc.ServiceDesc for Mounts service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Mounts_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "containerd.services.mounts.v1.Mounts", + HandlerType: (*MountsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Activate", + Handler: _Mounts_Activate_Handler, + }, + { + MethodName: "Deactivate", + Handler: _Mounts_Deactivate_Handler, + }, + { + MethodName: "Info", + Handler: _Mounts_Info_Handler, + }, + { + MethodName: "Update", + Handler: _Mounts_Update_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "List", + Handler: _Mounts_List_Handler, + ServerStreams: true, + }, + }, + Metadata: "services/mounts/v1/mounts.proto", +} diff --git a/api/services/mounts/v1/mounts_ttrpc.pb.go b/api/services/mounts/v1/mounts_ttrpc.pb.go new file mode 100644 index 000000000000..82858bcf4d1e --- /dev/null +++ b/api/services/mounts/v1/mounts_ttrpc.pb.go @@ -0,0 +1,157 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/mounts/v1/mounts.proto +package mounts + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCMountsService interface { + Activate(context.Context, *ActivateRequest) (*ActivateResponse, error) + Deactivate(context.Context, *DeactivateRequest) (*emptypb.Empty, error) + Info(context.Context, *InfoRequest) (*InfoResponse, error) + Update(context.Context, *UpdateRequest) (*UpdateResponse, error) + List(context.Context, *ListRequest, TTRPCMounts_ListServer) error +} + +type TTRPCMounts_ListServer interface { + Send(*ListMessage) error + ttrpc.StreamServer +} + +type ttrpcmountsListServer struct { + ttrpc.StreamServer +} + +func (x *ttrpcmountsListServer) Send(m *ListMessage) error { + return x.StreamServer.SendMsg(m) +} + +func RegisterTTRPCMountsService(srv *ttrpc.Server, svc TTRPCMountsService) { + srv.RegisterService("containerd.services.mounts.v1.Mounts", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Activate": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ActivateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Activate(ctx, &req) + }, + "Deactivate": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeactivateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Deactivate(ctx, &req) + }, + "Info": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req InfoRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Info(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UpdateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + }, + Streams: map[string]ttrpc.Stream{ + "List": { + Handler: func(ctx context.Context, stream ttrpc.StreamServer) (interface{}, error) { + m := new(ListRequest) + if err := stream.RecvMsg(m); err != nil { + return nil, err + } + return nil, svc.List(ctx, m, &ttrpcmountsListServer{stream}) + }, + StreamingClient: false, + StreamingServer: true, + }, + }, + }) +} + +type TTRPCMountsClient interface { + Activate(context.Context, *ActivateRequest) (*ActivateResponse, error) + Deactivate(context.Context, *DeactivateRequest) (*emptypb.Empty, error) + Info(context.Context, *InfoRequest) (*InfoResponse, error) + Update(context.Context, *UpdateRequest) (*UpdateResponse, error) + List(context.Context, *ListRequest) (TTRPCMounts_ListClient, error) +} + +type ttrpcmountsClient struct { + client *ttrpc.Client +} + +func NewTTRPCMountsClient(client *ttrpc.Client) TTRPCMountsClient { + return &ttrpcmountsClient{ + client: client, + } +} + +func (c *ttrpcmountsClient) Activate(ctx context.Context, req *ActivateRequest) (*ActivateResponse, error) { + var resp ActivateResponse + if err := c.client.Call(ctx, "containerd.services.mounts.v1.Mounts", "Activate", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcmountsClient) Deactivate(ctx context.Context, req *DeactivateRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.mounts.v1.Mounts", "Deactivate", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcmountsClient) Info(ctx context.Context, req *InfoRequest) (*InfoResponse, error) { + var resp InfoResponse + if err := c.client.Call(ctx, "containerd.services.mounts.v1.Mounts", "Info", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcmountsClient) Update(ctx context.Context, req *UpdateRequest) (*UpdateResponse, error) { + var resp UpdateResponse + if err := c.client.Call(ctx, "containerd.services.mounts.v1.Mounts", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcmountsClient) List(ctx context.Context, req *ListRequest) (TTRPCMounts_ListClient, error) { + stream, err := c.client.NewStream(ctx, &ttrpc.StreamDesc{ + StreamingClient: false, + StreamingServer: true, + }, "containerd.services.mounts.v1.Mounts", "List", req) + if err != nil { + return nil, err + } + x := &ttrpcmountsListClient{stream} + return x, nil +} + +type TTRPCMounts_ListClient interface { + Recv() (*ListMessage, error) + ttrpc.ClientStream +} + +type ttrpcmountsListClient struct { + ttrpc.ClientStream +} + +func (x *ttrpcmountsListClient) Recv() (*ListMessage, error) { + m := new(ListMessage) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} diff --git a/api/services/namespaces/v1/namespace.pb.go b/api/services/namespaces/v1/namespace.pb.go index a75a315c43c4..90ca2166404a 100644 --- a/api/services/namespaces/v1/namespace.pb.go +++ b/api/services/namespaces/v1/namespace.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/namespaces/v1/namespace.proto +// protoc (unknown) +// source: services/namespaces/v1/namespace.proto package namespaces @@ -55,7 +55,7 @@ type Namespace struct { func (x *Namespace) Reset() { *x = Namespace{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[0] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -68,7 +68,7 @@ func (x *Namespace) String() string { func (*Namespace) ProtoMessage() {} func (x *Namespace) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[0] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -81,7 +81,7 @@ func (x *Namespace) ProtoReflect() protoreflect.Message { // Deprecated: Use Namespace.ProtoReflect.Descriptor instead. func (*Namespace) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{0} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{0} } func (x *Namespace) GetName() string { @@ -109,7 +109,7 @@ type GetNamespaceRequest struct { func (x *GetNamespaceRequest) Reset() { *x = GetNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[1] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -122,7 +122,7 @@ func (x *GetNamespaceRequest) String() string { func (*GetNamespaceRequest) ProtoMessage() {} func (x *GetNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[1] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -135,7 +135,7 @@ func (x *GetNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNamespaceRequest.ProtoReflect.Descriptor instead. func (*GetNamespaceRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{1} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{1} } func (x *GetNamespaceRequest) GetName() string { @@ -156,7 +156,7 @@ type GetNamespaceResponse struct { func (x *GetNamespaceResponse) Reset() { *x = GetNamespaceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[2] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -169,7 +169,7 @@ func (x *GetNamespaceResponse) String() string { func (*GetNamespaceResponse) ProtoMessage() {} func (x *GetNamespaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[2] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -182,7 +182,7 @@ func (x *GetNamespaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetNamespaceResponse.ProtoReflect.Descriptor instead. func (*GetNamespaceResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{2} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{2} } func (x *GetNamespaceResponse) GetNamespace() *Namespace { @@ -203,7 +203,7 @@ type ListNamespacesRequest struct { func (x *ListNamespacesRequest) Reset() { *x = ListNamespacesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[3] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -216,7 +216,7 @@ func (x *ListNamespacesRequest) String() string { func (*ListNamespacesRequest) ProtoMessage() {} func (x *ListNamespacesRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[3] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -229,7 +229,7 @@ func (x *ListNamespacesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNamespacesRequest.ProtoReflect.Descriptor instead. func (*ListNamespacesRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{3} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{3} } func (x *ListNamespacesRequest) GetFilter() string { @@ -250,7 +250,7 @@ type ListNamespacesResponse struct { func (x *ListNamespacesResponse) Reset() { *x = ListNamespacesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[4] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -263,7 +263,7 @@ func (x *ListNamespacesResponse) String() string { func (*ListNamespacesResponse) ProtoMessage() {} func (x *ListNamespacesResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[4] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -276,7 +276,7 @@ func (x *ListNamespacesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNamespacesResponse.ProtoReflect.Descriptor instead. func (*ListNamespacesResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{4} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{4} } func (x *ListNamespacesResponse) GetNamespaces() []*Namespace { @@ -297,7 +297,7 @@ type CreateNamespaceRequest struct { func (x *CreateNamespaceRequest) Reset() { *x = CreateNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[5] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -310,7 +310,7 @@ func (x *CreateNamespaceRequest) String() string { func (*CreateNamespaceRequest) ProtoMessage() {} func (x *CreateNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[5] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -323,7 +323,7 @@ func (x *CreateNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateNamespaceRequest.ProtoReflect.Descriptor instead. func (*CreateNamespaceRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{5} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{5} } func (x *CreateNamespaceRequest) GetNamespace() *Namespace { @@ -344,7 +344,7 @@ type CreateNamespaceResponse struct { func (x *CreateNamespaceResponse) Reset() { *x = CreateNamespaceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[6] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -357,7 +357,7 @@ func (x *CreateNamespaceResponse) String() string { func (*CreateNamespaceResponse) ProtoMessage() {} func (x *CreateNamespaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[6] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -370,7 +370,7 @@ func (x *CreateNamespaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateNamespaceResponse.ProtoReflect.Descriptor instead. func (*CreateNamespaceResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{6} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{6} } func (x *CreateNamespaceResponse) GetNamespace() *Namespace { @@ -406,7 +406,7 @@ type UpdateNamespaceRequest struct { func (x *UpdateNamespaceRequest) Reset() { *x = UpdateNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[7] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -419,7 +419,7 @@ func (x *UpdateNamespaceRequest) String() string { func (*UpdateNamespaceRequest) ProtoMessage() {} func (x *UpdateNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[7] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -432,7 +432,7 @@ func (x *UpdateNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateNamespaceRequest.ProtoReflect.Descriptor instead. func (*UpdateNamespaceRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{7} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{7} } func (x *UpdateNamespaceRequest) GetNamespace() *Namespace { @@ -460,7 +460,7 @@ type UpdateNamespaceResponse struct { func (x *UpdateNamespaceResponse) Reset() { *x = UpdateNamespaceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[8] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -473,7 +473,7 @@ func (x *UpdateNamespaceResponse) String() string { func (*UpdateNamespaceResponse) ProtoMessage() {} func (x *UpdateNamespaceResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[8] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -486,7 +486,7 @@ func (x *UpdateNamespaceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateNamespaceResponse.ProtoReflect.Descriptor instead. func (*UpdateNamespaceResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{8} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{8} } func (x *UpdateNamespaceResponse) GetNamespace() *Namespace { @@ -507,7 +507,7 @@ type DeleteNamespaceRequest struct { func (x *DeleteNamespaceRequest) Reset() { *x = DeleteNamespaceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[9] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -520,7 +520,7 @@ func (x *DeleteNamespaceRequest) String() string { func (*DeleteNamespaceRequest) ProtoMessage() {} func (x *DeleteNamespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[9] + mi := &file_services_namespaces_v1_namespace_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -533,7 +533,7 @@ func (x *DeleteNamespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNamespaceRequest.ProtoReflect.Descriptor instead. func (*DeleteNamespaceRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{9} + return file_services_namespaces_v1_namespace_proto_rawDescGZIP(), []int{9} } func (x *DeleteNamespaceRequest) GetName() string { @@ -543,142 +543,139 @@ func (x *DeleteNamespaceRequest) GetName() string { return "" } -var File_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDesc = []byte{ - 0x0a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xac, 0x01, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x50, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x29, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x2f, 0x0a, - 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x66, - 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, +var File_services_namespaces_v1_namespace_proto protoreflect.FileDescriptor + +var file_services_namespaces_v1_namespace_proto_rawDesc = []byte{ + 0x0a, 0x26, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, + 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x50, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x64, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, + 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x4a, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x65, 0x0a, 0x17, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x65, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x2f, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x66, 0x0a, 0x16, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x22, 0x64, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x65, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x2c, - 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xe0, 0x04, 0x0a, - 0x0a, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x76, 0x0a, 0x03, 0x47, - 0x65, 0x74, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xa1, + 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, + 0x73, 0x6b, 0x22, 0x65, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x16, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xe0, 0x04, 0x0a, 0x0a, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x76, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x36, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x7f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, + 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x06, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x7f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x06, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, - 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescData = file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDesc + file_services_namespaces_v1_namespace_proto_rawDescOnce sync.Once + file_services_namespaces_v1_namespace_proto_rawDescData = file_services_namespaces_v1_namespace_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescData) +func file_services_namespaces_v1_namespace_proto_rawDescGZIP() []byte { + file_services_namespaces_v1_namespace_proto_rawDescOnce.Do(func() { + file_services_namespaces_v1_namespace_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_namespaces_v1_namespace_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDescData + return file_services_namespaces_v1_namespace_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_goTypes = []interface{}{ +var file_services_namespaces_v1_namespace_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_services_namespaces_v1_namespace_proto_goTypes = []interface{}{ (*Namespace)(nil), // 0: containerd.services.namespaces.v1.Namespace (*GetNamespaceRequest)(nil), // 1: containerd.services.namespaces.v1.GetNamespaceRequest (*GetNamespaceResponse)(nil), // 2: containerd.services.namespaces.v1.GetNamespaceResponse @@ -693,7 +690,7 @@ var file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_p (*fieldmaskpb.FieldMask)(nil), // 11: google.protobuf.FieldMask (*emptypb.Empty)(nil), // 12: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_depIdxs = []int32{ +var file_services_namespaces_v1_namespace_proto_depIdxs = []int32{ 10, // 0: containerd.services.namespaces.v1.Namespace.labels:type_name -> containerd.services.namespaces.v1.Namespace.LabelsEntry 0, // 1: containerd.services.namespaces.v1.GetNamespaceResponse.namespace:type_name -> containerd.services.namespaces.v1.Namespace 0, // 2: containerd.services.namespaces.v1.ListNamespacesResponse.namespaces:type_name -> containerd.services.namespaces.v1.Namespace @@ -719,13 +716,13 @@ var file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_p 0, // [0:8] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_init() } -func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_init() { - if File_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto != nil { +func init() { file_services_namespaces_v1_namespace_proto_init() } +func file_services_namespaces_v1_namespace_proto_init() { + if File_services_namespaces_v1_namespace_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Namespace); i { case 0: return &v.state @@ -737,7 +734,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNamespaceRequest); i { case 0: return &v.state @@ -749,7 +746,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetNamespaceResponse); i { case 0: return &v.state @@ -761,7 +758,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListNamespacesRequest); i { case 0: return &v.state @@ -773,7 +770,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListNamespacesResponse); i { case 0: return &v.state @@ -785,7 +782,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateNamespaceRequest); i { case 0: return &v.state @@ -797,7 +794,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateNamespaceResponse); i { case 0: return &v.state @@ -809,7 +806,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateNamespaceRequest); i { case 0: return &v.state @@ -821,7 +818,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateNamespaceResponse); i { case 0: return &v.state @@ -833,7 +830,7 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ return nil } } - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_services_namespaces_v1_namespace_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteNamespaceRequest); i { case 0: return &v.state @@ -850,18 +847,18 @@ func file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_ out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDesc, + RawDescriptor: file_services_namespaces_v1_namespace_proto_rawDesc, NumEnums: 0, NumMessages: 11, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_msgTypes, + GoTypes: file_services_namespaces_v1_namespace_proto_goTypes, + DependencyIndexes: file_services_namespaces_v1_namespace_proto_depIdxs, + MessageInfos: file_services_namespaces_v1_namespace_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto = out.File - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_namespaces_v1_namespace_proto_depIdxs = nil + File_services_namespaces_v1_namespace_proto = out.File + file_services_namespaces_v1_namespace_proto_rawDesc = nil + file_services_namespaces_v1_namespace_proto_goTypes = nil + file_services_namespaces_v1_namespace_proto_depIdxs = nil } diff --git a/api/services/namespaces/v1/namespace.proto b/api/services/namespaces/v1/namespace.proto index 910bcd6c7208..f534875dc636 100644 --- a/api/services/namespaces/v1/namespace.proto +++ b/api/services/namespaces/v1/namespace.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -35,47 +35,47 @@ option go_package = "github.com/containerd/containerd/api/services/namespaces/v1 // I hope this goes without saying, but namespaces are themselves NOT // namespaced. service Namespaces { - rpc Get(GetNamespaceRequest) returns (GetNamespaceResponse); - rpc List(ListNamespacesRequest) returns (ListNamespacesResponse); - rpc Create(CreateNamespaceRequest) returns (CreateNamespaceResponse); - rpc Update(UpdateNamespaceRequest) returns (UpdateNamespaceResponse); - rpc Delete(DeleteNamespaceRequest) returns (google.protobuf.Empty); + rpc Get(GetNamespaceRequest) returns (GetNamespaceResponse); + rpc List(ListNamespacesRequest) returns (ListNamespacesResponse); + rpc Create(CreateNamespaceRequest) returns (CreateNamespaceResponse); + rpc Update(UpdateNamespaceRequest) returns (UpdateNamespaceResponse); + rpc Delete(DeleteNamespaceRequest) returns (google.protobuf.Empty); } message Namespace { - string name = 1; - - // Labels provides an area to include arbitrary data on namespaces. - // - // The combined size of a key/value pair cannot exceed 4096 bytes. - // - // Note that to add a new value to this field, read the existing set and - // include the entire result in the update call. - map labels = 2; + string name = 1; + + // Labels provides an area to include arbitrary data on namespaces. + // + // The combined size of a key/value pair cannot exceed 4096 bytes. + // + // Note that to add a new value to this field, read the existing set and + // include the entire result in the update call. + map labels = 2; } message GetNamespaceRequest { - string name = 1; + string name = 1; } message GetNamespaceResponse { - Namespace namespace = 1; + Namespace namespace = 1; } message ListNamespacesRequest { - string filter = 1; + string filter = 1; } message ListNamespacesResponse { - repeated Namespace namespaces = 1; + repeated Namespace namespaces = 1; } message CreateNamespaceRequest { - Namespace namespace = 1; + Namespace namespace = 1; } message CreateNamespaceResponse { - Namespace namespace = 1; + Namespace namespace = 1; } // UpdateNamespaceRequest updates the metadata for a namespace. @@ -84,24 +84,24 @@ message CreateNamespaceResponse { // https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/field-mask, // unless otherwise qualified. message UpdateNamespaceRequest { - // Namespace provides the target value, as declared by the mask, for the update. - // - // The namespace field must be set. - Namespace namespace = 1; - - // UpdateMask specifies which fields to perform the update on. If empty, - // the operation applies to all fields. - // - // For the most part, this applies only to selectively updating labels on - // the namespace. While field masks are typically limited to ascii alphas - // and digits, we just take everything after the "labels." as the map key. - google.protobuf.FieldMask update_mask = 2; + // Namespace provides the target value, as declared by the mask, for the update. + // + // The namespace field must be set. + Namespace namespace = 1; + + // UpdateMask specifies which fields to perform the update on. If empty, + // the operation applies to all fields. + // + // For the most part, this applies only to selectively updating labels on + // the namespace. While field masks are typically limited to ascii alphas + // and digits, we just take everything after the "labels." as the map key. + google.protobuf.FieldMask update_mask = 2; } message UpdateNamespaceResponse { - Namespace namespace = 1; + Namespace namespace = 1; } message DeleteNamespaceRequest { - string name = 1; + string name = 1; } diff --git a/api/services/namespaces/v1/namespace_grpc.pb.go b/api/services/namespaces/v1/namespace_grpc.pb.go index ed4e4c2ffe59..99a9ce92c36c 100644 --- a/api/services/namespaces/v1/namespace_grpc.pb.go +++ b/api/services/namespaces/v1/namespace_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/namespaces/v1/namespace.proto +// - protoc (unknown) +// source: services/namespaces/v1/namespace.proto package namespaces @@ -246,5 +248,5 @@ var Namespaces_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/namespaces/v1/namespace.proto", + Metadata: "services/namespaces/v1/namespace.proto", } diff --git a/api/services/namespaces/v1/namespace_ttrpc.pb.go b/api/services/namespaces/v1/namespace_ttrpc.pb.go new file mode 100644 index 000000000000..024cb39723e5 --- /dev/null +++ b/api/services/namespaces/v1/namespace_ttrpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/namespaces/v1/namespace.proto +package namespaces + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCNamespacesService interface { + Get(context.Context, *GetNamespaceRequest) (*GetNamespaceResponse, error) + List(context.Context, *ListNamespacesRequest) (*ListNamespacesResponse, error) + Create(context.Context, *CreateNamespaceRequest) (*CreateNamespaceResponse, error) + Update(context.Context, *UpdateNamespaceRequest) (*UpdateNamespaceResponse, error) + Delete(context.Context, *DeleteNamespaceRequest) (*emptypb.Empty, error) +} + +func RegisterTTRPCNamespacesService(srv *ttrpc.Server, svc TTRPCNamespacesService) { + srv.RegisterService("containerd.services.namespaces.v1.Namespaces", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Get": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req GetNamespaceRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Get(ctx, &req) + }, + "List": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ListNamespacesRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.List(ctx, &req) + }, + "Create": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CreateNamespaceRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Create(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UpdateNamespaceRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + "Delete": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteNamespaceRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Delete(ctx, &req) + }, + }, + }) +} + +type ttrpcnamespacesClient struct { + client *ttrpc.Client +} + +func NewTTRPCNamespacesClient(client *ttrpc.Client) TTRPCNamespacesService { + return &ttrpcnamespacesClient{ + client: client, + } +} + +func (c *ttrpcnamespacesClient) Get(ctx context.Context, req *GetNamespaceRequest) (*GetNamespaceResponse, error) { + var resp GetNamespaceResponse + if err := c.client.Call(ctx, "containerd.services.namespaces.v1.Namespaces", "Get", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcnamespacesClient) List(ctx context.Context, req *ListNamespacesRequest) (*ListNamespacesResponse, error) { + var resp ListNamespacesResponse + if err := c.client.Call(ctx, "containerd.services.namespaces.v1.Namespaces", "List", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcnamespacesClient) Create(ctx context.Context, req *CreateNamespaceRequest) (*CreateNamespaceResponse, error) { + var resp CreateNamespaceResponse + if err := c.client.Call(ctx, "containerd.services.namespaces.v1.Namespaces", "Create", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcnamespacesClient) Update(ctx context.Context, req *UpdateNamespaceRequest) (*UpdateNamespaceResponse, error) { + var resp UpdateNamespaceResponse + if err := c.client.Call(ctx, "containerd.services.namespaces.v1.Namespaces", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcnamespacesClient) Delete(ctx context.Context, req *DeleteNamespaceRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.namespaces.v1.Namespaces", "Delete", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/sandbox/v1/sandbox.pb.go b/api/services/sandbox/v1/sandbox.pb.go index 3843ab96b381..22169691a5a1 100644 --- a/api/services/sandbox/v1/sandbox.pb.go +++ b/api/services/sandbox/v1/sandbox.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/sandbox/v1/sandbox.proto +// protoc (unknown) +// source: services/sandbox/v1/sandbox.proto // Sandbox is a v2 runtime extension that allows more complex execution environments for containers. // This adds a notion of groups of containers that share same lifecycle and/or resources. @@ -57,7 +57,7 @@ type StoreCreateRequest struct { func (x *StoreCreateRequest) Reset() { *x = StoreCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[0] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -70,7 +70,7 @@ func (x *StoreCreateRequest) String() string { func (*StoreCreateRequest) ProtoMessage() {} func (x *StoreCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[0] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -83,7 +83,7 @@ func (x *StoreCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCreateRequest.ProtoReflect.Descriptor instead. func (*StoreCreateRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{0} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{0} } func (x *StoreCreateRequest) GetSandbox() *types.Sandbox { @@ -104,7 +104,7 @@ type StoreCreateResponse struct { func (x *StoreCreateResponse) Reset() { *x = StoreCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[1] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -117,7 +117,7 @@ func (x *StoreCreateResponse) String() string { func (*StoreCreateResponse) ProtoMessage() {} func (x *StoreCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[1] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -130,7 +130,7 @@ func (x *StoreCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCreateResponse.ProtoReflect.Descriptor instead. func (*StoreCreateResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{1} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{1} } func (x *StoreCreateResponse) GetSandbox() *types.Sandbox { @@ -152,7 +152,7 @@ type StoreUpdateRequest struct { func (x *StoreUpdateRequest) Reset() { *x = StoreUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[2] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -165,7 +165,7 @@ func (x *StoreUpdateRequest) String() string { func (*StoreUpdateRequest) ProtoMessage() {} func (x *StoreUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[2] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -178,7 +178,7 @@ func (x *StoreUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreUpdateRequest.ProtoReflect.Descriptor instead. func (*StoreUpdateRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{2} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{2} } func (x *StoreUpdateRequest) GetSandbox() *types.Sandbox { @@ -206,7 +206,7 @@ type StoreUpdateResponse struct { func (x *StoreUpdateResponse) Reset() { *x = StoreUpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[3] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -219,7 +219,7 @@ func (x *StoreUpdateResponse) String() string { func (*StoreUpdateResponse) ProtoMessage() {} func (x *StoreUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[3] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -232,7 +232,7 @@ func (x *StoreUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreUpdateResponse.ProtoReflect.Descriptor instead. func (*StoreUpdateResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{3} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{3} } func (x *StoreUpdateResponse) GetSandbox() *types.Sandbox { @@ -253,7 +253,7 @@ type StoreDeleteRequest struct { func (x *StoreDeleteRequest) Reset() { *x = StoreDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[4] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -266,7 +266,7 @@ func (x *StoreDeleteRequest) String() string { func (*StoreDeleteRequest) ProtoMessage() {} func (x *StoreDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[4] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -279,7 +279,7 @@ func (x *StoreDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDeleteRequest.ProtoReflect.Descriptor instead. func (*StoreDeleteRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{4} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{4} } func (x *StoreDeleteRequest) GetSandboxID() string { @@ -298,7 +298,7 @@ type StoreDeleteResponse struct { func (x *StoreDeleteResponse) Reset() { *x = StoreDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[5] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -311,7 +311,7 @@ func (x *StoreDeleteResponse) String() string { func (*StoreDeleteResponse) ProtoMessage() {} func (x *StoreDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[5] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -324,7 +324,7 @@ func (x *StoreDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDeleteResponse.ProtoReflect.Descriptor instead. func (*StoreDeleteResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{5} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{5} } type StoreListRequest struct { @@ -338,7 +338,7 @@ type StoreListRequest struct { func (x *StoreListRequest) Reset() { *x = StoreListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[6] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -351,7 +351,7 @@ func (x *StoreListRequest) String() string { func (*StoreListRequest) ProtoMessage() {} func (x *StoreListRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[6] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -364,7 +364,7 @@ func (x *StoreListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreListRequest.ProtoReflect.Descriptor instead. func (*StoreListRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{6} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{6} } func (x *StoreListRequest) GetFilters() []string { @@ -385,7 +385,7 @@ type StoreListResponse struct { func (x *StoreListResponse) Reset() { *x = StoreListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[7] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -398,7 +398,7 @@ func (x *StoreListResponse) String() string { func (*StoreListResponse) ProtoMessage() {} func (x *StoreListResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[7] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -411,7 +411,7 @@ func (x *StoreListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreListResponse.ProtoReflect.Descriptor instead. func (*StoreListResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{7} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{7} } func (x *StoreListResponse) GetList() []*types.Sandbox { @@ -432,7 +432,7 @@ type StoreGetRequest struct { func (x *StoreGetRequest) Reset() { *x = StoreGetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[8] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -445,7 +445,7 @@ func (x *StoreGetRequest) String() string { func (*StoreGetRequest) ProtoMessage() {} func (x *StoreGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[8] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -458,7 +458,7 @@ func (x *StoreGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreGetRequest.ProtoReflect.Descriptor instead. func (*StoreGetRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{8} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{8} } func (x *StoreGetRequest) GetSandboxID() string { @@ -479,7 +479,7 @@ type StoreGetResponse struct { func (x *StoreGetResponse) Reset() { *x = StoreGetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[9] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -492,7 +492,7 @@ func (x *StoreGetResponse) String() string { func (*StoreGetResponse) ProtoMessage() {} func (x *StoreGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[9] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -505,7 +505,7 @@ func (x *StoreGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreGetResponse.ProtoReflect.Descriptor instead. func (*StoreGetResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{9} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{9} } func (x *StoreGetResponse) GetSandbox() *types.Sandbox { @@ -515,20 +515,161 @@ func (x *StoreGetResponse) GetSandbox() *types.Sandbox { return nil } +type ControllerCreateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Rootfs []*types.Mount `protobuf:"bytes,2,rep,name=rootfs,proto3" json:"rootfs,omitempty"` + Options *anypb.Any `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` + NetnsPath string `protobuf:"bytes,4,opt,name=netns_path,json=netnsPath,proto3" json:"netns_path,omitempty"` + Annotations map[string]string `protobuf:"bytes,5,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Sandbox *types.Sandbox `protobuf:"bytes,6,opt,name=sandbox,proto3" json:"sandbox,omitempty"` + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` +} + +func (x *ControllerCreateRequest) Reset() { + *x = ControllerCreateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerCreateRequest) ProtoMessage() {} + +func (x *ControllerCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerCreateRequest.ProtoReflect.Descriptor instead. +func (*ControllerCreateRequest) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{10} +} + +func (x *ControllerCreateRequest) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +func (x *ControllerCreateRequest) GetRootfs() []*types.Mount { + if x != nil { + return x.Rootfs + } + return nil +} + +func (x *ControllerCreateRequest) GetOptions() *anypb.Any { + if x != nil { + return x.Options + } + return nil +} + +func (x *ControllerCreateRequest) GetNetnsPath() string { + if x != nil { + return x.NetnsPath + } + return "" +} + +func (x *ControllerCreateRequest) GetAnnotations() map[string]string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *ControllerCreateRequest) GetSandbox() *types.Sandbox { + if x != nil { + return x.Sandbox + } + return nil +} + +func (x *ControllerCreateRequest) GetSandboxer() string { + if x != nil { + return x.Sandboxer + } + return "" +} + +type ControllerCreateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` +} + +func (x *ControllerCreateResponse) Reset() { + *x = ControllerCreateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerCreateResponse) ProtoMessage() {} + +func (x *ControllerCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerCreateResponse.ProtoReflect.Descriptor instead. +func (*ControllerCreateResponse) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{11} +} + +func (x *ControllerCreateResponse) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + type ControllerStartRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` - Rootfs []*types.Mount `protobuf:"bytes,2,rep,name=rootfs,proto3" json:"rootfs,omitempty"` - Options *anypb.Any `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` } func (x *ControllerStartRequest) Reset() { *x = ControllerStartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[10] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -541,7 +682,7 @@ func (x *ControllerStartRequest) String() string { func (*ControllerStartRequest) ProtoMessage() {} func (x *ControllerStartRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[10] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -554,7 +695,7 @@ func (x *ControllerStartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ControllerStartRequest.ProtoReflect.Descriptor instead. func (*ControllerStartRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{10} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{12} } func (x *ControllerStartRequest) GetSandboxID() string { @@ -564,18 +705,11 @@ func (x *ControllerStartRequest) GetSandboxID() string { return "" } -func (x *ControllerStartRequest) GetRootfs() []*types.Mount { +func (x *ControllerStartRequest) GetSandboxer() string { if x != nil { - return x.Rootfs - } - return nil -} - -func (x *ControllerStartRequest) GetOptions() *anypb.Any { - if x != nil { - return x.Options + return x.Sandboxer } - return nil + return "" } type ControllerStartResponse struct { @@ -583,14 +717,21 @@ type ControllerStartResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` - Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Address of the sandbox for containerd to connect, + // for calling Task or other APIs serving in the sandbox. + // it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:. + Address string `protobuf:"bytes,5,opt,name=address,proto3" json:"address,omitempty"` + Version uint32 `protobuf:"varint,6,opt,name=version,proto3" json:"version,omitempty"` } func (x *ControllerStartResponse) Reset() { *x = ControllerStartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[11] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -603,7 +744,7 @@ func (x *ControllerStartResponse) String() string { func (*ControllerStartResponse) ProtoMessage() {} func (x *ControllerStartResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[11] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -616,7 +757,7 @@ func (x *ControllerStartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ControllerStartResponse.ProtoReflect.Descriptor instead. func (*ControllerStartResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{11} + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{13} } func (x *ControllerStartResponse) GetSandboxID() string { @@ -633,32 +774,163 @@ func (x *ControllerStartResponse) GetPid() uint32 { return 0 } -type ControllerShutdownRequest struct { +func (x *ControllerStartResponse) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *ControllerStartResponse) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *ControllerStartResponse) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *ControllerStartResponse) GetVersion() uint32 { + if x != nil { + return x.Version + } + return 0 +} + +type ControllerPlatformRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` +} + +func (x *ControllerPlatformRequest) Reset() { + *x = ControllerPlatformRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerPlatformRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerPlatformRequest) ProtoMessage() {} + +func (x *ControllerPlatformRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerPlatformRequest.ProtoReflect.Descriptor instead. +func (*ControllerPlatformRequest) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{14} +} + +func (x *ControllerPlatformRequest) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +func (x *ControllerPlatformRequest) GetSandboxer() string { + if x != nil { + return x.Sandboxer + } + return "" +} + +type ControllerPlatformResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Platform *types.Platform `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` +} + +func (x *ControllerPlatformResponse) Reset() { + *x = ControllerPlatformResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerPlatformResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerPlatformResponse) ProtoMessage() {} + +func (x *ControllerPlatformResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerPlatformResponse.ProtoReflect.Descriptor instead. +func (*ControllerPlatformResponse) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{15} +} + +func (x *ControllerPlatformResponse) GetPlatform() *types.Platform { + if x != nil { + return x.Platform + } + return nil +} + +type ControllerStopRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` TimeoutSecs uint32 `protobuf:"varint,2,opt,name=timeout_secs,json=timeoutSecs,proto3" json:"timeout_secs,omitempty"` + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` } -func (x *ControllerShutdownRequest) Reset() { - *x = ControllerShutdownRequest{} +func (x *ControllerStopRequest) Reset() { + *x = ControllerStopRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[12] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ControllerShutdownRequest) String() string { +func (x *ControllerStopRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ControllerShutdownRequest) ProtoMessage() {} +func (*ControllerStopRequest) ProtoMessage() {} -func (x *ControllerShutdownRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[12] +func (x *ControllerStopRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -669,48 +941,55 @@ func (x *ControllerShutdownRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ControllerShutdownRequest.ProtoReflect.Descriptor instead. -func (*ControllerShutdownRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{12} +// Deprecated: Use ControllerStopRequest.ProtoReflect.Descriptor instead. +func (*ControllerStopRequest) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{16} } -func (x *ControllerShutdownRequest) GetSandboxID() string { +func (x *ControllerStopRequest) GetSandboxID() string { if x != nil { return x.SandboxID } return "" } -func (x *ControllerShutdownRequest) GetTimeoutSecs() uint32 { +func (x *ControllerStopRequest) GetTimeoutSecs() uint32 { if x != nil { return x.TimeoutSecs } return 0 } -type ControllerShutdownResponse struct { +func (x *ControllerStopRequest) GetSandboxer() string { + if x != nil { + return x.Sandboxer + } + return "" +} + +type ControllerStopResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *ControllerShutdownResponse) Reset() { - *x = ControllerShutdownResponse{} +func (x *ControllerStopResponse) Reset() { + *x = ControllerStopResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[13] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ControllerShutdownResponse) String() string { +func (x *ControllerStopResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ControllerShutdownResponse) ProtoMessage() {} +func (*ControllerStopResponse) ProtoMessage() {} -func (x *ControllerShutdownResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[13] +func (x *ControllerStopResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -721,9 +1000,9 @@ func (x *ControllerShutdownResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ControllerShutdownResponse.ProtoReflect.Descriptor instead. -func (*ControllerShutdownResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{13} +// Deprecated: Use ControllerStopResponse.ProtoReflect.Descriptor instead. +func (*ControllerStopResponse) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{17} } type ControllerWaitRequest struct { @@ -732,25 +1011,365 @@ type ControllerWaitRequest struct { unknownFields protoimpl.UnknownFields SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` } func (x *ControllerWaitRequest) Reset() { *x = ControllerWaitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[14] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerWaitRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerWaitRequest) ProtoMessage() {} + +func (x *ControllerWaitRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerWaitRequest.ProtoReflect.Descriptor instead. +func (*ControllerWaitRequest) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{18} +} + +func (x *ControllerWaitRequest) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +func (x *ControllerWaitRequest) GetSandboxer() string { + if x != nil { + return x.Sandboxer + } + return "" +} + +type ControllerWaitResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ExitStatus uint32 `protobuf:"varint,1,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"` + ExitedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` +} + +func (x *ControllerWaitResponse) Reset() { + *x = ControllerWaitResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerWaitResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerWaitResponse) ProtoMessage() {} + +func (x *ControllerWaitResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerWaitResponse.ProtoReflect.Descriptor instead. +func (*ControllerWaitResponse) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{19} +} + +func (x *ControllerWaitResponse) GetExitStatus() uint32 { + if x != nil { + return x.ExitStatus + } + return 0 +} + +func (x *ControllerWaitResponse) GetExitedAt() *timestamppb.Timestamp { + if x != nil { + return x.ExitedAt + } + return nil +} + +type ControllerStatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Verbose bool `protobuf:"varint,2,opt,name=verbose,proto3" json:"verbose,omitempty"` + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` +} + +func (x *ControllerStatusRequest) Reset() { + *x = ControllerStatusRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerStatusRequest) ProtoMessage() {} + +func (x *ControllerStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerStatusRequest.ProtoReflect.Descriptor instead. +func (*ControllerStatusRequest) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{20} +} + +func (x *ControllerStatusRequest) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +func (x *ControllerStatusRequest) GetVerbose() bool { + if x != nil { + return x.Verbose + } + return false +} + +func (x *ControllerStatusRequest) GetSandboxer() string { + if x != nil { + return x.Sandboxer + } + return "" +} + +type ControllerStatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` + State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + Info map[string]string `protobuf:"bytes,4,rep,name=info,proto3" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + ExitedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` + Extra *anypb.Any `protobuf:"bytes,7,opt,name=extra,proto3" json:"extra,omitempty"` + // Address of the sandbox for containerd to connect, + // for calling Task or other APIs serving in the sandbox. + // it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:. + Address string `protobuf:"bytes,8,opt,name=address,proto3" json:"address,omitempty"` + Version uint32 `protobuf:"varint,9,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *ControllerStatusResponse) Reset() { + *x = ControllerStatusResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerStatusResponse) ProtoMessage() {} + +func (x *ControllerStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerStatusResponse.ProtoReflect.Descriptor instead. +func (*ControllerStatusResponse) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{21} +} + +func (x *ControllerStatusResponse) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +func (x *ControllerStatusResponse) GetPid() uint32 { + if x != nil { + return x.Pid + } + return 0 +} + +func (x *ControllerStatusResponse) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *ControllerStatusResponse) GetInfo() map[string]string { + if x != nil { + return x.Info + } + return nil +} + +func (x *ControllerStatusResponse) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *ControllerStatusResponse) GetExitedAt() *timestamppb.Timestamp { + if x != nil { + return x.ExitedAt + } + return nil +} + +func (x *ControllerStatusResponse) GetExtra() *anypb.Any { + if x != nil { + return x.Extra + } + return nil +} + +func (x *ControllerStatusResponse) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *ControllerStatusResponse) GetVersion() uint32 { + if x != nil { + return x.Version + } + return 0 +} + +type ControllerShutdownRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` +} + +func (x *ControllerShutdownRequest) Reset() { + *x = ControllerShutdownRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ControllerShutdownRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerShutdownRequest) ProtoMessage() {} + +func (x *ControllerShutdownRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ControllerShutdownRequest.ProtoReflect.Descriptor instead. +func (*ControllerShutdownRequest) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{22} +} + +func (x *ControllerShutdownRequest) GetSandboxID() string { + if x != nil { + return x.SandboxID + } + return "" +} + +func (x *ControllerShutdownRequest) GetSandboxer() string { + if x != nil { + return x.Sandboxer + } + return "" +} + +type ControllerShutdownResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ControllerShutdownResponse) Reset() { + *x = ControllerShutdownResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ControllerWaitRequest) String() string { +func (x *ControllerShutdownResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ControllerWaitRequest) ProtoMessage() {} +func (*ControllerShutdownResponse) ProtoMessage() {} -func (x *ControllerWaitRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[14] +func (x *ControllerShutdownResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -761,44 +1380,37 @@ func (x *ControllerWaitRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ControllerWaitRequest.ProtoReflect.Descriptor instead. -func (*ControllerWaitRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{14} -} - -func (x *ControllerWaitRequest) GetSandboxID() string { - if x != nil { - return x.SandboxID - } - return "" +// Deprecated: Use ControllerShutdownResponse.ProtoReflect.Descriptor instead. +func (*ControllerShutdownResponse) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{23} } -type ControllerWaitResponse struct { +type ControllerMetricsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ExitStatus uint32 `protobuf:"varint,1,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"` - ExitedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` } -func (x *ControllerWaitResponse) Reset() { - *x = ControllerWaitResponse{} +func (x *ControllerMetricsRequest) Reset() { + *x = ControllerMetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[15] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ControllerWaitResponse) String() string { +func (x *ControllerMetricsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ControllerWaitResponse) ProtoMessage() {} +func (*ControllerMetricsRequest) ProtoMessage() {} -func (x *ControllerWaitResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[15] +func (x *ControllerMetricsRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -809,50 +1421,50 @@ func (x *ControllerWaitResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ControllerWaitResponse.ProtoReflect.Descriptor instead. -func (*ControllerWaitResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{15} +// Deprecated: Use ControllerMetricsRequest.ProtoReflect.Descriptor instead. +func (*ControllerMetricsRequest) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{24} } -func (x *ControllerWaitResponse) GetExitStatus() uint32 { +func (x *ControllerMetricsRequest) GetSandboxID() string { if x != nil { - return x.ExitStatus + return x.SandboxID } - return 0 + return "" } -func (x *ControllerWaitResponse) GetExitedAt() *timestamppb.Timestamp { +func (x *ControllerMetricsRequest) GetSandboxer() string { if x != nil { - return x.ExitedAt + return x.Sandboxer } - return nil + return "" } -type ControllerStatusRequest struct { +type ControllerMetricsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Metrics *types.Metric `protobuf:"bytes,1,opt,name=metrics,proto3" json:"metrics,omitempty"` } -func (x *ControllerStatusRequest) Reset() { - *x = ControllerStatusRequest{} +func (x *ControllerMetricsResponse) Reset() { + *x = ControllerMetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[16] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ControllerStatusRequest) String() string { +func (x *ControllerMetricsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ControllerStatusRequest) ProtoMessage() {} +func (*ControllerMetricsResponse) ProtoMessage() {} -func (x *ControllerStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[16] +func (x *ControllerMetricsResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -863,48 +1475,46 @@ func (x *ControllerStatusRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ControllerStatusRequest.ProtoReflect.Descriptor instead. -func (*ControllerStatusRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{16} +// Deprecated: Use ControllerMetricsResponse.ProtoReflect.Descriptor instead. +func (*ControllerMetricsResponse) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{25} } -func (x *ControllerStatusRequest) GetSandboxID() string { +func (x *ControllerMetricsResponse) GetMetrics() *types.Metric { if x != nil { - return x.SandboxID + return x.Metrics } - return "" + return nil } -type ControllerStatusResponse struct { +type ControllerUpdateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"` - State string `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` - ExitStatus uint32 `protobuf:"varint,4,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"` - ExitedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=exited_at,json=exitedAt,proto3" json:"exited_at,omitempty"` - Extra *anypb.Any `protobuf:"bytes,6,opt,name=extra,proto3" json:"extra,omitempty"` + SandboxID string `protobuf:"bytes,1,opt,name=sandbox_id,json=sandboxId,proto3" json:"sandbox_id,omitempty"` + Sandboxer string `protobuf:"bytes,2,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` + Sandbox *types.Sandbox `protobuf:"bytes,3,opt,name=sandbox,proto3" json:"sandbox,omitempty"` + Fields []string `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty"` } -func (x *ControllerStatusResponse) Reset() { - *x = ControllerStatusResponse{} +func (x *ControllerUpdateRequest) Reset() { + *x = ControllerUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[17] + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ControllerStatusResponse) String() string { +func (x *ControllerUpdateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ControllerStatusResponse) ProtoMessage() {} +func (*ControllerUpdateRequest) ProtoMessage() {} -func (x *ControllerStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[17] +func (x *ControllerUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -915,201 +1525,335 @@ func (x *ControllerStatusResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ControllerStatusResponse.ProtoReflect.Descriptor instead. -func (*ControllerStatusResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{17} +// Deprecated: Use ControllerUpdateRequest.ProtoReflect.Descriptor instead. +func (*ControllerUpdateRequest) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{26} } -func (x *ControllerStatusResponse) GetID() string { +func (x *ControllerUpdateRequest) GetSandboxID() string { if x != nil { - return x.ID + return x.SandboxID } return "" } -func (x *ControllerStatusResponse) GetPid() uint32 { +func (x *ControllerUpdateRequest) GetSandboxer() string { if x != nil { - return x.Pid + return x.Sandboxer } - return 0 + return "" } -func (x *ControllerStatusResponse) GetState() string { +func (x *ControllerUpdateRequest) GetSandbox() *types.Sandbox { if x != nil { - return x.State + return x.Sandbox } - return "" + return nil } -func (x *ControllerStatusResponse) GetExitStatus() uint32 { +func (x *ControllerUpdateRequest) GetFields() []string { if x != nil { - return x.ExitStatus + return x.Fields } - return 0 + return nil } -func (x *ControllerStatusResponse) GetExitedAt() *timestamppb.Timestamp { - if x != nil { - return x.ExitedAt +type ControllerUpdateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ControllerUpdateResponse) Reset() { + *x = ControllerUpdateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *ControllerStatusResponse) GetExtra() *anypb.Any { - if x != nil { - return x.Extra +func (x *ControllerUpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ControllerUpdateResponse) ProtoMessage() {} + +func (x *ControllerUpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_services_sandbox_v1_sandbox_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -var File_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto protoreflect.FileDescriptor +// Deprecated: Use ControllerUpdateResponse.ProtoReflect.Descriptor instead. +func (*ControllerUpdateResponse) Descriptor() ([]byte, []int) { + return file_services_sandbox_v1_sandbox_proto_rawDescGZIP(), []int{27} +} -var file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDesc = []byte{ - 0x0a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x49, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, - 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x22, 0x4a, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, +var File_services_sandbox_v1_sandbox_proto protoreflect.FileDescriptor + +var file_services_sandbox_v1_sandbox_proto_rawDesc = []byte{ + 0x0a, 0x21, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x13, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x49, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x22, 0x61, 0x0a, - 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, 0x01, + 0x64, 0x62, 0x6f, 0x78, 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x22, 0x4a, 0x0a, + 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x22, 0x61, 0x0a, 0x12, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x07, 0x73, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x4a, 0x0a, 0x13, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, - 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x22, 0x4a, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x22, 0x33, 0x0a, 0x12, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, - 0x64, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x42, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x6c, - 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x30, 0x0a, 0x0f, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x22, 0x33, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x15, 0x0a, + 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x73, 0x22, 0x42, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x30, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x22, 0xb7, 0x03, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x10, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x07, 0x73, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x22, 0x98, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x06, + 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x12, 0x2e, 0x0a, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x50, 0x61, 0x74, 0x68, 0x12, 0x6a, 0x0a, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x48, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x1a, 0x3e, 0x0a, 0x10, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x39, 0x0a, 0x18, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, - 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, - 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x4a, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x5d, 0x0a, 0x19, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, + 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x22, 0xd1, 0x02, + 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x0a, 0x15, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, - 0x64, 0x22, 0x72, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, - 0x61, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, - 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, - 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x38, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x22, - 0xd8, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x5b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x58, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x22, 0x54, 0x0a, 0x1a, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x22, 0x77, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, + 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x22, 0x18, 0x0a, 0x16, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x22, 0x72, 0x0a, 0x16, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2a, - 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x32, 0xb7, 0x04, 0x0a, 0x05, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x70, + 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x62, + 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x65, 0x72, 0x62, 0x6f, + 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, + 0x22, 0xc6, 0x03, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x56, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x66, + 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x1a, 0x37, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x58, 0x0a, 0x19, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x65, 0x72, 0x22, 0x1c, 0x0a, 0x1a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x57, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x72, 0x22, 0x4f, 0x0a, 0x19, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x17, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x52, 0x07, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb7, 0x04, + 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x06, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x03, 0x47, 0x65, - 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xfe, 0x03, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x36, 0x2e, 0x63, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6b, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, + 0x03, 0x47, 0x65, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xf3, 0x08, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, @@ -1117,51 +1861,82 @@ var file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_ 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, - 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, + 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, + 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x75, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x75, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, + 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x6c, 0x65, 0x72, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x7b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, + 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, + 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x7e, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x76, - 0x31, 0x3b, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x7b, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x42, 0x5a, + 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescData = file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDesc + file_services_sandbox_v1_sandbox_proto_rawDescOnce sync.Once + file_services_sandbox_v1_sandbox_proto_rawDescData = file_services_sandbox_v1_sandbox_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescData) +func file_services_sandbox_v1_sandbox_proto_rawDescGZIP() []byte { + file_services_sandbox_v1_sandbox_proto_rawDescOnce.Do(func() { + file_services_sandbox_v1_sandbox_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_sandbox_v1_sandbox_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDescData + return file_services_sandbox_v1_sandbox_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes = make([]protoimpl.MessageInfo, 18) -var file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_goTypes = []interface{}{ +var file_services_sandbox_v1_sandbox_proto_msgTypes = make([]protoimpl.MessageInfo, 31) +var file_services_sandbox_v1_sandbox_proto_goTypes = []interface{}{ (*StoreCreateRequest)(nil), // 0: containerd.services.sandbox.v1.StoreCreateRequest (*StoreCreateResponse)(nil), // 1: containerd.services.sandbox.v1.StoreCreateResponse (*StoreUpdateRequest)(nil), // 2: containerd.services.sandbox.v1.StoreUpdateRequest @@ -1172,63 +1947,97 @@ var file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_ (*StoreListResponse)(nil), // 7: containerd.services.sandbox.v1.StoreListResponse (*StoreGetRequest)(nil), // 8: containerd.services.sandbox.v1.StoreGetRequest (*StoreGetResponse)(nil), // 9: containerd.services.sandbox.v1.StoreGetResponse - (*ControllerStartRequest)(nil), // 10: containerd.services.sandbox.v1.ControllerStartRequest - (*ControllerStartResponse)(nil), // 11: containerd.services.sandbox.v1.ControllerStartResponse - (*ControllerShutdownRequest)(nil), // 12: containerd.services.sandbox.v1.ControllerShutdownRequest - (*ControllerShutdownResponse)(nil), // 13: containerd.services.sandbox.v1.ControllerShutdownResponse - (*ControllerWaitRequest)(nil), // 14: containerd.services.sandbox.v1.ControllerWaitRequest - (*ControllerWaitResponse)(nil), // 15: containerd.services.sandbox.v1.ControllerWaitResponse - (*ControllerStatusRequest)(nil), // 16: containerd.services.sandbox.v1.ControllerStatusRequest - (*ControllerStatusResponse)(nil), // 17: containerd.services.sandbox.v1.ControllerStatusResponse - (*types.Sandbox)(nil), // 18: containerd.types.Sandbox - (*types.Mount)(nil), // 19: containerd.types.Mount - (*anypb.Any)(nil), // 20: google.protobuf.Any - (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp -} -var file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_depIdxs = []int32{ - 18, // 0: containerd.services.sandbox.v1.StoreCreateRequest.sandbox:type_name -> containerd.types.Sandbox - 18, // 1: containerd.services.sandbox.v1.StoreCreateResponse.sandbox:type_name -> containerd.types.Sandbox - 18, // 2: containerd.services.sandbox.v1.StoreUpdateRequest.sandbox:type_name -> containerd.types.Sandbox - 18, // 3: containerd.services.sandbox.v1.StoreUpdateResponse.sandbox:type_name -> containerd.types.Sandbox - 18, // 4: containerd.services.sandbox.v1.StoreListResponse.list:type_name -> containerd.types.Sandbox - 18, // 5: containerd.services.sandbox.v1.StoreGetResponse.sandbox:type_name -> containerd.types.Sandbox - 19, // 6: containerd.services.sandbox.v1.ControllerStartRequest.rootfs:type_name -> containerd.types.Mount - 20, // 7: containerd.services.sandbox.v1.ControllerStartRequest.options:type_name -> google.protobuf.Any - 21, // 8: containerd.services.sandbox.v1.ControllerWaitResponse.exited_at:type_name -> google.protobuf.Timestamp - 21, // 9: containerd.services.sandbox.v1.ControllerStatusResponse.exited_at:type_name -> google.protobuf.Timestamp - 20, // 10: containerd.services.sandbox.v1.ControllerStatusResponse.extra:type_name -> google.protobuf.Any - 0, // 11: containerd.services.sandbox.v1.Store.Create:input_type -> containerd.services.sandbox.v1.StoreCreateRequest - 2, // 12: containerd.services.sandbox.v1.Store.Update:input_type -> containerd.services.sandbox.v1.StoreUpdateRequest - 4, // 13: containerd.services.sandbox.v1.Store.Delete:input_type -> containerd.services.sandbox.v1.StoreDeleteRequest - 6, // 14: containerd.services.sandbox.v1.Store.List:input_type -> containerd.services.sandbox.v1.StoreListRequest - 8, // 15: containerd.services.sandbox.v1.Store.Get:input_type -> containerd.services.sandbox.v1.StoreGetRequest - 10, // 16: containerd.services.sandbox.v1.Controller.Start:input_type -> containerd.services.sandbox.v1.ControllerStartRequest - 12, // 17: containerd.services.sandbox.v1.Controller.Shutdown:input_type -> containerd.services.sandbox.v1.ControllerShutdownRequest - 14, // 18: containerd.services.sandbox.v1.Controller.Wait:input_type -> containerd.services.sandbox.v1.ControllerWaitRequest - 16, // 19: containerd.services.sandbox.v1.Controller.Status:input_type -> containerd.services.sandbox.v1.ControllerStatusRequest - 1, // 20: containerd.services.sandbox.v1.Store.Create:output_type -> containerd.services.sandbox.v1.StoreCreateResponse - 3, // 21: containerd.services.sandbox.v1.Store.Update:output_type -> containerd.services.sandbox.v1.StoreUpdateResponse - 5, // 22: containerd.services.sandbox.v1.Store.Delete:output_type -> containerd.services.sandbox.v1.StoreDeleteResponse - 7, // 23: containerd.services.sandbox.v1.Store.List:output_type -> containerd.services.sandbox.v1.StoreListResponse - 9, // 24: containerd.services.sandbox.v1.Store.Get:output_type -> containerd.services.sandbox.v1.StoreGetResponse - 11, // 25: containerd.services.sandbox.v1.Controller.Start:output_type -> containerd.services.sandbox.v1.ControllerStartResponse - 13, // 26: containerd.services.sandbox.v1.Controller.Shutdown:output_type -> containerd.services.sandbox.v1.ControllerShutdownResponse - 15, // 27: containerd.services.sandbox.v1.Controller.Wait:output_type -> containerd.services.sandbox.v1.ControllerWaitResponse - 17, // 28: containerd.services.sandbox.v1.Controller.Status:output_type -> containerd.services.sandbox.v1.ControllerStatusResponse - 20, // [20:29] is the sub-list for method output_type - 11, // [11:20] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name -} - -func init() { file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_init() } -func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_init() { - if File_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto != nil { + (*ControllerCreateRequest)(nil), // 10: containerd.services.sandbox.v1.ControllerCreateRequest + (*ControllerCreateResponse)(nil), // 11: containerd.services.sandbox.v1.ControllerCreateResponse + (*ControllerStartRequest)(nil), // 12: containerd.services.sandbox.v1.ControllerStartRequest + (*ControllerStartResponse)(nil), // 13: containerd.services.sandbox.v1.ControllerStartResponse + (*ControllerPlatformRequest)(nil), // 14: containerd.services.sandbox.v1.ControllerPlatformRequest + (*ControllerPlatformResponse)(nil), // 15: containerd.services.sandbox.v1.ControllerPlatformResponse + (*ControllerStopRequest)(nil), // 16: containerd.services.sandbox.v1.ControllerStopRequest + (*ControllerStopResponse)(nil), // 17: containerd.services.sandbox.v1.ControllerStopResponse + (*ControllerWaitRequest)(nil), // 18: containerd.services.sandbox.v1.ControllerWaitRequest + (*ControllerWaitResponse)(nil), // 19: containerd.services.sandbox.v1.ControllerWaitResponse + (*ControllerStatusRequest)(nil), // 20: containerd.services.sandbox.v1.ControllerStatusRequest + (*ControllerStatusResponse)(nil), // 21: containerd.services.sandbox.v1.ControllerStatusResponse + (*ControllerShutdownRequest)(nil), // 22: containerd.services.sandbox.v1.ControllerShutdownRequest + (*ControllerShutdownResponse)(nil), // 23: containerd.services.sandbox.v1.ControllerShutdownResponse + (*ControllerMetricsRequest)(nil), // 24: containerd.services.sandbox.v1.ControllerMetricsRequest + (*ControllerMetricsResponse)(nil), // 25: containerd.services.sandbox.v1.ControllerMetricsResponse + (*ControllerUpdateRequest)(nil), // 26: containerd.services.sandbox.v1.ControllerUpdateRequest + (*ControllerUpdateResponse)(nil), // 27: containerd.services.sandbox.v1.ControllerUpdateResponse + nil, // 28: containerd.services.sandbox.v1.ControllerCreateRequest.AnnotationsEntry + nil, // 29: containerd.services.sandbox.v1.ControllerStartResponse.LabelsEntry + nil, // 30: containerd.services.sandbox.v1.ControllerStatusResponse.InfoEntry + (*types.Sandbox)(nil), // 31: containerd.types.Sandbox + (*types.Mount)(nil), // 32: containerd.types.Mount + (*anypb.Any)(nil), // 33: google.protobuf.Any + (*timestamppb.Timestamp)(nil), // 34: google.protobuf.Timestamp + (*types.Platform)(nil), // 35: containerd.types.Platform + (*types.Metric)(nil), // 36: containerd.types.Metric +} +var file_services_sandbox_v1_sandbox_proto_depIdxs = []int32{ + 31, // 0: containerd.services.sandbox.v1.StoreCreateRequest.sandbox:type_name -> containerd.types.Sandbox + 31, // 1: containerd.services.sandbox.v1.StoreCreateResponse.sandbox:type_name -> containerd.types.Sandbox + 31, // 2: containerd.services.sandbox.v1.StoreUpdateRequest.sandbox:type_name -> containerd.types.Sandbox + 31, // 3: containerd.services.sandbox.v1.StoreUpdateResponse.sandbox:type_name -> containerd.types.Sandbox + 31, // 4: containerd.services.sandbox.v1.StoreListResponse.list:type_name -> containerd.types.Sandbox + 31, // 5: containerd.services.sandbox.v1.StoreGetResponse.sandbox:type_name -> containerd.types.Sandbox + 32, // 6: containerd.services.sandbox.v1.ControllerCreateRequest.rootfs:type_name -> containerd.types.Mount + 33, // 7: containerd.services.sandbox.v1.ControllerCreateRequest.options:type_name -> google.protobuf.Any + 28, // 8: containerd.services.sandbox.v1.ControllerCreateRequest.annotations:type_name -> containerd.services.sandbox.v1.ControllerCreateRequest.AnnotationsEntry + 31, // 9: containerd.services.sandbox.v1.ControllerCreateRequest.sandbox:type_name -> containerd.types.Sandbox + 34, // 10: containerd.services.sandbox.v1.ControllerStartResponse.created_at:type_name -> google.protobuf.Timestamp + 29, // 11: containerd.services.sandbox.v1.ControllerStartResponse.labels:type_name -> containerd.services.sandbox.v1.ControllerStartResponse.LabelsEntry + 35, // 12: containerd.services.sandbox.v1.ControllerPlatformResponse.platform:type_name -> containerd.types.Platform + 34, // 13: containerd.services.sandbox.v1.ControllerWaitResponse.exited_at:type_name -> google.protobuf.Timestamp + 30, // 14: containerd.services.sandbox.v1.ControllerStatusResponse.info:type_name -> containerd.services.sandbox.v1.ControllerStatusResponse.InfoEntry + 34, // 15: containerd.services.sandbox.v1.ControllerStatusResponse.created_at:type_name -> google.protobuf.Timestamp + 34, // 16: containerd.services.sandbox.v1.ControllerStatusResponse.exited_at:type_name -> google.protobuf.Timestamp + 33, // 17: containerd.services.sandbox.v1.ControllerStatusResponse.extra:type_name -> google.protobuf.Any + 36, // 18: containerd.services.sandbox.v1.ControllerMetricsResponse.metrics:type_name -> containerd.types.Metric + 31, // 19: containerd.services.sandbox.v1.ControllerUpdateRequest.sandbox:type_name -> containerd.types.Sandbox + 0, // 20: containerd.services.sandbox.v1.Store.Create:input_type -> containerd.services.sandbox.v1.StoreCreateRequest + 2, // 21: containerd.services.sandbox.v1.Store.Update:input_type -> containerd.services.sandbox.v1.StoreUpdateRequest + 4, // 22: containerd.services.sandbox.v1.Store.Delete:input_type -> containerd.services.sandbox.v1.StoreDeleteRequest + 6, // 23: containerd.services.sandbox.v1.Store.List:input_type -> containerd.services.sandbox.v1.StoreListRequest + 8, // 24: containerd.services.sandbox.v1.Store.Get:input_type -> containerd.services.sandbox.v1.StoreGetRequest + 10, // 25: containerd.services.sandbox.v1.Controller.Create:input_type -> containerd.services.sandbox.v1.ControllerCreateRequest + 12, // 26: containerd.services.sandbox.v1.Controller.Start:input_type -> containerd.services.sandbox.v1.ControllerStartRequest + 14, // 27: containerd.services.sandbox.v1.Controller.Platform:input_type -> containerd.services.sandbox.v1.ControllerPlatformRequest + 16, // 28: containerd.services.sandbox.v1.Controller.Stop:input_type -> containerd.services.sandbox.v1.ControllerStopRequest + 18, // 29: containerd.services.sandbox.v1.Controller.Wait:input_type -> containerd.services.sandbox.v1.ControllerWaitRequest + 20, // 30: containerd.services.sandbox.v1.Controller.Status:input_type -> containerd.services.sandbox.v1.ControllerStatusRequest + 22, // 31: containerd.services.sandbox.v1.Controller.Shutdown:input_type -> containerd.services.sandbox.v1.ControllerShutdownRequest + 24, // 32: containerd.services.sandbox.v1.Controller.Metrics:input_type -> containerd.services.sandbox.v1.ControllerMetricsRequest + 26, // 33: containerd.services.sandbox.v1.Controller.Update:input_type -> containerd.services.sandbox.v1.ControllerUpdateRequest + 1, // 34: containerd.services.sandbox.v1.Store.Create:output_type -> containerd.services.sandbox.v1.StoreCreateResponse + 3, // 35: containerd.services.sandbox.v1.Store.Update:output_type -> containerd.services.sandbox.v1.StoreUpdateResponse + 5, // 36: containerd.services.sandbox.v1.Store.Delete:output_type -> containerd.services.sandbox.v1.StoreDeleteResponse + 7, // 37: containerd.services.sandbox.v1.Store.List:output_type -> containerd.services.sandbox.v1.StoreListResponse + 9, // 38: containerd.services.sandbox.v1.Store.Get:output_type -> containerd.services.sandbox.v1.StoreGetResponse + 11, // 39: containerd.services.sandbox.v1.Controller.Create:output_type -> containerd.services.sandbox.v1.ControllerCreateResponse + 13, // 40: containerd.services.sandbox.v1.Controller.Start:output_type -> containerd.services.sandbox.v1.ControllerStartResponse + 15, // 41: containerd.services.sandbox.v1.Controller.Platform:output_type -> containerd.services.sandbox.v1.ControllerPlatformResponse + 17, // 42: containerd.services.sandbox.v1.Controller.Stop:output_type -> containerd.services.sandbox.v1.ControllerStopResponse + 19, // 43: containerd.services.sandbox.v1.Controller.Wait:output_type -> containerd.services.sandbox.v1.ControllerWaitResponse + 21, // 44: containerd.services.sandbox.v1.Controller.Status:output_type -> containerd.services.sandbox.v1.ControllerStatusResponse + 23, // 45: containerd.services.sandbox.v1.Controller.Shutdown:output_type -> containerd.services.sandbox.v1.ControllerShutdownResponse + 25, // 46: containerd.services.sandbox.v1.Controller.Metrics:output_type -> containerd.services.sandbox.v1.ControllerMetricsResponse + 27, // 47: containerd.services.sandbox.v1.Controller.Update:output_type -> containerd.services.sandbox.v1.ControllerUpdateResponse + 34, // [34:48] is the sub-list for method output_type + 20, // [20:34] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name +} + +func init() { file_services_sandbox_v1_sandbox_proto_init() } +func file_services_sandbox_v1_sandbox_proto_init() { + if File_services_sandbox_v1_sandbox_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreCreateRequest); i { case 0: return &v.state @@ -1240,7 +2049,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreCreateResponse); i { case 0: return &v.state @@ -1252,7 +2061,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreUpdateRequest); i { case 0: return &v.state @@ -1264,7 +2073,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreUpdateResponse); i { case 0: return &v.state @@ -1276,7 +2085,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreDeleteRequest); i { case 0: return &v.state @@ -1288,7 +2097,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreDeleteResponse); i { case 0: return &v.state @@ -1300,7 +2109,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreListRequest); i { case 0: return &v.state @@ -1312,7 +2121,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreListResponse); i { case 0: return &v.state @@ -1324,7 +2133,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreGetRequest); i { case 0: return &v.state @@ -1336,7 +2145,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StoreGetResponse); i { case 0: return &v.state @@ -1348,7 +2157,31 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerCreateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerCreateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControllerStartRequest); i { case 0: return &v.state @@ -1360,7 +2193,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControllerStartResponse); i { case 0: return &v.state @@ -1372,8 +2205,8 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ControllerShutdownRequest); i { + file_services_sandbox_v1_sandbox_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerPlatformRequest); i { case 0: return &v.state case 1: @@ -1384,8 +2217,32 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ControllerShutdownResponse); i { + file_services_sandbox_v1_sandbox_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerPlatformResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerStopRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerStopResponse); i { case 0: return &v.state case 1: @@ -1396,7 +2253,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControllerWaitRequest); i { case 0: return &v.state @@ -1408,7 +2265,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControllerWaitResponse); i { case 0: return &v.state @@ -1420,7 +2277,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControllerStatusRequest); i { case 0: return &v.state @@ -1432,7 +2289,7 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_services_sandbox_v1_sandbox_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControllerStatusResponse); i { case 0: return &v.state @@ -1444,23 +2301,95 @@ func file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto return nil } } + file_services_sandbox_v1_sandbox_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerShutdownRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerShutdownResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerMetricsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerMetricsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_sandbox_v1_sandbox_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ControllerUpdateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDesc, + RawDescriptor: file_services_sandbox_v1_sandbox_proto_rawDesc, NumEnums: 0, - NumMessages: 18, + NumMessages: 31, NumExtensions: 0, NumServices: 2, }, - GoTypes: file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_msgTypes, + GoTypes: file_services_sandbox_v1_sandbox_proto_goTypes, + DependencyIndexes: file_services_sandbox_v1_sandbox_proto_depIdxs, + MessageInfos: file_services_sandbox_v1_sandbox_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto = out.File - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_sandbox_v1_sandbox_proto_depIdxs = nil + File_services_sandbox_v1_sandbox_proto = out.File + file_services_sandbox_v1_sandbox_proto_rawDesc = nil + file_services_sandbox_v1_sandbox_proto_goTypes = nil + file_services_sandbox_v1_sandbox_proto_depIdxs = nil } diff --git a/api/services/sandbox/v1/sandbox.proto b/api/services/sandbox/v1/sandbox.proto old mode 100644 new mode 100755 index bd1bdec37b57..fcbf5053cc8e --- a/api/services/sandbox/v1/sandbox.proto +++ b/api/services/sandbox/v1/sandbox.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -27,9 +27,10 @@ package containerd.services.sandbox.v1; import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; - -import "github.com/containerd/containerd/api/types/sandbox.proto"; -import "github.com/containerd/containerd/api/types/mount.proto"; +import "types/metrics.proto"; +import "types/mount.proto"; +import "types/platform.proto"; +import "types/sandbox.proto"; option go_package = "github.com/containerd/containerd/api/services/sandbox/v1;sandbox"; @@ -37,96 +38,165 @@ option go_package = "github.com/containerd/containerd/api/services/sandbox/v1;sa // sandbox object includes info required to start a new instance, but no runtime state. // When running a new sandbox instance, store objects are used as base type to create from. service Store { - rpc Create(StoreCreateRequest) returns (StoreCreateResponse); - rpc Update(StoreUpdateRequest) returns (StoreUpdateResponse); - rpc Delete(StoreDeleteRequest) returns (StoreDeleteResponse); - rpc List(StoreListRequest) returns (StoreListResponse); - rpc Get(StoreGetRequest) returns (StoreGetResponse); + rpc Create(StoreCreateRequest) returns (StoreCreateResponse); + rpc Update(StoreUpdateRequest) returns (StoreUpdateResponse); + rpc Delete(StoreDeleteRequest) returns (StoreDeleteResponse); + rpc List(StoreListRequest) returns (StoreListResponse); + rpc Get(StoreGetRequest) returns (StoreGetResponse); } message StoreCreateRequest { - containerd.types.Sandbox sandbox = 1; + containerd.types.Sandbox sandbox = 1; } message StoreCreateResponse { - containerd.types.Sandbox sandbox = 1; + containerd.types.Sandbox sandbox = 1; } message StoreUpdateRequest { - containerd.types.Sandbox sandbox = 1; - repeated string fields = 2; + containerd.types.Sandbox sandbox = 1; + repeated string fields = 2; } message StoreUpdateResponse { - containerd.types.Sandbox sandbox = 1; + containerd.types.Sandbox sandbox = 1; } message StoreDeleteRequest { - string sandbox_id = 1; + string sandbox_id = 1; } message StoreDeleteResponse {} message StoreListRequest { - repeated string filters = 1; + repeated string filters = 1; } message StoreListResponse { - repeated containerd.types.Sandbox list = 1; + repeated containerd.types.Sandbox list = 1; } message StoreGetRequest { - string sandbox_id = 1; + string sandbox_id = 1; } message StoreGetResponse { - containerd.types.Sandbox sandbox = 1; + containerd.types.Sandbox sandbox = 1; } // Controller is an interface to manage runtime sandbox instances. service Controller { - rpc Start(ControllerStartRequest) returns (ControllerStartResponse); - rpc Shutdown(ControllerShutdownRequest) returns (ControllerShutdownResponse); - rpc Wait(ControllerWaitRequest) returns (ControllerWaitResponse); - rpc Status(ControllerStatusRequest) returns (ControllerStatusResponse); + rpc Create(ControllerCreateRequest) returns (ControllerCreateResponse); + rpc Start(ControllerStartRequest) returns (ControllerStartResponse); + rpc Platform(ControllerPlatformRequest) returns (ControllerPlatformResponse); + rpc Stop(ControllerStopRequest) returns (ControllerStopResponse); + rpc Wait(ControllerWaitRequest) returns (ControllerWaitResponse); + rpc Status(ControllerStatusRequest) returns (ControllerStatusResponse); + rpc Shutdown(ControllerShutdownRequest) returns (ControllerShutdownResponse); + rpc Metrics(ControllerMetricsRequest) returns (ControllerMetricsResponse); + rpc Update(ControllerUpdateRequest) returns (ControllerUpdateResponse); +} + +message ControllerCreateRequest { + string sandbox_id = 1; + repeated containerd.types.Mount rootfs = 2; + google.protobuf.Any options = 3; + string netns_path = 4; + map annotations = 5; + containerd.types.Sandbox sandbox = 6; + string sandboxer = 10; +} + +message ControllerCreateResponse { + string sandbox_id = 1; } message ControllerStartRequest { - string sandbox_id = 1; - repeated containerd.types.Mount rootfs = 2; - google.protobuf.Any options = 3; + string sandbox_id = 1; + string sandboxer = 10; } message ControllerStartResponse { - string sandbox_id = 1; - uint32 pid = 2; + string sandbox_id = 1; + uint32 pid = 2; + google.protobuf.Timestamp created_at = 3; + map labels = 4; + // Address of the sandbox for containerd to connect, + // for calling Task or other APIs serving in the sandbox. + // it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:. + string address = 5; + uint32 version = 6; } -message ControllerShutdownRequest { - string sandbox_id = 1; - uint32 timeout_secs = 2; +message ControllerPlatformRequest { + string sandbox_id = 1; + string sandboxer = 10; } -message ControllerShutdownResponse {} +message ControllerPlatformResponse { + containerd.types.Platform platform = 1; +} + +message ControllerStopRequest { + string sandbox_id = 1; + uint32 timeout_secs = 2; + string sandboxer = 10; +} + +message ControllerStopResponse {} message ControllerWaitRequest { - string sandbox_id = 1; + string sandbox_id = 1; + string sandboxer = 10; } message ControllerWaitResponse { - uint32 exit_status = 1; - google.protobuf.Timestamp exited_at = 2; + uint32 exit_status = 1; + google.protobuf.Timestamp exited_at = 2; } message ControllerStatusRequest { - string sandbox_id = 1; + string sandbox_id = 1; + bool verbose = 2; + string sandboxer = 10; } message ControllerStatusResponse { - string id = 1; - uint32 pid = 2; - string state = 3; - uint32 exit_status = 4; - google.protobuf.Timestamp exited_at = 5; - google.protobuf.Any extra = 6; + string sandbox_id = 1; + uint32 pid = 2; + string state = 3; + map info = 4; + google.protobuf.Timestamp created_at = 5; + google.protobuf.Timestamp exited_at = 6; + google.protobuf.Any extra = 7; + // Address of the sandbox for containerd to connect, + // for calling Task or other APIs serving in the sandbox. + // it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:. + string address = 8; + uint32 version = 9; } + +message ControllerShutdownRequest { + string sandbox_id = 1; + string sandboxer = 10; +} + +message ControllerShutdownResponse {} + +message ControllerMetricsRequest { + string sandbox_id = 1; + string sandboxer = 10; +} + +message ControllerMetricsResponse { + types.Metric metrics = 1; +} + +message ControllerUpdateRequest { + string sandbox_id = 1; + string sandboxer = 2; + containerd.types.Sandbox sandbox = 3; + repeated string fields = 4; +} + +message ControllerUpdateResponse {} diff --git a/api/services/sandbox/v1/sandbox_grpc.pb.go b/api/services/sandbox/v1/sandbox_grpc.pb.go index 844f038adc4e..7e0c63576313 100644 --- a/api/services/sandbox/v1/sandbox_grpc.pb.go +++ b/api/services/sandbox/v1/sandbox_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/sandbox/v1/sandbox.proto +// - protoc (unknown) +// source: services/sandbox/v1/sandbox.proto package sandbox @@ -245,17 +247,22 @@ var Store_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/sandbox/v1/sandbox.proto", + Metadata: "services/sandbox/v1/sandbox.proto", } // ControllerClient is the client API for Controller service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type ControllerClient interface { + Create(ctx context.Context, in *ControllerCreateRequest, opts ...grpc.CallOption) (*ControllerCreateResponse, error) Start(ctx context.Context, in *ControllerStartRequest, opts ...grpc.CallOption) (*ControllerStartResponse, error) - Shutdown(ctx context.Context, in *ControllerShutdownRequest, opts ...grpc.CallOption) (*ControllerShutdownResponse, error) + Platform(ctx context.Context, in *ControllerPlatformRequest, opts ...grpc.CallOption) (*ControllerPlatformResponse, error) + Stop(ctx context.Context, in *ControllerStopRequest, opts ...grpc.CallOption) (*ControllerStopResponse, error) Wait(ctx context.Context, in *ControllerWaitRequest, opts ...grpc.CallOption) (*ControllerWaitResponse, error) Status(ctx context.Context, in *ControllerStatusRequest, opts ...grpc.CallOption) (*ControllerStatusResponse, error) + Shutdown(ctx context.Context, in *ControllerShutdownRequest, opts ...grpc.CallOption) (*ControllerShutdownResponse, error) + Metrics(ctx context.Context, in *ControllerMetricsRequest, opts ...grpc.CallOption) (*ControllerMetricsResponse, error) + Update(ctx context.Context, in *ControllerUpdateRequest, opts ...grpc.CallOption) (*ControllerUpdateResponse, error) } type controllerClient struct { @@ -266,6 +273,15 @@ func NewControllerClient(cc grpc.ClientConnInterface) ControllerClient { return &controllerClient{cc} } +func (c *controllerClient) Create(ctx context.Context, in *ControllerCreateRequest, opts ...grpc.CallOption) (*ControllerCreateResponse, error) { + out := new(ControllerCreateResponse) + err := c.cc.Invoke(ctx, "/containerd.services.sandbox.v1.Controller/Create", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *controllerClient) Start(ctx context.Context, in *ControllerStartRequest, opts ...grpc.CallOption) (*ControllerStartResponse, error) { out := new(ControllerStartResponse) err := c.cc.Invoke(ctx, "/containerd.services.sandbox.v1.Controller/Start", in, out, opts...) @@ -275,9 +291,18 @@ func (c *controllerClient) Start(ctx context.Context, in *ControllerStartRequest return out, nil } -func (c *controllerClient) Shutdown(ctx context.Context, in *ControllerShutdownRequest, opts ...grpc.CallOption) (*ControllerShutdownResponse, error) { - out := new(ControllerShutdownResponse) - err := c.cc.Invoke(ctx, "/containerd.services.sandbox.v1.Controller/Shutdown", in, out, opts...) +func (c *controllerClient) Platform(ctx context.Context, in *ControllerPlatformRequest, opts ...grpc.CallOption) (*ControllerPlatformResponse, error) { + out := new(ControllerPlatformResponse) + err := c.cc.Invoke(ctx, "/containerd.services.sandbox.v1.Controller/Platform", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) Stop(ctx context.Context, in *ControllerStopRequest, opts ...grpc.CallOption) (*ControllerStopResponse, error) { + out := new(ControllerStopResponse) + err := c.cc.Invoke(ctx, "/containerd.services.sandbox.v1.Controller/Stop", in, out, opts...) if err != nil { return nil, err } @@ -302,14 +327,46 @@ func (c *controllerClient) Status(ctx context.Context, in *ControllerStatusReque return out, nil } +func (c *controllerClient) Shutdown(ctx context.Context, in *ControllerShutdownRequest, opts ...grpc.CallOption) (*ControllerShutdownResponse, error) { + out := new(ControllerShutdownResponse) + err := c.cc.Invoke(ctx, "/containerd.services.sandbox.v1.Controller/Shutdown", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) Metrics(ctx context.Context, in *ControllerMetricsRequest, opts ...grpc.CallOption) (*ControllerMetricsResponse, error) { + out := new(ControllerMetricsResponse) + err := c.cc.Invoke(ctx, "/containerd.services.sandbox.v1.Controller/Metrics", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *controllerClient) Update(ctx context.Context, in *ControllerUpdateRequest, opts ...grpc.CallOption) (*ControllerUpdateResponse, error) { + out := new(ControllerUpdateResponse) + err := c.cc.Invoke(ctx, "/containerd.services.sandbox.v1.Controller/Update", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ControllerServer is the server API for Controller service. // All implementations must embed UnimplementedControllerServer // for forward compatibility type ControllerServer interface { + Create(context.Context, *ControllerCreateRequest) (*ControllerCreateResponse, error) Start(context.Context, *ControllerStartRequest) (*ControllerStartResponse, error) - Shutdown(context.Context, *ControllerShutdownRequest) (*ControllerShutdownResponse, error) + Platform(context.Context, *ControllerPlatformRequest) (*ControllerPlatformResponse, error) + Stop(context.Context, *ControllerStopRequest) (*ControllerStopResponse, error) Wait(context.Context, *ControllerWaitRequest) (*ControllerWaitResponse, error) Status(context.Context, *ControllerStatusRequest) (*ControllerStatusResponse, error) + Shutdown(context.Context, *ControllerShutdownRequest) (*ControllerShutdownResponse, error) + Metrics(context.Context, *ControllerMetricsRequest) (*ControllerMetricsResponse, error) + Update(context.Context, *ControllerUpdateRequest) (*ControllerUpdateResponse, error) mustEmbedUnimplementedControllerServer() } @@ -317,11 +374,17 @@ type ControllerServer interface { type UnimplementedControllerServer struct { } +func (UnimplementedControllerServer) Create(context.Context, *ControllerCreateRequest) (*ControllerCreateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} func (UnimplementedControllerServer) Start(context.Context, *ControllerStartRequest) (*ControllerStartResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Start not implemented") } -func (UnimplementedControllerServer) Shutdown(context.Context, *ControllerShutdownRequest) (*ControllerShutdownResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Shutdown not implemented") +func (UnimplementedControllerServer) Platform(context.Context, *ControllerPlatformRequest) (*ControllerPlatformResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Platform not implemented") +} +func (UnimplementedControllerServer) Stop(context.Context, *ControllerStopRequest) (*ControllerStopResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Stop not implemented") } func (UnimplementedControllerServer) Wait(context.Context, *ControllerWaitRequest) (*ControllerWaitResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Wait not implemented") @@ -329,6 +392,15 @@ func (UnimplementedControllerServer) Wait(context.Context, *ControllerWaitReques func (UnimplementedControllerServer) Status(context.Context, *ControllerStatusRequest) (*ControllerStatusResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Status not implemented") } +func (UnimplementedControllerServer) Shutdown(context.Context, *ControllerShutdownRequest) (*ControllerShutdownResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Shutdown not implemented") +} +func (UnimplementedControllerServer) Metrics(context.Context, *ControllerMetricsRequest) (*ControllerMetricsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Metrics not implemented") +} +func (UnimplementedControllerServer) Update(context.Context, *ControllerUpdateRequest) (*ControllerUpdateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} func (UnimplementedControllerServer) mustEmbedUnimplementedControllerServer() {} // UnsafeControllerServer may be embedded to opt out of forward compatibility for this service. @@ -342,6 +414,24 @@ func RegisterControllerServer(s grpc.ServiceRegistrar, srv ControllerServer) { s.RegisterService(&Controller_ServiceDesc, srv) } +func _Controller_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerCreateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.sandbox.v1.Controller/Create", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).Create(ctx, req.(*ControllerCreateRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Controller_Start_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ControllerStartRequest) if err := dec(in); err != nil { @@ -360,20 +450,38 @@ func _Controller_Start_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } -func _Controller_Shutdown_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ControllerShutdownRequest) +func _Controller_Platform_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerPlatformRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(ControllerServer).Shutdown(ctx, in) + return srv.(ControllerServer).Platform(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/containerd.services.sandbox.v1.Controller/Shutdown", + FullMethod: "/containerd.services.sandbox.v1.Controller/Platform", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ControllerServer).Shutdown(ctx, req.(*ControllerShutdownRequest)) + return srv.(ControllerServer).Platform(ctx, req.(*ControllerPlatformRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_Stop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerStopRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).Stop(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.sandbox.v1.Controller/Stop", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).Stop(ctx, req.(*ControllerStopRequest)) } return interceptor(ctx, in, info, handler) } @@ -414,6 +522,60 @@ func _Controller_Status_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _Controller_Shutdown_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerShutdownRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).Shutdown(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.sandbox.v1.Controller/Shutdown", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).Shutdown(ctx, req.(*ControllerShutdownRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_Metrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerMetricsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).Metrics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.sandbox.v1.Controller/Metrics", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).Metrics(ctx, req.(*ControllerMetricsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Controller_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ControllerUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ControllerServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.sandbox.v1.Controller/Update", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ControllerServer).Update(ctx, req.(*ControllerUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Controller_ServiceDesc is the grpc.ServiceDesc for Controller service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -421,13 +583,21 @@ var Controller_ServiceDesc = grpc.ServiceDesc{ ServiceName: "containerd.services.sandbox.v1.Controller", HandlerType: (*ControllerServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _Controller_Create_Handler, + }, { MethodName: "Start", Handler: _Controller_Start_Handler, }, { - MethodName: "Shutdown", - Handler: _Controller_Shutdown_Handler, + MethodName: "Platform", + Handler: _Controller_Platform_Handler, + }, + { + MethodName: "Stop", + Handler: _Controller_Stop_Handler, }, { MethodName: "Wait", @@ -437,7 +607,19 @@ var Controller_ServiceDesc = grpc.ServiceDesc{ MethodName: "Status", Handler: _Controller_Status_Handler, }, + { + MethodName: "Shutdown", + Handler: _Controller_Shutdown_Handler, + }, + { + MethodName: "Metrics", + Handler: _Controller_Metrics_Handler, + }, + { + MethodName: "Update", + Handler: _Controller_Update_Handler, + }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/sandbox/v1/sandbox.proto", + Metadata: "services/sandbox/v1/sandbox.proto", } diff --git a/api/services/sandbox/v1/sandbox_ttrpc.pb.go b/api/services/sandbox/v1/sandbox_ttrpc.pb.go new file mode 100644 index 000000000000..055379928695 --- /dev/null +++ b/api/services/sandbox/v1/sandbox_ttrpc.pb.go @@ -0,0 +1,272 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/sandbox/v1/sandbox.proto +package sandbox + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" +) + +type TTRPCStoreService interface { + Create(context.Context, *StoreCreateRequest) (*StoreCreateResponse, error) + Update(context.Context, *StoreUpdateRequest) (*StoreUpdateResponse, error) + Delete(context.Context, *StoreDeleteRequest) (*StoreDeleteResponse, error) + List(context.Context, *StoreListRequest) (*StoreListResponse, error) + Get(context.Context, *StoreGetRequest) (*StoreGetResponse, error) +} + +func RegisterTTRPCStoreService(srv *ttrpc.Server, svc TTRPCStoreService) { + srv.RegisterService("containerd.services.sandbox.v1.Store", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Create": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StoreCreateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Create(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StoreUpdateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + "Delete": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StoreDeleteRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Delete(ctx, &req) + }, + "List": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StoreListRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.List(ctx, &req) + }, + "Get": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StoreGetRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Get(ctx, &req) + }, + }, + }) +} + +type ttrpcstoreClient struct { + client *ttrpc.Client +} + +func NewTTRPCStoreClient(client *ttrpc.Client) TTRPCStoreService { + return &ttrpcstoreClient{ + client: client, + } +} + +func (c *ttrpcstoreClient) Create(ctx context.Context, req *StoreCreateRequest) (*StoreCreateResponse, error) { + var resp StoreCreateResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Store", "Create", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcstoreClient) Update(ctx context.Context, req *StoreUpdateRequest) (*StoreUpdateResponse, error) { + var resp StoreUpdateResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Store", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcstoreClient) Delete(ctx context.Context, req *StoreDeleteRequest) (*StoreDeleteResponse, error) { + var resp StoreDeleteResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Store", "Delete", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcstoreClient) List(ctx context.Context, req *StoreListRequest) (*StoreListResponse, error) { + var resp StoreListResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Store", "List", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcstoreClient) Get(ctx context.Context, req *StoreGetRequest) (*StoreGetResponse, error) { + var resp StoreGetResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Store", "Get", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +type TTRPCControllerService interface { + Create(context.Context, *ControllerCreateRequest) (*ControllerCreateResponse, error) + Start(context.Context, *ControllerStartRequest) (*ControllerStartResponse, error) + Platform(context.Context, *ControllerPlatformRequest) (*ControllerPlatformResponse, error) + Stop(context.Context, *ControllerStopRequest) (*ControllerStopResponse, error) + Wait(context.Context, *ControllerWaitRequest) (*ControllerWaitResponse, error) + Status(context.Context, *ControllerStatusRequest) (*ControllerStatusResponse, error) + Shutdown(context.Context, *ControllerShutdownRequest) (*ControllerShutdownResponse, error) + Metrics(context.Context, *ControllerMetricsRequest) (*ControllerMetricsResponse, error) + Update(context.Context, *ControllerUpdateRequest) (*ControllerUpdateResponse, error) +} + +func RegisterTTRPCControllerService(srv *ttrpc.Server, svc TTRPCControllerService) { + srv.RegisterService("containerd.services.sandbox.v1.Controller", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Create": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerCreateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Create(ctx, &req) + }, + "Start": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerStartRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Start(ctx, &req) + }, + "Platform": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerPlatformRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Platform(ctx, &req) + }, + "Stop": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerStopRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Stop(ctx, &req) + }, + "Wait": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerWaitRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Wait(ctx, &req) + }, + "Status": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerStatusRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Status(ctx, &req) + }, + "Shutdown": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerShutdownRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Shutdown(ctx, &req) + }, + "Metrics": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerMetricsRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Metrics(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ControllerUpdateRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + }, + }) +} + +type ttrpccontrollerClient struct { + client *ttrpc.Client +} + +func NewTTRPCControllerClient(client *ttrpc.Client) TTRPCControllerService { + return &ttrpccontrollerClient{ + client: client, + } +} + +func (c *ttrpccontrollerClient) Create(ctx context.Context, req *ControllerCreateRequest) (*ControllerCreateResponse, error) { + var resp ControllerCreateResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Create", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontrollerClient) Start(ctx context.Context, req *ControllerStartRequest) (*ControllerStartResponse, error) { + var resp ControllerStartResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Start", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontrollerClient) Platform(ctx context.Context, req *ControllerPlatformRequest) (*ControllerPlatformResponse, error) { + var resp ControllerPlatformResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Platform", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontrollerClient) Stop(ctx context.Context, req *ControllerStopRequest) (*ControllerStopResponse, error) { + var resp ControllerStopResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Stop", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontrollerClient) Wait(ctx context.Context, req *ControllerWaitRequest) (*ControllerWaitResponse, error) { + var resp ControllerWaitResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Wait", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontrollerClient) Status(ctx context.Context, req *ControllerStatusRequest) (*ControllerStatusResponse, error) { + var resp ControllerStatusResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Status", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontrollerClient) Shutdown(ctx context.Context, req *ControllerShutdownRequest) (*ControllerShutdownResponse, error) { + var resp ControllerShutdownResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Shutdown", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontrollerClient) Metrics(ctx context.Context, req *ControllerMetricsRequest) (*ControllerMetricsResponse, error) { + var resp ControllerMetricsResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Metrics", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpccontrollerClient) Update(ctx context.Context, req *ControllerUpdateRequest) (*ControllerUpdateResponse, error) { + var resp ControllerUpdateResponse + if err := c.client.Call(ctx, "containerd.services.sandbox.v1.Controller", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/snapshots/v1/snapshots.pb.go b/api/services/snapshots/v1/snapshots.pb.go index 48cfc505580a..714bd601fab0 100644 --- a/api/services/snapshots/v1/snapshots.pb.go +++ b/api/services/snapshots/v1/snapshots.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/snapshots/v1/snapshots.proto +// protoc (unknown) +// source: services/snapshots/v1/snapshots.proto package snapshots @@ -75,11 +75,11 @@ func (x Kind) String() string { } func (Kind) Descriptor() protoreflect.EnumDescriptor { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_enumTypes[0].Descriptor() + return file_services_snapshots_v1_snapshots_proto_enumTypes[0].Descriptor() } func (Kind) Type() protoreflect.EnumType { - return &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_enumTypes[0] + return &file_services_snapshots_v1_snapshots_proto_enumTypes[0] } func (x Kind) Number() protoreflect.EnumNumber { @@ -88,7 +88,7 @@ func (x Kind) Number() protoreflect.EnumNumber { // Deprecated: Use Kind.Descriptor instead. func (Kind) EnumDescriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{0} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{0} } type PrepareSnapshotRequest struct { @@ -108,7 +108,7 @@ type PrepareSnapshotRequest struct { func (x *PrepareSnapshotRequest) Reset() { *x = PrepareSnapshotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[0] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -121,7 +121,7 @@ func (x *PrepareSnapshotRequest) String() string { func (*PrepareSnapshotRequest) ProtoMessage() {} func (x *PrepareSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[0] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -134,7 +134,7 @@ func (x *PrepareSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareSnapshotRequest.ProtoReflect.Descriptor instead. func (*PrepareSnapshotRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{0} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{0} } func (x *PrepareSnapshotRequest) GetSnapshotter() string { @@ -176,7 +176,7 @@ type PrepareSnapshotResponse struct { func (x *PrepareSnapshotResponse) Reset() { *x = PrepareSnapshotResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[1] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -189,7 +189,7 @@ func (x *PrepareSnapshotResponse) String() string { func (*PrepareSnapshotResponse) ProtoMessage() {} func (x *PrepareSnapshotResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[1] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -202,7 +202,7 @@ func (x *PrepareSnapshotResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareSnapshotResponse.ProtoReflect.Descriptor instead. func (*PrepareSnapshotResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{1} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{1} } func (x *PrepareSnapshotResponse) GetMounts() []*types.Mount { @@ -229,7 +229,7 @@ type ViewSnapshotRequest struct { func (x *ViewSnapshotRequest) Reset() { *x = ViewSnapshotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[2] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -242,7 +242,7 @@ func (x *ViewSnapshotRequest) String() string { func (*ViewSnapshotRequest) ProtoMessage() {} func (x *ViewSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[2] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -255,7 +255,7 @@ func (x *ViewSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ViewSnapshotRequest.ProtoReflect.Descriptor instead. func (*ViewSnapshotRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{2} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{2} } func (x *ViewSnapshotRequest) GetSnapshotter() string { @@ -297,7 +297,7 @@ type ViewSnapshotResponse struct { func (x *ViewSnapshotResponse) Reset() { *x = ViewSnapshotResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[3] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -310,7 +310,7 @@ func (x *ViewSnapshotResponse) String() string { func (*ViewSnapshotResponse) ProtoMessage() {} func (x *ViewSnapshotResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[3] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -323,7 +323,7 @@ func (x *ViewSnapshotResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ViewSnapshotResponse.ProtoReflect.Descriptor instead. func (*ViewSnapshotResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{3} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{3} } func (x *ViewSnapshotResponse) GetMounts() []*types.Mount { @@ -345,7 +345,7 @@ type MountsRequest struct { func (x *MountsRequest) Reset() { *x = MountsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[4] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -358,7 +358,7 @@ func (x *MountsRequest) String() string { func (*MountsRequest) ProtoMessage() {} func (x *MountsRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[4] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -371,7 +371,7 @@ func (x *MountsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MountsRequest.ProtoReflect.Descriptor instead. func (*MountsRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{4} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{4} } func (x *MountsRequest) GetSnapshotter() string { @@ -399,7 +399,7 @@ type MountsResponse struct { func (x *MountsResponse) Reset() { *x = MountsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[5] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -412,7 +412,7 @@ func (x *MountsResponse) String() string { func (*MountsResponse) ProtoMessage() {} func (x *MountsResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[5] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -425,7 +425,7 @@ func (x *MountsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MountsResponse.ProtoReflect.Descriptor instead. func (*MountsResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{5} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{5} } func (x *MountsResponse) GetMounts() []*types.Mount { @@ -447,7 +447,7 @@ type RemoveSnapshotRequest struct { func (x *RemoveSnapshotRequest) Reset() { *x = RemoveSnapshotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[6] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -460,7 +460,7 @@ func (x *RemoveSnapshotRequest) String() string { func (*RemoveSnapshotRequest) ProtoMessage() {} func (x *RemoveSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[6] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -473,7 +473,7 @@ func (x *RemoveSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveSnapshotRequest.ProtoReflect.Descriptor instead. func (*RemoveSnapshotRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{6} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{6} } func (x *RemoveSnapshotRequest) GetSnapshotter() string { @@ -502,12 +502,13 @@ type CommitSnapshotRequest struct { // // The combined size of a key/value pair cannot exceed 4096 bytes. Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Parent string `protobuf:"bytes,5,opt,name=parent,proto3" json:"parent,omitempty"` } func (x *CommitSnapshotRequest) Reset() { *x = CommitSnapshotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[7] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -520,7 +521,7 @@ func (x *CommitSnapshotRequest) String() string { func (*CommitSnapshotRequest) ProtoMessage() {} func (x *CommitSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[7] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -533,7 +534,7 @@ func (x *CommitSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CommitSnapshotRequest.ProtoReflect.Descriptor instead. func (*CommitSnapshotRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{7} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{7} } func (x *CommitSnapshotRequest) GetSnapshotter() string { @@ -564,6 +565,13 @@ func (x *CommitSnapshotRequest) GetLabels() map[string]string { return nil } +func (x *CommitSnapshotRequest) GetParent() string { + if x != nil { + return x.Parent + } + return "" +} + type StatSnapshotRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -576,7 +584,7 @@ type StatSnapshotRequest struct { func (x *StatSnapshotRequest) Reset() { *x = StatSnapshotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[8] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -589,7 +597,7 @@ func (x *StatSnapshotRequest) String() string { func (*StatSnapshotRequest) ProtoMessage() {} func (x *StatSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[8] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -602,7 +610,7 @@ func (x *StatSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatSnapshotRequest.ProtoReflect.Descriptor instead. func (*StatSnapshotRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{8} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{8} } func (x *StatSnapshotRequest) GetSnapshotter() string { @@ -640,7 +648,7 @@ type Info struct { func (x *Info) Reset() { *x = Info{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[9] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -653,7 +661,7 @@ func (x *Info) String() string { func (*Info) ProtoMessage() {} func (x *Info) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[9] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -666,7 +674,7 @@ func (x *Info) ProtoReflect() protoreflect.Message { // Deprecated: Use Info.ProtoReflect.Descriptor instead. func (*Info) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{9} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{9} } func (x *Info) GetName() string { @@ -722,7 +730,7 @@ type StatSnapshotResponse struct { func (x *StatSnapshotResponse) Reset() { *x = StatSnapshotResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[10] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -735,7 +743,7 @@ func (x *StatSnapshotResponse) String() string { func (*StatSnapshotResponse) ProtoMessage() {} func (x *StatSnapshotResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[10] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -748,7 +756,7 @@ func (x *StatSnapshotResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatSnapshotResponse.ProtoReflect.Descriptor instead. func (*StatSnapshotResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{10} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{10} } func (x *StatSnapshotResponse) GetInfo() *Info { @@ -777,7 +785,7 @@ type UpdateSnapshotRequest struct { func (x *UpdateSnapshotRequest) Reset() { *x = UpdateSnapshotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[11] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -790,7 +798,7 @@ func (x *UpdateSnapshotRequest) String() string { func (*UpdateSnapshotRequest) ProtoMessage() {} func (x *UpdateSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[11] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -803,7 +811,7 @@ func (x *UpdateSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSnapshotRequest.ProtoReflect.Descriptor instead. func (*UpdateSnapshotRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{11} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{11} } func (x *UpdateSnapshotRequest) GetSnapshotter() string { @@ -838,7 +846,7 @@ type UpdateSnapshotResponse struct { func (x *UpdateSnapshotResponse) Reset() { *x = UpdateSnapshotResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[12] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -851,7 +859,7 @@ func (x *UpdateSnapshotResponse) String() string { func (*UpdateSnapshotResponse) ProtoMessage() {} func (x *UpdateSnapshotResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[12] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -864,7 +872,7 @@ func (x *UpdateSnapshotResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSnapshotResponse.ProtoReflect.Descriptor instead. func (*UpdateSnapshotResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{12} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{12} } func (x *UpdateSnapshotResponse) GetInfo() *Info { @@ -887,7 +895,7 @@ type ListSnapshotsRequest struct { // filters. Expanded, images that match the following will be // returned: // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] // // If filters is zero-length or nil, all items will be returned. Filters []string `protobuf:"bytes,2,rep,name=filters,proto3" json:"filters,omitempty"` @@ -896,7 +904,7 @@ type ListSnapshotsRequest struct { func (x *ListSnapshotsRequest) Reset() { *x = ListSnapshotsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[13] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -909,7 +917,7 @@ func (x *ListSnapshotsRequest) String() string { func (*ListSnapshotsRequest) ProtoMessage() {} func (x *ListSnapshotsRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[13] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -922,7 +930,7 @@ func (x *ListSnapshotsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSnapshotsRequest.ProtoReflect.Descriptor instead. func (*ListSnapshotsRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{13} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{13} } func (x *ListSnapshotsRequest) GetSnapshotter() string { @@ -950,7 +958,7 @@ type ListSnapshotsResponse struct { func (x *ListSnapshotsResponse) Reset() { *x = ListSnapshotsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[14] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -963,7 +971,7 @@ func (x *ListSnapshotsResponse) String() string { func (*ListSnapshotsResponse) ProtoMessage() {} func (x *ListSnapshotsResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[14] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -976,7 +984,7 @@ func (x *ListSnapshotsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSnapshotsResponse.ProtoReflect.Descriptor instead. func (*ListSnapshotsResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{14} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{14} } func (x *ListSnapshotsResponse) GetInfo() []*Info { @@ -998,7 +1006,7 @@ type UsageRequest struct { func (x *UsageRequest) Reset() { *x = UsageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[15] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1011,7 +1019,7 @@ func (x *UsageRequest) String() string { func (*UsageRequest) ProtoMessage() {} func (x *UsageRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[15] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1024,7 +1032,7 @@ func (x *UsageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UsageRequest.ProtoReflect.Descriptor instead. func (*UsageRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{15} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{15} } func (x *UsageRequest) GetSnapshotter() string { @@ -1053,7 +1061,7 @@ type UsageResponse struct { func (x *UsageResponse) Reset() { *x = UsageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[16] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1066,7 +1074,7 @@ func (x *UsageResponse) String() string { func (*UsageResponse) ProtoMessage() {} func (x *UsageResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[16] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1079,7 +1087,7 @@ func (x *UsageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UsageResponse.ProtoReflect.Descriptor instead. func (*UsageResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{16} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{16} } func (x *UsageResponse) GetSize() int64 { @@ -1107,7 +1115,7 @@ type CleanupRequest struct { func (x *CleanupRequest) Reset() { *x = CleanupRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[17] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1120,7 +1128,7 @@ func (x *CleanupRequest) String() string { func (*CleanupRequest) ProtoMessage() {} func (x *CleanupRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[17] + mi := &file_services_snapshots_v1_snapshots_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1133,7 +1141,7 @@ func (x *CleanupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CleanupRequest.ProtoReflect.Descriptor instead. func (*CleanupRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{17} + return file_services_snapshots_v1_snapshots_proto_rawDescGZIP(), []int{17} } func (x *CleanupRequest) GetSnapshotter() string { @@ -1143,262 +1151,259 @@ func (x *CleanupRequest) GetSnapshotter() string { return "" } -var File_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto protoreflect.FileDescriptor +var File_services_snapshots_v1_snapshots_proto protoreflect.FileDescriptor -var file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDesc = []byte{ - 0x0a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x01, 0x0a, 0x16, 0x50, 0x72, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x17, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, +var file_services_snapshots_v1_snapshots_proto_rawDesc = []byte{ + 0x0a, 0x25, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, 0x6e, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x01, 0x0a, + 0x16, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x47, 0x0a, 0x14, - 0x56, 0x69, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x43, 0x0a, 0x0d, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x41, 0x0a, 0x0e, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x4b, 0x0a, - 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0xf7, 0x01, 0x0a, 0x15, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5b, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x17, + 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x13, 0x56, 0x69, 0x65, + 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, - 0xeb, 0x02, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x56, 0x69, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x47, 0x0a, 0x14, 0x56, 0x69, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x43, 0x0a, 0x0d, 0x4d, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x22, 0x41, 0x0a, 0x0e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x22, 0x4b, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x22, 0x8f, 0x02, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x5b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x52, 0x0a, - 0x14, 0x53, 0x74, 0x61, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, - 0x6f, 0x22, 0xb2, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, - 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x49, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0xeb, 0x02, + 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x39, + 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x52, 0x0a, 0x14, 0x53, + 0x74, 0x61, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, + 0xb2, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x54, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, + 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x52, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x53, + 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x22, 0x42, 0x0a, 0x0c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x3b, 0x0a, 0x0d, 0x55, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x69, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x22, 0x32, 0x0a, 0x0e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x2a, 0x38, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x56, 0x49, 0x45, 0x57, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, + 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, + 0x10, 0x03, 0x32, 0xd3, 0x08, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, + 0x12, 0x7e, 0x0a, 0x07, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x54, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3a, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x12, 0x75, 0x0a, 0x04, 0x56, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x06, 0x4d, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x52, 0x0a, 0x14, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x22, 0x53, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x42, 0x0a, 0x0c, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x3b, 0x0a, 0x0d, 0x55, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x32, 0x0a, 0x0e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x2a, 0x38, 0x0a, 0x04, 0x4b, 0x69, - 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x08, 0x0a, 0x04, 0x56, 0x49, 0x45, 0x57, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, - 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, - 0x45, 0x44, 0x10, 0x03, 0x32, 0xd3, 0x08, 0x0a, 0x09, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x73, 0x12, 0x7e, 0x0a, 0x07, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x12, 0x38, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, - 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x75, 0x0a, 0x04, 0x56, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, - 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x06, 0x4d, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x59, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x37, 0x2e, 0x63, 0x6f, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x59, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x75, 0x0a, 0x04, 0x53, 0x74, + 0x61, 0x74, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x7b, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x75, 0x0a, 0x04, - 0x53, 0x74, 0x61, 0x74, 0x12, 0x35, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, + 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x79, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x05, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x07, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, - 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x68, 0x0a, 0x05, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x07, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x12, 0x30, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x73, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescData = file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDesc + file_services_snapshots_v1_snapshots_proto_rawDescOnce sync.Once + file_services_snapshots_v1_snapshots_proto_rawDescData = file_services_snapshots_v1_snapshots_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescData) +func file_services_snapshots_v1_snapshots_proto_rawDescGZIP() []byte { + file_services_snapshots_v1_snapshots_proto_rawDescOnce.Do(func() { + file_services_snapshots_v1_snapshots_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_snapshots_v1_snapshots_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDescData + return file_services_snapshots_v1_snapshots_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes = make([]protoimpl.MessageInfo, 22) -var file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_goTypes = []interface{}{ +var file_services_snapshots_v1_snapshots_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_services_snapshots_v1_snapshots_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_services_snapshots_v1_snapshots_proto_goTypes = []interface{}{ (Kind)(0), // 0: containerd.services.snapshots.v1.Kind (*PrepareSnapshotRequest)(nil), // 1: containerd.services.snapshots.v1.PrepareSnapshotRequest (*PrepareSnapshotResponse)(nil), // 2: containerd.services.snapshots.v1.PrepareSnapshotResponse @@ -1427,7 +1432,7 @@ var file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_pr (*fieldmaskpb.FieldMask)(nil), // 25: google.protobuf.FieldMask (*emptypb.Empty)(nil), // 26: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_depIdxs = []int32{ +var file_services_snapshots_v1_snapshots_proto_depIdxs = []int32{ 19, // 0: containerd.services.snapshots.v1.PrepareSnapshotRequest.labels:type_name -> containerd.services.snapshots.v1.PrepareSnapshotRequest.LabelsEntry 23, // 1: containerd.services.snapshots.v1.PrepareSnapshotResponse.mounts:type_name -> containerd.types.Mount 20, // 2: containerd.services.snapshots.v1.ViewSnapshotRequest.labels:type_name -> containerd.services.snapshots.v1.ViewSnapshotRequest.LabelsEntry @@ -1470,13 +1475,13 @@ var file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_pr 0, // [0:15] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_init() } -func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_init() { - if File_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto != nil { +func init() { file_services_snapshots_v1_snapshots_proto_init() } +func file_services_snapshots_v1_snapshots_proto_init() { + if File_services_snapshots_v1_snapshots_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PrepareSnapshotRequest); i { case 0: return &v.state @@ -1488,7 +1493,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PrepareSnapshotResponse); i { case 0: return &v.state @@ -1500,7 +1505,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ViewSnapshotRequest); i { case 0: return &v.state @@ -1512,7 +1517,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ViewSnapshotResponse); i { case 0: return &v.state @@ -1524,7 +1529,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MountsRequest); i { case 0: return &v.state @@ -1536,7 +1541,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MountsResponse); i { case 0: return &v.state @@ -1548,7 +1553,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoveSnapshotRequest); i { case 0: return &v.state @@ -1560,7 +1565,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CommitSnapshotRequest); i { case 0: return &v.state @@ -1572,7 +1577,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatSnapshotRequest); i { case 0: return &v.state @@ -1584,7 +1589,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Info); i { case 0: return &v.state @@ -1596,7 +1601,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatSnapshotResponse); i { case 0: return &v.state @@ -1608,7 +1613,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateSnapshotRequest); i { case 0: return &v.state @@ -1620,7 +1625,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateSnapshotResponse); i { case 0: return &v.state @@ -1632,7 +1637,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListSnapshotsRequest); i { case 0: return &v.state @@ -1644,7 +1649,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListSnapshotsResponse); i { case 0: return &v.state @@ -1656,7 +1661,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UsageRequest); i { case 0: return &v.state @@ -1668,7 +1673,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UsageResponse); i { case 0: return &v.state @@ -1680,7 +1685,7 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p return nil } } - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_services_snapshots_v1_snapshots_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CleanupRequest); i { case 0: return &v.state @@ -1697,19 +1702,19 @@ func file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_p out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDesc, + RawDescriptor: file_services_snapshots_v1_snapshots_proto_rawDesc, NumEnums: 1, NumMessages: 22, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_depIdxs, - EnumInfos: file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_enumTypes, - MessageInfos: file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_msgTypes, + GoTypes: file_services_snapshots_v1_snapshots_proto_goTypes, + DependencyIndexes: file_services_snapshots_v1_snapshots_proto_depIdxs, + EnumInfos: file_services_snapshots_v1_snapshots_proto_enumTypes, + MessageInfos: file_services_snapshots_v1_snapshots_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto = out.File - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_snapshots_v1_snapshots_proto_depIdxs = nil + File_services_snapshots_v1_snapshots_proto = out.File + file_services_snapshots_v1_snapshots_proto_rawDesc = nil + file_services_snapshots_v1_snapshots_proto_goTypes = nil + file_services_snapshots_v1_snapshots_proto_depIdxs = nil } diff --git a/api/services/snapshots/v1/snapshots.proto b/api/services/snapshots/v1/snapshots.proto index 283765d88ac6..eb8a98f793c2 100644 --- a/api/services/snapshots/v1/snapshots.proto +++ b/api/services/snapshots/v1/snapshots.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -21,159 +21,161 @@ package containerd.services.snapshots.v1; import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/timestamp.proto"; -import "github.com/containerd/containerd/api/types/mount.proto"; +import "types/mount.proto"; option go_package = "github.com/containerd/containerd/api/services/snapshots/v1;snapshots"; // Snapshot service manages snapshots service Snapshots { - rpc Prepare(PrepareSnapshotRequest) returns (PrepareSnapshotResponse); - rpc View(ViewSnapshotRequest) returns (ViewSnapshotResponse); - rpc Mounts(MountsRequest) returns (MountsResponse); - rpc Commit(CommitSnapshotRequest) returns (google.protobuf.Empty); - rpc Remove(RemoveSnapshotRequest) returns (google.protobuf.Empty); - rpc Stat(StatSnapshotRequest) returns (StatSnapshotResponse); - rpc Update(UpdateSnapshotRequest) returns (UpdateSnapshotResponse); - rpc List(ListSnapshotsRequest) returns (stream ListSnapshotsResponse); - rpc Usage(UsageRequest) returns (UsageResponse); - rpc Cleanup(CleanupRequest) returns (google.protobuf.Empty); + rpc Prepare(PrepareSnapshotRequest) returns (PrepareSnapshotResponse); + rpc View(ViewSnapshotRequest) returns (ViewSnapshotResponse); + rpc Mounts(MountsRequest) returns (MountsResponse); + rpc Commit(CommitSnapshotRequest) returns (google.protobuf.Empty); + rpc Remove(RemoveSnapshotRequest) returns (google.protobuf.Empty); + rpc Stat(StatSnapshotRequest) returns (StatSnapshotResponse); + rpc Update(UpdateSnapshotRequest) returns (UpdateSnapshotResponse); + rpc List(ListSnapshotsRequest) returns (stream ListSnapshotsResponse); + rpc Usage(UsageRequest) returns (UsageResponse); + rpc Cleanup(CleanupRequest) returns (google.protobuf.Empty); } message PrepareSnapshotRequest { - string snapshotter = 1; - string key = 2; - string parent = 3; + string snapshotter = 1; + string key = 2; + string parent = 3; - // Labels are arbitrary data on snapshots. - // - // The combined size of a key/value pair cannot exceed 4096 bytes. - map labels = 4; + // Labels are arbitrary data on snapshots. + // + // The combined size of a key/value pair cannot exceed 4096 bytes. + map labels = 4; } message PrepareSnapshotResponse { - repeated containerd.types.Mount mounts = 1; + repeated containerd.types.Mount mounts = 1; } message ViewSnapshotRequest { - string snapshotter = 1; - string key = 2; - string parent = 3; + string snapshotter = 1; + string key = 2; + string parent = 3; - // Labels are arbitrary data on snapshots. - // - // The combined size of a key/value pair cannot exceed 4096 bytes. - map labels = 4; + // Labels are arbitrary data on snapshots. + // + // The combined size of a key/value pair cannot exceed 4096 bytes. + map labels = 4; } message ViewSnapshotResponse { - repeated containerd.types.Mount mounts = 1; + repeated containerd.types.Mount mounts = 1; } message MountsRequest { - string snapshotter = 1; - string key = 2; + string snapshotter = 1; + string key = 2; } message MountsResponse { - repeated containerd.types.Mount mounts = 1; + repeated containerd.types.Mount mounts = 1; } message RemoveSnapshotRequest { - string snapshotter = 1; - string key = 2; + string snapshotter = 1; + string key = 2; } message CommitSnapshotRequest { - string snapshotter = 1; - string name = 2; - string key = 3; + string snapshotter = 1; + string name = 2; + string key = 3; - // Labels are arbitrary data on snapshots. - // - // The combined size of a key/value pair cannot exceed 4096 bytes. - map labels = 4; + // Labels are arbitrary data on snapshots. + // + // The combined size of a key/value pair cannot exceed 4096 bytes. + map labels = 4; + + string parent = 5; } message StatSnapshotRequest { - string snapshotter = 1; - string key = 2; + string snapshotter = 1; + string key = 2; } enum Kind { - UNKNOWN = 0; - VIEW = 1; - ACTIVE = 2; - COMMITTED = 3; + UNKNOWN = 0; + VIEW = 1; + ACTIVE = 2; + COMMITTED = 3; } message Info { - string name = 1; - string parent = 2; - Kind kind = 3; + string name = 1; + string parent = 2; + Kind kind = 3; - // CreatedAt provides the time at which the snapshot was created. - google.protobuf.Timestamp created_at = 4; + // CreatedAt provides the time at which the snapshot was created. + google.protobuf.Timestamp created_at = 4; - // UpdatedAt provides the time the info was last updated. - google.protobuf.Timestamp updated_at = 5; + // UpdatedAt provides the time the info was last updated. + google.protobuf.Timestamp updated_at = 5; - // Labels are arbitrary data on snapshots. - // - // The combined size of a key/value pair cannot exceed 4096 bytes. - map labels = 6; + // Labels are arbitrary data on snapshots. + // + // The combined size of a key/value pair cannot exceed 4096 bytes. + map labels = 6; } message StatSnapshotResponse { - Info info = 1; + Info info = 1; } message UpdateSnapshotRequest { - string snapshotter = 1; - Info info = 2; + string snapshotter = 1; + Info info = 2; - // UpdateMask specifies which fields to perform the update on. If empty, - // the operation applies to all fields. - // - // In info, Name, Parent, Kind, Created are immutable, - // other field may be updated using this mask. - // If no mask is provided, all mutable field are updated. - google.protobuf.FieldMask update_mask = 3; + // UpdateMask specifies which fields to perform the update on. If empty, + // the operation applies to all fields. + // + // In info, Name, Parent, Kind, Created are immutable, + // other field may be updated using this mask. + // If no mask is provided, all mutable field are updated. + google.protobuf.FieldMask update_mask = 3; } message UpdateSnapshotResponse { - Info info = 1; + Info info = 1; } -message ListSnapshotsRequest{ - string snapshotter = 1; +message ListSnapshotsRequest { + string snapshotter = 1; - // Filters contains one or more filters using the syntax defined in the - // containerd filter package. - // - // The returned result will be those that match any of the provided - // filters. Expanded, images that match the following will be - // returned: - // - // filters[0] or filters[1] or ... or filters[n-1] or filters[n] - // - // If filters is zero-length or nil, all items will be returned. - repeated string filters = 2; + // Filters contains one or more filters using the syntax defined in the + // containerd filter package. + // + // The returned result will be those that match any of the provided + // filters. Expanded, images that match the following will be + // returned: + // + // filters[0] or filters[1] or ... or filters[n-1] or filters[n] + // + // If filters is zero-length or nil, all items will be returned. + repeated string filters = 2; } message ListSnapshotsResponse { - repeated Info info = 1; + repeated Info info = 1; } message UsageRequest { - string snapshotter = 1; - string key = 2; + string snapshotter = 1; + string key = 2; } message UsageResponse { - int64 size = 1; - int64 inodes = 2; + int64 size = 1; + int64 inodes = 2; } message CleanupRequest { - string snapshotter = 1; + string snapshotter = 1; } diff --git a/api/services/snapshots/v1/snapshots_grpc.pb.go b/api/services/snapshots/v1/snapshots_grpc.pb.go index 765c0274465d..34fdd3702bb4 100644 --- a/api/services/snapshots/v1/snapshots_grpc.pb.go +++ b/api/services/snapshots/v1/snapshots_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/snapshots/v1/snapshots.proto +// - protoc (unknown) +// source: services/snapshots/v1/snapshots.proto package snapshots @@ -454,5 +456,5 @@ var Snapshots_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, }, }, - Metadata: "github.com/containerd/containerd/api/services/snapshots/v1/snapshots.proto", + Metadata: "services/snapshots/v1/snapshots.proto", } diff --git a/api/services/snapshots/v1/snapshots_ttrpc.pb.go b/api/services/snapshots/v1/snapshots_ttrpc.pb.go new file mode 100644 index 000000000000..127bf7b925c5 --- /dev/null +++ b/api/services/snapshots/v1/snapshots_ttrpc.pb.go @@ -0,0 +1,242 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/snapshots/v1/snapshots.proto +package snapshots + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCSnapshotsService interface { + Prepare(context.Context, *PrepareSnapshotRequest) (*PrepareSnapshotResponse, error) + View(context.Context, *ViewSnapshotRequest) (*ViewSnapshotResponse, error) + Mounts(context.Context, *MountsRequest) (*MountsResponse, error) + Commit(context.Context, *CommitSnapshotRequest) (*emptypb.Empty, error) + Remove(context.Context, *RemoveSnapshotRequest) (*emptypb.Empty, error) + Stat(context.Context, *StatSnapshotRequest) (*StatSnapshotResponse, error) + Update(context.Context, *UpdateSnapshotRequest) (*UpdateSnapshotResponse, error) + List(context.Context, *ListSnapshotsRequest, TTRPCSnapshots_ListServer) error + Usage(context.Context, *UsageRequest) (*UsageResponse, error) + Cleanup(context.Context, *CleanupRequest) (*emptypb.Empty, error) +} + +type TTRPCSnapshots_ListServer interface { + Send(*ListSnapshotsResponse) error + ttrpc.StreamServer +} + +type ttrpcsnapshotsListServer struct { + ttrpc.StreamServer +} + +func (x *ttrpcsnapshotsListServer) Send(m *ListSnapshotsResponse) error { + return x.StreamServer.SendMsg(m) +} + +func RegisterTTRPCSnapshotsService(srv *ttrpc.Server, svc TTRPCSnapshotsService) { + srv.RegisterService("containerd.services.snapshots.v1.Snapshots", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Prepare": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PrepareSnapshotRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Prepare(ctx, &req) + }, + "View": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ViewSnapshotRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.View(ctx, &req) + }, + "Mounts": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req MountsRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Mounts(ctx, &req) + }, + "Commit": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CommitSnapshotRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Commit(ctx, &req) + }, + "Remove": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req RemoveSnapshotRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Remove(ctx, &req) + }, + "Stat": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StatSnapshotRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Stat(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UpdateSnapshotRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + "Usage": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UsageRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Usage(ctx, &req) + }, + "Cleanup": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CleanupRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Cleanup(ctx, &req) + }, + }, + Streams: map[string]ttrpc.Stream{ + "List": { + Handler: func(ctx context.Context, stream ttrpc.StreamServer) (interface{}, error) { + m := new(ListSnapshotsRequest) + if err := stream.RecvMsg(m); err != nil { + return nil, err + } + return nil, svc.List(ctx, m, &ttrpcsnapshotsListServer{stream}) + }, + StreamingClient: false, + StreamingServer: true, + }, + }, + }) +} + +type TTRPCSnapshotsClient interface { + Prepare(context.Context, *PrepareSnapshotRequest) (*PrepareSnapshotResponse, error) + View(context.Context, *ViewSnapshotRequest) (*ViewSnapshotResponse, error) + Mounts(context.Context, *MountsRequest) (*MountsResponse, error) + Commit(context.Context, *CommitSnapshotRequest) (*emptypb.Empty, error) + Remove(context.Context, *RemoveSnapshotRequest) (*emptypb.Empty, error) + Stat(context.Context, *StatSnapshotRequest) (*StatSnapshotResponse, error) + Update(context.Context, *UpdateSnapshotRequest) (*UpdateSnapshotResponse, error) + List(context.Context, *ListSnapshotsRequest) (TTRPCSnapshots_ListClient, error) + Usage(context.Context, *UsageRequest) (*UsageResponse, error) + Cleanup(context.Context, *CleanupRequest) (*emptypb.Empty, error) +} + +type ttrpcsnapshotsClient struct { + client *ttrpc.Client +} + +func NewTTRPCSnapshotsClient(client *ttrpc.Client) TTRPCSnapshotsClient { + return &ttrpcsnapshotsClient{ + client: client, + } +} + +func (c *ttrpcsnapshotsClient) Prepare(ctx context.Context, req *PrepareSnapshotRequest) (*PrepareSnapshotResponse, error) { + var resp PrepareSnapshotResponse + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "Prepare", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsnapshotsClient) View(ctx context.Context, req *ViewSnapshotRequest) (*ViewSnapshotResponse, error) { + var resp ViewSnapshotResponse + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "View", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsnapshotsClient) Mounts(ctx context.Context, req *MountsRequest) (*MountsResponse, error) { + var resp MountsResponse + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "Mounts", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsnapshotsClient) Commit(ctx context.Context, req *CommitSnapshotRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "Commit", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsnapshotsClient) Remove(ctx context.Context, req *RemoveSnapshotRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "Remove", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsnapshotsClient) Stat(ctx context.Context, req *StatSnapshotRequest) (*StatSnapshotResponse, error) { + var resp StatSnapshotResponse + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "Stat", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsnapshotsClient) Update(ctx context.Context, req *UpdateSnapshotRequest) (*UpdateSnapshotResponse, error) { + var resp UpdateSnapshotResponse + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsnapshotsClient) List(ctx context.Context, req *ListSnapshotsRequest) (TTRPCSnapshots_ListClient, error) { + stream, err := c.client.NewStream(ctx, &ttrpc.StreamDesc{ + StreamingClient: false, + StreamingServer: true, + }, "containerd.services.snapshots.v1.Snapshots", "List", req) + if err != nil { + return nil, err + } + x := &ttrpcsnapshotsListClient{stream} + return x, nil +} + +type TTRPCSnapshots_ListClient interface { + Recv() (*ListSnapshotsResponse, error) + ttrpc.ClientStream +} + +type ttrpcsnapshotsListClient struct { + ttrpc.ClientStream +} + +func (x *ttrpcsnapshotsListClient) Recv() (*ListSnapshotsResponse, error) { + m := new(ListSnapshotsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *ttrpcsnapshotsClient) Usage(ctx context.Context, req *UsageRequest) (*UsageResponse, error) { + var resp UsageResponse + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "Usage", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpcsnapshotsClient) Cleanup(ctx context.Context, req *CleanupRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.snapshots.v1.Snapshots", "Cleanup", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/streaming/v1/doc.go b/api/services/streaming/v1/doc.go new file mode 100644 index 000000000000..04c4362d83e9 --- /dev/null +++ b/api/services/streaming/v1/doc.go @@ -0,0 +1,17 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package streaming diff --git a/api/services/streaming/v1/streaming.pb.go b/api/services/streaming/v1/streaming.pb.go new file mode 100644 index 000000000000..5cfc2426f54f --- /dev/null +++ b/api/services/streaming/v1/streaming.pb.go @@ -0,0 +1,173 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: services/streaming/v1/streaming.proto + +package streaming + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type StreamInit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *StreamInit) Reset() { + *x = StreamInit{} + if protoimpl.UnsafeEnabled { + mi := &file_services_streaming_v1_streaming_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamInit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamInit) ProtoMessage() {} + +func (x *StreamInit) ProtoReflect() protoreflect.Message { + mi := &file_services_streaming_v1_streaming_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamInit.ProtoReflect.Descriptor instead. +func (*StreamInit) Descriptor() ([]byte, []int) { + return file_services_streaming_v1_streaming_proto_rawDescGZIP(), []int{0} +} + +func (x *StreamInit) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +var File_services_streaming_v1_streaming_proto protoreflect.FileDescriptor + +var file_services_streaming_v1_streaming_proto_rawDesc = []byte{ + 0x0a, 0x25, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, + 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1c, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x6e, + 0x69, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x32, 0x45, 0x0a, 0x09, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, + 0x38, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x1a, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x28, 0x01, 0x30, 0x01, 0x42, 0x46, 0x5a, 0x44, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, + 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_services_streaming_v1_streaming_proto_rawDescOnce sync.Once + file_services_streaming_v1_streaming_proto_rawDescData = file_services_streaming_v1_streaming_proto_rawDesc +) + +func file_services_streaming_v1_streaming_proto_rawDescGZIP() []byte { + file_services_streaming_v1_streaming_proto_rawDescOnce.Do(func() { + file_services_streaming_v1_streaming_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_streaming_v1_streaming_proto_rawDescData) + }) + return file_services_streaming_v1_streaming_proto_rawDescData +} + +var file_services_streaming_v1_streaming_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_services_streaming_v1_streaming_proto_goTypes = []interface{}{ + (*StreamInit)(nil), // 0: containerd.services.streaming.v1.StreamInit + (*anypb.Any)(nil), // 1: google.protobuf.Any +} +var file_services_streaming_v1_streaming_proto_depIdxs = []int32{ + 1, // 0: containerd.services.streaming.v1.Streaming.Stream:input_type -> google.protobuf.Any + 1, // 1: containerd.services.streaming.v1.Streaming.Stream:output_type -> google.protobuf.Any + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_services_streaming_v1_streaming_proto_init() } +func file_services_streaming_v1_streaming_proto_init() { + if File_services_streaming_v1_streaming_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_services_streaming_v1_streaming_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamInit); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_services_streaming_v1_streaming_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_services_streaming_v1_streaming_proto_goTypes, + DependencyIndexes: file_services_streaming_v1_streaming_proto_depIdxs, + MessageInfos: file_services_streaming_v1_streaming_proto_msgTypes, + }.Build() + File_services_streaming_v1_streaming_proto = out.File + file_services_streaming_v1_streaming_proto_rawDesc = nil + file_services_streaming_v1_streaming_proto_goTypes = nil + file_services_streaming_v1_streaming_proto_depIdxs = nil +} diff --git a/api/services/streaming/v1/streaming.proto b/api/services/streaming/v1/streaming.proto new file mode 100644 index 000000000000..57e1a7c019e0 --- /dev/null +++ b/api/services/streaming/v1/streaming.proto @@ -0,0 +1,31 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.services.streaming.v1; + +import "google/protobuf/any.proto"; + +option go_package = "github.com/containerd/containerd/api/services/streaming/v1;streaming"; + +service Streaming { + rpc Stream(stream google.protobuf.Any) returns (stream google.protobuf.Any); +} + +message StreamInit { + string id = 1; +} diff --git a/api/services/streaming/v1/streaming_grpc.pb.go b/api/services/streaming/v1/streaming_grpc.pb.go new file mode 100644 index 000000000000..cf0865b11084 --- /dev/null +++ b/api/services/streaming/v1/streaming_grpc.pb.go @@ -0,0 +1,140 @@ +//go:build !no_grpc + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: services/streaming/v1/streaming.proto + +package streaming + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + anypb "google.golang.org/protobuf/types/known/anypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// StreamingClient is the client API for Streaming service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type StreamingClient interface { + Stream(ctx context.Context, opts ...grpc.CallOption) (Streaming_StreamClient, error) +} + +type streamingClient struct { + cc grpc.ClientConnInterface +} + +func NewStreamingClient(cc grpc.ClientConnInterface) StreamingClient { + return &streamingClient{cc} +} + +func (c *streamingClient) Stream(ctx context.Context, opts ...grpc.CallOption) (Streaming_StreamClient, error) { + stream, err := c.cc.NewStream(ctx, &Streaming_ServiceDesc.Streams[0], "/containerd.services.streaming.v1.Streaming/Stream", opts...) + if err != nil { + return nil, err + } + x := &streamingStreamClient{stream} + return x, nil +} + +type Streaming_StreamClient interface { + Send(*anypb.Any) error + Recv() (*anypb.Any, error) + grpc.ClientStream +} + +type streamingStreamClient struct { + grpc.ClientStream +} + +func (x *streamingStreamClient) Send(m *anypb.Any) error { + return x.ClientStream.SendMsg(m) +} + +func (x *streamingStreamClient) Recv() (*anypb.Any, error) { + m := new(anypb.Any) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// StreamingServer is the server API for Streaming service. +// All implementations must embed UnimplementedStreamingServer +// for forward compatibility +type StreamingServer interface { + Stream(Streaming_StreamServer) error + mustEmbedUnimplementedStreamingServer() +} + +// UnimplementedStreamingServer must be embedded to have forward compatible implementations. +type UnimplementedStreamingServer struct { +} + +func (UnimplementedStreamingServer) Stream(Streaming_StreamServer) error { + return status.Errorf(codes.Unimplemented, "method Stream not implemented") +} +func (UnimplementedStreamingServer) mustEmbedUnimplementedStreamingServer() {} + +// UnsafeStreamingServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to StreamingServer will +// result in compilation errors. +type UnsafeStreamingServer interface { + mustEmbedUnimplementedStreamingServer() +} + +func RegisterStreamingServer(s grpc.ServiceRegistrar, srv StreamingServer) { + s.RegisterService(&Streaming_ServiceDesc, srv) +} + +func _Streaming_Stream_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(StreamingServer).Stream(&streamingStreamServer{stream}) +} + +type Streaming_StreamServer interface { + Send(*anypb.Any) error + Recv() (*anypb.Any, error) + grpc.ServerStream +} + +type streamingStreamServer struct { + grpc.ServerStream +} + +func (x *streamingStreamServer) Send(m *anypb.Any) error { + return x.ServerStream.SendMsg(m) +} + +func (x *streamingStreamServer) Recv() (*anypb.Any, error) { + m := new(anypb.Any) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Streaming_ServiceDesc is the grpc.ServiceDesc for Streaming service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Streaming_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "containerd.services.streaming.v1.Streaming", + HandlerType: (*StreamingServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "Stream", + Handler: _Streaming_Stream_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "services/streaming/v1/streaming.proto", +} diff --git a/api/services/streaming/v1/streaming_ttrpc.pb.go b/api/services/streaming/v1/streaming_ttrpc.pb.go new file mode 100644 index 000000000000..2c22a56a9591 --- /dev/null +++ b/api/services/streaming/v1/streaming_ttrpc.pb.go @@ -0,0 +1,97 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/streaming/v1/streaming.proto +package streaming + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + anypb "google.golang.org/protobuf/types/known/anypb" +) + +type TTRPCStreamingService interface { + Stream(context.Context, TTRPCStreaming_StreamServer) error +} + +type TTRPCStreaming_StreamServer interface { + Send(*anypb.Any) error + Recv() (*anypb.Any, error) + ttrpc.StreamServer +} + +type ttrpcstreamingStreamServer struct { + ttrpc.StreamServer +} + +func (x *ttrpcstreamingStreamServer) Send(m *anypb.Any) error { + return x.StreamServer.SendMsg(m) +} + +func (x *ttrpcstreamingStreamServer) Recv() (*anypb.Any, error) { + m := new(anypb.Any) + if err := x.StreamServer.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func RegisterTTRPCStreamingService(srv *ttrpc.Server, svc TTRPCStreamingService) { + srv.RegisterService("containerd.services.streaming.v1.Streaming", &ttrpc.ServiceDesc{ + Streams: map[string]ttrpc.Stream{ + "Stream": { + Handler: func(ctx context.Context, stream ttrpc.StreamServer) (interface{}, error) { + return nil, svc.Stream(ctx, &ttrpcstreamingStreamServer{stream}) + }, + StreamingClient: true, + StreamingServer: true, + }, + }, + }) +} + +type TTRPCStreamingClient interface { + Stream(context.Context) (TTRPCStreaming_StreamClient, error) +} + +type ttrpcstreamingClient struct { + client *ttrpc.Client +} + +func NewTTRPCStreamingClient(client *ttrpc.Client) TTRPCStreamingClient { + return &ttrpcstreamingClient{ + client: client, + } +} + +func (c *ttrpcstreamingClient) Stream(ctx context.Context) (TTRPCStreaming_StreamClient, error) { + stream, err := c.client.NewStream(ctx, &ttrpc.StreamDesc{ + StreamingClient: true, + StreamingServer: true, + }, "containerd.services.streaming.v1.Streaming", "Stream", nil) + if err != nil { + return nil, err + } + x := &ttrpcstreamingStreamClient{stream} + return x, nil +} + +type TTRPCStreaming_StreamClient interface { + Send(*anypb.Any) error + Recv() (*anypb.Any, error) + ttrpc.ClientStream +} + +type ttrpcstreamingStreamClient struct { + ttrpc.ClientStream +} + +func (x *ttrpcstreamingStreamClient) Send(m *anypb.Any) error { + return x.ClientStream.SendMsg(m) +} + +func (x *ttrpcstreamingStreamClient) Recv() (*anypb.Any, error) { + m := new(anypb.Any) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} diff --git a/api/services/tasks/v1/tasks.pb.go b/api/services/tasks/v1/tasks.pb.go index 1a55d696dd59..c1b42eb8295c 100644 --- a/api/services/tasks/v1/tasks.pb.go +++ b/api/services/tasks/v1/tasks.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/tasks/v1/tasks.proto +// protoc (unknown) +// source: services/tasks/v1/tasks.proto package tasks @@ -65,7 +65,7 @@ type CreateTaskRequest struct { func (x *CreateTaskRequest) Reset() { *x = CreateTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[0] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -78,7 +78,7 @@ func (x *CreateTaskRequest) String() string { func (*CreateTaskRequest) ProtoMessage() {} func (x *CreateTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[0] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -91,7 +91,7 @@ func (x *CreateTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTaskRequest.ProtoReflect.Descriptor instead. func (*CreateTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{0} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{0} } func (x *CreateTaskRequest) GetContainerID() string { @@ -169,7 +169,7 @@ type CreateTaskResponse struct { func (x *CreateTaskResponse) Reset() { *x = CreateTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[1] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -182,7 +182,7 @@ func (x *CreateTaskResponse) String() string { func (*CreateTaskResponse) ProtoMessage() {} func (x *CreateTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[1] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -195,7 +195,7 @@ func (x *CreateTaskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTaskResponse.ProtoReflect.Descriptor instead. func (*CreateTaskResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{1} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{1} } func (x *CreateTaskResponse) GetContainerID() string { @@ -224,7 +224,7 @@ type StartRequest struct { func (x *StartRequest) Reset() { *x = StartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[2] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -237,7 +237,7 @@ func (x *StartRequest) String() string { func (*StartRequest) ProtoMessage() {} func (x *StartRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[2] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -250,7 +250,7 @@ func (x *StartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartRequest.ProtoReflect.Descriptor instead. func (*StartRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{2} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{2} } func (x *StartRequest) GetContainerID() string { @@ -278,7 +278,7 @@ type StartResponse struct { func (x *StartResponse) Reset() { *x = StartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[3] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -291,7 +291,7 @@ func (x *StartResponse) String() string { func (*StartResponse) ProtoMessage() {} func (x *StartResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[3] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -304,7 +304,7 @@ func (x *StartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartResponse.ProtoReflect.Descriptor instead. func (*StartResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{3} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{3} } func (x *StartResponse) GetPid() uint32 { @@ -325,7 +325,7 @@ type DeleteTaskRequest struct { func (x *DeleteTaskRequest) Reset() { *x = DeleteTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[4] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -338,7 +338,7 @@ func (x *DeleteTaskRequest) String() string { func (*DeleteTaskRequest) ProtoMessage() {} func (x *DeleteTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[4] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -351,7 +351,7 @@ func (x *DeleteTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTaskRequest.ProtoReflect.Descriptor instead. func (*DeleteTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{4} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{4} } func (x *DeleteTaskRequest) GetContainerID() string { @@ -375,7 +375,7 @@ type DeleteResponse struct { func (x *DeleteResponse) Reset() { *x = DeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[5] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -388,7 +388,7 @@ func (x *DeleteResponse) String() string { func (*DeleteResponse) ProtoMessage() {} func (x *DeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[5] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -401,7 +401,7 @@ func (x *DeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteResponse.ProtoReflect.Descriptor instead. func (*DeleteResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{5} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{5} } func (x *DeleteResponse) GetID() string { @@ -444,7 +444,7 @@ type DeleteProcessRequest struct { func (x *DeleteProcessRequest) Reset() { *x = DeleteProcessRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[6] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -457,7 +457,7 @@ func (x *DeleteProcessRequest) String() string { func (*DeleteProcessRequest) ProtoMessage() {} func (x *DeleteProcessRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[6] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -470,7 +470,7 @@ func (x *DeleteProcessRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteProcessRequest.ProtoReflect.Descriptor instead. func (*DeleteProcessRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{6} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{6} } func (x *DeleteProcessRequest) GetContainerID() string { @@ -499,7 +499,7 @@ type GetRequest struct { func (x *GetRequest) Reset() { *x = GetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[7] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -512,7 +512,7 @@ func (x *GetRequest) String() string { func (*GetRequest) ProtoMessage() {} func (x *GetRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[7] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -525,7 +525,7 @@ func (x *GetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRequest.ProtoReflect.Descriptor instead. func (*GetRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{7} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{7} } func (x *GetRequest) GetContainerID() string { @@ -553,7 +553,7 @@ type GetResponse struct { func (x *GetResponse) Reset() { *x = GetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[8] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -566,7 +566,7 @@ func (x *GetResponse) String() string { func (*GetResponse) ProtoMessage() {} func (x *GetResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[8] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -579,7 +579,7 @@ func (x *GetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetResponse.ProtoReflect.Descriptor instead. func (*GetResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{8} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{8} } func (x *GetResponse) GetProcess() *task.Process { @@ -600,7 +600,7 @@ type ListTasksRequest struct { func (x *ListTasksRequest) Reset() { *x = ListTasksRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[9] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -613,7 +613,7 @@ func (x *ListTasksRequest) String() string { func (*ListTasksRequest) ProtoMessage() {} func (x *ListTasksRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[9] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -626,7 +626,7 @@ func (x *ListTasksRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTasksRequest.ProtoReflect.Descriptor instead. func (*ListTasksRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{9} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{9} } func (x *ListTasksRequest) GetFilter() string { @@ -647,7 +647,7 @@ type ListTasksResponse struct { func (x *ListTasksResponse) Reset() { *x = ListTasksResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[10] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -660,7 +660,7 @@ func (x *ListTasksResponse) String() string { func (*ListTasksResponse) ProtoMessage() {} func (x *ListTasksResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[10] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -673,7 +673,7 @@ func (x *ListTasksResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTasksResponse.ProtoReflect.Descriptor instead. func (*ListTasksResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{10} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{10} } func (x *ListTasksResponse) GetTasks() []*task.Process { @@ -697,7 +697,7 @@ type KillRequest struct { func (x *KillRequest) Reset() { *x = KillRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[11] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -710,7 +710,7 @@ func (x *KillRequest) String() string { func (*KillRequest) ProtoMessage() {} func (x *KillRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[11] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -723,7 +723,7 @@ func (x *KillRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KillRequest.ProtoReflect.Descriptor instead. func (*KillRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{11} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{11} } func (x *KillRequest) GetContainerID() string { @@ -775,7 +775,7 @@ type ExecProcessRequest struct { func (x *ExecProcessRequest) Reset() { *x = ExecProcessRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[12] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -788,7 +788,7 @@ func (x *ExecProcessRequest) String() string { func (*ExecProcessRequest) ProtoMessage() {} func (x *ExecProcessRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[12] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -801,7 +801,7 @@ func (x *ExecProcessRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecProcessRequest.ProtoReflect.Descriptor instead. func (*ExecProcessRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{12} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{12} } func (x *ExecProcessRequest) GetContainerID() string { @@ -862,7 +862,7 @@ type ExecProcessResponse struct { func (x *ExecProcessResponse) Reset() { *x = ExecProcessResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[13] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -875,7 +875,7 @@ func (x *ExecProcessResponse) String() string { func (*ExecProcessResponse) ProtoMessage() {} func (x *ExecProcessResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[13] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -888,7 +888,7 @@ func (x *ExecProcessResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecProcessResponse.ProtoReflect.Descriptor instead. func (*ExecProcessResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{13} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{13} } type ResizePtyRequest struct { @@ -905,7 +905,7 @@ type ResizePtyRequest struct { func (x *ResizePtyRequest) Reset() { *x = ResizePtyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[14] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -918,7 +918,7 @@ func (x *ResizePtyRequest) String() string { func (*ResizePtyRequest) ProtoMessage() {} func (x *ResizePtyRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[14] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -931,7 +931,7 @@ func (x *ResizePtyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResizePtyRequest.ProtoReflect.Descriptor instead. func (*ResizePtyRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{14} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{14} } func (x *ResizePtyRequest) GetContainerID() string { @@ -975,7 +975,7 @@ type CloseIORequest struct { func (x *CloseIORequest) Reset() { *x = CloseIORequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[15] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -988,7 +988,7 @@ func (x *CloseIORequest) String() string { func (*CloseIORequest) ProtoMessage() {} func (x *CloseIORequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[15] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1001,7 +1001,7 @@ func (x *CloseIORequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CloseIORequest.ProtoReflect.Descriptor instead. func (*CloseIORequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{15} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{15} } func (x *CloseIORequest) GetContainerID() string { @@ -1036,7 +1036,7 @@ type PauseTaskRequest struct { func (x *PauseTaskRequest) Reset() { *x = PauseTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[16] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1049,7 +1049,7 @@ func (x *PauseTaskRequest) String() string { func (*PauseTaskRequest) ProtoMessage() {} func (x *PauseTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[16] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1062,7 +1062,7 @@ func (x *PauseTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseTaskRequest.ProtoReflect.Descriptor instead. func (*PauseTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{16} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{16} } func (x *PauseTaskRequest) GetContainerID() string { @@ -1083,7 +1083,7 @@ type ResumeTaskRequest struct { func (x *ResumeTaskRequest) Reset() { *x = ResumeTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[17] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1096,7 +1096,7 @@ func (x *ResumeTaskRequest) String() string { func (*ResumeTaskRequest) ProtoMessage() {} func (x *ResumeTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[17] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1109,7 +1109,7 @@ func (x *ResumeTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResumeTaskRequest.ProtoReflect.Descriptor instead. func (*ResumeTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{17} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{17} } func (x *ResumeTaskRequest) GetContainerID() string { @@ -1130,7 +1130,7 @@ type ListPidsRequest struct { func (x *ListPidsRequest) Reset() { *x = ListPidsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[18] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1143,7 +1143,7 @@ func (x *ListPidsRequest) String() string { func (*ListPidsRequest) ProtoMessage() {} func (x *ListPidsRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[18] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1156,7 +1156,7 @@ func (x *ListPidsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPidsRequest.ProtoReflect.Descriptor instead. func (*ListPidsRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{18} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{18} } func (x *ListPidsRequest) GetContainerID() string { @@ -1178,7 +1178,7 @@ type ListPidsResponse struct { func (x *ListPidsResponse) Reset() { *x = ListPidsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[19] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1191,7 +1191,7 @@ func (x *ListPidsResponse) String() string { func (*ListPidsResponse) ProtoMessage() {} func (x *ListPidsResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[19] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1204,7 +1204,7 @@ func (x *ListPidsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPidsResponse.ProtoReflect.Descriptor instead. func (*ListPidsResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{19} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{19} } func (x *ListPidsResponse) GetProcesses() []*task.ProcessInfo { @@ -1227,7 +1227,7 @@ type CheckpointTaskRequest struct { func (x *CheckpointTaskRequest) Reset() { *x = CheckpointTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[20] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1240,7 +1240,7 @@ func (x *CheckpointTaskRequest) String() string { func (*CheckpointTaskRequest) ProtoMessage() {} func (x *CheckpointTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[20] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1253,7 +1253,7 @@ func (x *CheckpointTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckpointTaskRequest.ProtoReflect.Descriptor instead. func (*CheckpointTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{20} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{20} } func (x *CheckpointTaskRequest) GetContainerID() string { @@ -1288,7 +1288,7 @@ type CheckpointTaskResponse struct { func (x *CheckpointTaskResponse) Reset() { *x = CheckpointTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[21] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1301,7 +1301,7 @@ func (x *CheckpointTaskResponse) String() string { func (*CheckpointTaskResponse) ProtoMessage() {} func (x *CheckpointTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[21] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1314,7 +1314,7 @@ func (x *CheckpointTaskResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckpointTaskResponse.ProtoReflect.Descriptor instead. func (*CheckpointTaskResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{21} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{21} } func (x *CheckpointTaskResponse) GetDescriptors() []*types.Descriptor { @@ -1337,7 +1337,7 @@ type UpdateTaskRequest struct { func (x *UpdateTaskRequest) Reset() { *x = UpdateTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[22] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1350,7 +1350,7 @@ func (x *UpdateTaskRequest) String() string { func (*UpdateTaskRequest) ProtoMessage() {} func (x *UpdateTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[22] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1363,7 +1363,7 @@ func (x *UpdateTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTaskRequest.ProtoReflect.Descriptor instead. func (*UpdateTaskRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{22} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{22} } func (x *UpdateTaskRequest) GetContainerID() string { @@ -1398,7 +1398,7 @@ type MetricsRequest struct { func (x *MetricsRequest) Reset() { *x = MetricsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[23] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1411,7 +1411,7 @@ func (x *MetricsRequest) String() string { func (*MetricsRequest) ProtoMessage() {} func (x *MetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[23] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1424,7 +1424,7 @@ func (x *MetricsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MetricsRequest.ProtoReflect.Descriptor instead. func (*MetricsRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{23} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{23} } func (x *MetricsRequest) GetFilters() []string { @@ -1445,7 +1445,7 @@ type MetricsResponse struct { func (x *MetricsResponse) Reset() { *x = MetricsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[24] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1458,7 +1458,7 @@ func (x *MetricsResponse) String() string { func (*MetricsResponse) ProtoMessage() {} func (x *MetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[24] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1471,7 +1471,7 @@ func (x *MetricsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MetricsResponse.ProtoReflect.Descriptor instead. func (*MetricsResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{24} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{24} } func (x *MetricsResponse) GetMetrics() []*types.Metric { @@ -1493,7 +1493,7 @@ type WaitRequest struct { func (x *WaitRequest) Reset() { *x = WaitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[25] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1506,7 +1506,7 @@ func (x *WaitRequest) String() string { func (*WaitRequest) ProtoMessage() {} func (x *WaitRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[25] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1519,7 +1519,7 @@ func (x *WaitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitRequest.ProtoReflect.Descriptor instead. func (*WaitRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{25} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{25} } func (x *WaitRequest) GetContainerID() string { @@ -1548,7 +1548,7 @@ type WaitResponse struct { func (x *WaitResponse) Reset() { *x = WaitResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[26] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1561,7 +1561,7 @@ func (x *WaitResponse) String() string { func (*WaitResponse) ProtoMessage() {} func (x *WaitResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[26] + mi := &file_services_tasks_v1_tasks_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1574,7 +1574,7 @@ func (x *WaitResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitResponse.ProtoReflect.Descriptor instead. func (*WaitResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{26} + return file_services_tasks_v1_tasks_proto_rawDescGZIP(), []int{26} } func (x *WaitResponse) GetExitStatus() uint32 { @@ -1591,329 +1591,317 @@ func (x *WaitResponse) GetExitedAt() *timestamppb.Timestamp { return nil } -var File_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDesc = []byte{ - 0x0a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, - 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x36, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3b, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xda, 0x02, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x6c, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, - 0x61, 0x74, 0x68, 0x22, 0x49, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, +var File_services_tasks_v1_tasks_proto protoreflect.FileDescriptor + +var file_services_tasks_v1_tasks_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x1c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, + 0x6b, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xda, 0x02, + 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, + 0x06, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x1a, 0x0a, + 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x49, 0x0a, 0x12, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x4a, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, + 0x64, 0x22, 0x21, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x70, 0x69, 0x64, 0x22, 0x36, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x4a, - 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x0d, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x36, 0x0a, - 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x8c, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, - 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, - 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x22, 0x52, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x48, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, - 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, - 0x49, 0x64, 0x22, 0x45, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x22, 0x2a, 0x0a, 0x10, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x47, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, - 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x61, - 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x73, - 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, - 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, - 0x61, 0x6c, 0x6c, 0x22, 0xdc, 0x01, 0x0a, 0x12, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, - 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, - 0x65, 0x72, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, - 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, - 0x63, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, - 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7c, 0x0a, 0x10, 0x52, 0x65, 0x73, - 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, + 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x8c, 0x01, 0x0a, + 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x52, 0x0a, 0x14, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, + 0x48, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, - 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, - 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x62, 0x0a, 0x0e, 0x43, 0x6c, 0x6f, 0x73, 0x65, - 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, - 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x22, 0x35, 0x0a, 0x10, 0x50, - 0x61, 0x75, 0x73, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x49, 0x64, 0x22, 0x36, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x34, 0x0a, 0x0f, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, - 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, - 0x22, 0x52, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2e, - 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x58, - 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x8e, 0x02, 0x0a, 0x11, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x0b, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x22, 0x2a, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x47, 0x0a, 0x11, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x05, + 0x74, 0x61, 0x73, 0x6b, 0x73, 0x22, 0x73, 0x0a, 0x0b, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0xdc, 0x01, 0x0a, 0x12, 0x45, + 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, + 0x64, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, + 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x78, 0x65, + 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x7c, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x62, + 0x0a, 0x0e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x64, + 0x69, 0x6e, 0x22, 0x35, 0x0a, 0x10, 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x11, 0x52, 0x65, 0x73, + 0x75, 0x6d, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x62, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2a, 0x0a, 0x0e, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x45, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x49, 0x0a, 0x0b, - 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x0c, 0x57, 0x61, 0x69, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, - 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x32, 0xdc, 0x0c, 0x0a, 0x05, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x6b, 0x0a, 0x06, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, - 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x64, 0x22, 0x34, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x52, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x09, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x15, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x58, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x22, + 0x8e, 0x02, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, + 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x62, 0x0a, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x2a, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x45, 0x0a, 0x0f, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x32, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x22, 0x49, 0x0a, 0x0b, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x22, 0x68, + 0x0a, 0x0c, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, + 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x32, 0xdc, 0x0c, 0x0a, 0x05, 0x54, 0x61, 0x73, + 0x6b, 0x73, 0x12, 0x6b, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x06, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x60, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, + 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x67, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, + 0x03, 0x47, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x28, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, - 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x67, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x4b, - 0x69, 0x6c, 0x6c, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x50, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, 0x30, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, - 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x53, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x69, - 0x7a, 0x65, 0x50, 0x74, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, 0x52, 0x65, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x04, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x49, 0x0a, 0x04, 0x4b, 0x69, 0x6c, 0x6c, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, - 0x07, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, - 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, - 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, - 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x50, 0x0a, + 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x69, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x64, 0x73, 0x12, 0x2d, + 0x53, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x50, 0x74, 0x79, 0x12, 0x2e, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x69, + 0x7a, 0x65, 0x50, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x07, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x12, + 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6c, 0x6f, 0x73, 0x65, 0x49, 0x4f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, - 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x33, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, + 0x75, 0x73, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x66, 0x0a, 0x07, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x69, 0x0a, 0x08, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x69, 0x64, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x5d, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, + 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, + 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x66, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x3e, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x61, 0x73, 0x6b, 0x73, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x04, 0x57, 0x61, 0x69, 0x74, + 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x57, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3e, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x76, + 0x31, 0x3b, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescData = file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDesc + file_services_tasks_v1_tasks_proto_rawDescOnce sync.Once + file_services_tasks_v1_tasks_proto_rawDescData = file_services_tasks_v1_tasks_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescData) +func file_services_tasks_v1_tasks_proto_rawDescGZIP() []byte { + file_services_tasks_v1_tasks_proto_rawDescOnce.Do(func() { + file_services_tasks_v1_tasks_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_tasks_v1_tasks_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDescData + return file_services_tasks_v1_tasks_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes = make([]protoimpl.MessageInfo, 28) -var file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_goTypes = []interface{}{ +var file_services_tasks_v1_tasks_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_services_tasks_v1_tasks_proto_goTypes = []interface{}{ (*CreateTaskRequest)(nil), // 0: containerd.services.tasks.v1.CreateTaskRequest (*CreateTaskResponse)(nil), // 1: containerd.services.tasks.v1.CreateTaskResponse (*StartRequest)(nil), // 2: containerd.services.tasks.v1.StartRequest @@ -1951,7 +1939,7 @@ var file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_goTy (*types.Metric)(nil), // 34: containerd.types.Metric (*emptypb.Empty)(nil), // 35: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_depIdxs = []int32{ +var file_services_tasks_v1_tasks_proto_depIdxs = []int32{ 28, // 0: containerd.services.tasks.v1.CreateTaskRequest.rootfs:type_name -> containerd.types.Mount 29, // 1: containerd.services.tasks.v1.CreateTaskRequest.checkpoint:type_name -> containerd.types.Descriptor 30, // 2: containerd.services.tasks.v1.CreateTaskRequest.options:type_name -> google.protobuf.Any @@ -2007,13 +1995,13 @@ var file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_depI 0, // [0:14] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_init() } -func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_init() { - if File_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto != nil { +func init() { file_services_tasks_v1_tasks_proto_init() } +func file_services_tasks_v1_tasks_proto_init() { + if File_services_tasks_v1_tasks_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateTaskRequest); i { case 0: return &v.state @@ -2025,7 +2013,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateTaskResponse); i { case 0: return &v.state @@ -2037,7 +2025,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartRequest); i { case 0: return &v.state @@ -2049,7 +2037,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartResponse); i { case 0: return &v.state @@ -2061,7 +2049,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteTaskRequest); i { case 0: return &v.state @@ -2073,7 +2061,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteResponse); i { case 0: return &v.state @@ -2085,7 +2073,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteProcessRequest); i { case 0: return &v.state @@ -2097,7 +2085,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetRequest); i { case 0: return &v.state @@ -2109,7 +2097,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetResponse); i { case 0: return &v.state @@ -2121,7 +2109,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListTasksRequest); i { case 0: return &v.state @@ -2133,7 +2121,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListTasksResponse); i { case 0: return &v.state @@ -2145,7 +2133,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KillRequest); i { case 0: return &v.state @@ -2157,7 +2145,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecProcessRequest); i { case 0: return &v.state @@ -2169,7 +2157,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecProcessResponse); i { case 0: return &v.state @@ -2181,7 +2169,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResizePtyRequest); i { case 0: return &v.state @@ -2193,7 +2181,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CloseIORequest); i { case 0: return &v.state @@ -2205,7 +2193,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PauseTaskRequest); i { case 0: return &v.state @@ -2217,7 +2205,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResumeTaskRequest); i { case 0: return &v.state @@ -2229,7 +2217,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListPidsRequest); i { case 0: return &v.state @@ -2241,7 +2229,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListPidsResponse); i { case 0: return &v.state @@ -2253,7 +2241,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckpointTaskRequest); i { case 0: return &v.state @@ -2265,7 +2253,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckpointTaskResponse); i { case 0: return &v.state @@ -2277,7 +2265,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateTaskRequest); i { case 0: return &v.state @@ -2289,7 +2277,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MetricsRequest); i { case 0: return &v.state @@ -2301,7 +2289,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MetricsResponse); i { case 0: return &v.state @@ -2313,7 +2301,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WaitRequest); i { case 0: return &v.state @@ -2325,7 +2313,7 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini return nil } } - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_services_tasks_v1_tasks_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WaitResponse); i { case 0: return &v.state @@ -2342,18 +2330,18 @@ func file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_ini out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDesc, + RawDescriptor: file_services_tasks_v1_tasks_proto_rawDesc, NumEnums: 0, NumMessages: 28, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_msgTypes, + GoTypes: file_services_tasks_v1_tasks_proto_goTypes, + DependencyIndexes: file_services_tasks_v1_tasks_proto_depIdxs, + MessageInfos: file_services_tasks_v1_tasks_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto = out.File - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_tasks_v1_tasks_proto_depIdxs = nil + File_services_tasks_v1_tasks_proto = out.File + file_services_tasks_v1_tasks_proto_rawDesc = nil + file_services_tasks_v1_tasks_proto_goTypes = nil + file_services_tasks_v1_tasks_proto_depIdxs = nil } diff --git a/api/services/tasks/v1/tasks.proto b/api/services/tasks/v1/tasks.proto index 8ddd31926029..4113f45bf5fa 100644 --- a/api/services/tasks/v1/tasks.proto +++ b/api/services/tasks/v1/tasks.proto @@ -1,227 +1,226 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.services.tasks.v1; -import "google/protobuf/empty.proto"; import "google/protobuf/any.proto"; -import "github.com/containerd/containerd/api/types/mount.proto"; -import "github.com/containerd/containerd/api/types/metrics.proto"; -import "github.com/containerd/containerd/api/types/descriptor.proto"; -import "github.com/containerd/containerd/api/types/task/task.proto"; +import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; +import "types/descriptor.proto"; +import "types/metrics.proto"; +import "types/mount.proto"; +import "types/task/task.proto"; option go_package = "github.com/containerd/containerd/api/services/tasks/v1;tasks"; service Tasks { - // Create a task. - rpc Create(CreateTaskRequest) returns (CreateTaskResponse); + // Create a task. + rpc Create(CreateTaskRequest) returns (CreateTaskResponse); - // Start a process. - rpc Start(StartRequest) returns (StartResponse); + // Start a process. + rpc Start(StartRequest) returns (StartResponse); - // Delete a task and on disk state. - rpc Delete(DeleteTaskRequest) returns (DeleteResponse); + // Delete a task and on disk state. + rpc Delete(DeleteTaskRequest) returns (DeleteResponse); - rpc DeleteProcess(DeleteProcessRequest) returns (DeleteResponse); + rpc DeleteProcess(DeleteProcessRequest) returns (DeleteResponse); - rpc Get(GetRequest) returns (GetResponse); + rpc Get(GetRequest) returns (GetResponse); - rpc List(ListTasksRequest) returns (ListTasksResponse); + rpc List(ListTasksRequest) returns (ListTasksResponse); - // Kill a task or process. - rpc Kill(KillRequest) returns (google.protobuf.Empty); + // Kill a task or process. + rpc Kill(KillRequest) returns (google.protobuf.Empty); - rpc Exec(ExecProcessRequest) returns (google.protobuf.Empty); + rpc Exec(ExecProcessRequest) returns (google.protobuf.Empty); - rpc ResizePty(ResizePtyRequest) returns (google.protobuf.Empty); + rpc ResizePty(ResizePtyRequest) returns (google.protobuf.Empty); - rpc CloseIO(CloseIORequest) returns (google.protobuf.Empty); + rpc CloseIO(CloseIORequest) returns (google.protobuf.Empty); - rpc Pause(PauseTaskRequest) returns (google.protobuf.Empty); + rpc Pause(PauseTaskRequest) returns (google.protobuf.Empty); - rpc Resume(ResumeTaskRequest) returns (google.protobuf.Empty); + rpc Resume(ResumeTaskRequest) returns (google.protobuf.Empty); - rpc ListPids(ListPidsRequest) returns (ListPidsResponse); + rpc ListPids(ListPidsRequest) returns (ListPidsResponse); - rpc Checkpoint(CheckpointTaskRequest) returns (CheckpointTaskResponse); + rpc Checkpoint(CheckpointTaskRequest) returns (CheckpointTaskResponse); - rpc Update(UpdateTaskRequest) returns (google.protobuf.Empty); + rpc Update(UpdateTaskRequest) returns (google.protobuf.Empty); - rpc Metrics(MetricsRequest) returns (MetricsResponse); + rpc Metrics(MetricsRequest) returns (MetricsResponse); - rpc Wait(WaitRequest) returns (WaitResponse); + rpc Wait(WaitRequest) returns (WaitResponse); } message CreateTaskRequest { - string container_id = 1; + string container_id = 1; - // RootFS provides the pre-chroot mounts to perform in the shim before - // executing the container task. - // - // These are for mounts that cannot be performed in the user namespace. - // Typically, these mounts should be resolved from snapshots specified on - // the container object. - repeated containerd.types.Mount rootfs = 3; + // RootFS provides the pre-chroot mounts to perform in the shim before + // executing the container task. + // + // These are for mounts that cannot be performed in the user namespace. + // Typically, these mounts should be resolved from snapshots specified on + // the container object. + repeated containerd.types.Mount rootfs = 3; - string stdin = 4; - string stdout = 5; - string stderr = 6; - bool terminal = 7; + string stdin = 4; + string stdout = 5; + string stderr = 6; + bool terminal = 7; - containerd.types.Descriptor checkpoint = 8; + containerd.types.Descriptor checkpoint = 8; - google.protobuf.Any options = 9; + google.protobuf.Any options = 9; - string runtime_path = 10; + string runtime_path = 10; } message CreateTaskResponse { - string container_id = 1; - uint32 pid = 2; + string container_id = 1; + uint32 pid = 2; } message StartRequest { - string container_id = 1; - string exec_id = 2; + string container_id = 1; + string exec_id = 2; } message StartResponse { - uint32 pid = 1; + uint32 pid = 1; } message DeleteTaskRequest { - string container_id = 1; + string container_id = 1; } message DeleteResponse { - string id = 1; - uint32 pid = 2; - uint32 exit_status = 3; - google.protobuf.Timestamp exited_at = 4; + string id = 1; + uint32 pid = 2; + uint32 exit_status = 3; + google.protobuf.Timestamp exited_at = 4; } message DeleteProcessRequest { - string container_id = 1; - string exec_id = 2; + string container_id = 1; + string exec_id = 2; } message GetRequest { - string container_id = 1; - string exec_id = 2; + string container_id = 1; + string exec_id = 2; } message GetResponse { - containerd.v1.types.Process process = 1; + containerd.v1.types.Process process = 1; } message ListTasksRequest { - string filter = 1; + string filter = 1; } message ListTasksResponse { - repeated containerd.v1.types.Process tasks = 1; + repeated containerd.v1.types.Process tasks = 1; } message KillRequest { - string container_id = 1; - string exec_id = 2; - uint32 signal = 3; - bool all = 4; + string container_id = 1; + string exec_id = 2; + uint32 signal = 3; + bool all = 4; } message ExecProcessRequest { - string container_id = 1; - string stdin = 2; - string stdout = 3; - string stderr = 4; - bool terminal = 5; - // Spec for starting a process in the target container. - // - // For runc, this is a process spec, for example. - google.protobuf.Any spec = 6; - // id of the exec process - string exec_id = 7; + string container_id = 1; + string stdin = 2; + string stdout = 3; + string stderr = 4; + bool terminal = 5; + // Spec for starting a process in the target container. + // + // For runc, this is a process spec, for example. + google.protobuf.Any spec = 6; + // id of the exec process + string exec_id = 7; } -message ExecProcessResponse { -} +message ExecProcessResponse {} message ResizePtyRequest { - string container_id = 1; - string exec_id = 2; - uint32 width = 3; - uint32 height = 4; + string container_id = 1; + string exec_id = 2; + uint32 width = 3; + uint32 height = 4; } message CloseIORequest { - string container_id = 1; - string exec_id = 2; - bool stdin = 3; + string container_id = 1; + string exec_id = 2; + bool stdin = 3; } message PauseTaskRequest { - string container_id = 1; + string container_id = 1; } message ResumeTaskRequest { - string container_id = 1; + string container_id = 1; } message ListPidsRequest { - string container_id = 1; + string container_id = 1; } message ListPidsResponse { - // Processes includes the process ID and additional process information - repeated containerd.v1.types.ProcessInfo processes = 1; + // Processes includes the process ID and additional process information + repeated containerd.v1.types.ProcessInfo processes = 1; } message CheckpointTaskRequest { - string container_id = 1; - string parent_checkpoint = 2; - google.protobuf.Any options = 3; + string container_id = 1; + string parent_checkpoint = 2; + google.protobuf.Any options = 3; } message CheckpointTaskResponse { - repeated containerd.types.Descriptor descriptors = 1; + repeated containerd.types.Descriptor descriptors = 1; } message UpdateTaskRequest { - string container_id = 1; - google.protobuf.Any resources = 2; - map annotations = 3; + string container_id = 1; + google.protobuf.Any resources = 2; + map annotations = 3; } message MetricsRequest { - repeated string filters = 1; + repeated string filters = 1; } message MetricsResponse { - repeated types.Metric metrics = 1; + repeated types.Metric metrics = 1; } message WaitRequest { - string container_id = 1; - string exec_id = 2; + string container_id = 1; + string exec_id = 2; } message WaitResponse { - uint32 exit_status = 1; - google.protobuf.Timestamp exited_at = 2; + uint32 exit_status = 1; + google.protobuf.Timestamp exited_at = 2; } diff --git a/api/services/tasks/v1/tasks_grpc.pb.go b/api/services/tasks/v1/tasks_grpc.pb.go index 3fd4057e9b9b..35581cd7b571 100644 --- a/api/services/tasks/v1/tasks_grpc.pb.go +++ b/api/services/tasks/v1/tasks_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/tasks/v1/tasks.proto +// - protoc (unknown) +// source: services/tasks/v1/tasks.proto package tasks @@ -686,5 +688,5 @@ var Tasks_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/tasks/v1/tasks.proto", + Metadata: "services/tasks/v1/tasks.proto", } diff --git a/api/services/tasks/v1/tasks_ttrpc.pb.go b/api/services/tasks/v1/tasks_ttrpc.pb.go new file mode 100644 index 000000000000..2e7cecde3811 --- /dev/null +++ b/api/services/tasks/v1/tasks_ttrpc.pb.go @@ -0,0 +1,301 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/tasks/v1/tasks.proto +package tasks + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCTasksService interface { + Create(context.Context, *CreateTaskRequest) (*CreateTaskResponse, error) + Start(context.Context, *StartRequest) (*StartResponse, error) + Delete(context.Context, *DeleteTaskRequest) (*DeleteResponse, error) + DeleteProcess(context.Context, *DeleteProcessRequest) (*DeleteResponse, error) + Get(context.Context, *GetRequest) (*GetResponse, error) + List(context.Context, *ListTasksRequest) (*ListTasksResponse, error) + Kill(context.Context, *KillRequest) (*emptypb.Empty, error) + Exec(context.Context, *ExecProcessRequest) (*emptypb.Empty, error) + ResizePty(context.Context, *ResizePtyRequest) (*emptypb.Empty, error) + CloseIO(context.Context, *CloseIORequest) (*emptypb.Empty, error) + Pause(context.Context, *PauseTaskRequest) (*emptypb.Empty, error) + Resume(context.Context, *ResumeTaskRequest) (*emptypb.Empty, error) + ListPids(context.Context, *ListPidsRequest) (*ListPidsResponse, error) + Checkpoint(context.Context, *CheckpointTaskRequest) (*CheckpointTaskResponse, error) + Update(context.Context, *UpdateTaskRequest) (*emptypb.Empty, error) + Metrics(context.Context, *MetricsRequest) (*MetricsResponse, error) + Wait(context.Context, *WaitRequest) (*WaitResponse, error) +} + +func RegisterTTRPCTasksService(srv *ttrpc.Server, svc TTRPCTasksService) { + srv.RegisterService("containerd.services.tasks.v1.Tasks", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Create": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CreateTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Create(ctx, &req) + }, + "Start": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req StartRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Start(ctx, &req) + }, + "Delete": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Delete(ctx, &req) + }, + "DeleteProcess": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req DeleteProcessRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.DeleteProcess(ctx, &req) + }, + "Get": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req GetRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Get(ctx, &req) + }, + "List": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ListTasksRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.List(ctx, &req) + }, + "Kill": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req KillRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Kill(ctx, &req) + }, + "Exec": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ExecProcessRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Exec(ctx, &req) + }, + "ResizePty": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ResizePtyRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.ResizePty(ctx, &req) + }, + "CloseIO": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CloseIORequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.CloseIO(ctx, &req) + }, + "Pause": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req PauseTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Pause(ctx, &req) + }, + "Resume": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ResumeTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Resume(ctx, &req) + }, + "ListPids": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req ListPidsRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.ListPids(ctx, &req) + }, + "Checkpoint": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req CheckpointTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Checkpoint(ctx, &req) + }, + "Update": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req UpdateTaskRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Update(ctx, &req) + }, + "Metrics": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req MetricsRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Metrics(ctx, &req) + }, + "Wait": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req WaitRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Wait(ctx, &req) + }, + }, + }) +} + +type ttrpctasksClient struct { + client *ttrpc.Client +} + +func NewTTRPCTasksClient(client *ttrpc.Client) TTRPCTasksService { + return &ttrpctasksClient{ + client: client, + } +} + +func (c *ttrpctasksClient) Create(ctx context.Context, req *CreateTaskRequest) (*CreateTaskResponse, error) { + var resp CreateTaskResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Create", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Start(ctx context.Context, req *StartRequest) (*StartResponse, error) { + var resp StartResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Start", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Delete(ctx context.Context, req *DeleteTaskRequest) (*DeleteResponse, error) { + var resp DeleteResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Delete", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) DeleteProcess(ctx context.Context, req *DeleteProcessRequest) (*DeleteResponse, error) { + var resp DeleteResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "DeleteProcess", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Get(ctx context.Context, req *GetRequest) (*GetResponse, error) { + var resp GetResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Get", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) List(ctx context.Context, req *ListTasksRequest) (*ListTasksResponse, error) { + var resp ListTasksResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "List", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Kill(ctx context.Context, req *KillRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Kill", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Exec(ctx context.Context, req *ExecProcessRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Exec", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) ResizePty(ctx context.Context, req *ResizePtyRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "ResizePty", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) CloseIO(ctx context.Context, req *CloseIORequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "CloseIO", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Pause(ctx context.Context, req *PauseTaskRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Pause", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Resume(ctx context.Context, req *ResumeTaskRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Resume", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) ListPids(ctx context.Context, req *ListPidsRequest) (*ListPidsResponse, error) { + var resp ListPidsResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "ListPids", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Checkpoint(ctx context.Context, req *CheckpointTaskRequest) (*CheckpointTaskResponse, error) { + var resp CheckpointTaskResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Checkpoint", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Update(ctx context.Context, req *UpdateTaskRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Update", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Metrics(ctx context.Context, req *MetricsRequest) (*MetricsResponse, error) { + var resp MetricsResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Metrics", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} + +func (c *ttrpctasksClient) Wait(ctx context.Context, req *WaitRequest) (*WaitResponse, error) { + var resp WaitResponse + if err := c.client.Call(ctx, "containerd.services.tasks.v1.Tasks", "Wait", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/transfer/v1/doc.go b/api/services/transfer/v1/doc.go new file mode 100644 index 000000000000..0882a6e922b9 --- /dev/null +++ b/api/services/transfer/v1/doc.go @@ -0,0 +1,17 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package transfer diff --git a/api/services/transfer/v1/transfer.pb.go b/api/services/transfer/v1/transfer.pb.go new file mode 100644 index 000000000000..074970be47fc --- /dev/null +++ b/api/services/transfer/v1/transfer.pb.go @@ -0,0 +1,271 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: services/transfer/v1/transfer.proto + +package transfer + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type TransferRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Source *anypb.Any `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + Destination *anypb.Any `protobuf:"bytes,2,opt,name=destination,proto3" json:"destination,omitempty"` + Options *TransferOptions `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` +} + +func (x *TransferRequest) Reset() { + *x = TransferRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_services_transfer_v1_transfer_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TransferRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransferRequest) ProtoMessage() {} + +func (x *TransferRequest) ProtoReflect() protoreflect.Message { + mi := &file_services_transfer_v1_transfer_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransferRequest.ProtoReflect.Descriptor instead. +func (*TransferRequest) Descriptor() ([]byte, []int) { + return file_services_transfer_v1_transfer_proto_rawDescGZIP(), []int{0} +} + +func (x *TransferRequest) GetSource() *anypb.Any { + if x != nil { + return x.Source + } + return nil +} + +func (x *TransferRequest) GetDestination() *anypb.Any { + if x != nil { + return x.Destination + } + return nil +} + +func (x *TransferRequest) GetOptions() *TransferOptions { + if x != nil { + return x.Options + } + return nil +} + +type TransferOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProgressStream string `protobuf:"bytes,1,opt,name=progress_stream,json=progressStream,proto3" json:"progress_stream,omitempty"` // Progress min interval +} + +func (x *TransferOptions) Reset() { + *x = TransferOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_services_transfer_v1_transfer_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TransferOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransferOptions) ProtoMessage() {} + +func (x *TransferOptions) ProtoReflect() protoreflect.Message { + mi := &file_services_transfer_v1_transfer_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransferOptions.ProtoReflect.Descriptor instead. +func (*TransferOptions) Descriptor() ([]byte, []int) { + return file_services_transfer_v1_transfer_proto_rawDescGZIP(), []int{1} +} + +func (x *TransferOptions) GetProgressStream() string { + if x != nil { + return x.ProgressStream + } + return "" +} + +var File_services_transfer_v1_transfer_proto protoreflect.FileDescriptor + +var file_services_transfer_v1_transfer_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc3, + 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x36, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3a, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x32, 0x60, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x08, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x42, 0x44, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_services_transfer_v1_transfer_proto_rawDescOnce sync.Once + file_services_transfer_v1_transfer_proto_rawDescData = file_services_transfer_v1_transfer_proto_rawDesc +) + +func file_services_transfer_v1_transfer_proto_rawDescGZIP() []byte { + file_services_transfer_v1_transfer_proto_rawDescOnce.Do(func() { + file_services_transfer_v1_transfer_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_transfer_v1_transfer_proto_rawDescData) + }) + return file_services_transfer_v1_transfer_proto_rawDescData +} + +var file_services_transfer_v1_transfer_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_services_transfer_v1_transfer_proto_goTypes = []interface{}{ + (*TransferRequest)(nil), // 0: containerd.services.transfer.v1.TransferRequest + (*TransferOptions)(nil), // 1: containerd.services.transfer.v1.TransferOptions + (*anypb.Any)(nil), // 2: google.protobuf.Any + (*emptypb.Empty)(nil), // 3: google.protobuf.Empty +} +var file_services_transfer_v1_transfer_proto_depIdxs = []int32{ + 2, // 0: containerd.services.transfer.v1.TransferRequest.source:type_name -> google.protobuf.Any + 2, // 1: containerd.services.transfer.v1.TransferRequest.destination:type_name -> google.protobuf.Any + 1, // 2: containerd.services.transfer.v1.TransferRequest.options:type_name -> containerd.services.transfer.v1.TransferOptions + 0, // 3: containerd.services.transfer.v1.Transfer.Transfer:input_type -> containerd.services.transfer.v1.TransferRequest + 3, // 4: containerd.services.transfer.v1.Transfer.Transfer:output_type -> google.protobuf.Empty + 4, // [4:5] is the sub-list for method output_type + 3, // [3:4] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_services_transfer_v1_transfer_proto_init() } +func file_services_transfer_v1_transfer_proto_init() { + if File_services_transfer_v1_transfer_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_services_transfer_v1_transfer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TransferRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_services_transfer_v1_transfer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TransferOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_services_transfer_v1_transfer_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_services_transfer_v1_transfer_proto_goTypes, + DependencyIndexes: file_services_transfer_v1_transfer_proto_depIdxs, + MessageInfos: file_services_transfer_v1_transfer_proto_msgTypes, + }.Build() + File_services_transfer_v1_transfer_proto = out.File + file_services_transfer_v1_transfer_proto_rawDesc = nil + file_services_transfer_v1_transfer_proto_goTypes = nil + file_services_transfer_v1_transfer_proto_depIdxs = nil +} diff --git a/api/services/transfer/v1/transfer.proto b/api/services/transfer/v1/transfer.proto new file mode 100644 index 000000000000..0ad0ae8e22b1 --- /dev/null +++ b/api/services/transfer/v1/transfer.proto @@ -0,0 +1,39 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.services.transfer.v1; + +import "google/protobuf/any.proto"; +import "google/protobuf/empty.proto"; + +option go_package = "github.com/containerd/containerd/api/services/transfer/v1;transfer"; + +service Transfer { + rpc Transfer(TransferRequest) returns (google.protobuf.Empty); +} + +message TransferRequest { + google.protobuf.Any source = 1; + google.protobuf.Any destination = 2; + TransferOptions options = 3; +} + +message TransferOptions { + string progress_stream = 1; + // Progress min interval +} diff --git a/api/services/transfer/v1/transfer_grpc.pb.go b/api/services/transfer/v1/transfer_grpc.pb.go new file mode 100644 index 000000000000..1d8323302a69 --- /dev/null +++ b/api/services/transfer/v1/transfer_grpc.pb.go @@ -0,0 +1,108 @@ +//go:build !no_grpc + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: services/transfer/v1/transfer.proto + +package transfer + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// TransferClient is the client API for Transfer service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type TransferClient interface { + Transfer(ctx context.Context, in *TransferRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type transferClient struct { + cc grpc.ClientConnInterface +} + +func NewTransferClient(cc grpc.ClientConnInterface) TransferClient { + return &transferClient{cc} +} + +func (c *transferClient) Transfer(ctx context.Context, in *TransferRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/containerd.services.transfer.v1.Transfer/Transfer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// TransferServer is the server API for Transfer service. +// All implementations must embed UnimplementedTransferServer +// for forward compatibility +type TransferServer interface { + Transfer(context.Context, *TransferRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedTransferServer() +} + +// UnimplementedTransferServer must be embedded to have forward compatible implementations. +type UnimplementedTransferServer struct { +} + +func (UnimplementedTransferServer) Transfer(context.Context, *TransferRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Transfer not implemented") +} +func (UnimplementedTransferServer) mustEmbedUnimplementedTransferServer() {} + +// UnsafeTransferServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to TransferServer will +// result in compilation errors. +type UnsafeTransferServer interface { + mustEmbedUnimplementedTransferServer() +} + +func RegisterTransferServer(s grpc.ServiceRegistrar, srv TransferServer) { + s.RegisterService(&Transfer_ServiceDesc, srv) +} + +func _Transfer_Transfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(TransferRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TransferServer).Transfer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/containerd.services.transfer.v1.Transfer/Transfer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TransferServer).Transfer(ctx, req.(*TransferRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Transfer_ServiceDesc is the grpc.ServiceDesc for Transfer service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Transfer_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "containerd.services.transfer.v1.Transfer", + HandlerType: (*TransferServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Transfer", + Handler: _Transfer_Transfer_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "services/transfer/v1/transfer.proto", +} diff --git a/api/services/transfer/v1/transfer_ttrpc.pb.go b/api/services/transfer/v1/transfer_ttrpc.pb.go new file mode 100644 index 000000000000..6d9404ebba35 --- /dev/null +++ b/api/services/transfer/v1/transfer_ttrpc.pb.go @@ -0,0 +1,45 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/transfer/v1/transfer.proto +package transfer + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCTransferService interface { + Transfer(context.Context, *TransferRequest) (*emptypb.Empty, error) +} + +func RegisterTTRPCTransferService(srv *ttrpc.Server, svc TTRPCTransferService) { + srv.RegisterService("containerd.services.transfer.v1.Transfer", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Transfer": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req TransferRequest + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Transfer(ctx, &req) + }, + }, + }) +} + +type ttrpctransferClient struct { + client *ttrpc.Client +} + +func NewTTRPCTransferClient(client *ttrpc.Client) TTRPCTransferService { + return &ttrpctransferClient{ + client: client, + } +} + +func (c *ttrpctransferClient) Transfer(ctx context.Context, req *TransferRequest) (*emptypb.Empty, error) { + var resp emptypb.Empty + if err := c.client.Call(ctx, "containerd.services.transfer.v1.Transfer", "Transfer", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/services/ttrpc/events/v1/doc.go b/api/services/ttrpc/events/v1/doc.go index d3d9839d639a..b374dde261bb 100644 --- a/api/services/ttrpc/events/v1/doc.go +++ b/api/services/ttrpc/events/v1/doc.go @@ -16,3 +16,8 @@ // Package events defines the ttrpc event service. package events + +import types "github.com/containerd/containerd/api/types" + +// Deprecated: Use [types.Envelope]. +type Envelope = types.Envelope diff --git a/api/services/ttrpc/events/v1/events.pb.go b/api/services/ttrpc/events/v1/events.pb.go index 221b183f7cef..e5ecb731a926 100644 --- a/api/services/ttrpc/events/v1/events.pb.go +++ b/api/services/ttrpc/events/v1/events.pb.go @@ -16,18 +16,16 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/ttrpc/events/v1/events.proto +// protoc (unknown) +// source: services/ttrpc/events/v1/events.proto package events import ( - _ "github.com/containerd/containerd/protobuf/plugin" + types "github.com/containerd/containerd/api/types" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -44,13 +42,13 @@ type ForwardRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Envelope *Envelope `protobuf:"bytes,1,opt,name=envelope,proto3" json:"envelope,omitempty"` + Envelope *types.Envelope `protobuf:"bytes,1,opt,name=envelope,proto3" json:"envelope,omitempty"` } func (x *ForwardRequest) Reset() { *x = ForwardRequest{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_msgTypes[0] + mi := &file_services_ttrpc_events_v1_events_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -63,7 +61,7 @@ func (x *ForwardRequest) String() string { func (*ForwardRequest) ProtoMessage() {} func (x *ForwardRequest) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_msgTypes[0] + mi := &file_services_ttrpc_events_v1_events_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -76,124 +74,32 @@ func (x *ForwardRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ForwardRequest.ProtoReflect.Descriptor instead. func (*ForwardRequest) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescGZIP(), []int{0} + return file_services_ttrpc_events_v1_events_proto_rawDescGZIP(), []int{0} } -func (x *ForwardRequest) GetEnvelope() *Envelope { +func (x *ForwardRequest) GetEnvelope() *types.Envelope { if x != nil { return x.Envelope } return nil } -type Envelope struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - Topic string `protobuf:"bytes,3,opt,name=topic,proto3" json:"topic,omitempty"` - Event *anypb.Any `protobuf:"bytes,4,opt,name=event,proto3" json:"event,omitempty"` -} - -func (x *Envelope) Reset() { - *x = Envelope{} - if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Envelope) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Envelope) ProtoMessage() {} - -func (x *Envelope) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Envelope.ProtoReflect.Descriptor instead. -func (*Envelope) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescGZIP(), []int{1} -} - -func (x *Envelope) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (x *Envelope) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} +var File_services_ttrpc_events_v1_events_proto protoreflect.FileDescriptor -func (x *Envelope) GetTopic() string { - if x != nil { - return x.Topic - } - return "" -} - -func (x *Envelope) GetEvent() *anypb.Any { - if x != nil { - return x.Event - } - return nil -} - -var File_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDesc = []byte{ - 0x0a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x74, 0x74, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x74, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x76, - 0x31, 0x1a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5b, 0x0a, 0x0e, - 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, +var file_services_ttrpc_events_v1_events_proto_rawDesc = []byte{ + 0x0a, 0x25, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x74, 0x74, 0x72, 0x70, 0x63, + 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x74, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x1a, 0x11, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x48, 0x0a, 0x0e, + 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x74, 0x74, - 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, - 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x22, 0xaa, 0x01, 0x0a, 0x08, 0x45, 0x6e, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x3a, 0x04, 0x80, 0xb9, 0x1f, 0x01, 0x32, 0x60, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x08, 0x65, 0x6e, + 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x32, 0x60, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x56, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x74, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x76, @@ -208,45 +114,41 @@ var file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_pr } var ( - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescData = file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDesc + file_services_ttrpc_events_v1_events_proto_rawDescOnce sync.Once + file_services_ttrpc_events_v1_events_proto_rawDescData = file_services_ttrpc_events_v1_events_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescData) +func file_services_ttrpc_events_v1_events_proto_rawDescGZIP() []byte { + file_services_ttrpc_events_v1_events_proto_rawDescOnce.Do(func() { + file_services_ttrpc_events_v1_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_ttrpc_events_v1_events_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDescData + return file_services_ttrpc_events_v1_events_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_goTypes = []interface{}{ - (*ForwardRequest)(nil), // 0: containerd.services.events.ttrpc.v1.ForwardRequest - (*Envelope)(nil), // 1: containerd.services.events.ttrpc.v1.Envelope - (*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp - (*anypb.Any)(nil), // 3: google.protobuf.Any - (*emptypb.Empty)(nil), // 4: google.protobuf.Empty +var file_services_ttrpc_events_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_services_ttrpc_events_v1_events_proto_goTypes = []interface{}{ + (*ForwardRequest)(nil), // 0: containerd.services.events.ttrpc.v1.ForwardRequest + (*types.Envelope)(nil), // 1: containerd.types.Envelope + (*emptypb.Empty)(nil), // 2: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_depIdxs = []int32{ - 1, // 0: containerd.services.events.ttrpc.v1.ForwardRequest.envelope:type_name -> containerd.services.events.ttrpc.v1.Envelope - 2, // 1: containerd.services.events.ttrpc.v1.Envelope.timestamp:type_name -> google.protobuf.Timestamp - 3, // 2: containerd.services.events.ttrpc.v1.Envelope.event:type_name -> google.protobuf.Any - 0, // 3: containerd.services.events.ttrpc.v1.Events.Forward:input_type -> containerd.services.events.ttrpc.v1.ForwardRequest - 4, // 4: containerd.services.events.ttrpc.v1.Events.Forward:output_type -> google.protobuf.Empty - 4, // [4:5] is the sub-list for method output_type - 3, // [3:4] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name +var file_services_ttrpc_events_v1_events_proto_depIdxs = []int32{ + 1, // 0: containerd.services.events.ttrpc.v1.ForwardRequest.envelope:type_name -> containerd.types.Envelope + 0, // 1: containerd.services.events.ttrpc.v1.Events.Forward:input_type -> containerd.services.events.ttrpc.v1.ForwardRequest + 2, // 2: containerd.services.events.ttrpc.v1.Events.Forward:output_type -> google.protobuf.Empty + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_init() } -func file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_init() { - if File_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto != nil { +func init() { file_services_ttrpc_events_v1_events_proto_init() } +func file_services_ttrpc_events_v1_events_proto_init() { + if File_services_ttrpc_events_v1_events_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_ttrpc_events_v1_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ForwardRequest); i { case 0: return &v.state @@ -258,35 +160,23 @@ func file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_p return nil } } - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Envelope); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDesc, + RawDescriptor: file_services_ttrpc_events_v1_events_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 1, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_msgTypes, + GoTypes: file_services_ttrpc_events_v1_events_proto_goTypes, + DependencyIndexes: file_services_ttrpc_events_v1_events_proto_depIdxs, + MessageInfos: file_services_ttrpc_events_v1_events_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto = out.File - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_ttrpc_events_v1_events_proto_depIdxs = nil + File_services_ttrpc_events_v1_events_proto = out.File + file_services_ttrpc_events_v1_events_proto_rawDesc = nil + file_services_ttrpc_events_v1_events_proto_goTypes = nil + file_services_ttrpc_events_v1_events_proto_depIdxs = nil } diff --git a/api/services/ttrpc/events/v1/events.proto b/api/services/ttrpc/events/v1/events.proto index e0c2f232d364..8b5527328d81 100644 --- a/api/services/ttrpc/events/v1/events.proto +++ b/api/services/ttrpc/events/v1/events.proto @@ -1,47 +1,37 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.services.events.ttrpc.v1; -import "github.com/containerd/containerd/protobuf/plugin/fieldpath.proto"; -import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; +import "types/event.proto"; option go_package = "github.com/containerd/containerd/api/services/ttrpc/events/v1;events"; service Events { - // Forward sends an event that has already been packaged into an envelope - // with a timestamp and namespace. - // - // This is useful if earlier timestamping is required or when forwarding on - // behalf of another component, namespace or publisher. - rpc Forward(ForwardRequest) returns (google.protobuf.Empty); + // Forward sends an event that has already been packaged into an envelope + // with a timestamp and namespace. + // + // This is useful if earlier timestamping is required or when forwarding on + // behalf of another component, namespace or publisher. + rpc Forward(ForwardRequest) returns (google.protobuf.Empty); } message ForwardRequest { - Envelope envelope = 1; -} - -message Envelope { - option (containerd.plugin.fieldpath) = true; - google.protobuf.Timestamp timestamp = 1; - string namespace = 2; - string topic = 3; - google.protobuf.Any event = 4; + containerd.types.Envelope envelope = 1; } diff --git a/api/services/ttrpc/events/v1/events_fieldpath.pb.go b/api/services/ttrpc/events/v1/events_fieldpath.pb.go deleted file mode 100644 index 9321e37ab66f..000000000000 --- a/api/services/ttrpc/events/v1/events_fieldpath.pb.go +++ /dev/null @@ -1,55 +0,0 @@ -// Code generated by protoc-gen-go-fieldpath. DO NOT EDIT. -// source: github.com/containerd/containerd/api/services/ttrpc/events/v1/events.proto -package events - -import ( - typeurl "github.com/containerd/typeurl" -) - -// Field returns the value for the given fieldpath as a string, if defined. -// If the value is not defined, the second value will be false. -func (m *ForwardRequest) Field(fieldpath []string) (string, bool) { - if len(fieldpath) == 0 { - return "", false - } - switch fieldpath[0] { - case "envelope": - // NOTE(stevvooe): This is probably not correct in many cases. - // We assume that the target message also implements the Field - // method, which isn't likely true in a lot of cases. - // - // If you have a broken build and have found this comment, - // you may be closer to a solution. - if m.Envelope == nil { - return "", false - } - return m.Envelope.Field(fieldpath[1:]) - } - return "", false -} - -// Field returns the value for the given fieldpath as a string, if defined. -// If the value is not defined, the second value will be false. -func (m *Envelope) Field(fieldpath []string) (string, bool) { - if len(fieldpath) == 0 { - return "", false - } - switch fieldpath[0] { - // unhandled: timestamp - case "namespace": - return string(m.Namespace), len(m.Namespace) > 0 - case "topic": - return string(m.Topic), len(m.Topic) > 0 - case "event": - decoded, err := typeurl.UnmarshalAny(m.Event) - if err != nil { - return "", false - } - adaptor, ok := decoded.(interface{ Field([]string) (string, bool) }) - if !ok { - return "", false - } - return adaptor.Field(fieldpath[1:]) - } - return "", false -} diff --git a/api/services/ttrpc/events/v1/events_ttrpc.pb.go b/api/services/ttrpc/events/v1/events_ttrpc.pb.go index 8828c6cbcc21..944b1385b290 100644 --- a/api/services/ttrpc/events/v1/events_ttrpc.pb.go +++ b/api/services/ttrpc/events/v1/events_ttrpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. -// source: github.com/containerd/containerd/api/services/ttrpc/events/v1/events.proto +// source: services/ttrpc/events/v1/events.proto package events import ( @@ -8,11 +8,11 @@ import ( emptypb "google.golang.org/protobuf/types/known/emptypb" ) -type EventsService interface { +type TTRPCEventsService interface { Forward(context.Context, *ForwardRequest) (*emptypb.Empty, error) } -func RegisterEventsService(srv *ttrpc.Server, svc EventsService) { +func RegisterTTRPCEventsService(srv *ttrpc.Server, svc TTRPCEventsService) { srv.RegisterService("containerd.services.events.ttrpc.v1.Events", &ttrpc.ServiceDesc{ Methods: map[string]ttrpc.Method{ "Forward": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { @@ -26,17 +26,17 @@ func RegisterEventsService(srv *ttrpc.Server, svc EventsService) { }) } -type eventsClient struct { +type ttrpceventsClient struct { client *ttrpc.Client } -func NewEventsClient(client *ttrpc.Client) EventsService { - return &eventsClient{ +func NewTTRPCEventsClient(client *ttrpc.Client) TTRPCEventsService { + return &ttrpceventsClient{ client: client, } } -func (c *eventsClient) Forward(ctx context.Context, req *ForwardRequest) (*emptypb.Empty, error) { +func (c *ttrpceventsClient) Forward(ctx context.Context, req *ForwardRequest) (*emptypb.Empty, error) { var resp emptypb.Empty if err := c.client.Call(ctx, "containerd.services.events.ttrpc.v1.Events", "Forward", req, &resp); err != nil { return nil, err diff --git a/api/services/version/v1/version.pb.go b/api/services/version/v1/version.pb.go index c087d3e26be1..54beb4f7b225 100644 --- a/api/services/version/v1/version.pb.go +++ b/api/services/version/v1/version.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/version/v1/version.proto +// protoc (unknown) +// source: services/version/v1/version.proto package version @@ -48,7 +48,7 @@ type VersionResponse struct { func (x *VersionResponse) Reset() { *x = VersionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_services_version_v1_version_proto_msgTypes[0] + mi := &file_services_version_v1_version_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -61,7 +61,7 @@ func (x *VersionResponse) String() string { func (*VersionResponse) ProtoMessage() {} func (x *VersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_services_version_v1_version_proto_msgTypes[0] + mi := &file_services_version_v1_version_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -74,7 +74,7 @@ func (x *VersionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead. func (*VersionResponse) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDescGZIP(), []int{0} + return file_services_version_v1_version_proto_rawDescGZIP(), []int{0} } func (x *VersionResponse) GetVersion() string { @@ -91,53 +91,51 @@ func (x *VersionResponse) GetRevision() string { return "" } -var File_github_com_containerd_containerd_api_services_version_v1_version_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDesc = []byte{ - 0x0a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, +var File_services_version_v1_version_proto protoreflect.FileDescriptor + +var file_services_version_v1_version_proto_rawDesc = []byte{ + 0x0a, 0x21, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x47, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x5d, 0x0a, 0x07, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x47, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x5d, - 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x07, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2f, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x42, 0x5a, - 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDescData = file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDesc + file_services_version_v1_version_proto_rawDescOnce sync.Once + file_services_version_v1_version_proto_rawDescData = file_services_version_v1_version_proto_rawDesc ) -func file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDescData) +func file_services_version_v1_version_proto_rawDescGZIP() []byte { + file_services_version_v1_version_proto_rawDescOnce.Do(func() { + file_services_version_v1_version_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_version_v1_version_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDescData + return file_services_version_v1_version_proto_rawDescData } -var file_github_com_containerd_containerd_api_services_version_v1_version_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_github_com_containerd_containerd_api_services_version_v1_version_proto_goTypes = []interface{}{ +var file_services_version_v1_version_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_services_version_v1_version_proto_goTypes = []interface{}{ (*VersionResponse)(nil), // 0: containerd.services.version.v1.VersionResponse (*emptypb.Empty)(nil), // 1: google.protobuf.Empty } -var file_github_com_containerd_containerd_api_services_version_v1_version_proto_depIdxs = []int32{ +var file_services_version_v1_version_proto_depIdxs = []int32{ 1, // 0: containerd.services.version.v1.Version.Version:input_type -> google.protobuf.Empty 0, // 1: containerd.services.version.v1.Version.Version:output_type -> containerd.services.version.v1.VersionResponse 1, // [1:2] is the sub-list for method output_type @@ -147,13 +145,13 @@ var file_github_com_containerd_containerd_api_services_version_v1_version_proto_ 0, // [0:0] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_services_version_v1_version_proto_init() } -func file_github_com_containerd_containerd_api_services_version_v1_version_proto_init() { - if File_github_com_containerd_containerd_api_services_version_v1_version_proto != nil { +func init() { file_services_version_v1_version_proto_init() } +func file_services_version_v1_version_proto_init() { + if File_services_version_v1_version_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_services_version_v1_version_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_services_version_v1_version_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VersionResponse); i { case 0: return &v.state @@ -170,18 +168,18 @@ func file_github_com_containerd_containerd_api_services_version_v1_version_proto out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDesc, + RawDescriptor: file_services_version_v1_version_proto_rawDesc, NumEnums: 0, NumMessages: 1, NumExtensions: 0, NumServices: 1, }, - GoTypes: file_github_com_containerd_containerd_api_services_version_v1_version_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_services_version_v1_version_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_services_version_v1_version_proto_msgTypes, + GoTypes: file_services_version_v1_version_proto_goTypes, + DependencyIndexes: file_services_version_v1_version_proto_depIdxs, + MessageInfos: file_services_version_v1_version_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_services_version_v1_version_proto = out.File - file_github_com_containerd_containerd_api_services_version_v1_version_proto_rawDesc = nil - file_github_com_containerd_containerd_api_services_version_v1_version_proto_goTypes = nil - file_github_com_containerd_containerd_api_services_version_v1_version_proto_depIdxs = nil + File_services_version_v1_version_proto = out.File + file_services_version_v1_version_proto_rawDesc = nil + file_services_version_v1_version_proto_goTypes = nil + file_services_version_v1_version_proto_depIdxs = nil } diff --git a/api/services/version/v1/version.proto b/api/services/version/v1/version.proto index bd948ff343b3..c331098e59a7 100644 --- a/api/services/version/v1/version.proto +++ b/api/services/version/v1/version.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -24,10 +24,10 @@ import "google/protobuf/empty.proto"; option go_package = "github.com/containerd/containerd/api/services/version/v1;version"; service Version { - rpc Version(google.protobuf.Empty) returns (VersionResponse); + rpc Version(google.protobuf.Empty) returns (VersionResponse); } message VersionResponse { - string version = 1; - string revision = 2; + string version = 1; + string revision = 2; } diff --git a/api/services/version/v1/version_grpc.pb.go b/api/services/version/v1/version_grpc.pb.go index 4070fd834750..1e69df4327b3 100644 --- a/api/services/version/v1/version_grpc.pb.go +++ b/api/services/version/v1/version_grpc.pb.go @@ -1,8 +1,10 @@ +//go:build !no_grpc + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v3.20.1 -// source: github.com/containerd/containerd/api/services/version/v1/version.proto +// - protoc (unknown) +// source: services/version/v1/version.proto package version @@ -102,5 +104,5 @@ var Version_ServiceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "github.com/containerd/containerd/api/services/version/v1/version.proto", + Metadata: "services/version/v1/version.proto", } diff --git a/api/services/version/v1/version_ttrpc.pb.go b/api/services/version/v1/version_ttrpc.pb.go new file mode 100644 index 000000000000..4f8926326af5 --- /dev/null +++ b/api/services/version/v1/version_ttrpc.pb.go @@ -0,0 +1,45 @@ +// Code generated by protoc-gen-go-ttrpc. DO NOT EDIT. +// source: services/version/v1/version.proto +package version + +import ( + context "context" + ttrpc "github.com/containerd/ttrpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +type TTRPCVersionService interface { + Version(context.Context, *emptypb.Empty) (*VersionResponse, error) +} + +func RegisterTTRPCVersionService(srv *ttrpc.Server, svc TTRPCVersionService) { + srv.RegisterService("containerd.services.version.v1.Version", &ttrpc.ServiceDesc{ + Methods: map[string]ttrpc.Method{ + "Version": func(ctx context.Context, unmarshal func(interface{}) error) (interface{}, error) { + var req emptypb.Empty + if err := unmarshal(&req); err != nil { + return nil, err + } + return svc.Version(ctx, &req) + }, + }, + }) +} + +type ttrpcversionClient struct { + client *ttrpc.Client +} + +func NewTTRPCVersionClient(client *ttrpc.Client) TTRPCVersionService { + return &ttrpcversionClient{ + client: client, + } +} + +func (c *ttrpcversionClient) Version(ctx context.Context, req *emptypb.Empty) (*VersionResponse, error) { + var resp VersionResponse + if err := c.client.Call(ctx, "containerd.services.version.v1.Version", "Version", req, &resp); err != nil { + return nil, err + } + return &resp, nil +} diff --git a/api/types/descriptor.pb.go b/api/types/descriptor.pb.go index f3db1c52d960..ebc43750dd9b 100644 --- a/api/types/descriptor.pb.go +++ b/api/types/descriptor.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/types/descriptor.proto +// protoc (unknown) +// source: types/descriptor.proto package types @@ -54,7 +54,7 @@ type Descriptor struct { func (x *Descriptor) Reset() { *x = Descriptor{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_types_descriptor_proto_msgTypes[0] + mi := &file_types_descriptor_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -67,7 +67,7 @@ func (x *Descriptor) String() string { func (*Descriptor) ProtoMessage() {} func (x *Descriptor) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_types_descriptor_proto_msgTypes[0] + mi := &file_types_descriptor_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -80,7 +80,7 @@ func (x *Descriptor) ProtoReflect() protoreflect.Message { // Deprecated: Use Descriptor.ProtoReflect.Descriptor instead. func (*Descriptor) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_descriptor_proto_rawDescGZIP(), []int{0} + return file_types_descriptor_proto_rawDescGZIP(), []int{0} } func (x *Descriptor) GetMediaType() string { @@ -111,53 +111,51 @@ func (x *Descriptor) GetAnnotations() map[string]string { return nil } -var File_github_com_containerd_containerd_api_types_descriptor_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_types_descriptor_proto_rawDesc = []byte{ - 0x0a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, - 0xe8, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +var File_types_descriptor_proto protoreflect.FileDescriptor + +var file_types_descriptor_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x0a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, + 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, + 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, + 0x73, 0x69, 0x7a, 0x65, 0x12, 0x4f, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( - file_github_com_containerd_containerd_api_types_descriptor_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_types_descriptor_proto_rawDescData = file_github_com_containerd_containerd_api_types_descriptor_proto_rawDesc + file_types_descriptor_proto_rawDescOnce sync.Once + file_types_descriptor_proto_rawDescData = file_types_descriptor_proto_rawDesc ) -func file_github_com_containerd_containerd_api_types_descriptor_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_types_descriptor_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_types_descriptor_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_types_descriptor_proto_rawDescData) +func file_types_descriptor_proto_rawDescGZIP() []byte { + file_types_descriptor_proto_rawDescOnce.Do(func() { + file_types_descriptor_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_descriptor_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_types_descriptor_proto_rawDescData + return file_types_descriptor_proto_rawDescData } -var file_github_com_containerd_containerd_api_types_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_github_com_containerd_containerd_api_types_descriptor_proto_goTypes = []interface{}{ +var file_types_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_types_descriptor_proto_goTypes = []interface{}{ (*Descriptor)(nil), // 0: containerd.types.Descriptor nil, // 1: containerd.types.Descriptor.AnnotationsEntry } -var file_github_com_containerd_containerd_api_types_descriptor_proto_depIdxs = []int32{ +var file_types_descriptor_proto_depIdxs = []int32{ 1, // 0: containerd.types.Descriptor.annotations:type_name -> containerd.types.Descriptor.AnnotationsEntry 1, // [1:1] is the sub-list for method output_type 1, // [1:1] is the sub-list for method input_type @@ -166,13 +164,13 @@ var file_github_com_containerd_containerd_api_types_descriptor_proto_depIdxs = [ 0, // [0:1] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_types_descriptor_proto_init() } -func file_github_com_containerd_containerd_api_types_descriptor_proto_init() { - if File_github_com_containerd_containerd_api_types_descriptor_proto != nil { +func init() { file_types_descriptor_proto_init() } +func file_types_descriptor_proto_init() { + if File_types_descriptor_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_types_descriptor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_types_descriptor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Descriptor); i { case 0: return &v.state @@ -189,18 +187,18 @@ func file_github_com_containerd_containerd_api_types_descriptor_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_types_descriptor_proto_rawDesc, + RawDescriptor: file_types_descriptor_proto_rawDesc, NumEnums: 0, NumMessages: 2, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_types_descriptor_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_types_descriptor_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_types_descriptor_proto_msgTypes, + GoTypes: file_types_descriptor_proto_goTypes, + DependencyIndexes: file_types_descriptor_proto_depIdxs, + MessageInfos: file_types_descriptor_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_types_descriptor_proto = out.File - file_github_com_containerd_containerd_api_types_descriptor_proto_rawDesc = nil - file_github_com_containerd_containerd_api_types_descriptor_proto_goTypes = nil - file_github_com_containerd_containerd_api_types_descriptor_proto_depIdxs = nil + File_types_descriptor_proto = out.File + file_types_descriptor_proto_rawDesc = nil + file_types_descriptor_proto_goTypes = nil + file_types_descriptor_proto_depIdxs = nil } diff --git a/api/types/descriptor.proto b/api/types/descriptor.proto index faaf416dd10c..9baadad19658 100644 --- a/api/types/descriptor.proto +++ b/api/types/descriptor.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -26,8 +26,8 @@ option go_package = "github.com/containerd/containerd/api/types;types"; // oci descriptor found in a manifest. // See https://godoc.org/github.com/opencontainers/image-spec/specs-go/v1#Descriptor message Descriptor { - string media_type = 1; - string digest = 2; - int64 size = 3; - map annotations = 5; + string media_type = 1; + string digest = 2; + int64 size = 3; + map annotations = 5; } diff --git a/api/types/event.pb.go b/api/types/event.pb.go new file mode 100644 index 000000000000..3c514375bf7c --- /dev/null +++ b/api/types/event.pb.go @@ -0,0 +1,205 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/event.proto + +package types + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Envelope struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + Topic string `protobuf:"bytes,3,opt,name=topic,proto3" json:"topic,omitempty"` + Event *anypb.Any `protobuf:"bytes,4,opt,name=event,proto3" json:"event,omitempty"` +} + +func (x *Envelope) Reset() { + *x = Envelope{} + if protoimpl.UnsafeEnabled { + mi := &file_types_event_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Envelope) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Envelope) ProtoMessage() {} + +func (x *Envelope) ProtoReflect() protoreflect.Message { + mi := &file_types_event_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Envelope.ProtoReflect.Descriptor instead. +func (*Envelope) Descriptor() ([]byte, []int) { + return file_types_event_proto_rawDescGZIP(), []int{0} +} + +func (x *Envelope) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *Envelope) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Envelope) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *Envelope) GetEvent() *anypb.Any { + if x != nil { + return x.Event + } + return nil +} + +var File_types_event_proto protoreflect.FileDescriptor + +var file_types_event_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x15, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaa, 0x01, 0x0a, 0x08, 0x45, 0x6e, 0x76, + 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x3a, + 0x04, 0x80, 0xb9, 0x1f, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_types_event_proto_rawDescOnce sync.Once + file_types_event_proto_rawDescData = file_types_event_proto_rawDesc +) + +func file_types_event_proto_rawDescGZIP() []byte { + file_types_event_proto_rawDescOnce.Do(func() { + file_types_event_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_event_proto_rawDescData) + }) + return file_types_event_proto_rawDescData +} + +var file_types_event_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_types_event_proto_goTypes = []interface{}{ + (*Envelope)(nil), // 0: containerd.types.Envelope + (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp + (*anypb.Any)(nil), // 2: google.protobuf.Any +} +var file_types_event_proto_depIdxs = []int32{ + 1, // 0: containerd.types.Envelope.timestamp:type_name -> google.protobuf.Timestamp + 2, // 1: containerd.types.Envelope.event:type_name -> google.protobuf.Any + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_types_event_proto_init() } +func file_types_event_proto_init() { + if File_types_event_proto != nil { + return + } + file_types_fieldpath_proto_init() + if !protoimpl.UnsafeEnabled { + file_types_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Envelope); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_event_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_event_proto_goTypes, + DependencyIndexes: file_types_event_proto_depIdxs, + MessageInfos: file_types_event_proto_msgTypes, + }.Build() + File_types_event_proto = out.File + file_types_event_proto_rawDesc = nil + file_types_event_proto_goTypes = nil + file_types_event_proto_depIdxs = nil +} diff --git a/api/types/event.proto b/api/types/event.proto new file mode 100644 index 000000000000..0b9c3fb9375c --- /dev/null +++ b/api/types/event.proto @@ -0,0 +1,33 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.types; + +import "google/protobuf/any.proto"; +import "google/protobuf/timestamp.proto"; +import "types/fieldpath.proto"; + +option go_package = "github.com/containerd/containerd/api/types;types"; + +message Envelope { + option (containerd.types.fieldpath) = true; + google.protobuf.Timestamp timestamp = 1; + string namespace = 2; + string topic = 3; + google.protobuf.Any event = 4; +} diff --git a/api/types/fieldpath.pb.go b/api/types/fieldpath.pb.go new file mode 100644 index 000000000000..64172a51ed4b --- /dev/null +++ b/api/types/fieldpath.pb.go @@ -0,0 +1,142 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/fieldpath.proto + +package types + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var file_types_fieldpath_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.FileOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 63300, + Name: "containerd.types.fieldpath_all", + Tag: "varint,63300,opt,name=fieldpath_all", + Filename: "types/fieldpath.proto", + }, + { + ExtendedType: (*descriptorpb.MessageOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 64400, + Name: "containerd.types.fieldpath", + Tag: "varint,64400,opt,name=fieldpath", + Filename: "types/fieldpath.proto", + }, +} + +// Extension fields to descriptorpb.FileOptions. +var ( + // optional bool fieldpath_all = 63300; + E_FieldpathAll = &file_types_fieldpath_proto_extTypes[0] +) + +// Extension fields to descriptorpb.MessageOptions. +var ( + // optional bool fieldpath = 64400; + E_Fieldpath = &file_types_fieldpath_proto_extTypes[1] +) + +var File_types_fieldpath_proto protoreflect.FileDescriptor + +var file_types_fieldpath_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, + 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x46, 0x0a, 0x0d, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x61, 0x6c, 0x6c, 0x12, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xc4, 0xee, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, 0x41, 0x6c, 0x6c, + 0x88, 0x01, 0x01, 0x3a, 0x42, 0x0a, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x70, 0x61, 0x74, 0x68, + 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x90, 0xf7, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x70, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var file_types_fieldpath_proto_goTypes = []interface{}{ + (*descriptorpb.FileOptions)(nil), // 0: google.protobuf.FileOptions + (*descriptorpb.MessageOptions)(nil), // 1: google.protobuf.MessageOptions +} +var file_types_fieldpath_proto_depIdxs = []int32{ + 0, // 0: containerd.types.fieldpath_all:extendee -> google.protobuf.FileOptions + 1, // 1: containerd.types.fieldpath:extendee -> google.protobuf.MessageOptions + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 0, // [0:2] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_types_fieldpath_proto_init() } +func file_types_fieldpath_proto_init() { + if File_types_fieldpath_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_fieldpath_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 2, + NumServices: 0, + }, + GoTypes: file_types_fieldpath_proto_goTypes, + DependencyIndexes: file_types_fieldpath_proto_depIdxs, + ExtensionInfos: file_types_fieldpath_proto_extTypes, + }.Build() + File_types_fieldpath_proto = out.File + file_types_fieldpath_proto_rawDesc = nil + file_types_fieldpath_proto_goTypes = nil + file_types_fieldpath_proto_depIdxs = nil +} diff --git a/api/types/fieldpath.proto b/api/types/fieldpath.proto new file mode 100644 index 000000000000..bb5591da5eaa --- /dev/null +++ b/api/types/fieldpath.proto @@ -0,0 +1,42 @@ +// Protocol Buffers for Go with Gadgets +// +// Copyright (c) 2013, The GoGo Authors. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; +package containerd.types; + +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/containerd/containerd/api/types;types"; + +extend google.protobuf.FileOptions { + optional bool fieldpath_all = 63300; +} + +extend google.protobuf.MessageOptions { + optional bool fieldpath = 64400; +} diff --git a/api/types/introspection.pb.go b/api/types/introspection.pb.go new file mode 100644 index 000000000000..b5f8044731d4 --- /dev/null +++ b/api/types/introspection.pb.go @@ -0,0 +1,373 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/introspection.proto + +package types + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RuntimeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RuntimePath string `protobuf:"bytes,1,opt,name=runtime_path,json=runtimePath,proto3" json:"runtime_path,omitempty"` + // Options correspond to CreateTaskRequest.options. + // This is needed to pass the runc binary path, etc. + Options *anypb.Any `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` +} + +func (x *RuntimeRequest) Reset() { + *x = RuntimeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_types_introspection_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RuntimeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RuntimeRequest) ProtoMessage() {} + +func (x *RuntimeRequest) ProtoReflect() protoreflect.Message { + mi := &file_types_introspection_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RuntimeRequest.ProtoReflect.Descriptor instead. +func (*RuntimeRequest) Descriptor() ([]byte, []int) { + return file_types_introspection_proto_rawDescGZIP(), []int{0} +} + +func (x *RuntimeRequest) GetRuntimePath() string { + if x != nil { + return x.RuntimePath + } + return "" +} + +func (x *RuntimeRequest) GetOptions() *anypb.Any { + if x != nil { + return x.Options + } + return nil +} + +type RuntimeVersion struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + Revision string `protobuf:"bytes,2,opt,name=revision,proto3" json:"revision,omitempty"` +} + +func (x *RuntimeVersion) Reset() { + *x = RuntimeVersion{} + if protoimpl.UnsafeEnabled { + mi := &file_types_introspection_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RuntimeVersion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RuntimeVersion) ProtoMessage() {} + +func (x *RuntimeVersion) ProtoReflect() protoreflect.Message { + mi := &file_types_introspection_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RuntimeVersion.ProtoReflect.Descriptor instead. +func (*RuntimeVersion) Descriptor() ([]byte, []int) { + return file_types_introspection_proto_rawDescGZIP(), []int{1} +} + +func (x *RuntimeVersion) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *RuntimeVersion) GetRevision() string { + if x != nil { + return x.Revision + } + return "" +} + +type RuntimeInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Version *RuntimeVersion `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Options correspond to RuntimeInfoRequest.Options (contains runc binary path, etc.) + Options *anypb.Any `protobuf:"bytes,3,opt,name=options,proto3" json:"options,omitempty"` + // OCI-compatible runtimes should use https://github.com/opencontainers/runtime-spec/blob/main/features.md + Features *anypb.Any `protobuf:"bytes,4,opt,name=features,proto3" json:"features,omitempty"` + // Annotations of the shim. Irrelevant to features.Annotations. + Annotations map[string]string `protobuf:"bytes,5,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *RuntimeInfo) Reset() { + *x = RuntimeInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_types_introspection_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RuntimeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RuntimeInfo) ProtoMessage() {} + +func (x *RuntimeInfo) ProtoReflect() protoreflect.Message { + mi := &file_types_introspection_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RuntimeInfo.ProtoReflect.Descriptor instead. +func (*RuntimeInfo) Descriptor() ([]byte, []int) { + return file_types_introspection_proto_rawDescGZIP(), []int{2} +} + +func (x *RuntimeInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RuntimeInfo) GetVersion() *RuntimeVersion { + if x != nil { + return x.Version + } + return nil +} + +func (x *RuntimeInfo) GetOptions() *anypb.Any { + if x != nil { + return x.Options + } + return nil +} + +func (x *RuntimeInfo) GetFeatures() *anypb.Any { + if x != nil { + return x.Features + } + return nil +} + +func (x *RuntimeInfo) GetAnnotations() map[string]string { + if x != nil { + return x.Annotations + } + return nil +} + +var File_types_introspection_proto protoreflect.FileDescriptor + +var file_types_introspection_proto_rawDesc = []byte{ + 0x0a, 0x19, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x19, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, + 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2e, 0x0a, + 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x46, 0x0a, + 0x0e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd1, 0x02, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_types_introspection_proto_rawDescOnce sync.Once + file_types_introspection_proto_rawDescData = file_types_introspection_proto_rawDesc +) + +func file_types_introspection_proto_rawDescGZIP() []byte { + file_types_introspection_proto_rawDescOnce.Do(func() { + file_types_introspection_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_introspection_proto_rawDescData) + }) + return file_types_introspection_proto_rawDescData +} + +var file_types_introspection_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_types_introspection_proto_goTypes = []interface{}{ + (*RuntimeRequest)(nil), // 0: containerd.types.RuntimeRequest + (*RuntimeVersion)(nil), // 1: containerd.types.RuntimeVersion + (*RuntimeInfo)(nil), // 2: containerd.types.RuntimeInfo + nil, // 3: containerd.types.RuntimeInfo.AnnotationsEntry + (*anypb.Any)(nil), // 4: google.protobuf.Any +} +var file_types_introspection_proto_depIdxs = []int32{ + 4, // 0: containerd.types.RuntimeRequest.options:type_name -> google.protobuf.Any + 1, // 1: containerd.types.RuntimeInfo.version:type_name -> containerd.types.RuntimeVersion + 4, // 2: containerd.types.RuntimeInfo.options:type_name -> google.protobuf.Any + 4, // 3: containerd.types.RuntimeInfo.features:type_name -> google.protobuf.Any + 3, // 4: containerd.types.RuntimeInfo.annotations:type_name -> containerd.types.RuntimeInfo.AnnotationsEntry + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_types_introspection_proto_init() } +func file_types_introspection_proto_init() { + if File_types_introspection_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_types_introspection_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RuntimeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_introspection_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RuntimeVersion); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_introspection_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RuntimeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_introspection_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_introspection_proto_goTypes, + DependencyIndexes: file_types_introspection_proto_depIdxs, + MessageInfos: file_types_introspection_proto_msgTypes, + }.Build() + File_types_introspection_proto = out.File + file_types_introspection_proto_rawDesc = nil + file_types_introspection_proto_goTypes = nil + file_types_introspection_proto_depIdxs = nil +} diff --git a/api/types/introspection.proto b/api/types/introspection.proto new file mode 100644 index 000000000000..5ce83bfe0cdf --- /dev/null +++ b/api/types/introspection.proto @@ -0,0 +1,46 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.types; + +import "google/protobuf/any.proto"; + +option go_package = "github.com/containerd/containerd/api/types;types"; + +message RuntimeRequest { + string runtime_path = 1; + // Options correspond to CreateTaskRequest.options. + // This is needed to pass the runc binary path, etc. + google.protobuf.Any options = 2; +} + +message RuntimeVersion { + string version = 1; + string revision = 2; +} + +message RuntimeInfo { + string name = 1; + RuntimeVersion version = 2; + // Options correspond to RuntimeInfoRequest.Options (contains runc binary path, etc.) + google.protobuf.Any options = 3; + // OCI-compatible runtimes should use https://github.com/opencontainers/runtime-spec/blob/main/features.md + google.protobuf.Any features = 4; + // Annotations of the shim. Irrelevant to features.Annotations. + map annotations = 5; +} diff --git a/api/types/metrics.pb.go b/api/types/metrics.pb.go index b18ce1c5b609..1cd6a7548c3c 100644 --- a/api/types/metrics.pb.go +++ b/api/types/metrics.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/types/metrics.proto +// protoc (unknown) +// source: types/metrics.proto package types @@ -50,7 +50,7 @@ type Metric struct { func (x *Metric) Reset() { *x = Metric{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_types_metrics_proto_msgTypes[0] + mi := &file_types_metrics_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -63,7 +63,7 @@ func (x *Metric) String() string { func (*Metric) ProtoMessage() {} func (x *Metric) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_types_metrics_proto_msgTypes[0] + mi := &file_types_metrics_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -76,7 +76,7 @@ func (x *Metric) ProtoReflect() protoreflect.Message { // Deprecated: Use Metric.ProtoReflect.Descriptor instead. func (*Metric) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_metrics_proto_rawDescGZIP(), []int{0} + return file_types_metrics_proto_rawDescGZIP(), []int{0} } func (x *Metric) GetTimestamp() *timestamppb.Timestamp { @@ -100,51 +100,48 @@ func (x *Metric) GetData() *anypb.Any { return nil } -var File_github_com_containerd_containerd_api_types_metrics_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_types_metrics_proto_rawDesc = []byte{ - 0x0a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x19, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7c, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, +var File_types_metrics_proto protoreflect.FileDescriptor + +var file_types_metrics_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x7c, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x38, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_types_metrics_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_types_metrics_proto_rawDescData = file_github_com_containerd_containerd_api_types_metrics_proto_rawDesc + file_types_metrics_proto_rawDescOnce sync.Once + file_types_metrics_proto_rawDescData = file_types_metrics_proto_rawDesc ) -func file_github_com_containerd_containerd_api_types_metrics_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_types_metrics_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_types_metrics_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_types_metrics_proto_rawDescData) +func file_types_metrics_proto_rawDescGZIP() []byte { + file_types_metrics_proto_rawDescOnce.Do(func() { + file_types_metrics_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_metrics_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_types_metrics_proto_rawDescData + return file_types_metrics_proto_rawDescData } -var file_github_com_containerd_containerd_api_types_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_github_com_containerd_containerd_api_types_metrics_proto_goTypes = []interface{}{ +var file_types_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_types_metrics_proto_goTypes = []interface{}{ (*Metric)(nil), // 0: containerd.types.Metric (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp (*anypb.Any)(nil), // 2: google.protobuf.Any } -var file_github_com_containerd_containerd_api_types_metrics_proto_depIdxs = []int32{ +var file_types_metrics_proto_depIdxs = []int32{ 1, // 0: containerd.types.Metric.timestamp:type_name -> google.protobuf.Timestamp 2, // 1: containerd.types.Metric.data:type_name -> google.protobuf.Any 2, // [2:2] is the sub-list for method output_type @@ -154,13 +151,13 @@ var file_github_com_containerd_containerd_api_types_metrics_proto_depIdxs = []in 0, // [0:2] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_types_metrics_proto_init() } -func file_github_com_containerd_containerd_api_types_metrics_proto_init() { - if File_github_com_containerd_containerd_api_types_metrics_proto != nil { +func init() { file_types_metrics_proto_init() } +func file_types_metrics_proto_init() { + if File_types_metrics_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_types_metrics_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_types_metrics_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Metric); i { case 0: return &v.state @@ -177,18 +174,18 @@ func file_github_com_containerd_containerd_api_types_metrics_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_types_metrics_proto_rawDesc, + RawDescriptor: file_types_metrics_proto_rawDesc, NumEnums: 0, NumMessages: 1, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_types_metrics_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_types_metrics_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_types_metrics_proto_msgTypes, + GoTypes: file_types_metrics_proto_goTypes, + DependencyIndexes: file_types_metrics_proto_depIdxs, + MessageInfos: file_types_metrics_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_types_metrics_proto = out.File - file_github_com_containerd_containerd_api_types_metrics_proto_rawDesc = nil - file_github_com_containerd_containerd_api_types_metrics_proto_goTypes = nil - file_github_com_containerd_containerd_api_types_metrics_proto_depIdxs = nil + File_types_metrics_proto = out.File + file_types_metrics_proto_rawDesc = nil + file_types_metrics_proto_goTypes = nil + file_types_metrics_proto_depIdxs = nil } diff --git a/api/types/metrics.proto b/api/types/metrics.proto index 3e6a7751e37c..d1a7d49cc3aa 100644 --- a/api/types/metrics.proto +++ b/api/types/metrics.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -24,7 +24,7 @@ import "google/protobuf/timestamp.proto"; option go_package = "github.com/containerd/containerd/api/types;types"; message Metric { - google.protobuf.Timestamp timestamp = 1; - string id = 2; - google.protobuf.Any data = 3; + google.protobuf.Timestamp timestamp = 1; + string id = 2; + google.protobuf.Any data = 3; } diff --git a/api/types/mount.pb.go b/api/types/mount.pb.go index ff77a7d7bd22..5191270febdf 100644 --- a/api/types/mount.pb.go +++ b/api/types/mount.pb.go @@ -16,14 +16,15 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/types/mount.proto +// protoc (unknown) +// source: types/mount.proto package types import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -61,7 +62,7 @@ type Mount struct { func (x *Mount) Reset() { *x = Mount{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_types_mount_proto_msgTypes[0] + mi := &file_types_mount_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -74,7 +75,7 @@ func (x *Mount) String() string { func (*Mount) ProtoMessage() {} func (x *Mount) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_types_mount_proto_msgTypes[0] + mi := &file_types_mount_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -87,7 +88,7 @@ func (x *Mount) ProtoReflect() protoreflect.Message { // Deprecated: Use Mount.ProtoReflect.Descriptor instead. func (*Mount) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_mount_proto_rawDescGZIP(), []int{0} + return file_types_mount_proto_rawDescGZIP(), []int{0} } func (x *Mount) GetType() string { @@ -118,57 +119,244 @@ func (x *Mount) GetOptions() []string { return nil } -var File_github_com_containerd_containerd_api_types_mount_proto protoreflect.FileDescriptor +type ActiveMount struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Mount *Mount `protobuf:"bytes,1,opt,name=mount,proto3" json:"mount,omitempty"` + MountedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=mounted_at,json=mountedAt,proto3" json:"mounted_at,omitempty"` + MountPoint string `protobuf:"bytes,3,opt,name=mount_point,json=mountPoint,proto3" json:"mount_point,omitempty"` + Data map[string]string `protobuf:"bytes,4,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ActiveMount) Reset() { + *x = ActiveMount{} + if protoimpl.UnsafeEnabled { + mi := &file_types_mount_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActiveMount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActiveMount) ProtoMessage() {} + +func (x *ActiveMount) ProtoReflect() protoreflect.Message { + mi := &file_types_mount_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActiveMount.ProtoReflect.Descriptor instead. +func (*ActiveMount) Descriptor() ([]byte, []int) { + return file_types_mount_proto_rawDescGZIP(), []int{1} +} + +func (x *ActiveMount) GetMount() *Mount { + if x != nil { + return x.Mount + } + return nil +} + +func (x *ActiveMount) GetMountedAt() *timestamppb.Timestamp { + if x != nil { + return x.MountedAt + } + return nil +} + +func (x *ActiveMount) GetMountPoint() string { + if x != nil { + return x.MountPoint + } + return "" +} + +func (x *ActiveMount) GetData() map[string]string { + if x != nil { + return x.Data + } + return nil +} + +type ActivationInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Active []*ActiveMount `protobuf:"bytes,2,rep,name=active,proto3" json:"active,omitempty"` + System []*Mount `protobuf:"bytes,3,rep,name=system,proto3" json:"system,omitempty"` + Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ActivationInfo) Reset() { + *x = ActivationInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_types_mount_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActivationInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivationInfo) ProtoMessage() {} + +func (x *ActivationInfo) ProtoReflect() protoreflect.Message { + mi := &file_types_mount_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivationInfo.ProtoReflect.Descriptor instead. +func (*ActivationInfo) Descriptor() ([]byte, []int) { + return file_types_mount_proto_rawDescGZIP(), []int{2} +} + +func (x *ActivationInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ActivationInfo) GetActive() []*ActiveMount { + if x != nil { + return x.Active + } + return nil +} + +func (x *ActivationInfo) GetSystem() []*Mount { + if x != nil { + return x.System + } + return nil +} + +func (x *ActivationInfo) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} -var file_github_com_containerd_containerd_api_types_mount_proto_rawDesc = []byte{ - 0x0a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, +var File_types_mount_proto protoreflect.FileDescriptor + +var file_types_mount_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x65, 0x0a, 0x05, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8e, 0x02, + 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, + 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x05, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8d, + 0x02, 0x0a, 0x0e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2f, 0x0a, 0x06, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x44, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x32, + 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x05, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_types_mount_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_types_mount_proto_rawDescData = file_github_com_containerd_containerd_api_types_mount_proto_rawDesc + file_types_mount_proto_rawDescOnce sync.Once + file_types_mount_proto_rawDescData = file_types_mount_proto_rawDesc ) -func file_github_com_containerd_containerd_api_types_mount_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_types_mount_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_types_mount_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_types_mount_proto_rawDescData) +func file_types_mount_proto_rawDescGZIP() []byte { + file_types_mount_proto_rawDescOnce.Do(func() { + file_types_mount_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_mount_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_types_mount_proto_rawDescData + return file_types_mount_proto_rawDescData } -var file_github_com_containerd_containerd_api_types_mount_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_github_com_containerd_containerd_api_types_mount_proto_goTypes = []interface{}{ - (*Mount)(nil), // 0: containerd.types.Mount +var file_types_mount_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_types_mount_proto_goTypes = []interface{}{ + (*Mount)(nil), // 0: containerd.types.Mount + (*ActiveMount)(nil), // 1: containerd.types.ActiveMount + (*ActivationInfo)(nil), // 2: containerd.types.ActivationInfo + nil, // 3: containerd.types.ActiveMount.DataEntry + nil, // 4: containerd.types.ActivationInfo.LabelsEntry + (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp } -var file_github_com_containerd_containerd_api_types_mount_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name +var file_types_mount_proto_depIdxs = []int32{ + 0, // 0: containerd.types.ActiveMount.mount:type_name -> containerd.types.Mount + 5, // 1: containerd.types.ActiveMount.mounted_at:type_name -> google.protobuf.Timestamp + 3, // 2: containerd.types.ActiveMount.data:type_name -> containerd.types.ActiveMount.DataEntry + 1, // 3: containerd.types.ActivationInfo.active:type_name -> containerd.types.ActiveMount + 0, // 4: containerd.types.ActivationInfo.system:type_name -> containerd.types.Mount + 4, // 5: containerd.types.ActivationInfo.labels:type_name -> containerd.types.ActivationInfo.LabelsEntry + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_types_mount_proto_init() } -func file_github_com_containerd_containerd_api_types_mount_proto_init() { - if File_github_com_containerd_containerd_api_types_mount_proto != nil { +func init() { file_types_mount_proto_init() } +func file_types_mount_proto_init() { + if File_types_mount_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_types_mount_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_types_mount_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Mount); i { case 0: return &v.state @@ -180,23 +368,47 @@ func file_github_com_containerd_containerd_api_types_mount_proto_init() { return nil } } + file_types_mount_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActiveMount); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_mount_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActivationInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_types_mount_proto_rawDesc, + RawDescriptor: file_types_mount_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 5, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_types_mount_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_types_mount_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_types_mount_proto_msgTypes, + GoTypes: file_types_mount_proto_goTypes, + DependencyIndexes: file_types_mount_proto_depIdxs, + MessageInfos: file_types_mount_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_types_mount_proto = out.File - file_github_com_containerd_containerd_api_types_mount_proto_rawDesc = nil - file_github_com_containerd_containerd_api_types_mount_proto_goTypes = nil - file_github_com_containerd_containerd_api_types_mount_proto_depIdxs = nil + File_types_mount_proto = out.File + file_types_mount_proto_rawDesc = nil + file_types_mount_proto_goTypes = nil + file_types_mount_proto_depIdxs = nil } diff --git a/api/types/mount.proto b/api/types/mount.proto index 54e0a0cddfa4..05fd4532bc63 100644 --- a/api/types/mount.proto +++ b/api/types/mount.proto @@ -1,23 +1,25 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.types; +import "google/protobuf/timestamp.proto"; + option go_package = "github.com/containerd/containerd/api/types;types"; // Mount describes mounts for a container. @@ -28,16 +30,36 @@ option go_package = "github.com/containerd/containerd/api/types;types"; // The Mount type follows the structure of the mount syscall, including a type, // source, target and options. message Mount { - // Type defines the nature of the mount. - string type = 1; + // Type defines the nature of the mount. + string type = 1; + + // Source specifies the name of the mount. Depending on mount type, this + // may be a volume name or a host path, or even ignored. + string source = 2; + + // Target path in container + string target = 3; + + // Options specifies zero or more fstab style mount options. + repeated string options = 4; +} + +message ActiveMount { + Mount mount = 1; + + google.protobuf.Timestamp mounted_at = 2; + + string mount_point = 3; + + map data = 4; +} + +message ActivationInfo { + string name = 1; - // Source specifies the name of the mount. Depending on mount type, this - // may be a volume name or a host path, or even ignored. - string source = 2; + repeated ActiveMount active = 2; - // Target path in container - string target = 3; + repeated Mount system = 3; - // Options specifies zero or more fstab style mount options. - repeated string options = 4; + map labels = 4; } diff --git a/api/types/platform.pb.go b/api/types/platform.pb.go index 3e206cbafbda..4ecd31cca258 100644 --- a/api/types/platform.pb.go +++ b/api/types/platform.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/types/platform.proto +// protoc (unknown) +// source: types/platform.proto package types @@ -45,12 +45,13 @@ type Platform struct { OS string `protobuf:"bytes,1,opt,name=os,proto3" json:"os,omitempty"` Architecture string `protobuf:"bytes,2,opt,name=architecture,proto3" json:"architecture,omitempty"` Variant string `protobuf:"bytes,3,opt,name=variant,proto3" json:"variant,omitempty"` + OSVersion string `protobuf:"bytes,4,opt,name=os_version,json=osVersion,proto3" json:"os_version,omitempty"` } func (x *Platform) Reset() { *x = Platform{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_types_platform_proto_msgTypes[0] + mi := &file_types_platform_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -63,7 +64,7 @@ func (x *Platform) String() string { func (*Platform) ProtoMessage() {} func (x *Platform) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_types_platform_proto_msgTypes[0] + mi := &file_types_platform_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -76,7 +77,7 @@ func (x *Platform) ProtoReflect() protoreflect.Message { // Deprecated: Use Platform.ProtoReflect.Descriptor instead. func (*Platform) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_platform_proto_rawDescGZIP(), []int{0} + return file_types_platform_proto_rawDescGZIP(), []int{0} } func (x *Platform) GetOS() string { @@ -100,43 +101,49 @@ func (x *Platform) GetVariant() string { return "" } -var File_github_com_containerd_containerd_api_types_platform_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_types_platform_proto_rawDesc = []byte{ - 0x0a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x58, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, +func (x *Platform) GetOsVersion() string { + if x != nil { + return x.OSVersion + } + return "" +} + +var File_types_platform_proto protoreflect.FileDescriptor + +var file_types_platform_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x77, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x6f, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, + 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, + 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_types_platform_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_types_platform_proto_rawDescData = file_github_com_containerd_containerd_api_types_platform_proto_rawDesc + file_types_platform_proto_rawDescOnce sync.Once + file_types_platform_proto_rawDescData = file_types_platform_proto_rawDesc ) -func file_github_com_containerd_containerd_api_types_platform_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_types_platform_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_types_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_types_platform_proto_rawDescData) +func file_types_platform_proto_rawDescGZIP() []byte { + file_types_platform_proto_rawDescOnce.Do(func() { + file_types_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_platform_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_types_platform_proto_rawDescData + return file_types_platform_proto_rawDescData } -var file_github_com_containerd_containerd_api_types_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_github_com_containerd_containerd_api_types_platform_proto_goTypes = []interface{}{ +var file_types_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_types_platform_proto_goTypes = []interface{}{ (*Platform)(nil), // 0: containerd.types.Platform } -var file_github_com_containerd_containerd_api_types_platform_proto_depIdxs = []int32{ +var file_types_platform_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name @@ -144,13 +151,13 @@ var file_github_com_containerd_containerd_api_types_platform_proto_depIdxs = []i 0, // [0:0] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_types_platform_proto_init() } -func file_github_com_containerd_containerd_api_types_platform_proto_init() { - if File_github_com_containerd_containerd_api_types_platform_proto != nil { +func init() { file_types_platform_proto_init() } +func file_types_platform_proto_init() { + if File_types_platform_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_types_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_types_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Platform); i { case 0: return &v.state @@ -167,18 +174,18 @@ func file_github_com_containerd_containerd_api_types_platform_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_types_platform_proto_rawDesc, + RawDescriptor: file_types_platform_proto_rawDesc, NumEnums: 0, NumMessages: 1, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_types_platform_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_types_platform_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_types_platform_proto_msgTypes, + GoTypes: file_types_platform_proto_goTypes, + DependencyIndexes: file_types_platform_proto_depIdxs, + MessageInfos: file_types_platform_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_types_platform_proto = out.File - file_github_com_containerd_containerd_api_types_platform_proto_rawDesc = nil - file_github_com_containerd_containerd_api_types_platform_proto_goTypes = nil - file_github_com_containerd_containerd_api_types_platform_proto_depIdxs = nil + File_types_platform_proto = out.File + file_types_platform_proto_rawDesc = nil + file_types_platform_proto_goTypes = nil + file_types_platform_proto_depIdxs = nil } diff --git a/api/types/platform.proto b/api/types/platform.proto index b6088251f007..c56b6de29930 100644 --- a/api/types/platform.proto +++ b/api/types/platform.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -23,7 +23,8 @@ option go_package = "github.com/containerd/containerd/api/types;types"; // Platform follows the structure of the OCI platform specification, from // descriptors. message Platform { - string os = 1; - string architecture = 2; - string variant = 3; + string os = 1; + string architecture = 2; + string variant = 3; + string os_version = 4; } diff --git a/api/types/platform_helpers.go b/api/types/platform_helpers.go new file mode 100644 index 000000000000..d8c1a6877052 --- /dev/null +++ b/api/types/platform_helpers.go @@ -0,0 +1,49 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package types + +import oci "github.com/opencontainers/image-spec/specs-go/v1" + +// OCIPlatformToProto converts from a slice of OCI [specs.Platform] to a +// slice of the protobuf definition [Platform]. +func OCIPlatformToProto(platforms []oci.Platform) []*Platform { + ap := make([]*Platform, len(platforms)) + for i := range platforms { + ap[i] = &Platform{ + OS: platforms[i].OS, + OSVersion: platforms[i].OSVersion, + Architecture: platforms[i].Architecture, + Variant: platforms[i].Variant, + } + } + return ap +} + +// OCIPlatformFromProto converts a slice of the protobuf definition [Platform] +// to a slice of OCI [specs.Platform]. +func OCIPlatformFromProto(platforms []*Platform) []oci.Platform { + op := make([]oci.Platform, len(platforms)) + for i := range platforms { + op[i] = oci.Platform{ + OS: platforms[i].OS, + OSVersion: platforms[i].OSVersion, + Architecture: platforms[i].Architecture, + Variant: platforms[i].Variant, + } + } + return op +} diff --git a/runtime/v2/runc/options/doc.go b/api/types/runc/options/doc.go similarity index 100% rename from runtime/v2/runc/options/doc.go rename to api/types/runc/options/doc.go diff --git a/api/types/runc/options/next.pb.txt b/api/types/runc/options/next.pb.txt new file mode 100755 index 000000000000..6b5ce784b4e3 --- /dev/null +++ b/api/types/runc/options/next.pb.txt @@ -0,0 +1,175 @@ +file { + name: "github.com/containerd/containerd/core/runtime/v2/runc/options/oci.proto" + package: "containerd.runc.v1" + message_type { + name: "Options" + field { + name: "no_pivot_root" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "noPivotRoot" + } + field { + name: "no_new_keyring" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "noNewKeyring" + } + field { + name: "shim_cgroup" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "shimCgroup" + } + field { + name: "io_uid" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "ioUid" + } + field { + name: "io_gid" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "ioGid" + } + field { + name: "binary_name" + number: 6 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "binaryName" + } + field { + name: "root" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "root" + } + field { + name: "systemd_cgroup" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "systemdCgroup" + } + field { + name: "criu_image_path" + number: 10 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "criuImagePath" + } + field { + name: "criu_work_path" + number: 11 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "criuWorkPath" + } + field { + name: "task_api_address" + number: 12 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "taskApiAddress" + } + field { + name: "task_api_version" + number: 13 + label: LABEL_OPTIONAL + type: TYPE_UINT32 + json_name: "taskApiVersion" + } + reserved_range { + start: 8 + end: 9 + } + } + message_type { + name: "CheckpointOptions" + field { + name: "exit" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "exit" + } + field { + name: "open_tcp" + number: 2 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "openTcp" + } + field { + name: "external_unix_sockets" + number: 3 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "externalUnixSockets" + } + field { + name: "terminal" + number: 4 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "terminal" + } + field { + name: "file_locks" + number: 5 + label: LABEL_OPTIONAL + type: TYPE_BOOL + json_name: "fileLocks" + } + field { + name: "empty_namespaces" + number: 6 + label: LABEL_REPEATED + type: TYPE_STRING + json_name: "emptyNamespaces" + } + field { + name: "cgroups_mode" + number: 7 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "cgroupsMode" + } + field { + name: "image_path" + number: 8 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "imagePath" + } + field { + name: "work_path" + number: 9 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "workPath" + } + } + message_type { + name: "ProcessDetails" + field { + name: "exec_id" + number: 1 + label: LABEL_OPTIONAL + type: TYPE_STRING + json_name: "execId" + } + } + options { + go_package: "github.com/containerd/containerd/v2/core/runtime/v2/runc/options;options" + } + syntax: "proto3" +} diff --git a/api/types/runc/options/oci.pb.go b/api/types/runc/options/oci.pb.go new file mode 100644 index 000000000000..6696140f15d2 --- /dev/null +++ b/api/types/runc/options/oci.pb.go @@ -0,0 +1,488 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/runc/options/oci.proto + +package options + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Options struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // disable pivot root when creating a container + NoPivotRoot bool `protobuf:"varint,1,opt,name=no_pivot_root,json=noPivotRoot,proto3" json:"no_pivot_root,omitempty"` + // create a new keyring for the container + NoNewKeyring bool `protobuf:"varint,2,opt,name=no_new_keyring,json=noNewKeyring,proto3" json:"no_new_keyring,omitempty"` + // place the shim in a cgroup + ShimCgroup string `protobuf:"bytes,3,opt,name=shim_cgroup,json=shimCgroup,proto3" json:"shim_cgroup,omitempty"` + // set the I/O's pipes uid + IoUid uint32 `protobuf:"varint,4,opt,name=io_uid,json=ioUid,proto3" json:"io_uid,omitempty"` + // set the I/O's pipes gid + IoGid uint32 `protobuf:"varint,5,opt,name=io_gid,json=ioGid,proto3" json:"io_gid,omitempty"` + // binary name of the runc binary + BinaryName string `protobuf:"bytes,6,opt,name=binary_name,json=binaryName,proto3" json:"binary_name,omitempty"` + // runc root directory + Root string `protobuf:"bytes,7,opt,name=root,proto3" json:"root,omitempty"` + // enable systemd cgroups + SystemdCgroup bool `protobuf:"varint,9,opt,name=systemd_cgroup,json=systemdCgroup,proto3" json:"systemd_cgroup,omitempty"` + // criu image path + CriuImagePath string `protobuf:"bytes,10,opt,name=criu_image_path,json=criuImagePath,proto3" json:"criu_image_path,omitempty"` + // criu work path + CriuWorkPath string `protobuf:"bytes,11,opt,name=criu_work_path,json=criuWorkPath,proto3" json:"criu_work_path,omitempty"` + // task api address, can be a unix domain socket, or vsock address. + // it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:. + TaskApiAddress string `protobuf:"bytes,12,opt,name=task_api_address,json=taskApiAddress,proto3" json:"task_api_address,omitempty"` + // task api version, currently supported value is 2 and 3. + TaskApiVersion uint32 `protobuf:"varint,13,opt,name=task_api_version,json=taskApiVersion,proto3" json:"task_api_version,omitempty"` +} + +func (x *Options) Reset() { + *x = Options{} + if protoimpl.UnsafeEnabled { + mi := &file_types_runc_options_oci_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Options) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Options) ProtoMessage() {} + +func (x *Options) ProtoReflect() protoreflect.Message { + mi := &file_types_runc_options_oci_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Options.ProtoReflect.Descriptor instead. +func (*Options) Descriptor() ([]byte, []int) { + return file_types_runc_options_oci_proto_rawDescGZIP(), []int{0} +} + +func (x *Options) GetNoPivotRoot() bool { + if x != nil { + return x.NoPivotRoot + } + return false +} + +func (x *Options) GetNoNewKeyring() bool { + if x != nil { + return x.NoNewKeyring + } + return false +} + +func (x *Options) GetShimCgroup() string { + if x != nil { + return x.ShimCgroup + } + return "" +} + +func (x *Options) GetIoUid() uint32 { + if x != nil { + return x.IoUid + } + return 0 +} + +func (x *Options) GetIoGid() uint32 { + if x != nil { + return x.IoGid + } + return 0 +} + +func (x *Options) GetBinaryName() string { + if x != nil { + return x.BinaryName + } + return "" +} + +func (x *Options) GetRoot() string { + if x != nil { + return x.Root + } + return "" +} + +func (x *Options) GetSystemdCgroup() bool { + if x != nil { + return x.SystemdCgroup + } + return false +} + +func (x *Options) GetCriuImagePath() string { + if x != nil { + return x.CriuImagePath + } + return "" +} + +func (x *Options) GetCriuWorkPath() string { + if x != nil { + return x.CriuWorkPath + } + return "" +} + +func (x *Options) GetTaskApiAddress() string { + if x != nil { + return x.TaskApiAddress + } + return "" +} + +func (x *Options) GetTaskApiVersion() uint32 { + if x != nil { + return x.TaskApiVersion + } + return 0 +} + +type CheckpointOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // exit the container after a checkpoint + Exit bool `protobuf:"varint,1,opt,name=exit,proto3" json:"exit,omitempty"` + // checkpoint open tcp connections + OpenTcp bool `protobuf:"varint,2,opt,name=open_tcp,json=openTcp,proto3" json:"open_tcp,omitempty"` + // checkpoint external unix sockets + ExternalUnixSockets bool `protobuf:"varint,3,opt,name=external_unix_sockets,json=externalUnixSockets,proto3" json:"external_unix_sockets,omitempty"` + // checkpoint terminals (ptys) + Terminal bool `protobuf:"varint,4,opt,name=terminal,proto3" json:"terminal,omitempty"` + // allow checkpointing of file locks + FileLocks bool `protobuf:"varint,5,opt,name=file_locks,json=fileLocks,proto3" json:"file_locks,omitempty"` + // restore provided namespaces as empty namespaces + EmptyNamespaces []string `protobuf:"bytes,6,rep,name=empty_namespaces,json=emptyNamespaces,proto3" json:"empty_namespaces,omitempty"` + // set the cgroups mode, soft, full, strict + CgroupsMode string `protobuf:"bytes,7,opt,name=cgroups_mode,json=cgroupsMode,proto3" json:"cgroups_mode,omitempty"` + // checkpoint image path + ImagePath string `protobuf:"bytes,8,opt,name=image_path,json=imagePath,proto3" json:"image_path,omitempty"` + // checkpoint work path + WorkPath string `protobuf:"bytes,9,opt,name=work_path,json=workPath,proto3" json:"work_path,omitempty"` +} + +func (x *CheckpointOptions) Reset() { + *x = CheckpointOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_types_runc_options_oci_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckpointOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckpointOptions) ProtoMessage() {} + +func (x *CheckpointOptions) ProtoReflect() protoreflect.Message { + mi := &file_types_runc_options_oci_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckpointOptions.ProtoReflect.Descriptor instead. +func (*CheckpointOptions) Descriptor() ([]byte, []int) { + return file_types_runc_options_oci_proto_rawDescGZIP(), []int{1} +} + +func (x *CheckpointOptions) GetExit() bool { + if x != nil { + return x.Exit + } + return false +} + +func (x *CheckpointOptions) GetOpenTcp() bool { + if x != nil { + return x.OpenTcp + } + return false +} + +func (x *CheckpointOptions) GetExternalUnixSockets() bool { + if x != nil { + return x.ExternalUnixSockets + } + return false +} + +func (x *CheckpointOptions) GetTerminal() bool { + if x != nil { + return x.Terminal + } + return false +} + +func (x *CheckpointOptions) GetFileLocks() bool { + if x != nil { + return x.FileLocks + } + return false +} + +func (x *CheckpointOptions) GetEmptyNamespaces() []string { + if x != nil { + return x.EmptyNamespaces + } + return nil +} + +func (x *CheckpointOptions) GetCgroupsMode() string { + if x != nil { + return x.CgroupsMode + } + return "" +} + +func (x *CheckpointOptions) GetImagePath() string { + if x != nil { + return x.ImagePath + } + return "" +} + +func (x *CheckpointOptions) GetWorkPath() string { + if x != nil { + return x.WorkPath + } + return "" +} + +type ProcessDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // exec process id if the process is managed by a shim + ExecID string `protobuf:"bytes,1,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"` +} + +func (x *ProcessDetails) Reset() { + *x = ProcessDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_types_runc_options_oci_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProcessDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProcessDetails) ProtoMessage() {} + +func (x *ProcessDetails) ProtoReflect() protoreflect.Message { + mi := &file_types_runc_options_oci_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProcessDetails.ProtoReflect.Descriptor instead. +func (*ProcessDetails) Descriptor() ([]byte, []int) { + return file_types_runc_options_oci_proto_rawDescGZIP(), []int{2} +} + +func (x *ProcessDetails) GetExecID() string { + if x != nil { + return x.ExecID + } + return "" +} + +var File_types_runc_options_oci_proto protoreflect.FileDescriptor + +var file_types_runc_options_oci_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x72, 0x75, 0x6e, 0x63, 0x2f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6f, 0x63, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x72, 0x75, 0x6e, 0x63, 0x2e, + 0x76, 0x31, 0x22, 0xa6, 0x03, 0x0a, 0x07, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, + 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x70, 0x69, 0x76, 0x6f, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x50, 0x69, 0x76, 0x6f, 0x74, 0x52, 0x6f, + 0x6f, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6b, 0x65, 0x79, + 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6e, 0x6f, 0x4e, 0x65, + 0x77, 0x4b, 0x65, 0x79, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x69, 0x6d, + 0x5f, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x68, 0x69, 0x6d, 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x6f, 0x5f, + 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6f, 0x55, 0x69, 0x64, + 0x12, 0x15, 0x0a, 0x06, 0x69, 0x6f, 0x5f, 0x67, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x69, 0x6f, 0x47, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x25, 0x0a, 0x0e, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x64, 0x5f, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x64, 0x43, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x72, + 0x69, 0x75, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0e, 0x63, + 0x72, 0x69, 0x75, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x69, 0x75, 0x57, 0x6f, 0x72, 0x6b, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x73, + 0x6b, 0x41, 0x70, 0x69, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, + 0x61, 0x73, 0x6b, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x61, 0x73, 0x6b, 0x41, 0x70, 0x69, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, 0xbb, 0x02, 0x0a, 0x11, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x78, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x04, 0x65, 0x78, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x74, 0x63, + 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x70, 0x65, 0x6e, 0x54, 0x63, 0x70, + 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x69, + 0x78, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x6f, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, + 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x73, 0x12, + 0x29, 0x0a, 0x10, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, + 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x22, 0x29, 0x0a, 0x0e, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x65, + 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x78, + 0x65, 0x63, 0x49, 0x64, 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2f, 0x72, 0x75, 0x6e, 0x63, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_types_runc_options_oci_proto_rawDescOnce sync.Once + file_types_runc_options_oci_proto_rawDescData = file_types_runc_options_oci_proto_rawDesc +) + +func file_types_runc_options_oci_proto_rawDescGZIP() []byte { + file_types_runc_options_oci_proto_rawDescOnce.Do(func() { + file_types_runc_options_oci_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_runc_options_oci_proto_rawDescData) + }) + return file_types_runc_options_oci_proto_rawDescData +} + +var file_types_runc_options_oci_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_types_runc_options_oci_proto_goTypes = []interface{}{ + (*Options)(nil), // 0: containerd.runc.v1.Options + (*CheckpointOptions)(nil), // 1: containerd.runc.v1.CheckpointOptions + (*ProcessDetails)(nil), // 2: containerd.runc.v1.ProcessDetails +} +var file_types_runc_options_oci_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_types_runc_options_oci_proto_init() } +func file_types_runc_options_oci_proto_init() { + if File_types_runc_options_oci_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_types_runc_options_oci_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Options); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_runc_options_oci_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckpointOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_runc_options_oci_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProcessDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_runc_options_oci_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_runc_options_oci_proto_goTypes, + DependencyIndexes: file_types_runc_options_oci_proto_depIdxs, + MessageInfos: file_types_runc_options_oci_proto_msgTypes, + }.Build() + File_types_runc_options_oci_proto = out.File + file_types_runc_options_oci_proto_rawDesc = nil + file_types_runc_options_oci_proto_goTypes = nil + file_types_runc_options_oci_proto_depIdxs = nil +} diff --git a/api/types/runc/options/oci.proto b/api/types/runc/options/oci.proto new file mode 100644 index 000000000000..b1866374a3a4 --- /dev/null +++ b/api/types/runc/options/oci.proto @@ -0,0 +1,63 @@ +syntax = "proto3"; + +package containerd.runc.v1; + +option go_package = "github.com/containerd/containerd/api/types/runc/options;options"; + +message Options { + // disable pivot root when creating a container + bool no_pivot_root = 1; + // create a new keyring for the container + bool no_new_keyring = 2; + // place the shim in a cgroup + string shim_cgroup = 3; + // set the I/O's pipes uid + uint32 io_uid = 4; + // set the I/O's pipes gid + uint32 io_gid = 5; + // binary name of the runc binary + string binary_name = 6; + // runc root directory + string root = 7; + // criu binary path. + // + // Removed in containerd v2.0: string criu_path = 8; + reserved 8; + // enable systemd cgroups + bool systemd_cgroup = 9; + // criu image path + string criu_image_path = 10; + // criu work path + string criu_work_path = 11; + // task api address, can be a unix domain socket, or vsock address. + // it is in the form of ttrpc+unix://path/to/uds or grpc+vsock://:. + string task_api_address = 12; + // task api version, currently supported value is 2 and 3. + uint32 task_api_version = 13; +} + +message CheckpointOptions { + // exit the container after a checkpoint + bool exit = 1; + // checkpoint open tcp connections + bool open_tcp = 2; + // checkpoint external unix sockets + bool external_unix_sockets = 3; + // checkpoint terminals (ptys) + bool terminal = 4; + // allow checkpointing of file locks + bool file_locks = 5; + // restore provided namespaces as empty namespaces + repeated string empty_namespaces = 6; + // set the cgroups mode, soft, full, strict + string cgroups_mode = 7; + // checkpoint image path + string image_path = 8; + // checkpoint work path + string work_path = 9; +} + +message ProcessDetails { + // exec process id if the process is managed by a shim + string exec_id = 1; +} diff --git a/api/types/runtimeoptions/v1/api.pb.go b/api/types/runtimeoptions/v1/api.pb.go new file mode 100644 index 000000000000..c6d80d959ecb --- /dev/null +++ b/api/types/runtimeoptions/v1/api.pb.go @@ -0,0 +1,175 @@ +// To regenerate api.pb.go run `make protos` + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/runtimeoptions/v1/api.proto + +package runtimeoptions + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Options struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // TypeUrl specifies the type of the content inside the config file. + TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` + // ConfigPath specifies the filesystem location of the config file + // used by the runtime. + ConfigPath string `protobuf:"bytes,2,opt,name=config_path,json=configPath,proto3" json:"config_path,omitempty"` + // Blob specifies an in-memory TOML blob passed from containerd's configuration section + // for this runtime. This will be used if config_path is not specified. + ConfigBody []byte `protobuf:"bytes,3,opt,name=config_body,json=configBody,proto3" json:"config_body,omitempty"` +} + +func (x *Options) Reset() { + *x = Options{} + if protoimpl.UnsafeEnabled { + mi := &file_types_runtimeoptions_v1_api_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Options) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Options) ProtoMessage() {} + +func (x *Options) ProtoReflect() protoreflect.Message { + mi := &file_types_runtimeoptions_v1_api_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Options.ProtoReflect.Descriptor instead. +func (*Options) Descriptor() ([]byte, []int) { + return file_types_runtimeoptions_v1_api_proto_rawDescGZIP(), []int{0} +} + +func (x *Options) GetTypeUrl() string { + if x != nil { + return x.TypeUrl + } + return "" +} + +func (x *Options) GetConfigPath() string { + if x != nil { + return x.ConfigPath + } + return "" +} + +func (x *Options) GetConfigBody() []byte { + if x != nil { + return x.ConfigBody + } + return nil +} + +var File_types_runtimeoptions_v1_api_proto protoreflect.FileDescriptor + +var file_types_runtimeoptions_v1_api_proto_rawDesc = []byte{ + 0x0a, 0x21, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x22, 0x66, 0x0a, 0x07, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, + 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x42, 0x4d, + 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x31, 0x3b, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_types_runtimeoptions_v1_api_proto_rawDescOnce sync.Once + file_types_runtimeoptions_v1_api_proto_rawDescData = file_types_runtimeoptions_v1_api_proto_rawDesc +) + +func file_types_runtimeoptions_v1_api_proto_rawDescGZIP() []byte { + file_types_runtimeoptions_v1_api_proto_rawDescOnce.Do(func() { + file_types_runtimeoptions_v1_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_runtimeoptions_v1_api_proto_rawDescData) + }) + return file_types_runtimeoptions_v1_api_proto_rawDescData +} + +var file_types_runtimeoptions_v1_api_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_types_runtimeoptions_v1_api_proto_goTypes = []interface{}{ + (*Options)(nil), // 0: runtimeoptions.v1.Options +} +var file_types_runtimeoptions_v1_api_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_types_runtimeoptions_v1_api_proto_init() } +func file_types_runtimeoptions_v1_api_proto_init() { + if File_types_runtimeoptions_v1_api_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_types_runtimeoptions_v1_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Options); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_runtimeoptions_v1_api_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_runtimeoptions_v1_api_proto_goTypes, + DependencyIndexes: file_types_runtimeoptions_v1_api_proto_depIdxs, + MessageInfos: file_types_runtimeoptions_v1_api_proto_msgTypes, + }.Build() + File_types_runtimeoptions_v1_api_proto = out.File + file_types_runtimeoptions_v1_api_proto_rawDesc = nil + file_types_runtimeoptions_v1_api_proto_goTypes = nil + file_types_runtimeoptions_v1_api_proto_depIdxs = nil +} diff --git a/api/types/runtimeoptions/v1/api.proto b/api/types/runtimeoptions/v1/api.proto new file mode 100644 index 000000000000..95864dcf3b45 --- /dev/null +++ b/api/types/runtimeoptions/v1/api.proto @@ -0,0 +1,17 @@ +// To regenerate api.pb.go run `make protos` +syntax = "proto3"; + +package runtimeoptions.v1; + +option go_package = "github.com/containerd/containerd/api/types/runtimeoptions/v1;runtimeoptions"; + +message Options { + // TypeUrl specifies the type of the content inside the config file. + string type_url = 1; + // ConfigPath specifies the filesystem location of the config file + // used by the runtime. + string config_path = 2; + // Blob specifies an in-memory TOML blob passed from containerd's configuration section + // for this runtime. This will be used if config_path is not specified. + bytes config_body = 3; +} diff --git a/api/types/runtimeoptions/v1/doc.go b/api/types/runtimeoptions/v1/doc.go new file mode 100644 index 000000000000..c590b9b63146 --- /dev/null +++ b/api/types/runtimeoptions/v1/doc.go @@ -0,0 +1,17 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package runtimeoptions diff --git a/api/types/sandbox.pb.go b/api/types/sandbox.pb.go index 67594f416c81..eb84c7be69d5 100644 --- a/api/types/sandbox.pb.go +++ b/api/types/sandbox.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/types/sandbox.proto +// protoc (unknown) +// source: types/sandbox.proto package types @@ -59,12 +59,14 @@ type Sandbox struct { UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Extensions allow clients to provide optional blobs that can be handled by runtime. Extensions map[string]*anypb.Any `protobuf:"bytes,7,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Sandboxer is the name of the sandbox controller who manages the sandbox. + Sandboxer string `protobuf:"bytes,10,opt,name=sandboxer,proto3" json:"sandboxer,omitempty"` } func (x *Sandbox) Reset() { *x = Sandbox{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_types_sandbox_proto_msgTypes[0] + mi := &file_types_sandbox_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -77,7 +79,7 @@ func (x *Sandbox) String() string { func (*Sandbox) ProtoMessage() {} func (x *Sandbox) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_types_sandbox_proto_msgTypes[0] + mi := &file_types_sandbox_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -90,7 +92,7 @@ func (x *Sandbox) ProtoReflect() protoreflect.Message { // Deprecated: Use Sandbox.ProtoReflect.Descriptor instead. func (*Sandbox) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescGZIP(), []int{0} + return file_types_sandbox_proto_rawDescGZIP(), []int{0} } func (x *Sandbox) GetSandboxID() string { @@ -142,6 +144,13 @@ func (x *Sandbox) GetExtensions() map[string]*anypb.Any { return nil } +func (x *Sandbox) GetSandboxer() string { + if x != nil { + return x.Sandboxer + } + return "" +} + type Sandbox_Runtime struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -157,7 +166,7 @@ type Sandbox_Runtime struct { func (x *Sandbox_Runtime) Reset() { *x = Sandbox_Runtime{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_types_sandbox_proto_msgTypes[1] + mi := &file_types_sandbox_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -170,7 +179,7 @@ func (x *Sandbox_Runtime) String() string { func (*Sandbox_Runtime) ProtoMessage() {} func (x *Sandbox_Runtime) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_types_sandbox_proto_msgTypes[1] + mi := &file_types_sandbox_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -183,7 +192,7 @@ func (x *Sandbox_Runtime) ProtoReflect() protoreflect.Message { // Deprecated: Use Sandbox_Runtime.ProtoReflect.Descriptor instead. func (*Sandbox_Runtime) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescGZIP(), []int{0, 0} + return file_types_sandbox_proto_rawDescGZIP(), []int{0, 0} } func (x *Sandbox_Runtime) GetName() string { @@ -200,77 +209,76 @@ func (x *Sandbox_Runtime) GetOptions() *anypb.Any { return nil } -var File_github_com_containerd_containerd_api_types_sandbox_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_types_sandbox_proto_rawDesc = []byte{ - 0x0a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x73, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x19, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xee, 0x04, 0x0a, 0x07, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, +var File_types_sandbox_proto protoreflect.FileDescriptor + +var file_types_sandbox_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x8c, 0x05, 0x0a, 0x07, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, + 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x3b, + 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x49, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x4d, 0x0a, 0x07, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x53, 0x0a, 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x49, 0x0a, 0x0a, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x65, 0x72, 0x1a, 0x4d, 0x0a, 0x07, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x53, 0x0a, + 0x0f, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x3b, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescData = file_github_com_containerd_containerd_api_types_sandbox_proto_rawDesc + file_types_sandbox_proto_rawDescOnce sync.Once + file_types_sandbox_proto_rawDescData = file_types_sandbox_proto_rawDesc ) -func file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescData) +func file_types_sandbox_proto_rawDescGZIP() []byte { + file_types_sandbox_proto_rawDescOnce.Do(func() { + file_types_sandbox_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_sandbox_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_types_sandbox_proto_rawDescData + return file_types_sandbox_proto_rawDescData } -var file_github_com_containerd_containerd_api_types_sandbox_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_github_com_containerd_containerd_api_types_sandbox_proto_goTypes = []interface{}{ +var file_types_sandbox_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_types_sandbox_proto_goTypes = []interface{}{ (*Sandbox)(nil), // 0: containerd.types.Sandbox (*Sandbox_Runtime)(nil), // 1: containerd.types.Sandbox.Runtime nil, // 2: containerd.types.Sandbox.LabelsEntry @@ -278,7 +286,7 @@ var file_github_com_containerd_containerd_api_types_sandbox_proto_goTypes = []in (*anypb.Any)(nil), // 4: google.protobuf.Any (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp } -var file_github_com_containerd_containerd_api_types_sandbox_proto_depIdxs = []int32{ +var file_types_sandbox_proto_depIdxs = []int32{ 1, // 0: containerd.types.Sandbox.runtime:type_name -> containerd.types.Sandbox.Runtime 4, // 1: containerd.types.Sandbox.spec:type_name -> google.protobuf.Any 2, // 2: containerd.types.Sandbox.labels:type_name -> containerd.types.Sandbox.LabelsEntry @@ -294,13 +302,13 @@ var file_github_com_containerd_containerd_api_types_sandbox_proto_depIdxs = []in 0, // [0:8] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_types_sandbox_proto_init() } -func file_github_com_containerd_containerd_api_types_sandbox_proto_init() { - if File_github_com_containerd_containerd_api_types_sandbox_proto != nil { +func init() { file_types_sandbox_proto_init() } +func file_types_sandbox_proto_init() { + if File_types_sandbox_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_types_sandbox_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_types_sandbox_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Sandbox); i { case 0: return &v.state @@ -312,7 +320,7 @@ func file_github_com_containerd_containerd_api_types_sandbox_proto_init() { return nil } } - file_github_com_containerd_containerd_api_types_sandbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_types_sandbox_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Sandbox_Runtime); i { case 0: return &v.state @@ -329,18 +337,18 @@ func file_github_com_containerd_containerd_api_types_sandbox_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_types_sandbox_proto_rawDesc, + RawDescriptor: file_types_sandbox_proto_rawDesc, NumEnums: 0, NumMessages: 4, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_types_sandbox_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_types_sandbox_proto_depIdxs, - MessageInfos: file_github_com_containerd_containerd_api_types_sandbox_proto_msgTypes, + GoTypes: file_types_sandbox_proto_goTypes, + DependencyIndexes: file_types_sandbox_proto_depIdxs, + MessageInfos: file_types_sandbox_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_types_sandbox_proto = out.File - file_github_com_containerd_containerd_api_types_sandbox_proto_rawDesc = nil - file_github_com_containerd_containerd_api_types_sandbox_proto_goTypes = nil - file_github_com_containerd_containerd_api_types_sandbox_proto_depIdxs = nil + File_types_sandbox_proto = out.File + file_types_sandbox_proto_rawDesc = nil + file_types_sandbox_proto_goTypes = nil + file_types_sandbox_proto_depIdxs = nil } diff --git a/api/types/sandbox.proto b/api/types/sandbox.proto index b607706194b2..023644192579 100644 --- a/api/types/sandbox.proto +++ b/api/types/sandbox.proto @@ -1,17 +1,17 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; @@ -26,26 +26,28 @@ option go_package = "github.com/containerd/containerd/api/types;types"; // Sandbox represents a sandbox metadata object that keeps all info required by controller to // work with a particular instance. message Sandbox { - // SandboxID is a unique instance identifier within namespace - string sandbox_id = 1; - message Runtime { - // Name is the name of the runtime. - string name = 1; - // Options specify additional runtime initialization options for the shim (this data will be available in StartShim). - // Typically this data expected to be runtime shim implementation specific. - google.protobuf.Any options = 2; - } - // Runtime specifies which runtime to use for executing this container. - Runtime runtime = 2; - // Spec is sandbox configuration (kin of OCI runtime spec), spec's data will be written to a config.json file in the - // bundle directory (similary to OCI spec). - google.protobuf.Any spec = 3; - // Labels provides an area to include arbitrary data on containers. - map labels = 4; - // CreatedAt is the time the container was first created. - google.protobuf.Timestamp created_at = 5; - // UpdatedAt is the last time the container was mutated. - google.protobuf.Timestamp updated_at = 6; - // Extensions allow clients to provide optional blobs that can be handled by runtime. - map extensions = 7; + // SandboxID is a unique instance identifier within namespace + string sandbox_id = 1; + message Runtime { + // Name is the name of the runtime. + string name = 1; + // Options specify additional runtime initialization options for the shim (this data will be available in StartShim). + // Typically this data expected to be runtime shim implementation specific. + google.protobuf.Any options = 2; + } + // Runtime specifies which runtime to use for executing this container. + Runtime runtime = 2; + // Spec is sandbox configuration (kin of OCI runtime spec), spec's data will be written to a config.json file in the + // bundle directory (similary to OCI spec). + google.protobuf.Any spec = 3; + // Labels provides an area to include arbitrary data on containers. + map labels = 4; + // CreatedAt is the time the container was first created. + google.protobuf.Timestamp created_at = 5; + // UpdatedAt is the last time the container was mutated. + google.protobuf.Timestamp updated_at = 6; + // Extensions allow clients to provide optional blobs that can be handled by runtime. + map extensions = 7; + // Sandboxer is the name of the sandbox controller who manages the sandbox. + string sandboxer = 10; } diff --git a/api/types/task/task.pb.go b/api/types/task/task.pb.go index 5c58d1ef1870..6d93edd181e1 100644 --- a/api/types/task/task.pb.go +++ b/api/types/task/task.pb.go @@ -16,8 +16,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.20.1 -// source: github.com/containerd/containerd/api/types/task/task.proto +// protoc (unknown) +// source: types/task/task.proto package task @@ -79,11 +79,11 @@ func (x Status) String() string { } func (Status) Descriptor() protoreflect.EnumDescriptor { - return file_github_com_containerd_containerd_api_types_task_task_proto_enumTypes[0].Descriptor() + return file_types_task_task_proto_enumTypes[0].Descriptor() } func (Status) Type() protoreflect.EnumType { - return &file_github_com_containerd_containerd_api_types_task_task_proto_enumTypes[0] + return &file_types_task_task_proto_enumTypes[0] } func (x Status) Number() protoreflect.EnumNumber { @@ -92,7 +92,7 @@ func (x Status) Number() protoreflect.EnumNumber { // Deprecated: Use Status.Descriptor instead. func (Status) EnumDescriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_task_task_proto_rawDescGZIP(), []int{0} + return file_types_task_task_proto_rawDescGZIP(), []int{0} } type Process struct { @@ -115,7 +115,7 @@ type Process struct { func (x *Process) Reset() { *x = Process{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_types_task_task_proto_msgTypes[0] + mi := &file_types_task_task_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -128,7 +128,7 @@ func (x *Process) String() string { func (*Process) ProtoMessage() {} func (x *Process) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_types_task_task_proto_msgTypes[0] + mi := &file_types_task_task_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -141,7 +141,7 @@ func (x *Process) ProtoReflect() protoreflect.Message { // Deprecated: Use Process.ProtoReflect.Descriptor instead. func (*Process) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_task_task_proto_rawDescGZIP(), []int{0} + return file_types_task_task_proto_rawDescGZIP(), []int{0} } func (x *Process) GetContainerID() string { @@ -230,7 +230,7 @@ type ProcessInfo struct { func (x *ProcessInfo) Reset() { *x = ProcessInfo{} if protoimpl.UnsafeEnabled { - mi := &file_github_com_containerd_containerd_api_types_task_task_proto_msgTypes[1] + mi := &file_types_task_task_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -243,7 +243,7 @@ func (x *ProcessInfo) String() string { func (*ProcessInfo) ProtoMessage() {} func (x *ProcessInfo) ProtoReflect() protoreflect.Message { - mi := &file_github_com_containerd_containerd_api_types_task_task_proto_msgTypes[1] + mi := &file_types_task_task_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -256,7 +256,7 @@ func (x *ProcessInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessInfo.ProtoReflect.Descriptor instead. func (*ProcessInfo) Descriptor() ([]byte, []int) { - return file_github_com_containerd_containerd_api_types_task_task_proto_rawDescGZIP(), []int{1} + return file_types_task_task_proto_rawDescGZIP(), []int{1} } func (x *ProcessInfo) GetPid() uint32 { @@ -273,76 +273,74 @@ func (x *ProcessInfo) GetInfo() *anypb.Any { return nil } -var File_github_com_containerd_containerd_api_types_task_task_proto protoreflect.FileDescriptor - -var file_github_com_containerd_containerd_api_types_task_task_proto_rawDesc = []byte{ - 0x0a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, - 0x6b, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbf, 0x02, - 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, - 0x70, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x33, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, - 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, - 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, - 0x49, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, - 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, - 0x12, 0x28, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x55, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, - 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, - 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x55, 0x53, - 0x45, 0x44, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x55, 0x53, 0x49, 0x4e, 0x47, 0x10, - 0x05, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, - 0x74, 0x61, 0x73, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +var File_types_task_task_proto protoreflect.FileDescriptor + +var file_types_task_task_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x2f, 0x74, 0x61, 0x73, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x1f, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, + 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbf, 0x02, 0x0a, 0x07, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, + 0x74, 0x64, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x64, 0x65, 0x72, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, + 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x08, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x49, 0x0a, 0x0b, 0x50, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, + 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x2a, 0x55, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, + 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, + 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, + 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x55, 0x53, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x55, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x42, 0x31, 0x5a, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( - file_github_com_containerd_containerd_api_types_task_task_proto_rawDescOnce sync.Once - file_github_com_containerd_containerd_api_types_task_task_proto_rawDescData = file_github_com_containerd_containerd_api_types_task_task_proto_rawDesc + file_types_task_task_proto_rawDescOnce sync.Once + file_types_task_task_proto_rawDescData = file_types_task_task_proto_rawDesc ) -func file_github_com_containerd_containerd_api_types_task_task_proto_rawDescGZIP() []byte { - file_github_com_containerd_containerd_api_types_task_task_proto_rawDescOnce.Do(func() { - file_github_com_containerd_containerd_api_types_task_task_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_containerd_containerd_api_types_task_task_proto_rawDescData) +func file_types_task_task_proto_rawDescGZIP() []byte { + file_types_task_task_proto_rawDescOnce.Do(func() { + file_types_task_task_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_task_task_proto_rawDescData) }) - return file_github_com_containerd_containerd_api_types_task_task_proto_rawDescData + return file_types_task_task_proto_rawDescData } -var file_github_com_containerd_containerd_api_types_task_task_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_github_com_containerd_containerd_api_types_task_task_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_github_com_containerd_containerd_api_types_task_task_proto_goTypes = []interface{}{ +var file_types_task_task_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_types_task_task_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_types_task_task_proto_goTypes = []interface{}{ (Status)(0), // 0: containerd.v1.types.Status (*Process)(nil), // 1: containerd.v1.types.Process (*ProcessInfo)(nil), // 2: containerd.v1.types.ProcessInfo (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp (*anypb.Any)(nil), // 4: google.protobuf.Any } -var file_github_com_containerd_containerd_api_types_task_task_proto_depIdxs = []int32{ +var file_types_task_task_proto_depIdxs = []int32{ 0, // 0: containerd.v1.types.Process.status:type_name -> containerd.v1.types.Status 3, // 1: containerd.v1.types.Process.exited_at:type_name -> google.protobuf.Timestamp 4, // 2: containerd.v1.types.ProcessInfo.info:type_name -> google.protobuf.Any @@ -353,13 +351,13 @@ var file_github_com_containerd_containerd_api_types_task_task_proto_depIdxs = [] 0, // [0:3] is the sub-list for field type_name } -func init() { file_github_com_containerd_containerd_api_types_task_task_proto_init() } -func file_github_com_containerd_containerd_api_types_task_task_proto_init() { - if File_github_com_containerd_containerd_api_types_task_task_proto != nil { +func init() { file_types_task_task_proto_init() } +func file_types_task_task_proto_init() { + if File_types_task_task_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_github_com_containerd_containerd_api_types_task_task_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_types_task_task_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Process); i { case 0: return &v.state @@ -371,7 +369,7 @@ func file_github_com_containerd_containerd_api_types_task_task_proto_init() { return nil } } - file_github_com_containerd_containerd_api_types_task_task_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_types_task_task_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProcessInfo); i { case 0: return &v.state @@ -388,19 +386,19 @@ func file_github_com_containerd_containerd_api_types_task_task_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_github_com_containerd_containerd_api_types_task_task_proto_rawDesc, + RawDescriptor: file_types_task_task_proto_rawDesc, NumEnums: 1, NumMessages: 2, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_github_com_containerd_containerd_api_types_task_task_proto_goTypes, - DependencyIndexes: file_github_com_containerd_containerd_api_types_task_task_proto_depIdxs, - EnumInfos: file_github_com_containerd_containerd_api_types_task_task_proto_enumTypes, - MessageInfos: file_github_com_containerd_containerd_api_types_task_task_proto_msgTypes, + GoTypes: file_types_task_task_proto_goTypes, + DependencyIndexes: file_types_task_task_proto_depIdxs, + EnumInfos: file_types_task_task_proto_enumTypes, + MessageInfos: file_types_task_task_proto_msgTypes, }.Build() - File_github_com_containerd_containerd_api_types_task_task_proto = out.File - file_github_com_containerd_containerd_api_types_task_task_proto_rawDesc = nil - file_github_com_containerd_containerd_api_types_task_task_proto_goTypes = nil - file_github_com_containerd_containerd_api_types_task_task_proto_depIdxs = nil + File_types_task_task_proto = out.File + file_types_task_task_proto_rawDesc = nil + file_types_task_task_proto_goTypes = nil + file_types_task_task_proto_depIdxs = nil } diff --git a/api/types/task/task.proto b/api/types/task/task.proto index afc8e94bb477..3a06236fac71 100644 --- a/api/types/task/task.proto +++ b/api/types/task/task.proto @@ -1,55 +1,55 @@ /* - Copyright The containerd Authors. + Copyright The containerd Authors. - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. */ syntax = "proto3"; package containerd.v1.types; -import "google/protobuf/timestamp.proto"; import "google/protobuf/any.proto"; +import "google/protobuf/timestamp.proto"; option go_package = "github.com/containerd/containerd/api/types/task"; enum Status { - UNKNOWN = 0; - CREATED = 1; - RUNNING = 2; - STOPPED = 3; - PAUSED = 4; - PAUSING = 5; + UNKNOWN = 0; + CREATED = 1; + RUNNING = 2; + STOPPED = 3; + PAUSED = 4; + PAUSING = 5; } message Process { - string container_id = 1; - string id = 2; - uint32 pid = 3; - Status status = 4; - string stdin = 5; - string stdout = 6; - string stderr = 7; - bool terminal = 8; - uint32 exit_status = 9; - google.protobuf.Timestamp exited_at = 10; + string container_id = 1; + string id = 2; + uint32 pid = 3; + Status status = 4; + string stdin = 5; + string stdout = 6; + string stderr = 7; + bool terminal = 8; + uint32 exit_status = 9; + google.protobuf.Timestamp exited_at = 10; } message ProcessInfo { - // PID is the process ID. - uint32 pid = 1; - // Info contains additional process information. - // - // Info varies by platform. - google.protobuf.Any info = 2; + // PID is the process ID. + uint32 pid = 1; + // Info contains additional process information. + // + // Info varies by platform. + google.protobuf.Any info = 2; } diff --git a/api/types/transfer/doc.go b/api/types/transfer/doc.go new file mode 100644 index 000000000000..82f94c2f15d7 --- /dev/null +++ b/api/types/transfer/doc.go @@ -0,0 +1,18 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +// Package transfer defines the transfer types. +package transfer diff --git a/api/types/transfer/imagestore.pb.go b/api/types/transfer/imagestore.pb.go new file mode 100644 index 000000000000..2d40d0d1ade5 --- /dev/null +++ b/api/types/transfer/imagestore.pb.go @@ -0,0 +1,446 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/transfer/imagestore.proto + +package transfer + +import ( + types "github.com/containerd/containerd/api/types" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ImageStore struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Platforms []*types.Platform `protobuf:"bytes,3,rep,name=platforms,proto3" json:"platforms,omitempty"` + AllMetadata bool `protobuf:"varint,4,opt,name=all_metadata,json=allMetadata,proto3" json:"all_metadata,omitempty"` + ManifestLimit uint32 `protobuf:"varint,5,opt,name=manifest_limit,json=manifestLimit,proto3" json:"manifest_limit,omitempty"` + // extra_references are used to set image names on imports of sub-images from the index + ExtraReferences []*ImageReference `protobuf:"bytes,6,rep,name=extra_references,json=extraReferences,proto3" json:"extra_references,omitempty"` + Unpacks []*UnpackConfiguration `protobuf:"bytes,10,rep,name=unpacks,proto3" json:"unpacks,omitempty"` +} + +func (x *ImageStore) Reset() { + *x = ImageStore{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_imagestore_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageStore) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageStore) ProtoMessage() {} + +func (x *ImageStore) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_imagestore_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImageStore.ProtoReflect.Descriptor instead. +func (*ImageStore) Descriptor() ([]byte, []int) { + return file_types_transfer_imagestore_proto_rawDescGZIP(), []int{0} +} + +func (x *ImageStore) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ImageStore) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *ImageStore) GetPlatforms() []*types.Platform { + if x != nil { + return x.Platforms + } + return nil +} + +func (x *ImageStore) GetAllMetadata() bool { + if x != nil { + return x.AllMetadata + } + return false +} + +func (x *ImageStore) GetManifestLimit() uint32 { + if x != nil { + return x.ManifestLimit + } + return 0 +} + +func (x *ImageStore) GetExtraReferences() []*ImageReference { + if x != nil { + return x.ExtraReferences + } + return nil +} + +func (x *ImageStore) GetUnpacks() []*UnpackConfiguration { + if x != nil { + return x.Unpacks + } + return nil +} + +type UnpackConfiguration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // platform is the platform to unpack for, used for resolving manifest and snapshotter + // if not provided + Platform *types.Platform `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` + // snapshotter to unpack to, if not provided default for platform shoudl be used + Snapshotter string `protobuf:"bytes,2,opt,name=snapshotter,proto3" json:"snapshotter,omitempty"` +} + +func (x *UnpackConfiguration) Reset() { + *x = UnpackConfiguration{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_imagestore_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnpackConfiguration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnpackConfiguration) ProtoMessage() {} + +func (x *UnpackConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_imagestore_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnpackConfiguration.ProtoReflect.Descriptor instead. +func (*UnpackConfiguration) Descriptor() ([]byte, []int) { + return file_types_transfer_imagestore_proto_rawDescGZIP(), []int{1} +} + +func (x *UnpackConfiguration) GetPlatform() *types.Platform { + if x != nil { + return x.Platform + } + return nil +} + +func (x *UnpackConfiguration) GetSnapshotter() string { + if x != nil { + return x.Snapshotter + } + return "" +} + +// ImageReference is used to create or find a reference for an image +type ImageReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // is_prefix determines whether the Name should be considered + // a prefix (without tag or digest). + // For lookup, this may allow matching multiple tags. + // For store, this must have a tag or digest added. + IsPrefix bool `protobuf:"varint,2,opt,name=is_prefix,json=isPrefix,proto3" json:"is_prefix,omitempty"` + // allow_overwrite allows overwriting or ignoring the name if + // another reference is provided (such as through an annotation). + // Only used if IsPrefix is true. + AllowOverwrite bool `protobuf:"varint,3,opt,name=allow_overwrite,json=allowOverwrite,proto3" json:"allow_overwrite,omitempty"` + // add_digest adds the manifest digest to the reference. + // For lookup, this allows matching tags with any digest. + // For store, this allows adding the digest to the name. + // Only used if IsPrefix is true. + AddDigest bool `protobuf:"varint,4,opt,name=add_digest,json=addDigest,proto3" json:"add_digest,omitempty"` + // skip_named_digest only considers digest references which do not + // have a non-digested named reference. + // For lookup, this will deduplicate digest references when there is a named match. + // For store, this only adds this digest reference when there is no matching full + // name reference from the prefix. + // Only used if IsPrefix is true. + SkipNamedDigest bool `protobuf:"varint,5,opt,name=skip_named_digest,json=skipNamedDigest,proto3" json:"skip_named_digest,omitempty"` +} + +func (x *ImageReference) Reset() { + *x = ImageReference{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_imagestore_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageReference) ProtoMessage() {} + +func (x *ImageReference) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_imagestore_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImageReference.ProtoReflect.Descriptor instead. +func (*ImageReference) Descriptor() ([]byte, []int) { + return file_types_transfer_imagestore_proto_rawDescGZIP(), []int{2} +} + +func (x *ImageReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ImageReference) GetIsPrefix() bool { + if x != nil { + return x.IsPrefix + } + return false +} + +func (x *ImageReference) GetAllowOverwrite() bool { + if x != nil { + return x.AllowOverwrite + } + return false +} + +func (x *ImageReference) GetAddDigest() bool { + if x != nil { + return x.AddDigest + } + return false +} + +func (x *ImageReference) GetSkipNamedDigest() bool { + if x != nil { + return x.SkipNamedDigest + } + return false +} + +var File_types_transfer_imagestore_proto protoreflect.FileDescriptor + +var file_types_transfer_imagestore_proto_rawDesc = []byte{ + 0x0a, 0x1f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x1a, 0x14, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xca, 0x03, 0x0a, 0x0a, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x38, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, + 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, + 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, + 0x0e, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x54, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x07, 0x75, 0x6e, + 0x70, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x75, 0x6e, 0x70, + 0x61, 0x63, 0x6b, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x6f, 0x0a, 0x13, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x20, + 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x74, 0x65, 0x72, + 0x22, 0xb5, 0x01, 0x0a, 0x0e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x50, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x76, + 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x61, 0x64, 0x64, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x61, 0x64, 0x64, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, + 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x6b, 0x69, 0x70, 0x4e, 0x61, 0x6d, + 0x65, 0x64, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_types_transfer_imagestore_proto_rawDescOnce sync.Once + file_types_transfer_imagestore_proto_rawDescData = file_types_transfer_imagestore_proto_rawDesc +) + +func file_types_transfer_imagestore_proto_rawDescGZIP() []byte { + file_types_transfer_imagestore_proto_rawDescOnce.Do(func() { + file_types_transfer_imagestore_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_transfer_imagestore_proto_rawDescData) + }) + return file_types_transfer_imagestore_proto_rawDescData +} + +var file_types_transfer_imagestore_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_types_transfer_imagestore_proto_goTypes = []interface{}{ + (*ImageStore)(nil), // 0: containerd.types.transfer.ImageStore + (*UnpackConfiguration)(nil), // 1: containerd.types.transfer.UnpackConfiguration + (*ImageReference)(nil), // 2: containerd.types.transfer.ImageReference + nil, // 3: containerd.types.transfer.ImageStore.LabelsEntry + (*types.Platform)(nil), // 4: containerd.types.Platform +} +var file_types_transfer_imagestore_proto_depIdxs = []int32{ + 3, // 0: containerd.types.transfer.ImageStore.labels:type_name -> containerd.types.transfer.ImageStore.LabelsEntry + 4, // 1: containerd.types.transfer.ImageStore.platforms:type_name -> containerd.types.Platform + 2, // 2: containerd.types.transfer.ImageStore.extra_references:type_name -> containerd.types.transfer.ImageReference + 1, // 3: containerd.types.transfer.ImageStore.unpacks:type_name -> containerd.types.transfer.UnpackConfiguration + 4, // 4: containerd.types.transfer.UnpackConfiguration.platform:type_name -> containerd.types.Platform + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_types_transfer_imagestore_proto_init() } +func file_types_transfer_imagestore_proto_init() { + if File_types_transfer_imagestore_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_types_transfer_imagestore_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageStore); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_transfer_imagestore_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnpackConfiguration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_transfer_imagestore_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_transfer_imagestore_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_transfer_imagestore_proto_goTypes, + DependencyIndexes: file_types_transfer_imagestore_proto_depIdxs, + MessageInfos: file_types_transfer_imagestore_proto_msgTypes, + }.Build() + File_types_transfer_imagestore_proto = out.File + file_types_transfer_imagestore_proto_rawDesc = nil + file_types_transfer_imagestore_proto_goTypes = nil + file_types_transfer_imagestore_proto_depIdxs = nil +} diff --git a/api/types/transfer/imagestore.proto b/api/types/transfer/imagestore.proto new file mode 100644 index 000000000000..c3c14c9b10fc --- /dev/null +++ b/api/types/transfer/imagestore.proto @@ -0,0 +1,82 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.types.transfer; + +import "types/platform.proto"; + +option go_package = "github.com/containerd/containerd/api/types/transfer"; + +message ImageStore { + string name = 1; + map labels = 2; + + // Content filters + + repeated types.Platform platforms = 3; + bool all_metadata = 4; + uint32 manifest_limit = 5; + + // Import naming + + // extra_references are used to set image names on imports of sub-images from the index + repeated ImageReference extra_references = 6; + + // Unpack Configuration, multiple allowed + + repeated UnpackConfiguration unpacks = 10; +} + +message UnpackConfiguration { + // platform is the platform to unpack for, used for resolving manifest and snapshotter + // if not provided + types.Platform platform = 1; + + // snapshotter to unpack to, if not provided default for platform shoudl be used + string snapshotter = 2; +} + +// ImageReference is used to create or find a reference for an image +message ImageReference { + string name = 1; + + // is_prefix determines whether the Name should be considered + // a prefix (without tag or digest). + // For lookup, this may allow matching multiple tags. + // For store, this must have a tag or digest added. + bool is_prefix = 2; + + // allow_overwrite allows overwriting or ignoring the name if + // another reference is provided (such as through an annotation). + // Only used if IsPrefix is true. + bool allow_overwrite = 3; + + // add_digest adds the manifest digest to the reference. + // For lookup, this allows matching tags with any digest. + // For store, this allows adding the digest to the name. + // Only used if IsPrefix is true. + bool add_digest = 4; + + // skip_named_digest only considers digest references which do not + // have a non-digested named reference. + // For lookup, this will deduplicate digest references when there is a named match. + // For store, this only adds this digest reference when there is no matching full + // name reference from the prefix. + // Only used if IsPrefix is true. + bool skip_named_digest = 5; +} diff --git a/api/types/transfer/importexport.pb.go b/api/types/transfer/importexport.pb.go new file mode 100644 index 000000000000..0aa7571a927c --- /dev/null +++ b/api/types/transfer/importexport.pb.go @@ -0,0 +1,315 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/transfer/importexport.proto + +package transfer + +import ( + types "github.com/containerd/containerd/api/types" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ImageImportStream struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Stream is used to identify the binary input stream for the import operation. + // The stream uses the transfer binary stream protocol with the client as the sender. + // The binary data is expected to be a raw tar stream. + Stream string `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"` + MediaType string `protobuf:"bytes,2,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"` + ForceCompress bool `protobuf:"varint,3,opt,name=force_compress,json=forceCompress,proto3" json:"force_compress,omitempty"` +} + +func (x *ImageImportStream) Reset() { + *x = ImageImportStream{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_importexport_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageImportStream) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageImportStream) ProtoMessage() {} + +func (x *ImageImportStream) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_importexport_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImageImportStream.ProtoReflect.Descriptor instead. +func (*ImageImportStream) Descriptor() ([]byte, []int) { + return file_types_transfer_importexport_proto_rawDescGZIP(), []int{0} +} + +func (x *ImageImportStream) GetStream() string { + if x != nil { + return x.Stream + } + return "" +} + +func (x *ImageImportStream) GetMediaType() string { + if x != nil { + return x.MediaType + } + return "" +} + +func (x *ImageImportStream) GetForceCompress() bool { + if x != nil { + return x.ForceCompress + } + return false +} + +type ImageExportStream struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Stream is used to identify the binary output stream for the export operation. + // The stream uses the transfer binary stream protocol with the server as the sender. + // The binary data is expected to be a raw tar stream. + Stream string `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"` + MediaType string `protobuf:"bytes,2,opt,name=media_type,json=mediaType,proto3" json:"media_type,omitempty"` + // The specified platforms + Platforms []*types.Platform `protobuf:"bytes,3,rep,name=platforms,proto3" json:"platforms,omitempty"` + // Whether to include all platforms + AllPlatforms bool `protobuf:"varint,4,opt,name=all_platforms,json=allPlatforms,proto3" json:"all_platforms,omitempty"` + // Skips the creation of the Docker compatible manifest.json file + SkipCompatibilityManifest bool `protobuf:"varint,5,opt,name=skip_compatibility_manifest,json=skipCompatibilityManifest,proto3" json:"skip_compatibility_manifest,omitempty"` + // Excludes non-distributable blobs such as Windows base layers. + SkipNonDistributable bool `protobuf:"varint,6,opt,name=skip_non_distributable,json=skipNonDistributable,proto3" json:"skip_non_distributable,omitempty"` +} + +func (x *ImageExportStream) Reset() { + *x = ImageExportStream{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_importexport_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageExportStream) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageExportStream) ProtoMessage() {} + +func (x *ImageExportStream) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_importexport_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImageExportStream.ProtoReflect.Descriptor instead. +func (*ImageExportStream) Descriptor() ([]byte, []int) { + return file_types_transfer_importexport_proto_rawDescGZIP(), []int{1} +} + +func (x *ImageExportStream) GetStream() string { + if x != nil { + return x.Stream + } + return "" +} + +func (x *ImageExportStream) GetMediaType() string { + if x != nil { + return x.MediaType + } + return "" +} + +func (x *ImageExportStream) GetPlatforms() []*types.Platform { + if x != nil { + return x.Platforms + } + return nil +} + +func (x *ImageExportStream) GetAllPlatforms() bool { + if x != nil { + return x.AllPlatforms + } + return false +} + +func (x *ImageExportStream) GetSkipCompatibilityManifest() bool { + if x != nil { + return x.SkipCompatibilityManifest + } + return false +} + +func (x *ImageExportStream) GetSkipNonDistributable() bool { + if x != nil { + return x.SkipNonDistributable + } + return false +} + +var File_types_transfer_importexport_proto protoreflect.FileDescriptor + +var file_types_transfer_importexport_proto_rawDesc = []byte{ + 0x0a, 0x21, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x1a, 0x14, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x71, 0x0a, 0x11, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, + 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x22, 0x9f, 0x02, 0x0a, 0x11, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x52, 0x09, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x73, 0x12, 0x3e, 0x0a, 0x1b, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, + 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x73, 0x6b, 0x69, 0x70, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x6e, 0x69, 0x66, + 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, + 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x14, 0x73, 0x6b, 0x69, 0x70, 0x4e, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_types_transfer_importexport_proto_rawDescOnce sync.Once + file_types_transfer_importexport_proto_rawDescData = file_types_transfer_importexport_proto_rawDesc +) + +func file_types_transfer_importexport_proto_rawDescGZIP() []byte { + file_types_transfer_importexport_proto_rawDescOnce.Do(func() { + file_types_transfer_importexport_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_transfer_importexport_proto_rawDescData) + }) + return file_types_transfer_importexport_proto_rawDescData +} + +var file_types_transfer_importexport_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_types_transfer_importexport_proto_goTypes = []interface{}{ + (*ImageImportStream)(nil), // 0: containerd.types.transfer.ImageImportStream + (*ImageExportStream)(nil), // 1: containerd.types.transfer.ImageExportStream + (*types.Platform)(nil), // 2: containerd.types.Platform +} +var file_types_transfer_importexport_proto_depIdxs = []int32{ + 2, // 0: containerd.types.transfer.ImageExportStream.platforms:type_name -> containerd.types.Platform + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_types_transfer_importexport_proto_init() } +func file_types_transfer_importexport_proto_init() { + if File_types_transfer_importexport_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_types_transfer_importexport_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageImportStream); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_transfer_importexport_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageExportStream); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_transfer_importexport_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_transfer_importexport_proto_goTypes, + DependencyIndexes: file_types_transfer_importexport_proto_depIdxs, + MessageInfos: file_types_transfer_importexport_proto_msgTypes, + }.Build() + File_types_transfer_importexport_proto = out.File + file_types_transfer_importexport_proto_rawDesc = nil + file_types_transfer_importexport_proto_goTypes = nil + file_types_transfer_importexport_proto_depIdxs = nil +} diff --git a/api/types/transfer/importexport.proto b/api/types/transfer/importexport.proto new file mode 100644 index 000000000000..7d6c75402034 --- /dev/null +++ b/api/types/transfer/importexport.proto @@ -0,0 +1,52 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.types.transfer; + +import "types/platform.proto"; + +option go_package = "github.com/containerd/containerd/api/types/transfer"; + +message ImageImportStream { + // Stream is used to identify the binary input stream for the import operation. + // The stream uses the transfer binary stream protocol with the client as the sender. + // The binary data is expected to be a raw tar stream. + string stream = 1; + + string media_type = 2; + + bool force_compress = 3; +} + +message ImageExportStream { + // Stream is used to identify the binary output stream for the export operation. + // The stream uses the transfer binary stream protocol with the server as the sender. + // The binary data is expected to be a raw tar stream. + string stream = 1; + + string media_type = 2; + + // The specified platforms + repeated types.Platform platforms = 3; + // Whether to include all platforms + bool all_platforms = 4; + // Skips the creation of the Docker compatible manifest.json file + bool skip_compatibility_manifest = 5; + // Excludes non-distributable blobs such as Windows base layers. + bool skip_non_distributable = 6; +} diff --git a/api/types/transfer/progress.pb.go b/api/types/transfer/progress.pb.go new file mode 100644 index 000000000000..2d301f9bdb41 --- /dev/null +++ b/api/types/transfer/progress.pb.go @@ -0,0 +1,215 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/transfer/progress.proto + +package transfer + +import ( + types "github.com/containerd/containerd/api/types" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Progress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Event string `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Parents []string `protobuf:"bytes,3,rep,name=parents,proto3" json:"parents,omitempty"` + Progress int64 `protobuf:"varint,4,opt,name=progress,proto3" json:"progress,omitempty"` + Total int64 `protobuf:"varint,5,opt,name=total,proto3" json:"total,omitempty"` + Desc *types.Descriptor `protobuf:"bytes,6,opt,name=desc,proto3" json:"desc,omitempty"` +} + +func (x *Progress) Reset() { + *x = Progress{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_progress_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Progress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Progress) ProtoMessage() {} + +func (x *Progress) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_progress_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Progress.ProtoReflect.Descriptor instead. +func (*Progress) Descriptor() ([]byte, []int) { + return file_types_transfer_progress_proto_rawDescGZIP(), []int{0} +} + +func (x *Progress) GetEvent() string { + if x != nil { + return x.Event + } + return "" +} + +func (x *Progress) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Progress) GetParents() []string { + if x != nil { + return x.Parents + } + return nil +} + +func (x *Progress) GetProgress() int64 { + if x != nil { + return x.Progress + } + return 0 +} + +func (x *Progress) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *Progress) GetDesc() *types.Descriptor { + if x != nil { + return x.Desc + } + return nil +} + +var File_types_transfer_progress_proto protoreflect.FileDescriptor + +var file_types_transfer_progress_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x2f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x1a, 0x16, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xb2, 0x01, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x30, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, + 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_types_transfer_progress_proto_rawDescOnce sync.Once + file_types_transfer_progress_proto_rawDescData = file_types_transfer_progress_proto_rawDesc +) + +func file_types_transfer_progress_proto_rawDescGZIP() []byte { + file_types_transfer_progress_proto_rawDescOnce.Do(func() { + file_types_transfer_progress_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_transfer_progress_proto_rawDescData) + }) + return file_types_transfer_progress_proto_rawDescData +} + +var file_types_transfer_progress_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_types_transfer_progress_proto_goTypes = []interface{}{ + (*Progress)(nil), // 0: containerd.types.transfer.Progress + (*types.Descriptor)(nil), // 1: containerd.types.Descriptor +} +var file_types_transfer_progress_proto_depIdxs = []int32{ + 1, // 0: containerd.types.transfer.Progress.desc:type_name -> containerd.types.Descriptor + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_types_transfer_progress_proto_init() } +func file_types_transfer_progress_proto_init() { + if File_types_transfer_progress_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_types_transfer_progress_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Progress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_transfer_progress_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_transfer_progress_proto_goTypes, + DependencyIndexes: file_types_transfer_progress_proto_depIdxs, + MessageInfos: file_types_transfer_progress_proto_msgTypes, + }.Build() + File_types_transfer_progress_proto = out.File + file_types_transfer_progress_proto_rawDesc = nil + file_types_transfer_progress_proto_goTypes = nil + file_types_transfer_progress_proto_depIdxs = nil +} diff --git a/api/types/transfer/progress.proto b/api/types/transfer/progress.proto new file mode 100644 index 000000000000..81858dbcdf5b --- /dev/null +++ b/api/types/transfer/progress.proto @@ -0,0 +1,32 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.types.transfer; + +import "types/descriptor.proto"; + +option go_package = "github.com/containerd/containerd/api/types/transfer"; + +message Progress { + string event = 1; + string name = 2; + repeated string parents = 3; + int64 progress = 4; + int64 total = 5; + containerd.types.Descriptor desc = 6; +} diff --git a/api/types/transfer/registry.pb.go b/api/types/transfer/registry.pb.go new file mode 100644 index 000000000000..7b374c704d06 --- /dev/null +++ b/api/types/transfer/registry.pb.go @@ -0,0 +1,622 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/transfer/registry.proto + +package transfer + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type HTTPDebug int32 + +const ( + HTTPDebug_DISABLED HTTPDebug = 0 + // Enable HTTP debugging + HTTPDebug_DEBUG HTTPDebug = 1 + // Enable HTTP requests tracing + HTTPDebug_TRACE HTTPDebug = 2 + // Enable both HTTP debugging and requests tracing + HTTPDebug_BOTH HTTPDebug = 3 +) + +// Enum value maps for HTTPDebug. +var ( + HTTPDebug_name = map[int32]string{ + 0: "DISABLED", + 1: "DEBUG", + 2: "TRACE", + 3: "BOTH", + } + HTTPDebug_value = map[string]int32{ + "DISABLED": 0, + "DEBUG": 1, + "TRACE": 2, + "BOTH": 3, + } +) + +func (x HTTPDebug) Enum() *HTTPDebug { + p := new(HTTPDebug) + *p = x + return p +} + +func (x HTTPDebug) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (HTTPDebug) Descriptor() protoreflect.EnumDescriptor { + return file_types_transfer_registry_proto_enumTypes[0].Descriptor() +} + +func (HTTPDebug) Type() protoreflect.EnumType { + return &file_types_transfer_registry_proto_enumTypes[0] +} + +func (x HTTPDebug) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use HTTPDebug.Descriptor instead. +func (HTTPDebug) EnumDescriptor() ([]byte, []int) { + return file_types_transfer_registry_proto_rawDescGZIP(), []int{0} +} + +type AuthType int32 + +const ( + AuthType_NONE AuthType = 0 + // CREDENTIALS is used to exchange username/password for access token + // using an oauth or "Docker Registry Token" server + AuthType_CREDENTIALS AuthType = 1 + // REFRESH is used to exchange secret for access token using an oauth + // or "Docker Registry Token" server + AuthType_REFRESH AuthType = 2 + // HEADER is used to set the HTTP Authorization header to secret + // directly for the registry. + // Value should be ` ` + AuthType_HEADER AuthType = 3 +) + +// Enum value maps for AuthType. +var ( + AuthType_name = map[int32]string{ + 0: "NONE", + 1: "CREDENTIALS", + 2: "REFRESH", + 3: "HEADER", + } + AuthType_value = map[string]int32{ + "NONE": 0, + "CREDENTIALS": 1, + "REFRESH": 2, + "HEADER": 3, + } +) + +func (x AuthType) Enum() *AuthType { + p := new(AuthType) + *p = x + return p +} + +func (x AuthType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AuthType) Descriptor() protoreflect.EnumDescriptor { + return file_types_transfer_registry_proto_enumTypes[1].Descriptor() +} + +func (AuthType) Type() protoreflect.EnumType { + return &file_types_transfer_registry_proto_enumTypes[1] +} + +func (x AuthType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AuthType.Descriptor instead. +func (AuthType) EnumDescriptor() ([]byte, []int) { + return file_types_transfer_registry_proto_rawDescGZIP(), []int{1} +} + +type OCIRegistry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Reference string `protobuf:"bytes,1,opt,name=reference,proto3" json:"reference,omitempty"` + Resolver *RegistryResolver `protobuf:"bytes,2,opt,name=resolver,proto3" json:"resolver,omitempty"` +} + +func (x *OCIRegistry) Reset() { + *x = OCIRegistry{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_registry_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OCIRegistry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OCIRegistry) ProtoMessage() {} + +func (x *OCIRegistry) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_registry_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OCIRegistry.ProtoReflect.Descriptor instead. +func (*OCIRegistry) Descriptor() ([]byte, []int) { + return file_types_transfer_registry_proto_rawDescGZIP(), []int{0} +} + +func (x *OCIRegistry) GetReference() string { + if x != nil { + return x.Reference + } + return "" +} + +func (x *OCIRegistry) GetResolver() *RegistryResolver { + if x != nil { + return x.Resolver + } + return nil +} + +type RegistryResolver struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // auth_stream is used to refer to a stream which auth callbacks may be + // made on. + AuthStream string `protobuf:"bytes,1,opt,name=auth_stream,json=authStream,proto3" json:"auth_stream,omitempty"` + // Headers + Headers map[string]string `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + HostDir string `protobuf:"bytes,3,opt,name=host_dir,json=hostDir,proto3" json:"host_dir,omitempty"` + DefaultScheme string `protobuf:"bytes,4,opt,name=default_scheme,json=defaultScheme,proto3" json:"default_scheme,omitempty"` + // Whether to debug/trace HTTP requests to OCI registry. + HttpDebug HTTPDebug `protobuf:"varint,5,opt,name=http_debug,json=httpDebug,proto3,enum=containerd.types.transfer.HTTPDebug" json:"http_debug,omitempty"` + // Stream ID to use for HTTP logs (when logs are streamed to client). + // When empty, logs are written to containerd logs. + LogsStream string `protobuf:"bytes,6,opt,name=logs_stream,json=logsStream,proto3" json:"logs_stream,omitempty"` +} + +func (x *RegistryResolver) Reset() { + *x = RegistryResolver{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_registry_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegistryResolver) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegistryResolver) ProtoMessage() {} + +func (x *RegistryResolver) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_registry_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegistryResolver.ProtoReflect.Descriptor instead. +func (*RegistryResolver) Descriptor() ([]byte, []int) { + return file_types_transfer_registry_proto_rawDescGZIP(), []int{1} +} + +func (x *RegistryResolver) GetAuthStream() string { + if x != nil { + return x.AuthStream + } + return "" +} + +func (x *RegistryResolver) GetHeaders() map[string]string { + if x != nil { + return x.Headers + } + return nil +} + +func (x *RegistryResolver) GetHostDir() string { + if x != nil { + return x.HostDir + } + return "" +} + +func (x *RegistryResolver) GetDefaultScheme() string { + if x != nil { + return x.DefaultScheme + } + return "" +} + +func (x *RegistryResolver) GetHttpDebug() HTTPDebug { + if x != nil { + return x.HttpDebug + } + return HTTPDebug_DISABLED +} + +func (x *RegistryResolver) GetLogsStream() string { + if x != nil { + return x.LogsStream + } + return "" +} + +// AuthRequest is sent as a callback on a stream +type AuthRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // host is the registry host + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` + // reference is the namespace and repository name requested from the registry + Reference string `protobuf:"bytes,2,opt,name=reference,proto3" json:"reference,omitempty"` + // wwwauthenticate is the HTTP WWW-Authenticate header values returned from the registry + Wwwauthenticate []string `protobuf:"bytes,3,rep,name=wwwauthenticate,proto3" json:"wwwauthenticate,omitempty"` +} + +func (x *AuthRequest) Reset() { + *x = AuthRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_registry_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthRequest) ProtoMessage() {} + +func (x *AuthRequest) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_registry_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthRequest.ProtoReflect.Descriptor instead. +func (*AuthRequest) Descriptor() ([]byte, []int) { + return file_types_transfer_registry_proto_rawDescGZIP(), []int{2} +} + +func (x *AuthRequest) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *AuthRequest) GetReference() string { + if x != nil { + return x.Reference + } + return "" +} + +func (x *AuthRequest) GetWwwauthenticate() []string { + if x != nil { + return x.Wwwauthenticate + } + return nil +} + +type AuthResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AuthType AuthType `protobuf:"varint,1,opt,name=authType,proto3,enum=containerd.types.transfer.AuthType" json:"authType,omitempty"` + Secret string `protobuf:"bytes,2,opt,name=secret,proto3" json:"secret,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + ExpireAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` // TODO: Stream error +} + +func (x *AuthResponse) Reset() { + *x = AuthResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_registry_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthResponse) ProtoMessage() {} + +func (x *AuthResponse) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_registry_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthResponse.ProtoReflect.Descriptor instead. +func (*AuthResponse) Descriptor() ([]byte, []int) { + return file_types_transfer_registry_proto_rawDescGZIP(), []int{3} +} + +func (x *AuthResponse) GetAuthType() AuthType { + if x != nil { + return x.AuthType + } + return AuthType_NONE +} + +func (x *AuthResponse) GetSecret() string { + if x != nil { + return x.Secret + } + return "" +} + +func (x *AuthResponse) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *AuthResponse) GetExpireAt() *timestamppb.Timestamp { + if x != nil { + return x.ExpireAt + } + return nil +} + +var File_types_transfer_registry_proto protoreflect.FileDescriptor + +var file_types_transfer_registry_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x74, 0x0a, 0x0b, 0x4f, + 0x43, 0x49, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x72, 0x22, 0xeb, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x75, 0x74, + 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x52, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x68, + 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, + 0x6f, 0x73, 0x74, 0x44, 0x69, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x43, 0x0a, + 0x0a, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x48, 0x54, + 0x54, 0x50, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x09, 0x68, 0x74, 0x74, 0x70, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x73, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x69, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, + 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x28, 0x0a, 0x0f, 0x77, 0x77, 0x77, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x77, 0x77, 0x61, 0x75, + 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x0c, 0x41, + 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x61, + 0x75, 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x2a, 0x39, 0x0a, 0x09, 0x48, 0x54, 0x54, + 0x50, 0x44, 0x65, 0x62, 0x75, 0x67, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, 0x12, + 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, + 0x54, 0x48, 0x10, 0x03, 0x2a, 0x3e, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x52, + 0x45, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x53, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, + 0x45, 0x46, 0x52, 0x45, 0x53, 0x48, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x45, 0x41, 0x44, + 0x45, 0x52, 0x10, 0x03, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_types_transfer_registry_proto_rawDescOnce sync.Once + file_types_transfer_registry_proto_rawDescData = file_types_transfer_registry_proto_rawDesc +) + +func file_types_transfer_registry_proto_rawDescGZIP() []byte { + file_types_transfer_registry_proto_rawDescOnce.Do(func() { + file_types_transfer_registry_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_transfer_registry_proto_rawDescData) + }) + return file_types_transfer_registry_proto_rawDescData +} + +var file_types_transfer_registry_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_types_transfer_registry_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_types_transfer_registry_proto_goTypes = []interface{}{ + (HTTPDebug)(0), // 0: containerd.types.transfer.HTTPDebug + (AuthType)(0), // 1: containerd.types.transfer.AuthType + (*OCIRegistry)(nil), // 2: containerd.types.transfer.OCIRegistry + (*RegistryResolver)(nil), // 3: containerd.types.transfer.RegistryResolver + (*AuthRequest)(nil), // 4: containerd.types.transfer.AuthRequest + (*AuthResponse)(nil), // 5: containerd.types.transfer.AuthResponse + nil, // 6: containerd.types.transfer.RegistryResolver.HeadersEntry + (*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp +} +var file_types_transfer_registry_proto_depIdxs = []int32{ + 3, // 0: containerd.types.transfer.OCIRegistry.resolver:type_name -> containerd.types.transfer.RegistryResolver + 6, // 1: containerd.types.transfer.RegistryResolver.headers:type_name -> containerd.types.transfer.RegistryResolver.HeadersEntry + 0, // 2: containerd.types.transfer.RegistryResolver.http_debug:type_name -> containerd.types.transfer.HTTPDebug + 1, // 3: containerd.types.transfer.AuthResponse.authType:type_name -> containerd.types.transfer.AuthType + 7, // 4: containerd.types.transfer.AuthResponse.expire_at:type_name -> google.protobuf.Timestamp + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_types_transfer_registry_proto_init() } +func file_types_transfer_registry_proto_init() { + if File_types_transfer_registry_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_types_transfer_registry_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OCIRegistry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_transfer_registry_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryResolver); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_transfer_registry_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_transfer_registry_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_transfer_registry_proto_rawDesc, + NumEnums: 2, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_transfer_registry_proto_goTypes, + DependencyIndexes: file_types_transfer_registry_proto_depIdxs, + EnumInfos: file_types_transfer_registry_proto_enumTypes, + MessageInfos: file_types_transfer_registry_proto_msgTypes, + }.Build() + File_types_transfer_registry_proto = out.File + file_types_transfer_registry_proto_rawDesc = nil + file_types_transfer_registry_proto_goTypes = nil + file_types_transfer_registry_proto_depIdxs = nil +} diff --git a/api/types/transfer/registry.proto b/api/types/transfer/registry.proto new file mode 100644 index 000000000000..cf614d2fdd4f --- /dev/null +++ b/api/types/transfer/registry.proto @@ -0,0 +1,97 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.types.transfer; + +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/containerd/containerd/api/types/transfer"; + +message OCIRegistry { + string reference = 1; + RegistryResolver resolver = 2; +} + +enum HTTPDebug { + DISABLED = 0; + // Enable HTTP debugging + DEBUG = 1; + // Enable HTTP requests tracing + TRACE = 2; + // Enable both HTTP debugging and requests tracing + BOTH = 3; +} + +message RegistryResolver { + // auth_stream is used to refer to a stream which auth callbacks may be + // made on. + string auth_stream = 1; + + // Headers + map headers = 2; + + string host_dir = 3; + + string default_scheme = 4; + // Force skip verify + // CA callback? Client TLS callback? + + // Whether to debug/trace HTTP requests to OCI registry. + HTTPDebug http_debug = 5; + + // Stream ID to use for HTTP logs (when logs are streamed to client). + // When empty, logs are written to containerd logs. + string logs_stream = 6; +} + +// AuthRequest is sent as a callback on a stream +message AuthRequest { + // host is the registry host + string host = 1; + + // reference is the namespace and repository name requested from the registry + string reference = 2; + + // wwwauthenticate is the HTTP WWW-Authenticate header values returned from the registry + repeated string wwwauthenticate = 3; +} + +enum AuthType { + NONE = 0; + + // CREDENTIALS is used to exchange username/password for access token + // using an oauth or "Docker Registry Token" server + CREDENTIALS = 1; + + // REFRESH is used to exchange secret for access token using an oauth + // or "Docker Registry Token" server + REFRESH = 2; + + // HEADER is used to set the HTTP Authorization header to secret + // directly for the registry. + // Value should be ` ` + HEADER = 3; +} + +message AuthResponse { + AuthType authType = 1; + string secret = 2; + string username = 3; + google.protobuf.Timestamp expire_at = 4; + // TODO: Stream error +} diff --git a/api/types/transfer/streaming.pb.go b/api/types/transfer/streaming.pb.go new file mode 100644 index 000000000000..3387e3174f43 --- /dev/null +++ b/api/types/transfer/streaming.pb.go @@ -0,0 +1,223 @@ +// +//Copyright The containerd Authors. +// +//Licensed under the Apache License, Version 2.0 (the "License"); +//you may not use this file except in compliance with the License. +//You may obtain a copy of the License at +// +//http://www.apache.org/licenses/LICENSE-2.0 +// +//Unless required by applicable law or agreed to in writing, software +//distributed under the License is distributed on an "AS IS" BASIS, +//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +//See the License for the specific language governing permissions and +//limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: types/transfer/streaming.proto + +package transfer + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Data struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *Data) Reset() { + *x = Data{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_streaming_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Data) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Data) ProtoMessage() {} + +func (x *Data) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_streaming_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Data.ProtoReflect.Descriptor instead. +func (*Data) Descriptor() ([]byte, []int) { + return file_types_transfer_streaming_proto_rawDescGZIP(), []int{0} +} + +func (x *Data) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type WindowUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Update int32 `protobuf:"varint,1,opt,name=update,proto3" json:"update,omitempty"` +} + +func (x *WindowUpdate) Reset() { + *x = WindowUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_types_transfer_streaming_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WindowUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WindowUpdate) ProtoMessage() {} + +func (x *WindowUpdate) ProtoReflect() protoreflect.Message { + mi := &file_types_transfer_streaming_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WindowUpdate.ProtoReflect.Descriptor instead. +func (*WindowUpdate) Descriptor() ([]byte, []int) { + return file_types_transfer_streaming_proto_rawDescGZIP(), []int{1} +} + +func (x *WindowUpdate) GetUpdate() int32 { + if x != nil { + return x.Update + } + return 0 +} + +var File_types_transfer_streaming_proto protoreflect.FileDescriptor + +var file_types_transfer_streaming_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, + 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x22, 0x1a, 0x0a, 0x04, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x26, 0x0a, 0x0c, 0x57, 0x69, 0x6e, 0x64, 0x6f, + 0x77, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, + 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_types_transfer_streaming_proto_rawDescOnce sync.Once + file_types_transfer_streaming_proto_rawDescData = file_types_transfer_streaming_proto_rawDesc +) + +func file_types_transfer_streaming_proto_rawDescGZIP() []byte { + file_types_transfer_streaming_proto_rawDescOnce.Do(func() { + file_types_transfer_streaming_proto_rawDescData = protoimpl.X.CompressGZIP(file_types_transfer_streaming_proto_rawDescData) + }) + return file_types_transfer_streaming_proto_rawDescData +} + +var file_types_transfer_streaming_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_types_transfer_streaming_proto_goTypes = []interface{}{ + (*Data)(nil), // 0: containerd.types.transfer.Data + (*WindowUpdate)(nil), // 1: containerd.types.transfer.WindowUpdate +} +var file_types_transfer_streaming_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_types_transfer_streaming_proto_init() } +func file_types_transfer_streaming_proto_init() { + if File_types_transfer_streaming_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_types_transfer_streaming_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Data); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_types_transfer_streaming_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WindowUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_types_transfer_streaming_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_types_transfer_streaming_proto_goTypes, + DependencyIndexes: file_types_transfer_streaming_proto_depIdxs, + MessageInfos: file_types_transfer_streaming_proto_msgTypes, + }.Build() + File_types_transfer_streaming_proto = out.File + file_types_transfer_streaming_proto_rawDesc = nil + file_types_transfer_streaming_proto_goTypes = nil + file_types_transfer_streaming_proto_depIdxs = nil +} diff --git a/api/types/transfer/streaming.proto b/api/types/transfer/streaming.proto new file mode 100644 index 000000000000..e01e70360d8a --- /dev/null +++ b/api/types/transfer/streaming.proto @@ -0,0 +1,29 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +syntax = "proto3"; + +package containerd.types.transfer; + +option go_package = "github.com/containerd/containerd/api/types/transfer"; + +message Data { + bytes data = 1; +} + +message WindowUpdate { + int32 update = 1; +} diff --git a/archive/compression/benchmark_test.go b/archive/compression/benchmark_test.go deleted file mode 100644 index f8340802a757..000000000000 --- a/archive/compression/benchmark_test.go +++ /dev/null @@ -1,68 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package compression - -import ( - "fmt" - "io" - "net/http" - "testing" - - "github.com/stretchr/testify/require" -) - -const benchmarkTestDataURL = "https://git.io/fADcl" - -func BenchmarkDecompression(b *testing.B) { - resp, err := http.Get(benchmarkTestDataURL) - require.NoError(b, err) - - data, err := io.ReadAll(resp.Body) - require.NoError(b, err) - resp.Body.Close() - - const mib = 1024 * 1024 - sizes := []int{32, 64, 128, 256} - - for _, sizeInMiB := range sizes { - size := sizeInMiB * mib - for len(data) < size { - data = append(data, data...) - } - data = data[0:size] - - gz := testCompress(b, data, Gzip) - zstd := testCompress(b, data, Zstd) - - b.Run(fmt.Sprintf("size=%dMiB", sizeInMiB), func(b *testing.B) { - b.Run("gzip", func(b *testing.B) { - testDecompress(b, gz) - }) - b.Run("zstd", func(b *testing.B) { - testDecompress(b, zstd) - }) - if unpigzPath != "" { - original := unpigzPath - unpigzPath = "" - b.Run("gzipPureGo", func(b *testing.B) { - testDecompress(b, gz) - }) - unpigzPath = original - } - }) - } -} diff --git a/archive/compression/compression.go b/archive/compression/compression.go deleted file mode 100644 index ceceb21f5655..000000000000 --- a/archive/compression/compression.go +++ /dev/null @@ -1,323 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package compression - -import ( - "bufio" - "bytes" - "compress/gzip" - "context" - "encoding/binary" - "fmt" - "io" - "os" - "strconv" - "sync" - - "github.com/containerd/containerd/log" - "github.com/klauspost/compress/zstd" - exec "golang.org/x/sys/execabs" -) - -type ( - // Compression is the state represents if compressed or not. - Compression int -) - -const ( - // Uncompressed represents the uncompressed. - Uncompressed Compression = iota - // Gzip is gzip compression algorithm. - Gzip - // Zstd is zstd compression algorithm. - Zstd -) - -const disablePigzEnv = "CONTAINERD_DISABLE_PIGZ" - -var ( - initPigz sync.Once - unpigzPath string -) - -var ( - bufioReader32KPool = &sync.Pool{ - New: func() interface{} { return bufio.NewReaderSize(nil, 32*1024) }, - } -) - -// DecompressReadCloser include the stream after decompress and the compress method detected. -type DecompressReadCloser interface { - io.ReadCloser - // GetCompression returns the compress method which is used before decompressing - GetCompression() Compression -} - -type readCloserWrapper struct { - io.Reader - compression Compression - closer func() error -} - -func (r *readCloserWrapper) Close() error { - if r.closer != nil { - return r.closer() - } - return nil -} - -func (r *readCloserWrapper) GetCompression() Compression { - return r.compression -} - -type writeCloserWrapper struct { - io.Writer - closer func() error -} - -func (w *writeCloserWrapper) Close() error { - if w.closer != nil { - w.closer() - } - return nil -} - -type bufferedReader struct { - buf *bufio.Reader -} - -func newBufferedReader(r io.Reader) *bufferedReader { - buf := bufioReader32KPool.Get().(*bufio.Reader) - buf.Reset(r) - return &bufferedReader{buf} -} - -func (r *bufferedReader) Read(p []byte) (n int, err error) { - if r.buf == nil { - return 0, io.EOF - } - n, err = r.buf.Read(p) - if err == io.EOF { - r.buf.Reset(nil) - bufioReader32KPool.Put(r.buf) - r.buf = nil - } - return -} - -func (r *bufferedReader) Peek(n int) ([]byte, error) { - if r.buf == nil { - return nil, io.EOF - } - return r.buf.Peek(n) -} - -const ( - zstdMagicSkippableStart = 0x184D2A50 - zstdMagicSkippableMask = 0xFFFFFFF0 -) - -var ( - gzipMagic = []byte{0x1F, 0x8B, 0x08} - zstdMagic = []byte{0x28, 0xb5, 0x2f, 0xfd} -) - -type matcher = func([]byte) bool - -func magicNumberMatcher(m []byte) matcher { - return func(source []byte) bool { - return bytes.HasPrefix(source, m) - } -} - -// zstdMatcher detects zstd compression algorithm. -// There are two frame formats defined by Zstandard: Zstandard frames and Skippable frames. -// See https://tools.ietf.org/id/draft-kucherawy-dispatch-zstd-00.html#rfc.section.2 for more details. -func zstdMatcher() matcher { - return func(source []byte) bool { - if bytes.HasPrefix(source, zstdMagic) { - // Zstandard frame - return true - } - // skippable frame - if len(source) < 8 { - return false - } - // magic number from 0x184D2A50 to 0x184D2A5F. - if binary.LittleEndian.Uint32(source[:4])&zstdMagicSkippableMask == zstdMagicSkippableStart { - return true - } - return false - } -} - -// DetectCompression detects the compression algorithm of the source. -func DetectCompression(source []byte) Compression { - for compression, fn := range map[Compression]matcher{ - Gzip: magicNumberMatcher(gzipMagic), - Zstd: zstdMatcher(), - } { - if fn(source) { - return compression - } - } - return Uncompressed -} - -// DecompressStream decompresses the archive and returns a ReaderCloser with the decompressed archive. -func DecompressStream(archive io.Reader) (DecompressReadCloser, error) { - buf := newBufferedReader(archive) - bs, err := buf.Peek(10) - if err != nil && err != io.EOF { - // Note: we'll ignore any io.EOF error because there are some odd - // cases where the layer.tar file will be empty (zero bytes) and - // that results in an io.EOF from the Peek() call. So, in those - // cases we'll just treat it as a non-compressed stream and - // that means just create an empty layer. - // See Issue docker/docker#18170 - return nil, err - } - - switch compression := DetectCompression(bs); compression { - case Uncompressed: - return &readCloserWrapper{ - Reader: buf, - compression: compression, - }, nil - case Gzip: - ctx, cancel := context.WithCancel(context.Background()) - gzReader, err := gzipDecompress(ctx, buf) - if err != nil { - cancel() - return nil, err - } - - return &readCloserWrapper{ - Reader: gzReader, - compression: compression, - closer: func() error { - cancel() - return gzReader.Close() - }, - }, nil - case Zstd: - zstdReader, err := zstd.NewReader(buf) - if err != nil { - return nil, err - } - return &readCloserWrapper{ - Reader: zstdReader, - compression: compression, - closer: func() error { - zstdReader.Close() - return nil - }, - }, nil - - default: - return nil, fmt.Errorf("unsupported compression format %s", (&compression).Extension()) - } -} - -// CompressStream compresses the dest with specified compression algorithm. -func CompressStream(dest io.Writer, compression Compression) (io.WriteCloser, error) { - switch compression { - case Uncompressed: - return &writeCloserWrapper{dest, nil}, nil - case Gzip: - return gzip.NewWriter(dest), nil - case Zstd: - return zstd.NewWriter(dest) - default: - return nil, fmt.Errorf("unsupported compression format %s", (&compression).Extension()) - } -} - -// Extension returns the extension of a file that uses the specified compression algorithm. -func (compression *Compression) Extension() string { - switch *compression { - case Gzip: - return "gz" - case Zstd: - return "zst" - } - return "" -} - -func gzipDecompress(ctx context.Context, buf io.Reader) (io.ReadCloser, error) { - initPigz.Do(func() { - if unpigzPath = detectPigz(); unpigzPath != "" { - log.L.Debug("using pigz for decompression") - } - }) - - if unpigzPath == "" { - return gzip.NewReader(buf) - } - - return cmdStream(exec.CommandContext(ctx, unpigzPath, "-d", "-c"), buf) -} - -func cmdStream(cmd *exec.Cmd, in io.Reader) (io.ReadCloser, error) { - reader, writer := io.Pipe() - - cmd.Stdin = in - cmd.Stdout = writer - - var errBuf bytes.Buffer - cmd.Stderr = &errBuf - - if err := cmd.Start(); err != nil { - return nil, err - } - - go func() { - if err := cmd.Wait(); err != nil { - writer.CloseWithError(fmt.Errorf("%s: %s", err, errBuf.String())) - } else { - writer.Close() - } - }() - - return reader, nil -} - -func detectPigz() string { - path, err := exec.LookPath("unpigz") - if err != nil { - log.L.WithError(err).Debug("unpigz not found, falling back to go gzip") - return "" - } - - // Check if pigz disabled via CONTAINERD_DISABLE_PIGZ env variable - value := os.Getenv(disablePigzEnv) - if value == "" { - return path - } - - disable, err := strconv.ParseBool(value) - if err != nil { - log.L.WithError(err).Warnf("could not parse %s: %s", disablePigzEnv, value) - return path - } - - if disable { - return "" - } - - return path -} diff --git a/archive/compression/compression_fuzzer.go b/archive/compression/compression_fuzzer.go deleted file mode 100644 index b8374799d15c..000000000000 --- a/archive/compression/compression_fuzzer.go +++ /dev/null @@ -1,29 +0,0 @@ -//go:build gofuzz -// +build gofuzz - -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package compression - -import ( - "bytes" -) - -func FuzzDecompressStream(data []byte) int { - _, _ = DecompressStream(bytes.NewReader(data)) - return 1 -} diff --git a/archive/link_freebsd.go b/archive/link_freebsd.go deleted file mode 100644 index 2097db06bc7d..000000000000 --- a/archive/link_freebsd.go +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package archive - -import ( - "os" - "syscall" - - "golang.org/x/sys/unix" -) - -func link(oldname, newname string) error { - e := ignoringEINTR(func() error { - return unix.Linkat(unix.AT_FDCWD, oldname, unix.AT_FDCWD, newname, 0) - }) - if e != nil { - return &os.LinkError{Op: "link", Old: oldname, New: newname, Err: e} - } - return nil -} - -// The following contents were copied from Go 1.18.2. -// Use of this source code is governed by the following -// BSD-style license: -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// ignoringEINTR makes a function call and repeats it if it returns an -// EINTR error. This appears to be required even though we install all -// signal handlers with SA_RESTART: see #22838, #38033, #38836, #40846. -// Also #20400 and #36644 are issues in which a signal handler is -// installed without setting SA_RESTART. None of these are the common case, -// but there are enough of them that it seems that we can't avoid -// an EINTR loop. -func ignoringEINTR(fn func() error) error { - for { - err := fn() - if err != syscall.EINTR { - return err - } - } -} diff --git a/archive/time_windows.go b/archive/time_windows.go deleted file mode 100644 index 71f397821a61..000000000000 --- a/archive/time_windows.go +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package archive - -import ( - "time" - - "golang.org/x/sys/windows" -) - -// chtimes will set the create time on a file using the given modtime. -// This requires calling SetFileTime and explicitly including the create time. -func chtimes(path string, atime, mtime time.Time) error { - ctimespec := windows.NsecToTimespec(mtime.UnixNano()) - pathp, e := windows.UTF16PtrFromString(path) - if e != nil { - return e - } - h, e := windows.CreateFile(pathp, - windows.FILE_WRITE_ATTRIBUTES, windows.FILE_SHARE_WRITE, nil, - windows.OPEN_EXISTING, windows.FILE_FLAG_BACKUP_SEMANTICS, 0) - if e != nil { - return e - } - defer windows.Close(h) - c := windows.NsecToFiletime(windows.TimespecToNsec(ctimespec)) - return windows.SetFileTime(h, &c, nil, nil) -} diff --git a/cio/io.go b/cio/io.go deleted file mode 100644 index 8ee13edda4a3..000000000000 --- a/cio/io.go +++ /dev/null @@ -1,359 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package cio - -import ( - "context" - "errors" - "fmt" - "io" - "net/url" - "os" - "path/filepath" - "strings" - "sync" - - "github.com/containerd/containerd/defaults" -) - -var bufPool = sync.Pool{ - New: func() interface{} { - buffer := make([]byte, 32<<10) - return &buffer - }, -} - -// Config holds the IO configurations. -type Config struct { - // Terminal is true if one has been allocated - Terminal bool - // Stdin path - Stdin string - // Stdout path - Stdout string - // Stderr path - Stderr string -} - -// IO holds the io information for a task or process -type IO interface { - // Config returns the IO configuration. - Config() Config - // Cancel aborts all current io operations. - Cancel() - // Wait blocks until all io copy operations have completed. - Wait() - // Close cleans up all open io resources. Cancel() is always called before - // Close() - Close() error -} - -// Creator creates new IO sets for a task -type Creator func(id string) (IO, error) - -// Attach allows callers to reattach to running tasks -// -// There should only be one reader for a task's IO set -// because fifo's can only be read from one reader or the output -// will be sent only to the first reads -type Attach func(*FIFOSet) (IO, error) - -// FIFOSet is a set of file paths to FIFOs for a task's standard IO streams -type FIFOSet struct { - Config - close func() error -} - -// Close the FIFOSet -func (f *FIFOSet) Close() error { - if f != nil && f.close != nil { - return f.close() - } - return nil -} - -// NewFIFOSet returns a new FIFOSet from a Config and a close function -func NewFIFOSet(config Config, close func() error) *FIFOSet { - return &FIFOSet{Config: config, close: close} -} - -// Streams used to configure a Creator or Attach -type Streams struct { - Stdin io.Reader - Stdout io.Writer - Stderr io.Writer - Terminal bool - FIFODir string -} - -// Opt customize options for creating a Creator or Attach -type Opt func(*Streams) - -// WithStdio sets stream options to the standard input/output streams -func WithStdio(opt *Streams) { - WithStreams(os.Stdin, os.Stdout, os.Stderr)(opt) -} - -// WithTerminal sets the terminal option -func WithTerminal(opt *Streams) { - opt.Terminal = true -} - -// WithStreams sets the stream options to the specified Reader and Writers -func WithStreams(stdin io.Reader, stdout, stderr io.Writer) Opt { - return func(opt *Streams) { - opt.Stdin = stdin - opt.Stdout = stdout - opt.Stderr = stderr - } -} - -// WithFIFODir sets the fifo directory. -// e.g. "/run/containerd/fifo", "/run/users/1001/containerd/fifo" -func WithFIFODir(dir string) Opt { - return func(opt *Streams) { - opt.FIFODir = dir - } -} - -// NewCreator returns an IO creator from the options -func NewCreator(opts ...Opt) Creator { - streams := &Streams{} - for _, opt := range opts { - opt(streams) - } - if streams.FIFODir == "" { - streams.FIFODir = defaults.DefaultFIFODir - } - return func(id string) (IO, error) { - fifos, err := NewFIFOSetInDir(streams.FIFODir, id, streams.Terminal) - if err != nil { - return nil, err - } - if streams.Stdin == nil { - fifos.Stdin = "" - } - if streams.Stdout == nil { - fifos.Stdout = "" - } - if streams.Stderr == nil { - fifos.Stderr = "" - } - return copyIO(fifos, streams) - } -} - -// NewAttach attaches the existing io for a task to the provided io.Reader/Writers -func NewAttach(opts ...Opt) Attach { - streams := &Streams{} - for _, opt := range opts { - opt(streams) - } - return func(fifos *FIFOSet) (IO, error) { - if fifos == nil { - return nil, fmt.Errorf("cannot attach, missing fifos") - } - return copyIO(fifos, streams) - } -} - -// NullIO redirects the container's IO into /dev/null -func NullIO(_ string) (IO, error) { - return &cio{}, nil -} - -// cio is a basic container IO implementation. -type cio struct { - config Config - wg *sync.WaitGroup - closers []io.Closer - cancel context.CancelFunc -} - -func (c *cio) Config() Config { - return c.config -} - -func (c *cio) Wait() { - if c.wg != nil { - c.wg.Wait() - } -} - -func (c *cio) Close() error { - var lastErr error - for _, closer := range c.closers { - if closer == nil { - continue - } - if err := closer.Close(); err != nil { - lastErr = err - } - } - return lastErr -} - -func (c *cio) Cancel() { - if c.cancel != nil { - c.cancel() - } -} - -type pipes struct { - Stdin io.WriteCloser - Stdout io.ReadCloser - Stderr io.ReadCloser -} - -// DirectIO allows task IO to be handled externally by the caller -type DirectIO struct { - pipes - cio -} - -var ( - _ IO = &DirectIO{} - _ IO = &logURI{} -) - -// LogURI provides the raw logging URI -func LogURI(uri *url.URL) Creator { - return func(_ string) (IO, error) { - return &logURI{ - config: Config{ - Stdout: uri.String(), - Stderr: uri.String(), - }, - }, nil - } -} - -// BinaryIO forwards container STDOUT|STDERR directly to a logging binary -func BinaryIO(binary string, args map[string]string) Creator { - return func(_ string) (IO, error) { - uri, err := LogURIGenerator("binary", binary, args) - if err != nil { - return nil, err - } - - res := uri.String() - return &logURI{ - config: Config{ - Stdout: res, - Stderr: res, - }, - }, nil - } -} - -// TerminalBinaryIO forwards container STDOUT|STDERR directly to a logging binary -// It also sets the terminal option to true -func TerminalBinaryIO(binary string, args map[string]string) Creator { - return func(_ string) (IO, error) { - uri, err := LogURIGenerator("binary", binary, args) - if err != nil { - return nil, err - } - - res := uri.String() - return &logURI{ - config: Config{ - Stdout: res, - Stderr: res, - Terminal: true, - }, - }, nil - } -} - -// LogFile creates a file on disk that logs the task's STDOUT,STDERR. -// If the log file already exists, the logs will be appended to the file. -func LogFile(path string) Creator { - return func(_ string) (IO, error) { - uri, err := LogURIGenerator("file", path, nil) - if err != nil { - return nil, err - } - - res := uri.String() - return &logURI{ - config: Config{ - Stdout: res, - Stderr: res, - }, - }, nil - } -} - -// LogURIGenerator is the helper to generate log uri with specific scheme. -func LogURIGenerator(scheme string, path string, args map[string]string) (*url.URL, error) { - path = filepath.Clean(path) - if !strings.HasPrefix(path, "/") { - return nil, errors.New("absolute path needed") - } - - uri := &url.URL{ - Scheme: scheme, - Path: path, - } - - if len(args) == 0 { - return uri, nil - } - - q := uri.Query() - for k, v := range args { - q.Set(k, v) - } - uri.RawQuery = q.Encode() - return uri, nil -} - -type logURI struct { - config Config -} - -func (l *logURI) Config() Config { - return l.config -} - -func (l *logURI) Cancel() { - -} - -func (l *logURI) Wait() { - -} - -func (l *logURI) Close() error { - return nil -} - -// Load the io for a container but do not attach -// -// Allows io to be loaded on the task for deletion without -// starting copy routines -func Load(set *FIFOSet) (IO, error) { - return &cio{ - config: set.Config, - closers: []io.Closer{set}, - }, nil -} - -func (p *pipes) closers() []io.Closer { - return []io.Closer{p.Stdin, p.Stdout, p.Stderr} -} diff --git a/cio/io_test.go b/cio/io_test.go deleted file mode 100644 index f7e3aadf0a55..000000000000 --- a/cio/io_test.go +++ /dev/null @@ -1,236 +0,0 @@ -//go:build !windows -// +build !windows - -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package cio - -import ( - "bytes" - "context" - "io" - "net/url" - "os" - "path/filepath" - "runtime" - "strings" - "syscall" - "testing" - - "github.com/containerd/fifo" - "github.com/stretchr/testify/assert" -) - -func assertHasPrefix(t *testing.T, s, prefix string) { - t.Helper() - if !strings.HasPrefix(s, prefix) { - t.Fatalf("expected %s to start with %s", s, prefix) - } -} - -func TestNewFIFOSetInDir(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip("NewFIFOSetInDir has different behaviour on windows") - } - - root := t.TempDir() - - fifos, err := NewFIFOSetInDir(root, "theid", true) - assert.NoError(t, err) - - dir := filepath.Dir(fifos.Stdin) - assertHasPrefix(t, dir, root) - expected := &FIFOSet{ - Config: Config{ - Stdin: filepath.Join(dir, "theid-stdin"), - Stdout: filepath.Join(dir, "theid-stdout"), - Stderr: filepath.Join(dir, "theid-stderr"), - Terminal: true, - }, - } - - assert.Equal(t, fifos.Config, expected.Config) - - files, err := os.ReadDir(root) - assert.NoError(t, err) - assert.Len(t, files, 1) - - assert.Nil(t, fifos.Close()) - files, err = os.ReadDir(root) - assert.NoError(t, err) - assert.Len(t, files, 0) -} - -func TestNewAttach(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip("setupFIFOProducers not yet implemented on windows") - } - var ( - expectedStdin = "this is the stdin" - expectedStdout = "this is the stdout" - expectedStderr = "this is the stderr" - stdin = bytes.NewBufferString(expectedStdin) - stdout = new(bytes.Buffer) - stderr = new(bytes.Buffer) - ) - - withBytesBuffers := func(streams *Streams) { - *streams = Streams{Stdin: stdin, Stdout: stdout, Stderr: stderr} - } - attacher := NewAttach(withBytesBuffers) - - fifos, err := NewFIFOSetInDir("", "theid", false) - assert.NoError(t, err) - - attachedFifos, err := attacher(fifos) - assert.NoError(t, err) - defer attachedFifos.Close() - - producers := setupFIFOProducers(t, attachedFifos.Config()) - initProducers(t, producers, expectedStdout, expectedStderr) - - actualStdin, err := io.ReadAll(producers.Stdin) - assert.NoError(t, err) - - attachedFifos.Wait() - attachedFifos.Cancel() - assert.Nil(t, attachedFifos.Close()) - - assert.Equal(t, expectedStdout, stdout.String()) - assert.Equal(t, expectedStderr, stderr.String()) - assert.Equal(t, expectedStdin, string(actualStdin)) -} - -type producers struct { - Stdin io.ReadCloser - Stdout io.WriteCloser - Stderr io.WriteCloser -} - -func setupFIFOProducers(t *testing.T, fifos Config) producers { - var ( - err error - pipes producers - ctx = context.Background() - ) - - pipes.Stdin, err = fifo.OpenFifo(ctx, fifos.Stdin, syscall.O_RDONLY, 0) - assert.NoError(t, err) - - pipes.Stdout, err = fifo.OpenFifo(ctx, fifos.Stdout, syscall.O_WRONLY, 0) - assert.NoError(t, err) - - pipes.Stderr, err = fifo.OpenFifo(ctx, fifos.Stderr, syscall.O_WRONLY, 0) - assert.NoError(t, err) - - return pipes -} - -func initProducers(t *testing.T, producers producers, stdout, stderr string) { - _, err := producers.Stdout.Write([]byte(stdout)) - assert.NoError(t, err) - assert.Nil(t, producers.Stdout.Close()) - - _, err = producers.Stderr.Write([]byte(stderr)) - assert.NoError(t, err) - assert.Nil(t, producers.Stderr.Close()) -} - -func TestBinaryIOArgs(t *testing.T) { - res, err := BinaryIO("/file.bin", map[string]string{"id": "1"})("") - assert.NoError(t, err) - assert.Equal(t, "binary:///file.bin?id=1", res.Config().Stdout) - assert.Equal(t, "binary:///file.bin?id=1", res.Config().Stderr) -} - -func TestBinaryIOAbsolutePath(t *testing.T) { - res, err := BinaryIO("/full/path/bin", nil)("!") - assert.NoError(t, err) - - // Test parse back - parsed, err := url.Parse(res.Config().Stdout) - assert.NoError(t, err) - assert.Equal(t, "binary", parsed.Scheme) - assert.Equal(t, "/full/path/bin", parsed.Path) -} - -func TestBinaryIOFailOnRelativePath(t *testing.T) { - _, err := BinaryIO("./bin", nil)("!") - assert.Error(t, err, "absolute path needed") -} - -func TestLogFileAbsolutePath(t *testing.T) { - res, err := LogFile("/full/path/file.txt")("!") - assert.NoError(t, err) - assert.Equal(t, "file:///full/path/file.txt", res.Config().Stdout) - assert.Equal(t, "file:///full/path/file.txt", res.Config().Stderr) - - // Test parse back - parsed, err := url.Parse(res.Config().Stdout) - assert.NoError(t, err) - assert.Equal(t, "file", parsed.Scheme) - assert.Equal(t, "/full/path/file.txt", parsed.Path) -} - -func TestLogFileFailOnRelativePath(t *testing.T) { - _, err := LogFile("./file.txt")("!") - assert.Error(t, err, "absolute path needed") -} - -func TestLogURIGenerator(t *testing.T) { - for _, tc := range []struct { - scheme string - path string - args map[string]string - expected string - err string - }{ - { - scheme: "fifo", - path: "/full/path/pipe.fifo", - expected: "fifo:///full/path/pipe.fifo", - }, - { - scheme: "file", - path: "/full/path/file.txt", - args: map[string]string{ - "maxSize": "100MB", - }, - expected: "file:///full/path/file.txt?maxSize=100MB", - }, - { - scheme: "binary", - path: "/full/path/bin", - args: map[string]string{ - "id": "testing", - }, - expected: "binary:///full/path/bin?id=testing", - }, - { - scheme: "unknown", - path: "nowhere", - err: "absolute path needed", - }, - } { - uri, err := LogURIGenerator(tc.scheme, tc.path, tc.args) - if err != nil { - assert.Error(t, err, tc.err) - continue - } - assert.Equal(t, tc.expected, uri.String()) - } -} diff --git a/cio/io_unix_test.go b/cio/io_unix_test.go deleted file mode 100644 index 75ca21cec5b8..000000000000 --- a/cio/io_unix_test.go +++ /dev/null @@ -1,97 +0,0 @@ -//go:build !windows -// +build !windows - -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package cio - -import ( - "context" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestOpenFifos(t *testing.T) { - scenarios := []*FIFOSet{ - { - Config: Config{ - Stdin: "", - Stdout: filepath.Join("This/does/not/exist", "test-stdout"), - Stderr: filepath.Join("This/does/not/exist", "test-stderr"), - }, - }, - { - Config: Config{ - Stdin: filepath.Join("This/does/not/exist", "test-stdin"), - Stdout: "", - Stderr: filepath.Join("This/does/not/exist", "test-stderr"), - }, - }, - { - Config: Config{ - Stdin: "", - Stdout: "", - Stderr: filepath.Join("This/does/not/exist", "test-stderr"), - }, - }, - } - for _, scenario := range scenarios { - _, err := openFifos(context.Background(), scenario) - assert.Error(t, err, scenario) - } -} - -// TestOpenFifosWithTerminal tests openFifos should not open stderr if terminal -// is set. -func TestOpenFifosWithTerminal(t *testing.T) { - var ctx, cancel = context.WithCancel(context.Background()) - defer cancel() - - ioFifoDir := t.TempDir() - - cfg := Config{ - Stdout: filepath.Join(ioFifoDir, "test-stdout"), - Stderr: filepath.Join(ioFifoDir, "test-stderr"), - } - - // Without terminal, pipes.Stderr should not be nil - { - p, err := openFifos(ctx, NewFIFOSet(cfg, nil)) - if err != nil { - t.Fatalf("unexpected error during openFifos: %v", err) - } - - if p.Stderr == nil { - t.Fatalf("unexpected empty stderr pipe") - } - } - - // With terminal, pipes.Stderr should be nil - { - cfg.Terminal = true - p, err := openFifos(ctx, NewFIFOSet(cfg, nil)) - if err != nil { - t.Fatalf("unexpected error during openFifos: %v", err) - } - - if p.Stderr != nil { - t.Fatalf("unexpected stderr pipe") - } - } -} diff --git a/cio/io_windows_test.go b/cio/io_windows_test.go deleted file mode 100644 index 278a0552814a..000000000000 --- a/cio/io_windows_test.go +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package cio - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestNewFifoSetInDir_NoTerminal(t *testing.T) { - set, err := NewFIFOSetInDir("", t.Name(), false) - if err != nil { - t.Fatalf("NewFifoSetInDir failed with: %v", err) - } - - assert.True(t, !set.Terminal, "FIFOSet.Terminal should be false") - assert.NotEmpty(t, set.Stdin, "FIFOSet.Stdin should be set") - assert.NotEmpty(t, set.Stdout, "FIFOSet.Stdout should be set") - assert.NotEmpty(t, set.Stderr, "FIFOSet.Stderr should be set") -} - -func TestNewFifoSetInDir_Terminal(t *testing.T) { - set, err := NewFIFOSetInDir("", t.Name(), true) - if err != nil { - t.Fatalf("NewFifoSetInDir failed with: %v", err) - } - - assert.True(t, set.Terminal, "FIFOSet.Terminal should be true") - assert.NotEmpty(t, set.Stdin, "FIFOSet.Stdin should be set") - assert.NotEmpty(t, set.Stdout, "FIFOSet.Stdout should be set") - assert.Empty(t, set.Stderr, "FIFOSet.Stderr should not be set") -} diff --git a/client.go b/client.go deleted file mode 100644 index d4ef83684f64..000000000000 --- a/client.go +++ /dev/null @@ -1,856 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package containerd - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "runtime" - "strconv" - "strings" - "sync" - "time" - - containersapi "github.com/containerd/containerd/api/services/containers/v1" - contentapi "github.com/containerd/containerd/api/services/content/v1" - diffapi "github.com/containerd/containerd/api/services/diff/v1" - eventsapi "github.com/containerd/containerd/api/services/events/v1" - imagesapi "github.com/containerd/containerd/api/services/images/v1" - introspectionapi "github.com/containerd/containerd/api/services/introspection/v1" - leasesapi "github.com/containerd/containerd/api/services/leases/v1" - namespacesapi "github.com/containerd/containerd/api/services/namespaces/v1" - sandboxsapi "github.com/containerd/containerd/api/services/sandbox/v1" - snapshotsapi "github.com/containerd/containerd/api/services/snapshots/v1" - "github.com/containerd/containerd/api/services/tasks/v1" - versionservice "github.com/containerd/containerd/api/services/version/v1" - apitypes "github.com/containerd/containerd/api/types" - "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/content" - contentproxy "github.com/containerd/containerd/content/proxy" - "github.com/containerd/containerd/defaults" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/events" - "github.com/containerd/containerd/images" - "github.com/containerd/containerd/leases" - leasesproxy "github.com/containerd/containerd/leases/proxy" - "github.com/containerd/containerd/namespaces" - "github.com/containerd/containerd/pkg/dialer" - "github.com/containerd/containerd/platforms" - "github.com/containerd/containerd/plugin" - ptypes "github.com/containerd/containerd/protobuf/types" - "github.com/containerd/containerd/remotes" - "github.com/containerd/containerd/remotes/docker" - "github.com/containerd/containerd/sandbox" - "github.com/containerd/containerd/services/introspection" - "github.com/containerd/containerd/snapshots" - snproxy "github.com/containerd/containerd/snapshots/proxy" - "github.com/containerd/typeurl" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/opencontainers/runtime-spec/specs-go" - "golang.org/x/sync/semaphore" - "google.golang.org/grpc" - "google.golang.org/grpc/backoff" - "google.golang.org/grpc/credentials/insecure" - "google.golang.org/grpc/health/grpc_health_v1" -) - -func init() { - const prefix = "types.containerd.io" - // register TypeUrls for commonly marshaled external types - major := strconv.Itoa(specs.VersionMajor) - typeurl.Register(&specs.Spec{}, prefix, "opencontainers/runtime-spec", major, "Spec") - typeurl.Register(&specs.Process{}, prefix, "opencontainers/runtime-spec", major, "Process") - typeurl.Register(&specs.LinuxResources{}, prefix, "opencontainers/runtime-spec", major, "LinuxResources") - typeurl.Register(&specs.WindowsResources{}, prefix, "opencontainers/runtime-spec", major, "WindowsResources") -} - -// New returns a new containerd client that is connected to the containerd -// instance provided by address -func New(address string, opts ...ClientOpt) (*Client, error) { - var copts clientOpts - for _, o := range opts { - if err := o(&copts); err != nil { - return nil, err - } - } - if copts.timeout == 0 { - copts.timeout = 10 * time.Second - } - - c := &Client{ - defaultns: copts.defaultns, - } - - if copts.defaultRuntime != "" { - c.runtime = copts.defaultRuntime - } else { - c.runtime = defaults.DefaultRuntime - } - - if copts.defaultPlatform != nil { - c.platform = copts.defaultPlatform - } else { - c.platform = platforms.Default() - } - - if copts.services != nil { - c.services = *copts.services - } - if address != "" { - backoffConfig := backoff.DefaultConfig - backoffConfig.MaxDelay = 3 * time.Second - connParams := grpc.ConnectParams{ - Backoff: backoffConfig, - } - gopts := []grpc.DialOption{ - grpc.WithBlock(), - grpc.WithTransportCredentials(insecure.NewCredentials()), - grpc.FailOnNonTempDialError(true), - grpc.WithConnectParams(connParams), - grpc.WithContextDialer(dialer.ContextDialer), - grpc.WithReturnConnectionError(), - } - if len(copts.dialOptions) > 0 { - gopts = copts.dialOptions - } - gopts = append(gopts, grpc.WithDefaultCallOptions( - grpc.MaxCallRecvMsgSize(defaults.DefaultMaxRecvMsgSize), - grpc.MaxCallSendMsgSize(defaults.DefaultMaxSendMsgSize))) - if len(copts.callOptions) > 0 { - gopts = append(gopts, grpc.WithDefaultCallOptions(copts.callOptions...)) - } - if copts.defaultns != "" { - unary, stream := newNSInterceptors(copts.defaultns) - gopts = append(gopts, grpc.WithChainUnaryInterceptor(unary)) - gopts = append(gopts, grpc.WithChainStreamInterceptor(stream)) - } - - connector := func() (*grpc.ClientConn, error) { - ctx, cancel := context.WithTimeout(context.Background(), copts.timeout) - defer cancel() - conn, err := grpc.DialContext(ctx, dialer.DialAddress(address), gopts...) - if err != nil { - return nil, fmt.Errorf("failed to dial %q: %w", address, err) - } - return conn, nil - } - conn, err := connector() - if err != nil { - return nil, err - } - c.conn, c.connector = conn, connector - } - if copts.services == nil && c.conn == nil { - return nil, fmt.Errorf("no grpc connection or services is available: %w", errdefs.ErrUnavailable) - } - - // check namespace labels for default runtime - if copts.defaultRuntime == "" && c.defaultns != "" { - if label, err := c.GetLabel(context.Background(), defaults.DefaultRuntimeNSLabel); err != nil { - return nil, err - } else if label != "" { - c.runtime = label - } - } - - return c, nil -} - -// NewWithConn returns a new containerd client that is connected to the containerd -// instance provided by the connection -func NewWithConn(conn *grpc.ClientConn, opts ...ClientOpt) (*Client, error) { - var copts clientOpts - for _, o := range opts { - if err := o(&copts); err != nil { - return nil, err - } - } - c := &Client{ - defaultns: copts.defaultns, - conn: conn, - runtime: fmt.Sprintf("%s.%s", plugin.RuntimePlugin, runtime.GOOS), - } - - // check namespace labels for default runtime - if copts.defaultRuntime == "" && c.defaultns != "" { - if label, err := c.GetLabel(context.Background(), defaults.DefaultRuntimeNSLabel); err != nil { - return nil, err - } else if label != "" { - c.runtime = label - } - } - - if copts.services != nil { - c.services = *copts.services - } - return c, nil -} - -// Client is the client to interact with containerd and its various services -// using a uniform interface -type Client struct { - services - connMu sync.Mutex - conn *grpc.ClientConn - runtime string - defaultns string - platform platforms.MatchComparer - connector func() (*grpc.ClientConn, error) -} - -// Reconnect re-establishes the GRPC connection to the containerd daemon -func (c *Client) Reconnect() error { - if c.connector == nil { - return fmt.Errorf("unable to reconnect to containerd, no connector available: %w", errdefs.ErrUnavailable) - } - c.connMu.Lock() - defer c.connMu.Unlock() - c.conn.Close() - conn, err := c.connector() - if err != nil { - return err - } - c.conn = conn - return nil -} - -// Runtime returns the name of the runtime being used -func (c *Client) Runtime() string { - return c.runtime -} - -// IsServing returns true if the client can successfully connect to the -// containerd daemon and the healthcheck service returns the SERVING -// response. -// This call will block if a transient error is encountered during -// connection. A timeout can be set in the context to ensure it returns -// early. -func (c *Client) IsServing(ctx context.Context) (bool, error) { - c.connMu.Lock() - if c.conn == nil { - c.connMu.Unlock() - return false, fmt.Errorf("no grpc connection available: %w", errdefs.ErrUnavailable) - } - c.connMu.Unlock() - r, err := c.HealthService().Check(ctx, &grpc_health_v1.HealthCheckRequest{}, grpc.WaitForReady(true)) - if err != nil { - return false, err - } - return r.Status == grpc_health_v1.HealthCheckResponse_SERVING, nil -} - -// Containers returns all containers created in containerd -func (c *Client) Containers(ctx context.Context, filters ...string) ([]Container, error) { - r, err := c.ContainerService().List(ctx, filters...) - if err != nil { - return nil, err - } - var out []Container - for _, container := range r { - out = append(out, containerFromRecord(c, container)) - } - return out, nil -} - -// NewContainer will create a new container with the provided id. -// The id must be unique within the namespace. -func (c *Client) NewContainer(ctx context.Context, id string, opts ...NewContainerOpts) (Container, error) { - ctx, done, err := c.WithLease(ctx) - if err != nil { - return nil, err - } - defer done(ctx) - - container := containers.Container{ - ID: id, - Runtime: containers.RuntimeInfo{ - Name: c.runtime, - }, - } - for _, o := range opts { - if err := o(ctx, c, &container); err != nil { - return nil, err - } - } - r, err := c.ContainerService().Create(ctx, container) - if err != nil { - return nil, err - } - return containerFromRecord(c, r), nil -} - -// LoadContainer loads an existing container from metadata -func (c *Client) LoadContainer(ctx context.Context, id string) (Container, error) { - r, err := c.ContainerService().Get(ctx, id) - if err != nil { - return nil, err - } - return containerFromRecord(c, r), nil -} - -// RemoteContext is used to configure object resolutions and transfers with -// remote content stores and image providers. -type RemoteContext struct { - // Resolver is used to resolve names to objects, fetchers, and pushers. - // If no resolver is provided, defaults to Docker registry resolver. - Resolver remotes.Resolver - - // PlatformMatcher is used to match the platforms for an image - // operation and define the preference when a single match is required - // from multiple platforms. - PlatformMatcher platforms.MatchComparer - - // Unpack is done after an image is pulled to extract into a snapshotter. - // It is done simultaneously for schema 2 images when they are pulled. - // If an image is not unpacked on pull, it can be unpacked any time - // afterwards. Unpacking is required to run an image. - Unpack bool - - // UnpackOpts handles options to the unpack call. - UnpackOpts []UnpackOpt - - // Snapshotter used for unpacking - Snapshotter string - - // SnapshotterOpts are additional options to be passed to a snapshotter during pull - SnapshotterOpts []snapshots.Opt - - // Labels to be applied to the created image - Labels map[string]string - - // BaseHandlers are a set of handlers which get are called on dispatch. - // These handlers always get called before any operation specific - // handlers. - BaseHandlers []images.Handler - - // HandlerWrapper wraps the handler which gets sent to dispatch. - // Unlike BaseHandlers, this can run before and after the built - // in handlers, allowing operations to run on the descriptor - // after it has completed transferring. - HandlerWrapper func(images.Handler) images.Handler - - // ConvertSchema1 is whether to convert Docker registry schema 1 - // manifests. If this option is false then any image which resolves - // to schema 1 will return an error since schema 1 is not supported. - // - // Deprecated: use Schema 2 or OCI images. - ConvertSchema1 bool - - // Platforms defines which platforms to handle when doing the image operation. - // Platforms is ignored when a PlatformMatcher is set, otherwise the - // platforms will be used to create a PlatformMatcher with no ordering - // preference. - Platforms []string - - // MaxConcurrentDownloads is the max concurrent content downloads for each pull. - MaxConcurrentDownloads int - - // MaxConcurrentUploadedLayers is the max concurrent uploaded layers for each push. - MaxConcurrentUploadedLayers int - - // AllMetadata downloads all manifests and known-configuration files - AllMetadata bool - - // ChildLabelMap sets the labels used to reference child objects in the content - // store. By default, all GC reference labels will be set for all fetched content. - ChildLabelMap func(ocispec.Descriptor) []string -} - -func defaultRemoteContext() *RemoteContext { - return &RemoteContext{ - Resolver: docker.NewResolver(docker.ResolverOptions{}), - } -} - -// Fetch downloads the provided content into containerd's content store -// and returns a non-platform specific image reference -func (c *Client) Fetch(ctx context.Context, ref string, opts ...RemoteOpt) (images.Image, error) { - fetchCtx := defaultRemoteContext() - for _, o := range opts { - if err := o(c, fetchCtx); err != nil { - return images.Image{}, err - } - } - - if fetchCtx.Unpack { - return images.Image{}, fmt.Errorf("unpack on fetch not supported, try pull: %w", errdefs.ErrNotImplemented) - } - - if fetchCtx.PlatformMatcher == nil { - if len(fetchCtx.Platforms) == 0 { - fetchCtx.PlatformMatcher = platforms.All - } else { - var ps []ocispec.Platform - for _, s := range fetchCtx.Platforms { - p, err := platforms.Parse(s) - if err != nil { - return images.Image{}, fmt.Errorf("invalid platform %s: %w", s, err) - } - ps = append(ps, p) - } - - fetchCtx.PlatformMatcher = platforms.Any(ps...) - } - } - - ctx, done, err := c.WithLease(ctx) - if err != nil { - return images.Image{}, err - } - defer done(ctx) - - img, err := c.fetch(ctx, fetchCtx, ref, 0) - if err != nil { - return images.Image{}, err - } - return c.createNewImage(ctx, img) -} - -// Push uploads the provided content to a remote resource -func (c *Client) Push(ctx context.Context, ref string, desc ocispec.Descriptor, opts ...RemoteOpt) error { - pushCtx := defaultRemoteContext() - for _, o := range opts { - if err := o(c, pushCtx); err != nil { - return err - } - } - if pushCtx.PlatformMatcher == nil { - if len(pushCtx.Platforms) > 0 { - var ps []ocispec.Platform - for _, platform := range pushCtx.Platforms { - p, err := platforms.Parse(platform) - if err != nil { - return fmt.Errorf("invalid platform %s: %w", platform, err) - } - ps = append(ps, p) - } - pushCtx.PlatformMatcher = platforms.Any(ps...) - } else { - pushCtx.PlatformMatcher = platforms.All - } - } - - // Annotate ref with digest to push only push tag for single digest - if !strings.Contains(ref, "@") { - ref = ref + "@" + desc.Digest.String() - } - - pusher, err := pushCtx.Resolver.Pusher(ctx, ref) - if err != nil { - return err - } - - var wrapper func(images.Handler) images.Handler - - if len(pushCtx.BaseHandlers) > 0 { - wrapper = func(h images.Handler) images.Handler { - h = images.Handlers(append(pushCtx.BaseHandlers, h)...) - if pushCtx.HandlerWrapper != nil { - h = pushCtx.HandlerWrapper(h) - } - return h - } - } else if pushCtx.HandlerWrapper != nil { - wrapper = pushCtx.HandlerWrapper - } - - var limiter *semaphore.Weighted - if pushCtx.MaxConcurrentUploadedLayers > 0 { - limiter = semaphore.NewWeighted(int64(pushCtx.MaxConcurrentUploadedLayers)) - } - - return remotes.PushContent(ctx, pusher, desc, c.ContentStore(), limiter, pushCtx.PlatformMatcher, wrapper) -} - -// GetImage returns an existing image -func (c *Client) GetImage(ctx context.Context, ref string) (Image, error) { - i, err := c.ImageService().Get(ctx, ref) - if err != nil { - return nil, err - } - return NewImage(c, i), nil -} - -// ListImages returns all existing images -func (c *Client) ListImages(ctx context.Context, filters ...string) ([]Image, error) { - imgs, err := c.ImageService().List(ctx, filters...) - if err != nil { - return nil, err - } - images := make([]Image, len(imgs)) - for i, img := range imgs { - images[i] = NewImage(c, img) - } - return images, nil -} - -// Restore restores a container from a checkpoint -func (c *Client) Restore(ctx context.Context, id string, checkpoint Image, opts ...RestoreOpts) (Container, error) { - store := c.ContentStore() - index, err := decodeIndex(ctx, store, checkpoint.Target()) - if err != nil { - return nil, err - } - - ctx, done, err := c.WithLease(ctx) - if err != nil { - return nil, err - } - defer done(ctx) - - copts := []NewContainerOpts{} - for _, o := range opts { - copts = append(copts, o(ctx, id, c, checkpoint, index)) - } - - ctr, err := c.NewContainer(ctx, id, copts...) - if err != nil { - return nil, err - } - - return ctr, nil -} - -func writeIndex(ctx context.Context, index *ocispec.Index, client *Client, ref string) (d ocispec.Descriptor, err error) { - labels := map[string]string{} - for i, m := range index.Manifests { - labels[fmt.Sprintf("containerd.io/gc.ref.content.%d", i)] = m.Digest.String() - } - data, err := json.Marshal(index) - if err != nil { - return ocispec.Descriptor{}, err - } - return writeContent(ctx, client.ContentStore(), ocispec.MediaTypeImageIndex, ref, bytes.NewReader(data), content.WithLabels(labels)) -} - -// GetLabel gets a label value from namespace store -// If there is no default label, an empty string returned with nil error -func (c *Client) GetLabel(ctx context.Context, label string) (string, error) { - ns, err := namespaces.NamespaceRequired(ctx) - if err != nil { - if c.defaultns == "" { - return "", err - } - ns = c.defaultns - } - - srv := c.NamespaceService() - labels, err := srv.Labels(ctx, ns) - if err != nil { - return "", err - } - - value := labels[label] - return value, nil -} - -// Subscribe to events that match one or more of the provided filters. -// -// Callers should listen on both the envelope and errs channels. If the errs -// channel returns nil or an error, the subscriber should terminate. -// -// The subscriber can stop receiving events by canceling the provided context. -// The errs channel will be closed and return a nil error. -func (c *Client) Subscribe(ctx context.Context, filters ...string) (ch <-chan *events.Envelope, errs <-chan error) { - return c.EventService().Subscribe(ctx, filters...) -} - -// Close closes the clients connection to containerd -func (c *Client) Close() error { - c.connMu.Lock() - defer c.connMu.Unlock() - if c.conn != nil { - return c.conn.Close() - } - return nil -} - -// NamespaceService returns the underlying Namespaces Store -func (c *Client) NamespaceService() namespaces.Store { - if c.namespaceStore != nil { - return c.namespaceStore - } - c.connMu.Lock() - defer c.connMu.Unlock() - return NewNamespaceStoreFromClient(namespacesapi.NewNamespacesClient(c.conn)) -} - -// ContainerService returns the underlying container Store -func (c *Client) ContainerService() containers.Store { - if c.containerStore != nil { - return c.containerStore - } - c.connMu.Lock() - defer c.connMu.Unlock() - return NewRemoteContainerStore(containersapi.NewContainersClient(c.conn)) -} - -// ContentStore returns the underlying content Store -func (c *Client) ContentStore() content.Store { - if c.contentStore != nil { - return c.contentStore - } - c.connMu.Lock() - defer c.connMu.Unlock() - return contentproxy.NewContentStore(contentapi.NewContentClient(c.conn)) -} - -// SnapshotService returns the underlying snapshotter for the provided snapshotter name -func (c *Client) SnapshotService(snapshotterName string) snapshots.Snapshotter { - snapshotterName, err := c.resolveSnapshotterName(context.Background(), snapshotterName) - if err != nil { - snapshotterName = DefaultSnapshotter - } - if c.snapshotters != nil { - return c.snapshotters[snapshotterName] - } - c.connMu.Lock() - defer c.connMu.Unlock() - return snproxy.NewSnapshotter(snapshotsapi.NewSnapshotsClient(c.conn), snapshotterName) -} - -// TaskService returns the underlying TasksClient -func (c *Client) TaskService() tasks.TasksClient { - if c.taskService != nil { - return c.taskService - } - c.connMu.Lock() - defer c.connMu.Unlock() - return tasks.NewTasksClient(c.conn) -} - -// ImageService returns the underlying image Store -func (c *Client) ImageService() images.Store { - if c.imageStore != nil { - return c.imageStore - } - c.connMu.Lock() - defer c.connMu.Unlock() - return NewImageStoreFromClient(imagesapi.NewImagesClient(c.conn)) -} - -// DiffService returns the underlying Differ -func (c *Client) DiffService() DiffService { - if c.diffService != nil { - return c.diffService - } - c.connMu.Lock() - defer c.connMu.Unlock() - return NewDiffServiceFromClient(diffapi.NewDiffClient(c.conn)) -} - -// IntrospectionService returns the underlying Introspection Client -func (c *Client) IntrospectionService() introspection.Service { - if c.introspectionService != nil { - return c.introspectionService - } - c.connMu.Lock() - defer c.connMu.Unlock() - return introspection.NewIntrospectionServiceFromClient(introspectionapi.NewIntrospectionClient(c.conn)) -} - -// LeasesService returns the underlying Leases Client -func (c *Client) LeasesService() leases.Manager { - if c.leasesService != nil { - return c.leasesService - } - c.connMu.Lock() - defer c.connMu.Unlock() - return leasesproxy.NewLeaseManager(leasesapi.NewLeasesClient(c.conn)) -} - -// HealthService returns the underlying GRPC HealthClient -func (c *Client) HealthService() grpc_health_v1.HealthClient { - c.connMu.Lock() - defer c.connMu.Unlock() - return grpc_health_v1.NewHealthClient(c.conn) -} - -// EventService returns the underlying event service -func (c *Client) EventService() EventService { - if c.eventService != nil { - return c.eventService - } - c.connMu.Lock() - defer c.connMu.Unlock() - return NewEventServiceFromClient(eventsapi.NewEventsClient(c.conn)) -} - -// SandboxStore returns the underlying sandbox store client -func (c *Client) SandboxStore() sandbox.Store { - if c.sandboxStore != nil { - return c.sandboxStore - } - c.connMu.Lock() - defer c.connMu.Unlock() - return NewRemoteSandboxStore(sandboxsapi.NewStoreClient(c.conn)) -} - -// SandboxController returns the underlying sandbox controller client -func (c *Client) SandboxController() sandbox.Controller { - if c.sandboxController != nil { - return c.sandboxController - } - c.connMu.Lock() - defer c.connMu.Unlock() - return NewSandboxRemoteController(sandboxsapi.NewControllerClient(c.conn)) -} - -// VersionService returns the underlying VersionClient -func (c *Client) VersionService() versionservice.VersionClient { - c.connMu.Lock() - defer c.connMu.Unlock() - return versionservice.NewVersionClient(c.conn) -} - -// Conn returns the underlying GRPC connection object -func (c *Client) Conn() *grpc.ClientConn { - c.connMu.Lock() - defer c.connMu.Unlock() - return c.conn -} - -// Version of containerd -type Version struct { - // Version number - Version string - // Revision from git that was built - Revision string -} - -// Version returns the version of containerd that the client is connected to -func (c *Client) Version(ctx context.Context) (Version, error) { - c.connMu.Lock() - if c.conn == nil { - c.connMu.Unlock() - return Version{}, fmt.Errorf("no grpc connection available: %w", errdefs.ErrUnavailable) - } - c.connMu.Unlock() - response, err := c.VersionService().Version(ctx, &ptypes.Empty{}) - if err != nil { - return Version{}, err - } - return Version{ - Version: response.Version, - Revision: response.Revision, - }, nil -} - -// ServerInfo represents the introspected server information -type ServerInfo struct { - UUID string -} - -// Server returns server information from the introspection service -func (c *Client) Server(ctx context.Context) (ServerInfo, error) { - c.connMu.Lock() - if c.conn == nil { - c.connMu.Unlock() - return ServerInfo{}, fmt.Errorf("no grpc connection available: %w", errdefs.ErrUnavailable) - } - c.connMu.Unlock() - - response, err := c.IntrospectionService().Server(ctx, &ptypes.Empty{}) - if err != nil { - return ServerInfo{}, err - } - return ServerInfo{ - UUID: response.UUID, - }, nil -} - -func (c *Client) resolveSnapshotterName(ctx context.Context, name string) (string, error) { - if name == "" { - label, err := c.GetLabel(ctx, defaults.DefaultSnapshotterNSLabel) - if err != nil { - return "", err - } - - if label != "" { - name = label - } else { - name = DefaultSnapshotter - } - } - - return name, nil -} - -func (c *Client) getSnapshotter(ctx context.Context, name string) (snapshots.Snapshotter, error) { - name, err := c.resolveSnapshotterName(ctx, name) - if err != nil { - return nil, err - } - - s := c.SnapshotService(name) - if s == nil { - return nil, fmt.Errorf("snapshotter %s was not found: %w", name, errdefs.ErrNotFound) - } - - return s, nil -} - -// CheckRuntime returns true if the current runtime matches the expected -// runtime. Providing various parts of the runtime schema will match those -// parts of the expected runtime -func CheckRuntime(current, expected string) bool { - cp := strings.Split(current, ".") - l := len(cp) - for i, p := range strings.Split(expected, ".") { - if i > l { - return false - } - if p != cp[i] { - return false - } - } - return true -} - -// GetSnapshotterSupportedPlatforms returns a platform matchers which represents the -// supported platforms for the given snapshotters -func (c *Client) GetSnapshotterSupportedPlatforms(ctx context.Context, snapshotterName string) (platforms.MatchComparer, error) { - filters := []string{fmt.Sprintf("type==%s, id==%s", plugin.SnapshotPlugin, snapshotterName)} - in := c.IntrospectionService() - - resp, err := in.Plugins(ctx, filters) - if err != nil { - return nil, err - } - - if len(resp.Plugins) <= 0 { - return nil, fmt.Errorf("inspection service could not find snapshotter %s plugin", snapshotterName) - } - - sn := resp.Plugins[0] - snPlatforms := toPlatforms(sn.Platforms) - return platforms.Any(snPlatforms...), nil -} - -func toPlatforms(pt []*apitypes.Platform) []ocispec.Platform { - platforms := make([]ocispec.Platform, len(pt)) - for i, p := range pt { - platforms[i] = ocispec.Platform{ - Architecture: p.Architecture, - OS: p.OS, - Variant: p.Variant, - } - } - return platforms -} diff --git a/client/client.go b/client/client.go new file mode 100644 index 000000000000..7d56674a173f --- /dev/null +++ b/client/client.go @@ -0,0 +1,1053 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "runtime" + "strconv" + "strings" + "sync" + "time" + + "google.golang.org/grpc/resolver" + + containersapi "github.com/containerd/containerd/api/services/containers/v1" + diffapi "github.com/containerd/containerd/api/services/diff/v1" + imagesapi "github.com/containerd/containerd/api/services/images/v1" + leasesapi "github.com/containerd/containerd/api/services/leases/v1" + namespacesapi "github.com/containerd/containerd/api/services/namespaces/v1" + sandboxsapi "github.com/containerd/containerd/api/services/sandbox/v1" + snapshotsapi "github.com/containerd/containerd/api/services/snapshots/v1" + "github.com/containerd/containerd/api/services/tasks/v1" + transferapi "github.com/containerd/containerd/api/services/transfer/v1" + versionservice "github.com/containerd/containerd/api/services/version/v1" + apitypes "github.com/containerd/containerd/api/types" + "github.com/containerd/errdefs" + "github.com/containerd/platforms" + "github.com/containerd/typeurl/v2" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/opencontainers/runtime-spec/specs-go" + "github.com/opencontainers/runtime-spec/specs-go/features" + "golang.org/x/sync/semaphore" + "google.golang.org/grpc" + "google.golang.org/grpc/backoff" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/health/grpc_health_v1" + + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/core/content" + contentproxy "github.com/containerd/containerd/v2/core/content/proxy" + "github.com/containerd/containerd/v2/core/events" + eventsproxy "github.com/containerd/containerd/v2/core/events/proxy" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/introspection" + introspectionproxy "github.com/containerd/containerd/v2/core/introspection/proxy" + "github.com/containerd/containerd/v2/core/leases" + leasesproxy "github.com/containerd/containerd/v2/core/leases/proxy" + "github.com/containerd/containerd/v2/core/mount" + mountproxy "github.com/containerd/containerd/v2/core/mount/proxy" + "github.com/containerd/containerd/v2/core/remotes" + "github.com/containerd/containerd/v2/core/remotes/docker" + "github.com/containerd/containerd/v2/core/sandbox" + sandboxproxy "github.com/containerd/containerd/v2/core/sandbox/proxy" + "github.com/containerd/containerd/v2/core/snapshots" + snproxy "github.com/containerd/containerd/v2/core/snapshots/proxy" + "github.com/containerd/containerd/v2/core/transfer" + transferproxy "github.com/containerd/containerd/v2/core/transfer/proxy" + "github.com/containerd/containerd/v2/defaults" + "github.com/containerd/containerd/v2/pkg/dialer" + "github.com/containerd/containerd/v2/pkg/namespaces" + ptypes "github.com/containerd/containerd/v2/pkg/protobuf/types" + "github.com/containerd/containerd/v2/pkg/tracing" + "github.com/containerd/containerd/v2/plugins" +) + +func init() { + const prefix = "types.containerd.io" + // register TypeUrls for commonly marshaled external types + major := strconv.Itoa(specs.VersionMajor) + typeurl.Register(&specs.Spec{}, prefix, "opencontainers/runtime-spec", major, "Spec") + typeurl.Register(&specs.Process{}, prefix, "opencontainers/runtime-spec", major, "Process") + typeurl.Register(&specs.LinuxResources{}, prefix, "opencontainers/runtime-spec", major, "LinuxResources") + typeurl.Register(&specs.WindowsResources{}, prefix, "opencontainers/runtime-spec", major, "WindowsResources") + typeurl.Register(&features.Features{}, prefix, "opencontainers/runtime-spec", major, "features", "Features") + + if runtime.GOOS == "windows" { + // After bumping GRPC to 1.64, Windows tests started failing with: "name resolver error: produced zero addresses". + // This is happening because grpc.NewClient uses DNS resolver by default, which apparently not what we want + // when using socket paths on Windows. + // Using a workaround from https://github.com/grpc/grpc-go/issues/1786#issuecomment-2119088770 + resolver.SetDefaultScheme("passthrough") + } +} + +// New returns a new containerd client that is connected to the containerd +// instance provided by address +func New(address string, opts ...Opt) (*Client, error) { + var copts clientOpts + for _, o := range opts { + if err := o(&copts); err != nil { + return nil, err + } + } + if copts.timeout == 0 { + copts.timeout = 10 * time.Second + } + + c := &Client{ + defaultns: copts.defaultns, + } + + if copts.defaultRuntime != "" { + c.defaults.runtime = copts.defaultRuntime + } + + if copts.defaultSandboxer != "" { + c.defaults.sandboxer = copts.defaultSandboxer + } + + if copts.defaultPlatform != nil { + c.platform = copts.defaultPlatform + } else { + c.platform = platforms.Default() + } + + if copts.services != nil { + c.services = *copts.services + } + if address != "" { + backoffConfig := backoff.DefaultConfig + backoffConfig.MaxDelay = copts.timeout + connParams := grpc.ConnectParams{ + Backoff: backoffConfig, + MinConnectTimeout: copts.timeout, + } + gopts := []grpc.DialOption{ + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithConnectParams(connParams), + grpc.WithContextDialer(dialer.ContextDialer), + } + if len(copts.dialOptions) > 0 { + gopts = copts.dialOptions + } + gopts = append(gopts, copts.extraDialOpts...) + + gopts = append(gopts, grpc.WithDefaultCallOptions( + grpc.MaxCallRecvMsgSize(defaults.DefaultMaxRecvMsgSize), + grpc.MaxCallSendMsgSize(defaults.DefaultMaxSendMsgSize))) + if len(copts.callOptions) > 0 { + gopts = append(gopts, grpc.WithDefaultCallOptions(copts.callOptions...)) + } + if copts.defaultns != "" { + unary, stream := newNSInterceptors(copts.defaultns) + gopts = append(gopts, grpc.WithChainUnaryInterceptor(unary)) + gopts = append(gopts, grpc.WithChainStreamInterceptor(stream)) + } + + connector := func() (*grpc.ClientConn, error) { + conn, err := grpc.NewClient(dialer.DialAddress(address), gopts...) + if err != nil { + return nil, fmt.Errorf("failed to dial %q: %w", address, err) + } + return conn, nil + } + conn, err := connector() + if err != nil { + return nil, err + } + c.conn, c.connector = conn, connector + } + if copts.services == nil && c.conn == nil { + return nil, fmt.Errorf("no grpc connection or services is available: %w", errdefs.ErrUnavailable) + } + + return c, nil +} + +// NewWithConn returns a new containerd client that is connected to the containerd +// instance provided by the connection +func NewWithConn(conn *grpc.ClientConn, opts ...Opt) (*Client, error) { + var copts clientOpts + for _, o := range opts { + if err := o(&copts); err != nil { + return nil, err + } + } + c := &Client{ + defaultns: copts.defaultns, + conn: conn, + } + + if copts.defaultRuntime != "" { + c.defaults.runtime = copts.defaultRuntime + } + + if copts.defaultSandboxer != "" { + c.defaults.sandboxer = copts.defaultSandboxer + } + + if copts.defaultPlatform != nil { + c.platform = copts.defaultPlatform + } else { + c.platform = platforms.Default() + } + + if copts.services != nil { + c.services = *copts.services + } + return c, nil +} + +// Client is the client to interact with containerd and its various services +// using a uniform interface +type Client struct { + services + connMu sync.Mutex + conn *grpc.ClientConn + defaultns string + platform platforms.MatchComparer + connector func() (*grpc.ClientConn, error) + + // this should only be accessed via default*() functions + defaults struct { + runtime string + sandboxer string + mut sync.Mutex + } +} + +// Reconnect re-establishes the GRPC connection to the containerd daemon +func (c *Client) Reconnect() error { + if c.connector == nil { + return fmt.Errorf("unable to reconnect to containerd, no connector available: %w", errdefs.ErrUnavailable) + } + c.connMu.Lock() + defer c.connMu.Unlock() + c.conn.Close() + conn, err := c.connector() + if err != nil { + return err + } + c.conn = conn + return nil +} + +// Runtime returns the name of the runtime being used +func (c *Client) Runtime() string { + runtime, _ := c.defaultRuntime(context.TODO()) + return runtime +} + +func (c *Client) defaultRuntime(ctx context.Context) (string, error) { + c.defaults.mut.Lock() + defer c.defaults.mut.Unlock() + + if c.defaults.runtime != "" { + return c.defaults.runtime, nil + } + + if c.defaultns != "" { + label, err := c.GetLabel(ctx, defaults.DefaultRuntimeNSLabel) + if err != nil { + // Don't set the runtime value if there's an error + return defaults.DefaultRuntime, fmt.Errorf("failed to get default runtime label: %w", err) + } + if label != "" { + c.defaults.runtime = label + return label, nil + } + } + c.defaults.runtime = defaults.DefaultRuntime + return c.defaults.runtime, nil +} + +func (c *Client) defaultSandboxer(ctx context.Context) (string, error) { + c.defaults.mut.Lock() + defer c.defaults.mut.Unlock() + + if c.defaults.sandboxer != "" { + return c.defaults.sandboxer, nil + } + + if c.defaultns != "" { + label, err := c.GetLabel(ctx, defaults.DefaultSandboxerNSLabel) + if err != nil { + // Don't set the sandboxer value if there's an error + return defaults.DefaultSandboxer, fmt.Errorf("failed to get default sandboxer label: %w", err) + } + if label != "" { + c.defaults.sandboxer = label + return label, nil + } + } + c.defaults.sandboxer = defaults.DefaultSandboxer + return c.defaults.sandboxer, nil +} + +// IsServing returns true if the client can successfully connect to the +// containerd daemon and the healthcheck service returns the SERVING +// response. +// This call will block if a transient error is encountered during +// connection. A timeout can be set in the context to ensure it returns +// early. +func (c *Client) IsServing(ctx context.Context) (bool, error) { + c.connMu.Lock() + if c.conn == nil { + c.connMu.Unlock() + return false, fmt.Errorf("no grpc connection available: %w", errdefs.ErrUnavailable) + } + c.connMu.Unlock() + r, err := c.HealthService().Check(ctx, &grpc_health_v1.HealthCheckRequest{}, grpc.WaitForReady(true)) + if err != nil { + return false, err + } + return r.Status == grpc_health_v1.HealthCheckResponse_SERVING, nil +} + +// Containers returns all containers created in containerd +func (c *Client) Containers(ctx context.Context, filters ...string) ([]Container, error) { + r, err := c.ContainerService().List(ctx, filters...) + if err != nil { + return nil, err + } + out := make([]Container, len(r)) + for i, container := range r { + out[i] = containerFromRecord(c, container) + } + return out, nil +} + +// NewContainer will create a new container with the provided id. +// The id must be unique within the namespace. +func (c *Client) NewContainer(ctx context.Context, id string, opts ...NewContainerOpts) (Container, error) { + ctx, span := tracing.StartSpan(ctx, "client.NewContainer") + defer span.End() + ctx, done, err := c.WithLease(ctx) + if err != nil { + return nil, err + } + defer done(ctx) + + runtime, err := c.defaultRuntime(ctx) + if err != nil { + return nil, err + } + + container := containers.Container{ + ID: id, + Runtime: containers.RuntimeInfo{ + Name: runtime, + }, + } + for _, o := range opts { + if err := o(ctx, c, &container); err != nil { + return nil, err + } + } + + span.SetAttributes( + tracing.Attribute("container.id", container.ID), + tracing.Attribute("container.image.ref", container.Image), + tracing.Attribute("container.runtime.name", container.Runtime.Name), + tracing.Attribute("container.snapshotter.name", container.Snapshotter), + ) + r, err := c.ContainerService().Create(ctx, container) + if err != nil { + return nil, err + } + return containerFromRecord(c, r), nil +} + +// LoadContainer loads an existing container from metadata +func (c *Client) LoadContainer(ctx context.Context, id string) (Container, error) { + ctx, span := tracing.StartSpan(ctx, "client.LoadContainer") + defer span.End() + r, err := c.ContainerService().Get(ctx, id) + if err != nil { + return nil, err + } + + span.SetAttributes( + tracing.Attribute("container.id", r.ID), + tracing.Attribute("container.image.ref", r.Image), + tracing.Attribute("container.runtime.name", r.Runtime.Name), + tracing.Attribute("container.snapshotter.name", r.Snapshotter), + tracing.Attribute("container.createdAt", r.CreatedAt.Format(time.RFC3339)), + tracing.Attribute("container.updatedAt", r.UpdatedAt.Format(time.RFC3339)), + ) + return containerFromRecord(c, r), nil +} + +// RemoteContext is used to configure object resolutions and transfers with +// remote content stores and image providers. +type RemoteContext struct { + // Resolver is used to resolve names to objects, fetchers, and pushers. + // If no resolver is provided, defaults to Docker registry resolver. + Resolver remotes.Resolver + + // PlatformMatcher is used to match the platforms for an image + // operation and define the preference when a single match is required + // from multiple platforms. + PlatformMatcher platforms.MatchComparer + + // Unpack is done after an image is pulled to extract into a snapshotter. + // It is done simultaneously for schema 2 images when they are pulled. + // If an image is not unpacked on pull, it can be unpacked any time + // afterwards. Unpacking is required to run an image. + Unpack bool + + // UnpackOpts handles options to the unpack call. + UnpackOpts []UnpackOpt + + // Snapshotter used for unpacking + Snapshotter string + + // SnapshotterOpts are additional options to be passed to a snapshotter during pull + SnapshotterOpts []snapshots.Opt + + // Labels to be applied to the created image + Labels map[string]string + + // BaseHandlers are a set of handlers which get are called on dispatch. + // These handlers always get called before any operation specific + // handlers. + BaseHandlers []images.Handler + + // HandlerWrapper wraps the handler which gets sent to dispatch. + // Unlike BaseHandlers, this can run before and after the built + // in handlers, allowing operations to run on the descriptor + // after it has completed transferring. + HandlerWrapper func(images.Handler) images.Handler + + // Platforms defines which platforms to handle when doing the image operation. + // Platforms is ignored when a PlatformMatcher is set, otherwise the + // platforms will be used to create a PlatformMatcher with no ordering + // preference. + Platforms []string + + DownloadLimiter *semaphore.Weighted + + // MaxConcurrentDownloads restricts the total number of concurrent downloads + // across all layers during an image pull operation. This helps control the + // overall network bandwidth usage. + MaxConcurrentDownloads int + + // ConcurrentLayerFetchBuffer sets the maximum size in bytes for each chunk + // when downloading layers in parallel. Larger chunks reduce coordination + // overhead but use more memory. When ConcurrentLayerFetchBuffer is above + // 512 bytes, parallel layer fetch is enabled. It can accelerate pulls for + // big images. + ConcurrentLayerFetchBuffer int + + // MaxConcurrentUploadedLayers is the max concurrent uploaded layers for each push. + MaxConcurrentUploadedLayers int + + // AllMetadata downloads all manifests and known-configuration files + AllMetadata bool + + // ChildLabelMap sets the labels used to reference child objects in the content + // store. By default, all GC reference labels will be set for all fetched content. + ChildLabelMap func(ocispec.Descriptor) []string + + // ReferrersProvider provides a way to lookup additional referrers for a given + // descriptor. For example pulling them with remotes.ReferrerFetcher. + ReferrersProvider content.ReferrersProvider +} + +func defaultRemoteContext() *RemoteContext { + return &RemoteContext{ + Resolver: docker.NewResolver(docker.ResolverOptions{}), + } +} + +// Fetch downloads the provided content into containerd's content store +// and returns a non-platform specific image reference +func (c *Client) Fetch(ctx context.Context, ref string, opts ...RemoteOpt) (images.Image, error) { + fetchCtx := defaultRemoteContext() + for _, o := range opts { + if err := o(c, fetchCtx); err != nil { + return images.Image{}, err + } + } + + if fetchCtx.Unpack { + return images.Image{}, fmt.Errorf("unpack on fetch not supported, try pull: %w", errdefs.ErrNotImplemented) + } + + if fetchCtx.PlatformMatcher == nil { + if len(fetchCtx.Platforms) == 0 { + fetchCtx.PlatformMatcher = platforms.All + } else { + ps, err := platforms.ParseAll(fetchCtx.Platforms) + if err != nil { + return images.Image{}, err + } + + fetchCtx.PlatformMatcher = platforms.Any(ps...) + } + } + + ctx, done, err := c.WithLease(ctx) + if err != nil { + return images.Image{}, err + } + defer done(ctx) + + img, err := c.fetch(ctx, fetchCtx, ref, 0) + if err != nil { + return images.Image{}, err + } + return c.createNewImage(ctx, img) +} + +// Push uploads the provided content to a remote resource +func (c *Client) Push(ctx context.Context, ref string, desc ocispec.Descriptor, opts ...RemoteOpt) error { + pushCtx := defaultRemoteContext() + for _, o := range opts { + if err := o(c, pushCtx); err != nil { + return err + } + } + if pushCtx.PlatformMatcher == nil { + if len(pushCtx.Platforms) > 0 { + ps, err := platforms.ParseAll(pushCtx.Platforms) + if err != nil { + return err + } + pushCtx.PlatformMatcher = platforms.Any(ps...) + } else { + pushCtx.PlatformMatcher = platforms.All + } + } + + // Annotate ref with digest to push only push tag for single digest + if !strings.Contains(ref, "@") { + ref = ref + "@" + desc.Digest.String() + } + + pusher, err := pushCtx.Resolver.Pusher(ctx, ref) + if err != nil { + return err + } + + var wrapper func(images.Handler) images.Handler + + if len(pushCtx.BaseHandlers) > 0 { + wrapper = func(h images.Handler) images.Handler { + h = images.Handlers(append(pushCtx.BaseHandlers, h)...) + if pushCtx.HandlerWrapper != nil { + h = pushCtx.HandlerWrapper(h) + } + return h + } + } else if pushCtx.HandlerWrapper != nil { + wrapper = pushCtx.HandlerWrapper + } + + var limiter *semaphore.Weighted + if pushCtx.MaxConcurrentUploadedLayers > 0 { + limiter = semaphore.NewWeighted(int64(pushCtx.MaxConcurrentUploadedLayers)) + } + + return remotes.PushContent(ctx, pusher, desc, c.ContentStore(), limiter, pushCtx.PlatformMatcher, wrapper) +} + +// GetImage returns an existing image +func (c *Client) GetImage(ctx context.Context, ref string) (Image, error) { + i, err := c.ImageService().Get(ctx, ref) + if err != nil { + return nil, err + } + return NewImage(c, i), nil +} + +// ListImages returns all existing images +func (c *Client) ListImages(ctx context.Context, filters ...string) ([]Image, error) { + imgs, err := c.ImageService().List(ctx, filters...) + if err != nil { + return nil, err + } + images := make([]Image, len(imgs)) + for i, img := range imgs { + images[i] = NewImage(c, img) + } + return images, nil +} + +// Restore restores a container from a checkpoint +func (c *Client) Restore(ctx context.Context, id string, checkpoint Image, opts ...RestoreOpts) (Container, error) { + store := c.ContentStore() + index, err := decodeIndex(ctx, store, checkpoint.Target()) + if err != nil { + return nil, err + } + + ctx, done, err := c.WithLease(ctx) + if err != nil { + return nil, err + } + defer done(ctx) + + copts := make([]NewContainerOpts, len(opts)) + for i, o := range opts { + copts[i] = o(ctx, id, c, checkpoint, index) + } + + ctr, err := c.NewContainer(ctx, id, copts...) + if err != nil { + return nil, err + } + + return ctr, nil +} + +func writeIndex(ctx context.Context, index *ocispec.Index, client *Client, ref string) (d ocispec.Descriptor, err error) { + labels := map[string]string{} + for i, m := range index.Manifests { + labels[fmt.Sprintf("containerd.io/gc.ref.content.%d", i)] = m.Digest.String() + } + data, err := json.Marshal(index) + if err != nil { + return ocispec.Descriptor{}, err + } + return writeContent(ctx, client.ContentStore(), ocispec.MediaTypeImageIndex, ref, bytes.NewReader(data), content.WithLabels(labels)) +} + +func decodeIndex(ctx context.Context, store content.Provider, desc ocispec.Descriptor) (*ocispec.Index, error) { + var index ocispec.Index + p, err := content.ReadBlob(ctx, store, desc) + if err != nil { + return nil, err + } + if err := json.Unmarshal(p, &index); err != nil { + return nil, err + } + + return &index, nil +} + +// GetLabel gets a label value from namespace store +// If there is no default label, an empty string returned with nil error +func (c *Client) GetLabel(ctx context.Context, label string) (string, error) { + ns, err := namespaces.NamespaceRequired(ctx) + if err != nil { + if c.defaultns == "" { + return "", err + } + ns = c.defaultns + } + + srv := c.NamespaceService() + labels, err := srv.Labels(ctx, ns) + if err != nil { + return "", err + } + + value := labels[label] + return value, nil +} + +// Subscribe to events that match one or more of the provided filters. +// +// Callers should listen on both the envelope and errs channels. If the errs +// channel returns nil or an error, the subscriber should terminate. +// +// The subscriber can stop receiving events by canceling the provided context. +// The errs channel will be closed and return a nil error. +func (c *Client) Subscribe(ctx context.Context, filters ...string) (ch <-chan *events.Envelope, errs <-chan error) { + return c.EventService().Subscribe(ctx, filters...) +} + +// Close closes the clients connection to containerd +func (c *Client) Close() error { + c.connMu.Lock() + defer c.connMu.Unlock() + if c.conn != nil { + return c.conn.Close() + } + return nil +} + +// NamespaceService returns the underlying Namespaces Store +func (c *Client) NamespaceService() namespaces.Store { + if c.namespaceStore != nil { + return c.namespaceStore + } + c.connMu.Lock() + defer c.connMu.Unlock() + return NewNamespaceStoreFromClient(namespacesapi.NewNamespacesClient(c.conn)) +} + +// ContainerService returns the underlying container Store +func (c *Client) ContainerService() containers.Store { + if c.containerStore != nil { + return c.containerStore + } + c.connMu.Lock() + defer c.connMu.Unlock() + return NewRemoteContainerStore(containersapi.NewContainersClient(c.conn)) +} + +// ContentStore returns the underlying content Store +func (c *Client) ContentStore() content.Store { + if c.contentStore != nil { + return c.contentStore + } + c.connMu.Lock() + defer c.connMu.Unlock() + return contentproxy.NewContentStore(c.conn) +} + +// SnapshotService returns the underlying snapshotter for the provided snapshotter name +func (c *Client) SnapshotService(snapshotterName string) snapshots.Snapshotter { + snapshotterName, err := c.resolveSnapshotterName(context.Background(), snapshotterName) + if err != nil { + snapshotterName = defaults.DefaultSnapshotter + } + if c.snapshotters != nil { + return c.snapshotters[snapshotterName] + } + c.connMu.Lock() + defer c.connMu.Unlock() + return snproxy.NewSnapshotter(snapshotsapi.NewSnapshotsClient(c.conn), snapshotterName) +} + +// DefaultNamespace return the default namespace +func (c *Client) DefaultNamespace() string { + return c.defaultns +} + +// TaskService returns the underlying TasksClient +func (c *Client) TaskService() tasks.TasksClient { + if c.taskService != nil { + return c.taskService + } + c.connMu.Lock() + defer c.connMu.Unlock() + return tasks.NewTasksClient(c.conn) +} + +// ImageService returns the underlying image Store +func (c *Client) ImageService() images.Store { + if c.imageStore != nil { + return c.imageStore + } + c.connMu.Lock() + defer c.connMu.Unlock() + return NewImageStoreFromClient(imagesapi.NewImagesClient(c.conn)) +} + +// DiffService returns the underlying Differ +func (c *Client) DiffService() DiffService { + if c.diffService != nil { + return c.diffService + } + c.connMu.Lock() + defer c.connMu.Unlock() + return NewDiffServiceFromClient(diffapi.NewDiffClient(c.conn)) +} + +// IntrospectionService returns the underlying Introspection Client +func (c *Client) IntrospectionService() introspection.Service { + if c.introspectionService != nil { + return c.introspectionService + } + c.connMu.Lock() + defer c.connMu.Unlock() + return introspectionproxy.NewIntrospectionProxy(c.conn) +} + +// LeasesService returns the underlying Leases Client +func (c *Client) LeasesService() leases.Manager { + if c.leasesService != nil { + return c.leasesService + } + c.connMu.Lock() + defer c.connMu.Unlock() + return leasesproxy.NewLeaseManager(leasesapi.NewLeasesClient(c.conn)) +} + +// HealthService returns the underlying GRPC HealthClient +func (c *Client) HealthService() grpc_health_v1.HealthClient { + c.connMu.Lock() + defer c.connMu.Unlock() + return grpc_health_v1.NewHealthClient(c.conn) +} + +// EventService returns the underlying event service +func (c *Client) EventService() EventService { + if c.eventService != nil { + return c.eventService + } + c.connMu.Lock() + defer c.connMu.Unlock() + return eventsproxy.NewRemoteEvents(c.conn) +} + +// SandboxStore returns the underlying sandbox store client +func (c *Client) SandboxStore() sandbox.Store { + if c.sandboxStore != nil { + return c.sandboxStore + } + c.connMu.Lock() + defer c.connMu.Unlock() + return sandboxproxy.NewSandboxStore(sandboxsapi.NewStoreClient(c.conn)) +} + +// SandboxController returns the underlying sandbox controller client +func (c *Client) SandboxController(name string) sandbox.Controller { + if c.sandboxers != nil { + return c.sandboxers[name] + } + c.connMu.Lock() + defer c.connMu.Unlock() + return sandboxproxy.NewSandboxController(sandboxsapi.NewControllerClient(c.conn), name) +} + +// TranferService returns the underlying transferrer +func (c *Client) TransferService() transfer.Transferrer { + if c.transferService != nil { + return c.transferService + } + c.connMu.Lock() + defer c.connMu.Unlock() + return transferproxy.NewTransferrer(transferapi.NewTransferClient(c.conn), c.streamCreator()) +} + +// MountManager returns the underlying mount manager client +func (c *Client) MountManager() mount.Manager { + if c.mountManager != nil { + return c.mountManager + } + c.connMu.Lock() + defer c.connMu.Unlock() + return mountproxy.NewMountManager(c.conn) +} + +// VersionService returns the underlying VersionClient +func (c *Client) VersionService() versionservice.VersionClient { + c.connMu.Lock() + defer c.connMu.Unlock() + return versionservice.NewVersionClient(c.conn) +} + +// Conn returns the underlying RPC connection object +// Either *grpc.ClientConn or *ttrpc.Conn +func (c *Client) Conn() any { + c.connMu.Lock() + defer c.connMu.Unlock() + return c.conn +} + +// Version of containerd +type Version struct { + // Version number + Version string + // Revision from git that was built + Revision string +} + +// Version returns the version of containerd that the client is connected to +func (c *Client) Version(ctx context.Context) (Version, error) { + c.connMu.Lock() + if c.conn == nil { + c.connMu.Unlock() + return Version{}, fmt.Errorf("no grpc connection available: %w", errdefs.ErrUnavailable) + } + c.connMu.Unlock() + response, err := c.VersionService().Version(ctx, &ptypes.Empty{}) + if err != nil { + return Version{}, err + } + return Version{ + Version: response.Version, + Revision: response.Revision, + }, nil +} + +// ServerInfo represents the introspected server information +type ServerInfo struct { + UUID string +} + +// Server returns server information from the introspection service +func (c *Client) Server(ctx context.Context) (ServerInfo, error) { + c.connMu.Lock() + if c.conn == nil { + c.connMu.Unlock() + return ServerInfo{}, fmt.Errorf("no grpc connection available: %w", errdefs.ErrUnavailable) + } + c.connMu.Unlock() + + response, err := c.IntrospectionService().Server(ctx) + if err != nil { + return ServerInfo{}, err + } + return ServerInfo{ + UUID: response.UUID, + }, nil +} + +func (c *Client) resolveSnapshotterName(ctx context.Context, name string) (string, error) { + if name == "" { + label, err := c.GetLabel(ctx, defaults.DefaultSnapshotterNSLabel) + if err != nil { + return "", err + } + + if label != "" { + name = label + } else { + name = defaults.DefaultSnapshotter + } + } + + return name, nil +} + +func (c *Client) getSnapshotter(ctx context.Context, name string) (snapshots.Snapshotter, error) { + name, err := c.resolveSnapshotterName(ctx, name) + if err != nil { + return nil, err + } + + s := c.SnapshotService(name) + if s == nil { + return nil, fmt.Errorf("snapshotter %s was not found: %w", name, errdefs.ErrNotFound) + } + + return s, nil +} + +// GetSnapshotterSupportedPlatforms returns a platform matchers which represents the +// supported platforms for the given snapshotters +func (c *Client) GetSnapshotterSupportedPlatforms(ctx context.Context, snapshotterName string) (platforms.MatchComparer, error) { + filters := []string{fmt.Sprintf("type==%s, id==%s", plugins.SnapshotPlugin, snapshotterName)} + in := c.IntrospectionService() + + resp, err := in.Plugins(ctx, filters...) + if err != nil { + return nil, err + } + + if len(resp.Plugins) <= 0 { + return nil, fmt.Errorf("inspection service could not find snapshotter %s plugin", snapshotterName) + } + + sn := resp.Plugins[0] + snPlatforms := toPlatforms(sn.Platforms) + return platforms.Any(snPlatforms...), nil +} + +func toPlatforms(pt []*apitypes.Platform) []ocispec.Platform { + platforms := make([]ocispec.Platform, len(pt)) + for i, p := range pt { + platforms[i] = ocispec.Platform{ + Architecture: p.Architecture, + OS: p.OS, + Variant: p.Variant, + } + } + return platforms +} + +// GetSnapshotterCapabilities returns the capabilities of a snapshotter. +func (c *Client) GetSnapshotterCapabilities(ctx context.Context, snapshotterName string) ([]string, error) { + filters := []string{fmt.Sprintf("type==%s, id==%s", plugins.SnapshotPlugin, snapshotterName)} + in := c.IntrospectionService() + + resp, err := in.Plugins(ctx, filters...) + if err != nil { + return nil, err + } + + if len(resp.Plugins) <= 0 { + return nil, fmt.Errorf("inspection service could not find snapshotter %s plugin", snapshotterName) + } + + sn := resp.Plugins[0] + return sn.Capabilities, nil +} + +type RuntimeVersion struct { + Version string + Revision string +} + +type RuntimeInfo struct { + Name string + Version RuntimeVersion + Options interface{} + Features interface{} + Annotations map[string]string +} + +func (c *Client) RuntimeInfo(ctx context.Context, runtimePath string, runtimeOptions interface{}) (*RuntimeInfo, error) { + runtime, err := c.defaultRuntime(ctx) + if err != nil { + return nil, err + } + if runtimePath != "" { + runtime = runtimePath + } + rr := &apitypes.RuntimeRequest{ + RuntimePath: runtime, + } + if runtimeOptions != nil { + rr.Options, err = typeurl.MarshalAnyToProto(runtimeOptions) + if err != nil { + return nil, fmt.Errorf("failed to marshal %T: %w", runtimeOptions, err) + } + } + + s := c.IntrospectionService() + + resp, err := s.PluginInfo(ctx, string(plugins.RuntimePluginV2), "task", rr) + if err != nil { + return nil, err + } + + var info apitypes.RuntimeInfo + if err := typeurl.UnmarshalTo(resp.Extra, &info); err != nil { + return nil, fmt.Errorf("failed to get runtime info from plugin info: %w", err) + } + + var result RuntimeInfo + result.Name = info.Name + if info.Version != nil { + result.Version.Version = info.Version.Version + result.Version.Revision = info.Version.Revision + } + if info.Options != nil { + result.Options, err = typeurl.UnmarshalAny(info.Options) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal RuntimeInfo.Options (%T): %w", info.Options, err) + } + } + if info.Features != nil { + result.Features, err = typeurl.UnmarshalAny(info.Features) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal RuntimeInfo.Features (%T): %w", info.Features, err) + } + } + result.Annotations = info.Annotations + return &result, nil +} diff --git a/client/client_opts.go b/client/client_opts.go new file mode 100644 index 000000000000..2495bc05023b --- /dev/null +++ b/client/client_opts.go @@ -0,0 +1,294 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "time" + + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/remotes" + "github.com/containerd/containerd/v2/core/snapshots" + "github.com/containerd/platforms" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + "golang.org/x/sync/semaphore" + "google.golang.org/grpc" +) + +type clientOpts struct { + defaultns string + defaultRuntime string + defaultSandboxer string + defaultPlatform platforms.MatchComparer + services *services + dialOptions []grpc.DialOption + extraDialOpts []grpc.DialOption + callOptions []grpc.CallOption + timeout time.Duration +} + +// Opt allows callers to set options on the containerd client +type Opt func(c *clientOpts) error + +// WithDefaultNamespace sets the default namespace on the client +// +// Any operation that does not have a namespace set on the context will +// be provided the default namespace +func WithDefaultNamespace(ns string) Opt { + return func(c *clientOpts) error { + c.defaultns = ns + return nil + } +} + +// WithDefaultRuntime sets the default runtime on the client +func WithDefaultRuntime(rt string) Opt { + return func(c *clientOpts) error { + c.defaultRuntime = rt + return nil + } +} + +// WithDefaultSandboxer sets the default sandboxer on the client +func WithDefaultSandboxer(sb string) Opt { + return func(c *clientOpts) error { + c.defaultSandboxer = sb + return nil + } +} + +// WithDefaultPlatform sets the default platform matcher on the client +func WithDefaultPlatform(platform platforms.MatchComparer) Opt { + return func(c *clientOpts) error { + c.defaultPlatform = platform + return nil + } +} + +// WithDialOpts allows grpc.DialOptions to be set on the connection +func WithDialOpts(opts []grpc.DialOption) Opt { + return func(c *clientOpts) error { + c.dialOptions = opts + return nil + } +} + +// WithExtraDialOpts allows additional grpc.DialOptions to be set on the +// connection. Unlike [WithDialOpts], options set here are appended to, +// instead of overriding previous options, which allows setting options +// to extend containerd client's defaults. +// +// This option can be used multiple times to set additional dial options. +func WithExtraDialOpts(opts []grpc.DialOption) Opt { + return func(c *clientOpts) error { + c.extraDialOpts = append(c.extraDialOpts, opts...) + return nil + } +} + +// WithCallOpts allows grpc.CallOptions to be set on the connection +func WithCallOpts(opts []grpc.CallOption) Opt { + return func(c *clientOpts) error { + c.callOptions = opts + return nil + } +} + +// WithServices sets services used by the client. +func WithServices(opts ...ServicesOpt) Opt { + return func(c *clientOpts) error { + c.services = &services{} + for _, o := range opts { + o(c.services) + } + return nil + } +} + +// WithTimeout sets the connection timeout for the client +func WithTimeout(d time.Duration) Opt { + return func(c *clientOpts) error { + c.timeout = d + return nil + } +} + +// RemoteOpt allows the caller to set distribution options for a remote +type RemoteOpt func(*Client, *RemoteContext) error + +// WithPlatform allows the caller to specify a platform to retrieve +// content for +func WithPlatform(platform string) RemoteOpt { + if platform == "" { + platform = platforms.DefaultString() + } + return func(_ *Client, c *RemoteContext) error { + for _, p := range c.Platforms { + if p == platform { + return nil + } + } + + c.Platforms = append(c.Platforms, platform) + return nil + } +} + +// WithPlatformMatcher specifies the matcher to use for +// determining which platforms to pull content for. +// This value supersedes anything set with `WithPlatform`. +func WithPlatformMatcher(m platforms.MatchComparer) RemoteOpt { + return func(_ *Client, c *RemoteContext) error { + c.PlatformMatcher = m + return nil + } +} + +// WithPullUnpack is used to unpack an image after pull. This +// uses the snapshotter, content store, and diff service +// configured for the client. +func WithPullUnpack(_ *Client, c *RemoteContext) error { + c.Unpack = true + return nil +} + +// WithUnpackOpts is used to add unpack options to the unpacker. +func WithUnpackOpts(opts []UnpackOpt) RemoteOpt { + return func(_ *Client, c *RemoteContext) error { + c.UnpackOpts = append(c.UnpackOpts, opts...) + return nil + } +} + +// WithPullSnapshotter specifies snapshotter name used for unpacking. +func WithPullSnapshotter(snapshotterName string, opts ...snapshots.Opt) RemoteOpt { + return func(_ *Client, c *RemoteContext) error { + c.Snapshotter = snapshotterName + c.SnapshotterOpts = opts + return nil + } +} + +// WithPullLabel sets a label to be associated with a pulled reference +func WithPullLabel(key, value string) RemoteOpt { + return func(_ *Client, rc *RemoteContext) error { + if rc.Labels == nil { + rc.Labels = make(map[string]string) + } + + rc.Labels[key] = value + return nil + } +} + +// WithPullLabels associates a set of labels to a pulled reference +func WithPullLabels(labels map[string]string) RemoteOpt { + return func(_ *Client, rc *RemoteContext) error { + if rc.Labels == nil { + rc.Labels = make(map[string]string) + } + + for k, v := range labels { + rc.Labels[k] = v + } + return nil + } +} + +// WithChildLabelMap sets the map function used to define the labels set +// on referenced child content in the content store. This can be used +// to overwrite the default GC labels or filter which labels get set +// for content. +// The default is `images.ChildGCLabels`. +func WithChildLabelMap(fn func(ocispec.Descriptor) []string) RemoteOpt { + return func(_ *Client, c *RemoteContext) error { + c.ChildLabelMap = fn + return nil + } +} + +// WithResolver specifies the resolver to use. +func WithResolver(resolver remotes.Resolver) RemoteOpt { + return func(client *Client, c *RemoteContext) error { + c.Resolver = resolver + return nil + } +} + +// WithImageHandler adds a base handler to be called on dispatch. +func WithImageHandler(h images.Handler) RemoteOpt { + return func(client *Client, c *RemoteContext) error { + c.BaseHandlers = append(c.BaseHandlers, h) + return nil + } +} + +// WithImageHandlerWrapper wraps the handlers to be called on dispatch. +func WithImageHandlerWrapper(w func(images.Handler) images.Handler) RemoteOpt { + return func(client *Client, c *RemoteContext) error { + c.HandlerWrapper = w + return nil + } +} + +// WithDownloadLimiter sets the limiter for concurrent download operations. +func WithDownloadLimiter(limiter *semaphore.Weighted) RemoteOpt { + return func(client *Client, c *RemoteContext) error { + c.DownloadLimiter = limiter + return nil + } +} + +// WithMaxConcurrentDownloads sets max concurrent download limit. +func WithMaxConcurrentDownloads(max int) RemoteOpt { + return func(client *Client, c *RemoteContext) error { + c.MaxConcurrentDownloads = max + return nil + } +} + +// WithConcurrentLayerFetchBuffer sets the buffer size for concurrent layer fetches. +func WithConcurrentLayerFetchBuffer(buffer int) RemoteOpt { + return func(client *Client, c *RemoteContext) error { + c.ConcurrentLayerFetchBuffer = buffer + return nil + } +} + +// WithMaxConcurrentUploadedLayers sets max concurrent uploaded layer limit. +func WithMaxConcurrentUploadedLayers(max int) RemoteOpt { + return func(client *Client, c *RemoteContext) error { + c.MaxConcurrentUploadedLayers = max + return nil + } +} + +// WithAllMetadata downloads all manifests and known-configuration files +func WithAllMetadata() RemoteOpt { + return func(_ *Client, c *RemoteContext) error { + c.AllMetadata = true + return nil + } +} + +// WithReferrersProvider sets a referrers provider to resolve referrer objects. +func WithReferrersProvider(r content.ReferrersProvider) RemoteOpt { + return func(_ *Client, c *RemoteContext) error { + c.ReferrersProvider = r + return nil + } +} diff --git a/client/container.go b/client/container.go new file mode 100644 index 000000000000..713365f5eb08 --- /dev/null +++ b/client/container.go @@ -0,0 +1,551 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "encoding/json" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/containerd/containerd/api/services/tasks/v1" + "github.com/containerd/containerd/api/types" + "github.com/containerd/containerd/api/types/runc/options" + tasktypes "github.com/containerd/containerd/api/types/task" + "github.com/containerd/errdefs" + "github.com/containerd/errdefs/pkg/errgrpc" + "github.com/containerd/fifo" + "github.com/containerd/typeurl/v2" + ver "github.com/opencontainers/image-spec/specs-go" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/pkg/cio" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/containerd/containerd/v2/pkg/tracing" +) + +const ( + checkpointRuntimeNameLabel = "io.containerd.checkpoint.runtime" + checkpointSnapshotterNameLabel = "io.containerd.checkpoint.snapshotter" +) + +// Container is a metadata object for container resources and task creation +type Container interface { + // ID identifies the container + ID() string + // Info returns the underlying container record type + Info(context.Context, ...InfoOpts) (containers.Container, error) + // Delete removes the container + Delete(context.Context, ...DeleteOpts) error + // NewTask creates a new task based on the container metadata + NewTask(context.Context, cio.Creator, ...NewTaskOpts) (Task, error) + // Spec returns the OCI runtime specification + Spec(context.Context) (*oci.Spec, error) + // Task returns the current task for the container + // + // If cio.Load options are passed the client will Load the IO for the running + // task. + // + // If cio.Attach options are passed the client will reattach to the IO for the running + // task. + // + // If no task exists for the container a NotFound error is returned + // + // Clients must make sure that only one reader is attached to the task and consuming + // the output from the task's fifos + Task(context.Context, cio.Attach) (Task, error) + // Image returns the image that the container is based on + Image(context.Context) (Image, error) + // Labels returns the labels set on the container + Labels(context.Context) (map[string]string, error) + // SetLabels sets the provided labels for the container and returns the final label set + SetLabels(context.Context, map[string]string) (map[string]string, error) + // Extensions returns the extensions set on the container + Extensions(context.Context) (map[string]typeurl.Any, error) + // Update a container + Update(context.Context, ...UpdateContainerOpts) error + // Checkpoint creates a checkpoint image of the current container + Checkpoint(context.Context, string, ...CheckpointOpts) (Image, error) + // Restore restores a container and returns the PID of the + // restored containers init process. + Restore(context.Context, cio.Creator, string) (int, error) +} + +func containerFromRecord(client *Client, c containers.Container) *container { + return &container{ + client: client, + id: c.ID, + metadata: c, + } +} + +var _ = (Container)(&container{}) + +type container struct { + client *Client + id string + metadata containers.Container +} + +// ID returns the container's unique id +func (c *container) ID() string { + return c.id +} + +func (c *container) Info(ctx context.Context, opts ...InfoOpts) (containers.Container, error) { + i := &InfoConfig{ + // default to refreshing the container's local metadata + Refresh: true, + } + for _, o := range opts { + o(i) + } + if i.Refresh { + metadata, err := c.get(ctx) + if err != nil { + return c.metadata, err + } + c.metadata = metadata + } + return c.metadata, nil +} + +func (c *container) Extensions(ctx context.Context) (map[string]typeurl.Any, error) { + r, err := c.get(ctx) + if err != nil { + return nil, err + } + return r.Extensions, nil +} + +func (c *container) Labels(ctx context.Context) (map[string]string, error) { + r, err := c.get(ctx) + if err != nil { + return nil, err + } + return r.Labels, nil +} + +func (c *container) SetLabels(ctx context.Context, labels map[string]string) (map[string]string, error) { + ctx, span := tracing.StartSpan(ctx, "container.SetLabels", + tracing.WithAttribute("container.id", c.id), + ) + defer span.End() + container := containers.Container{ + ID: c.id, + Labels: labels, + } + + var paths []string + // mask off paths so we only muck with the labels encountered in labels. + // Labels not in the passed in argument will be left alone. + for k := range labels { + paths = append(paths, strings.Join([]string{"labels", k}, ".")) + } + + r, err := c.client.ContainerService().Update(ctx, container, paths...) + if err != nil { + return nil, err + } + return r.Labels, nil +} + +// Spec returns the current OCI specification for the container +func (c *container) Spec(ctx context.Context) (*oci.Spec, error) { + r, err := c.get(ctx) + if err != nil { + return nil, err + } + var s oci.Spec + if err := json.Unmarshal(r.Spec.GetValue(), &s); err != nil { + return nil, err + } + return &s, nil +} + +// Delete deletes an existing container +// an error is returned if the container has running tasks +func (c *container) Delete(ctx context.Context, opts ...DeleteOpts) error { + ctx, span := tracing.StartSpan(ctx, "container.Delete", + tracing.WithAttribute("container.id", c.id), + ) + defer span.End() + if _, err := c.loadTask(ctx, nil); err == nil { + return fmt.Errorf("cannot delete running task %v: %w", c.id, errdefs.ErrFailedPrecondition) + } + r, err := c.get(ctx) + if err != nil { + return err + } + for _, o := range opts { + if err := o(ctx, c.client, r); err != nil { + return err + } + } + return c.client.ContainerService().Delete(ctx, c.id) +} + +func (c *container) Task(ctx context.Context, attach cio.Attach) (Task, error) { + return c.loadTask(ctx, attach) +} + +// Image returns the image that the container is based on +func (c *container) Image(ctx context.Context) (Image, error) { + r, err := c.get(ctx) + if err != nil { + return nil, err + } + if r.Image == "" { + return nil, fmt.Errorf("container not created from an image: %w", errdefs.ErrNotFound) + } + i, err := c.client.ImageService().Get(ctx, r.Image) + if err != nil { + return nil, fmt.Errorf("failed to get image %s for container: %w", r.Image, err) + } + return NewImage(c.client, i), nil +} + +func (c *container) NewTask(ctx context.Context, ioCreate cio.Creator, opts ...NewTaskOpts) (_ Task, retErr error) { + ctx, span := tracing.StartSpan(ctx, "container.NewTask") + defer span.End() + i, err := ioCreate(c.id) + if err != nil { + return nil, err + } + defer func() { + if retErr != nil && i != nil { + i.Cancel() + i.Close() + } + }() + cfg := i.Config() + request := &tasks.CreateTaskRequest{ + ContainerID: c.id, + Terminal: cfg.Terminal, + Stdin: cfg.Stdin, + Stdout: cfg.Stdout, + Stderr: cfg.Stderr, + } + if err := c.handleMounts(ctx, request); err != nil { + return nil, err + } + + r, err := c.get(ctx) + if err != nil { + return nil, err + } + info := TaskInfo{ + runtime: r.Runtime.Name, + runtimeOptions: r.Runtime.Options, + } + for _, o := range opts { + if err := o(ctx, c.client, &info); err != nil { + return nil, err + } + } + for _, m := range info.RootFS { + request.Rootfs = append(request.Rootfs, &types.Mount{ + Type: m.Type, + Source: m.Source, + Target: m.Target, + Options: m.Options, + }) + } + request.RuntimePath = info.RuntimePath + if info.Options != nil { + o, err := typeurl.MarshalAny(info.Options) + if err != nil { + return nil, err + } + request.Options = typeurl.MarshalProto(o) + } + t := &task{ + client: c.client, + io: i, + id: c.id, + c: c, + } + if info.Checkpoint != nil { + request.Checkpoint = info.Checkpoint + } + + span.SetAttributes( + tracing.Attribute("task.container.id", request.ContainerID), + tracing.Attribute("task.request.options", request.Options.String()), + tracing.Attribute("task.runtime.name", info.runtime), + ) + response, err := c.client.TaskService().Create(ctx, request) + if err != nil { + return nil, errgrpc.ToNative(err) + } + + span.AddEvent("task created", + tracing.Attribute("task.process.id", int(response.Pid)), + ) + t.pid = response.Pid + return t, nil +} + +func (c *container) Update(ctx context.Context, opts ...UpdateContainerOpts) error { + // fetch the current container config before updating it + ctx, span := tracing.StartSpan(ctx, "container.Update") + defer span.End() + r, err := c.get(ctx) + if err != nil { + return err + } + for _, o := range opts { + if err := o(ctx, c.client, &r); err != nil { + return err + } + } + if _, err := c.client.ContainerService().Update(ctx, r); err != nil { + return errgrpc.ToNative(err) + } + return nil +} + +func (c *container) handleMounts(ctx context.Context, request *tasks.CreateTaskRequest) error { + r, err := c.get(ctx) + if err != nil { + return err + } + + if r.SnapshotKey != "" { + if r.Snapshotter == "" { + return fmt.Errorf("unable to resolve rootfs mounts without snapshotter on container: %w", errdefs.ErrInvalidArgument) + } + + // get the rootfs from the snapshotter and add it to the request + s, err := c.client.getSnapshotter(ctx, r.Snapshotter) + if err != nil { + return err + } + mounts, err := s.Mounts(ctx, r.SnapshotKey) + if err != nil { + return err + } + spec, err := c.Spec(ctx) + if err != nil { + return err + } + for _, m := range mounts { + if spec.Linux != nil && spec.Linux.MountLabel != "" { + ml := fmt.Sprintf("context=%q", spec.Linux.MountLabel) + m.Options = append(m.Options, ml) + } + request.Rootfs = append(request.Rootfs, &types.Mount{ + Type: m.Type, + Source: m.Source, + Target: m.Target, + Options: m.Options, + }) + } + } + + return nil +} + +func (c *container) Restore(ctx context.Context, ioCreate cio.Creator, rootDir string) (_ int, retErr error) { + errorPid := -1 + i, err := ioCreate(c.id) + if err != nil { + return errorPid, err + } + defer func() { + if retErr != nil && i != nil { + i.Cancel() + i.Close() + } + }() + cfg := i.Config() + + request := &tasks.CreateTaskRequest{ + ContainerID: c.id, + Terminal: cfg.Terminal, + Stdin: cfg.Stdin, + Stdout: cfg.Stdout, + Stderr: cfg.Stderr, + } + + if err := c.handleMounts(ctx, request); err != nil { + return errorPid, err + } + + request.Checkpoint = &types.Descriptor{ + Annotations: map[string]string{ + // The following annotation is used to restore a checkpoint + // via CRI. This is mainly used to restore a container + // in Kubernetes. + "RestoreFromPath": rootDir, + }, + } + // (adrianreber): it is not totally clear to me, but it seems the only + // way to restore a container in containerd is going through Create(). + // This functions sets up Create() in such a way to handle container + // restore coming through the CRI. + response, err := c.client.TaskService().Create(ctx, request) + if err != nil { + return errorPid, errgrpc.ToNative(err) + } + + return int(response.GetPid()), nil +} + +func (c *container) Checkpoint(ctx context.Context, ref string, opts ...CheckpointOpts) (Image, error) { + index := &ocispec.Index{ + Versioned: ver.Versioned{ + SchemaVersion: 2, + }, + Annotations: make(map[string]string), + } + copts := &options.CheckpointOptions{ + Exit: false, + OpenTcp: false, + ExternalUnixSockets: false, + Terminal: false, + FileLocks: true, + EmptyNamespaces: nil, + } + info, err := c.Info(ctx) + if err != nil { + return nil, err + } + + img, err := c.Image(ctx) + if err != nil { + return nil, err + } + + ctx, done, err := c.client.WithLease(ctx) + if err != nil { + return nil, err + } + defer done(ctx) + + // add image name to manifest + index.Annotations[ocispec.AnnotationRefName] = img.Name() + // add runtime info to index + index.Annotations[checkpointRuntimeNameLabel] = info.Runtime.Name + // add snapshotter info to index + index.Annotations[checkpointSnapshotterNameLabel] = info.Snapshotter + + // process remaining opts + for _, o := range opts { + if err := o(ctx, c.client, &info, index, copts); err != nil { + err = errgrpc.ToNative(err) + if !errdefs.IsAlreadyExists(err) { + return nil, err + } + } + } + + desc, err := writeIndex(ctx, index, c.client, c.ID()+"index") + if err != nil { + return nil, err + } + i := images.Image{ + Name: ref, + Target: desc, + } + checkpoint, err := c.client.ImageService().Create(ctx, i) + if err != nil { + return nil, err + } + + return NewImage(c.client, checkpoint), nil +} + +func (c *container) loadTask(ctx context.Context, ioAttach cio.Attach) (Task, error) { + response, err := c.client.TaskService().Get(ctx, &tasks.GetRequest{ + ContainerID: c.id, + }) + if err != nil { + err = errgrpc.ToNative(err) + if errdefs.IsNotFound(err) { + return nil, fmt.Errorf("no running task found: %w", err) + } + return nil, err + } + var i cio.IO + if ioAttach != nil && response.Process.Status != tasktypes.Status_UNKNOWN { + // Do not attach IO for task in unknown state, because there + // are no fifo paths anyway. + if i, err = attachExistingIO(response, ioAttach); err != nil { + return nil, err + } + } + t := &task{ + client: c.client, + io: i, + id: response.Process.ID, + pid: response.Process.Pid, + c: c, + } + return t, nil +} + +func (c *container) get(ctx context.Context) (containers.Container, error) { + return c.client.ContainerService().Get(ctx, c.id) +} + +// get the existing fifo paths from the task information stored by the daemon +func attachExistingIO(response *tasks.GetResponse, ioAttach cio.Attach) (cio.IO, error) { + fifoSet := loadFifos(response) + return ioAttach(fifoSet) +} + +// loadFifos loads the containers fifos +func loadFifos(response *tasks.GetResponse) *cio.FIFOSet { + fifos := []string{ + response.Process.Stdin, + response.Process.Stdout, + response.Process.Stderr, + } + closer := func() error { + var ( + err error + dirs = map[string]struct{}{} + ) + for _, f := range fifos { + if isFifo, _ := fifo.IsFifo(f); isFifo { + if rerr := os.Remove(f); err == nil { + err = rerr + } + dirs[filepath.Dir(f)] = struct{}{} + } + } + for dir := range dirs { + // we ignore errors here because we don't + // want to remove the directory if it isn't + // empty + _ = os.Remove(dir) + } + return err + } + + return cio.NewFIFOSet(cio.Config{ + Stdin: response.Process.Stdin, + Stdout: response.Process.Stdout, + Stderr: response.Process.Stderr, + Terminal: response.Process.Terminal, + }, closer) +} diff --git a/container_checkpoint_opts.go b/client/container_checkpoint_opts.go similarity index 82% rename from container_checkpoint_opts.go rename to client/container_checkpoint_opts.go index 64f23823d280..4edb937f6261 100644 --- a/container_checkpoint_opts.go +++ b/client/container_checkpoint_opts.go @@ -14,7 +14,7 @@ limitations under the License. */ -package containerd +package client import ( "bytes" @@ -24,24 +24,20 @@ import ( "runtime" tasks "github.com/containerd/containerd/api/services/tasks/v1" - "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/diff" - "github.com/containerd/containerd/images" - "github.com/containerd/containerd/platforms" - "github.com/containerd/containerd/protobuf" - "github.com/containerd/containerd/protobuf/proto" - "github.com/containerd/containerd/rootfs" - "github.com/containerd/containerd/runtime/v2/runc/options" + "github.com/containerd/containerd/api/types/runc/options" + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/core/diff" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/pkg/protobuf/proto" + "github.com/containerd/containerd/v2/pkg/rootfs" + "github.com/containerd/platforms" + "github.com/containerd/typeurl/v2" "github.com/opencontainers/go-digest" imagespec "github.com/opencontainers/image-spec/specs-go/v1" ) -var ( - // ErrCheckpointRWUnsupported is returned if the container runtime does not support checkpoint - ErrCheckpointRWUnsupported = errors.New("rw checkpoint is only supported on v2 runtimes") - // ErrMediaTypeNotFound returns an error when a media type in the manifest is unknown - ErrMediaTypeNotFound = errors.New("media type not found") -) +// ErrMediaTypeNotFound returns an error when a media type in the manifest is unknown +var ErrMediaTypeNotFound = errors.New("media type not found") // CheckpointOpts are options to manage the checkpoint operation type CheckpointOpts func(context.Context, *Client, *containers.Container, *imagespec.Index, *options.CheckpointOptions) error @@ -58,13 +54,13 @@ func WithCheckpointImage(ctx context.Context, client *Client, c *containers.Cont // WithCheckpointTask includes the running task func WithCheckpointTask(ctx context.Context, client *Client, c *containers.Container, index *imagespec.Index, copts *options.CheckpointOptions) error { - any, err := protobuf.MarshalAnyToProto(copts) + opt, err := typeurl.MarshalAnyToProto(copts) if err != nil { return nil } task, err := client.TaskService().Checkpoint(ctx, &tasks.CheckpointTaskRequest{ ContainerID: c.ID, - Options: any, + Options: opt, }) if err != nil { return err @@ -80,7 +76,7 @@ func WithCheckpointTask(ctx context.Context, client *Client, c *containers.Conta }) } // save copts - data, err := proto.Marshal(any) + data, err := proto.Marshal(opt) if err != nil { return err } @@ -100,8 +96,8 @@ func WithCheckpointTask(ctx context.Context, client *Client, c *containers.Conta // WithCheckpointRuntime includes the container runtime info func WithCheckpointRuntime(ctx context.Context, client *Client, c *containers.Container, index *imagespec.Index, copts *options.CheckpointOptions) error { if c.Runtime.Options != nil && c.Runtime.Options.GetValue() != nil { - any := protobuf.FromAny(c.Runtime.Options) - data, err := proto.Marshal(any) + opt := typeurl.MarshalProto(c.Runtime.Options) + data, err := proto.Marshal(opt) if err != nil { return err } diff --git a/container_opts.go b/client/container_opts.go similarity index 86% rename from container_opts.go rename to client/container_opts.go index 76a9b9616e5f..04f2a9062114 100644 --- a/container_opts.go +++ b/client/container_opts.go @@ -14,7 +14,7 @@ limitations under the License. */ -package containerd +package client import ( "context" @@ -22,14 +22,14 @@ import ( "errors" "fmt" - "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/images" - "github.com/containerd/containerd/oci" - "github.com/containerd/containerd/protobuf" - "github.com/containerd/containerd/snapshots" - "github.com/containerd/typeurl" + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/snapshots" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/containerd/errdefs" + "github.com/containerd/typeurl/v2" "github.com/opencontainers/image-spec/identity" v1 "github.com/opencontainers/image-spec/specs-go/v1" ) @@ -57,18 +57,18 @@ type InfoConfig struct { func WithRuntime(name string, options interface{}) NewContainerOpts { return func(ctx context.Context, client *Client, c *containers.Container) error { var ( - any typeurl.Any - err error + opts typeurl.Any + err error ) if options != nil { - any, err = typeurl.MarshalAny(options) + opts, err = typeurl.MarshalAny(options) if err != nil { return err } } c.Runtime = containers.RuntimeInfo{ Name: name, - Options: any, + Options: opts, } return nil } @@ -119,24 +119,24 @@ func WithImageConfigLabels(image Image) NewContainerOpts { if err != nil { return err } + if !images.IsConfigType(ic.MediaType) { + return fmt.Errorf("unknown image config media type %s", ic.MediaType) + } + var ( ociimage v1.Image config v1.ImageConfig ) - switch ic.MediaType { - case v1.MediaTypeImageConfig, images.MediaTypeDockerSchema2Config: - p, err := content.ReadBlob(ctx, image.ContentStore(), ic) - if err != nil { - return err - } + p, err := content.ReadBlob(ctx, image.ContentStore(), ic) + if err != nil { + return err + } - if err := json.Unmarshal(p, &ociimage); err != nil { - return err - } - config = ociimage.Config - default: - return fmt.Errorf("unknown image config media type %s", ic.MediaType) + if err = json.Unmarshal(p, &ociimage); err != nil { + return err } + config = ociimage.Config + c.Labels = config.Labels return nil } @@ -205,33 +205,6 @@ func WithSnapshot(id string) NewContainerOpts { } } -// WithNewSnapshot allocates a new snapshot to be used by the container as the -// root filesystem in read-write mode -func WithNewSnapshot(id string, i Image, opts ...snapshots.Opt) NewContainerOpts { - return func(ctx context.Context, client *Client, c *containers.Container) error { - diffIDs, err := i.RootFS(ctx) - if err != nil { - return err - } - - parent := identity.ChainID(diffIDs).String() - c.Snapshotter, err = client.resolveSnapshotterName(ctx, c.Snapshotter) - if err != nil { - return err - } - s, err := client.getSnapshotter(ctx, c.Snapshotter) - if err != nil { - return err - } - if _, err := s.Prepare(ctx, id, parent, opts...); err != nil { - return err - } - c.SnapshotKey = id - c.Image = i.Name() - return nil - } -} - // WithSnapshotCleanup deletes the rootfs snapshot allocated for the container func WithSnapshotCleanup(ctx context.Context, client *Client, c containers.Container) error { if c.SnapshotKey != "" { @@ -249,11 +222,21 @@ func WithSnapshotCleanup(ctx context.Context, client *Client, c containers.Conta return nil } +// WithNewSnapshot allocates a new snapshot to be used by the container as the +// root filesystem in read-write mode +func WithNewSnapshot(id string, i Image, opts ...snapshots.Opt) NewContainerOpts { + return withNewSnapshot(id, i, false, opts...) +} + // WithNewSnapshotView allocates a new snapshot to be used by the container as the // root filesystem in read-only mode func WithNewSnapshotView(id string, i Image, opts ...snapshots.Opt) NewContainerOpts { + return withNewSnapshot(id, i, true, opts...) +} + +func withNewSnapshot(id string, i Image, readonly bool, opts ...snapshots.Opt) NewContainerOpts { return func(ctx context.Context, client *Client, c *containers.Container) error { - diffIDs, err := i.(*image).i.RootFS(ctx, client.ContentStore(), client.platform) + diffIDs, err := i.RootFS(ctx) if err != nil { return err } @@ -267,7 +250,17 @@ func WithNewSnapshotView(id string, i Image, opts ...snapshots.Opt) NewContainer if err != nil { return err } - if _, err := s.View(ctx, id, parent, opts...); err != nil { + parent, err = resolveSnapshotOptions(ctx, client, c.Snapshotter, s, parent, opts...) + if err != nil { + return err + } + + if readonly { + _, err = s.View(ctx, id, parent, opts...) + } else { + _, err = s.Prepare(ctx, id, parent, opts...) + } + if err != nil { return err } c.SnapshotKey = id @@ -288,7 +281,7 @@ func WithContainerExtension(name string, extension interface{}) NewContainerOpts return fmt.Errorf("extension key must not be zero-length: %w", errdefs.ErrInvalidArgument) } - any, err := typeurl.MarshalAny(extension) + ext, err := typeurl.MarshalAny(extension) if err != nil { if errors.Is(err, typeurl.ErrNotFound) { return fmt.Errorf("extension %q is not registered with the typeurl package, see `typeurl.Register`: %w", name, err) @@ -299,7 +292,7 @@ func WithContainerExtension(name string, extension interface{}) NewContainerOpts if c.Extensions == nil { c.Extensions = make(map[string]typeurl.Any) } - c.Extensions[name] = any + c.Extensions[name] = ext return nil } } @@ -307,6 +300,9 @@ func WithContainerExtension(name string, extension interface{}) NewContainerOpts // WithNewSpec generates a new spec for a new container func WithNewSpec(opts ...oci.SpecOpts) NewContainerOpts { return func(ctx context.Context, client *Client, c *containers.Container) error { + if _, ok := namespaces.Namespace(ctx); !ok { + ctx = namespaces.WithNamespace(ctx, client.DefaultNamespace()) + } s, err := oci.GenerateSpec(ctx, client, c, opts...) if err != nil { return err @@ -324,7 +320,7 @@ func WithSpec(s *oci.Spec, opts ...oci.SpecOpts) NewContainerOpts { } var err error - c.Spec, err = protobuf.MarshalAnyToProto(s) + c.Spec, err = typeurl.MarshalAnyToProto(s) return err } } diff --git a/client/container_opts_unix.go b/client/container_opts_unix.go new file mode 100644 index 000000000000..fc562923920f --- /dev/null +++ b/client/container_opts_unix.go @@ -0,0 +1,147 @@ +//go:build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "fmt" + "os" + "path/filepath" + "syscall" + + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/core/mount" + "github.com/containerd/containerd/v2/internal/userns" + + "github.com/containerd/errdefs" + "github.com/opencontainers/image-spec/identity" + "github.com/opencontainers/runtime-spec/specs-go" +) + +// WithRemappedSnapshot creates a new snapshot and remaps the uid/gid for the +// filesystem to be used by a container with user namespaces +func WithRemappedSnapshot(id string, i Image, uid, gid uint32) NewContainerOpts { + uidmaps := []specs.LinuxIDMapping{{ContainerID: 0, HostID: uid, Size: 65536}} + gidmaps := []specs.LinuxIDMapping{{ContainerID: 0, HostID: gid, Size: 65536}} + return withRemappedSnapshotBase(id, i, uidmaps, gidmaps, false) +} + +// WithUserNSRemappedSnapshot creates a new snapshot and remaps the uid/gid for the +// filesystem to be used by a container with user namespaces +func WithUserNSRemappedSnapshot(id string, i Image, uidmaps, gidmaps []specs.LinuxIDMapping) NewContainerOpts { + return withRemappedSnapshotBase(id, i, uidmaps, gidmaps, false) +} + +// WithRemappedSnapshotView is similar to WithRemappedSnapshot but rootfs is mounted as read-only. +func WithRemappedSnapshotView(id string, i Image, uid, gid uint32) NewContainerOpts { + uidmaps := []specs.LinuxIDMapping{{ContainerID: 0, HostID: uid, Size: 65536}} + gidmaps := []specs.LinuxIDMapping{{ContainerID: 0, HostID: gid, Size: 65536}} + return withRemappedSnapshotBase(id, i, uidmaps, gidmaps, true) +} + +// WithUserNSRemappedSnapshotView is similar to WithUserNSRemappedSnapshot but rootfs is mounted as read-only. +func WithUserNSRemappedSnapshotView(id string, i Image, uidmaps, gidmaps []specs.LinuxIDMapping) NewContainerOpts { + return withRemappedSnapshotBase(id, i, uidmaps, gidmaps, true) +} + +func withRemappedSnapshotBase(id string, i Image, uidmaps, gidmaps []specs.LinuxIDMapping, readonly bool) NewContainerOpts { + return func(ctx context.Context, client *Client, c *containers.Container) error { + diffIDs, err := i.(*image).i.RootFS(ctx, client.ContentStore(), client.platform) + if err != nil { + return err + } + + rsn := remappedSnapshot{ + Parent: identity.ChainID(diffIDs).String(), + IDMap: userns.IDMap{UidMap: uidmaps, GidMap: gidmaps}, + } + usernsID, err := rsn.ID() + if err != nil { + return fmt.Errorf("failed to remap snapshot: %w", err) + } + + c.Snapshotter, err = client.resolveSnapshotterName(ctx, c.Snapshotter) + if err != nil { + return err + } + snapshotter, err := client.getSnapshotter(ctx, c.Snapshotter) + if err != nil { + return err + } + if _, err := snapshotter.Stat(ctx, usernsID); err == nil { + if _, err := snapshotter.Prepare(ctx, id, usernsID); err == nil { + c.SnapshotKey = id + c.Image = i.Name() + return nil + } else if !errdefs.IsNotFound(err) { + return err + } + } + mounts, err := snapshotter.Prepare(ctx, usernsID+"-remap", rsn.Parent) + if err != nil { + return err + } + if err := remapRootFS(ctx, mounts, rsn.IDMap); err != nil { + snapshotter.Remove(ctx, usernsID) + return err + } + if err := snapshotter.Commit(ctx, usernsID, usernsID+"-remap"); err != nil { + return err + } + if readonly { + _, err = snapshotter.View(ctx, id, usernsID) + } else { + _, err = snapshotter.Prepare(ctx, id, usernsID) + } + if err != nil { + return err + } + c.SnapshotKey = id + c.Image = i.Name() + return nil + } +} + +func remapRootFS(ctx context.Context, mounts []mount.Mount, idMap userns.IDMap) error { + return mount.WithTempMount(ctx, mounts, func(root string) error { + return filepath.Walk(root, chown(root, idMap)) + }) +} + +func chown(root string, idMap userns.IDMap) filepath.WalkFunc { + return func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + stat := info.Sys().(*syscall.Stat_t) + h, cerr := idMap.ToHost(userns.User{Uid: stat.Uid, Gid: stat.Gid}) + if cerr != nil { + return cerr + } + // be sure the lchown the path as to not de-reference the symlink to a host file + if cerr = os.Lchown(path, int(h.Uid), int(h.Gid)); cerr != nil { + return cerr + } + // we must retain special permissions such as setuid, setgid and sticky bits + if mode := info.Mode(); mode&os.ModeSymlink == 0 && mode&(os.ModeSetuid|os.ModeSetgid|os.ModeSticky) != 0 { + return os.Chmod(path, mode) + } + return nil + } +} diff --git a/container_restore_opts.go b/client/container_restore_opts.go similarity index 92% rename from container_restore_opts.go rename to client/container_restore_opts.go index 2afc18701386..174ae89d1254 100644 --- a/container_restore_opts.go +++ b/client/container_restore_opts.go @@ -14,18 +14,18 @@ limitations under the License. */ -package containerd +package client import ( "context" "errors" "fmt" - "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/content" - "github.com/containerd/containerd/images" - "github.com/containerd/containerd/protobuf/proto" - ptypes "github.com/containerd/containerd/protobuf/types" + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/pkg/protobuf/proto" + ptypes "github.com/containerd/containerd/v2/pkg/protobuf/types" "github.com/opencontainers/image-spec/identity" imagespec "github.com/opencontainers/image-spec/specs-go/v1" ) @@ -45,7 +45,7 @@ type RestoreOpts func(context.Context, string, *Client, Image, *imagespec.Index) // WithRestoreImage restores the image for the container func WithRestoreImage(ctx context.Context, id string, client *Client, checkpoint Image, index *imagespec.Index) NewContainerOpts { return func(ctx context.Context, client *Client, c *containers.Container) error { - name, ok := index.Annotations[checkpointImageNameLabel] + name, ok := index.Annotations[imagespec.AnnotationRefName] if !ok || name == "" { return ErrImageNameNotFoundInIndex } diff --git a/containerstore.go b/client/containerstore.go similarity index 87% rename from containerstore.go rename to client/containerstore.go index e3796ad0a9a0..ec354a50baae 100644 --- a/containerstore.go +++ b/client/containerstore.go @@ -14,7 +14,7 @@ limitations under the License. */ -package containerd +package client import ( "context" @@ -22,13 +22,14 @@ import ( "io" containersapi "github.com/containerd/containerd/api/services/containers/v1" - "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/protobuf" - ptypes "github.com/containerd/containerd/protobuf/types" - "github.com/containerd/typeurl" + "github.com/containerd/errdefs/pkg/errgrpc" + "github.com/containerd/typeurl/v2" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/pkg/protobuf" + ptypes "github.com/containerd/containerd/v2/pkg/protobuf/types" ) type remoteContainers struct { @@ -49,7 +50,7 @@ func (r *remoteContainers) Get(ctx context.Context, id string) (containers.Conta ID: id, }) if err != nil { - return containers.Container{}, errdefs.FromGRPC(err) + return containers.Container{}, errgrpc.ToNative(err) } return containerFromProto(resp.Container), nil @@ -71,7 +72,7 @@ func (r *remoteContainers) list(ctx context.Context, filters ...string) ([]conta Filters: filters, }) if err != nil { - return nil, errdefs.FromGRPC(err) + return nil, errgrpc.ToNative(err) } return containersFromProto(resp.Containers), nil } @@ -83,7 +84,7 @@ func (r *remoteContainers) stream(ctx context.Context, filters ...string) ([]con Filters: filters, }) if err != nil { - return nil, errdefs.FromGRPC(err) + return nil, errgrpc.ToNative(err) } var containers []containers.Container for { @@ -97,7 +98,7 @@ func (r *remoteContainers) stream(ctx context.Context, filters ...string) ([]con return nil, errStreamNotAvailable } } - return nil, errdefs.FromGRPC(err) + return nil, errgrpc.ToNative(err) } select { case <-ctx.Done(): @@ -113,7 +114,7 @@ func (r *remoteContainers) Create(ctx context.Context, container containers.Cont Container: containerToProto(&container), }) if err != nil { - return containers.Container{}, errdefs.FromGRPC(err) + return containers.Container{}, errgrpc.ToNative(err) } return containerFromProto(created.Container), nil @@ -133,7 +134,7 @@ func (r *remoteContainers) Update(ctx context.Context, container containers.Cont UpdateMask: updateMask, }) if err != nil { - return containers.Container{}, errdefs.FromGRPC(err) + return containers.Container{}, errgrpc.ToNative(err) } return containerFromProto(updated.Container), nil @@ -145,14 +146,14 @@ func (r *remoteContainers) Delete(ctx context.Context, id string) error { ID: id, }) - return errdefs.FromGRPC(err) + return errgrpc.ToNative(err) } func containerToProto(container *containers.Container) *containersapi.Container { extensions := make(map[string]*ptypes.Any) for k, v := range container.Extensions { - extensions[k] = protobuf.FromAny(v) + extensions[k] = typeurl.MarshalProto(v) } return &containersapi.Container{ ID: container.ID, @@ -160,9 +161,9 @@ func containerToProto(container *containers.Container) *containersapi.Container Image: container.Image, Runtime: &containersapi.Container_Runtime{ Name: container.Runtime.Name, - Options: protobuf.FromAny(container.Runtime.Options), + Options: typeurl.MarshalProto(container.Runtime.Options), }, - Spec: protobuf.FromAny(container.Spec), + Spec: typeurl.MarshalProto(container.Spec), Snapshotter: container.Snapshotter, SnapshotKey: container.SnapshotKey, Extensions: extensions, @@ -180,7 +181,6 @@ func containerFromProto(containerpb *containersapi.Container) containers.Contain } extensions := make(map[string]typeurl.Any) for k, v := range containerpb.Extensions { - v := v extensions[k] = v } return containers.Container{ @@ -202,7 +202,6 @@ func containersFromProto(containerspb []*containersapi.Container) []containers.C var containers []containers.Container for _, container := range containerspb { - container := container containers = append(containers, containerFromProto(container)) } diff --git a/client/diff.go b/client/diff.go new file mode 100644 index 000000000000..2af19d4a7a08 --- /dev/null +++ b/client/diff.go @@ -0,0 +1,35 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + diffapi "github.com/containerd/containerd/api/services/diff/v1" + "github.com/containerd/containerd/v2/core/diff" + "github.com/containerd/containerd/v2/core/diff/proxy" +) + +// DiffService handles the computation and application of diffs +type DiffService interface { + diff.Comparer + diff.Applier +} + +// NewDiffServiceFromClient returns a new diff service which communicates +// over a GRPC connection. +func NewDiffServiceFromClient(client diffapi.DiffClient) DiffService { + return proxy.NewDiffApplier(client).(DiffService) +} diff --git a/client/events.go b/client/events.go new file mode 100644 index 000000000000..3f6e252b37c2 --- /dev/null +++ b/client/events.go @@ -0,0 +1,125 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + + eventsapi "github.com/containerd/containerd/api/services/events/v1" + "github.com/containerd/containerd/api/types" + "github.com/containerd/errdefs/pkg/errgrpc" + "github.com/containerd/typeurl/v2" + + "github.com/containerd/containerd/v2/core/events" + "github.com/containerd/containerd/v2/pkg/protobuf" +) + +// EventService handles the publish, forward and subscribe of events. +type EventService interface { + events.Publisher + events.Forwarder + events.Subscriber +} + +// NewEventServiceFromClient returns a new event service which communicates +// over a GRPC connection. +func NewEventServiceFromClient(client eventsapi.EventsClient) EventService { + return &eventRemote{ + client: client, + } +} + +type eventRemote struct { + client eventsapi.EventsClient +} + +func (e *eventRemote) Publish(ctx context.Context, topic string, event events.Event) error { + evt, err := typeurl.MarshalAny(event) + if err != nil { + return err + } + req := &eventsapi.PublishRequest{ + Topic: topic, + Event: typeurl.MarshalProto(evt), + } + if _, err := e.client.Publish(ctx, req); err != nil { + return errgrpc.ToNative(err) + } + return nil +} + +func (e *eventRemote) Forward(ctx context.Context, envelope *events.Envelope) error { + req := &eventsapi.ForwardRequest{ + Envelope: &types.Envelope{ + Timestamp: protobuf.ToTimestamp(envelope.Timestamp), + Namespace: envelope.Namespace, + Topic: envelope.Topic, + Event: typeurl.MarshalProto(envelope.Event), + }, + } + if _, err := e.client.Forward(ctx, req); err != nil { + return errgrpc.ToNative(err) + } + return nil +} + +func (e *eventRemote) Subscribe(ctx context.Context, filters ...string) (ch <-chan *events.Envelope, errs <-chan error) { + var ( + evq = make(chan *events.Envelope) + errq = make(chan error, 1) + ) + + errs = errq + ch = evq + + session, err := e.client.Subscribe(ctx, &eventsapi.SubscribeRequest{ + Filters: filters, + }) + if err != nil { + errq <- err + close(errq) + return + } + + go func() { + defer close(errq) + + for { + ev, err := session.Recv() + if err != nil { + errq <- err + return + } + + select { + case evq <- &events.Envelope{ + Timestamp: protobuf.FromTimestamp(ev.Timestamp), + Namespace: ev.Namespace, + Topic: ev.Topic, + Event: ev.Event, + }: + case <-ctx.Done(): + if cerr := ctx.Err(); cerr != context.Canceled { + errq <- cerr + } + return + } + } + }() + + return ch, errs +} diff --git a/client/export.go b/client/export.go new file mode 100644 index 000000000000..bd34c65d4244 --- /dev/null +++ b/client/export.go @@ -0,0 +1,31 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "io" + + "github.com/containerd/containerd/v2/core/images/archive" +) + +// Export exports images to a Tar stream. +// The tar archive is in OCI format with a Docker compatible manifest +// when a single target platform is given. +func (c *Client) Export(ctx context.Context, w io.Writer, opts ...archive.ExportOpt) error { + return archive.Export(ctx, c.ContentStore(), w, opts...) +} diff --git a/client/grpc.go b/client/grpc.go new file mode 100644 index 000000000000..99325094a926 --- /dev/null +++ b/client/grpc.go @@ -0,0 +1,52 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + + "github.com/containerd/containerd/v2/pkg/namespaces" + "google.golang.org/grpc" +) + +type namespaceInterceptor struct { + namespace string +} + +func (ni namespaceInterceptor) unary(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { + _, ok := namespaces.Namespace(ctx) + if !ok { + ctx = namespaces.WithNamespace(ctx, ni.namespace) + } + return invoker(ctx, method, req, reply, cc, opts...) +} + +func (ni namespaceInterceptor) stream(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { + _, ok := namespaces.Namespace(ctx) + if !ok { + ctx = namespaces.WithNamespace(ctx, ni.namespace) + } + + return streamer(ctx, desc, cc, method, opts...) +} + +func newNSInterceptors(ns string) (grpc.UnaryClientInterceptor, grpc.StreamClientInterceptor) { + ni := namespaceInterceptor{ + namespace: ns, + } + return grpc.UnaryClientInterceptor(ni.unary), grpc.StreamClientInterceptor(ni.stream) +} diff --git a/client/image.go b/client/image.go new file mode 100644 index 000000000000..5122aa06200d --- /dev/null +++ b/client/image.go @@ -0,0 +1,447 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "sync" + + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/diff" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/images/usage" + "github.com/containerd/containerd/v2/core/snapshots" + "github.com/containerd/containerd/v2/internal/kmutex" + "github.com/containerd/containerd/v2/pkg/labels" + "github.com/containerd/containerd/v2/pkg/rootfs" + "github.com/containerd/errdefs" + "github.com/containerd/platforms" + "github.com/opencontainers/go-digest" + "github.com/opencontainers/image-spec/identity" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + "golang.org/x/sync/semaphore" +) + +// Image describes an image used by containers +type Image interface { + // Name of the image + Name() string + // Target descriptor for the image content + Target() ocispec.Descriptor + // Labels of the image + Labels() map[string]string + // Unpack unpacks the image's content into a snapshot + Unpack(context.Context, string, ...UnpackOpt) error + // RootFS returns the unpacked diffids that make up images rootfs. + RootFS(ctx context.Context) ([]digest.Digest, error) + // Size returns the total size of the image's packed resources. + Size(ctx context.Context) (int64, error) + // Usage returns a usage calculation for the image. + Usage(context.Context, ...UsageOpt) (int64, error) + // Config descriptor for the image. + Config(ctx context.Context) (ocispec.Descriptor, error) + // IsUnpacked returns whether an image is unpacked. + IsUnpacked(context.Context, string) (bool, error) + // ContentStore provides a content store which contains image blob data + ContentStore() content.Store + // Metadata returns the underlying image metadata + Metadata() images.Image + // Platform returns the platform match comparer. Can be nil. + Platform() platforms.MatchComparer + // Spec returns the OCI image spec for a given image. + Spec(ctx context.Context) (ocispec.Image, error) +} + +type usageOptions struct { + manifestLimit *int + manifestOnly bool + snapshots bool +} + +// UsageOpt is used to configure the usage calculation +type UsageOpt func(*usageOptions) error + +// WithUsageManifestLimit sets the limit to the number of manifests which will +// be walked for usage. Setting this value to 0 will require all manifests to +// be walked, returning ErrNotFound if manifests are missing. +// NOTE: By default all manifests which exist will be walked +// and any non-existent manifests and their subobjects will be ignored. +func WithUsageManifestLimit(i int) UsageOpt { + // If 0 then don't filter any manifests + // By default limits to current platform + return func(o *usageOptions) error { + o.manifestLimit = &i + return nil + } +} + +// WithSnapshotUsage will check for referenced snapshots from the image objects +// and include the snapshot size in the total usage. +func WithSnapshotUsage() UsageOpt { + return func(o *usageOptions) error { + o.snapshots = true + return nil + } +} + +// WithManifestUsage is used to get the usage for an image based on what is +// reported by the manifests rather than what exists in the content store. +// NOTE: This function is best used with the manifest limit set to get a +// consistent value, otherwise non-existent manifests will be excluded. +func WithManifestUsage() UsageOpt { + return func(o *usageOptions) error { + o.manifestOnly = true + return nil + } +} + +var _ = (Image)(&image{}) + +// NewImage returns a client image object from the metadata image +func NewImage(client *Client, i images.Image) Image { + return &image{ + client: client, + i: i, + platform: client.platform, + } +} + +// NewImageWithPlatform returns a client image object from the metadata image +func NewImageWithPlatform(client *Client, i images.Image, platform platforms.MatchComparer) Image { + return &image{ + client: client, + i: i, + platform: platform, + } +} + +type image struct { + client *Client + + i images.Image + platform platforms.MatchComparer + diffIDs []digest.Digest + + mu sync.Mutex +} + +func (i *image) Metadata() images.Image { + return i.i +} + +func (i *image) Name() string { + return i.i.Name +} + +func (i *image) Target() ocispec.Descriptor { + return i.i.Target +} + +func (i *image) Labels() map[string]string { + return i.i.Labels +} + +func (i *image) RootFS(ctx context.Context) ([]digest.Digest, error) { + i.mu.Lock() + defer i.mu.Unlock() + if i.diffIDs != nil { + return i.diffIDs, nil + } + + provider := i.client.ContentStore() + diffIDs, err := i.i.RootFS(ctx, provider, i.platform) + if err != nil { + return nil, err + } + i.diffIDs = diffIDs + return diffIDs, nil +} + +func (i *image) Size(ctx context.Context) (int64, error) { + return usage.CalculateImageUsage(ctx, i.i, i.client.ContentStore(), usage.WithManifestLimit(i.platform, 1), usage.WithManifestUsage()) +} + +func (i *image) Usage(ctx context.Context, opts ...UsageOpt) (int64, error) { + var config usageOptions + for _, opt := range opts { + if err := opt(&config); err != nil { + return 0, err + } + } + + var usageOpts []usage.Opt + if config.manifestLimit != nil { + usageOpts = append(usageOpts, usage.WithManifestLimit(i.platform, *config.manifestLimit)) + } + if config.snapshots { + usageOpts = append(usageOpts, usage.WithSnapshotters(i.client.SnapshotService)) + } + if config.manifestOnly { + usageOpts = append(usageOpts, usage.WithManifestUsage()) + } + + return usage.CalculateImageUsage(ctx, i.i, i.client.ContentStore(), usageOpts...) +} + +func (i *image) Config(ctx context.Context) (ocispec.Descriptor, error) { + provider := i.client.ContentStore() + return i.i.Config(ctx, provider, i.platform) +} + +func (i *image) IsUnpacked(ctx context.Context, snapshotterName string) (bool, error) { + sn, err := i.client.getSnapshotter(ctx, snapshotterName) + if err != nil { + return false, err + } + + diffs, err := i.RootFS(ctx) + if err != nil { + return false, err + } + + if _, err := sn.Stat(ctx, identity.ChainID(diffs).String()); err != nil { + if errdefs.IsNotFound(err) { + return false, nil + } + return false, err + } + + return true, nil +} + +func (i *image) Spec(ctx context.Context) (ocispec.Image, error) { + var ociImage ocispec.Image + + desc, err := i.Config(ctx) + if err != nil { + return ociImage, fmt.Errorf("get image config descriptor: %w", err) + } + + blob, err := content.ReadBlob(ctx, i.ContentStore(), desc) + if err != nil { + return ociImage, fmt.Errorf("read image config from content store: %w", err) + } + + if err := json.Unmarshal(blob, &ociImage); err != nil { + return ociImage, fmt.Errorf("unmarshal image config %s: %w", blob, err) + } + + return ociImage, nil +} + +// UnpackConfig provides configuration for the unpack of an image +type UnpackConfig struct { + // ApplyOpts for applying a diff to a snapshotter + ApplyOpts []diff.ApplyOpt + // SnapshotOpts for configuring a snapshotter + SnapshotOpts []snapshots.Opt + // CheckPlatformSupported is whether to validate that a snapshotter + // supports an image's platform before unpacking + CheckPlatformSupported bool + // DuplicationSuppressor is used to make sure that there is only one + // in-flight fetch request or unpack handler for a given descriptor's + // digest or chain ID. + DuplicationSuppressor kmutex.KeyedLocker + // Limiter is used to limit concurrent unpacks + Limiter *semaphore.Weighted +} + +// UnpackOpt provides configuration for unpack +type UnpackOpt func(context.Context, *UnpackConfig) error + +// WithSnapshotterPlatformCheck sets `CheckPlatformSupported` on the UnpackConfig +func WithSnapshotterPlatformCheck() UnpackOpt { + return func(ctx context.Context, uc *UnpackConfig) error { + uc.CheckPlatformSupported = true + return nil + } +} + +// WithUnpackDuplicationSuppressor sets `DuplicationSuppressor` on the UnpackConfig. +func WithUnpackDuplicationSuppressor(suppressor kmutex.KeyedLocker) UnpackOpt { + return func(ctx context.Context, uc *UnpackConfig) error { + uc.DuplicationSuppressor = suppressor + return nil + } +} + +// WithUnpackApplyOpts appends new apply options on the UnpackConfig. +func WithUnpackApplyOpts(opts ...diff.ApplyOpt) UnpackOpt { + return func(ctx context.Context, uc *UnpackConfig) error { + uc.ApplyOpts = append(uc.ApplyOpts, opts...) + return nil + } +} + +// WithUnpackLimiter sets a semaphore to limit concurrent unpacks. +func WithUnpackLimiter(limiter *semaphore.Weighted) UnpackOpt { + return func(ctx context.Context, uc *UnpackConfig) error { + uc.Limiter = limiter + return nil + } +} + +func (i *image) Unpack(ctx context.Context, snapshotterName string, opts ...UnpackOpt) error { + ctx, done, err := i.client.WithLease(ctx) + if err != nil { + return err + } + defer done(ctx) + + var config UnpackConfig + for _, o := range opts { + if err := o(ctx, &config); err != nil { + return err + } + } + + manifest, err := i.getManifest(ctx, i.platform) + if err != nil { + return err + } + + layers, err := i.getLayers(ctx, manifest) + if err != nil { + return err + } + + var ( + a = i.client.DiffService() + cs = i.client.ContentStore() + + chain []digest.Digest + unpacked bool + ) + snapshotterName, err = i.client.resolveSnapshotterName(ctx, snapshotterName) + if err != nil { + return err + } + sn, err := i.client.getSnapshotter(ctx, snapshotterName) + if err != nil { + return err + } + if config.CheckPlatformSupported { + if err := i.checkSnapshotterSupport(ctx, snapshotterName, manifest); err != nil { + return err + } + } + + for _, layer := range layers { + unpacked, err = rootfs.ApplyLayerWithOpts(ctx, layer, chain, sn, a, config.SnapshotOpts, config.ApplyOpts) + if err != nil { + return fmt.Errorf("apply layer error for %q: %w", i.Name(), err) + } + + if unpacked { + // Set the uncompressed label after the uncompressed + // digest has been verified through apply. + cinfo := content.Info{ + Digest: layer.Blob.Digest, + Labels: map[string]string{ + labels.LabelUncompressed: layer.Diff.Digest.String(), + }, + } + if _, err := cs.Update(ctx, cinfo, "labels."+labels.LabelUncompressed); err != nil { + return err + } + } + + chain = append(chain, layer.Diff.Digest) + } + + desc, err := i.i.Config(ctx, cs, i.platform) + if err != nil { + return err + } + + rootFS := identity.ChainID(chain).String() + + cinfo := content.Info{ + Digest: desc.Digest, + Labels: map[string]string{ + fmt.Sprintf("containerd.io/gc.ref.snapshot.%s", snapshotterName): rootFS, + }, + } + + _, err = cs.Update(ctx, cinfo, fmt.Sprintf("labels.containerd.io/gc.ref.snapshot.%s", snapshotterName)) + return err +} + +func (i *image) getManifest(ctx context.Context, platform platforms.MatchComparer) (ocispec.Manifest, error) { + cs := i.ContentStore() + manifest, err := images.Manifest(ctx, cs, i.i.Target, platform) + if err != nil { + return ocispec.Manifest{}, err + } + return manifest, nil +} + +func (i *image) getLayers(ctx context.Context, manifest ocispec.Manifest) ([]rootfs.Layer, error) { + diffIDs, err := i.RootFS(ctx) + if err != nil { + return nil, fmt.Errorf("failed to resolve rootfs: %w", err) + } + + // parse out the image layers from oci artifact layers + imageLayers := []ocispec.Descriptor{} + for _, ociLayer := range manifest.Layers { + if images.IsLayerType(ociLayer.MediaType) { + imageLayers = append(imageLayers, ociLayer) + } + } + if len(diffIDs) != len(imageLayers) { + return nil, errors.New("mismatched image rootfs and manifest layers") + } + layers := make([]rootfs.Layer, len(diffIDs)) + for i := range diffIDs { + layers[i].Diff = ocispec.Descriptor{ + // TODO: derive media type from compressed type + MediaType: ocispec.MediaTypeImageLayer, + Digest: diffIDs[i], + } + layers[i].Blob = imageLayers[i] + } + return layers, nil +} + +func (i *image) checkSnapshotterSupport(ctx context.Context, snapshotterName string, manifest ocispec.Manifest) error { + snapshotterPlatformMatcher, err := i.client.GetSnapshotterSupportedPlatforms(ctx, snapshotterName) + if err != nil { + return err + } + + manifestPlatform, err := images.ConfigPlatform(ctx, i.ContentStore(), manifest.Config) + if err != nil { + return err + } + + if snapshotterPlatformMatcher.Match(manifestPlatform) { + return nil + } + return fmt.Errorf("snapshotter %s does not support platform %s for image %s", snapshotterName, manifestPlatform, manifest.Config.Digest) +} + +func (i *image) ContentStore() content.Store { + return i.client.ContentStore() +} + +func (i *image) Platform() platforms.MatchComparer { + return i.platform +} diff --git a/client/image_store.go b/client/image_store.go new file mode 100644 index 000000000000..a5a7d1c9d92a --- /dev/null +++ b/client/image_store.go @@ -0,0 +1,149 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + + imagesapi "github.com/containerd/containerd/api/services/images/v1" + "github.com/containerd/errdefs/pkg/errgrpc" + "google.golang.org/protobuf/types/known/timestamppb" + + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/pkg/epoch" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/containerd/containerd/v2/pkg/protobuf" + ptypes "github.com/containerd/containerd/v2/pkg/protobuf/types" +) + +type remoteImages struct { + client imagesapi.ImagesClient +} + +// NewImageStoreFromClient returns a new image store client +func NewImageStoreFromClient(client imagesapi.ImagesClient) images.Store { + return &remoteImages{ + client: client, + } +} + +func (s *remoteImages) Get(ctx context.Context, name string) (images.Image, error) { + resp, err := s.client.Get(ctx, &imagesapi.GetImageRequest{ + Name: name, + }) + if err != nil { + return images.Image{}, errgrpc.ToNative(err) + } + + return imageFromProto(resp.Image), nil +} + +func (s *remoteImages) List(ctx context.Context, filters ...string) ([]images.Image, error) { + resp, err := s.client.List(ctx, &imagesapi.ListImagesRequest{ + Filters: filters, + }) + if err != nil { + return nil, errgrpc.ToNative(err) + } + + return imagesFromProto(resp.Images), nil +} + +func (s *remoteImages) Create(ctx context.Context, image images.Image) (images.Image, error) { + req := &imagesapi.CreateImageRequest{ + Image: imageToProto(&image), + } + if tm := epoch.FromContext(ctx); tm != nil { + req.SourceDateEpoch = timestamppb.New(*tm) + } + created, err := s.client.Create(ctx, req) + if err != nil { + return images.Image{}, errgrpc.ToNative(err) + } + + return imageFromProto(created.Image), nil +} + +func (s *remoteImages) Update(ctx context.Context, image images.Image, fieldpaths ...string) (images.Image, error) { + var updateMask *ptypes.FieldMask + if len(fieldpaths) > 0 { + updateMask = &ptypes.FieldMask{ + Paths: fieldpaths, + } + } + req := &imagesapi.UpdateImageRequest{ + Image: imageToProto(&image), + UpdateMask: updateMask, + } + if tm := epoch.FromContext(ctx); tm != nil { + req.SourceDateEpoch = timestamppb.New(*tm) + } + updated, err := s.client.Update(ctx, req) + if err != nil { + return images.Image{}, errgrpc.ToNative(err) + } + + return imageFromProto(updated.Image), nil +} + +func (s *remoteImages) Delete(ctx context.Context, name string, opts ...images.DeleteOpt) error { + var do images.DeleteOptions + for _, opt := range opts { + if err := opt(ctx, &do); err != nil { + return err + } + } + req := &imagesapi.DeleteImageRequest{ + Name: name, + Sync: do.Synchronous, + } + if do.Target != nil { + req.Target = oci.DescriptorToProto(*do.Target) + } + _, err := s.client.Delete(ctx, req) + return errgrpc.ToNative(err) +} + +func imageToProto(image *images.Image) *imagesapi.Image { + return &imagesapi.Image{ + Name: image.Name, + Labels: image.Labels, + Target: oci.DescriptorToProto(image.Target), + CreatedAt: protobuf.ToTimestamp(image.CreatedAt), + UpdatedAt: protobuf.ToTimestamp(image.UpdatedAt), + } +} + +func imageFromProto(imagepb *imagesapi.Image) images.Image { + return images.Image{ + Name: imagepb.Name, + Labels: imagepb.Labels, + Target: oci.DescriptorFromProto(imagepb.Target), + CreatedAt: protobuf.FromTimestamp(imagepb.CreatedAt), + UpdatedAt: protobuf.FromTimestamp(imagepb.UpdatedAt), + } +} + +func imagesFromProto(imagespb []*imagesapi.Image) []images.Image { + var images []images.Image + + for _, image := range imagespb { + images = append(images, imageFromProto(image)) + } + + return images +} diff --git a/client/import.go b/client/import.go new file mode 100644 index 000000000000..c7a462fe42ce --- /dev/null +++ b/client/import.go @@ -0,0 +1,287 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "io" + + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/images/archive" + "github.com/containerd/errdefs" + "github.com/containerd/platforms" + digest "github.com/opencontainers/go-digest" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" +) + +type importOpts struct { + indexName string + imageRefT func(string) string + dgstRefT func(digest.Digest) string + skipDgstRef func(string) bool + allPlatforms bool + platformMatcher platforms.MatchComparer + compress bool + discardLayers bool + skipMissing bool + imageLabels map[string]string + referrers content.ReferrersProvider +} + +// ImportOpt allows the caller to specify import specific options +type ImportOpt func(*importOpts) error + +// WithImageRefTranslator is used to translate the index reference +// to an image reference for the image store. +func WithImageRefTranslator(f func(string) string) ImportOpt { + return func(c *importOpts) error { + c.imageRefT = f + return nil + } +} + +// WithImageLabels are the image labels to apply to a new image +func WithImageLabels(labels map[string]string) ImportOpt { + return func(c *importOpts) error { + c.imageLabels = labels + return nil + } +} + +// WithDigestRef is used to create digest images for each +// manifest in the index. +func WithDigestRef(f func(digest.Digest) string) ImportOpt { + return func(c *importOpts) error { + c.dgstRefT = f + return nil + } +} + +// WithSkipDigestRef is used to specify when to skip applying +// WithDigestRef. The callback receives an image reference (or an empty +// string if not specified in the image). When the callback returns true, +// the skip occurs. +func WithSkipDigestRef(f func(string) bool) ImportOpt { + return func(c *importOpts) error { + c.skipDgstRef = f + return nil + } +} + +// WithIndexName creates a tag pointing to the imported index +func WithIndexName(name string) ImportOpt { + return func(c *importOpts) error { + c.indexName = name + return nil + } +} + +// WithAllPlatforms is used to import content for all platforms. +func WithAllPlatforms(allPlatforms bool) ImportOpt { + return func(c *importOpts) error { + c.allPlatforms = allPlatforms + return nil + } +} + +// WithImportPlatform is used to import content for specific platform. +func WithImportPlatform(platformMacher platforms.MatchComparer) ImportOpt { + return func(c *importOpts) error { + c.platformMatcher = platformMacher + return nil + } +} + +// WithImportCompression compresses uncompressed layers on import. +// This is used for import formats which do not include the manifest. +func WithImportCompression() ImportOpt { + return func(c *importOpts) error { + c.compress = true + return nil + } +} + +// WithDiscardUnpackedLayers allows the garbage collector to clean up +// layers from content store after unpacking. +func WithDiscardUnpackedLayers() ImportOpt { + return func(c *importOpts) error { + c.discardLayers = true + return nil + } +} + +// WithSkipMissing allows to import an archive which doesn't contain all the +// referenced blobs. +func WithSkipMissing() ImportOpt { + return func(c *importOpts) error { + c.skipMissing = true + return nil + } +} + +// WithImportReferrers allows to set a custom referrers provider +// for setting referrer objects during import. +func WithImportReferrers(r content.ReferrersProvider) ImportOpt { + return func(c *importOpts) error { + c.referrers = r + return nil + } +} + +// Import imports an image from a Tar stream using reader. +// Caller needs to specify importer. Future version may use oci.v1 as the default. +// Note that unreferenced blobs may be imported to the content store as well. +func (c *Client) Import(ctx context.Context, reader io.Reader, opts ...ImportOpt) ([]images.Image, error) { + var iopts importOpts + for _, o := range opts { + if err := o(&iopts); err != nil { + return nil, err + } + } + + ctx, done, err := c.WithLease(ctx) + if err != nil { + return nil, err + } + defer done(ctx) + + var aio []archive.ImportOpt + if iopts.compress { + aio = append(aio, archive.WithImportCompression()) + } + + index, err := archive.ImportIndex(ctx, c.ContentStore(), reader, aio...) + if err != nil { + return nil, err + } + + var ( + imgs []images.Image + cs = c.ContentStore() + is = c.ImageService() + ) + + if iopts.indexName != "" { + imgs = append(imgs, images.Image{ + Name: iopts.indexName, + Target: index, + }) + } + var platformMatcher = c.platform + if iopts.allPlatforms { + platformMatcher = platforms.All + } else if iopts.platformMatcher != nil { + platformMatcher = iopts.platformMatcher + } + + var handler images.HandlerFunc = func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) { + // Only save images at top level + if desc.Digest != index.Digest { + // Don't set labels on missing content. + children, err := images.Children(ctx, cs, desc) + if iopts.skipMissing && errdefs.IsNotFound(err) { + return nil, images.ErrSkipDesc + } + return children, err + } + + idx, err := decodeIndex(ctx, cs, desc) + if err != nil { + return nil, err + } + + for _, m := range idx.Manifests { + name := imageName(m.Annotations, iopts.imageRefT) + if name != "" { + imgs = append(imgs, images.Image{ + Name: name, + Target: m, + }) + } + // don't create images for referrer descriptors + if _, ok := m.Annotations[images.AnnotationManifestSubject]; ok { + continue + } + if iopts.skipDgstRef != nil { + if iopts.skipDgstRef(name) { + continue + } + } + if iopts.dgstRefT != nil { + ref := iopts.dgstRefT(m.Digest) + if ref != "" { + imgs = append(imgs, images.Image{ + Name: ref, + Target: m, + }) + } + } + } + + return idx.Manifests, nil + } + + handler = images.FilterPlatforms(handler, platformMatcher) + if iopts.referrers != nil { + handler = images.SetReferrers(iopts.referrers, handler) + } + if iopts.discardLayers { + handler = images.SetChildrenMappedLabels(cs, handler, images.ChildGCLabelsFilterLayers) + } else { + handler = images.SetChildrenLabels(cs, handler) + } + if err := images.WalkNotEmpty(ctx, handler, index); err != nil { + return nil, err + } + + for i := range imgs { + fieldsPath := []string{"target"} + if iopts.imageLabels != nil { + fieldsPath = append(fieldsPath, "labels") + imgs[i].Labels = iopts.imageLabels + } + img, err := is.Update(ctx, imgs[i], fieldsPath...) + if err != nil { + if !errdefs.IsNotFound(err) { + return nil, err + } + + img, err = is.Create(ctx, imgs[i]) + if err != nil { + return nil, err + } + } + imgs[i] = img + } + + return imgs, nil +} + +func imageName(annotations map[string]string, ociCleanup func(string) string) string { + name := annotations[images.AnnotationImageName] + if name != "" { + return name + } + name = annotations[ocispec.AnnotationRefName] + if name != "" { + if ociCleanup != nil { + name = ociCleanup(name) + } + } + return name +} diff --git a/install.go b/client/install.go similarity index 77% rename from install.go rename to client/install.go index 16cff08d24ab..2f636b277cd9 100644 --- a/install.go +++ b/client/install.go @@ -14,7 +14,7 @@ limitations under the License. */ -package containerd +package client import ( "archive/tar" @@ -26,13 +26,14 @@ import ( "runtime" "strings" - "github.com/containerd/containerd/archive" - "github.com/containerd/containerd/archive/compression" - "github.com/containerd/containerd/content" - "github.com/containerd/containerd/images" + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/pkg/archive" + "github.com/containerd/containerd/v2/pkg/archive/compression" ) -// Install a binary image into the opt service +// Install a binary image into the opt service. +// More info: https://github.com/containerd/containerd/blob/main/docs/managed-opt.md. func (c *Client) Install(ctx context.Context, image Image, opts ...InstallOpts) error { var config InstallConfig for _, o := range opts { @@ -70,7 +71,8 @@ func (c *Client) Install(ctx context.Context, image Image, opts ...InstallOpts) ra.Close() return err } - if _, err := archive.Apply(ctx, path, r, archive.WithFilter(func(hdr *tar.Header) (bool, error) { + + filter := archive.WithFilter(func(hdr *tar.Header) (bool, error) { d := filepath.Dir(hdr.Name) result := d == binDir @@ -87,7 +89,15 @@ func (c *Client) Install(ctx context.Context, image Image, opts ...InstallOpts) } } return result, nil - })); err != nil { + }) + + opts := []archive.ApplyOpt{filter} + + if runtime.GOOS == "windows" { + opts = append(opts, archive.WithNoSameOwner()) + } + + if _, err := archive.Apply(ctx, path, r, opts...); err != nil { r.Close() ra.Close() return err @@ -102,8 +112,7 @@ func (c *Client) getInstallPath(ctx context.Context, config InstallConfig) (stri if config.Path != "" { return config.Path, nil } - filters := []string{"id==opt"} - resp, err := c.IntrospectionService().Plugins(ctx, filters) + resp, err := c.IntrospectionService().Plugins(ctx, "id==opt") if err != nil { return "", err } diff --git a/install_opts.go b/client/install_opts.go similarity index 98% rename from install_opts.go rename to client/install_opts.go index b0c9213cb277..c42d910e8784 100644 --- a/install_opts.go +++ b/client/install_opts.go @@ -14,7 +14,7 @@ limitations under the License. */ -package containerd +package client // InstallOpts configures binary installs type InstallOpts func(*InstallConfig) diff --git a/client/lease.go b/client/lease.go new file mode 100644 index 000000000000..e0608a7c6c55 --- /dev/null +++ b/client/lease.go @@ -0,0 +1,54 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "time" + + "github.com/containerd/containerd/v2/core/leases" +) + +// WithLease attaches a lease on the context +func (c *Client) WithLease(ctx context.Context, opts ...leases.Opt) (context.Context, func(context.Context) error, error) { + nop := func(context.Context) error { return nil } + + _, ok := leases.FromContext(ctx) + if ok { + return ctx, nop, nil + } + + ls := c.LeasesService() + + if len(opts) == 0 { + // Use default lease configuration if no options provided + opts = []leases.Opt{ + leases.WithRandomID(), + leases.WithExpiration(24 * time.Hour), + } + } + + l, err := ls.Create(ctx, opts...) + if err != nil { + return ctx, nop, err + } + + ctx = leases.WithLease(ctx, l.ID) + return ctx, func(ctx context.Context) error { + return ls.Delete(ctx, l) + }, nil +} diff --git a/client/namespaces.go b/client/namespaces.go new file mode 100644 index 000000000000..ca93e80f62c6 --- /dev/null +++ b/client/namespaces.go @@ -0,0 +1,122 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "strings" + + api "github.com/containerd/containerd/api/services/namespaces/v1" + "github.com/containerd/errdefs/pkg/errgrpc" + + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/protobuf/types" +) + +// NewNamespaceStoreFromClient returns a new namespace store +func NewNamespaceStoreFromClient(client api.NamespacesClient) namespaces.Store { + return &remoteNamespaces{client: client} +} + +type remoteNamespaces struct { + client api.NamespacesClient +} + +func (r *remoteNamespaces) Create(ctx context.Context, namespace string, labels map[string]string) error { + var req api.CreateNamespaceRequest + + req.Namespace = &api.Namespace{ + Name: namespace, + Labels: labels, + } + + _, err := r.client.Create(ctx, &req) + if err != nil { + return errgrpc.ToNative(err) + } + + return nil +} + +func (r *remoteNamespaces) Labels(ctx context.Context, namespace string) (map[string]string, error) { + var req api.GetNamespaceRequest + req.Name = namespace + + resp, err := r.client.Get(ctx, &req) + if err != nil { + return nil, errgrpc.ToNative(err) + } + + return resp.Namespace.Labels, nil +} + +func (r *remoteNamespaces) SetLabel(ctx context.Context, namespace, key, value string) error { + var req api.UpdateNamespaceRequest + + req.Namespace = &api.Namespace{ + Name: namespace, + Labels: map[string]string{key: value}, + } + + req.UpdateMask = &types.FieldMask{ + Paths: []string{strings.Join([]string{"labels", key}, ".")}, + } + + _, err := r.client.Update(ctx, &req) + if err != nil { + return errgrpc.ToNative(err) + } + + return nil +} + +func (r *remoteNamespaces) List(ctx context.Context) ([]string, error) { + var req api.ListNamespacesRequest + + resp, err := r.client.List(ctx, &req) + if err != nil { + return nil, errgrpc.ToNative(err) + } + + var namespaces []string + + for _, ns := range resp.Namespaces { + namespaces = append(namespaces, ns.Name) + } + + return namespaces, nil +} + +func (r *remoteNamespaces) Delete(ctx context.Context, namespace string, opts ...namespaces.DeleteOpts) error { + i := namespaces.DeleteInfo{ + Name: namespace, + } + for _, o := range opts { + if err := o(ctx, &i); err != nil { + return err + } + } + req := api.DeleteNamespaceRequest{ + Name: namespace, + } + _, err := r.client.Delete(ctx, &req) + if err != nil { + return errgrpc.ToNative(err) + } + + return nil +} diff --git a/client/process.go b/client/process.go new file mode 100644 index 000000000000..e451eaa7d169 --- /dev/null +++ b/client/process.go @@ -0,0 +1,280 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "fmt" + "strings" + "syscall" + "time" + + "github.com/containerd/containerd/api/services/tasks/v1" + "github.com/containerd/errdefs" + "github.com/containerd/errdefs/pkg/errgrpc" + + "github.com/containerd/containerd/v2/pkg/cio" + "github.com/containerd/containerd/v2/pkg/protobuf" + "github.com/containerd/containerd/v2/pkg/tracing" +) + +// Process represents a system process +type Process interface { + // ID of the process + ID() string + // Pid is the system specific process id + Pid() uint32 + // Start starts the process executing the user's defined binary + Start(context.Context) error + // Delete removes the process and any resources allocated returning the exit status + Delete(context.Context, ...ProcessDeleteOpts) (*ExitStatus, error) + // Kill sends the provided signal to the process + Kill(context.Context, syscall.Signal, ...KillOpts) error + // Wait asynchronously waits for the process to exit, and sends the exit code to the returned channel + Wait(context.Context) (<-chan ExitStatus, error) + // CloseIO allows various pipes to be closed on the process + CloseIO(context.Context, ...IOCloserOpts) error + // Resize changes the width and height of the process's terminal + Resize(ctx context.Context, w, h uint32) error + // IO returns the io set for the process + IO() cio.IO + // Status returns the executing status of the process + Status(context.Context) (Status, error) +} + +// NewExitStatus populates an ExitStatus +func NewExitStatus(code uint32, t time.Time, err error) *ExitStatus { + return &ExitStatus{ + code: code, + exitedAt: t, + err: err, + } +} + +// ExitStatus encapsulates a process's exit status. +// It is used by `Wait()` to return either a process exit code or an error +type ExitStatus struct { + code uint32 + exitedAt time.Time + err error +} + +// Result returns the exit code and time of the exit status. +// An error may be returned here to which indicates there was an error +// +// at some point while waiting for the exit status. It does not signify +// an error with the process itself. +// +// If an error is returned, the process may still be running. +func (s ExitStatus) Result() (uint32, time.Time, error) { + return s.code, s.exitedAt, s.err +} + +// ExitCode returns the exit code of the process. +// This is only valid if Error() returns nil. +func (s ExitStatus) ExitCode() uint32 { + return s.code +} + +// ExitTime returns the exit time of the process +// This is only valid if Error() returns nil. +func (s ExitStatus) ExitTime() time.Time { + return s.exitedAt +} + +// Error returns the error, if any, that occurred while waiting for the +// process. +func (s ExitStatus) Error() error { + return s.err +} + +type process struct { + id string + task *task + pid uint32 + io cio.IO +} + +func (p *process) ID() string { + return p.id +} + +// Pid returns the pid of the process +// The pid is not set until start is called and returns +func (p *process) Pid() uint32 { + return p.pid +} + +// Start starts the exec process +func (p *process) Start(ctx context.Context) error { + ctx, span := tracing.StartSpan(ctx, "process.Start", + tracing.WithAttribute("process.id", p.ID()), + tracing.WithAttribute("process.task.id", p.task.ID()), + ) + defer span.End() + r, err := p.task.client.TaskService().Start(ctx, &tasks.StartRequest{ + ContainerID: p.task.id, + ExecID: p.id, + }) + if err != nil { + if p.io != nil { + p.io.Cancel() + p.io.Wait() + p.io.Close() + } + return errgrpc.ToNative(err) + } + span.SetAttributes(tracing.Attribute("process.pid", int(r.Pid))) + p.pid = r.Pid + return nil +} + +func (p *process) Kill(ctx context.Context, s syscall.Signal, opts ...KillOpts) error { + ctx, span := tracing.StartSpan(ctx, "process.Kill", + tracing.WithAttribute("process.id", p.ID()), + tracing.WithAttribute("process.pid", int(p.Pid())), + tracing.WithAttribute("process.task.id", p.task.ID()), + ) + defer span.End() + var i KillInfo + for _, o := range opts { + if err := o(ctx, &i); err != nil { + return err + } + } + _, err := p.task.client.TaskService().Kill(ctx, &tasks.KillRequest{ + Signal: uint32(s), + ContainerID: p.task.id, + ExecID: p.id, + All: i.All, + }) + return errgrpc.ToNative(err) +} + +func (p *process) Wait(ctx context.Context) (<-chan ExitStatus, error) { + c := make(chan ExitStatus, 1) + go func() { + defer close(c) + ctx, span := tracing.StartSpan(ctx, "process.Wait", + tracing.WithAttribute("process.id", p.ID()), + tracing.WithAttribute("process.task.id", p.task.ID()), + ) + defer span.End() + r, err := p.task.client.TaskService().Wait(ctx, &tasks.WaitRequest{ + ContainerID: p.task.id, + ExecID: p.id, + }) + if err != nil { + c <- ExitStatus{ + code: UnknownExitStatus, + err: err, + } + return + } + c <- ExitStatus{ + code: r.ExitStatus, + exitedAt: protobuf.FromTimestamp(r.ExitedAt), + } + }() + return c, nil +} + +func (p *process) CloseIO(ctx context.Context, opts ...IOCloserOpts) error { + ctx, span := tracing.StartSpan(ctx, "process.CloseIO", + tracing.WithAttribute("process.id", p.ID()), + ) + defer span.End() + r := &tasks.CloseIORequest{ + ContainerID: p.task.id, + ExecID: p.id, + } + var i IOCloseInfo + for _, o := range opts { + o(&i) + } + r.Stdin = i.Stdin + _, err := p.task.client.TaskService().CloseIO(ctx, r) + return errgrpc.ToNative(err) +} + +func (p *process) IO() cio.IO { + return p.io +} + +func (p *process) Resize(ctx context.Context, w, h uint32) error { + ctx, span := tracing.StartSpan(ctx, "process.Resize", + tracing.WithAttribute("process.id", p.ID()), + ) + defer span.End() + _, err := p.task.client.TaskService().ResizePty(ctx, &tasks.ResizePtyRequest{ + ContainerID: p.task.id, + Width: w, + Height: h, + ExecID: p.id, + }) + return errgrpc.ToNative(err) +} + +func (p *process) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (*ExitStatus, error) { + ctx, span := tracing.StartSpan(ctx, "process.Delete", + tracing.WithAttribute("process.id", p.ID()), + ) + defer span.End() + for _, o := range opts { + if err := o(ctx, p); err != nil { + return nil, err + } + } + status, err := p.Status(ctx) + if err != nil { + return nil, err + } + switch status.Status { + case Running, Paused, Pausing: + return nil, fmt.Errorf("current process state: %s, process must be stopped before deletion: %w", status.Status, errdefs.ErrFailedPrecondition) + } + r, err := p.task.client.TaskService().DeleteProcess(ctx, &tasks.DeleteProcessRequest{ + ContainerID: p.task.id, + ExecID: p.id, + }) + if err != nil { + return nil, errgrpc.ToNative(err) + } + if p.io != nil { + p.io.Cancel() + p.io.Wait() + p.io.Close() + } + return &ExitStatus{code: r.ExitStatus, exitedAt: protobuf.FromTimestamp(r.ExitedAt)}, nil +} + +func (p *process) Status(ctx context.Context) (Status, error) { + r, err := p.task.client.TaskService().Get(ctx, &tasks.GetRequest{ + ContainerID: p.task.id, + ExecID: p.id, + }) + if err != nil { + return Status{}, errgrpc.ToNative(err) + } + status := ProcessStatus(strings.ToLower(r.Process.Status.String())) + exitStatus := r.Process.ExitStatus + + return Status{ + Status: status, + ExitStatus: exitStatus, + }, nil +} diff --git a/client/pull.go b/client/pull.go new file mode 100644 index 000000000000..7435394306d3 --- /dev/null +++ b/client/pull.go @@ -0,0 +1,314 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "errors" + "fmt" + + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + "golang.org/x/sync/semaphore" + + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/remotes" + "github.com/containerd/containerd/v2/core/remotes/docker" + "github.com/containerd/containerd/v2/core/transfer" + "github.com/containerd/containerd/v2/core/unpack" + "github.com/containerd/containerd/v2/pkg/tracing" + "github.com/containerd/errdefs" + "github.com/containerd/platforms" +) + +const ( + pullSpanPrefix = "pull" +) + +// Pull downloads the provided content into containerd's content store +// and returns a platform specific image object +func (c *Client) Pull(ctx context.Context, ref string, opts ...RemoteOpt) (_ Image, retErr error) { + ctx, span := tracing.StartSpan(ctx, tracing.Name(pullSpanPrefix, "Pull")) + defer span.End() + + pullCtx := defaultRemoteContext() + + for _, o := range opts { + if err := o(c, pullCtx); err != nil { + return nil, err + } + } + + if resolver, ok := pullCtx.Resolver.(remotes.ResolverWithOptions); ok { + resolver.SetOptions( + transfer.WithConcurrentLayerFetchBuffer(pullCtx.ConcurrentLayerFetchBuffer), + transfer.WithMaxConcurrentDownloads(pullCtx.MaxConcurrentDownloads), + transfer.WithDownloadLimiter(pullCtx.DownloadLimiter), + ) + } + + if pullCtx.PlatformMatcher == nil { + if len(pullCtx.Platforms) > 1 { + return nil, errors.New("cannot pull multiplatform image locally, try Fetch") + } else if len(pullCtx.Platforms) == 0 { + pullCtx.PlatformMatcher = c.platform + } else { + p, err := platforms.Parse(pullCtx.Platforms[0]) + if err != nil { + return nil, fmt.Errorf("invalid platform %s: %w", pullCtx.Platforms[0], err) + } + + pullCtx.PlatformMatcher = platforms.Only(p) + } + } + + span.SetAttributes( + tracing.Attribute("image.ref", ref), + tracing.Attribute("unpack", pullCtx.Unpack), + tracing.Attribute("max.concurrent.downloads", pullCtx.MaxConcurrentDownloads), + tracing.Attribute("concurrent.layer.fetch.buffer", pullCtx.ConcurrentLayerFetchBuffer), + tracing.Attribute("platforms.count", len(pullCtx.Platforms)), + ) + + ctx, done, err := c.WithLease(ctx) + if err != nil { + return nil, err + } + defer done(ctx) + + var unpacker *unpack.Unpacker + + if pullCtx.Unpack { + snapshotterName, err := c.resolveSnapshotterName(ctx, pullCtx.Snapshotter) + if err != nil { + return nil, fmt.Errorf("unable to resolve snapshotter: %w", err) + } + span.SetAttributes(tracing.Attribute("snapshotter.name", snapshotterName)) + + snCapabilities, err := c.GetSnapshotterCapabilities(ctx, snapshotterName) + if err != nil { + return nil, fmt.Errorf("unable to get snapshotter capabilities: %w", err) + } + + var uconfig UnpackConfig + for _, opt := range pullCtx.UnpackOpts { + if err := opt(ctx, &uconfig); err != nil { + return nil, err + } + } + var platformMatcher platforms.Matcher + if !uconfig.CheckPlatformSupported { + platformMatcher = platforms.All + } + + // Check client Unpack config + platform := unpack.Platform{ + Platform: platformMatcher, + SnapshotterKey: snapshotterName, + Snapshotter: c.SnapshotService(snapshotterName), + SnapshotOpts: append(pullCtx.SnapshotterOpts, uconfig.SnapshotOpts...), + Applier: c.DiffService(), + ApplyOpts: uconfig.ApplyOpts, + SnapshotterCapabilities: snCapabilities, + } + uopts := []unpack.UnpackerOpt{unpack.WithUnpackPlatform(platform)} + if uconfig.DuplicationSuppressor != nil { + uopts = append(uopts, unpack.WithDuplicationSuppressor(uconfig.DuplicationSuppressor)) + } + if uconfig.Limiter != nil { + uopts = append(uopts, unpack.WithUnpackLimiter(uconfig.Limiter)) + } + unpacker, err = unpack.NewUnpacker(ctx, c.ContentStore(), uopts...) + if err != nil { + return nil, fmt.Errorf("unable to initialize unpacker: %w", err) + } + defer func() { + if _, err := unpacker.Wait(); err != nil { + if retErr == nil { + retErr = fmt.Errorf("unpack: %w", err) + } + } + }() + wrapper := pullCtx.HandlerWrapper + pullCtx.HandlerWrapper = func(h images.Handler) images.Handler { + if wrapper == nil { + return unpacker.Unpack(h) + } + return unpacker.Unpack(wrapper(h)) + } + } + + img, err := c.fetch(ctx, pullCtx, ref, 1) + if err != nil { + return nil, err + } + + // NOTE(fuweid): unpacker defers blobs download. before create image + // record in ImageService, should wait for unpacking(including blobs + // download). + var ur unpack.Result + if unpacker != nil { + _, unpackSpan := tracing.StartSpan(ctx, tracing.Name(pullSpanPrefix, "UnpackWait")) + if ur, err = unpacker.Wait(); err != nil { + unpackSpan.SetStatus(err) + unpackSpan.End() + return nil, err + } + unpackSpan.End() + } + + img, err = c.createNewImage(ctx, img) + if err != nil { + return nil, err + } + + i := NewImageWithPlatform(c, img, pullCtx.PlatformMatcher) + span.SetAttributes(tracing.Attribute("image.ref", i.Name())) + + if unpacker != nil && ur.Unpacks == 0 { + // Unpack was tried previously but nothing was unpacked + // This was at least required for schema 1 image. + if err := i.Unpack(ctx, pullCtx.Snapshotter, pullCtx.UnpackOpts...); err != nil { + return nil, fmt.Errorf("failed to unpack image on snapshotter %s: %w", pullCtx.Snapshotter, err) + } + } + + return i, nil +} + +func (c *Client) fetch(ctx context.Context, rCtx *RemoteContext, ref string, limit int) (images.Image, error) { + ctx, span := tracing.StartSpan(ctx, tracing.Name(pullSpanPrefix, "fetch")) + defer span.End() + store := c.ContentStore() + name, desc, err := rCtx.Resolver.Resolve(ctx, ref) + if err != nil { + return images.Image{}, fmt.Errorf("failed to resolve reference %q: %w", ref, err) + } + + fetcher, err := rCtx.Resolver.Fetcher(ctx, name) + if err != nil { + return images.Image{}, fmt.Errorf("failed to get fetcher for %q: %w", name, err) + } + + var ( + handler images.Handler + + isConvertible bool + converterFunc func(context.Context, ocispec.Descriptor) (ocispec.Descriptor, error) + limiter *semaphore.Weighted + ) + if desc.MediaType == images.MediaTypeDockerSchema1Manifest { + return images.Image{}, fmt.Errorf("%w: media type %q is no longer supported since containerd v2.1, please rebuild the image as %q or %q", + errdefs.ErrNotImplemented, + images.MediaTypeDockerSchema1Manifest, images.MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest) + } + // Get all the children for a descriptor + childrenHandler := images.ChildrenHandler(store) + if rCtx.ReferrersProvider != nil { + childrenHandler = images.SetReferrers(rCtx.ReferrersProvider, childrenHandler) + } + // Set any children labels for that content + childrenHandler = images.SetChildrenMappedLabels(store, childrenHandler, rCtx.ChildLabelMap) + if rCtx.AllMetadata { + // Filter manifests by platforms but allow to handle manifest + // and configuration for not-target platforms + childrenHandler = remotes.FilterManifestByPlatformHandler(childrenHandler, rCtx.PlatformMatcher) + } else { + // Filter children by platforms if specified. + childrenHandler = images.FilterPlatforms(childrenHandler, rCtx.PlatformMatcher) + } + // Sort and limit manifests if a finite number is needed + if limit > 0 { + childrenHandler = images.LimitManifests(childrenHandler, rCtx.PlatformMatcher, limit) + } + + // set isConvertible to true if there is application/octet-stream media type + convertibleHandler := images.HandlerFunc( + func(_ context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) { + if desc.MediaType == docker.LegacyConfigMediaType { + isConvertible = true + } + + return []ocispec.Descriptor{}, nil + }, + ) + + appendDistSrcLabelHandler, err := docker.AppendDistributionSourceLabel(store, ref) + if err != nil { + return images.Image{}, err + } + + handlers := append(rCtx.BaseHandlers, + remotes.FetchHandler(store, fetcher), + convertibleHandler, + childrenHandler, + appendDistSrcLabelHandler, + ) + + handler = images.Handlers(handlers...) + + converterFunc = func(ctx context.Context, desc ocispec.Descriptor) (ocispec.Descriptor, error) { + return docker.ConvertManifest(ctx, store, desc) + } + + if rCtx.HandlerWrapper != nil { + handler = rCtx.HandlerWrapper(handler) + } + + if err := images.Dispatch(ctx, handler, limiter, desc); err != nil { + return images.Image{}, err + } + + if isConvertible { + if desc, err = converterFunc(ctx, desc); err != nil { + return images.Image{}, err + } + } + + return images.Image{ + Name: name, + Target: desc, + Labels: rCtx.Labels, + }, nil +} + +func (c *Client) createNewImage(ctx context.Context, img images.Image) (images.Image, error) { + ctx, span := tracing.StartSpan(ctx, tracing.Name(pullSpanPrefix, "pull.createNewImage")) + defer span.End() + is := c.ImageService() + for { + if created, err := is.Create(ctx, img); err != nil { + if !errdefs.IsAlreadyExists(err) { + return images.Image{}, err + } + + updated, err := is.Update(ctx, img) + if err != nil { + // if image was removed, try create again + if errdefs.IsNotFound(err) { + continue + } + return images.Image{}, err + } + + img = updated + } else { + img = created + } + + return img, nil + } +} diff --git a/client/sandbox.go b/client/sandbox.go new file mode 100644 index 000000000000..75a51a8791cc --- /dev/null +++ b/client/sandbox.go @@ -0,0 +1,245 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "errors" + "fmt" + "time" + + "github.com/containerd/errdefs" + "github.com/containerd/typeurl/v2" + + "github.com/containerd/containerd/v2/core/containers" + api "github.com/containerd/containerd/v2/core/sandbox" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/containerd/containerd/v2/pkg/protobuf/types" +) + +// Sandbox is a high level client to containerd's sandboxes. +type Sandbox interface { + // ID is a sandbox identifier + ID() string + // Metadata returns metadata of the sandbox + Metadata() api.Sandbox + // NewContainer creates new container that will belong to this sandbox + NewContainer(ctx context.Context, id string, opts ...NewContainerOpts) (Container, error) + // Labels returns the labels set on the sandbox + Labels(ctx context.Context) (map[string]string, error) + // Start starts new sandbox instance + Start(ctx context.Context) error + // Stop sends stop request to the shim instance. + Stop(ctx context.Context) error + // Wait blocks until sandbox process exits. + Wait(ctx context.Context) (<-chan ExitStatus, error) + // Shutdown removes sandbox from the metadata store and shutdowns shim instance. + Shutdown(ctx context.Context) error +} + +type sandboxClient struct { + client *Client + metadata api.Sandbox +} + +func (s *sandboxClient) ID() string { + return s.metadata.ID +} + +func (s *sandboxClient) Metadata() api.Sandbox { + return s.metadata +} + +func (s *sandboxClient) NewContainer(ctx context.Context, id string, opts ...NewContainerOpts) (Container, error) { + return s.client.NewContainer(ctx, id, append(opts, WithSandbox(s.ID()))...) +} + +func (s *sandboxClient) Labels(ctx context.Context) (map[string]string, error) { + sandbox, err := s.client.SandboxStore().Get(ctx, s.ID()) + if err != nil { + return nil, err + } + + return sandbox.Labels, nil +} + +func (s *sandboxClient) Start(ctx context.Context) error { + _, err := s.client.SandboxController(s.metadata.Sandboxer).Start(ctx, s.ID()) + if err != nil { + return err + } + + return nil +} + +func (s *sandboxClient) Wait(ctx context.Context) (<-chan ExitStatus, error) { + c := make(chan ExitStatus, 1) + go func() { + defer close(c) + + exitStatus, err := s.client.SandboxController(s.metadata.Sandboxer).Wait(ctx, s.ID()) + if err != nil { + c <- ExitStatus{ + code: UnknownExitStatus, + err: err, + } + return + } + + c <- ExitStatus{ + code: exitStatus.ExitStatus, + exitedAt: exitStatus.ExitedAt, + } + }() + + return c, nil +} + +func (s *sandboxClient) Stop(ctx context.Context) error { + return s.client.SandboxController(s.metadata.Sandboxer).Stop(ctx, s.ID()) +} + +func (s *sandboxClient) Shutdown(ctx context.Context) error { + if err := s.client.SandboxController(s.metadata.Sandboxer).Shutdown(ctx, s.ID()); err != nil && !errdefs.IsNotFound(err) { + return fmt.Errorf("failed to shutdown sandbox: %w", err) + } + + if err := s.client.SandboxStore().Delete(ctx, s.ID()); err != nil && !errdefs.IsNotFound(err) { + return fmt.Errorf("failed to delete sandbox from store: %w", err) + } + + return nil +} + +// NewSandbox creates new sandbox client +func (c *Client) NewSandbox(ctx context.Context, sandboxID string, opts ...NewSandboxOpts) (Sandbox, error) { + if sandboxID == "" { + return nil, errors.New("sandbox ID must be specified") + } + + sandboxer, err := c.defaultSandboxer(ctx) + if err != nil { + return nil, fmt.Errorf("failed to get default sandboxer: %w", err) + } + newSandbox := api.Sandbox{ + ID: sandboxID, + CreatedAt: time.Now().UTC(), + UpdatedAt: time.Now().UTC(), + Sandboxer: sandboxer, + } + + for _, opt := range opts { + if err := opt(ctx, c, &newSandbox); err != nil { + return nil, err + } + } + + metadata, err := c.SandboxStore().Create(ctx, newSandbox) + if err != nil { + return nil, err + } + + if err := c.SandboxController(sandboxer).Create(ctx, newSandbox); err != nil { + return nil, fmt.Errorf("failed to create sandbox with %s sandboxer: %w", sandboxer, err) + } + + return &sandboxClient{ + client: c, + metadata: metadata, + }, nil +} + +// LoadSandbox laods existing sandbox metadata object using the id +func (c *Client) LoadSandbox(ctx context.Context, id string) (Sandbox, error) { + sandbox, err := c.SandboxStore().Get(ctx, id) + if err != nil { + return nil, err + } + + return &sandboxClient{ + client: c, + metadata: sandbox, + }, nil +} + +// NewSandboxOpts is a sandbox options and extensions to be provided by client +type NewSandboxOpts func(ctx context.Context, client *Client, sandbox *api.Sandbox) error + +// WithSandboxRuntime allows a user to specify the runtime to be used to run a sandbox +func WithSandboxRuntime(name string, options interface{}) NewSandboxOpts { + return func(ctx context.Context, client *Client, s *api.Sandbox) error { + if options == nil { + options = &types.Empty{} + } + + opts, err := typeurl.MarshalAny(options) + if err != nil { + return fmt.Errorf("failed to marshal sandbox runtime options: %w", err) + } + + s.Runtime = api.RuntimeOpts{ + Name: name, + Options: opts, + } + + return nil + } +} + +// WithSandboxSpec will provide the sandbox runtime spec +func WithSandboxSpec(s *oci.Spec, opts ...oci.SpecOpts) NewSandboxOpts { + return func(ctx context.Context, client *Client, sandbox *api.Sandbox) error { + c := &containers.Container{ID: sandbox.ID} + + if err := oci.ApplyOpts(ctx, client, c, s, opts...); err != nil { + return err + } + + spec, err := typeurl.MarshalAny(s) + if err != nil { + return fmt.Errorf("failed to marshal spec: %w", err) + } + + sandbox.Spec = spec + return nil + } +} + +// WithSandboxExtension attaches an extension to sandbox +func WithSandboxExtension(name string, extension interface{}) NewSandboxOpts { + return func(ctx context.Context, client *Client, s *api.Sandbox) error { + if s.Extensions == nil { + s.Extensions = make(map[string]typeurl.Any) + } + + ext, err := typeurl.MarshalAny(extension) + if err != nil { + return fmt.Errorf("failed to marshal sandbox extension: %w", err) + } + + s.Extensions[name] = ext + return nil + } +} + +// WithSandboxLabels attaches map of labels to sandbox +func WithSandboxLabels(labels map[string]string) NewSandboxOpts { + return func(ctx context.Context, client *Client, sandbox *api.Sandbox) error { + sandbox.Labels = labels + return nil + } +} diff --git a/client/services.go b/client/services.go new file mode 100644 index 000000000000..5218e7f74b90 --- /dev/null +++ b/client/services.go @@ -0,0 +1,257 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "fmt" + + containersapi "github.com/containerd/containerd/api/services/containers/v1" + "github.com/containerd/containerd/api/services/diff/v1" + imagesapi "github.com/containerd/containerd/api/services/images/v1" + namespacesapi "github.com/containerd/containerd/api/services/namespaces/v1" + "github.com/containerd/containerd/api/services/tasks/v1" + "github.com/containerd/plugin" + + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/introspection" + "github.com/containerd/containerd/v2/core/leases" + "github.com/containerd/containerd/v2/core/mount" + "github.com/containerd/containerd/v2/core/sandbox" + "github.com/containerd/containerd/v2/core/snapshots" + "github.com/containerd/containerd/v2/core/transfer" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/plugins" + srv "github.com/containerd/containerd/v2/plugins/services" +) + +type services struct { + contentStore content.Store + imageStore images.Store + containerStore containers.Store + namespaceStore namespaces.Store + snapshotters map[string]snapshots.Snapshotter + taskService tasks.TasksClient + diffService DiffService + eventService EventService + leasesService leases.Manager + introspectionService introspection.Service + sandboxStore sandbox.Store + sandboxers map[string]sandbox.Controller + transferService transfer.Transferrer + mountManager mount.Manager +} + +// ServicesOpt allows callers to set options on the services +type ServicesOpt func(c *services) + +// WithContentStore sets the content store. +func WithContentStore(contentStore content.Store) ServicesOpt { + return func(s *services) { + s.contentStore = contentStore + } +} + +// WithImageClient sets the image service to use using an images client. +func WithImageClient(imageService imagesapi.ImagesClient) ServicesOpt { + return func(s *services) { + s.imageStore = NewImageStoreFromClient(imageService) + } +} + +// WithImageStore sets the image store. +func WithImageStore(imageStore images.Store) ServicesOpt { + return func(s *services) { + s.imageStore = imageStore + } +} + +// WithSnapshotters sets the snapshotters. +func WithSnapshotters(snapshotters map[string]snapshots.Snapshotter) ServicesOpt { + return func(s *services) { + s.snapshotters = make(map[string]snapshots.Snapshotter) + for n, sn := range snapshotters { + s.snapshotters[n] = sn + } + } +} + +// WithContainerClient sets the container service to use using a containers client. +func WithContainerClient(containerService containersapi.ContainersClient) ServicesOpt { + return func(s *services) { + s.containerStore = NewRemoteContainerStore(containerService) + } +} + +// WithContainerStore sets the container store. +func WithContainerStore(containerStore containers.Store) ServicesOpt { + return func(s *services) { + s.containerStore = containerStore + } +} + +// WithTaskClient sets the task service to use from a tasks client. +func WithTaskClient(taskService tasks.TasksClient) ServicesOpt { + return func(s *services) { + s.taskService = taskService + } +} + +// WithDiffClient sets the diff service to use from a diff client. +func WithDiffClient(diffService diff.DiffClient) ServicesOpt { + return func(s *services) { + s.diffService = NewDiffServiceFromClient(diffService) + } +} + +// WithDiffService sets the diff store. +func WithDiffService(diffService DiffService) ServicesOpt { + return func(s *services) { + s.diffService = diffService + } +} + +// WithEventService sets the event service. +func WithEventService(eventService EventService) ServicesOpt { + return func(s *services) { + s.eventService = eventService + } +} + +// WithNamespaceClient sets the namespace service using a namespaces client. +func WithNamespaceClient(namespaceService namespacesapi.NamespacesClient) ServicesOpt { + return func(s *services) { + s.namespaceStore = NewNamespaceStoreFromClient(namespaceService) + } +} + +// WithNamespaceService sets the namespace service. +func WithNamespaceService(namespaceService namespaces.Store) ServicesOpt { + return func(s *services) { + s.namespaceStore = namespaceService + } +} + +// WithLeasesService sets the lease service. +func WithLeasesService(leasesService leases.Manager) ServicesOpt { + return func(s *services) { + s.leasesService = leasesService + } +} + +// WithIntrospectionService sets the introspection service. +func WithIntrospectionService(in introspection.Service) ServicesOpt { + return func(s *services) { + s.introspectionService = in + } +} + +// WithSandboxStore sets the sandbox store. +func WithSandboxStore(client sandbox.Store) ServicesOpt { + return func(s *services) { + s.sandboxStore = client + } +} + +// WithTransferService sets the transfer service. +func WithTransferService(tr transfer.Transferrer) ServicesOpt { + return func(s *services) { + s.transferService = tr + } +} + +// WithMountManager sets the mount manager. +func WithMountManager(mm mount.Manager) ServicesOpt { + return func(s *services) { + s.mountManager = mm + } +} + +// WithInMemoryServices is suitable for cases when there is need to use containerd's client from +// another (in-memory) containerd plugin (such as CRI). +func WithInMemoryServices(ic *plugin.InitContext) Opt { + return func(c *clientOpts) error { + var opts []ServicesOpt + for t, fn := range map[plugin.Type]func(interface{}) ServicesOpt{ + plugins.EventPlugin: func(i interface{}) ServicesOpt { + return WithEventService(i.(EventService)) + }, + plugins.LeasePlugin: func(i interface{}) ServicesOpt { + return WithLeasesService(i.(leases.Manager)) + }, + plugins.SandboxStorePlugin: func(i interface{}) ServicesOpt { + return WithSandboxStore(i.(sandbox.Store)) + }, + plugins.TransferPlugin: func(i interface{}) ServicesOpt { + return WithTransferService(i.(transfer.Transferrer)) + }, + plugins.MountManagerPlugin: func(i interface{}) ServicesOpt { + return WithMountManager(i.(mount.Manager)) + }, + } { + i, err := ic.GetSingle(t) + if err != nil { + return fmt.Errorf("failed to get %q plugin: %w", t, err) + } + opts = append(opts, fn(i)) + } + + plugins, err := ic.GetByType(plugins.ServicePlugin) + if err != nil { + return fmt.Errorf("failed to get service plugin: %w", err) + } + for s, fn := range map[string]func(interface{}) ServicesOpt{ + srv.ContentService: func(s interface{}) ServicesOpt { + return WithContentStore(s.(content.Store)) + }, + srv.ImagesService: func(s interface{}) ServicesOpt { + return WithImageClient(s.(imagesapi.ImagesClient)) + }, + srv.SnapshotsService: func(s interface{}) ServicesOpt { + return WithSnapshotters(s.(map[string]snapshots.Snapshotter)) + }, + srv.ContainersService: func(s interface{}) ServicesOpt { + return WithContainerClient(s.(containersapi.ContainersClient)) + }, + srv.TasksService: func(s interface{}) ServicesOpt { + return WithTaskClient(s.(tasks.TasksClient)) + }, + srv.DiffService: func(s interface{}) ServicesOpt { + return WithDiffClient(s.(diff.DiffClient)) + }, + srv.NamespacesService: func(s interface{}) ServicesOpt { + return WithNamespaceClient(s.(namespacesapi.NamespacesClient)) + }, + srv.IntrospectionService: func(s interface{}) ServicesOpt { + return WithIntrospectionService(s.(introspection.Service)) + }, + } { + i := plugins[s] + if i == nil { + return fmt.Errorf("service %q not found", s) + } + opts = append(opts, fn(i)) + } + + c.services = &services{} + for _, o := range opts { + o(c.services) + } + return nil + } +} diff --git a/client/signals.go b/client/signals.go new file mode 100644 index 000000000000..9488b22996f3 --- /dev/null +++ b/client/signals.go @@ -0,0 +1,83 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "encoding/json" + "fmt" + "syscall" + + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/images" + "github.com/moby/sys/signal" + v1 "github.com/opencontainers/image-spec/specs-go/v1" +) + +// StopSignalLabel is a well-known containerd label for storing the stop +// signal specified in the OCI image config +const StopSignalLabel = "io.containerd.image.config.stop-signal" + +// GetStopSignal retrieves the container stop signal, specified by the +// well-known containerd label (StopSignalLabel) +func GetStopSignal(ctx context.Context, container Container, defaultSignal syscall.Signal) (syscall.Signal, error) { + labels, err := container.Labels(ctx) + if err != nil { + return -1, err + } + + if stopSignal, ok := labels[StopSignalLabel]; ok { + return signal.ParseSignal(stopSignal) + } + + return defaultSignal, nil +} + +// GetOCIStopSignal retrieves the stop signal specified in the OCI image config +func GetOCIStopSignal(ctx context.Context, image Image, defaultSignal string) (string, error) { + _, err := signal.ParseSignal(defaultSignal) + if err != nil { + return "", err + } + ic, err := image.Config(ctx) + if err != nil { + return "", err + } + if !images.IsConfigType(ic.MediaType) { + return "", fmt.Errorf("unknown image config media type %s", ic.MediaType) + } + + var ( + ociimage v1.Image + config v1.ImageConfig + ) + p, err := content.ReadBlob(ctx, image.ContentStore(), ic) + if err != nil { + return "", err + } + + if err = json.Unmarshal(p, &ociimage); err != nil { + return "", err + } + config = ociimage.Config + + if config.StopSignal == "" { + return defaultSignal, nil + } + + return config.StopSignal, nil +} diff --git a/client/snapshotter_opts_unix.go b/client/snapshotter_opts_unix.go new file mode 100644 index 000000000000..4e7cca6e858f --- /dev/null +++ b/client/snapshotter_opts_unix.go @@ -0,0 +1,162 @@ +//go:build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "encoding/json" + "fmt" + "slices" + + "github.com/containerd/containerd/v2/core/snapshots" + "github.com/containerd/containerd/v2/internal/userns" + "github.com/opencontainers/go-digest" + "github.com/opencontainers/runtime-spec/specs-go" +) + +const ( + capaRemapIDs = "remap-ids" + capaOnlyRemapIDs = "only-remap-ids" +) + +// WithRemapperLabels creates the labels used by any supporting snapshotter +// to shift the filesystem ownership (user namespace mapping) automatically; currently +// supported by the fuse-overlayfs and overlay snapshotters +func WithRemapperLabels(ctrUID, hostUID, ctrGID, hostGID, length uint32) snapshots.Opt { + uidMap := []specs.LinuxIDMapping{{ContainerID: ctrUID, HostID: hostUID, Size: length}} + gidMap := []specs.LinuxIDMapping{{ContainerID: ctrGID, HostID: hostGID, Size: length}} + return WithUserNSRemapperLabels(uidMap, gidMap) +} + +// WithUserNSRemapperLabels creates the labels used by any supporting snapshotter +// to shift the filesystem ownership (user namespace mapping) automatically; currently +// supported by the fuse-overlayfs and overlay snapshotters +func WithUserNSRemapperLabels(uidmaps, gidmaps []specs.LinuxIDMapping) snapshots.Opt { + idMap := userns.IDMap{ + UidMap: uidmaps, + GidMap: gidmaps, + } + uidmapLabel, gidmapLabel := idMap.Marshal() + return snapshots.WithLabels(map[string]string{ + snapshots.LabelSnapshotUIDMapping: uidmapLabel, + snapshots.LabelSnapshotGIDMapping: gidmapLabel, + }) +} + +func resolveSnapshotOptions(ctx context.Context, client *Client, snapshotterName string, snapshotter snapshots.Snapshotter, parent string, opts ...snapshots.Opt) (string, error) { + capabs, err := client.GetSnapshotterCapabilities(ctx, snapshotterName) + if err != nil { + return "", err + } + + for _, capab := range capabs { + if capab == capaRemapIDs { + // Snapshotter supports ID remapping, we don't need to do anything. + return parent, nil + } + } + + var local snapshots.Info + for _, opt := range opts { + opt(&local) + } + + needsRemap := false + var uidMapLabel, gidMapLabel string + + if value, ok := local.Labels[snapshots.LabelSnapshotUIDMapping]; ok { + needsRemap = true + uidMapLabel = value + } + if value, ok := local.Labels[snapshots.LabelSnapshotGIDMapping]; ok { + needsRemap = true + gidMapLabel = value + } + + if !needsRemap { + return parent, nil + } + + capaOnlyRemap := false + for _, capa := range capabs { + if capa == capaOnlyRemapIDs { + capaOnlyRemap = true + } + } + + if capaOnlyRemap { + return "", fmt.Errorf("snapshotter %q doesn't support idmap mounts on this host, configure `slow_chown` to allow a slower and expensive fallback", snapshotterName) + } + + rsn := remappedSnapshot{Parent: parent} + if err = rsn.IDMap.Unmarshal(uidMapLabel, gidMapLabel); err != nil { + return "", fmt.Errorf("failed to unmarshal uid/gid map snapshotter labels: %w", err) + } + + if _, err := rsn.IDMap.RootPair(); err != nil { + return "", fmt.Errorf("container UID/GID mapping entries of 0 are required but not found") + } + + usernsID, err := rsn.ID() + if err != nil { + return "", fmt.Errorf("failed to remap snapshot: %w", err) + } + + if _, err := snapshotter.Stat(ctx, usernsID); err == nil { + return usernsID, nil + } + mounts, err := snapshotter.Prepare(ctx, usernsID+"-remap", parent) + if err != nil { + return "", err + } + + if err := remapRootFS(ctx, mounts, rsn.IDMap); err != nil { + snapshotter.Remove(ctx, usernsID+"-remap") + return "", err + } + if err := snapshotter.Commit(ctx, usernsID, usernsID+"-remap"); err != nil { + return "", err + } + + return usernsID, nil +} + +type remappedSnapshot struct { + Parent string `json:"Parent"` + IDMap userns.IDMap `json:"IDMap"` +} + +func (s *remappedSnapshot) ID() (string, error) { + compare := func(a, b specs.LinuxIDMapping) int { + if a.ContainerID < b.ContainerID { + return -1 + } else if a.ContainerID == b.ContainerID { + return 0 + } + return 1 + } + slices.SortStableFunc(s.IDMap.UidMap, compare) + slices.SortStableFunc(s.IDMap.GidMap, compare) + + buf, err := json.Marshal(s) + if err != nil { + return "", err + } + return digest.FromBytes(buf).String(), nil +} diff --git a/client/snapshotter_opts_windows.go b/client/snapshotter_opts_windows.go new file mode 100644 index 000000000000..ab78663c5157 --- /dev/null +++ b/client/snapshotter_opts_windows.go @@ -0,0 +1,27 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + + "github.com/containerd/containerd/v2/core/snapshots" +) + +func resolveSnapshotOptions(ctx context.Context, client *Client, snapshotterName string, snapshotter snapshots.Snapshotter, parent string, opts ...snapshots.Opt) (string, error) { + return parent, nil +} diff --git a/client/task.go b/client/task.go new file mode 100644 index 000000000000..5749ac99c076 --- /dev/null +++ b/client/task.go @@ -0,0 +1,811 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "errors" + "fmt" + "io" + goruntime "runtime" + "strings" + "syscall" + "time" + + "github.com/containerd/containerd/api/services/tasks/v1" + "github.com/containerd/containerd/api/types" + "github.com/containerd/containerd/api/types/runc/options" + "github.com/containerd/errdefs" + "github.com/containerd/errdefs/pkg/errgrpc" + "github.com/containerd/typeurl/v2" + digest "github.com/opencontainers/go-digest" + is "github.com/opencontainers/image-spec/specs-go" + v1 "github.com/opencontainers/image-spec/specs-go/v1" + specs "github.com/opencontainers/runtime-spec/specs-go" + + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/diff" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/mount" + "github.com/containerd/containerd/v2/pkg/cio" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/containerd/containerd/v2/pkg/protobuf" + google_protobuf "github.com/containerd/containerd/v2/pkg/protobuf/types" + "github.com/containerd/containerd/v2/pkg/rootfs" + "github.com/containerd/containerd/v2/pkg/tracing" + "github.com/containerd/containerd/v2/plugins" +) + +// UnknownExitStatus is returned when containerd is unable to +// determine the exit status of a process. This can happen if the process never starts +// or if an error was encountered when obtaining the exit status, it is set to 255. +const UnknownExitStatus = 255 + +const ( + checkpointDateFormat = "01-02-2006-15:04:05" + checkpointNameFormat = "containerd.io/checkpoint/%s:%s" +) + +// Status returns process status and exit information +type Status struct { + // Status of the process + Status ProcessStatus + // ExitStatus returned by the process + ExitStatus uint32 + // ExitedTime is the time at which the process died + ExitTime time.Time +} + +// ProcessInfo provides platform specific process information +type ProcessInfo struct { + // Pid is the process ID + Pid uint32 + // Info includes additional process information + // Info varies by platform + Info *google_protobuf.Any +} + +// ProcessStatus returns a human readable status for the Process representing its current status +type ProcessStatus string + +const ( + // Running indicates the process is currently executing + Running ProcessStatus = "running" + // Created indicates the process has been created within containerd but the + // user's defined process has not started + Created ProcessStatus = "created" + // Stopped indicates that the process has ran and exited + Stopped ProcessStatus = "stopped" + // Paused indicates that the process is currently paused + Paused ProcessStatus = "paused" + // Pausing indicates that the process is currently switching from a + // running state into a paused state + Pausing ProcessStatus = "pausing" + // Unknown indicates that we could not determine the status from the runtime + Unknown ProcessStatus = "unknown" +) + +// IOCloseInfo allows specific io pipes to be closed on a process +type IOCloseInfo struct { + Stdin bool +} + +// IOCloserOpts allows the caller to set specific pipes as closed on a process +type IOCloserOpts func(*IOCloseInfo) + +// WithStdinCloser closes the stdin of a process +func WithStdinCloser(r *IOCloseInfo) { + r.Stdin = true +} + +// CheckpointTaskInfo allows specific checkpoint information to be set for the task +type CheckpointTaskInfo struct { + Name string + // ParentCheckpoint is the digest of a parent checkpoint + ParentCheckpoint digest.Digest + // Options hold runtime specific settings for checkpointing a task + Options interface{} + + runtime string +} + +// Runtime name for the container +func (i *CheckpointTaskInfo) Runtime() string { + return i.runtime +} + +// CheckpointTaskOpts allows the caller to set checkpoint options +type CheckpointTaskOpts func(*CheckpointTaskInfo) error + +// TaskInfo sets options for task creation +type TaskInfo struct { + // Checkpoint is the Descriptor for an existing checkpoint that can be used + // to restore a task's runtime and memory state + Checkpoint *types.Descriptor + // RootFS is a list of mounts to use as the task's root filesystem + RootFS []mount.Mount + // Options hold runtime specific settings for task creation + Options interface{} + // RuntimePath is an absolute path that can be used to overwrite path + // to a shim runtime binary. + RuntimePath string + + // runtime is the runtime name for the container, and cannot be changed. + runtime string + + // runtimeOptions is the runtime options for the container, and when task options are set, + // they will be based on the runtimeOptions. + // https://github.com/containerd/containerd/issues/11568 + runtimeOptions typeurl.Any +} + +// Runtime name for the container +func (i *TaskInfo) Runtime() string { + return i.runtime +} + +// getRuncOptions returns a reference to the runtime options for use by the task. +// If the set of options is not set by the opts passed into the NewTask creation +// this function first attempts to initialize the runtime options with a copy of the runtimeOptions, +// otherwise an empty set of options is assigned and returned +func (i *TaskInfo) getRuncOptions() (*options.Options, error) { + if i.Options != nil { + opts, ok := i.Options.(*options.Options) + if !ok { + return nil, errors.New("invalid runtime v2 options format") + } + return opts, nil + } + + opts := &options.Options{} + if i.runtimeOptions != nil && i.runtimeOptions.GetValue() != nil { + if err := typeurl.UnmarshalTo(i.runtimeOptions, opts); err != nil { + return nil, fmt.Errorf("failed to get runtime v2 options: %w", err) + } + } + i.Options = opts + return opts, nil +} + +// Task is the executable object within containerd +type Task interface { + Process + + // Pause suspends the execution of the task + Pause(context.Context) error + // Resume the execution of the task + Resume(context.Context) error + // Exec creates a new process inside the task + Exec(context.Context, string, *specs.Process, cio.Creator) (Process, error) + // Pids returns a list of system specific process ids inside the task + Pids(context.Context) ([]ProcessInfo, error) + // Checkpoint serializes the runtime and memory information of a task into an + // OCI Index that can be pushed and pulled from a remote resource. + // + // Additional software like CRIU maybe required to checkpoint and restore tasks + // NOTE: Checkpoint supports to dump task information to a directory, in this way, + // an empty OCI Index will be returned. + Checkpoint(context.Context, ...CheckpointTaskOpts) (Image, error) + // Update modifies executing tasks with updated settings + Update(context.Context, ...UpdateTaskOpts) error + // LoadProcess loads a previously created exec'd process + LoadProcess(context.Context, string, cio.Attach) (Process, error) + // Metrics returns task metrics for runtime specific metrics + // + // The metric types are generic to containerd and change depending on the runtime + // For the built in Linux runtime, github.com/containerd/cgroups.Metrics + // are returned in protobuf format + Metrics(context.Context) (*types.Metric, error) + // Spec returns the current OCI specification for the task + Spec(context.Context) (*oci.Spec, error) +} + +var _ = (Task)(&task{}) + +type task struct { + client *Client + c Container + + io cio.IO + id string + pid uint32 +} + +// Spec returns the current OCI specification for the task +func (t *task) Spec(ctx context.Context) (*oci.Spec, error) { + return t.c.Spec(ctx) +} + +// ID of the task +func (t *task) ID() string { + return t.id +} + +// Pid returns the pid or process id for the task +func (t *task) Pid() uint32 { + return t.pid +} + +func (t *task) Start(ctx context.Context) error { + ctx, span := tracing.StartSpan(ctx, tracing.Name("client.task", "Start"), + tracing.WithAttribute("task.id", t.ID()), + tracing.WithNamespace(ctx), + ) + defer span.End() + + r, err := t.client.TaskService().Start(ctx, &tasks.StartRequest{ + ContainerID: t.id, + }) + if err != nil { + if t.io != nil { + t.io.Cancel() + t.io.Close() + } + return errgrpc.ToNative(err) + } + span.SetAttributes(tracing.Attribute("task.pid", r.Pid)) + t.pid = r.Pid + return nil +} + +func (t *task) Kill(ctx context.Context, s syscall.Signal, opts ...KillOpts) error { + ctx, span := tracing.StartSpan(ctx, tracing.Name("client.task", "Kill"), + tracing.WithAttribute("task.id", t.ID()), + tracing.WithAttribute("task.pid", int(t.Pid())), + tracing.WithNamespace(ctx), + ) + defer span.End() + + var i KillInfo + for _, o := range opts { + if err := o(ctx, &i); err != nil { + return err + } + } + + span.SetAttributes( + tracing.Attribute("task.exec.id", i.ExecID), + tracing.Attribute("task.exec.killall", i.All), + ) + _, err := t.client.TaskService().Kill(ctx, &tasks.KillRequest{ + Signal: uint32(s), + ContainerID: t.id, + ExecID: i.ExecID, + All: i.All, + }) + if err != nil { + return errgrpc.ToNative(err) + } + return nil +} + +func (t *task) Pause(ctx context.Context) error { + ctx, span := tracing.StartSpan(ctx, "task.Pause", + tracing.WithAttribute("task.id", t.ID()), + ) + defer span.End() + _, err := t.client.TaskService().Pause(ctx, &tasks.PauseTaskRequest{ + ContainerID: t.id, + }) + return errgrpc.ToNative(err) +} + +func (t *task) Resume(ctx context.Context) error { + ctx, span := tracing.StartSpan(ctx, "task.Resume", + tracing.WithAttribute("task.id", t.ID()), + ) + defer span.End() + _, err := t.client.TaskService().Resume(ctx, &tasks.ResumeTaskRequest{ + ContainerID: t.id, + }) + return errgrpc.ToNative(err) +} + +func (t *task) Status(ctx context.Context) (Status, error) { + r, err := t.client.TaskService().Get(ctx, &tasks.GetRequest{ + ContainerID: t.id, + }) + if err != nil { + return Status{}, errgrpc.ToNative(err) + } + status := ProcessStatus(strings.ToLower(r.Process.Status.String())) + exitStatus := r.Process.ExitStatus + exitTime := protobuf.FromTimestamp(r.Process.ExitedAt) + + return Status{ + Status: status, + ExitStatus: exitStatus, + ExitTime: exitTime, + }, nil +} + +func (t *task) Wait(ctx context.Context) (<-chan ExitStatus, error) { + c := make(chan ExitStatus, 1) + go func() { + defer close(c) + ctx, span := tracing.StartSpan(ctx, "task.Wait", + tracing.WithAttribute("task.id", t.ID()), + ) + defer span.End() + r, err := t.client.TaskService().Wait(ctx, &tasks.WaitRequest{ + ContainerID: t.id, + }) + if err != nil { + c <- ExitStatus{ + code: UnknownExitStatus, + err: err, + } + return + } + + c <- ExitStatus{ + code: r.ExitStatus, + exitedAt: protobuf.FromTimestamp(r.ExitedAt), + } + }() + return c, nil +} + +// Delete deletes the task and its runtime state +// it returns the exit status of the task and any errors that were encountered +// during cleanup +func (t *task) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (*ExitStatus, error) { + ctx, span := tracing.StartSpan(ctx, tracing.Name("client.task", "Delete"), + tracing.WithAttribute("task.id", t.ID()), + tracing.WithNamespace(ctx), + ) + defer span.End() + for _, o := range opts { + if err := o(ctx, t); err != nil { + return nil, err + } + } + status, err := t.Status(ctx) + if err != nil && errdefs.IsNotFound(err) { + return nil, err + } + + runtime, err := t.client.defaultRuntime(ctx) + if err != nil { + return nil, fmt.Errorf("failed to get default runtime: %w", err) + } + + switch status.Status { + case Stopped, Unknown, "": + case Created: + if runtime == plugins.RuntimePlugin.String()+".windows" { + // On windows Created is akin to Stopped + break + } + if t.pid == 0 { + // allow for deletion of created tasks with PID 0 + // https://github.com/containerd/containerd/issues/7357 + break + } + fallthrough + default: + return nil, fmt.Errorf("task must be stopped before deletion: %s: %w", status.Status, errdefs.ErrFailedPrecondition) + } + if t.io != nil { + // io.Wait locks for restored tasks on Windows unless we call + // io.Close first (https://github.com/containerd/containerd/issues/5621) + // in other cases, preserve the contract and let IO finish before closing + if runtime == plugins.RuntimePlugin.String()+".windows" { + t.io.Close() + } + // io.Cancel is used to cancel the io goroutine while it is in + // fifo-opening state. It does not stop the pipes since these + // should be closed on the shim's side, otherwise we might lose + // data from the container! + t.io.Cancel() + t.io.Wait() + } + r, err := t.client.TaskService().Delete(ctx, &tasks.DeleteTaskRequest{ + ContainerID: t.id, + }) + if err != nil { + return nil, errgrpc.ToNative(err) + } + + es := &ExitStatus{code: r.ExitStatus, exitedAt: protobuf.FromTimestamp(r.ExitedAt)} + span.SetAttributes( + tracing.Attribute("task.exit_status", int64(es.code)), + tracing.Attribute("task.exited_at", es.exitedAt.Format(time.RFC3339)), + ) + + // Only cleanup the IO after a successful Delete + if t.io != nil { + t.io.Close() + } + return es, nil +} + +func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreate cio.Creator) (_ Process, retErr error) { + ctx, span := tracing.StartSpan(ctx, tracing.Name("client.task", "Exec"), + tracing.WithAttribute("task.id", t.ID()), + tracing.WithNamespace(ctx), + ) + defer span.End() + + if id == "" { + return nil, fmt.Errorf("exec id must not be empty: %w", errdefs.ErrInvalidArgument) + } + span.SetAttributes(tracing.Attribute("task.exec.id", id)) + i, err := ioCreate(id) + if err != nil { + return nil, err + } + defer func() { + if retErr != nil && i != nil { + i.Cancel() + i.Close() + } + }() + pSpec, err := typeurl.MarshalAnyToProto(spec) + if err != nil { + return nil, err + } + cfg := i.Config() + request := &tasks.ExecProcessRequest{ + ContainerID: t.id, + ExecID: id, + Terminal: cfg.Terminal, + Stdin: cfg.Stdin, + Stdout: cfg.Stdout, + Stderr: cfg.Stderr, + Spec: pSpec, + } + if _, err := t.client.TaskService().Exec(ctx, request); err != nil { + i.Cancel() + i.Wait() + i.Close() + return nil, errgrpc.ToNative(err) + } + return &process{ + id: id, + task: t, + io: i, + }, nil +} + +func (t *task) Pids(ctx context.Context) ([]ProcessInfo, error) { + response, err := t.client.TaskService().ListPids(ctx, &tasks.ListPidsRequest{ + ContainerID: t.id, + }) + if err != nil { + return nil, errgrpc.ToNative(err) + } + var processList []ProcessInfo + for _, p := range response.Processes { + processList = append(processList, ProcessInfo{ + Pid: p.Pid, + Info: p.Info, + }) + } + return processList, nil +} + +func (t *task) CloseIO(ctx context.Context, opts ...IOCloserOpts) error { + ctx, span := tracing.StartSpan(ctx, "task.CloseIO", + tracing.WithAttribute("task.id", t.ID()), + ) + defer span.End() + r := &tasks.CloseIORequest{ + ContainerID: t.id, + } + var i IOCloseInfo + for _, o := range opts { + o(&i) + } + r.Stdin = i.Stdin + + _, err := t.client.TaskService().CloseIO(ctx, r) + return errgrpc.ToNative(err) +} + +func (t *task) IO() cio.IO { + return t.io +} + +func (t *task) Resize(ctx context.Context, w, h uint32) error { + ctx, span := tracing.StartSpan(ctx, tracing.Name("client.task", "Resize"), + tracing.WithAttribute("task.id", t.ID()), + tracing.WithNamespace(ctx), + ) + defer span.End() + span.SetAttributes( + tracing.Attribute("task.pty.width", int64(w)), + tracing.Attribute("task.pty.height", int64(h)), + ) + + _, err := t.client.TaskService().ResizePty(ctx, &tasks.ResizePtyRequest{ + ContainerID: t.id, + Width: w, + Height: h, + }) + return errgrpc.ToNative(err) +} + +// NOTE: Checkpoint supports to dump task information to a directory, in this way, an empty +// OCI Index will be returned. +func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointTaskOpts) (Image, error) { + ctx, done, err := t.client.WithLease(ctx) + if err != nil { + return nil, err + } + defer done(ctx) + cr, err := t.client.ContainerService().Get(ctx, t.id) + if err != nil { + return nil, err + } + + request := &tasks.CheckpointTaskRequest{ + ContainerID: t.id, + } + i := CheckpointTaskInfo{ + runtime: cr.Runtime.Name, + } + for _, o := range opts { + if err := o(&i); err != nil { + return nil, err + } + } + // set a default name + if i.Name == "" { + i.Name = fmt.Sprintf(checkpointNameFormat, t.id, time.Now().Format(checkpointDateFormat)) + } + request.ParentCheckpoint = i.ParentCheckpoint.String() + if i.Options != nil { + o, err := typeurl.MarshalAnyToProto(i.Options) + if err != nil { + return nil, err + } + request.Options = o + } + + status, err := t.Status(ctx) + if err != nil { + return nil, err + } + + if status.Status != Paused { + // make sure we pause it and resume after all other filesystem operations are completed + if err := t.Pause(ctx); err != nil { + return nil, err + } + defer t.Resume(ctx) + } + + index := v1.Index{ + Versioned: is.Versioned{ + SchemaVersion: 2, + }, + Annotations: make(map[string]string), + } + if err := t.checkpointTask(ctx, &index, request); err != nil { + return nil, err + } + // if checkpoint image path passed, jump checkpoint image, + // return an empty image + if isCheckpointPathExist(cr.Runtime.Name, i.Options) { + return NewImage(t.client, images.Image{}), nil + } + + if cr.Image != "" { + if err := t.checkpointImage(ctx, &index, cr.Image); err != nil { + return nil, err + } + index.Annotations["image.name"] = cr.Image + } + if cr.SnapshotKey != "" { + if err := t.checkpointRWSnapshot(ctx, &index, cr.Snapshotter, cr.SnapshotKey); err != nil { + return nil, err + } + } + desc, err := writeIndex(ctx, &index, t.client, t.id) + if err != nil { + return nil, err + } + im := images.Image{ + Name: i.Name, + Target: desc, + Labels: map[string]string{ + "containerd.io/checkpoint": "true", + }, + } + if im, err = t.client.ImageService().Create(ctx, im); err != nil { + return nil, err + } + return NewImage(t.client, im), nil +} + +// UpdateTaskInfo allows updated specific settings to be changed on a task +type UpdateTaskInfo struct { + // Resources updates a tasks resource constraints + Resources interface{} + // Annotations allows arbitrary and/or experimental resource constraints for task update + Annotations map[string]string +} + +// UpdateTaskOpts allows a caller to update task settings +type UpdateTaskOpts func(context.Context, *Client, *UpdateTaskInfo) error + +func (t *task) Update(ctx context.Context, opts ...UpdateTaskOpts) error { + ctx, span := tracing.StartSpan(ctx, "task.Update", + tracing.WithAttribute("task.id", t.ID()), + ) + defer span.End() + request := &tasks.UpdateTaskRequest{ + ContainerID: t.id, + } + var i UpdateTaskInfo + for _, o := range opts { + if err := o(ctx, t.client, &i); err != nil { + return err + } + } + if i.Resources != nil { + r, err := typeurl.MarshalAny(i.Resources) + if err != nil { + return err + } + request.Resources = typeurl.MarshalProto(r) + } + if i.Annotations != nil { + request.Annotations = i.Annotations + } + _, err := t.client.TaskService().Update(ctx, request) + return errgrpc.ToNative(err) +} + +func (t *task) LoadProcess(ctx context.Context, id string, ioAttach cio.Attach) (Process, error) { + if id == t.id && ioAttach == nil { + return t, nil + } + response, err := t.client.TaskService().Get(ctx, &tasks.GetRequest{ + ContainerID: t.id, + ExecID: id, + }) + if err != nil { + err = errgrpc.ToNative(err) + if errdefs.IsNotFound(err) { + return nil, fmt.Errorf("no running process found: %w", err) + } + return nil, err + } + var i cio.IO + if ioAttach != nil { + if i, err = attachExistingIO(response, ioAttach); err != nil { + return nil, err + } + } + return &process{ + id: id, + task: t, + io: i, + }, nil +} + +func (t *task) Metrics(ctx context.Context) (*types.Metric, error) { + response, err := t.client.TaskService().Metrics(ctx, &tasks.MetricsRequest{ + Filters: []string{ + "id==" + t.id, + }, + }) + if err != nil { + return nil, errgrpc.ToNative(err) + } + + if response.Metrics == nil { + _, err := t.Status(ctx) + if err != nil && errdefs.IsNotFound(err) { + return nil, err + } + return nil, errors.New("no metrics received") + } + + return response.Metrics[0], nil +} + +func (t *task) checkpointTask(ctx context.Context, index *v1.Index, request *tasks.CheckpointTaskRequest) error { + response, err := t.client.TaskService().Checkpoint(ctx, request) + if err != nil { + return errgrpc.ToNative(err) + } + // NOTE: response.Descriptors can be an empty slice if checkpoint image is jumped + // add the checkpoint descriptors to the index + for _, d := range response.Descriptors { + index.Manifests = append(index.Manifests, v1.Descriptor{ + MediaType: d.MediaType, + Size: d.Size, + Digest: digest.Digest(d.Digest), + Platform: &v1.Platform{ + OS: goruntime.GOOS, + Architecture: goruntime.GOARCH, + }, + Annotations: d.Annotations, + }) + } + return nil +} + +func (t *task) checkpointRWSnapshot(ctx context.Context, index *v1.Index, snapshotterName string, id string) error { + opts := []diff.Opt{ + diff.WithReference(fmt.Sprintf("checkpoint-rw-%s", id)), + } + rw, err := rootfs.CreateDiff(ctx, id, t.client.SnapshotService(snapshotterName), t.client.DiffService(), opts...) + if err != nil { + return err + } + rw.Platform = &v1.Platform{ + OS: goruntime.GOOS, + Architecture: goruntime.GOARCH, + } + index.Manifests = append(index.Manifests, rw) + return nil +} + +func (t *task) checkpointImage(ctx context.Context, index *v1.Index, image string) error { + if image == "" { + return fmt.Errorf("cannot checkpoint image with empty name") + } + ir, err := t.client.ImageService().Get(ctx, image) + if err != nil { + return err + } + index.Manifests = append(index.Manifests, ir.Target) + return nil +} + +func writeContent(ctx context.Context, store content.Ingester, mediaType, ref string, r io.Reader, opts ...content.Opt) (d v1.Descriptor, err error) { + writer, err := store.Writer(ctx, content.WithRef(ref)) + if err != nil { + return d, err + } + defer writer.Close() + size, err := io.Copy(writer, r) + if err != nil { + return d, err + } + + if err := writer.Commit(ctx, size, "", opts...); err != nil { + if !errdefs.IsAlreadyExists(err) { + return d, err + } + } + return v1.Descriptor{ + MediaType: mediaType, + Digest: writer.Digest(), + Size: size, + }, nil +} + +// isCheckpointPathExist only suitable for runc runtime now +func isCheckpointPathExist(runtime string, v interface{}) bool { + if v == nil { + return false + } + + switch runtime { + case plugins.RuntimeRuncV2: + if opts, ok := v.(*options.CheckpointOptions); ok && opts.ImagePath != "" { + return true + } + } + + return false +} diff --git a/client/task_opts.go b/client/task_opts.go new file mode 100644 index 000000000000..27bde350687a --- /dev/null +++ b/client/task_opts.go @@ -0,0 +1,228 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + "errors" + "fmt" + "syscall" + + "github.com/containerd/containerd/api/types" + "github.com/containerd/containerd/api/types/runc/options" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/mount" + "github.com/containerd/errdefs" + "github.com/opencontainers/runtime-spec/specs-go" +) + +// NewTaskOpts allows the caller to set options on a new task +type NewTaskOpts func(context.Context, *Client, *TaskInfo) error + +// WithRootFS allows a task to be created without a snapshot being allocated to its container +func WithRootFS(mounts []mount.Mount) NewTaskOpts { + return func(ctx context.Context, c *Client, ti *TaskInfo) error { + ti.RootFS = mounts + return nil + } +} + +// WithRuntimePath will force task service to use a custom path to the runtime binary +// instead of resolving it from runtime name. +func WithRuntimePath(absRuntimePath string) NewTaskOpts { + return func(ctx context.Context, client *Client, info *TaskInfo) error { + info.RuntimePath = absRuntimePath + return nil + } +} + +// WithTaskAPIEndpoint allow task service to manage a task through a given endpoint, +// usually it is served inside a sandbox, and we can get it from sandbox status. +func WithTaskAPIEndpoint(address string, version uint32) NewTaskOpts { + return func(ctx context.Context, client *Client, info *TaskInfo) error { + opts, err := info.getRuncOptions() + if err != nil { + return err + } + opts.TaskApiAddress = address + opts.TaskApiVersion = version + return nil + } +} + +// WithTaskCheckpoint allows a task to be created with live runtime and memory data from a +// previous checkpoint. Additional software such as CRIU may be required to +// restore a task from a checkpoint +func WithTaskCheckpoint(im Image) NewTaskOpts { + return func(ctx context.Context, c *Client, info *TaskInfo) error { + desc := im.Target() + id := desc.Digest + index, err := decodeIndex(ctx, c.ContentStore(), desc) + if err != nil { + return err + } + for _, m := range index.Manifests { + if m.MediaType == images.MediaTypeContainerd1Checkpoint { + info.Checkpoint = &types.Descriptor{ + MediaType: m.MediaType, + Size: m.Size, + Digest: m.Digest.String(), + Annotations: m.Annotations, + } + return nil + } + } + return fmt.Errorf("checkpoint not found in index %s", id) + } +} + +// WithCheckpointName sets the image name for the checkpoint +func WithCheckpointName(name string) CheckpointTaskOpts { + return func(r *CheckpointTaskInfo) error { + r.Name = name + return nil + } +} + +// WithCheckpointImagePath sets image path for checkpoint option +func WithCheckpointImagePath(path string) CheckpointTaskOpts { + return func(r *CheckpointTaskInfo) error { + if r.Options == nil { + r.Options = &options.CheckpointOptions{} + } + opts, ok := r.Options.(*options.CheckpointOptions) + if !ok { + return errors.New("invalid runtime v2 checkpoint options format") + } + opts.ImagePath = path + return nil + } +} + +// WithRestoreImagePath sets image path for create option +func WithRestoreImagePath(path string) NewTaskOpts { + return func(ctx context.Context, c *Client, ti *TaskInfo) error { + opts, err := ti.getRuncOptions() + if err != nil { + return err + } + opts.CriuImagePath = path + return nil + } +} + +// WithRestoreWorkPath sets criu work path for create option +func WithRestoreWorkPath(path string) NewTaskOpts { + return func(ctx context.Context, c *Client, ti *TaskInfo) error { + opts, err := ti.getRuncOptions() + if err != nil { + return err + } + opts.CriuWorkPath = path + return nil + } +} + +// ProcessDeleteOpts allows the caller to set options for the deletion of a task +type ProcessDeleteOpts func(context.Context, Process) error + +// WithProcessKill will forcefully kill and delete a process +func WithProcessKill(ctx context.Context, p Process) error { + // Skip killing tasks with PID 0 + // https://github.com/containerd/containerd/issues/10441 + if p.Pid() == 0 { + return nil + } + + ctx, cancel := context.WithCancel(ctx) + defer cancel() + // ignore errors to wait and kill as we are forcefully killing + // the process and don't care about the exit status + s, err := p.Wait(ctx) + if err != nil { + return err + } + if err := p.Kill(ctx, syscall.SIGKILL, WithKillAll); err != nil { + // Kill might still return an IsNotFound error, even if it actually + // killed the process. + if errdefs.IsNotFound(err) { + select { + case <-ctx.Done(): + return ctx.Err() + case <-s: + return nil + } + } + if errdefs.IsFailedPrecondition(err) { + return nil + } + return err + } + // wait for the process to fully stop before letting the rest of the deletion complete + <-s + return nil +} + +// KillInfo contains information on how to process a Kill action +type KillInfo struct { + // All kills all processes inside the task + // only valid on tasks, ignored on processes + All bool + // ExecID is the ID of a process to kill + ExecID string +} + +// KillOpts allows options to be set for the killing of a process +type KillOpts func(context.Context, *KillInfo) error + +// WithKillAll kills all processes for a task +func WithKillAll(ctx context.Context, i *KillInfo) error { + i.All = true + return nil +} + +// WithKillExecID specifies the process ID +func WithKillExecID(execID string) KillOpts { + return func(ctx context.Context, i *KillInfo) error { + i.ExecID = execID + return nil + } +} + +// WithResources sets the provided resources for task updates. Resources must be +// either a *specs.LinuxResources or a *specs.WindowsResources +func WithResources(resources interface{}) UpdateTaskOpts { + return func(ctx context.Context, client *Client, r *UpdateTaskInfo) error { + switch resources.(type) { + case *specs.LinuxResources: + case *specs.WindowsResources: + default: + return errors.New("WithResources requires a *specs.LinuxResources or *specs.WindowsResources") + } + + r.Resources = resources + return nil + } +} + +// WithAnnotations sets the provided annotations for task updates. +func WithAnnotations(annotations map[string]string) UpdateTaskOpts { + return func(ctx context.Context, client *Client, r *UpdateTaskInfo) error { + r.Annotations = annotations + return nil + } +} diff --git a/client/task_opts_unix.go b/client/task_opts_unix.go new file mode 100644 index 000000000000..26b5c17bee99 --- /dev/null +++ b/client/task_opts_unix.go @@ -0,0 +1,80 @@ +//go:build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" +) + +// WithNoNewKeyring causes tasks not to be created with a new keyring for secret storage. +// There is an upper limit on the number of keyrings in a linux system +func WithNoNewKeyring(ctx context.Context, c *Client, ti *TaskInfo) error { + opts, err := ti.getRuncOptions() + if err != nil { + return err + } + opts.NoNewKeyring = true + return nil +} + +// WithNoPivotRoot instructs the runtime not to you pivot_root +func WithNoPivotRoot(_ context.Context, _ *Client, ti *TaskInfo) error { + opts, err := ti.getRuncOptions() + if err != nil { + return err + } + opts.NoPivotRoot = true + return nil +} + +// WithShimCgroup sets the existing cgroup for the shim +func WithShimCgroup(path string) NewTaskOpts { + return func(ctx context.Context, c *Client, ti *TaskInfo) error { + opts, err := ti.getRuncOptions() + if err != nil { + return err + } + opts.ShimCgroup = path + return nil + } +} + +// WithUIDOwner allows console I/O to work with the remapped UID in user namespace +func WithUIDOwner(uid uint32) NewTaskOpts { + return func(ctx context.Context, c *Client, ti *TaskInfo) error { + opts, err := ti.getRuncOptions() + if err != nil { + return err + } + opts.IoUid = uid + return nil + } +} + +// WithGIDOwner allows console I/O to work with the remapped GID in user namespace +func WithGIDOwner(gid uint32) NewTaskOpts { + return func(ctx context.Context, c *Client, ti *TaskInfo) error { + opts, err := ti.getRuncOptions() + if err != nil { + return err + } + opts.IoGid = gid + return nil + } +} diff --git a/client/transfer.go b/client/transfer.go new file mode 100644 index 000000000000..5bd02aa6d2d3 --- /dev/null +++ b/client/transfer.go @@ -0,0 +1,40 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package client + +import ( + "context" + + "github.com/containerd/containerd/v2/core/streaming" + streamproxy "github.com/containerd/containerd/v2/core/streaming/proxy" + "github.com/containerd/containerd/v2/core/transfer" + "github.com/containerd/containerd/v2/core/transfer/proxy" +) + +func (c *Client) Transfer(ctx context.Context, src interface{}, dest interface{}, opts ...transfer.Opt) error { + ctx, done, err := c.WithLease(ctx) + if err != nil { + return err + } + defer done(ctx) + + return proxy.NewTransferrer(c.conn, c.streamCreator()).Transfer(ctx, src, dest, opts...) +} + +func (c *Client) streamCreator() streaming.StreamCreator { + return streamproxy.NewStreamCreator(c.conn) +} diff --git a/client_opts.go b/client_opts.go deleted file mode 100644 index 4e0a78a8a31d..000000000000 --- a/client_opts.go +++ /dev/null @@ -1,256 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package containerd - -import ( - "time" - - "github.com/containerd/containerd/images" - "github.com/containerd/containerd/platforms" - "github.com/containerd/containerd/remotes" - "github.com/containerd/containerd/snapshots" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" - - "google.golang.org/grpc" -) - -type clientOpts struct { - defaultns string - defaultRuntime string - defaultPlatform platforms.MatchComparer - services *services - dialOptions []grpc.DialOption - callOptions []grpc.CallOption - timeout time.Duration -} - -// ClientOpt allows callers to set options on the containerd client -type ClientOpt func(c *clientOpts) error - -// WithDefaultNamespace sets the default namespace on the client -// -// Any operation that does not have a namespace set on the context will -// be provided the default namespace -func WithDefaultNamespace(ns string) ClientOpt { - return func(c *clientOpts) error { - c.defaultns = ns - return nil - } -} - -// WithDefaultRuntime sets the default runtime on the client -func WithDefaultRuntime(rt string) ClientOpt { - return func(c *clientOpts) error { - c.defaultRuntime = rt - return nil - } -} - -// WithDefaultPlatform sets the default platform matcher on the client -func WithDefaultPlatform(platform platforms.MatchComparer) ClientOpt { - return func(c *clientOpts) error { - c.defaultPlatform = platform - return nil - } -} - -// WithDialOpts allows grpc.DialOptions to be set on the connection -func WithDialOpts(opts []grpc.DialOption) ClientOpt { - return func(c *clientOpts) error { - c.dialOptions = opts - return nil - } -} - -// WithCallOpts allows grpc.CallOptions to be set on the connection -func WithCallOpts(opts []grpc.CallOption) ClientOpt { - return func(c *clientOpts) error { - c.callOptions = opts - return nil - } -} - -// WithServices sets services used by the client. -func WithServices(opts ...ServicesOpt) ClientOpt { - return func(c *clientOpts) error { - c.services = &services{} - for _, o := range opts { - o(c.services) - } - return nil - } -} - -// WithTimeout sets the connection timeout for the client -func WithTimeout(d time.Duration) ClientOpt { - return func(c *clientOpts) error { - c.timeout = d - return nil - } -} - -// RemoteOpt allows the caller to set distribution options for a remote -type RemoteOpt func(*Client, *RemoteContext) error - -// WithPlatform allows the caller to specify a platform to retrieve -// content for -func WithPlatform(platform string) RemoteOpt { - if platform == "" { - platform = platforms.DefaultString() - } - return func(_ *Client, c *RemoteContext) error { - for _, p := range c.Platforms { - if p == platform { - return nil - } - } - - c.Platforms = append(c.Platforms, platform) - return nil - } -} - -// WithPlatformMatcher specifies the matcher to use for -// determining which platforms to pull content for. -// This value supersedes anything set with `WithPlatform`. -func WithPlatformMatcher(m platforms.MatchComparer) RemoteOpt { - return func(_ *Client, c *RemoteContext) error { - c.PlatformMatcher = m - return nil - } -} - -// WithPullUnpack is used to unpack an image after pull. This -// uses the snapshotter, content store, and diff service -// configured for the client. -func WithPullUnpack(_ *Client, c *RemoteContext) error { - c.Unpack = true - return nil -} - -// WithUnpackOpts is used to add unpack options to the unpacker. -func WithUnpackOpts(opts []UnpackOpt) RemoteOpt { - return func(_ *Client, c *RemoteContext) error { - c.UnpackOpts = append(c.UnpackOpts, opts...) - return nil - } -} - -// WithPullSnapshotter specifies snapshotter name used for unpacking. -func WithPullSnapshotter(snapshotterName string, opts ...snapshots.Opt) RemoteOpt { - return func(_ *Client, c *RemoteContext) error { - c.Snapshotter = snapshotterName - c.SnapshotterOpts = opts - return nil - } -} - -// WithPullLabel sets a label to be associated with a pulled reference -func WithPullLabel(key, value string) RemoteOpt { - return func(_ *Client, rc *RemoteContext) error { - if rc.Labels == nil { - rc.Labels = make(map[string]string) - } - - rc.Labels[key] = value - return nil - } -} - -// WithPullLabels associates a set of labels to a pulled reference -func WithPullLabels(labels map[string]string) RemoteOpt { - return func(_ *Client, rc *RemoteContext) error { - if rc.Labels == nil { - rc.Labels = make(map[string]string) - } - - for k, v := range labels { - rc.Labels[k] = v - } - return nil - } -} - -// WithChildLabelMap sets the map function used to define the labels set -// on referenced child content in the content store. This can be used -// to overwrite the default GC labels or filter which labels get set -// for content. -// The default is `images.ChildGCLabels`. -func WithChildLabelMap(fn func(ocispec.Descriptor) []string) RemoteOpt { - return func(_ *Client, c *RemoteContext) error { - c.ChildLabelMap = fn - return nil - } -} - -// WithSchema1Conversion is used to convert Docker registry schema 1 -// manifests to oci manifests on pull. Without this option schema 1 -// manifests will return a not supported error. -// -// Deprecated: use Schema 2 or OCI images. -func WithSchema1Conversion(client *Client, c *RemoteContext) error { - c.ConvertSchema1 = true - return nil -} - -// WithResolver specifies the resolver to use. -func WithResolver(resolver remotes.Resolver) RemoteOpt { - return func(client *Client, c *RemoteContext) error { - c.Resolver = resolver - return nil - } -} - -// WithImageHandler adds a base handler to be called on dispatch. -func WithImageHandler(h images.Handler) RemoteOpt { - return func(client *Client, c *RemoteContext) error { - c.BaseHandlers = append(c.BaseHandlers, h) - return nil - } -} - -// WithImageHandlerWrapper wraps the handlers to be called on dispatch. -func WithImageHandlerWrapper(w func(images.Handler) images.Handler) RemoteOpt { - return func(client *Client, c *RemoteContext) error { - c.HandlerWrapper = w - return nil - } -} - -// WithMaxConcurrentDownloads sets max concurrent download limit. -func WithMaxConcurrentDownloads(max int) RemoteOpt { - return func(client *Client, c *RemoteContext) error { - c.MaxConcurrentDownloads = max - return nil - } -} - -// WithMaxConcurrentUploadedLayers sets max concurrent uploaded layer limit. -func WithMaxConcurrentUploadedLayers(max int) RemoteOpt { - return func(client *Client, c *RemoteContext) error { - c.MaxConcurrentUploadedLayers = max - return nil - } -} - -// WithAllMetadata downloads all manifests and known-configuration files -func WithAllMetadata() RemoteOpt { - return func(_ *Client, c *RemoteContext) error { - c.AllMetadata = true - return nil - } -} diff --git a/cmd/containerd-shim-runc-v1/main.go b/cmd/containerd-shim-runc-v1/main.go deleted file mode 100644 index 9db50929049a..000000000000 --- a/cmd/containerd-shim-runc-v1/main.go +++ /dev/null @@ -1,29 +0,0 @@ -//go:build linux -// +build linux - -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package main - -import ( - v1 "github.com/containerd/containerd/runtime/v2/runc/v1" - "github.com/containerd/containerd/runtime/v2/shim" -) - -func main() { - shim.Run("io.containerd.runc.v1", v1.New) -} diff --git a/cmd/containerd-shim-runc-v2/main.go b/cmd/containerd-shim-runc-v2/main.go index c5454bba310a..d6f11990c211 100644 --- a/cmd/containerd-shim-runc-v2/main.go +++ b/cmd/containerd-shim-runc-v2/main.go @@ -1,5 +1,4 @@ //go:build linux -// +build linux /* Copyright The containerd Authors. @@ -22,12 +21,11 @@ package main import ( "context" - "github.com/containerd/containerd/runtime/v2/runc/manager" - _ "github.com/containerd/containerd/runtime/v2/runc/pause" - _ "github.com/containerd/containerd/runtime/v2/runc/task/plugin" - "github.com/containerd/containerd/runtime/v2/shim" + "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/manager" + _ "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/task/plugin" + "github.com/containerd/containerd/v2/pkg/shim" ) func main() { - shim.RunManager(context.Background(), manager.NewShimManager("io.containerd.runc.v2")) + shim.Run(context.Background(), manager.NewShimManager("io.containerd.runc.v2")) } diff --git a/cmd/containerd-shim-runc-v2/main_tracing.go b/cmd/containerd-shim-runc-v2/main_tracing.go new file mode 100644 index 000000000000..45be0c67824d --- /dev/null +++ b/cmd/containerd-shim-runc-v2/main_tracing.go @@ -0,0 +1,24 @@ +//go:build shim_tracing + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package main + +import ( + _ "github.com/containerd/containerd/v2/internal/pprof" + _ "github.com/containerd/containerd/v2/pkg/tracing/plugin" +) diff --git a/cmd/containerd-shim-runc-v2/manager/manager_linux.go b/cmd/containerd-shim-runc-v2/manager/manager_linux.go new file mode 100644 index 000000000000..0e051a3a13f4 --- /dev/null +++ b/cmd/containerd-shim-runc-v2/manager/manager_linux.go @@ -0,0 +1,387 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package manager + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net" + "os" + "os/exec" + "path/filepath" + goruntime "runtime" + "syscall" + "time" + + "github.com/containerd/cgroups/v3" + "github.com/containerd/cgroups/v3/cgroup1" + cgroupsv2 "github.com/containerd/cgroups/v3/cgroup2" + "github.com/containerd/containerd/api/types" + "github.com/containerd/containerd/api/types/runc/options" + "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/process" + "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/runc" + "github.com/containerd/containerd/v2/core/mount" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/schedcore" + "github.com/containerd/containerd/v2/pkg/shim" + "github.com/containerd/containerd/v2/version" + "github.com/containerd/errdefs" + runcC "github.com/containerd/go-runc" + "github.com/containerd/log" + "github.com/containerd/typeurl/v2" + "github.com/opencontainers/runtime-spec/specs-go/features" + "golang.org/x/sys/unix" +) + +// NewShimManager returns an implementation of the shim manager +// using runc +func NewShimManager(name string) shim.Manager { + return &manager{ + name: name, + } +} + +// group labels specifies how the shim groups services. +// currently supports a runc.v2 specific .group label and the +// standard k8s pod label. Order matters in this list +var groupLabels = []string{ + "io.containerd.runc.v2.group", + "io.kubernetes.cri.sandbox-id", +} + +// spec is a shallow version of [oci.Spec] containing only the +// fields we need for the hook. We use a shallow struct to reduce +// the overhead of unmarshaling. +type spec struct { + // Annotations contains arbitrary metadata for the container. + Annotations map[string]string `json:"annotations,omitempty"` +} + +type manager struct { + name string +} + +func newCommand(ctx context.Context, id, containerdAddress, containerdTTRPCAddress string, debug bool) (*exec.Cmd, error) { + ns, err := namespaces.NamespaceRequired(ctx) + if err != nil { + return nil, err + } + self, err := os.Executable() + if err != nil { + return nil, err + } + cwd, err := os.Getwd() + if err != nil { + return nil, err + } + args := []string{ + "-namespace", ns, + "-id", id, + "-address", containerdAddress, + } + if debug { + args = append(args, "-debug") + } + cmd := exec.Command(self, args...) + cmd.Dir = cwd + cmd.Env = append(os.Environ(), "GOMAXPROCS=4") + cmd.Env = append(cmd.Env, "OTEL_SERVICE_NAME=containerd-shim-"+id) + cmd.SysProcAttr = &syscall.SysProcAttr{ + Setpgid: true, + } + return cmd, nil +} + +func readSpec() (*spec, error) { + const configFileName = "config.json" + f, err := os.Open(configFileName) + if err != nil { + return nil, err + } + defer f.Close() + var s spec + if err := json.NewDecoder(f).Decode(&s); err != nil { + return nil, err + } + return &s, nil +} + +func (m manager) Name() string { + return m.name +} + +type shimSocket struct { + addr string + s *net.UnixListener + f *os.File +} + +func (s *shimSocket) Close() { + if s.s != nil { + s.s.Close() + } + if s.f != nil { + s.f.Close() + } + _ = shim.RemoveSocket(s.addr) +} + +func newShimSocket(ctx context.Context, path, id string, debug bool) (*shimSocket, error) { + address, err := shim.SocketAddress(ctx, path, id, debug) + if err != nil { + return nil, err + } + socket, err := shim.NewSocket(address) + if err != nil { + // the only time where this would happen is if there is a bug and the socket + // was not cleaned up in the cleanup method of the shim or we are using the + // grouping functionality where the new process should be run with the same + // shim as an existing container + if !shim.SocketEaddrinuse(err) { + return nil, fmt.Errorf("create new shim socket: %w", err) + } + if !debug && shim.CanConnect(address) { + return &shimSocket{addr: address}, errdefs.ErrAlreadyExists + } + if err := shim.RemoveSocket(address); err != nil { + return nil, fmt.Errorf("remove pre-existing socket: %w", err) + } + if socket, err = shim.NewSocket(address); err != nil { + return nil, fmt.Errorf("try create new shim socket 2x: %w", err) + } + } + s := &shimSocket{ + addr: address, + s: socket, + } + f, err := socket.File() + if err != nil { + s.Close() + return nil, err + } + s.f = f + return s, nil +} + +func (manager) Start(ctx context.Context, id string, opts shim.StartOpts) (_ shim.BootstrapParams, retErr error) { + var params shim.BootstrapParams + params.Version = 3 + params.Protocol = "ttrpc" + + cmd, err := newCommand(ctx, id, opts.Address, opts.TTRPCAddress, opts.Debug) + if err != nil { + return params, err + } + grouping := id + spec, err := readSpec() + if err != nil { + return params, err + } + for _, group := range groupLabels { + if groupID, ok := spec.Annotations[group]; ok { + grouping = groupID + break + } + } + + var sockets []*shimSocket + defer func() { + if retErr != nil { + for _, s := range sockets { + s.Close() + } + } + }() + + s, err := newShimSocket(ctx, opts.Address, grouping, false) + if err != nil { + if errdefs.IsAlreadyExists(err) { + params.Address = s.addr + return params, nil + } + return params, err + } + sockets = append(sockets, s) + cmd.ExtraFiles = append(cmd.ExtraFiles, s.f) + + if opts.Debug { + s, err = newShimSocket(ctx, opts.Address, grouping, true) + if err != nil { + return params, err + } + sockets = append(sockets, s) + cmd.ExtraFiles = append(cmd.ExtraFiles, s.f) + } + + goruntime.LockOSThread() + if os.Getenv("SCHED_CORE") != "" { + if err := schedcore.Create(schedcore.ProcessGroup); err != nil { + return params, fmt.Errorf("enable sched core support: %w", err) + } + } + + if err := cmd.Start(); err != nil { + return params, err + } + + goruntime.UnlockOSThread() + + defer func() { + if retErr != nil { + cmd.Process.Kill() + } + }() + // make sure to wait after start + go cmd.Wait() + + if opts, err := shim.ReadRuntimeOptions[*options.Options](os.Stdin); err == nil { + if opts.ShimCgroup != "" { + if cgroups.Mode() == cgroups.Unified { + cg, err := cgroupsv2.Load(opts.ShimCgroup) + if err != nil { + return params, fmt.Errorf("failed to load cgroup %s: %w", opts.ShimCgroup, err) + } + if err := cg.AddProc(uint64(cmd.Process.Pid)); err != nil { + return params, fmt.Errorf("failed to join cgroup %s: %w", opts.ShimCgroup, err) + } + } else { + cg, err := cgroup1.Load(cgroup1.StaticPath(opts.ShimCgroup)) + if err != nil { + return params, fmt.Errorf("failed to load cgroup %s: %w", opts.ShimCgroup, err) + } + if err := cg.AddProc(uint64(cmd.Process.Pid)); err != nil { + return params, fmt.Errorf("failed to join cgroup %s: %w", opts.ShimCgroup, err) + } + } + } + } + + if err := shim.AdjustOOMScore(cmd.Process.Pid); err != nil { + return params, fmt.Errorf("failed to adjust OOM score for shim: %w", err) + } + + params.Address = sockets[0].addr + return params, nil +} + +func (manager) Stop(ctx context.Context, id string) (shim.StopStatus, error) { + cwd, err := os.Getwd() + if err != nil { + return shim.StopStatus{}, err + } + + path := filepath.Join(filepath.Dir(cwd), id) + ns, err := namespaces.NamespaceRequired(ctx) + if err != nil { + return shim.StopStatus{}, err + } + runtime, err := runc.ReadRuntime(path) + if err != nil && !os.IsNotExist(err) { + return shim.StopStatus{}, err + } + opts, err := runc.ReadOptions(path) + if err != nil { + return shim.StopStatus{}, err + } + root := process.RuncRoot + if opts != nil && opts.Root != "" { + root = opts.Root + } + + r := process.NewRunc(root, path, ns, runtime, false) + if err := r.Delete(ctx, id, &runcC.DeleteOpts{ + Force: true, + }); err != nil { + log.G(ctx).WithError(err).Warn("failed to remove runc container") + } + if err := mount.UnmountRecursive(filepath.Join(path, "rootfs"), 0); err != nil { + log.G(ctx).WithError(err).Warn("failed to cleanup rootfs mount") + } + pid, err := runcC.ReadPidFile(filepath.Join(path, process.InitPidFile)) + if err != nil { + log.G(ctx).WithError(err).Warn("failed to read init pid file") + } + return shim.StopStatus{ + ExitedAt: time.Now(), + ExitStatus: 128 + int(unix.SIGKILL), + Pid: pid, + }, nil +} + +func (m manager) Info(ctx context.Context, optionsR io.Reader) (*types.RuntimeInfo, error) { + info := &types.RuntimeInfo{ + Name: m.name, + Version: &types.RuntimeVersion{ + Version: version.Version, + Revision: version.Revision, + }, + Annotations: nil, + } + binaryName := runcC.DefaultCommand + opts, err := shim.ReadRuntimeOptions[*options.Options](optionsR) + if err != nil { + if !errors.Is(err, errdefs.ErrNotFound) { + return nil, fmt.Errorf("failed to read runtime options (*options.Options): %w", err) + } + } + if opts != nil { + info.Options, err = typeurl.MarshalAnyToProto(opts) + if err != nil { + return nil, fmt.Errorf("failed to marshal %T: %w", opts, err) + } + if opts.BinaryName != "" { + binaryName = opts.BinaryName + } + + } + absBinary, err := exec.LookPath(binaryName) + if err != nil { + return nil, fmt.Errorf("failed to look up the path of %q: %w", binaryName, err) + } + features, err := m.features(ctx, absBinary, opts) + if err != nil { + // youki does not implement `runc features` yet, at the time of writing this (Sep 2023) + // https://github.com/containers/youki/issues/815 + log.G(ctx).WithError(err).Debug("Failed to get the runtime features. The runc binary does not implement `runc features` command?") + } + if features != nil { + info.Features, err = typeurl.MarshalAnyToProto(features) + if err != nil { + return nil, fmt.Errorf("failed to marshal %T: %w", features, err) + } + } + return info, nil +} + +func (m manager) features(ctx context.Context, absBinary string, opts *options.Options) (*features.Features, error) { + var stderr bytes.Buffer + cmd := exec.CommandContext(ctx, absBinary, "features") + cmd.Stderr = &stderr + stdout, err := cmd.Output() + if err != nil { + return nil, fmt.Errorf("failed to execute %v: %w (stderr: %q)", cmd.Args, err, stderr.String()) + } + var feat features.Features + if err := json.Unmarshal(stdout, &feat); err != nil { + return nil, err + } + return &feat, nil +} diff --git a/pkg/process/deleted_state.go b/cmd/containerd-shim-runc-v2/process/deleted_state.go similarity index 94% rename from pkg/process/deleted_state.go rename to cmd/containerd-shim-runc-v2/process/deleted_state.go index e1441623cdca..3bb4f88d6056 100644 --- a/pkg/process/deleted_state.go +++ b/cmd/containerd-shim-runc-v2/process/deleted_state.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows /* Copyright The containerd Authors. @@ -25,8 +24,8 @@ import ( "fmt" "github.com/containerd/console" - "github.com/containerd/containerd/errdefs" - google_protobuf "github.com/containerd/containerd/protobuf/types" + google_protobuf "github.com/containerd/containerd/v2/pkg/protobuf/types" + "github.com/containerd/errdefs" ) type deletedState struct { diff --git a/cmd/containerd-shim-runc-v2/process/exec.go b/cmd/containerd-shim-runc-v2/process/exec.go new file mode 100644 index 000000000000..c44b1f430548 --- /dev/null +++ b/cmd/containerd-shim-runc-v2/process/exec.go @@ -0,0 +1,271 @@ +//go:build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package process + +import ( + "context" + "fmt" + "io" + "os" + "path/filepath" + "sync" + "syscall" + "time" + + "golang.org/x/sys/unix" + + "github.com/containerd/console" + "github.com/containerd/containerd/v2/pkg/stdio" + "github.com/containerd/errdefs" + "github.com/containerd/fifo" + runc "github.com/containerd/go-runc" + "github.com/containerd/log" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +type execProcess struct { + wg sync.WaitGroup + + execState execState + + mu sync.Mutex + id string + console console.Console + io *processIO + status int + exited time.Time + pid safePid + closers []io.Closer + stdin io.Closer + stdio stdio.Stdio + path string + spec specs.Process + + parent *Init + waitBlock chan struct{} +} + +func (e *execProcess) Wait(ctx context.Context) error { + select { + case <-e.waitBlock: + return nil + case <-ctx.Done(): + return ctx.Err() + } +} + +func (e *execProcess) ID() string { + return e.id +} + +func (e *execProcess) Pid() int { + return e.pid.get() +} + +func (e *execProcess) ExitStatus() int { + e.mu.Lock() + defer e.mu.Unlock() + return e.status +} + +func (e *execProcess) ExitedAt() time.Time { + e.mu.Lock() + defer e.mu.Unlock() + return e.exited +} + +func (e *execProcess) SetExited(status int) { + e.mu.Lock() + defer e.mu.Unlock() + + e.execState.SetExited(status) +} + +func (e *execProcess) setExited(status int) { + e.status = status + e.exited = time.Now() + e.parent.Platform.ShutdownConsole(context.Background(), e.console) + close(e.waitBlock) +} + +func (e *execProcess) Delete(ctx context.Context) error { + e.mu.Lock() + defer e.mu.Unlock() + + return e.execState.Delete(ctx) +} + +func (e *execProcess) delete(ctx context.Context) error { + if err := waitTimeout(ctx, &e.wg, 10*time.Second); err != nil { + log.G(ctx).WithError(err).Errorf("failed to drain exec process %s io", e.id) + } + if e.io != nil { + for _, c := range e.closers { + c.Close() + } + e.io.Close() + } + pidfile := filepath.Join(e.path, fmt.Sprintf("%s.pid", e.id)) + // silently ignore error + os.Remove(pidfile) + return nil +} + +func (e *execProcess) Resize(ws console.WinSize) error { + e.mu.Lock() + defer e.mu.Unlock() + + return e.execState.Resize(ws) +} + +func (e *execProcess) resize(ws console.WinSize) error { + if e.console == nil { + return nil + } + return e.console.Resize(ws) +} + +func (e *execProcess) Kill(ctx context.Context, sig uint32, _ bool) error { + e.mu.Lock() + defer e.mu.Unlock() + + return e.execState.Kill(ctx, sig, false) +} + +func (e *execProcess) kill(ctx context.Context, sig uint32, _ bool) error { + pid := e.pid.get() + switch { + case pid == 0: + return fmt.Errorf("process not created: %w", errdefs.ErrFailedPrecondition) + case !e.exited.IsZero(): + return fmt.Errorf("process already finished: %w", errdefs.ErrNotFound) + default: + if err := unix.Kill(pid, syscall.Signal(sig)); err != nil { + return fmt.Errorf("exec kill error: %w", checkKillError(err)) + } + } + return nil +} + +func (e *execProcess) Stdin() io.Closer { + return e.stdin +} + +func (e *execProcess) Stdio() stdio.Stdio { + return e.stdio +} + +func (e *execProcess) Start(ctx context.Context) error { + e.mu.Lock() + defer e.mu.Unlock() + + return e.execState.Start(ctx) +} + +func (e *execProcess) start(ctx context.Context) (err error) { + // The reaper may receive exit signal right after + // the container is started, before the e.pid is updated. + // In that case, we want to block the signal handler to + // access e.pid until it is updated. + e.pid.Lock() + defer e.pid.Unlock() + + var ( + socket *runc.Socket + pio *processIO + pidFile = newExecPidFile(e.path, e.id) + ) + if e.stdio.Terminal { + if socket, err = runc.NewTempConsoleSocket(); err != nil { + return fmt.Errorf("failed to create runc console socket: %w", err) + } + defer socket.Close() + } else { + if pio, err = createIO(ctx, e.id, e.parent.IoUID, e.parent.IoGID, e.stdio); err != nil { + return fmt.Errorf("failed to create init process I/O: %w", err) + } + e.io = pio + } + opts := &runc.ExecOpts{ + PidFile: pidFile.Path(), + Detach: true, + } + if pio != nil { + opts.IO = pio.IO() + } + if socket != nil { + opts.ConsoleSocket = socket + } + if err := e.parent.runtime.Exec(ctx, e.parent.id, e.spec, opts); err != nil { + close(e.waitBlock) + return e.parent.runtimeError(err, "OCI runtime exec failed") + } + if e.stdio.Stdin != "" { + if err := e.openStdin(e.stdio.Stdin); err != nil { + return err + } + } + ctx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + if socket != nil { + console, err := socket.ReceiveMaster() + if err != nil { + return fmt.Errorf("failed to retrieve console master: %w", err) + } + if e.console, err = e.parent.Platform.CopyConsole(ctx, console, e.id, e.stdio.Stdin, e.stdio.Stdout, e.stdio.Stderr, &e.wg); err != nil { + return fmt.Errorf("failed to start console copy: %w", err) + } + } else { + if err := pio.Copy(ctx, &e.wg); err != nil { + return fmt.Errorf("failed to start io pipe copy: %w", err) + } + } + pid, err := pidFile.Read() + if err != nil { + return fmt.Errorf("failed to retrieve OCI runtime exec pi: %wd", err) + } + e.pid.pid = pid + return nil +} + +func (e *execProcess) openStdin(path string) error { + sc, err := fifo.OpenFifo(context.Background(), path, syscall.O_WRONLY|syscall.O_NONBLOCK, 0) + if err != nil { + return fmt.Errorf("failed to open stdin fifo %s: %w", path, err) + } + e.stdin = sc + e.closers = append(e.closers, sc) + return nil +} + +func (e *execProcess) Status(ctx context.Context) (string, error) { + s, err := e.parent.Status(ctx) + if err != nil { + return "", err + } + // if the container as a whole is in the pausing/paused state, so are all + // other processes inside the container, use container state here + switch s { + case "paused", "pausing": + return s, nil + } + e.mu.Lock() + defer e.mu.Unlock() + return e.execState.Status(ctx) +} diff --git a/pkg/process/exec_state.go b/cmd/containerd-shim-runc-v2/process/exec_state.go similarity index 99% rename from pkg/process/exec_state.go rename to cmd/containerd-shim-runc-v2/process/exec_state.go index 4c3dd8fba98c..d84709b2c13e 100644 --- a/pkg/process/exec_state.go +++ b/cmd/containerd-shim-runc-v2/process/exec_state.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows /* Copyright The containerd Authors. diff --git a/cmd/containerd-shim-runc-v2/process/init.go b/cmd/containerd-shim-runc-v2/process/init.go new file mode 100644 index 000000000000..6e2f24e1a9bd --- /dev/null +++ b/cmd/containerd-shim-runc-v2/process/init.go @@ -0,0 +1,509 @@ +//go:build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package process + +import ( + "context" + "encoding/json" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/containerd/console" + "github.com/containerd/containerd/v2/core/mount" + google_protobuf "github.com/containerd/containerd/v2/pkg/protobuf/types" + "github.com/containerd/containerd/v2/pkg/stdio" + "github.com/containerd/fifo" + runc "github.com/containerd/go-runc" + "github.com/containerd/log" + specs "github.com/opencontainers/runtime-spec/specs-go" + "golang.org/x/sys/unix" +) + +// Init represents an initial process for a container +type Init struct { + wg sync.WaitGroup + initState initState + + // mu is used to ensure that `Start()` and `Exited()` calls return in + // the right order when invoked in separate goroutines. + // This is the case within the shim implementation as it makes use of + // the reaper interface. + mu sync.Mutex + + waitBlock chan struct{} + + WorkDir string + + id string + Bundle string + console console.Console + Platform stdio.Platform + io *processIO + runtime *runc.Runc + // pausing preserves the pausing state. + pausing atomic.Bool + status int + exited time.Time + pid int + closers []io.Closer + stdin io.Closer + stdio stdio.Stdio + Rootfs string + IoUID int + IoGID int + NoPivotRoot bool + NoNewKeyring bool + CriuWorkPath string +} + +// NewRunc returns a new runc instance for a process +func NewRunc(root, path, namespace, runtime string, systemd bool) *runc.Runc { + if root == "" { + root = RuncRoot + } + return &runc.Runc{ + Command: runtime, + Log: filepath.Join(path, "log.json"), + LogFormat: runc.JSON, + PdeathSignal: unix.SIGKILL, + Root: filepath.Join(root, namespace), + SystemdCgroup: systemd, + } +} + +// New returns a new process +func New(id string, runtime *runc.Runc, stdio stdio.Stdio) *Init { + p := &Init{ + id: id, + runtime: runtime, + stdio: stdio, + status: 0, + waitBlock: make(chan struct{}), + } + p.initState = &createdState{p: p} + return p +} + +// Create the process with the provided config +func (p *Init) Create(ctx context.Context, r *CreateConfig) (retError error) { + var ( + err error + socket *runc.Socket + pio *processIO + pidFile = newPidFile(p.Bundle) + ) + + if r.Terminal { + if socket, err = runc.NewTempConsoleSocket(); err != nil { + return fmt.Errorf("failed to create OCI runtime console socket: %w", err) + } + defer socket.Close() + } else { + if pio, err = createIO(ctx, p.id, p.IoUID, p.IoGID, p.stdio); err != nil { + return fmt.Errorf("failed to create init process I/O: %w", err) + } + p.io = pio + defer func() { + if retError != nil && p.io != nil { + p.io.Close() + } + }() + } + if r.Checkpoint != "" { + return p.createCheckpointedState(r, pidFile) + } + opts := &runc.CreateOpts{ + PidFile: pidFile.Path(), + NoPivot: p.NoPivotRoot, + NoNewKeyring: p.NoNewKeyring, + } + if p.io != nil { + opts.IO = p.io.IO() + } + if socket != nil { + opts.ConsoleSocket = socket + } + + if err := p.runtime.Create(ctx, r.ID, r.Bundle, opts); err != nil { + return p.runtimeError(err, "OCI runtime create failed") + } + if r.Stdin != "" { + if err := p.openStdin(r.Stdin); err != nil { + return err + } + } + ctx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + if socket != nil { + console, err := socket.ReceiveMaster() + if err != nil { + return fmt.Errorf("failed to retrieve console master: %w", err) + } + console, err = p.Platform.CopyConsole(ctx, console, p.id, r.Stdin, r.Stdout, r.Stderr, &p.wg) + if err != nil { + return fmt.Errorf("failed to start console copy: %w", err) + } + p.console = console + } else { + if err := pio.Copy(ctx, &p.wg); err != nil { + return fmt.Errorf("failed to start io pipe copy: %w", err) + } + } + pid, err := pidFile.Read() + if err != nil { + return fmt.Errorf("failed to retrieve OCI runtime container pid: %w", err) + } + p.pid = pid + return nil +} + +func (p *Init) openStdin(path string) error { + sc, err := fifo.OpenFifo(context.Background(), path, unix.O_WRONLY|unix.O_NONBLOCK, 0) + if err != nil { + return fmt.Errorf("failed to open stdin fifo %s: %w", path, err) + } + p.stdin = sc + p.closers = append(p.closers, sc) + return nil +} + +func (p *Init) createCheckpointedState(r *CreateConfig, pidFile *pidFile) error { + opts := &runc.RestoreOpts{ + CheckpointOpts: runc.CheckpointOpts{ + ImagePath: r.Checkpoint, + WorkDir: p.CriuWorkPath, + ParentPath: r.ParentCheckpoint, + }, + PidFile: pidFile.Path(), + NoPivot: p.NoPivotRoot, + Detach: true, + NoSubreaper: true, + } + + if p.io != nil { + opts.IO = p.io.IO() + } + + p.initState = &createdCheckpointState{ + p: p, + opts: opts, + } + return nil +} + +// Wait for the process to exit +func (p *Init) Wait(ctx context.Context) error { + select { + case <-p.waitBlock: + return nil + case <-ctx.Done(): + return ctx.Err() + } +} + +// ID of the process +func (p *Init) ID() string { + return p.id +} + +// Pid of the process +func (p *Init) Pid() int { + return p.pid +} + +// ExitStatus of the process +func (p *Init) ExitStatus() int { + p.mu.Lock() + defer p.mu.Unlock() + + return p.status +} + +// ExitedAt at time when the process exited +func (p *Init) ExitedAt() time.Time { + p.mu.Lock() + defer p.mu.Unlock() + + return p.exited +} + +// Status of the process +func (p *Init) Status(ctx context.Context) (string, error) { + if p.pausing.Load() { + return "pausing", nil + } + + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Status(ctx) +} + +// Start the init process +func (p *Init) Start(ctx context.Context) error { + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Start(ctx) +} + +func (p *Init) start(ctx context.Context) error { + err := p.runtime.Start(ctx, p.id) + return p.runtimeError(err, "OCI runtime start failed") +} + +// SetExited of the init process with the next status +func (p *Init) SetExited(status int) { + p.mu.Lock() + defer p.mu.Unlock() + + p.initState.SetExited(status) +} + +func (p *Init) setExited(status int) { + p.exited = time.Now() + p.status = status + p.Platform.ShutdownConsole(context.Background(), p.console) + close(p.waitBlock) +} + +// Delete the init process +func (p *Init) Delete(ctx context.Context) error { + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Delete(ctx) +} + +func (p *Init) delete(ctx context.Context) error { + if err := waitTimeout(ctx, &p.wg, 10*time.Second); err != nil { + log.G(ctx).WithError(err).Errorf("failed to drain init process %s io", p.id) + } + err := p.runtime.Delete(ctx, p.id, nil) + // ignore errors if a runtime has already deleted the process + // but we still hold metadata and pipes + // + // this is common during a checkpoint, runc will delete the container state + // after a checkpoint and the container will no longer exist within runc + if err != nil { + if strings.Contains(err.Error(), "does not exist") { + err = nil + } else { + err = p.runtimeError(err, "failed to delete task") + } + } + if p.io != nil { + for _, c := range p.closers { + c.Close() + } + p.io.Close() + } + if err2 := mount.UnmountRecursive(p.Rootfs, 0); err2 != nil { + log.G(ctx).WithError(err2).Warn("failed to cleanup rootfs mount") + if err == nil { + err = fmt.Errorf("failed rootfs umount: %w", err2) + } + } + return err +} + +// Resize the init processes console +func (p *Init) Resize(ws console.WinSize) error { + p.mu.Lock() + defer p.mu.Unlock() + + if p.console == nil { + return nil + } + return p.console.Resize(ws) +} + +// Pause the init process and all its child processes +func (p *Init) Pause(ctx context.Context) error { + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Pause(ctx) +} + +// Resume the init process and all its child processes +func (p *Init) Resume(ctx context.Context) error { + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Resume(ctx) +} + +// Kill the init process +func (p *Init) Kill(ctx context.Context, signal uint32, all bool) error { + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Kill(ctx, signal, all) +} + +func (p *Init) kill(ctx context.Context, signal uint32, all bool) error { + err := p.runtime.Kill(ctx, p.id, int(signal), &runc.KillOpts{ + All: all, + }) + return checkKillError(err) +} + +// KillAll processes belonging to the init process +func (p *Init) KillAll(ctx context.Context) error { + p.mu.Lock() + defer p.mu.Unlock() + + err := p.runtime.Kill(ctx, p.id, int(unix.SIGKILL), &runc.KillOpts{ + All: true, + }) + return p.runtimeError(err, "OCI runtime killall failed") +} + +// Stdin of the process +func (p *Init) Stdin() io.Closer { + return p.stdin +} + +// Runtime returns the OCI runtime configured for the init process +func (p *Init) Runtime() *runc.Runc { + return p.runtime +} + +// Exec returns a new child process +func (p *Init) Exec(ctx context.Context, path string, r *ExecConfig) (Process, error) { + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Exec(ctx, path, r) +} + +// exec returns a new exec'd process +func (p *Init) exec(ctx context.Context, path string, r *ExecConfig) (Process, error) { + // process exec request + var spec specs.Process + if err := json.Unmarshal(r.Spec.Value, &spec); err != nil { + return nil, err + } + spec.Terminal = r.Terminal + + e := &execProcess{ + id: r.ID, + path: path, + parent: p, + spec: spec, + stdio: stdio.Stdio{ + Stdin: r.Stdin, + Stdout: r.Stdout, + Stderr: r.Stderr, + Terminal: r.Terminal, + }, + waitBlock: make(chan struct{}), + } + e.execState = &execCreatedState{p: e} + return e, nil +} + +// Checkpoint the init process +func (p *Init) Checkpoint(ctx context.Context, r *CheckpointConfig) error { + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Checkpoint(ctx, r) +} + +func (p *Init) checkpoint(ctx context.Context, r *CheckpointConfig) error { + var actions []runc.CheckpointAction + if !r.Exit { + actions = append(actions, runc.LeaveRunning) + } + // keep criu work directory if criu work dir is set + work := r.WorkDir + if work == "" { + work = filepath.Join(p.WorkDir, "criu-work") + defer os.RemoveAll(work) + } + if err := p.runtime.Checkpoint(ctx, p.id, &runc.CheckpointOpts{ + WorkDir: work, + ImagePath: r.Path, + AllowOpenTCP: r.AllowOpenTCP, + AllowExternalUnixSockets: r.AllowExternalUnixSockets, + AllowTerminal: r.AllowTerminal, + FileLocks: r.FileLocks, + EmptyNamespaces: r.EmptyNamespaces, + }, actions...); err != nil { + dumpLog := filepath.Join(p.Bundle, "criu-dump.log") + if cerr := copyFile(dumpLog, filepath.Join(work, "dump.log")); cerr != nil { + log.G(ctx).WithError(cerr).Error("failed to copy dump.log to criu-dump.log") + } + return fmt.Errorf("%s path= %s", criuError(err), dumpLog) + } + return nil +} + +// Update the processes resource configuration +func (p *Init) Update(ctx context.Context, r *google_protobuf.Any) error { + p.mu.Lock() + defer p.mu.Unlock() + + return p.initState.Update(ctx, r) +} + +func (p *Init) update(ctx context.Context, r *google_protobuf.Any) error { + var resources specs.LinuxResources + if err := json.Unmarshal(r.Value, &resources); err != nil { + return err + } + return p.runtime.Update(ctx, p.id, &resources) +} + +// Stdio of the process +func (p *Init) Stdio() stdio.Stdio { + return p.stdio +} + +func (p *Init) runtimeError(rErr error, msg string) error { + if rErr == nil { + return nil + } + + rMsg, err := getLastRuntimeError(p.runtime) + switch { + case err != nil: + return fmt.Errorf("%s: %s (%s): %w", msg, "unable to retrieve OCI runtime error", err.Error(), rErr) + case rMsg == "": + return fmt.Errorf("%s: %w", msg, rErr) + default: + return fmt.Errorf("%s: %s", msg, rMsg) + } +} + +func withConditionalIO(c stdio.Stdio) runc.IOOpt { + return func(o *runc.IOOption) { + o.OpenStdin = c.Stdin != "" + o.OpenStdout = c.Stdout != "" + o.OpenStderr = c.Stderr != "" + } +} diff --git a/pkg/process/init_state.go b/cmd/containerd-shim-runc-v2/process/init_state.go similarity index 97% rename from pkg/process/init_state.go rename to cmd/containerd-shim-runc-v2/process/init_state.go index 09a17aeeb471..01f5d3e21ff1 100644 --- a/pkg/process/init_state.go +++ b/cmd/containerd-shim-runc-v2/process/init_state.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows /* Copyright The containerd Authors. @@ -24,9 +23,9 @@ import ( "errors" "fmt" - google_protobuf "github.com/containerd/containerd/protobuf/types" + google_protobuf "github.com/containerd/containerd/v2/pkg/protobuf/types" runc "github.com/containerd/go-runc" - "github.com/sirupsen/logrus" + "github.com/containerd/log" ) type initState interface { @@ -236,12 +235,12 @@ func (s *runningState) transition(name string) error { } func (s *runningState) Pause(ctx context.Context) error { - s.p.pausing.set(true) + s.p.pausing.Store(true) // NOTE "pausing" will be returned in the short window // after `transition("paused")`, before `pausing` is reset // to false. That doesn't break the state machine, just // delays the "paused" state a little bit. - defer s.p.pausing.set(false) + defer s.p.pausing.Store(false) if err := s.p.runtime.Pause(ctx, s.p.id); err != nil { return s.p.runtimeError(err, "OCI runtime pause failed") @@ -342,7 +341,7 @@ func (s *pausedState) SetExited(status int) { s.p.setExited(status) if err := s.p.runtime.Resume(context.Background(), s.p.id); err != nil { - logrus.WithError(err).Error("resuming exited container from paused state") + log.L.WithError(err).Error("resuming exited container from paused state") } if err := s.transition("stopped"); err != nil { diff --git a/cmd/containerd-shim-runc-v2/process/io.go b/cmd/containerd-shim-runc-v2/process/io.go new file mode 100644 index 000000000000..982fba720c9c --- /dev/null +++ b/cmd/containerd-shim-runc-v2/process/io.go @@ -0,0 +1,444 @@ +//go:build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package process + +import ( + "context" + "errors" + "fmt" + "io" + "net/url" + "os" + "os/exec" + "path/filepath" + "sync" + "sync/atomic" + "syscall" + "time" + + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/stdio" + "github.com/containerd/fifo" + runc "github.com/containerd/go-runc" + "github.com/containerd/log" +) + +const binaryIOProcTermTimeout = 12 * time.Second // Give logger process solid 10 seconds for cleanup + +var bufPool = sync.Pool{ + New: func() interface{} { + // setting to 4096 to align with PIPE_BUF + // http://man7.org/linux/man-pages/man7/pipe.7.html + buffer := make([]byte, 4096) + return &buffer + }, +} + +type processIO struct { + io runc.IO + + uri *url.URL + copy bool + stdio stdio.Stdio +} + +func (p *processIO) Close() error { + if p.io != nil { + return p.io.Close() + } + return nil +} + +func (p *processIO) IO() runc.IO { + return p.io +} + +func (p *processIO) Copy(ctx context.Context, wg *sync.WaitGroup) error { + if !p.copy { + return nil + } + var cwg sync.WaitGroup + if err := copyPipes(ctx, p.IO(), p.stdio.Stdin, p.stdio.Stdout, p.stdio.Stderr, wg, &cwg); err != nil { + return fmt.Errorf("unable to copy pipes: %w", err) + } + cwg.Wait() + return nil +} + +func createIO(ctx context.Context, id string, ioUID, ioGID int, stdio stdio.Stdio) (*processIO, error) { + pio := &processIO{ + stdio: stdio, + } + if stdio.IsNull() { + i, err := runc.NewNullIO() + if err != nil { + return nil, err + } + pio.io = i + return pio, nil + } + u, err := url.Parse(stdio.Stdout) + if err != nil { + return nil, fmt.Errorf("unable to parse stdout uri: %w", err) + } + if u.Scheme == "" { + u.Scheme = "fifo" + } + pio.uri = u + switch u.Scheme { + case "fifo": + pio.copy = true + pio.io, err = runc.NewPipeIO(ioUID, ioGID, withConditionalIO(stdio)) + case "binary": + pio.io, err = NewBinaryIO(ctx, id, u) + case "file": + filePath := u.Path + if err := os.MkdirAll(filepath.Dir(filePath), 0755); err != nil { + return nil, err + } + var f *os.File + f, err = os.OpenFile(filePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + return nil, err + } + f.Close() + pio.stdio.Stdout = filePath + pio.stdio.Stderr = filePath + pio.copy = true + pio.io, err = runc.NewPipeIO(ioUID, ioGID, withConditionalIO(stdio)) + default: + return nil, fmt.Errorf("unknown STDIO scheme %s", u.Scheme) + } + if err != nil { + return nil, err + } + return pio, nil +} + +func copyPipes(ctx context.Context, rio runc.IO, stdin, stdout, stderr string, wg, cwg *sync.WaitGroup) error { + var sameFile *countingWriteCloser + for _, i := range []struct { + name string + dest func(wc io.WriteCloser, rc io.Closer) + }{ + { + name: stdout, + dest: func(wc io.WriteCloser, rc io.Closer) { + wg.Add(1) + cwg.Add(1) + go func() { + cwg.Done() + p := bufPool.Get().(*[]byte) + defer bufPool.Put(p) + if _, err := io.CopyBuffer(wc, rio.Stdout(), *p); err != nil { + log.G(ctx).Warn("error copying stdout") + } + wg.Done() + wc.Close() + if rc != nil { + rc.Close() + } + }() + }, + }, { + name: stderr, + dest: func(wc io.WriteCloser, rc io.Closer) { + wg.Add(1) + cwg.Add(1) + go func() { + cwg.Done() + p := bufPool.Get().(*[]byte) + defer bufPool.Put(p) + if _, err := io.CopyBuffer(wc, rio.Stderr(), *p); err != nil { + log.G(ctx).Warn("error copying stderr") + } + wg.Done() + wc.Close() + if rc != nil { + rc.Close() + } + }() + }, + }, + } { + ok, err := fifo.IsFifo(i.name) + if err != nil { + return err + } + var ( + fw io.WriteCloser + fr io.Closer + ) + if ok { + if fw, err = fifo.OpenFifo(ctx, i.name, syscall.O_WRONLY, 0); err != nil { + return fmt.Errorf("containerd-shim: opening w/o fifo %q failed: %w", i.name, err) + } + if fr, err = fifo.OpenFifo(ctx, i.name, syscall.O_RDONLY, 0); err != nil { + return fmt.Errorf("containerd-shim: opening r/o fifo %q failed: %w", i.name, err) + } + } else { + if sameFile != nil { + sameFile.bumpCount(1) + i.dest(sameFile, nil) + continue + } + if fw, err = os.OpenFile(i.name, syscall.O_WRONLY|syscall.O_APPEND, 0); err != nil { + return fmt.Errorf("containerd-shim: opening file %q failed: %w", i.name, err) + } + if stdout == stderr { + sameFile = newCountingWriteCloser(fw, 1) + } + } + i.dest(fw, fr) + } + if stdin == "" { + return nil + } + f, err := fifo.OpenFifo(context.Background(), stdin, syscall.O_RDONLY|syscall.O_NONBLOCK, 0) + if err != nil { + return fmt.Errorf("containerd-shim: opening %s failed: %s", stdin, err) + } + cwg.Add(1) + go func() { + cwg.Done() + p := bufPool.Get().(*[]byte) + defer bufPool.Put(p) + + io.CopyBuffer(rio.Stdin(), f, *p) + rio.Stdin().Close() + f.Close() + }() + return nil +} + +// countingWriteCloser masks io.Closer() until close has been invoked a certain number of times. +type countingWriteCloser struct { + io.WriteCloser + count atomic.Int64 +} + +func newCountingWriteCloser(c io.WriteCloser, count int64) *countingWriteCloser { + cwc := &countingWriteCloser{ + c, + atomic.Int64{}, + } + cwc.bumpCount(count) + return cwc +} + +func (c *countingWriteCloser) bumpCount(delta int64) int64 { + return c.count.Add(delta) +} + +func (c *countingWriteCloser) Close() error { + if c.bumpCount(-1) > 0 { + return nil + } + return c.WriteCloser.Close() +} + +// NewBinaryIO runs a custom binary process for pluggable shim logging +func NewBinaryIO(ctx context.Context, id string, uri *url.URL) (_ runc.IO, err error) { + ns, err := namespaces.NamespaceRequired(ctx) + if err != nil { + return nil, err + } + + var closers []func() error + defer func() { + if err == nil { + return + } + result := []error{err} + for _, fn := range closers { + result = append(result, fn()) + } + err = errors.Join(result...) + }() + + out, err := newPipe() + if err != nil { + return nil, fmt.Errorf("failed to create stdout pipes: %w", err) + } + closers = append(closers, out.Close) + + serr, err := newPipe() + if err != nil { + return nil, fmt.Errorf("failed to create stderr pipes: %w", err) + } + closers = append(closers, serr.Close) + + r, w, err := os.Pipe() + if err != nil { + return nil, err + } + closers = append(closers, r.Close, w.Close) + + cmd := NewBinaryCmd(uri, id, ns) + cmd.ExtraFiles = append(cmd.ExtraFiles, out.r, serr.r, w) + // don't need to register this with the reaper or wait when + // running inside a shim + if err := cmd.Start(); err != nil { + return nil, fmt.Errorf("failed to start binary process: %w", err) + } + closers = append(closers, func() error { return cmd.Process.Kill() }) + + // close our side of the pipe after start + if err := w.Close(); err != nil { + return nil, fmt.Errorf("failed to close write pipe after start: %w", err) + } + + // wait for the logging binary to be ready + b := make([]byte, 1) + if _, err := r.Read(b); err != nil && err != io.EOF { + return nil, fmt.Errorf("failed to read from logging binary: %w", err) + } + + return &binaryIO{ + cmd: cmd, + out: out, + err: serr, + }, nil +} + +type binaryIO struct { + cmd *exec.Cmd + out, err *pipe +} + +func (b *binaryIO) CloseAfterStart() error { + var result []error + + for _, v := range []*pipe{b.out, b.err} { + if v != nil { + if err := v.r.Close(); err != nil { + result = append(result, err) + } + } + } + + return errors.Join(result...) +} + +func (b *binaryIO) Close() error { + var result []error + + for _, v := range []*pipe{b.out, b.err} { + if v != nil { + if err := v.Close(); err != nil { + result = append(result, err) + } + } + } + + if err := b.cancel(); err != nil { + result = append(result, err) + } + + return errors.Join(result...) +} + +func (b *binaryIO) cancel() error { + if b.cmd == nil || b.cmd.Process == nil { + return nil + } + + // Send SIGTERM first, so logger process has a chance to flush and exit properly + if err := b.cmd.Process.Signal(syscall.SIGTERM); err != nil { + result := []error{fmt.Errorf("failed to send SIGTERM: %w", err)} + + log.L.WithError(err).Warn("failed to send SIGTERM signal, killing logging shim") + + if err := b.cmd.Process.Kill(); err != nil { + result = append(result, fmt.Errorf("failed to kill process after faulty SIGTERM: %w", err)) + } + + return errors.Join(result...) + } + + done := make(chan error, 1) + go func() { + done <- b.cmd.Wait() + }() + + select { + case err := <-done: + return err + case <-time.After(binaryIOProcTermTimeout): + log.L.Warn("failed to wait for shim logger process to exit, killing") + + err := b.cmd.Process.Kill() + if err != nil { + return fmt.Errorf("failed to kill shim logger process: %w", err) + } + + return nil + } +} + +func (b *binaryIO) Stdin() io.WriteCloser { + return nil +} + +func (b *binaryIO) Stdout() io.ReadCloser { + return nil +} + +func (b *binaryIO) Stderr() io.ReadCloser { + return nil +} + +func (b *binaryIO) Set(cmd *exec.Cmd) { + if b.out != nil { + cmd.Stdout = b.out.w + } + if b.err != nil { + cmd.Stderr = b.err.w + } +} + +func newPipe() (*pipe, error) { + r, w, err := os.Pipe() + if err != nil { + return nil, err + } + return &pipe{ + r: r, + w: w, + }, nil +} + +type pipe struct { + r *os.File + w *os.File +} + +func (p *pipe) Close() error { + var result []error + + if err := p.w.Close(); err != nil { + result = append(result, fmt.Errorf("pipe: failed to close write pipe: %w", err)) + } + + if err := p.r.Close(); err != nil { + result = append(result, fmt.Errorf("pipe: failed to close read pipe: %w", err)) + } + + return errors.Join(result...) +} diff --git a/cmd/containerd-shim-runc-v2/process/io_test.go b/cmd/containerd-shim-runc-v2/process/io_test.go new file mode 100644 index 000000000000..6bb38ba4a73d --- /dev/null +++ b/cmd/containerd-shim-runc-v2/process/io_test.go @@ -0,0 +1,97 @@ +//go:build linux + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package process + +import ( + "context" + "net/url" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/containerd/containerd/v2/pkg/namespaces" +) + +func TestNewBinaryIO(t *testing.T) { + ctx := namespaces.WithNamespace(context.Background(), "test") + uri, _ := url.Parse("binary:///bin/echo?test") + + before := descriptorCount(t) + + io, err := NewBinaryIO(ctx, "1", uri) + if err != nil { + t.Fatal(err) + } + + err = io.Close() + if err != nil { + t.Fatal(err) + } + + after := descriptorCount(t) + if before != after-1 { // one descriptor must be closed from shim logger side + t.Fatalf("some descriptors weren't closed (%d != %d -1)", before, after) + } +} + +func TestNewBinaryIOCleanup(t *testing.T) { + ctx := namespaces.WithNamespace(context.Background(), "test") + uri, _ := url.Parse("binary:///not/existing") + + before := descriptorCount(t) + _, err := NewBinaryIO(ctx, "2", uri) + if err == nil { + t.Fatal("error expected for invalid binary") + } + + after := descriptorCount(t) + if before != after { + t.Fatalf("some descriptors weren't closed (%d != %d)", before, after) + } +} + +func descriptorCount(t *testing.T) int { + t.Helper() + const dir = "/proc/self/fd" + files, _ := os.ReadDir(dir) + + // Go 1.23+ uses pidfd instead of PID for processes started by a user, + // if possible (see https://go.dev/cl/570036). As a side effect, every + // os.StartProcess or os.FindProcess call results in an extra opened + // file descriptor, which is only closed in p.Wait or p.Release. + // + // To retain compatibility with previous Go versions (or Go 1.23+ + // behavior on older kernels), let's not count pidfds. + // + // TODO: if the proposal to check for internal file descriptors + // (https://go.dev/issues/67639) is accepted, we can use that + // instead to detect internal fds in use by the Go runtime. + count := 0 + for _, file := range files { + sym, err := os.Readlink(filepath.Join(dir, file.Name())) + // Either pidfd:[70517] or anon_inode:[pidfd] (on Linux 5.4). + if err == nil && strings.Contains(sym, "pidfd") { + continue + } + count++ + } + + return count +} diff --git a/pkg/process/io_util.go b/cmd/containerd-shim-runc-v2/process/io_util.go similarity index 93% rename from pkg/process/io_util.go rename to cmd/containerd-shim-runc-v2/process/io_util.go index e814c114b9d0..731ac5013a22 100644 --- a/pkg/process/io_util.go +++ b/cmd/containerd-shim-runc-v2/process/io_util.go @@ -19,8 +19,7 @@ package process import ( "net/url" "os" - - exec "golang.org/x/sys/execabs" + "os/exec" ) // NewBinaryCmd returns a Cmd to be used to start a logging binary. @@ -46,7 +45,7 @@ func NewBinaryCmd(binaryURI *url.URL, id, ns string) *exec.Cmd { } // CloseFiles closes any files passed in. -// It it used for cleanup in the event of unexpected errors. +// It is used for cleanup in the event of unexpected errors. func CloseFiles(files ...*os.File) { for _, file := range files { file.Close() diff --git a/cmd/containerd-shim-runc-v2/process/process.go b/cmd/containerd-shim-runc-v2/process/process.go new file mode 100644 index 000000000000..59fff03b0838 --- /dev/null +++ b/cmd/containerd-shim-runc-v2/process/process.go @@ -0,0 +1,56 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package process + +import ( + "context" + "io" + "time" + + "github.com/containerd/console" + "github.com/containerd/containerd/v2/pkg/stdio" +) + +// Process on a system +type Process interface { + // ID returns the id for the process + ID() string + // Pid returns the pid for the process + Pid() int + // ExitStatus returns the exit status + ExitStatus() int + // ExitedAt is the time the process exited + ExitedAt() time.Time + // Stdin returns the process STDIN + Stdin() io.Closer + // Stdio returns io information for the container + Stdio() stdio.Stdio + // Status returns the process status + Status(context.Context) (string, error) + // Wait blocks until the process has exited + Wait(context.Context) error + // Resize resizes the process console + Resize(ws console.WinSize) error + // Start execution of the process + Start(context.Context) error + // Delete deletes the process and its resourcess + Delete(context.Context) error + // Kill kills the process + Kill(context.Context, uint32, bool) error + // SetExited sets the exit status for the process + SetExited(status int) +} diff --git a/cmd/containerd-shim-runc-v2/process/types.go b/cmd/containerd-shim-runc-v2/process/types.go new file mode 100644 index 000000000000..2d9bd5f6be4d --- /dev/null +++ b/cmd/containerd-shim-runc-v2/process/types.go @@ -0,0 +1,66 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package process + +import ( + google_protobuf "github.com/containerd/containerd/v2/pkg/protobuf/types" +) + +// Mount holds filesystem mount configuration +type Mount struct { + Type string + Source string + Target string + Options []string +} + +// CreateConfig hold task creation configuration +type CreateConfig struct { + ID string + Bundle string + Runtime string + Rootfs []Mount + Terminal bool + Stdin string + Stdout string + Stderr string + Checkpoint string + ParentCheckpoint string + Options *google_protobuf.Any +} + +// ExecConfig holds exec creation configuration +type ExecConfig struct { + ID string + Terminal bool + Stdin string + Stdout string + Stderr string + Spec *google_protobuf.Any +} + +// CheckpointConfig holds task checkpoint configuration +type CheckpointConfig struct { + WorkDir string + Path string + Exit bool + AllowOpenTCP bool + AllowExternalUnixSockets bool + AllowTerminal bool + FileLocks bool + EmptyNamespaces []string +} diff --git a/cmd/containerd-shim-runc-v2/process/utils.go b/cmd/containerd-shim-runc-v2/process/utils.go new file mode 100644 index 000000000000..848ce8cc1319 --- /dev/null +++ b/cmd/containerd-shim-runc-v2/process/utils.go @@ -0,0 +1,186 @@ +//go:build !windows + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package process + +import ( + "context" + "encoding/json" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "sync" + "time" + + "github.com/containerd/errdefs" + runc "github.com/containerd/go-runc" + "golang.org/x/sys/unix" +) + +const ( + // RuncRoot is the path to the root runc state directory + RuncRoot = "/run/containerd/runc" + // InitPidFile name of the file that contains the init pid + InitPidFile = "init.pid" +) + +// safePid is a thread safe wrapper for pid. +type safePid struct { + sync.Mutex + pid int +} + +func (s *safePid) get() int { + s.Lock() + defer s.Unlock() + return s.pid +} + +// TODO(mlaventure): move to runc package? +func getLastRuntimeError(r *runc.Runc) (string, error) { + if r.Log == "" { + return "", nil + } + + f, err := os.OpenFile(r.Log, os.O_RDONLY, 0400) + if err != nil { + return "", err + } + defer f.Close() + + var ( + errMsg string + log struct { + Level string + Msg string + Time time.Time + } + ) + + dec := json.NewDecoder(f) + for err = nil; err == nil; { + if err = dec.Decode(&log); err != nil && err != io.EOF { + return "", err + } + if log.Level == "error" { + errMsg = strings.TrimSpace(log.Msg) + } + } + + return errMsg, nil +} + +// criuError returns only the first line of the error message from criu +// it tries to add an invalid dump log location when returning the message +func criuError(err error) string { + parts := strings.Split(err.Error(), "\n") + return parts[0] +} + +func copyFile(to, from string) error { + ff, err := os.Open(from) + if err != nil { + return err + } + defer ff.Close() + tt, err := os.Create(to) + if err != nil { + return err + } + defer tt.Close() + + p := bufPool.Get().(*[]byte) + defer bufPool.Put(p) + _, err = io.CopyBuffer(tt, ff, *p) + return err +} + +func checkKillError(err error) error { + if err == nil { + return nil + } + if strings.Contains(err.Error(), "os: process already finished") || + strings.Contains(err.Error(), "container not running") || + strings.Contains(strings.ToLower(err.Error()), "no such process") || + err == unix.ESRCH { + return fmt.Errorf("process already finished: %w", errdefs.ErrNotFound) + } else if strings.Contains(err.Error(), "does not exist") { + return fmt.Errorf("no such container: %w", errdefs.ErrNotFound) + } + return fmt.Errorf("unknown error after kill: %w", err) +} + +func newPidFile(bundle string) *pidFile { + return &pidFile{ + path: filepath.Join(bundle, InitPidFile), + } +} + +func newExecPidFile(bundle, id string) *pidFile { + return &pidFile{ + path: filepath.Join(bundle, fmt.Sprintf("%s.pid", id)), + } +} + +type pidFile struct { + path string +} + +func (p *pidFile) Path() string { + return p.path +} + +func (p *pidFile) Read() (int, error) { + return runc.ReadPidFile(p.path) +} + +// waitTimeout handles waiting on a waitgroup with a specified timeout. +// this is commonly used for waiting on IO to finish after a process has exited +func waitTimeout(ctx context.Context, wg *sync.WaitGroup, timeout time.Duration) error { + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + done := make(chan struct{}) + go func() { + wg.Wait() + close(done) + }() + select { + case <-done: + return nil + case <-ctx.Done(): + return ctx.Err() + } +} + +func stateName(v interface{}) string { + switch v.(type) { + case *runningState, *execRunningState: + return "running" + case *createdState, *execCreatedState, *createdCheckpointState: + return "created" + case *pausedState: + return "paused" + case *deletedState: + return "deleted" + case *stoppedState: + return "stopped" + } + panic(fmt.Errorf("invalid state %v", v)) +} diff --git a/cmd/containerd-shim-runc-v2/runc/container.go b/cmd/containerd-shim-runc-v2/runc/container.go new file mode 100644 index 000000000000..656f30713129 --- /dev/null +++ b/cmd/containerd-shim-runc-v2/runc/container.go @@ -0,0 +1,502 @@ +//go:build linux + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package runc + +import ( + "context" + "encoding/json" + "fmt" + "os" + "path/filepath" + "sync" + + "github.com/containerd/cgroups/v3" + "github.com/containerd/cgroups/v3/cgroup1" + cgroupsv2 "github.com/containerd/cgroups/v3/cgroup2" + "github.com/containerd/console" + "github.com/containerd/containerd/api/runtime/task/v3" + "github.com/containerd/containerd/api/types/runc/options" + "github.com/containerd/errdefs" + "github.com/containerd/errdefs/pkg/errgrpc" + "github.com/containerd/log" + "github.com/containerd/typeurl/v2" + + "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/process" + "github.com/containerd/containerd/v2/core/mount" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/stdio" +) + +// NewContainer returns a new runc container +func NewContainer(ctx context.Context, platform stdio.Platform, r *task.CreateTaskRequest) (_ *Container, retErr error) { + ns, err := namespaces.NamespaceRequired(ctx) + if err != nil { + return nil, fmt.Errorf("create namespace: %w", err) + } + + opts := &options.Options{} + if r.Options.GetValue() != nil { + v, err := typeurl.UnmarshalAny(r.Options) + if err != nil { + return nil, err + } + if v != nil { + opts = v.(*options.Options) + } + } + + var pmounts []process.Mount + for _, m := range r.Rootfs { + pmounts = append(pmounts, process.Mount{ + Type: m.Type, + Source: m.Source, + Target: m.Target, + Options: m.Options, + }) + } + + rootfs := "" + if len(pmounts) > 0 { + rootfs = filepath.Join(r.Bundle, "rootfs") + if err := os.Mkdir(rootfs, 0711); err != nil && !os.IsExist(err) { + return nil, err + } + } + + config := &process.CreateConfig{ + ID: r.ID, + Bundle: r.Bundle, + Runtime: opts.BinaryName, + Rootfs: pmounts, + Terminal: r.Terminal, + Stdin: r.Stdin, + Stdout: r.Stdout, + Stderr: r.Stderr, + Checkpoint: r.Checkpoint, + ParentCheckpoint: r.ParentCheckpoint, + Options: r.Options, + } + + if err := WriteOptions(r.Bundle, opts); err != nil { + return nil, err + } + // For historical reason, we write opts.BinaryName as well as the entire opts + if err := WriteRuntime(r.Bundle, opts.BinaryName); err != nil { + return nil, err + } + + var mounts []mount.Mount + for _, pm := range pmounts { + mounts = append(mounts, mount.Mount{ + Type: pm.Type, + Source: pm.Source, + Target: pm.Target, + Options: pm.Options, + }) + } + defer func() { + if retErr != nil { + if err := mount.UnmountMounts(mounts, rootfs, 0); err != nil { + log.G(ctx).WithError(err).Warn("failed to cleanup rootfs mount") + } + } + }() + if err := mount.All(mounts, rootfs); err != nil { + return nil, fmt.Errorf("failed to mount rootfs component: %w", err) + } + + p, err := newInit( + ctx, + r.Bundle, + filepath.Join(r.Bundle, "work"), + ns, + platform, + config, + opts, + rootfs, + ) + if err != nil { + return nil, errgrpc.ToGRPC(err) + } + if err := p.Create(ctx, config); err != nil { + return nil, errgrpc.ToGRPC(err) + } + container := &Container{ + ID: r.ID, + Bundle: r.Bundle, + process: p, + processes: make(map[string]process.Process), + reservedProcess: make(map[string]struct{}), + } + pid := p.Pid() + if pid > 0 { + if cg, err := loadProcessCgroup(ctx, pid); err == nil { + container.cgroup = cg + } + } + return container, nil +} + +const optionsFilename = "options.json" + +// ReadOptions reads the option information from the path. +// When the file does not exist, ReadOptions returns nil without an error. +func ReadOptions(path string) (*options.Options, error) { + filePath := filepath.Join(path, optionsFilename) + if _, err := os.Stat(filePath); err != nil { + if os.IsNotExist(err) { + return nil, nil + } + return nil, err + } + + data, err := os.ReadFile(filePath) + if err != nil { + return nil, err + } + var opts options.Options + if err := json.Unmarshal(data, &opts); err != nil { + return nil, err + } + return &opts, nil +} + +// WriteOptions writes the options information into the path +func WriteOptions(path string, opts *options.Options) error { + data, err := json.Marshal(opts) + if err != nil { + return err + } + return os.WriteFile(filepath.Join(path, optionsFilename), data, 0600) +} + +// ReadRuntime reads the runtime information from the path +func ReadRuntime(path string) (string, error) { + data, err := os.ReadFile(filepath.Join(path, "runtime")) + if err != nil { + return "", err + } + return string(data), nil +} + +// WriteRuntime writes the runtime information into the path +func WriteRuntime(path, runtime string) error { + return os.WriteFile(filepath.Join(path, "runtime"), []byte(runtime), 0600) +} + +func newInit(ctx context.Context, path, workDir, namespace string, platform stdio.Platform, + r *process.CreateConfig, options *options.Options, rootfs string) (*process.Init, error) { + runtime := process.NewRunc(options.Root, path, namespace, options.BinaryName, options.SystemdCgroup) + p := process.New(r.ID, runtime, stdio.Stdio{ + Stdin: r.Stdin, + Stdout: r.Stdout, + Stderr: r.Stderr, + Terminal: r.Terminal, + }) + p.Bundle = r.Bundle + p.Platform = platform + p.Rootfs = rootfs + p.WorkDir = workDir + p.IoUID = int(options.IoUid) + p.IoGID = int(options.IoGid) + p.NoPivotRoot = options.NoPivotRoot + p.NoNewKeyring = options.NoNewKeyring + p.CriuWorkPath = options.CriuWorkPath + if p.CriuWorkPath == "" { + // if criu work path not set, use container WorkDir + p.CriuWorkPath = p.WorkDir + } + return p, nil +} + +// Container for operating on a runc container and its processes +type Container struct { + mu sync.Mutex + + // ID of the container + ID string + // Bundle path + Bundle string + + // cgroup is either cgroups.Cgroup or *cgroupsv2.Manager + cgroup interface{} + process process.Process + processes map[string]process.Process + reservedProcess map[string]struct{} +} + +// All processes in the container +func (c *Container) All() (o []process.Process) { + c.mu.Lock() + defer c.mu.Unlock() + + for _, p := range c.processes { + o = append(o, p) + } + if c.process != nil { + o = append(o, c.process) + } + return o +} + +// ExecdProcesses added to the container +func (c *Container) ExecdProcesses() (o []process.Process) { + c.mu.Lock() + defer c.mu.Unlock() + for _, p := range c.processes { + o = append(o, p) + } + return o +} + +// Pid of the main process of a container +func (c *Container) Pid() int { + c.mu.Lock() + defer c.mu.Unlock() + return c.process.Pid() +} + +// Cgroup of the container +func (c *Container) Cgroup() interface{} { + c.mu.Lock() + defer c.mu.Unlock() + return c.cgroup +} + +// CgroupSet sets the cgroup to the container +func (c *Container) CgroupSet(cg interface{}) { + c.mu.Lock() + c.cgroup = cg + c.mu.Unlock() +} + +// Process returns the process by id +func (c *Container) Process(id string) (process.Process, error) { + c.mu.Lock() + defer c.mu.Unlock() + if id == "" { + if c.process == nil { + return nil, fmt.Errorf("container must be created: %w", errdefs.ErrFailedPrecondition) + } + return c.process, nil + } + p, ok := c.processes[id] + if !ok { + return nil, fmt.Errorf("process does not exist %s: %w", id, errdefs.ErrNotFound) + } + return p, nil +} + +// ReserveProcess checks for the existence of an id and atomically +// reserves the process id if it does not already exist +// +// Returns true if the process id was successfully reserved and a +// cancel func to release the reservation +func (c *Container) ReserveProcess(id string) (bool, func()) { + c.mu.Lock() + defer c.mu.Unlock() + + if _, ok := c.processes[id]; ok { + return false, nil + } + if _, ok := c.reservedProcess[id]; ok { + return false, nil + } + c.reservedProcess[id] = struct{}{} + return true, func() { + c.mu.Lock() + defer c.mu.Unlock() + delete(c.reservedProcess, id) + } +} + +// ProcessAdd adds a new process to the container +func (c *Container) ProcessAdd(process process.Process) { + c.mu.Lock() + defer c.mu.Unlock() + + delete(c.reservedProcess, process.ID()) + c.processes[process.ID()] = process +} + +// ProcessRemove removes the process by id from the container +func (c *Container) ProcessRemove(id string) { + c.mu.Lock() + defer c.mu.Unlock() + delete(c.processes, id) +} + +// Start a container process +func (c *Container) Start(ctx context.Context, r *task.StartRequest) (process.Process, error) { + p, err := c.Process(r.ExecID) + if err != nil { + return nil, err + } + if err := p.Start(ctx); err != nil { + return p, err + } + return p, nil +} + +// Delete the container or a process by id +func (c *Container) Delete(ctx context.Context, r *task.DeleteRequest) (process.Process, error) { + p, err := c.Process(r.ExecID) + if err != nil { + return nil, err + } + if err := p.Delete(ctx); err != nil { + return nil, err + } + if r.ExecID != "" { + c.ProcessRemove(r.ExecID) + } + return p, nil +} + +// Exec an additional process +func (c *Container) Exec(ctx context.Context, r *task.ExecProcessRequest) (process.Process, error) { + process, err := c.process.(*process.Init).Exec(ctx, c.Bundle, &process.ExecConfig{ + ID: r.ExecID, + Terminal: r.Terminal, + Stdin: r.Stdin, + Stdout: r.Stdout, + Stderr: r.Stderr, + Spec: r.Spec, + }) + if err != nil { + return nil, err + } + c.ProcessAdd(process) + return process, nil +} + +// Pause the container +func (c *Container) Pause(ctx context.Context) error { + return c.process.(*process.Init).Pause(ctx) +} + +// Resume the container +func (c *Container) Resume(ctx context.Context) error { + return c.process.(*process.Init).Resume(ctx) +} + +// ResizePty of a process +func (c *Container) ResizePty(ctx context.Context, r *task.ResizePtyRequest) error { + p, err := c.Process(r.ExecID) + if err != nil { + return err + } + ws := console.WinSize{ + Width: uint16(r.Width), + Height: uint16(r.Height), + } + return p.Resize(ws) +} + +// Kill a process +func (c *Container) Kill(ctx context.Context, r *task.KillRequest) error { + p, err := c.Process(r.ExecID) + if err != nil { + return err + } + return p.Kill(ctx, r.Signal, r.All) +} + +// CloseIO of a process +func (c *Container) CloseIO(ctx context.Context, r *task.CloseIORequest) error { + p, err := c.Process(r.ExecID) + if err != nil { + return err + } + if stdin := p.Stdin(); stdin != nil { + if err := stdin.Close(); err != nil { + return fmt.Errorf("close stdin: %w", err) + } + } + return nil +} + +// Checkpoint the container +func (c *Container) Checkpoint(ctx context.Context, r *task.CheckpointTaskRequest) error { + p, err := c.Process("") + if err != nil { + return err + } + + var opts options.CheckpointOptions + if r.Options != nil { + if err := typeurl.UnmarshalTo(r.Options, &opts); err != nil { + return err + } + } + return p.(*process.Init).Checkpoint(ctx, &process.CheckpointConfig{ + Path: r.Path, + Exit: opts.Exit, + AllowOpenTCP: opts.OpenTcp, + AllowExternalUnixSockets: opts.ExternalUnixSockets, + AllowTerminal: opts.Terminal, + FileLocks: opts.FileLocks, + EmptyNamespaces: opts.EmptyNamespaces, + WorkDir: opts.WorkPath, + }) +} + +// Update the resource information of a running container +func (c *Container) Update(ctx context.Context, r *task.UpdateTaskRequest) error { + p, err := c.Process("") + if err != nil { + return err + } + return p.(*process.Init).Update(ctx, r.Resources) +} + +// HasPid returns true if the container owns a specific pid +func (c *Container) HasPid(pid int) bool { + if c.Pid() == pid { + return true + } + for _, p := range c.All() { + if p.Pid() == pid { + return true + } + } + return false +} + +func loadProcessCgroup(ctx context.Context, pid int) (cg interface{}, err error) { + if cgroups.Mode() == cgroups.Unified { + g, err := cgroupsv2.PidGroupPath(pid) + if err != nil { + log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid) + return nil, err + } + cg, err = cgroupsv2.Load(g) + if err != nil { + log.G(ctx).WithError(err).Errorf("loading cgroup2 for %d", pid) + return nil, err + } + } else { + cg, err = cgroup1.Load(cgroup1.PidPath(pid)) + if err != nil { + log.G(ctx).WithError(err).Errorf("loading cgroup for %d", pid) + return nil, err + } + } + return cg, nil +} diff --git a/cmd/containerd-shim-runc-v2/runc/platform.go b/cmd/containerd-shim-runc-v2/runc/platform.go new file mode 100644 index 000000000000..68b00ab676cd --- /dev/null +++ b/cmd/containerd-shim-runc-v2/runc/platform.go @@ -0,0 +1,202 @@ +//go:build linux + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package runc + +import ( + "context" + "errors" + "fmt" + "io" + "net/url" + "os" + "sync" + "syscall" + + "github.com/containerd/console" + "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/process" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/stdio" + "github.com/containerd/fifo" +) + +var bufPool = sync.Pool{ + New: func() interface{} { + // setting to 4096 to align with PIPE_BUF + // http://man7.org/linux/man-pages/man7/pipe.7.html + buffer := make([]byte, 4096) + return &buffer + }, +} + +// NewPlatform returns a linux platform for use with I/O operations +func NewPlatform() (stdio.Platform, error) { + epoller, err := console.NewEpoller() + if err != nil { + return nil, fmt.Errorf("failed to initialize epoller: %w", err) + } + go epoller.Wait() + return &linuxPlatform{ + epoller: epoller, + }, nil +} + +type linuxPlatform struct { + epoller *console.Epoller +} + +func (p *linuxPlatform) CopyConsole(ctx context.Context, console console.Console, id, stdin, stdout, stderr string, wg *sync.WaitGroup) (cons console.Console, retErr error) { + if p.epoller == nil { + return nil, errors.New("uninitialized epoller") + } + + epollConsole, err := p.epoller.Add(console) + if err != nil { + return nil, err + } + + var cwg sync.WaitGroup + if stdin != "" { + in, err := fifo.OpenFifo(context.Background(), stdin, syscall.O_RDONLY|syscall.O_NONBLOCK, 0) + if err != nil { + return nil, err + } + cwg.Add(1) + go func() { + cwg.Done() + bp := bufPool.Get().(*[]byte) + defer bufPool.Put(bp) + io.CopyBuffer(epollConsole, in, *bp) + // we need to shutdown epollConsole when pipe broken + epollConsole.Shutdown(p.epoller.CloseConsole) + epollConsole.Close() + in.Close() + }() + } + + uri, err := url.Parse(stdout) + if err != nil { + return nil, fmt.Errorf("unable to parse stdout uri: %w", err) + } + + switch uri.Scheme { + case "binary": + ns, err := namespaces.NamespaceRequired(ctx) + if err != nil { + return nil, err + } + + cmd := process.NewBinaryCmd(uri, id, ns) + + // In case of unexpected errors during logging binary start, close open pipes + var filesToClose []*os.File + + defer func() { + if retErr != nil { + process.CloseFiles(filesToClose...) + } + }() + + // Create pipe to be used by logging binary for Stdout + outR, outW, err := os.Pipe() + if err != nil { + return nil, fmt.Errorf("failed to create stdout pipes: %w", err) + } + filesToClose = append(filesToClose, outR) + + // Stderr is created for logging binary but unused when terminal is true + serrR, _, err := os.Pipe() + if err != nil { + return nil, fmt.Errorf("failed to create stderr pipes: %w", err) + } + filesToClose = append(filesToClose, serrR) + + r, w, err := os.Pipe() + if err != nil { + return nil, err + } + filesToClose = append(filesToClose, r) + + cmd.ExtraFiles = append(cmd.ExtraFiles, outR, serrR, w) + + wg.Add(1) + cwg.Add(1) + go func() { + cwg.Done() + io.Copy(outW, epollConsole) + outW.Close() + wg.Done() + }() + + if err := cmd.Start(); err != nil { + return nil, fmt.Errorf("failed to start logging binary process: %w", err) + } + + // Close our side of the pipe after start + if err := w.Close(); err != nil { + return nil, fmt.Errorf("failed to close write pipe after start: %w", err) + } + + // Wait for the logging binary to be ready + b := make([]byte, 1) + if _, err := r.Read(b); err != nil && err != io.EOF { + return nil, fmt.Errorf("failed to read from logging binary: %w", err) + } + cwg.Wait() + + default: + outw, err := fifo.OpenFifo(ctx, stdout, syscall.O_WRONLY, 0) + if err != nil { + return nil, err + } + outr, err := fifo.OpenFifo(ctx, stdout, syscall.O_RDONLY, 0) + if err != nil { + return nil, err + } + wg.Add(1) + cwg.Add(1) + go func() { + cwg.Done() + buf := bufPool.Get().(*[]byte) + defer bufPool.Put(buf) + io.CopyBuffer(outw, epollConsole, *buf) + + outw.Close() + outr.Close() + wg.Done() + }() + cwg.Wait() + } + + return epollConsole, nil +} + +func (p *linuxPlatform) ShutdownConsole(ctx context.Context, cons console.Console) error { + if p.epoller == nil { + return errors.New("uninitialized epoller") + } + epollConsole, ok := cons.(*console.EpollConsole) + if !ok { + return fmt.Errorf("expected EpollConsole, got %#v", cons) + } + return epollConsole.Shutdown(p.epoller.CloseConsole) +} + +func (p *linuxPlatform) Close() error { + return p.epoller.Close() +} diff --git a/cmd/containerd-shim-runc-v2/runc/util.go b/cmd/containerd-shim-runc-v2/runc/util.go new file mode 100644 index 000000000000..7a3d88dff544 --- /dev/null +++ b/cmd/containerd-shim-runc-v2/runc/util.go @@ -0,0 +1,62 @@ +//go:build linux + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package runc + +import ( + "context" + "encoding/json" + "os" + "path/filepath" + + "github.com/containerd/log" + "github.com/opencontainers/runtime-spec/specs-go" +) + +// ShouldKillAllOnExit reads the bundle's OCI spec and returns true if +// there is an error reading the spec or if the container has a private PID namespace +func ShouldKillAllOnExit(ctx context.Context, bundlePath string) bool { + spec, err := readSpec(bundlePath) + if err != nil { + log.G(ctx).WithError(err).Error("shouldKillAllOnExit: failed to read config.json") + return true + } + + if spec.Linux != nil { + for _, ns := range spec.Linux.Namespaces { + if ns.Type == specs.PIDNamespace && ns.Path == "" { + return false + } + } + } + return true +} + +func readSpec(p string) (*specs.Spec, error) { + const configFileName = "config.json" + f, err := os.Open(filepath.Join(p, configFileName)) + if err != nil { + return nil, err + } + defer f.Close() + var s specs.Spec + if err := json.NewDecoder(f).Decode(&s); err != nil { + return nil, err + } + return &s, nil +} diff --git a/cmd/containerd-shim-runc-v2/task/plugin/plugin_linux.go b/cmd/containerd-shim-runc-v2/task/plugin/plugin_linux.go new file mode 100644 index 000000000000..31edccd443d5 --- /dev/null +++ b/cmd/containerd-shim-runc-v2/task/plugin/plugin_linux.go @@ -0,0 +1,49 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package plugin + +import ( + "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/task" + "github.com/containerd/containerd/v2/pkg/shim" + "github.com/containerd/containerd/v2/pkg/shutdown" + "github.com/containerd/containerd/v2/plugins" + "github.com/containerd/plugin" + "github.com/containerd/plugin/registry" +) + +func init() { + registry.Register(&plugin.Registration{ + Type: plugins.TTRPCPlugin, + ID: "task", + Requires: []plugin.Type{ + plugins.EventPlugin, + plugins.InternalPlugin, + }, + InitFn: func(ic *plugin.InitContext) (interface{}, error) { + pp, err := ic.GetByID(plugins.EventPlugin, "publisher") + if err != nil { + return nil, err + } + ss, err := ic.GetByID(plugins.InternalPlugin, "shutdown") + if err != nil { + return nil, err + } + return task.NewTaskService(ic.Context, pp.(shim.Publisher), ss.(shutdown.Service)) + }, + }) + +} diff --git a/cmd/containerd-shim-runc-v2/task/service.go b/cmd/containerd-shim-runc-v2/task/service.go new file mode 100644 index 000000000000..e96a62158e4b --- /dev/null +++ b/cmd/containerd-shim-runc-v2/task/service.go @@ -0,0 +1,848 @@ +//go:build linux + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package task + +import ( + "context" + "fmt" + "os" + "sync" + + "github.com/containerd/cgroups/v3" + "github.com/containerd/cgroups/v3/cgroup1" + cgroupsv2 "github.com/containerd/cgroups/v3/cgroup2" + eventstypes "github.com/containerd/containerd/api/events" + taskAPI "github.com/containerd/containerd/api/runtime/task/v3" + "github.com/containerd/containerd/api/types/runc/options" + "github.com/containerd/containerd/api/types/task" + "github.com/containerd/errdefs" + "github.com/containerd/errdefs/pkg/errgrpc" + runcC "github.com/containerd/go-runc" + "github.com/containerd/log" + "github.com/containerd/ttrpc" + "github.com/containerd/typeurl/v2" + "github.com/moby/sys/userns" + + "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/process" + "github.com/containerd/containerd/v2/cmd/containerd-shim-runc-v2/runc" + "github.com/containerd/containerd/v2/core/events" + "github.com/containerd/containerd/v2/core/runtime" + oomv2 "github.com/containerd/containerd/v2/internal/oom" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/oom" + oomv1 "github.com/containerd/containerd/v2/pkg/oom/v1" + "github.com/containerd/containerd/v2/pkg/protobuf" + ptypes "github.com/containerd/containerd/v2/pkg/protobuf/types" + "github.com/containerd/containerd/v2/pkg/shim" + "github.com/containerd/containerd/v2/pkg/shutdown" + "github.com/containerd/containerd/v2/pkg/stdio" + "github.com/containerd/containerd/v2/pkg/sys/reaper" +) + +var ( + _ = shim.TTRPCService(&service{}) + empty = &ptypes.Empty{} +) + +// NewTaskService creates a new instance of a task service +func NewTaskService(ctx context.Context, publisher shim.Publisher, sd shutdown.Service) (taskAPI.TTRPCTaskService, error) { + var ( + ep oom.Watcher + err error + ) + if cgroups.Mode() != cgroups.Unified { + ep, err = oomv1.New(publisher) + if err != nil { + return nil, err + } + go ep.Run(ctx) + } + s := &service{ + context: ctx, + events: make(chan interface{}, 128), + ec: reaper.Default.Subscribe(), + cg1oom: ep, + cg2oom: oomv2.New(), + publisher: publisher, + shutdown: sd, + containers: make(map[string]*runc.Container), + running: make(map[int][]containerProcess), + runningExecs: make(map[*runc.Container]int), + execCountSubscribers: make(map[*runc.Container]chan<- int), + containerInitExit: make(map[*runc.Container]runcC.Exit), + exitSubscribers: make(map[*map[int][]runcC.Exit]struct{}), + } + go s.processExits() + runcC.Monitor = reaper.Default + if err := s.initPlatform(); err != nil { + return nil, fmt.Errorf("failed to initialized platform behavior: %w", err) + } + go s.forward(ctx, publisher) + sd.RegisterCallback(func(context.Context) error { + close(s.events) + return nil + }) + + if address, err := shim.ReadAddress("address"); err == nil { + sd.RegisterCallback(func(context.Context) error { + return shim.RemoveSocket(address) + }) + } + return s, nil +} + +// service is the shim implementation of a remote shim over GRPC +type service struct { + mu sync.Mutex + + context context.Context + events chan interface{} + platform stdio.Platform + ec chan runcC.Exit + cg1oom oom.Watcher + cg2oom oomv2.Interface + + publisher events.Publisher + + containers map[string]*runc.Container + + lifecycleMu sync.Mutex + running map[int][]containerProcess // pid -> running process, guarded by lifecycleMu + runningExecs map[*runc.Container]int // container -> num running execs, guarded by lifecycleMu + // container -> subscription to exec exits/changes to s.runningExecs[container], + // guarded by lifecycleMu + execCountSubscribers map[*runc.Container]chan<- int + // container -> init exits, guarded by lifecycleMu + // Used to stash container init process exits, so that we can hold them + // until after we've made sure to publish all the container's exec exits. + // Also used to prevent starting new execs from being started if the + // container's init process (read: pid, not [process.Init]) has already been + // reaped by the shim. + // Note that this flag gets updated before the container's [process.Init.Status] + // is transitioned to "stopped". + containerInitExit map[*runc.Container]runcC.Exit + // Subscriptions to exits for PIDs. Adding/deleting subscriptions and + // dereferencing the subscription pointers must only be done while holding + // lifecycleMu. + exitSubscribers map[*map[int][]runcC.Exit]struct{} + + shutdown shutdown.Service +} + +type containerProcess struct { + Container *runc.Container + Process process.Process +} + +// preStart prepares for starting a container process and handling its exit. +// The container being started should be passed in as c when starting the container +// init process for an already-created container. c should be nil when creating a +// container or when starting an exec. +// +// The returned handleStarted closure records that the process has started so +// that its exit can be handled efficiently. If the process has already exited, +// it handles the exit immediately. +// handleStarted should be called after the event announcing the start of the +// process has been published. Note that s.lifecycleMu must not be held when +// calling handleStarted. +// +// The returned cleanup closure releases resources used to handle early exits. +// It must be called before the caller of preStart returns, otherwise severe +// memory leaks will occur. +func (s *service) preStart(c *runc.Container) (handleStarted func(*runc.Container, process.Process), cleanup func()) { + exits := make(map[int][]runcC.Exit) + s.exitSubscribers[&exits] = struct{}{} + + if c != nil { + // Remove container init process from s.running so it will once again be + // treated as an early exit if it exits before handleStarted is called. + pid := c.Pid() + var newRunning []containerProcess + for _, cp := range s.running[pid] { + if cp.Container != c { + newRunning = append(newRunning, cp) + } + } + if len(newRunning) > 0 { + s.running[pid] = newRunning + } else { + delete(s.running, pid) + } + } + + handleStarted = func(c *runc.Container, p process.Process) { + var pid int + if p != nil { + pid = p.Pid() + } + + s.lifecycleMu.Lock() + + ees, exited := exits[pid] + delete(s.exitSubscribers, &exits) + exits = nil + if pid == 0 || exited { + s.lifecycleMu.Unlock() + for _, ee := range ees { + s.handleProcessExit(ee, c, p) + } + } else { + // Process start was successful, add to `s.running`. + s.running[pid] = append(s.running[pid], containerProcess{ + Container: c, + Process: p, + }) + s.lifecycleMu.Unlock() + } + } + + cleanup = func() { + if exits != nil { + s.lifecycleMu.Lock() + defer s.lifecycleMu.Unlock() + delete(s.exitSubscribers, &exits) + } + } + + return handleStarted, cleanup +} + +// Create a new initial process and container with the underlying OCI runtime +func (s *service) Create(ctx context.Context, r *taskAPI.CreateTaskRequest) (_ *taskAPI.CreateTaskResponse, err error) { + s.mu.Lock() + defer s.mu.Unlock() + + s.lifecycleMu.Lock() + handleStarted, cleanup := s.preStart(nil) + s.lifecycleMu.Unlock() + defer cleanup() + + container, err := runc.NewContainer(ctx, s.platform, r) + if err != nil { + return nil, err + } + + s.containers[r.ID] = container + + s.send(&eventstypes.TaskCreate{ + ContainerID: r.ID, + Bundle: r.Bundle, + Rootfs: r.Rootfs, + IO: &eventstypes.TaskIO{ + Stdin: r.Stdin, + Stdout: r.Stdout, + Stderr: r.Stderr, + Terminal: r.Terminal, + }, + Checkpoint: r.Checkpoint, + Pid: uint32(container.Pid()), + }) + + // After runc.Create(init), the container’s cgroup contains a paused init process. + // Therefore, we should start monitoring OOM events immediately after creation, in + // case the process goes OOM very quickly. Otherwise, we may encounter flaky cases + switch cg := container.Cgroup().(type) { + case cgroup1.Cgroup: + if err := s.cg1oom.Add(container.ID, cg); err != nil { + log.G(ctx).WithError(err).Error("add cg to OOM monitor") + } + case *cgroupsv2.Manager: + allControllers, err := cg.RootControllers() + if err != nil { + log.G(ctx).WithError(err).Error("failed to get root controllers") + } else { + if err := cg.ToggleControllers(allControllers, cgroupsv2.Enable); err != nil { + if userns.RunningInUserNS() { + log.G(ctx).WithError(err).Debugf("failed to enable controllers (%v)", allControllers) + } else { + log.G(ctx).WithError(err).Errorf("failed to enable controllers (%v)", allControllers) + } + } + } + + if err := s.cg2oom.Add(container.ID, container.Pid(), s.oomEvent); err != nil { + log.G(ctx).WithError(err).WithField("container_id", container.ID).Error("failed to watch oom events") + } + } + + // The following line cannot return an error as the only state in which that + // could happen would also cause the container.Pid() call above to + // nil-deference panic. + proc, _ := container.Process("") + handleStarted(container, proc) + + return &taskAPI.CreateTaskResponse{ + Pid: uint32(container.Pid()), + }, nil +} + +func (s *service) RegisterTTRPC(server *ttrpc.Server) error { + taskAPI.RegisterTTRPCTaskService(server, s) + return nil +} + +// Start a process +func (s *service) Start(ctx context.Context, r *taskAPI.StartRequest) (*taskAPI.StartResponse, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + + var cinit *runc.Container + s.lifecycleMu.Lock() + if r.ExecID == "" { + cinit = container + } else { + if _, initExited := s.containerInitExit[container]; initExited { + s.lifecycleMu.Unlock() + return nil, errgrpc.ToGRPCf(errdefs.ErrFailedPrecondition, "container %s init process is not running", container.ID) + } + s.runningExecs[container]++ + } + handleStarted, cleanup := s.preStart(cinit) + s.lifecycleMu.Unlock() + defer cleanup() + + p, err := container.Start(ctx, r) + if err != nil { + // If we failed to even start the process, s.runningExecs + // won't get decremented in s.handleProcessExit. We still need + // to update it. + if r.ExecID != "" { + s.lifecycleMu.Lock() + s.runningExecs[container]-- + if ch, ok := s.execCountSubscribers[container]; ok { + ch <- s.runningExecs[container] + } + s.lifecycleMu.Unlock() + } + handleStarted(container, p) + return nil, errgrpc.ToGRPC(err) + } + + switch r.ExecID { + case "": + s.send(&eventstypes.TaskStart{ + ContainerID: container.ID, + Pid: uint32(p.Pid()), + }) + default: + s.send(&eventstypes.TaskExecStarted{ + ContainerID: container.ID, + ExecID: r.ExecID, + Pid: uint32(p.Pid()), + }) + } + handleStarted(container, p) + return &taskAPI.StartResponse{ + Pid: uint32(p.Pid()), + }, nil +} + +// Delete the initial process and container +func (s *service) Delete(ctx context.Context, r *taskAPI.DeleteRequest) (*taskAPI.DeleteResponse, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + p, err := container.Delete(ctx, r) + if err != nil { + return nil, errgrpc.ToGRPC(err) + } + // if we deleted an init task, send the task delete event + if r.ExecID == "" { + s.mu.Lock() + delete(s.containers, r.ID) + s.mu.Unlock() + s.send(&eventstypes.TaskDelete{ + ContainerID: container.ID, + Pid: uint32(p.Pid()), + ExitStatus: uint32(p.ExitStatus()), + ExitedAt: protobuf.ToTimestamp(p.ExitedAt()), + }) + s.lifecycleMu.Lock() + delete(s.containerInitExit, container) + s.lifecycleMu.Unlock() + } + return &taskAPI.DeleteResponse{ + ExitStatus: uint32(p.ExitStatus()), + ExitedAt: protobuf.ToTimestamp(p.ExitedAt()), + Pid: uint32(p.Pid()), + }, nil +} + +// Exec an additional process inside the container +func (s *service) Exec(ctx context.Context, r *taskAPI.ExecProcessRequest) (*ptypes.Empty, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + ok, cancel := container.ReserveProcess(r.ExecID) + if !ok { + return nil, errgrpc.ToGRPCf(errdefs.ErrAlreadyExists, "id %s", r.ExecID) + } + process, err := container.Exec(ctx, r) + if err != nil { + cancel() + return nil, errgrpc.ToGRPC(err) + } + + s.send(&eventstypes.TaskExecAdded{ + ContainerID: container.ID, + ExecID: process.ID(), + }) + return empty, nil +} + +// ResizePty of a process +func (s *service) ResizePty(ctx context.Context, r *taskAPI.ResizePtyRequest) (*ptypes.Empty, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + if err := container.ResizePty(ctx, r); err != nil { + return nil, errgrpc.ToGRPC(err) + } + return empty, nil +} + +// State returns runtime state information for a process +func (s *service) State(ctx context.Context, r *taskAPI.StateRequest) (*taskAPI.StateResponse, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + p, err := container.Process(r.ExecID) + if err != nil { + return nil, errgrpc.ToGRPC(err) + } + st, err := p.Status(ctx) + if err != nil { + return nil, err + } + status := task.Status_UNKNOWN + switch st { + case "created": + status = task.Status_CREATED + case "running": + status = task.Status_RUNNING + case "stopped": + status = task.Status_STOPPED + case "paused": + status = task.Status_PAUSED + case "pausing": + status = task.Status_PAUSING + } + sio := p.Stdio() + return &taskAPI.StateResponse{ + ID: p.ID(), + Bundle: container.Bundle, + Pid: uint32(p.Pid()), + Status: status, + Stdin: sio.Stdin, + Stdout: sio.Stdout, + Stderr: sio.Stderr, + Terminal: sio.Terminal, + ExitStatus: uint32(p.ExitStatus()), + ExitedAt: protobuf.ToTimestamp(p.ExitedAt()), + }, nil +} + +// Pause the container +func (s *service) Pause(ctx context.Context, r *taskAPI.PauseRequest) (*ptypes.Empty, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + if err := container.Pause(ctx); err != nil { + return nil, errgrpc.ToGRPC(err) + } + s.send(&eventstypes.TaskPaused{ + ContainerID: container.ID, + }) + return empty, nil +} + +// Resume the container +func (s *service) Resume(ctx context.Context, r *taskAPI.ResumeRequest) (*ptypes.Empty, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + if err := container.Resume(ctx); err != nil { + return nil, errgrpc.ToGRPC(err) + } + s.send(&eventstypes.TaskResumed{ + ContainerID: container.ID, + }) + return empty, nil +} + +// Kill a process with the provided signal +func (s *service) Kill(ctx context.Context, r *taskAPI.KillRequest) (*ptypes.Empty, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + if err := container.Kill(ctx, r); err != nil { + return nil, errgrpc.ToGRPC(err) + } + return empty, nil +} + +// Pids returns all pids inside the container +func (s *service) Pids(ctx context.Context, r *taskAPI.PidsRequest) (*taskAPI.PidsResponse, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + pids, err := s.getContainerPids(ctx, container) + if err != nil { + return nil, errgrpc.ToGRPC(err) + } + var processes []*task.ProcessInfo + for _, pid := range pids { + pInfo := task.ProcessInfo{ + Pid: pid, + } + for _, p := range container.ExecdProcesses() { + if p.Pid() == int(pid) { + d := &options.ProcessDetails{ + ExecID: p.ID(), + } + a, err := typeurl.MarshalAnyToProto(d) + if err != nil { + return nil, fmt.Errorf("failed to marshal process %d info: %w", pid, err) + } + pInfo.Info = a + break + } + } + processes = append(processes, &pInfo) + } + return &taskAPI.PidsResponse{ + Processes: processes, + }, nil +} + +// CloseIO of a process +func (s *service) CloseIO(ctx context.Context, r *taskAPI.CloseIORequest) (*ptypes.Empty, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + if err := container.CloseIO(ctx, r); err != nil { + return nil, err + } + return empty, nil +} + +// Checkpoint the container +func (s *service) Checkpoint(ctx context.Context, r *taskAPI.CheckpointTaskRequest) (*ptypes.Empty, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + if err := container.Checkpoint(ctx, r); err != nil { + return nil, errgrpc.ToGRPC(err) + } + return empty, nil +} + +// Update a running container +func (s *service) Update(ctx context.Context, r *taskAPI.UpdateTaskRequest) (*ptypes.Empty, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + if err := container.Update(ctx, r); err != nil { + return nil, errgrpc.ToGRPC(err) + } + return empty, nil +} + +// Wait for a process to exit +func (s *service) Wait(ctx context.Context, r *taskAPI.WaitRequest) (*taskAPI.WaitResponse, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + p, err := container.Process(r.ExecID) + if err != nil { + return nil, errgrpc.ToGRPC(err) + } + + if err = p.Wait(ctx); err != nil { + return nil, errgrpc.ToGRPC(err) + } + + return &taskAPI.WaitResponse{ + ExitStatus: uint32(p.ExitStatus()), + ExitedAt: protobuf.ToTimestamp(p.ExitedAt()), + }, nil +} + +// Connect returns shim information such as the shim's pid +func (s *service) Connect(ctx context.Context, r *taskAPI.ConnectRequest) (*taskAPI.ConnectResponse, error) { + var pid int + if container, err := s.getContainer(r.ID); err == nil { + pid = container.Pid() + } + return &taskAPI.ConnectResponse{ + ShimPid: uint32(os.Getpid()), + TaskPid: uint32(pid), + }, nil +} + +func (s *service) Shutdown(ctx context.Context, r *taskAPI.ShutdownRequest) (*ptypes.Empty, error) { + s.mu.Lock() + defer s.mu.Unlock() + + // return out if the shim is still servicing containers + if len(s.containers) > 0 { + return empty, nil + } + + // please make sure that temporary resource has been cleanup or registered + // for cleanup before calling shutdown + s.shutdown.Shutdown() + + return empty, nil +} + +func (s *service) Stats(ctx context.Context, r *taskAPI.StatsRequest) (*taskAPI.StatsResponse, error) { + container, err := s.getContainer(r.ID) + if err != nil { + return nil, err + } + cgx := container.Cgroup() + if cgx == nil { + return nil, errgrpc.ToGRPCf(errdefs.ErrNotFound, "cgroup does not exist") + } + var statsx interface{} + switch cg := cgx.(type) { + case cgroup1.Cgroup: + stats, err := cg.Stat(cgroup1.IgnoreNotExist) + if err != nil { + return nil, err + } + statsx = stats + case *cgroupsv2.Manager: + stats, err := cg.Stat() + if err != nil { + return nil, err + } + statsx = stats + default: + return nil, errgrpc.ToGRPCf(errdefs.ErrNotImplemented, "unsupported cgroup type %T", cg) + } + data, err := typeurl.MarshalAny(statsx) + if err != nil { + return nil, err + } + return &taskAPI.StatsResponse{ + Stats: typeurl.MarshalProto(data), + }, nil +} + +func (s *service) processExits() { + for e := range s.ec { + // While unlikely, it is not impossible for a container process to exit + // and have its PID be recycled for a new container process before we + // have a chance to process the first exit. As we have no way to tell + // for sure which of the processes the exit event corresponds to (until + // pidfd support is implemented) there is no way for us to handle the + // exit correctly in that case. + + s.lifecycleMu.Lock() + // Inform any concurrent s.Start() calls so they can handle the exit + // if the PID belongs to them. + for subscriber := range s.exitSubscribers { + (*subscriber)[e.Pid] = append((*subscriber)[e.Pid], e) + } + // Handle the exit for a created/started process. If there's more than + // one, assume they've all exited. One of them will be the correct + // process. + var cps []containerProcess + for _, cp := range s.running[e.Pid] { + _, init := cp.Process.(*process.Init) + if init { + s.containerInitExit[cp.Container] = e + } + cps = append(cps, cp) + } + delete(s.running, e.Pid) + s.lifecycleMu.Unlock() + + for _, cp := range cps { + if ip, ok := cp.Process.(*process.Init); ok { + s.handleInitExit(e, cp.Container, ip) + } else { + s.handleProcessExit(e, cp.Container, cp.Process) + } + } + } +} + +func (s *service) oomEvent(id string) { + err := s.publisher.Publish(s.context, runtime.TaskOOMEventTopic, &eventstypes.TaskOOM{ + ContainerID: id, + }) + if err != nil { + log.G(s.context).WithError(err).Error("post event") + } +} + +func (s *service) send(evt interface{}) { + s.events <- evt +} + +// handleInitExit processes container init process exits. +// This is handled separately from non-init exits, because there +// are some extra invariants we want to ensure in this case, namely: +// - for a given container, the init process exit MUST be the last exit published +// This is achieved by: +// - killing all running container processes (if the container has a shared pid +// namespace, otherwise all other processes have been reaped already). +// - waiting for the container's running exec counter to reach 0. +// - finally, publishing the init exit. +func (s *service) handleInitExit(e runcC.Exit, c *runc.Container, p *process.Init) { + // kill all running container processes + if runc.ShouldKillAllOnExit(s.context, c.Bundle) { + if err := p.KillAll(s.context); err != nil { + log.G(s.context).WithError(err).WithField("id", p.ID()). + Error("failed to kill init's children") + } + } + + s.lifecycleMu.Lock() + numRunningExecs := s.runningExecs[c] + if numRunningExecs == 0 { + delete(s.runningExecs, c) + s.lifecycleMu.Unlock() + s.handleProcessExit(e, c, p) + return + } + + events := make(chan int, numRunningExecs) + s.execCountSubscribers[c] = events + + s.lifecycleMu.Unlock() + + go func() { + defer func() { + s.lifecycleMu.Lock() + defer s.lifecycleMu.Unlock() + delete(s.execCountSubscribers, c) + delete(s.runningExecs, c) + }() + + // wait for running processes to exit + for { + if runningExecs := <-events; runningExecs == 0 { + break + } + } + + // all running processes have exited now, and no new + // ones can start, so we can publish the init exit + s.handleProcessExit(e, c, p) + }() +} + +func (s *service) handleProcessExit(e runcC.Exit, c *runc.Container, p process.Process) { + p.SetExited(e.Status) + _, isInit := p.(*process.Init) + if isInit { + if err := s.cg2oom.Stop(c.ID); err != nil { + log.G(context.Background()). + WithField("container_id", c.ID). + WithError(err). + Error("failed to stop oom event watcher") + } + } + s.send(&eventstypes.TaskExit{ + ContainerID: c.ID, + ID: p.ID(), + Pid: uint32(e.Pid), + ExitStatus: uint32(e.Status), + ExitedAt: protobuf.ToTimestamp(p.ExitedAt()), + }) + if !isInit { + s.lifecycleMu.Lock() + s.runningExecs[c]-- + if ch, ok := s.execCountSubscribers[c]; ok { + ch <- s.runningExecs[c] + } + s.lifecycleMu.Unlock() + } +} + +func (s *service) getContainerPids(ctx context.Context, container *runc.Container) ([]uint32, error) { + p, err := container.Process("") + if err != nil { + return nil, errgrpc.ToGRPC(err) + } + ps, err := p.(*process.Init).Runtime().Ps(ctx, container.ID) + if err != nil { + return nil, err + } + pids := make([]uint32, 0, len(ps)) + for _, pid := range ps { + pids = append(pids, uint32(pid)) + } + return pids, nil +} + +func (s *service) forward(ctx context.Context, publisher shim.Publisher) { + ns, _ := namespaces.Namespace(ctx) + ctx = namespaces.WithNamespace(context.Background(), ns) + for e := range s.events { + err := publisher.Publish(ctx, runtime.GetTopic(e), e) + if err != nil { + log.G(ctx).WithError(err).Error("post event") + } + } + publisher.Close() +} + +func (s *service) getContainer(id string) (*runc.Container, error) { + s.mu.Lock() + container := s.containers[id] + s.mu.Unlock() + if container == nil { + return nil, errgrpc.ToGRPCf(errdefs.ErrNotFound, "container not created") + } + return container, nil +} + +// initialize a single epoll fd to manage our consoles. `initPlatform` should +// only be called once. +func (s *service) initPlatform() error { + if s.platform != nil { + return nil + } + p, err := runc.NewPlatform() + if err != nil { + return err + } + s.platform = p + s.shutdown.RegisterCallback(func(context.Context) error { return s.platform.Close() }) + return nil +} diff --git a/cmd/containerd-shim/main_unix.go b/cmd/containerd-shim/main_unix.go deleted file mode 100644 index ac6f51c0329a..000000000000 --- a/cmd/containerd-shim/main_unix.go +++ /dev/null @@ -1,334 +0,0 @@ -//go:build !windows -// +build !windows - -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package main - -import ( - "bytes" - "context" - "flag" - "fmt" - "io" - "net" - "os" - "os/signal" - "runtime" - "runtime/debug" - "strings" - "sync" - "syscall" - "time" - - "github.com/containerd/containerd/events" - "github.com/containerd/containerd/namespaces" - "github.com/containerd/containerd/pkg/process" - "github.com/containerd/containerd/protobuf" - "github.com/containerd/containerd/protobuf/proto" - ptypes "github.com/containerd/containerd/protobuf/types" - shimlog "github.com/containerd/containerd/runtime/v1" - "github.com/containerd/containerd/runtime/v1/shim" - shimapi "github.com/containerd/containerd/runtime/v1/shim/v1" - "github.com/containerd/containerd/sys/reaper" - "github.com/containerd/containerd/version" - "github.com/containerd/ttrpc" - "github.com/sirupsen/logrus" - exec "golang.org/x/sys/execabs" - "golang.org/x/sys/unix" -) - -var ( - debugFlag bool - versionFlag bool - namespaceFlag string - socketFlag string - addressFlag string - workdirFlag string - runtimeRootFlag string - criuFlag string - systemdCgroupFlag bool - containerdBinaryFlag string - - bufPool = sync.Pool{ - New: func() interface{} { - return bytes.NewBuffer(nil) - }, - } -) - -func parseFlags() { - flag.BoolVar(&debugFlag, "debug", false, "enable debug output in logs") - flag.BoolVar(&versionFlag, "v", false, "show the shim version and exit") - flag.StringVar(&namespaceFlag, "namespace", "", "namespace that owns the shim") - flag.StringVar(&socketFlag, "socket", "", "socket path to serve") - flag.StringVar(&addressFlag, "address", "", "grpc address back to main containerd") - flag.StringVar(&workdirFlag, "workdir", "", "path used to storage large temporary data") - flag.StringVar(&runtimeRootFlag, "runtime-root", process.RuncRoot, "root directory for the runtime") - flag.StringVar(&criuFlag, "criu", "", "path to criu binary (deprecated: do not use)") - flag.BoolVar(&systemdCgroupFlag, "systemd-cgroup", false, "set runtime to use systemd-cgroup") - // currently, the `containerd publish` utility is embedded in the daemon binary. - // The daemon invokes `containerd-shim -containerd-binary ...` with its own os.Executable() path. - flag.StringVar(&containerdBinaryFlag, "containerd-binary", "containerd", "path to containerd binary (used for `containerd publish`)") - flag.Parse() -} - -func setRuntime() { - debug.SetGCPercent(40) - go func() { - for range time.Tick(30 * time.Second) { - debug.FreeOSMemory() - } - }() - if os.Getenv("GOMAXPROCS") == "" { - // If GOMAXPROCS hasn't been set, we default to a value of 2 to reduce - // the number of Go stacks present in the shim. - runtime.GOMAXPROCS(2) - } -} - -func main() { - parseFlags() - if versionFlag { - fmt.Println("containerd-shim") - fmt.Println(" Version: ", version.Version) - fmt.Println(" Revision:", version.Revision) - fmt.Println(" Go version:", version.GoVersion) - fmt.Println("") - return - } - - setRuntime() - - if debugFlag { - logrus.SetLevel(logrus.DebugLevel) - } - - stdout, stderr, err := openStdioKeepAlivePipes(workdirFlag) - if err != nil { - fmt.Fprintf(os.Stderr, "containerd-shim: %s\n", err) - os.Exit(1) - } - defer func() { - stdout.Close() - stderr.Close() - }() - - // redirect the following output into fifo to make sure that containerd - // still can read the log after restart - logrus.SetOutput(stdout) - - if err := executeShim(); err != nil { - fmt.Fprintf(os.Stderr, "containerd-shim: %s\n", err) - os.Exit(1) - } -} - -// If containerd server process dies, we need the shim to keep stdout/err reader -// FDs so that Linux does not SIGPIPE the shim process if it tries to use its end of -// these pipes. -func openStdioKeepAlivePipes(dir string) (io.ReadWriteCloser, io.ReadWriteCloser, error) { - background := context.Background() - keepStdoutAlive, err := shimlog.OpenShimStdoutLog(background, dir) - if err != nil { - return nil, nil, err - } - keepStderrAlive, err := shimlog.OpenShimStderrLog(background, dir) - if err != nil { - return nil, nil, err - } - return keepStdoutAlive, keepStderrAlive, nil -} - -func executeShim() error { - // start handling signals as soon as possible so that things are properly reaped - // or if runtime exits before we hit the handler - signals, err := setupSignals() - if err != nil { - return err - } - dump := make(chan os.Signal, 32) - signal.Notify(dump, syscall.SIGUSR1) - - path, err := os.Getwd() - if err != nil { - return err - } - server, err := newServer() - if err != nil { - return fmt.Errorf("failed creating server: %w", err) - } - sv, err := shim.NewService( - shim.Config{ - Path: path, - Namespace: namespaceFlag, - WorkDir: workdirFlag, - SystemdCgroup: systemdCgroupFlag, - RuntimeRoot: runtimeRootFlag, - }, - &remoteEventsPublisher{address: addressFlag}, - ) - if err != nil { - return err - } - logrus.Debug("registering ttrpc server") - shimapi.RegisterShimService(server, sv) - - socket := socketFlag - if err := serve(context.Background(), server, socket); err != nil { - return err - } - logger := logrus.WithFields(logrus.Fields{ - "pid": os.Getpid(), - "path": path, - "namespace": namespaceFlag, - }) - go func() { - for range dump { - dumpStacks(logger) - } - }() - return handleSignals(logger, signals, server, sv) -} - -// serve serves the ttrpc API over a unix socket at the provided path -// this function does not block -func serve(ctx context.Context, server *ttrpc.Server, path string) error { - var ( - l net.Listener - err error - ) - if path == "" { - f := os.NewFile(3, "socket") - l, err = net.FileListener(f) - f.Close() - path = "[inherited from parent]" - } else { - const ( - abstractSocketPrefix = "\x00" - socketPathLimit = 106 - ) - p := strings.TrimPrefix(path, "unix://") - if len(p) == len(path) { - p = abstractSocketPrefix + p - } - if len(p) > socketPathLimit { - return fmt.Errorf("%q: unix socket path too long (> %d)", p, socketPathLimit) - } - l, err = net.Listen("unix", p) - } - if err != nil { - return err - } - logrus.WithField("socket", path).Debug("serving api on unix socket") - go func() { - defer l.Close() - if err := server.Serve(ctx, l); err != nil && - !strings.Contains(err.Error(), "use of closed network connection") { - logrus.WithError(err).Fatal("containerd-shim: ttrpc server failure") - } - }() - return nil -} - -func handleSignals(logger *logrus.Entry, signals chan os.Signal, server *ttrpc.Server, sv *shim.Service) error { - var ( - termOnce sync.Once - done = make(chan struct{}) - ) - - for { - select { - case <-done: - return nil - case s := <-signals: - switch s { - case unix.SIGCHLD: - if err := reaper.Reap(); err != nil { - logger.WithError(err).Error("reap exit status") - } - case unix.SIGTERM, unix.SIGINT: - go termOnce.Do(func() { - ctx := context.TODO() - if err := server.Shutdown(ctx); err != nil { - logger.WithError(err).Error("failed to shutdown server") - } - // Ensure our child is dead if any - sv.Kill(ctx, &shimapi.KillRequest{ - Signal: uint32(syscall.SIGKILL), - All: true, - }) - sv.Delete(context.Background(), &ptypes.Empty{}) - close(done) - }) - case unix.SIGPIPE: - } - } - } -} - -func dumpStacks(logger *logrus.Entry) { - var ( - buf []byte - stackSize int - ) - bufferLen := 16384 - for stackSize == len(buf) { - buf = make([]byte, bufferLen) - stackSize = runtime.Stack(buf, true) - bufferLen *= 2 - } - buf = buf[:stackSize] - logger.Infof("=== BEGIN goroutine stack dump ===\n%s\n=== END goroutine stack dump ===", buf) -} - -type remoteEventsPublisher struct { - address string -} - -func (l *remoteEventsPublisher) Publish(ctx context.Context, topic string, event events.Event) error { - ns, _ := namespaces.Namespace(ctx) - encoded, err := protobuf.MarshalAnyToProto(event) - if err != nil { - return err - } - data, err := proto.Marshal(encoded) - if err != nil { - return err - } - cmd := exec.CommandContext(ctx, containerdBinaryFlag, "--address", l.address, "publish", "--topic", topic, "--namespace", ns) - cmd.Stdin = bytes.NewReader(data) - b := bufPool.Get().(*bytes.Buffer) - defer func() { - b.Reset() - bufPool.Put(b) - }() - cmd.Stdout = b - cmd.Stderr = b - c, err := reaper.Default.Start(cmd) - if err != nil { - return err - } - status, err := reaper.Default.WaitTimeout(cmd, c, 30*time.Second) - if err != nil { - return fmt.Errorf("failed to publish event: %s: %w", b.String(), err) - } - if status != 0 { - return fmt.Errorf("failed to publish event: %s", b.String()) - } - return nil -} diff --git a/cmd/containerd-shim/shim_darwin.go b/cmd/containerd-shim/shim_darwin.go deleted file mode 100644 index 7d652daa1d5a..000000000000 --- a/cmd/containerd-shim/shim_darwin.go +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package main - -import ( - "os" - "os/signal" - - "github.com/containerd/containerd/sys/reaper" - runc "github.com/containerd/go-runc" - "github.com/containerd/ttrpc" -) - -// setupSignals creates a new signal handler for all signals and sets the shim as a -// sub-reaper so that the container processes are reparented -func setupSignals() (chan os.Signal, error) { - signals := make(chan os.Signal, 2048) - signal.Notify(signals) - // make sure runc is setup to use the monitor - // for waiting on processes - runc.Monitor = reaper.Default - return signals, nil -} - -func newServer() (*ttrpc.Server, error) { - // for darwin, we omit the socket credentials because these syscalls are - // slightly different. since we don't have darwin support yet, this can be - // implemented later and the build can continue without issue. - return ttrpc.NewServer() -} diff --git a/cmd/containerd-shim/shim_freebsd.go b/cmd/containerd-shim/shim_freebsd.go deleted file mode 100644 index 5cafaef479be..000000000000 --- a/cmd/containerd-shim/shim_freebsd.go +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package main - -import ( - "os" - "os/signal" - - "github.com/containerd/containerd/sys/reaper" - - runc "github.com/containerd/go-runc" - "github.com/containerd/ttrpc" -) - -// setupSignals creates a new signal handler for all signals and sets the shim as a -// sub-reaper so that the container processes are reparented -func setupSignals() (chan os.Signal, error) { - signals := make(chan os.Signal, 2048) - signal.Notify(signals) - // make sure runc is setup to use the monitor - // for waiting on processes - runc.Monitor = reaper.Default - return signals, nil -} - -func newServer() (*ttrpc.Server, error) { - // for freebsd, we omit the socket credentials because these syscalls are - // slightly different. since we don't have freebsd support yet, this can be - // implemented later and the build can continue without issue. - return ttrpc.NewServer() -} diff --git a/cmd/containerd-shim/shim_linux.go b/cmd/containerd-shim/shim_linux.go deleted file mode 100644 index 66ebe36c68c1..000000000000 --- a/cmd/containerd-shim/shim_linux.go +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package main - -import ( - "os" - "os/signal" - - "github.com/containerd/containerd/sys/reaper" - runc "github.com/containerd/go-runc" - "github.com/containerd/ttrpc" - "golang.org/x/sys/unix" -) - -// setupSignals creates a new signal handler for all signals and sets the shim as a -// sub-reaper so that the container processes are reparented -func setupSignals() (chan os.Signal, error) { - signals := make(chan os.Signal, 32) - signal.Notify(signals, unix.SIGTERM, unix.SIGINT, unix.SIGCHLD, unix.SIGPIPE) - // make sure runc is setup to use the monitor - // for waiting on processes - runc.Monitor = reaper.Default - // set the shim as the subreaper for all orphaned processes created by the container - if err := reaper.SetSubreaper(1); err != nil { - return nil, err - } - return signals, nil -} - -func newServer() (*ttrpc.Server, error) { - return ttrpc.NewServer(ttrpc.WithServerHandshaker(ttrpc.UnixSocketRequireSameUser())) -} diff --git a/cmd/containerd-stress/cri_worker.go b/cmd/containerd-stress/cri_worker.go new file mode 100644 index 000000000000..332227cfb485 --- /dev/null +++ b/cmd/containerd-stress/cri_worker.go @@ -0,0 +1,166 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package main + +import ( + "context" + "fmt" + "strings" + "sync" + "time" + + internalapi "github.com/containerd/containerd/v2/integration/cri-api/pkg/apis" + "github.com/containerd/containerd/v2/internal/cri/util" + "github.com/containerd/log" + runtime "k8s.io/cri-api/pkg/apis/runtime/v1" +) + +type criWorker struct { + id int + wg *sync.WaitGroup + count int + failures int + client internalapi.RuntimeService + + commit string + runtimeHandler string + snapshotter string +} + +const podNamespaceLabel = "pod.namespace" + +func (w *criWorker) incCount() { + w.count++ +} + +func (w *criWorker) getCount() int { + return w.count +} + +func (w *criWorker) incFailures() { + w.failures++ +} + +func (w *criWorker) getFailures() int { + return w.failures +} + +func (w *criWorker) run(ctx, tctx context.Context) { + defer func() { + w.wg.Done() + log.L.Infof("worker %d finished", w.id) + }() + for { + select { + case <-tctx.Done(): + return + default: + } + + w.count++ + id := w.getID() + log.L.Debugf("starting container %s", id) + start := time.Now() + if err := w.runSandbox(tctx, ctx, id); err != nil { + if err != context.DeadlineExceeded || + !strings.Contains(err.Error(), context.DeadlineExceeded.Error()) { + w.failures++ + log.L.WithError(err).Errorf("running container %s", id) + errCounter.WithValues(err.Error()).Inc() + + } + continue + } + // only log times are success so we don't scew the results from failures that go really fast + ct.WithValues(w.commit).UpdateSince(start) + } +} + +func (w *criWorker) runSandbox(tctx, ctx context.Context, id string) (err error) { + + sbConfig := &runtime.PodSandboxConfig{ + Metadata: &runtime.PodSandboxMetadata{ + Name: id, + // Using random id as uuid is good enough for local + // integration test. + Uid: util.GenerateID(), + Namespace: "stress", + }, + Labels: map[string]string{podNamespaceLabel: stressNs}, + Linux: &runtime.LinuxPodSandboxConfig{}, + } + + sb, err := w.client.RunPodSandbox(sbConfig, w.runtimeHandler) + if err != nil { + w.failures++ + return err + } + defer func() { + w.client.StopPodSandbox(sb) + w.client.RemovePodSandbox(sb) + }() + + // verify it is running ? + + ticker := time.NewTicker(250 * time.Millisecond) + go func() { + for { + select { + case <-tctx.Done(): + ticker.Stop() + return + case <-ticker.C: + // do stuff + status, err := w.client.PodSandboxStatus(sb) + if err != nil && status.GetState() == runtime.PodSandboxState_SANDBOX_READY { + ticker.Stop() + return + } + } + } + }() + + return nil +} + +func (w *criWorker) getID() string { + return fmt.Sprintf("%d-%d", w.id, w.count) +} + +// cleanup cleans up any containers in the "stress" namespace before the test run +func criCleanup(ctx context.Context, client internalapi.RuntimeService) error { + filter := &runtime.PodSandboxFilter{ + LabelSelector: map[string]string{podNamespaceLabel: stressNs}, + } + + sandboxes, err := client.ListPodSandbox(filter) + if err != nil { + return err + } + + for _, sb := range sandboxes { + if err := client.StopPodSandbox(sb.Id); err != nil { + return err + } + + if err := client.RemovePodSandbox(sb.Id); err != nil { + return err + } + } + + return nil +} diff --git a/cmd/containerd-stress/density.go b/cmd/containerd-stress/density.go index 8006a6dda4f9..a48928fe92f5 100644 --- a/cmd/containerd-stress/density.go +++ b/cmd/containerd-stress/density.go @@ -20,6 +20,7 @@ import ( "bufio" "context" "encoding/json" + "errors" "fmt" "os" "os/signal" @@ -28,34 +29,43 @@ import ( "strings" "syscall" - "github.com/containerd/containerd" - "github.com/containerd/containerd/cio" - "github.com/containerd/containerd/namespaces" - "github.com/containerd/containerd/oci" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/pkg/cio" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/containerd/log" + "github.com/urfave/cli/v2" ) -var densityCommand = cli.Command{ +var densityCommand = &cli.Command{ Name: "density", - Usage: "stress tests density of containers running on a system", + Usage: "Stress tests density of containers running on a system", Flags: []cli.Flag{ - cli.IntFlag{ + &cli.IntFlag{ Name: "count", - Usage: "number of containers to run", + Usage: "Number of containers to run", Value: 10, }, }, Action: func(cliContext *cli.Context) error { + var ( + pids []uint32 + count = cliContext.Int("count") + ) + + if count < 1 { + return errors.New("count cannot be less than one") + } + config := config{ - Address: cliContext.GlobalString("address"), - Duration: cliContext.GlobalDuration("duration"), - Concurrency: cliContext.GlobalInt("concurrent"), - Exec: cliContext.GlobalBool("exec"), - Image: cliContext.GlobalString("image"), - JSON: cliContext.GlobalBool("json"), - Metrics: cliContext.GlobalString("metrics"), - Snapshotter: cliContext.GlobalString("snapshotter"), + Address: cliContext.String("address"), + Duration: cliContext.Duration("duration"), + Concurrency: cliContext.Int("concurrent"), + Exec: cliContext.Bool("exec"), + Image: cliContext.String("image"), + JSON: cliContext.Bool("json"), + Metrics: cliContext.String("metrics"), + Snapshotter: cliContext.String("snapshotter"), } client, err := config.newClient() if err != nil { @@ -66,20 +76,16 @@ var densityCommand = cli.Command{ if err := cleanup(ctx, client); err != nil { return err } - logrus.Infof("pulling %s", config.Image) + log.L.Infof("pulling %s", config.Image) image, err := client.Pull(ctx, config.Image, containerd.WithPullUnpack, containerd.WithPullSnapshotter(config.Snapshotter)) if err != nil { return err } - logrus.Info("generating spec from image") + log.L.Info("generating spec from image") s := make(chan os.Signal, 1) signal.Notify(s, syscall.SIGTERM, syscall.SIGINT) - var ( - pids []uint32 - count = cliContext.Int("count") - ) loop: for i := 0; i < count+1; i++ { select { @@ -206,13 +212,13 @@ func parseStat(data string) (stat Stat, err error) { return stat, fmt.Errorf("invalid stat data: %q", data) } - parts := strings.SplitN(data[:i], "(", 2) - if len(parts) != 2 { + val, name, ok := strings.Cut(data[:i], "(") + if !ok { return stat, fmt.Errorf("invalid stat data: %q", data) } - stat.Name = parts[1] - _, err = fmt.Sscanf(parts[0], "%d", &stat.PID) + stat.Name = name + _, err = fmt.Sscanf(val, "%d", &stat.PID) if err != nil { return stat, err } @@ -220,7 +226,7 @@ func parseStat(data string) (stat Stat, err error) { // parts indexes should be offset by 3 from the field number given // proc(5), because parts is zero-indexed and we've removed fields // one (PID) and two (Name) in the paren-split. - parts = strings.Split(data[i+2:], " ") + parts := strings.Split(data[i+2:], " ") fmt.Sscanf(parts[22-3], "%d", &stat.StartTime) fmt.Sscanf(parts[4-3], "%d", &stat.PPID) return stat, nil diff --git a/cmd/containerd-stress/exec_worker.go b/cmd/containerd-stress/exec_worker.go index 6a30f5c181c4..145fa99f59aa 100644 --- a/cmd/containerd-stress/exec_worker.go +++ b/cmd/containerd-stress/exec_worker.go @@ -23,21 +23,21 @@ import ( "syscall" "time" - "github.com/containerd/containerd" - "github.com/containerd/containerd/cio" - "github.com/containerd/containerd/oci" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/pkg/cio" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/containerd/log" specs "github.com/opencontainers/runtime-spec/specs-go" - "github.com/sirupsen/logrus" ) type execWorker struct { - worker + ctrWorker } func (w *execWorker) exec(ctx, tctx context.Context) { defer func() { w.wg.Done() - logrus.Infof("worker %d finished", w.id) + log.L.Infof("worker %d finished", w.id) }() id := fmt.Sprintf("exec-container-%d", w.id) c, err := w.client.NewContainer(ctx, id, @@ -46,32 +46,32 @@ func (w *execWorker) exec(ctx, tctx context.Context) { containerd.WithNewSpec(oci.WithImageConfig(w.image), oci.WithUsername("games"), oci.WithProcessArgs("sleep", "30d")), ) if err != nil { - logrus.WithError(err).Error("create exec container") + log.L.WithError(err).Error("create exec container") return } defer c.Delete(ctx, containerd.WithSnapshotCleanup) task, err := c.NewTask(ctx, cio.NullIO) if err != nil { - logrus.WithError(err).Error("create exec container's task") + log.L.WithError(err).Error("create exec container's task") return } defer task.Delete(ctx, containerd.WithProcessKill) statusC, err := task.Wait(ctx) if err != nil { - logrus.WithError(err).Error("wait exec container's task") + log.L.WithError(err).Error("wait exec container's task") return } if err := task.Start(ctx); err != nil { - logrus.WithError(err).Error("exec container start failure") + log.L.WithError(err).Error("exec container start failure") return } spec, err := c.Spec(ctx) if err != nil { - logrus.WithError(err).Error("failed to get spec") + log.L.WithError(err).Error("failed to get spec") return } @@ -82,7 +82,7 @@ func (w *execWorker) exec(ctx, tctx context.Context) { select { case <-tctx.Done(): if err := task.Kill(ctx, syscall.SIGKILL); err != nil { - logrus.WithError(err).Error("kill exec container's task") + log.L.WithError(err).Error("kill exec container's task") } <-statusC return @@ -91,14 +91,14 @@ func (w *execWorker) exec(ctx, tctx context.Context) { w.count++ id := w.getID() - logrus.Debugf("starting exec %s", id) + log.L.Debugf("starting exec %s", id) start := time.Now() if err := w.runExec(ctx, task, id, pspec); err != nil { if err != context.DeadlineExceeded || !strings.Contains(err.Error(), context.DeadlineExceeded.Error()) { w.failures++ - logrus.WithError(err).Errorf("running exec %s", id) + log.L.WithError(err).Errorf("running exec %s", id) errCounter.WithValues(err.Error()).Inc() } continue diff --git a/cmd/containerd-stress/main.go b/cmd/containerd-stress/main.go index 01c6c38c73c2..5739b0f2de4c 100644 --- a/cmd/containerd-stress/main.go +++ b/cmd/containerd-stress/main.go @@ -28,12 +28,14 @@ import ( "syscall" "time" - "github.com/containerd/containerd" - "github.com/containerd/containerd/namespaces" - "github.com/containerd/containerd/plugin" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/defaults" + "github.com/containerd/containerd/v2/integration/remote" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/plugins" + "github.com/containerd/log" metrics "github.com/docker/go-metrics" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) var ( @@ -43,8 +45,12 @@ var ( binarySizeGauge metrics.LabeledGauge ) +const ( + stressNs string = "stress" +) + func init() { - ns := metrics.NewNamespace("stress", "", nil) + ns := metrics.NewNamespace(stressNs, "", nil) // if you want more fine grained metrics then you can drill down with the metrics in prom that // containerd is outputting ct = ns.NewLabeledTimer("run", "Run time of a full container during the test", "commit") @@ -57,6 +63,20 @@ func init() { if err := setRlimit(); err != nil { panic(err) } + + cli.HelpFlag = &cli.BoolFlag{ + Name: "help", + Aliases: []string{"h"}, + Usage: "Show help", + } +} + +type worker interface { + run(ctx, tcxt context.Context) + getCount() int + incCount() + getFailures() int + incFailures() } type run struct { @@ -79,10 +99,10 @@ func (r *run) seconds() float64 { return r.ended.Sub(r.started).Seconds() } -func (r *run) gather(workers []*worker) *result { +func (r *run) gather(workers []worker) *result { for _, w := range workers { - r.total += w.count - r.failures += w.failures + r.total += w.getCount() + r.failures += w.getFailures() } sec := r.seconds() return &result{ @@ -111,80 +131,100 @@ func main() { app.Name = "containerd-stress" app.Description = "stress test a containerd daemon" app.Flags = []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "debug", - Usage: "set debug output in the logs", + Usage: "Set debug output in the logs", }, - cli.StringFlag{ - Name: "address,a", - Value: "/run/containerd/containerd.sock", - Usage: "path to the containerd socket", + &cli.StringFlag{ + Name: "address", + Aliases: []string{"a"}, + Value: defaults.DefaultAddress, + Usage: "Path to the containerd socket", }, - cli.IntFlag{ - Name: "concurrent,c", - Value: 1, - Usage: "set the concurrency of the stress test", + &cli.IntFlag{ + Name: "concurrent", + Aliases: []string{"c"}, + Value: 1, + Usage: "Set the concurrency of the stress test", }, - cli.DurationFlag{ - Name: "duration,d", - Value: 1 * time.Minute, - Usage: "set the duration of the stress test", + &cli.BoolFlag{ + Name: "cri", + Usage: "Utilize CRI to create pods for the stress test. This requires a runtime that matches CRI runtime handler. Example: --runtime runc", }, - cli.BoolFlag{ + &cli.DurationFlag{ + Name: "duration", + Aliases: []string{"d"}, + Value: 1 * time.Minute, + Usage: "Set the duration of the stress test", + }, + &cli.BoolFlag{ Name: "exec", - Usage: "add execs to the stress tests", + Usage: "Add execs to the stress tests (non-CRI only)", }, - cli.StringFlag{ - Name: "image,i", - Value: "docker.io/library/alpine:latest", - Usage: "image to be utilized for testing", + &cli.StringFlag{ + Name: "image", + Aliases: []string{"i"}, + Value: "docker.io/library/alpine:latest", + Usage: "Image to be utilized for testing", }, - cli.BoolFlag{ - Name: "json,j", - Usage: "output results in json format", + &cli.BoolFlag{ + Name: "json", + Aliases: []string{"j"}, + Usage: "Output results in json format", }, - cli.StringFlag{ - Name: "metrics,m", - Usage: "address to serve the metrics API", + &cli.StringFlag{ + Name: "metrics", + Aliases: []string{"m"}, + Usage: "Address to serve the metrics API", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "runtime", - Usage: "set the runtime to stress test", - Value: plugin.RuntimeRuncV2, + Usage: "Set the runtime to stress test", + Value: plugins.RuntimeRuncV2, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "snapshotter", - Usage: "set the snapshotter to use", + Usage: "Set the snapshotter to use", Value: "overlayfs", }, } - app.Before = func(context *cli.Context) error { - if context.GlobalBool("json") { - logrus.SetLevel(logrus.WarnLevel) + app.Before = func(cliContext *cli.Context) error { + if cliContext.Bool("json") { + if err := log.SetLevel("warn"); err != nil { + return err + } } - if context.GlobalBool("debug") { - logrus.SetLevel(logrus.DebugLevel) + if cliContext.Bool("debug") { + if err := log.SetLevel("debug"); err != nil { + return err + } } return nil } - app.Commands = []cli.Command{ + app.Commands = []*cli.Command{ densityCommand, } - app.Action = func(context *cli.Context) error { + app.Action = func(cliContext *cli.Context) error { config := config{ - Address: context.GlobalString("address"), - Duration: context.GlobalDuration("duration"), - Concurrency: context.GlobalInt("concurrent"), - Exec: context.GlobalBool("exec"), - Image: context.GlobalString("image"), - JSON: context.GlobalBool("json"), - Metrics: context.GlobalString("metrics"), - Runtime: context.GlobalString("runtime"), - Snapshotter: context.GlobalString("snapshotter"), + Address: cliContext.String("address"), + Duration: cliContext.Duration("duration"), + Concurrency: cliContext.Int("concurrent"), + CRI: cliContext.Bool("cri"), + Exec: cliContext.Bool("exec"), + Image: cliContext.String("image"), + JSON: cliContext.Bool("json"), + Metrics: cliContext.String("metrics"), + Runtime: cliContext.String("runtime"), + Snapshotter: cliContext.String("snapshotter"), } if config.Metrics != "" { return serve(config) } + + if config.CRI { + return criTest(config) + } + return test(config) } if err := app.Run(os.Args); err != nil { @@ -195,6 +235,7 @@ func main() { type config struct { Concurrency int + CRI bool Duration time.Duration Address string Exec bool @@ -211,14 +252,100 @@ func (c config) newClient() (*containerd.Client, error) { func serve(c config) error { go func() { - if err := http.ListenAndServe(c.Metrics, metrics.Handler()); err != nil { - logrus.WithError(err).Error("listen and serve") + srv := &http.Server{ + Addr: c.Metrics, + Handler: metrics.Handler(), + ReadHeaderTimeout: 5 * time.Minute, // "G112: Potential Slowloris Attack (gosec)"; not a real concern for our use, so setting a long timeout. + } + if err := srv.ListenAndServe(); err != nil { + log.L.WithError(err).Error("listen and serve") } }() checkBinarySizes() + + if c.CRI { + return criTest(c) + } + return test(c) } +func criTest(c config) error { + var ( + timeout = 1 * time.Minute + wg sync.WaitGroup + ctx = namespaces.WithNamespace(context.Background(), stressNs) + ) + + client, err := remote.NewRuntimeService(c.Address, timeout) + if err != nil { + return fmt.Errorf("failed to create runtime service: %w", err) + } + + if err := criCleanup(ctx, client); err != nil { + return err + } + + tctx, cancel := context.WithTimeout(ctx, c.Duration) + go func() { + s := make(chan os.Signal, 1) + signal.Notify(s, syscall.SIGTERM, syscall.SIGINT) + <-s + cancel() + }() + + // get runtime version: + version, err := client.Version("") + if err != nil { + return fmt.Errorf("failed to get runtime version: %w", err) + } + var ( + workers []worker + r = &run{} + ) + log.L.Info("starting stress test run...") + // create the workers along with their spec + for i := 0; i < c.Concurrency; i++ { + wg.Add(1) + w := &criWorker{ + id: i, + wg: &wg, + client: client, + commit: fmt.Sprintf("%s-%s", version.RuntimeName, version.RuntimeVersion), + runtimeHandler: c.Runtime, + snapshotter: c.Snapshotter, + } + workers = append(workers, w) + } + + // start the timer and run the worker + r.start() + for _, w := range workers { + go w.run(ctx, tctx) + } + // wait and end the timer + wg.Wait() + r.end() + + results := r.gather(workers) + log.L.Infof("ending test run in %0.3f seconds", results.Seconds) + + log.L.WithField("failures", r.failures).Infof( + "create/start/delete %d containers in %0.3f seconds (%0.3f c/sec) or (%0.3f sec/c)", + results.Total, + results.Seconds, + results.ContainersPerSecond, + results.SecondsPerContainer, + ) + if c.JSON { + if err := json.NewEncoder(os.Stdout).Encode(results); err != nil { + return err + } + } + + return nil +} + func test(c config) error { var ( wg sync.WaitGroup @@ -233,11 +360,17 @@ func test(c config) error { if err := cleanup(ctx, client); err != nil { return err } - logrus.Infof("pulling %s", c.Image) + + log.L.Infof("pulling %s", c.Image) image, err := client.Pull(ctx, c.Image, containerd.WithPullUnpack, containerd.WithPullSnapshotter(c.Snapshotter)) if err != nil { return err } + v, err := client.Version(ctx) + if err != nil { + return err + } + tctx, cancel := context.WithTimeout(ctx, c.Duration) go func() { s := make(chan os.Signal, 1) @@ -247,18 +380,15 @@ func test(c config) error { }() var ( - workers []*worker + workers []worker r = &run{} ) - logrus.Info("starting stress test run...") - v, err := client.Version(ctx) - if err != nil { - return err - } + log.L.Info("starting stress test run...") // create the workers along with their spec for i := 0; i < c.Concurrency; i++ { wg.Add(1) - w := &worker{ + + w := &ctrWorker{ id: i, wg: &wg, image: image, @@ -273,7 +403,7 @@ func test(c config) error { for i := c.Concurrency; i < c.Concurrency+c.Concurrency; i++ { wg.Add(1) exec = &execWorker{ - worker: worker{ + ctrWorker: ctrWorker{ id: i, wg: &wg, image: image, @@ -300,9 +430,9 @@ func test(c config) error { results.ExecTotal = exec.count results.ExecFailures = exec.failures } - logrus.Infof("ending test run in %0.3f seconds", results.Seconds) + log.L.Infof("ending test run in %0.3f seconds", results.Seconds) - logrus.WithField("failures", r.failures).Infof( + log.L.WithField("failures", r.failures).Infof( "create/start/delete %d containers in %0.3f seconds (%0.3f c/sec) or (%0.3f sec/c)", results.Total, results.Seconds, diff --git a/cmd/containerd-stress/rlimit_freebsd.go b/cmd/containerd-stress/rlimit_freebsd.go index 92b299a37966..85c5743800ff 100644 --- a/cmd/containerd-stress/rlimit_freebsd.go +++ b/cmd/containerd-stress/rlimit_freebsd.go @@ -22,17 +22,15 @@ import ( func setRlimit() error { rlimit := int64(100000) - if rlimit > 0 { - var limit syscall.Rlimit - if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return err + } + if limit.Cur < rlimit { + limit.Cur = rlimit + if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { return err } - if limit.Cur < rlimit { - limit.Cur = rlimit - if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { - return err - } - } } return nil } diff --git a/cmd/containerd-stress/rlimit_unix.go b/cmd/containerd-stress/rlimit_unix.go index e8fa749a2337..681a92e7e324 100644 --- a/cmd/containerd-stress/rlimit_unix.go +++ b/cmd/containerd-stress/rlimit_unix.go @@ -1,5 +1,4 @@ //go:build !windows && !freebsd -// +build !windows,!freebsd /* Copyright The containerd Authors. @@ -25,19 +24,17 @@ import ( func setRlimit() error { rlimit := uint64(100000) - if rlimit > 0 { - var limit syscall.Rlimit - if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { - return err + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return err + } + if limit.Cur < rlimit { + limit.Cur = rlimit + if limit.Max < limit.Cur { + limit.Max = limit.Cur } - if limit.Cur < rlimit { - limit.Cur = rlimit - if limit.Max < limit.Cur { - limit.Max = limit.Cur - } - if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { - return err - } + if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return err } } return nil diff --git a/cmd/containerd-stress/size.go b/cmd/containerd-stress/size.go index 46fba62c5255..113ba6aa4a77 100644 --- a/cmd/containerd-stress/size.go +++ b/cmd/containerd-stress/size.go @@ -18,27 +18,34 @@ package main import ( "os" - "path/filepath" - "github.com/sirupsen/logrus" + "github.com/containerd/log" ) +const defaultPath = "/usr/local/bin/" + var binaries = []string{ - "ctr", - "containerd", - "containerd-shim", - "containerd-shim-runc-v1", - "containerd-shim-runc-v2", + defaultPath + "ctr", + defaultPath + "containerd", + defaultPath + "containerd-shim", + defaultPath + "containerd-shim-runc-v1", + defaultPath + "containerd-shim-runc-v2", } // checkBinarySizes checks and reports the binary sizes for the containerd compiled binaries to prometheus func checkBinarySizes() { for _, name := range binaries { - fi, err := os.Stat(filepath.Join("/usr/local/bin", name)) + fi, err := os.Stat(name) if err != nil { - logrus.WithError(err).Error("stat binary") + log.L.WithError(err).Error("stat binary") continue } + + if fi.IsDir() { + log.L.Error(name, "is not a file") + continue + } + binarySizeGauge.WithValues(name).Set(float64(fi.Size())) } } diff --git a/cmd/containerd-stress/worker.go b/cmd/containerd-stress/worker.go index cfa99a9bed5a..27fed37031cc 100644 --- a/cmd/containerd-stress/worker.go +++ b/cmd/containerd-stress/worker.go @@ -23,13 +23,13 @@ import ( "sync" "time" - "github.com/containerd/containerd" - "github.com/containerd/containerd/cio" - "github.com/containerd/containerd/oci" - "github.com/sirupsen/logrus" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/pkg/cio" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/containerd/log" ) -type worker struct { +type ctrWorker struct { id int wg *sync.WaitGroup count int @@ -41,10 +41,10 @@ type worker struct { snapshotter string } -func (w *worker) run(ctx, tctx context.Context) { +func (w *ctrWorker) run(ctx, tctx context.Context) { defer func() { w.wg.Done() - logrus.Infof("worker %d finished", w.id) + log.L.Infof("worker %d finished", w.id) }() for { select { @@ -55,13 +55,13 @@ func (w *worker) run(ctx, tctx context.Context) { w.count++ id := w.getID() - logrus.Debugf("starting container %s", id) + log.L.Debugf("starting container %s", id) start := time.Now() if err := w.runContainer(ctx, id); err != nil { if err != context.DeadlineExceeded || !strings.Contains(err.Error(), context.DeadlineExceeded.Error()) { w.failures++ - logrus.WithError(err).Errorf("running container %s", id) + log.L.WithError(err).Errorf("running container %s", id) errCounter.WithValues(err.Error()).Inc() } @@ -72,7 +72,23 @@ func (w *worker) run(ctx, tctx context.Context) { } } -func (w *worker) runContainer(ctx context.Context, id string) (err error) { +func (w *ctrWorker) incCount() { + w.count++ +} + +func (w *ctrWorker) getCount() int { + return w.count +} + +func (w *ctrWorker) incFailures() { + w.failures++ +} + +func (w *ctrWorker) getFailures() int { + return w.failures +} + +func (w *ctrWorker) runContainer(ctx context.Context, id string) (err error) { // fix up cgroups path for a default config c, err := w.client.NewContainer(ctx, id, containerd.WithSnapshotter(w.snapshotter), @@ -115,6 +131,6 @@ func (w *worker) runContainer(ctx context.Context, id string) (err error) { return nil } -func (w *worker) getID() string { +func (w *ctrWorker) getID() string { return fmt.Sprintf("%d-%d", w.id, w.count) } diff --git a/cmd/containerd/builtins/aufs_linux.go b/cmd/containerd/builtins/aufs_linux.go deleted file mode 100644 index f7f77057cc6c..000000000000 --- a/cmd/containerd/builtins/aufs_linux.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build !no_aufs -// +build !no_aufs - -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package builtins - -import _ "github.com/containerd/aufs/plugin" diff --git a/cmd/containerd/builtins/btrfs_linux.go b/cmd/containerd/builtins/btrfs_linux.go index a66ab284bcdd..00bd9314a725 100644 --- a/cmd/containerd/builtins/btrfs_linux.go +++ b/cmd/containerd/builtins/btrfs_linux.go @@ -1,5 +1,4 @@ //go:build !no_btrfs && cgo -// +build !no_btrfs,cgo /* Copyright The containerd Authors. @@ -19,4 +18,4 @@ package builtins -import _ "github.com/containerd/containerd/snapshots/btrfs/plugin" +import _ "github.com/containerd/containerd/v2/plugins/snapshots/btrfs/plugin" diff --git a/cmd/containerd/builtins/builtins.go b/cmd/containerd/builtins/builtins.go index 3e64dcea58fa..f6792266dd22 100644 --- a/cmd/containerd/builtins/builtins.go +++ b/cmd/containerd/builtins/builtins.go @@ -18,25 +18,35 @@ package builtins // register containerd builtins here import ( - _ "github.com/containerd/containerd/diff/walking/plugin" - _ "github.com/containerd/containerd/events/plugin" - _ "github.com/containerd/containerd/gc/scheduler" - _ "github.com/containerd/containerd/leases/plugin" - _ "github.com/containerd/containerd/metadata/plugin" - _ "github.com/containerd/containerd/runtime/restart/monitor" - _ "github.com/containerd/containerd/runtime/v2" - _ "github.com/containerd/containerd/services/containers" - _ "github.com/containerd/containerd/services/content" - _ "github.com/containerd/containerd/services/diff" - _ "github.com/containerd/containerd/services/events" - _ "github.com/containerd/containerd/services/healthcheck" - _ "github.com/containerd/containerd/services/images" - _ "github.com/containerd/containerd/services/introspection" - _ "github.com/containerd/containerd/services/leases" - _ "github.com/containerd/containerd/services/namespaces" - _ "github.com/containerd/containerd/services/opt" - _ "github.com/containerd/containerd/services/sandbox" - _ "github.com/containerd/containerd/services/snapshots" - _ "github.com/containerd/containerd/services/tasks" - _ "github.com/containerd/containerd/services/version" + _ "github.com/containerd/containerd/v2/core/runtime/v2" + _ "github.com/containerd/containerd/v2/plugins/content/local/plugin" + _ "github.com/containerd/containerd/v2/plugins/events" + _ "github.com/containerd/containerd/v2/plugins/gc" + _ "github.com/containerd/containerd/v2/plugins/imageverifier" + _ "github.com/containerd/containerd/v2/plugins/leases" + _ "github.com/containerd/containerd/v2/plugins/metadata" + _ "github.com/containerd/containerd/v2/plugins/mount" + _ "github.com/containerd/containerd/v2/plugins/nri" + _ "github.com/containerd/containerd/v2/plugins/restart" + _ "github.com/containerd/containerd/v2/plugins/sandbox" + _ "github.com/containerd/containerd/v2/plugins/services/containers" + _ "github.com/containerd/containerd/v2/plugins/services/content" + _ "github.com/containerd/containerd/v2/plugins/services/diff" + _ "github.com/containerd/containerd/v2/plugins/services/events" + _ "github.com/containerd/containerd/v2/plugins/services/healthcheck" + _ "github.com/containerd/containerd/v2/plugins/services/images" + _ "github.com/containerd/containerd/v2/plugins/services/introspection" + _ "github.com/containerd/containerd/v2/plugins/services/leases" + _ "github.com/containerd/containerd/v2/plugins/services/mounts" + _ "github.com/containerd/containerd/v2/plugins/services/namespaces" + _ "github.com/containerd/containerd/v2/plugins/services/opt" + _ "github.com/containerd/containerd/v2/plugins/services/sandbox" + _ "github.com/containerd/containerd/v2/plugins/services/snapshots" + _ "github.com/containerd/containerd/v2/plugins/services/streaming" + _ "github.com/containerd/containerd/v2/plugins/services/tasks" + _ "github.com/containerd/containerd/v2/plugins/services/transfer" + _ "github.com/containerd/containerd/v2/plugins/services/version" + _ "github.com/containerd/containerd/v2/plugins/services/warning" + _ "github.com/containerd/containerd/v2/plugins/streaming" + _ "github.com/containerd/containerd/v2/plugins/transfer" ) diff --git a/cmd/containerd/builtins/builtins_freebsd.go b/cmd/containerd/builtins/builtins_freebsd.go index c7fdbe190e9d..2201896bba49 100644 --- a/cmd/containerd/builtins/builtins_freebsd.go +++ b/cmd/containerd/builtins/builtins_freebsd.go @@ -16,4 +16,7 @@ package builtins -import _ "github.com/containerd/zfs/plugin" +import ( + _ "github.com/containerd/containerd/v2/plugins/diff/walking/plugin" + _ "github.com/containerd/zfs/v2/plugin" +) diff --git a/cmd/containerd/builtins/builtins_linux.go b/cmd/containerd/builtins/builtins_linux.go index 2671606f4eba..978127e90f57 100644 --- a/cmd/containerd/builtins/builtins_linux.go +++ b/cmd/containerd/builtins/builtins_linux.go @@ -17,10 +17,14 @@ package builtins import ( - _ "github.com/containerd/containerd/metrics/cgroups" - _ "github.com/containerd/containerd/metrics/cgroups/v2" - _ "github.com/containerd/containerd/runtime/v1/linux" - _ "github.com/containerd/containerd/runtime/v2/runc/options" - _ "github.com/containerd/containerd/snapshots/native/plugin" - _ "github.com/containerd/containerd/snapshots/overlay/plugin" + _ "github.com/containerd/containerd/api/types/runc/options" + _ "github.com/containerd/containerd/v2/core/metrics/cgroups" + _ "github.com/containerd/containerd/v2/core/metrics/cgroups/v2" + _ "github.com/containerd/containerd/v2/plugins/diff/erofs/plugin" + _ "github.com/containerd/containerd/v2/plugins/diff/walking/plugin" + _ "github.com/containerd/containerd/v2/plugins/mount/erofs" + _ "github.com/containerd/containerd/v2/plugins/snapshots/blockfile/plugin" + _ "github.com/containerd/containerd/v2/plugins/snapshots/erofs/plugin" + _ "github.com/containerd/containerd/v2/plugins/snapshots/native/plugin" + _ "github.com/containerd/containerd/v2/plugins/snapshots/overlay/plugin" ) diff --git a/cmd/containerd/builtins/builtins_unix.go b/cmd/containerd/builtins/builtins_unix.go index 5b9eced4b887..f378a6b843eb 100644 --- a/cmd/containerd/builtins/builtins_unix.go +++ b/cmd/containerd/builtins/builtins_unix.go @@ -1,5 +1,4 @@ //go:build darwin || freebsd || solaris -// +build darwin freebsd solaris /* Copyright The containerd Authors. @@ -20,5 +19,9 @@ package builtins import ( - _ "github.com/containerd/containerd/snapshots/native/plugin" + _ "github.com/containerd/containerd/v2/plugins/diff/erofs/plugin" + _ "github.com/containerd/containerd/v2/plugins/diff/walking/plugin" + _ "github.com/containerd/containerd/v2/plugins/snapshots/blockfile/plugin" + _ "github.com/containerd/containerd/v2/plugins/snapshots/erofs/plugin" + _ "github.com/containerd/containerd/v2/plugins/snapshots/native/plugin" ) diff --git a/cmd/containerd/builtins/builtins_windows.go b/cmd/containerd/builtins/builtins_windows.go index 3ba975a1ac2d..5600624e2e19 100644 --- a/cmd/containerd/builtins/builtins_windows.go +++ b/cmd/containerd/builtins/builtins_windows.go @@ -17,8 +17,8 @@ package builtins import ( - _ "github.com/containerd/containerd/diff/lcow" - _ "github.com/containerd/containerd/diff/windows" - _ "github.com/containerd/containerd/snapshots/lcow" - _ "github.com/containerd/containerd/snapshots/windows" + _ "github.com/containerd/containerd/v2/plugins/diff/lcow" + _ "github.com/containerd/containerd/v2/plugins/diff/windows" + _ "github.com/containerd/containerd/v2/plugins/snapshots/lcow" + _ "github.com/containerd/containerd/v2/plugins/snapshots/windows" ) diff --git a/cmd/containerd/builtins/cri.go b/cmd/containerd/builtins/cri.go new file mode 100644 index 000000000000..4e68b40dda31 --- /dev/null +++ b/cmd/containerd/builtins/cri.go @@ -0,0 +1,25 @@ +//go:build !no_cri + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package builtins + +import ( + _ "github.com/containerd/containerd/v2/plugins/cri" + _ "github.com/containerd/containerd/v2/plugins/cri/images" + _ "github.com/containerd/containerd/v2/plugins/cri/runtime" +) diff --git a/cmd/containerd/builtins/devmapper_linux.go b/cmd/containerd/builtins/devmapper_linux.go index b1b0578f06d2..1492cef9ea3c 100644 --- a/cmd/containerd/builtins/devmapper_linux.go +++ b/cmd/containerd/builtins/devmapper_linux.go @@ -1,5 +1,4 @@ //go:build !no_devmapper -// +build !no_devmapper /* Copyright The containerd Authors. @@ -19,4 +18,4 @@ package builtins -import _ "github.com/containerd/containerd/snapshots/devmapper/plugin" +import _ "github.com/containerd/containerd/v2/plugins/snapshots/devmapper/plugin" diff --git a/cmd/containerd/builtins/tracing.go b/cmd/containerd/builtins/tracing.go index a1d068e56178..0926cd52d2e7 100644 --- a/cmd/containerd/builtins/tracing.go +++ b/cmd/containerd/builtins/tracing.go @@ -1,5 +1,4 @@ //go:build !no_tracing -// +build !no_tracing /* Copyright The containerd Authors. @@ -20,5 +19,5 @@ package builtins import ( - _ "github.com/containerd/containerd/tracing/plugin" + _ "github.com/containerd/containerd/v2/pkg/tracing/plugin" ) diff --git a/cmd/containerd/builtins/zfs_linux.go b/cmd/containerd/builtins/zfs_linux.go index 48e47a6fd28f..8b4be027be9b 100644 --- a/cmd/containerd/builtins/zfs_linux.go +++ b/cmd/containerd/builtins/zfs_linux.go @@ -1,5 +1,4 @@ //go:build !no_zfs -// +build !no_zfs /* Copyright The containerd Authors. @@ -19,4 +18,4 @@ package builtins -import _ "github.com/containerd/zfs/plugin" +import _ "github.com/containerd/zfs/v2/plugin" diff --git a/cmd/containerd/command/config.go b/cmd/containerd/command/config.go index e2d0097f58c6..2e6d7fce0fb5 100644 --- a/cmd/containerd/command/config.go +++ b/cmd/containerd/command/config.go @@ -17,50 +17,37 @@ package command import ( - gocontext "context" - "io" + "context" "os" "path/filepath" - "github.com/containerd/containerd/defaults" - "github.com/containerd/containerd/images" - "github.com/containerd/containerd/pkg/timeout" - "github.com/containerd/containerd/services/server" - srvconfig "github.com/containerd/containerd/services/server/config" + "github.com/containerd/containerd/v2/cmd/containerd/server" + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" + "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/defaults" + "github.com/containerd/containerd/v2/pkg/timeout" + "github.com/containerd/containerd/v2/version" + "github.com/containerd/plugin/registry" ocispec "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pelletier/go-toml" - "github.com/urfave/cli" + "github.com/pelletier/go-toml/v2" + "github.com/urfave/cli/v2" ) -// Config is a wrapper of server config for printing out. -type Config struct { - *srvconfig.Config - // Plugins overrides `Plugins map[string]toml.Tree` in server config. - Plugins map[string]interface{} `toml:"plugins"` -} - -// WriteTo marshals the config to the provided writer -func (c *Config) WriteTo(w io.Writer) (int64, error) { - return 0, toml.NewEncoder(w).Encode(c) -} - -func outputConfig(cfg *srvconfig.Config) error { - config := &Config{ - Config: cfg, - } - - plugins, err := server.LoadPlugins(gocontext.Background(), config.Config) +func outputConfig(ctx context.Context, config *srvconfig.Config) error { + plugins, err := server.LoadPlugins(ctx, config) if err != nil { return err } if len(plugins) != 0 { - config.Plugins = make(map[string]interface{}) + if config.Plugins == nil { + config.Plugins = make(map[string]interface{}) + } for _, p := range plugins { if p.Config == nil { continue } - pc, err := config.Decode(p) + pc, err := config.Decode(ctx, p.URI(), p.Config) if err != nil { return err } @@ -82,49 +69,65 @@ func outputConfig(cfg *srvconfig.Config) error { // for the time being, keep the defaultConfig's version set at 1 so that // when a config without a version is loaded from disk and has no version // set, we assume it's a v1 config. But when generating new configs via - // this command, generate the v2 config - config.Config.Version = 2 + // this command, generate the max configuration version + config.Version = version.ConfigVersion - // remove overridden Plugins type to avoid duplication in output - config.Config.Plugins = nil + return toml.NewEncoder(os.Stdout).SetIndentTables(true).Encode(config) +} - _, err = config.WriteTo(os.Stdout) - return err +func defaultConfig() *srvconfig.Config { + return platformAgnosticDefaultConfig() } -var configCommand = cli.Command{ +var configCommand = &cli.Command{ Name: "config", - Usage: "information on the containerd config", - Subcommands: []cli.Command{ + Usage: "Information on the containerd config", + Subcommands: []*cli.Command{ { Name: "default", - Usage: "see the output of the default config", - Action: func(context *cli.Context) error { - return outputConfig(defaultConfig()) + Usage: "See the output of the default config", + Action: func(cliContext *cli.Context) error { + ctx := cliContext.Context + return outputConfig(ctx, defaultConfig()) }, }, { - Name: "dump", - Usage: "see the output of the final main config with imported in subconfig files", - Action: func(context *cli.Context) error { - config := defaultConfig() - if err := srvconfig.LoadConfig(context.GlobalString("config"), config); err != nil && !os.IsNotExist(err) { - return err - } - - return outputConfig(config) - }, + Name: "dump", + Usage: "See the output of the final main config with imported in subconfig files", + Action: dumpConfig, + }, + { + Name: "migrate", + Usage: "Migrate the current configuration file to the latest version (does not migrate subconfig files)", + // TODO(vinayakankugoyal): This should not output fields that were not set in the current configuration. + Action: dumpConfig, }, }, } +func dumpConfig(cliContext *cli.Context) error { + config := defaultConfig() + ctx := cliContext.Context + if err := srvconfig.LoadConfig(ctx, cliContext.String("config"), config); err != nil && !os.IsNotExist(err) { + return err + } + + if config.Version < version.ConfigVersion { + plugins := registry.Graph(srvconfig.V2DisabledFilter(config.DisabledPlugins)) + for _, p := range plugins { + if p.ConfigMigration != nil { + if err := p.ConfigMigration(ctx, config.Version, config.Plugins); err != nil { + return err + } + } + } + } + return outputConfig(ctx, config) +} + func platformAgnosticDefaultConfig() *srvconfig.Config { return &srvconfig.Config{ - // see: https://github.com/containerd/containerd/blob/5c6ea7fdc1247939edaddb1eba62a94527418687/RELEASES.md#daemon-configuration - // this version MUST remain set to 1 until either there exists a means to - // override / configure the default at the containerd cli .. or when - // version 1 is no longer supported - Version: 1, + Version: version.ConfigVersion, Root: defaults.DefaultRootDir, State: defaults.DefaultStateDir, GRPC: srvconfig.GRPCConfig{ @@ -135,6 +138,7 @@ func platformAgnosticDefaultConfig() *srvconfig.Config { DisabledPlugins: []string{}, RequiredPlugins: []string{}, StreamProcessors: streamProcessors(), + Imports: []string{defaults.DefaultConfigIncludePattern}, } } diff --git a/cmd/containerd/command/config_linux.go b/cmd/containerd/command/config_linux.go deleted file mode 100644 index df8e856cfa38..000000000000 --- a/cmd/containerd/command/config_linux.go +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package command - -import ( - srvconfig "github.com/containerd/containerd/services/server/config" -) - -func defaultConfig() *srvconfig.Config { - return platformAgnosticDefaultConfig() -} diff --git a/cmd/containerd/command/config_unsupported.go b/cmd/containerd/command/config_unsupported.go deleted file mode 100644 index 3d935dedef6e..000000000000 --- a/cmd/containerd/command/config_unsupported.go +++ /dev/null @@ -1,34 +0,0 @@ -//go:build !linux && !windows && !solaris -// +build !linux,!windows,!solaris - -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package command - -import ( - "github.com/containerd/containerd/defaults" - srvconfig "github.com/containerd/containerd/services/server/config" -) - -func defaultConfig() *srvconfig.Config { - cfg := platformAgnosticDefaultConfig() - cfg.Debug = srvconfig.Debug{ - Level: "info", - Address: defaults.DefaultDebugAddress, - } - return cfg -} diff --git a/cmd/containerd/command/config_windows.go b/cmd/containerd/command/config_windows.go deleted file mode 100644 index df8e856cfa38..000000000000 --- a/cmd/containerd/command/config_windows.go +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package command - -import ( - srvconfig "github.com/containerd/containerd/services/server/config" -) - -func defaultConfig() *srvconfig.Config { - return platformAgnosticDefaultConfig() -} diff --git a/cmd/containerd/command/main.go b/cmd/containerd/command/main.go index e40c2f35b173..c4d58c1322f7 100644 --- a/cmd/containerd/command/main.go +++ b/cmd/containerd/command/main.go @@ -17,7 +17,7 @@ package command import ( - gocontext "context" + "context" "fmt" "io" "net" @@ -27,17 +27,16 @@ import ( "runtime" "time" - "github.com/containerd/containerd/defaults" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/log" - _ "github.com/containerd/containerd/metrics" // import containerd build info - "github.com/containerd/containerd/mount" - "github.com/containerd/containerd/services/server" - srvconfig "github.com/containerd/containerd/services/server/config" - "github.com/containerd/containerd/sys" - "github.com/containerd/containerd/version" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/containerd/containerd/v2/cmd/containerd/server" + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" + _ "github.com/containerd/containerd/v2/core/metrics" // import containerd build info + "github.com/containerd/containerd/v2/core/mount" + "github.com/containerd/containerd/v2/defaults" + "github.com/containerd/containerd/v2/pkg/sys" + "github.com/containerd/containerd/v2/version" + "github.com/containerd/errdefs" + "github.com/containerd/log" + "github.com/urfave/cli/v2" "google.golang.org/grpc/grpclog" ) @@ -55,8 +54,18 @@ func init() { // Discard grpc logs so that they don't mess with our stdio grpclog.SetLoggerV2(grpclog.NewLoggerV2(io.Discard, io.Discard, io.Discard)) - cli.VersionPrinter = func(c *cli.Context) { - fmt.Println(c.App.Name, version.Package, c.App.Version, version.Revision) + cli.VersionPrinter = func(cliContext *cli.Context) { + fmt.Println(cliContext.App.Name, version.Package, cliContext.App.Version, version.Revision) + } + cli.VersionFlag = &cli.BoolFlag{ + Name: "version", + Aliases: []string{"v"}, + Usage: "Print the version", + } + cli.HelpFlag = &cli.BoolFlag{ + Name: "help", + Aliases: []string{"h"}, + Usage: "Show help", } } @@ -68,7 +77,7 @@ func App() *cli.App { app.Usage = usage app.Description = ` containerd is a high performance container runtime whose daemon can be started -by using this command. If none of the *config*, *publish*, or *help* commands +by using this command. If none of the *config*, *publish*, *oci-hook*, or *help* commands are specified, the default action of the **containerd** command is to start the containerd daemon in the foreground. @@ -78,40 +87,47 @@ at the default file location. The *containerd config* command can be used to generate the default configuration for containerd. The output of that command can be used and modified as necessary as a custom configuration.` app.Flags = []cli.Flag{ - cli.StringFlag{ - Name: "config,c", - Usage: "path to the configuration file", - Value: filepath.Join(defaults.DefaultConfigDir, "config.toml"), + &cli.StringFlag{ + Name: "config", + Aliases: []string{"c"}, + Usage: "Path to the configuration file", + Value: filepath.Join(defaults.DefaultConfigDir, "config.toml"), }, - cli.StringFlag{ - Name: "log-level,l", - Usage: "set the logging level [trace, debug, info, warn, error, fatal, panic]", + &cli.StringFlag{ + Name: "log-level", + Aliases: []string{"l"}, + Usage: "Set the logging level [trace, debug, info, warn, error, fatal, panic]", }, - cli.StringFlag{ - Name: "address,a", - Usage: "address for containerd's GRPC server", + &cli.StringFlag{ + Name: "address", + Aliases: []string{"a"}, + Usage: "Address for containerd's GRPC server", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "root", Usage: "containerd root directory", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "state", Usage: "containerd state directory", }, } app.Flags = append(app.Flags, serviceFlags()...) - app.Commands = []cli.Command{ + app.Commands = []*cli.Command{ configCommand, publishCommand, ociHook, } - app.Action = func(context *cli.Context) error { + app.Action = func(cliContext *cli.Context) error { + if args := cliContext.Args(); args.First() != "" { + return cli.ShowCommandHelp(cliContext, args.First()) + } + var ( start = time.Now() signals = make(chan os.Signal, 2048) serverC = make(chan *server.Server, 1) - ctx, cancel = gocontext.WithCancel(gocontext.Background()) + ctx, cancel = context.WithCancel(cliContext.Context) config = defaultConfig() ) @@ -119,19 +135,29 @@ can be used and modified as necessary as a custom configuration.` // Only try to load the config if it either exists, or the user explicitly // told us to load this path. - configPath := context.GlobalString("config") + configPath := cliContext.String("config") _, err := os.Stat(configPath) - if !os.IsNotExist(err) || context.GlobalIsSet("config") { - if err := srvconfig.LoadConfig(configPath, config); err != nil { + if !os.IsNotExist(err) || cliContext.IsSet("config") { + if err := srvconfig.LoadConfig(ctx, configPath, config); err != nil { return err } } // Apply flags to the config - if err := applyFlags(context, config); err != nil { + if err := applyFlags(cliContext, config); err != nil { return err } + if config.GRPC.Address == "" { + return fmt.Errorf("grpc address cannot be empty: %w", errdefs.ErrInvalidArgument) + } + if config.TTRPC.Address == "" { + // If TTRPC was not explicitly configured, use defaults based on GRPC. + config.TTRPC.Address = config.GRPC.Address + ".ttrpc" + config.TTRPC.UID = config.GRPC.UID + config.TTRPC.GID = config.GRPC.GID + } + // Make sure top-level directories are created early. if err := server.CreateTopLevelDirectories(config); err != nil { return err @@ -140,7 +166,7 @@ can be used and modified as necessary as a custom configuration.` // Stop if we are registering or unregistering against Windows SCM. stop, err := registerUnregisterService(config.Root) if err != nil { - logrus.Fatal(err) + log.L.Fatal(err) } if stop { return nil @@ -164,16 +190,7 @@ can be used and modified as necessary as a custom configuration.` log.G(ctx).WithError(w).Warn("cleanup temp mount") } - if config.GRPC.Address == "" { - return fmt.Errorf("grpc address cannot be empty: %w", errdefs.ErrInvalidArgument) - } - if config.TTRPC.Address == "" { - // If TTRPC was not explicitly configured, use defaults based on GRPC. - config.TTRPC.Address = fmt.Sprintf("%s.ttrpc", config.GRPC.Address) - config.TTRPC.UID = config.GRPC.UID - config.TTRPC.GID = config.GRPC.GID - } - log.G(ctx).WithFields(logrus.Fields{ + log.G(ctx).WithFields(log.Fields{ "version": version.Version, "revision": version.Revision, }).Info("starting containerd") @@ -185,8 +202,8 @@ can be used and modified as necessary as a custom configuration.` // run server initialization in a goroutine so we don't end up blocking important things like SIGTERM handling // while the server is initializing. - // As an example opening the bolt database will block forever if another containerd is already running and containerd - // will have to be be `kill -9`'ed to recover. + // As an example, opening the bolt database blocks forever if a containerd instance + // is already running, which must then be forcibly terminated (SIGKILL) to recover. chsrv := make(chan srvResp) go func() { defer close(chsrv) @@ -202,7 +219,7 @@ can be used and modified as necessary as a custom configuration.` // Launch as a Windows Service if necessary if err := launchService(server, done); err != nil { - logrus.Fatal(err) + log.L.Fatal(err) } select { case <-ctx.Done(): @@ -270,18 +287,27 @@ can be used and modified as necessary as a custom configuration.` } serve(ctx, l, server.ServeGRPC) - if err := notifyReady(ctx); err != nil { - log.G(ctx).WithError(err).Warn("notify ready failed") - } + readyC := make(chan struct{}) + go func() { + server.Wait() + close(readyC) + }() - log.G(ctx).Infof("containerd successfully booted in %fs", time.Since(start).Seconds()) - <-done + select { + case <-readyC: + if err := notifyReady(ctx); err != nil { + log.G(ctx).WithError(err).Warn("notify ready failed") + } + log.G(ctx).Infof("containerd successfully booted in %fs", time.Since(start).Seconds()) + <-done + case <-done: + } return nil } return app } -func serve(ctx gocontext.Context, l net.Listener, serveFunc func(net.Listener) error) { +func serve(ctx context.Context, l net.Listener, serveFunc func(net.Listener) error) { path := l.Addr().String() log.G(ctx).WithField("address", path).Info("serving...") go func() { @@ -292,10 +318,10 @@ func serve(ctx gocontext.Context, l net.Listener, serveFunc func(net.Listener) e }() } -func applyFlags(context *cli.Context, config *srvconfig.Config) error { +func applyFlags(cliContext *cli.Context, config *srvconfig.Config) error { // the order for config vs flag values is that flags will always override // the config values if they are set - if err := setLogLevel(context, config); err != nil { + if err := setLogLevel(cliContext, config); err != nil { return err } if err := setLogFormat(config); err != nil { @@ -319,7 +345,7 @@ func applyFlags(context *cli.Context, config *srvconfig.Config) error { d: &config.GRPC.Address, }, } { - if s := context.GlobalString(v.name); s != "" { + if s := cliContext.String(v.name); s != "" { *v.d = s if v.name == "root" || v.name == "state" { absPath, err := filepath.Abs(s) @@ -331,47 +357,29 @@ func applyFlags(context *cli.Context, config *srvconfig.Config) error { } } - applyPlatformFlags(context) + applyPlatformFlags(cliContext) return nil } -func setLogLevel(context *cli.Context, config *srvconfig.Config) error { - l := context.GlobalString("log-level") +func setLogLevel(cliContext *cli.Context, config *srvconfig.Config) error { + l := cliContext.String("log-level") if l == "" { l = config.Debug.Level } if l != "" { - lvl, err := logrus.ParseLevel(l) - if err != nil { - return err - } - logrus.SetLevel(lvl) + return log.SetLevel(l) } return nil } func setLogFormat(config *srvconfig.Config) error { - f := config.Debug.Format + f := log.OutputFormat(config.Debug.Format) if f == "" { f = log.TextFormat } - switch f { - case log.TextFormat: - logrus.SetFormatter(&logrus.TextFormatter{ - TimestampFormat: log.RFC3339NanoFixed, - FullTimestamp: true, - }) - case log.JSONFormat: - logrus.SetFormatter(&logrus.JSONFormatter{ - TimestampFormat: log.RFC3339NanoFixed, - }) - default: - return fmt.Errorf("unknown log format: %s", f) - } - - return nil + return log.SetFormat(f) } func dumpStacks(writeToFile bool) { @@ -386,7 +394,7 @@ func dumpStacks(writeToFile bool) { bufferLen *= 2 } buf = buf[:stackSize] - logrus.Infof("=== BEGIN goroutine stack dump ===\n%s\n=== END goroutine stack dump ===", buf) + log.L.Infof("=== BEGIN goroutine stack dump ===\n%s\n=== END goroutine stack dump ===", buf) if writeToFile { // Also write to file to aid gathering diagnostics @@ -397,6 +405,6 @@ func dumpStacks(writeToFile bool) { } defer f.Close() f.WriteString(string(buf)) - logrus.Infof("goroutine stack dump written to %s", name) + log.L.Infof("goroutine stack dump written to %s", name) } } diff --git a/cmd/containerd/command/main_unix.go b/cmd/containerd/command/main_unix.go index bf068e586482..e160c7b9b3fa 100644 --- a/cmd/containerd/command/main_unix.go +++ b/cmd/containerd/command/main_unix.go @@ -1,5 +1,4 @@ //go:build linux || darwin || freebsd || solaris -// +build linux darwin freebsd solaris /* Copyright The containerd Authors. @@ -24,8 +23,8 @@ import ( "os" "path/filepath" - "github.com/containerd/containerd/log" - "github.com/containerd/containerd/services/server" + "github.com/containerd/containerd/v2/cmd/containerd/server" + "github.com/containerd/log" "golang.org/x/sys/unix" ) diff --git a/cmd/containerd/command/main_windows.go b/cmd/containerd/command/main_windows.go index 6027035274ce..cf7c9418e588 100644 --- a/cmd/containerd/command/main_windows.go +++ b/cmd/containerd/command/main_windows.go @@ -26,17 +26,14 @@ import ( "github.com/Microsoft/go-winio/pkg/etw" "github.com/Microsoft/go-winio/pkg/etwlogrus" "github.com/Microsoft/go-winio/pkg/guid" - "github.com/containerd/containerd/log" - "github.com/containerd/containerd/services/server" + "github.com/containerd/containerd/v2/cmd/containerd/server" + "github.com/containerd/log" "github.com/sirupsen/logrus" "golang.org/x/sys/windows" ) var ( - handledSignals = []os.Signal{ - windows.SIGTERM, - windows.SIGINT, - } + handledSignals = []os.Signal{os.Interrupt} ) func handleSignals(ctx context.Context, signals chan os.Signal, serverC chan *server.Server, cancel func()) chan struct{} { @@ -75,7 +72,7 @@ func setupDumpStacks() { ev, _ := windows.UTF16PtrFromString(event) sd, err := windows.SecurityDescriptorFromString("D:P(A;;GA;;;BA)(A;;GA;;;SY)") if err != nil { - logrus.Errorf("failed to get security descriptor for debug stackdump event %s: %s", event, err.Error()) + log.L.Errorf("failed to get security descriptor for debug stackdump event %s: %s", event, err.Error()) return } var sa windows.SecurityAttributes @@ -84,11 +81,11 @@ func setupDumpStacks() { sa.SecurityDescriptor = sd h, err := windows.CreateEvent(&sa, 0, 0, ev) if h == 0 || err != nil { - logrus.Errorf("failed to create debug stackdump event %s: %s", event, err.Error()) + log.L.Errorf("failed to create debug stackdump event %s: %s", event, err.Error()) return } go func() { - logrus.Debugf("Stackdump - waiting signal at %s", event) + log.L.Debugf("Stackdump - waiting signal at %s", event) for { windows.WaitForSingleObject(h, windows.INFINITE) dumpStacks(true) @@ -109,12 +106,12 @@ func init() { // Microsoft/go-winio/tools/etw-provider-gen. provider, err := etw.NewProvider("ContainerD", etwCallback) if err != nil { - logrus.Error(err) + log.L.Error(err) } else { if hook, err := etwlogrus.NewHookFromProvider(provider); err == nil { logrus.AddHook(hook) } else { - logrus.Error(err) + log.L.Error(err) } } } diff --git a/cmd/containerd/command/notify_linux.go b/cmd/containerd/command/notify_linux.go deleted file mode 100644 index f97a1d3a5833..000000000000 --- a/cmd/containerd/command/notify_linux.go +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package command - -import ( - "context" - - sd "github.com/coreos/go-systemd/v22/daemon" - - "github.com/containerd/containerd/log" -) - -// notifyReady notifies systemd that the daemon is ready to serve requests -func notifyReady(ctx context.Context) error { - return sdNotify(ctx, sd.SdNotifyReady) -} - -// notifyStopping notifies systemd that the daemon is about to be stopped -func notifyStopping(ctx context.Context) error { - return sdNotify(ctx, sd.SdNotifyStopping) -} - -func sdNotify(ctx context.Context, state string) error { - notified, err := sd.SdNotify(false, state) - log.G(ctx). - WithError(err). - WithField("notified", notified). - WithField("state", state). - Debug("sd notification") - return err -} diff --git a/cmd/containerd/command/notify_no_systemd.go b/cmd/containerd/command/notify_no_systemd.go new file mode 100644 index 000000000000..2fa87491431b --- /dev/null +++ b/cmd/containerd/command/notify_no_systemd.go @@ -0,0 +1,33 @@ +//go:build linux && no_systemd + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package command + +import ( + "context" +) + +// notifyReady notifies systemd that the daemon is ready to serve requests +func notifyReady(ctx context.Context) error { + return nil +} + +// notifyStopping notifies systemd that the daemon is about to be stopped +func notifyStopping(ctx context.Context) error { + return nil +} diff --git a/cmd/containerd/command/notify_systemd.go b/cmd/containerd/command/notify_systemd.go new file mode 100644 index 000000000000..6dc1ca3f96e6 --- /dev/null +++ b/cmd/containerd/command/notify_systemd.go @@ -0,0 +1,50 @@ +//go:build linux && !no_systemd + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package command + +import ( + "context" + + sd "github.com/coreos/go-systemd/v22/daemon" + + "github.com/containerd/log" +) + +// notifyReady notifies systemd that the daemon is ready to serve requests +func notifyReady(ctx context.Context) error { + return sdNotify(ctx, sd.SdNotifyReady) +} + +// notifyStopping notifies systemd that the daemon is about to be stopped +func notifyStopping(ctx context.Context) error { + return sdNotify(ctx, sd.SdNotifyStopping) +} + +func sdNotify(ctx context.Context, state string) error { + notified, err := sd.SdNotify(false, state) + entry := log.G(ctx) + if err != nil { + entry = entry.WithError(err) + } + entry.WithField("notified", notified). + WithField("state", state). + Debug("sd notification") + + return err +} diff --git a/cmd/containerd/command/notify_unsupported.go b/cmd/containerd/command/notify_unsupported.go index 76b3f8580ed8..aeaebfc33909 100644 --- a/cmd/containerd/command/notify_unsupported.go +++ b/cmd/containerd/command/notify_unsupported.go @@ -1,5 +1,4 @@ //go:build !linux -// +build !linux /* Copyright The containerd Authors. diff --git a/cmd/containerd/command/oci-hook.go b/cmd/containerd/command/oci-hook.go index df626abbfcff..6863356cc4e4 100644 --- a/cmd/containerd/command/oci-hook.go +++ b/cmd/containerd/command/oci-hook.go @@ -25,25 +25,27 @@ import ( "syscall" "text/template" - specs "github.com/opencontainers/runtime-spec/specs-go" - "github.com/urfave/cli" + "github.com/containerd/containerd/v2/pkg/oci" + "github.com/opencontainers/runtime-spec/specs-go" + "github.com/urfave/cli/v2" ) -var ociHook = cli.Command{ +var ociHook = &cli.Command{ Name: "oci-hook", - Usage: "provides a base for OCI runtime hooks to allow arguments to be injected.", - Action: func(context *cli.Context) error { + Usage: "Provides a base for OCI runtime hooks to allow arguments to be injected.", + Action: func(cliContext *cli.Context) error { state, err := loadHookState(os.Stdin) if err != nil { return err } - spec, err := loadSpec(state.Bundle) + specFile := filepath.Join(state.Bundle, oci.ConfigFilename) + spec, err := loadSpec(specFile) if err != nil { return err } var ( ctx = newTemplateContext(state, spec) - args = []string(context.Args()) + args = cliContext.Args().Slice() env = os.Environ() ) if err := newList(&args).render(ctx); err != nil { @@ -56,14 +58,16 @@ var ociHook = cli.Command{ }, } +// hookSpec is a shallow version of [oci.Spec] containing only the +// fields we need for the hook. We use a shallow struct to reduce +// the overhead of unmarshaling. type hookSpec struct { - Root struct { - Path string `json:"path"` - } `json:"root"` + // Root configures the container's root filesystem. + Root *specs.Root `json:"root,omitempty"` } -func loadSpec(bundle string) (*hookSpec, error) { - f, err := os.Open(filepath.Join(bundle, "config.json")) +func loadSpec(path string) (*hookSpec, error) { + f, err := os.Open(path) if err != nil { return nil, err } diff --git a/cmd/containerd/command/publish.go b/cmd/containerd/command/publish.go index 166a74a384a7..ddd60e7dbd3a 100644 --- a/cmd/containerd/command/publish.go +++ b/cmd/containerd/command/publish.go @@ -17,7 +17,7 @@ package command import ( - gocontext "context" + "context" "fmt" "io" "net" @@ -25,33 +25,35 @@ import ( "time" eventsapi "github.com/containerd/containerd/api/services/events/v1" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/namespaces" - "github.com/containerd/containerd/pkg/dialer" - "github.com/containerd/containerd/protobuf/proto" - "github.com/containerd/containerd/protobuf/types" - "github.com/urfave/cli" + "github.com/containerd/errdefs" + "github.com/containerd/errdefs/pkg/errgrpc" + "github.com/urfave/cli/v2" "google.golang.org/grpc" "google.golang.org/grpc/backoff" "google.golang.org/grpc/credentials/insecure" + + "github.com/containerd/containerd/v2/pkg/dialer" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/pkg/protobuf/proto" + "github.com/containerd/containerd/v2/pkg/protobuf/types" ) -var publishCommand = cli.Command{ +var publishCommand = &cli.Command{ Name: "publish", - Usage: "binary to publish events to containerd", + Usage: "Binary to publish events to containerd", Flags: []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "namespace", - Usage: "namespace to publish to", + Usage: "Namespace to publish to", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "topic", - Usage: "topic of the event", + Usage: "Topic of the event", }, }, - Action: func(context *cli.Context) error { - ctx := namespaces.WithNamespace(gocontext.Background(), context.String("namespace")) - topic := context.String("topic") + Action: func(cliContext *cli.Context) error { + ctx := namespaces.WithNamespace(cliContext.Context, cliContext.String("namespace")) + topic := cliContext.String("topic") if topic == "" { return fmt.Errorf("topic required to publish event: %w", errdefs.ErrInvalidArgument) } @@ -59,7 +61,7 @@ var publishCommand = cli.Command{ if err != nil { return err } - client, err := connectEvents(context.GlobalString("address")) + client, err := connectEvents(cliContext.String("address")) if err != nil { return err } @@ -67,7 +69,7 @@ var publishCommand = cli.Command{ Topic: topic, Event: payload, }); err != nil { - return errdefs.FromGRPC(err) + return errgrpc.ToNative(err) } return nil }, @@ -78,11 +80,11 @@ func getEventPayload(r io.Reader) (*types.Any, error) { if err != nil { return nil, err } - var any types.Any - if err := proto.Unmarshal(data, &any); err != nil { + var payload types.Any + if err := proto.Unmarshal(data, &payload); err != nil { return nil, err } - return &any, nil + return &payload, nil } func connectEvents(address string) (eventsapi.EventsClient, error) { @@ -93,22 +95,18 @@ func connectEvents(address string) (eventsapi.EventsClient, error) { return eventsapi.NewEventsClient(conn), nil } -func connect(address string, d func(gocontext.Context, string) (net.Conn, error)) (*grpc.ClientConn, error) { +func connect(address string, d func(context.Context, string) (net.Conn, error)) (*grpc.ClientConn, error) { backoffConfig := backoff.DefaultConfig backoffConfig.MaxDelay = 3 * time.Second connParams := grpc.ConnectParams{ Backoff: backoffConfig, } gopts := []grpc.DialOption{ - grpc.WithBlock(), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(d), - grpc.FailOnNonTempDialError(true), grpc.WithConnectParams(connParams), } - ctx, cancel := gocontext.WithTimeout(gocontext.Background(), 2*time.Second) - defer cancel() - conn, err := grpc.DialContext(ctx, dialer.DialAddress(address), gopts...) + conn, err := grpc.NewClient(dialer.DialAddress(address), gopts...) if err != nil { return nil, fmt.Errorf("failed to dial %q: %w", address, err) } diff --git a/cmd/containerd/command/service_unsupported.go b/cmd/containerd/command/service_unsupported.go index 2ea02af6e061..e275132dd4d2 100644 --- a/cmd/containerd/command/service_unsupported.go +++ b/cmd/containerd/command/service_unsupported.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows /* Copyright The containerd Authors. @@ -20,8 +19,8 @@ package command import ( - "github.com/containerd/containerd/services/server" - "github.com/urfave/cli" + "github.com/containerd/containerd/v2/cmd/containerd/server" + "github.com/urfave/cli/v2" ) // serviceFlags returns an array of flags for configuring containerd to run @@ -31,7 +30,7 @@ func serviceFlags() []cli.Flag { } // applyPlatformFlags applies platform-specific flags. -func applyPlatformFlags(context *cli.Context) { +func applyPlatformFlags(cliContext *cli.Context) { } // registerUnregisterService is only relevant on Windows. diff --git a/cmd/containerd/command/service_windows.go b/cmd/containerd/command/service_windows.go index 6b9be5f17955..6243e9379ebf 100644 --- a/cmd/containerd/command/service_windows.go +++ b/cmd/containerd/command/service_windows.go @@ -18,18 +18,16 @@ package command import ( "fmt" - "io" "log" "os" + "os/exec" "path/filepath" "time" - "unsafe" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/services/server" + "github.com/containerd/containerd/v2/cmd/containerd/server" + "github.com/containerd/errdefs" "github.com/sirupsen/logrus" - "github.com/urfave/cli" - exec "golang.org/x/sys/execabs" + "github.com/urfave/cli/v2" "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc" "golang.org/x/sys/windows/svc/debug" @@ -44,7 +42,6 @@ var ( logFileFlag string kernel32 = windows.NewLazySystemDLL("kernel32.dll") - setStdHandle = kernel32.NewProc("SetStdHandle") allocConsole = kernel32.NewProc("AllocConsole") oldStderr windows.Handle panicFile *os.File @@ -56,25 +53,25 @@ const defaultServiceName = "containerd" // as a Windows service under control of SCM. func serviceFlags() []cli.Flag { return []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "service-name", Usage: "Set the Windows service name", Value: defaultServiceName, }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "register-service", Usage: "Register the service and exit", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "unregister-service", Usage: "Unregister the service and exit", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "run-service", Usage: "", Hidden: true, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "log-file", Usage: "Path to the containerd log file", }, @@ -82,8 +79,8 @@ func serviceFlags() []cli.Flag { } // applyPlatformFlags applies platform-specific flags. -func applyPlatformFlags(context *cli.Context) { - serviceNameFlag = context.GlobalString("service-name") +func applyPlatformFlags(cliContext *cli.Context) { + serviceNameFlag = cliContext.String("service-name") if serviceNameFlag == "" { serviceNameFlag = defaultServiceName } @@ -104,9 +101,9 @@ func applyPlatformFlags(context *cli.Context) { d: &runServiceFlag, }, } { - *v.d = context.GlobalBool(v.name) + *v.d = cliContext.Bool(v.name) } - logFileFlag = context.GlobalString("log-file") + logFileFlag = cliContext.String("log-file") } type handler struct { @@ -156,38 +153,14 @@ func registerService() error { } defer s.Close() - // See http://stackoverflow.com/questions/35151052/how-do-i-configure-failure-actions-of-a-windows-service-written-in-go - const ( - scActionNone = 0 - scActionRestart = 1 - - serviceConfigFailureActions = 2 + return s.SetRecoveryActions( + []mgr.RecoveryAction{ + {Type: mgr.ServiceRestart, Delay: 15 * time.Second}, + {Type: mgr.ServiceRestart, Delay: 15 * time.Second}, + {Type: mgr.NoAction}, + }, + uint32(24*time.Hour/time.Second), ) - - type serviceFailureActions struct { - ResetPeriod uint32 - RebootMsg *uint16 - Command *uint16 - ActionsCount uint32 - Actions uintptr - } - - type scAction struct { - Type uint32 - Delay uint32 - } - t := []scAction{ - {Type: scActionRestart, Delay: uint32(15 * time.Second / time.Millisecond)}, - {Type: scActionRestart, Delay: uint32(15 * time.Second / time.Millisecond)}, - {Type: scActionNone}, - } - lpInfo := serviceFailureActions{ResetPeriod: uint32(24 * time.Hour / time.Second), ActionsCount: uint32(3), Actions: uintptr(unsafe.Pointer(&t[0]))} - err = windows.ChangeServiceConfig2(s.Handle, serviceConfigFailureActions, (*byte)(unsafe.Pointer(&lpInfo))) - if err != nil { - return err - } - - return nil } func unregisterService() error { @@ -214,7 +187,6 @@ func unregisterService() error { // to handle (un-)registering against Windows Service Control Manager (SCM). // It returns an indication to stop on successful SCM operation, and an error. func registerUnregisterService(root string) (bool, error) { - if unregisterServiceFlag { if registerServiceFlag { return true, fmt.Errorf("--register-service and --unregister-service cannot be used together: %w", errdefs.ErrInvalidArgument) @@ -248,22 +220,57 @@ func registerUnregisterService(root string) (bool, error) { return true, err } - logOutput := io.Discard + // The usual advice for Windows services is to either write to a log file or to the windows event + // log, the former of which we've exposed here via a --log-file flag. We additionally write panic + // stacks to a panic.log file to diagnose crashes. Below details the two different outcomes if + // --log-file is specified or not: + // + // --log-file is *not* specified. + // ------------------------------- + // -logrus, the stdlibs logging package and os.Stderr output will go to + // NUL (Windows' /dev/null equivalent). + // -Panics will write their stack trace to the panic.log file. + // -Writing to the handle returned from GetStdHandle(STD_ERROR_HANDLE) will write + // to the panic.log file as the underlying handle itself has been redirected. + // + // --log-file *is* specified + // ------------------------------- + // -Logging to logrus, the stdlibs logging package or directly to + // os.Stderr will all go to the log file specified. + // -Panics will write their stack trace to the panic.log file. + // -Writing to the handle returned from GetStdHandle(STD_ERROR_HANDLE) will write + // to the panic.log file as the underlying handle itself has been redirected. + var f *os.File if logFileFlag != "" { - f, err := os.OpenFile(logFileFlag, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + f, err = os.OpenFile(logFileFlag, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { return true, fmt.Errorf("open log file %q: %w", logFileFlag, err) } - logOutput = f + } else { + // Windows services start with NULL stdio handles, and thus os.Stderr and friends will be + // backed by an os.File with a NULL handle. This means writes to os.Stderr will fail, which + // isn't a huge issue as we want output to be discarded if the user doesn't ask for the log + // file. However, writes succeeding but just going to the ether is a much better construct + // so use devnull instead of relying on writes failing. We use devnull instead of io.Discard + // as os.Stderr is an os.File and can't be assigned to io.Discard. + f, err = os.OpenFile(os.DevNull, os.O_WRONLY, 0) + if err != nil { + return true, err + } } - logrus.SetOutput(logOutput) + // Reassign os.Stderr to the log file or NUL. Shim logs are copied to os.Stderr + // directly so this ensures those will end up in the log file as well if specified. + os.Stderr = f + // Assign the stdlibs log package in case of any miscellaneous uses by + // dependencies. + log.SetOutput(f) + logrus.SetOutput(f) } return false, nil } // launchService is the entry point for running the daemon under SCM. func launchService(s *server.Server, done chan struct{}) error { - if !runServiceFlag { return nil } @@ -274,16 +281,17 @@ func launchService(s *server.Server, done chan struct{}) error { done: done, } - interactive, err := svc.IsAnInteractiveSession() // nolint:staticcheck + // Check if we're running as a Windows service or interactively. + isService, err := svc.IsWindowsService() if err != nil { return err } go func() { - if interactive { - err = debug.Run(serviceNameFlag, h) - } else { + if isService { err = svc.Run(serviceNameFlag, h) + } else { + err = debug.Run(serviceNameFlag, h) } h.fromsvc <- err }() @@ -346,33 +354,19 @@ func initPanicFile(path string) error { // Update STD_ERROR_HANDLE to point to the panic file so that Go writes to // it when it panics. Remember the old stderr to restore it before removing // the panic file. - sh := uint32(windows.STD_ERROR_HANDLE) - h, err := windows.GetStdHandle(sh) + h, err := windows.GetStdHandle(windows.STD_ERROR_HANDLE) if err != nil { return err } - oldStderr = h - r, _, err := setStdHandle.Call(uintptr(sh), panicFile.Fd()) - if r == 0 && err != nil { - return err - } - - // Reset os.Stderr to the panic file (so fmt.Fprintf(os.Stderr,...) actually gets redirected) - os.Stderr = os.NewFile(panicFile.Fd(), "/dev/stderr") - - // Force threads that panic to write to stderr (the panicFile handle now), otherwise it will go into the ether - log.SetOutput(os.Stderr) - - return nil + return windows.SetStdHandle(windows.STD_ERROR_HANDLE, windows.Handle(panicFile.Fd())) } func removePanicFile() { if st, err := panicFile.Stat(); err == nil { if st.Size() == 0 { - sh := uint32(windows.STD_ERROR_HANDLE) - setStdHandle.Call(uintptr(sh), uintptr(oldStderr)) + windows.SetStdHandle(windows.STD_ERROR_HANDLE, oldStderr) panicFile.Close() os.Remove(panicFile.Name()) } diff --git a/cmd/containerd/main.go b/cmd/containerd/main.go index 7eee0ddf5652..04cdf1f88a6c 100644 --- a/cmd/containerd/main.go +++ b/cmd/containerd/main.go @@ -20,17 +20,11 @@ import ( "fmt" "os" - "github.com/containerd/containerd/cmd/containerd/command" - "github.com/containerd/containerd/pkg/seed" + "github.com/containerd/containerd/v2/cmd/containerd/command" - _ "github.com/containerd/containerd/cmd/containerd/builtins" - _ "github.com/containerd/containerd/pkg/cri" + _ "github.com/containerd/containerd/v2/cmd/containerd/builtins" ) -func init() { - seed.WithTimeAndRand() -} - func main() { app := command.App() if err := app.Run(os.Args); err != nil { diff --git a/cmd/containerd/server/config/config.go b/cmd/containerd/server/config/config.go new file mode 100644 index 000000000000..2851f053abd8 --- /dev/null +++ b/cmd/containerd/server/config/config.go @@ -0,0 +1,498 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +// config is the global configuration for containerd +// +// Version History +// 1: Deprecated and removed in containerd 2.0 +// 2: Uses fully qualified plugin names +// 3: Added support for migration and warning on unknown fields +package config + +import ( + "bytes" + "context" + "errors" + "fmt" + "io" + "os" + "path/filepath" + "reflect" + "strings" + + "dario.cat/mergo" + "github.com/pelletier/go-toml/v2" + + "github.com/containerd/containerd/v2/version" + "github.com/containerd/errdefs" + "github.com/containerd/log" + "github.com/containerd/plugin" +) + +// migrations hold the migration functions for every prior containerd config version +var migrations = []func(context.Context, *Config) error{ + nil, // Version 0 is not defined, treated at version 1 + v1Migrate, // Version 1 plugins renamed to URI for version 2 + nil, // Version 2 has only plugin changes to version 3 +} + +// NOTE: Any new map fields added also need to be handled in mergeConfig. + +// Config provides containerd configuration data for the server +type Config struct { + // Version of the config file + Version int `toml:"version"` + // Root is the path to a directory where containerd will store persistent data + Root string `toml:"root"` + // State is the path to a directory where containerd will store transient data + State string `toml:"state"` + // TempDir is the path to a directory where to place containerd temporary files + TempDir string `toml:"temp"` + // GRPC configuration settings + GRPC GRPCConfig `toml:"grpc"` + // TTRPC configuration settings + TTRPC TTRPCConfig `toml:"ttrpc"` + // Debug and profiling settings + Debug Debug `toml:"debug"` + // Metrics and monitoring settings + Metrics MetricsConfig `toml:"metrics"` + // DisabledPlugins are IDs of plugins to disable. Disabled plugins won't be + // initialized and started. + // DisabledPlugins must use a fully qualified plugin URI. + DisabledPlugins []string `toml:"disabled_plugins"` + // RequiredPlugins are IDs of required plugins. Containerd exits if any + // required plugin doesn't exist or fails to be initialized or started. + // RequiredPlugins must use a fully qualified plugin URI. + RequiredPlugins []string `toml:"required_plugins"` + // Plugins provides plugin specific configuration for the initialization of a plugin + Plugins map[string]interface{} `toml:"plugins"` + // OOMScore adjust the containerd's oom score + OOMScore int `toml:"oom_score"` + // Cgroup specifies cgroup information for the containerd daemon process + Cgroup CgroupConfig `toml:"cgroup"` + // ProxyPlugins configures plugins which are communicated to over GRPC + ProxyPlugins map[string]ProxyPlugin `toml:"proxy_plugins"` + // Timeouts specified as a duration + Timeouts map[string]string `toml:"timeouts"` + // Imports are additional file path list to config files that can overwrite main config file fields + Imports []string `toml:"imports"` + // StreamProcessors configuration + StreamProcessors map[string]StreamProcessor `toml:"stream_processors"` +} + +// StreamProcessor provides configuration for diff content processors +type StreamProcessor struct { + // Accepts specific media-types + Accepts []string `toml:"accepts"` + // Returns the media-type + Returns string `toml:"returns"` + // Path or name of the binary + Path string `toml:"path"` + // Args to the binary + Args []string `toml:"args"` + // Environment variables for the binary + Env []string `toml:"env"` +} + +// ValidateVersion validates the config for a v2 file +func (c *Config) ValidateVersion() error { + if c.Version > version.ConfigVersion { + return fmt.Errorf("expected containerd config version equal to or less than `%d`, got `%d`", version.ConfigVersion, c.Version) + } + + for _, p := range c.DisabledPlugins { + if !strings.ContainsAny(p, ".") { + return fmt.Errorf("invalid disabled plugin URI %q expect io.containerd.x.vx", p) + } + } + for _, p := range c.RequiredPlugins { + if !strings.ContainsAny(p, ".") { + return fmt.Errorf("invalid required plugin URI %q expect io.containerd.x.vx", p) + } + } + + return nil +} + +// MigrateConfig will convert the config to the latest version before using +func (c *Config) MigrateConfig(ctx context.Context) error { + return c.MigrateConfigTo(ctx, version.ConfigVersion) +} + +// MigrateConfigTo will convert the config to the target version before using +func (c *Config) MigrateConfigTo(ctx context.Context, targetVersion int) error { + for c.Version < targetVersion { + if m := migrations[c.Version]; m != nil { + if err := m(ctx, c); err != nil { + return err + } + } + c.Version++ + } + return nil +} + +func v1MigratePluginName(ctx context.Context, plugin string) string { + // corePlugins is the list of used plugins before v1 was deprecated + corePlugins := map[string]string{ + "cri": "io.containerd.grpc.v1.cri", + "cgroups": "io.containerd.monitor.v1.cgroups", + "linux": "io.containerd.runtime.v1.linux", + "scheduler": "io.containerd.gc.v1.scheduler", + "bolt": "io.containerd.metadata.v1.bolt", + "task": "io.containerd.runtime.v2.task", + "opt": "io.containerd.internal.v1.opt", + "restart": "io.containerd.internal.v1.restart", + "tracing": "io.containerd.internal.v1.tracing", + "otlp": "io.containerd.tracing.processor.v1.otlp", + "aufs": "io.containerd.snapshotter.v1.aufs", + "btrfs": "io.containerd.snapshotter.v1.btrfs", + "devmapper": "io.containerd.snapshotter.v1.devmapper", + "native": "io.containerd.snapshotter.v1.native", + "overlayfs": "io.containerd.snapshotter.v1.overlayfs", + "zfs": "io.containerd.snapshotter.v1.zfs", + } + if !strings.ContainsAny(plugin, ".") { + var ambiguous string + if full, ok := corePlugins[plugin]; ok { + plugin = full + } else if strings.HasSuffix(plugin, "-service") { + plugin = "io.containerd.service.v1." + plugin + } else if plugin == "windows" || plugin == "windows-lcow" { + // runtime, differ, and snapshotter plugins do not have configs for v1 + ambiguous = plugin + plugin = "io.containerd.snapshotter.v1." + plugin + } else { + ambiguous = plugin + plugin = "io.containerd.grpc.v1." + plugin + } + if ambiguous != "" { + log.G(ctx).Warnf("Ambiguous %s plugin in v1 config, treating as %s", ambiguous, plugin) + } + } + return plugin +} + +func v1Migrate(ctx context.Context, c *Config) error { + plugins := make(map[string]interface{}, len(c.Plugins)) + for plugin, value := range c.Plugins { + plugins[v1MigratePluginName(ctx, plugin)] = value + } + c.Plugins = plugins + for i, plugin := range c.DisabledPlugins { + c.DisabledPlugins[i] = v1MigratePluginName(ctx, plugin) + } + for i, plugin := range c.RequiredPlugins { + c.RequiredPlugins[i] = v1MigratePluginName(ctx, plugin) + } + // No change in c.ProxyPlugins + return nil +} + +// GRPCConfig provides GRPC configuration for the socket +type GRPCConfig struct { + Address string `toml:"address"` + TCPAddress string `toml:"tcp_address"` + TCPTLSCA string `toml:"tcp_tls_ca"` + TCPTLSCert string `toml:"tcp_tls_cert"` + TCPTLSKey string `toml:"tcp_tls_key"` + UID int `toml:"uid"` + GID int `toml:"gid"` + MaxRecvMsgSize int `toml:"max_recv_message_size"` + MaxSendMsgSize int `toml:"max_send_message_size"` + TCPTLSCName string `toml:"tcp_tls_common_name"` +} + +// TTRPCConfig provides TTRPC configuration for the socket +type TTRPCConfig struct { + Address string `toml:"address"` + UID int `toml:"uid"` + GID int `toml:"gid"` +} + +// Debug provides debug configuration +type Debug struct { + Address string `toml:"address"` + UID int `toml:"uid"` + GID int `toml:"gid"` + Level string `toml:"level"` + // Format represents the logging format. Supported values are 'text' and 'json'. + Format string `toml:"format"` +} + +// MetricsConfig provides metrics configuration +type MetricsConfig struct { + Address string `toml:"address"` + GRPCHistogram bool `toml:"grpc_histogram"` +} + +// CgroupConfig provides cgroup configuration +type CgroupConfig struct { + Path string `toml:"path"` +} + +// ProxyPlugin provides a proxy plugin configuration +type ProxyPlugin struct { + Type string `toml:"type"` + Address string `toml:"address"` + Platform string `toml:"platform"` + Exports map[string]string `toml:"exports"` + Capabilities []string `toml:"capabilities"` +} + +// Decode unmarshals a plugin specific configuration by plugin id +func (c *Config) Decode(ctx context.Context, id string, config interface{}) (interface{}, error) { + data, ok := c.Plugins[id] + if !ok { + return config, nil + } + + b, err := toml.Marshal(data) + if err != nil { + return nil, err + } + + if err := toml.NewDecoder(bytes.NewReader(b)).DisallowUnknownFields().Decode(config); err != nil { + var serr *toml.StrictMissingError + if errors.As(err, &serr) { + for _, derr := range serr.Errors { + log.G(ctx).WithFields(log.Fields{ + "plugin": id, + "key": strings.Join(derr.Key(), " "), + }).WithError(err).Warn("Ignoring unknown key in TOML for plugin") + } + err = toml.Unmarshal(b, config) + } + if err != nil { + return nil, err + } + + } + + return config, nil +} + +// LoadConfig loads the containerd server config from the provided path +func LoadConfig(ctx context.Context, path string, out *Config) error { + if out == nil { + return fmt.Errorf("argument out must not be nil: %w", errdefs.ErrInvalidArgument) + } + + var ( + loaded = map[string]bool{} + pending = []string{path} + ) + + for len(pending) > 0 { + path, pending = pending[0], pending[1:] + + // Check if a file at the given path already loaded to prevent circular imports + if _, ok := loaded[path]; ok { + continue + } + + config, err := loadConfigFile(ctx, path) + if err != nil { + return err + } + + switch config.Version { + case 0, 1: + if err := config.MigrateConfigTo(ctx, out.Version); err != nil { + return err + } + default: + // NOP + } + + if err := mergeConfig(out, config); err != nil { + return err + } + + imports, err := resolveImports(path, config.Imports) + if err != nil { + return err + } + + loaded[path] = true + pending = append(pending, imports...) + } + + err := out.ValidateVersion() + if err != nil { + return fmt.Errorf("failed to load TOML from %s: %w", path, err) + } + return nil +} + +// loadConfigFile decodes a TOML file at the given path +func loadConfigFile(ctx context.Context, path string) (*Config, error) { + config := &Config{} + + f, err := os.Open(path) + if err != nil { + return nil, err + } + defer f.Close() + + if err := toml.NewDecoder(f).DisallowUnknownFields().Decode(config); err != nil { + var serr *toml.StrictMissingError + if errors.As(err, &serr) { + for _, derr := range serr.Errors { + row, col := derr.Position() + log.G(ctx).WithFields(log.Fields{ + "file": path, + "row": row, + "column": col, + "key": strings.Join(derr.Key(), " "), + }).WithError(err).Warn("Ignoring unknown key in TOML") + } + + // Try decoding again with unknown fields + config = &Config{} + if _, seekerr := f.Seek(0, io.SeekStart); seekerr != nil { + return nil, fmt.Errorf("unable to seek file to start %w: failed to unmarshal TOML with unknown fields: %w", seekerr, err) + } + err = toml.NewDecoder(f).Decode(config) + } + if err != nil { + var derr *toml.DecodeError + if errors.As(err, &derr) { + row, column := derr.Position() + log.G(ctx).WithFields(log.Fields{ + "file": path, + "row": row, + "column": column, + }).WithError(err).Error("Failure unmarshaling TOML") + return nil, fmt.Errorf("failed to unmarshal TOML at row %d column %d: %w", row, column, err) + } + return nil, fmt.Errorf("failed to unmarshal TOML: %w", err) + } + + } + + return config, nil +} + +// resolveImports resolves import strings list to absolute paths list: +// - If path contains *, glob pattern matching applied +// - Non abs path is relative to parent config file directory +// - Abs paths returned as is +func resolveImports(parent string, imports []string) ([]string, error) { + var out []string + + for _, path := range imports { + path = filepath.Clean(path) + if !filepath.IsAbs(path) { + path = filepath.Join(filepath.Dir(parent), path) + } + + if strings.Contains(path, "*") { + matches, err := filepath.Glob(path) + if err != nil { + return nil, err + } + + out = append(out, matches...) + } else { + out = append(out, path) + } + } + + return out, nil +} + +// mergeConfig merges Config structs with the following rules: +// 'to' 'from' 'result' +// "" "value" "value" +// "value" "" "value" +// 1 0 1 +// 0 1 1 +// []{"1"} []{"2"} []{"1","2"} +// []{"1"} []{} []{"1"} +// []{"1", "2"} []{"1"} []{"1","2"} +// []{} []{"2"} []{"2"} +// Maps merged by keys, but values are replaced entirely. +func mergeConfig(to, from *Config) error { + err := mergo.Merge(to, from, mergo.WithOverride, mergo.WithTransformers(sliceTransformer{})) + if err != nil { + return err + } + + // Replace entire sections instead of merging map's values. + for k, v := range from.StreamProcessors { + to.StreamProcessors[k] = v + } + + for k, v := range from.ProxyPlugins { + to.ProxyPlugins[k] = v + } + + for k, v := range from.Timeouts { + to.Timeouts[k] = v + } + + return nil +} + +type sliceTransformer struct{} + +func (sliceTransformer) Transformer(t reflect.Type) func(dst, src reflect.Value) error { + if t.Kind() != reflect.Slice { + return nil + } + return func(dst, src reflect.Value) error { + if !dst.CanSet() { + return nil + } + if src.Type() != dst.Type() { + return fmt.Errorf("cannot append two slice with different type (%s, %s)", src.Type(), dst.Type()) + } + for i := 0; i < src.Len(); i++ { + found := false + for j := 0; j < dst.Len(); j++ { + srcv := src.Index(i) + dstv := dst.Index(j) + if !srcv.CanInterface() || !dstv.CanInterface() { + if srcv.Equal(dstv) { + found = true + break + } + } else if reflect.DeepEqual(srcv.Interface(), dstv.Interface()) { + found = true + break + } + } + if !found { + dst.Set(reflect.Append(dst, src.Index(i))) + } + } + + return nil + } +} + +// V2DisabledFilter matches based on URI +func V2DisabledFilter(list []string) plugin.DisableFilter { + set := make(map[string]struct{}, len(list)) + for _, l := range list { + set[l] = struct{}{} + } + return func(r *plugin.Registration) bool { + _, ok := set[r.URI()] + return ok + } +} diff --git a/cmd/containerd/server/config/config_test.go b/cmd/containerd/server/config/config_test.go new file mode 100644 index 000000000000..bfaf8faf331d --- /dev/null +++ b/cmd/containerd/server/config/config_test.go @@ -0,0 +1,448 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package config + +import ( + "bytes" + "context" + "fmt" + "os" + "path/filepath" + "sort" + "strings" + "testing" + + "github.com/pelletier/go-toml/v2" + + "github.com/stretchr/testify/assert" + + "github.com/containerd/containerd/v2/version" + "github.com/containerd/log/logtest" +) + +func TestMigrations(t *testing.T) { + if len(migrations) != version.ConfigVersion { + t.Fatalf("Migration missing, expected %d migrations, only %d defined", version.ConfigVersion, len(migrations)) + } +} + +func TestMergeConfigs(t *testing.T) { + a := &Config{ + Version: 2, + Root: "old_root", + RequiredPlugins: []string{"io.containerd.old_plugin.v1"}, + DisabledPlugins: []string{"io.containerd.old_plugin.v1"}, + State: "old_state", + OOMScore: 1, + Timeouts: map[string]string{"a": "1"}, + StreamProcessors: map[string]StreamProcessor{"1": {Path: "2", Returns: "4"}, "2": {Path: "5"}}, + } + + b := &Config{ + Version: 2, + Root: "new_root", + RequiredPlugins: []string{"io.containerd.new_plugin1.v1", "io.containerd.new_plugin2.v1"}, + DisabledPlugins: []string{"io.containerd.old_plugin.v1"}, + OOMScore: 2, + Timeouts: map[string]string{"b": "2"}, + StreamProcessors: map[string]StreamProcessor{"1": {Path: "3"}}, + } + + err := mergeConfig(a, b) + assert.NoError(t, err) + + assert.Equal(t, 2, a.Version) + assert.Equal(t, "new_root", a.Root) + assert.Equal(t, "old_state", a.State) + assert.Equal(t, 2, a.OOMScore) + assert.Equal(t, []string{"io.containerd.old_plugin.v1", "io.containerd.new_plugin1.v1", "io.containerd.new_plugin2.v1"}, a.RequiredPlugins) + assert.Equal(t, []string{"io.containerd.old_plugin.v1"}, a.DisabledPlugins) + assert.Equal(t, map[string]string{"a": "1", "b": "2"}, a.Timeouts) + assert.Equal(t, map[string]StreamProcessor{"1": {Path: "3"}, "2": {Path: "5"}}, a.StreamProcessors) + + // Verify overrides for integers + // https://github.com/containerd/containerd/blob/v1.6.0/services/server/config/config.go#L322-L323 + a = &Config{Version: 2, OOMScore: 1} + b = &Config{Version: 2, OOMScore: 0} // OOMScore "not set / default" + err = mergeConfig(a, b) + assert.NoError(t, err) + assert.Equal(t, 1, a.OOMScore) + + a = &Config{Version: 2, OOMScore: 1} + b = &Config{Version: 2, OOMScore: 0} // OOMScore "not set / default" + err = mergeConfig(a, b) + assert.NoError(t, err) + assert.Equal(t, 1, a.OOMScore) +} + +func TestResolveImports(t *testing.T) { + tempDir := t.TempDir() + + for _, filename := range []string{"config_1.toml", "config_2.toml", "test.toml"} { + err := os.WriteFile(filepath.Join(tempDir, filename), []byte(""), 0o600) + assert.NoError(t, err) + } + + imports, err := resolveImports(filepath.Join(tempDir, "root.toml"), []string{ + filepath.Join(tempDir, "config_*.toml"), // Glob + filepath.Join(tempDir, "./test.toml"), // Path clean up + "current.toml", // Resolve current working dir + }) + assert.NoError(t, err) + + assert.Equal(t, imports, []string{ + filepath.Join(tempDir, "config_1.toml"), + filepath.Join(tempDir, "config_2.toml"), + filepath.Join(tempDir, "test.toml"), + filepath.Join(tempDir, "current.toml"), + }) + + t.Run("GlobRelativePath", func(t *testing.T) { + imports, err := resolveImports(filepath.Join(tempDir, "root.toml"), []string{ + "config_*.toml", // Glob files from working dir + }) + assert.NoError(t, err) + assert.Equal(t, imports, []string{ + filepath.Join(tempDir, "config_1.toml"), + filepath.Join(tempDir, "config_2.toml"), + }) + }) +} + +func TestLoadSingleConfig(t *testing.T) { + data := ` +version = 2 +root = "/var/lib/containerd" + +[stream_processors] + [stream_processors."io.containerd.processor.v1.pigz"] + accepts = ["application/vnd.docker.image.rootfs.diff.tar.gzip"] + path = "unpigz" +` + tempDir := t.TempDir() + + path := filepath.Join(tempDir, "config.toml") + err := os.WriteFile(path, []byte(data), 0o600) + assert.NoError(t, err) + + var out Config + err = LoadConfig(context.Background(), path, &out) + assert.NoError(t, err) + assert.Equal(t, 2, out.Version) + assert.Equal(t, "/var/lib/containerd", out.Root) + assert.Equal(t, map[string]StreamProcessor{ + "io.containerd.processor.v1.pigz": { + Accepts: []string{"application/vnd.docker.image.rootfs.diff.tar.gzip"}, + Path: "unpigz", + }, + }, out.StreamProcessors) +} + +func TestLoadConfigWithImports(t *testing.T) { + data1 := ` +version = 2 +root = "/var/lib/containerd" +imports = ["data2.toml"] +` + + data2 := ` +disabled_plugins = ["io.containerd.v1.xyz"] +` + + tempDir := t.TempDir() + + err := os.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0o600) + assert.NoError(t, err) + + err = os.WriteFile(filepath.Join(tempDir, "data2.toml"), []byte(data2), 0o600) + assert.NoError(t, err) + + var out Config + err = LoadConfig(context.Background(), filepath.Join(tempDir, "data1.toml"), &out) + assert.NoError(t, err) + + assert.Equal(t, 2, out.Version) + assert.Equal(t, "/var/lib/containerd", out.Root) + assert.Equal(t, []string{"io.containerd.v1.xyz"}, out.DisabledPlugins) +} + +func TestLoadConfigWithCircularImports(t *testing.T) { + data1 := ` +version = 2 +root = "/var/lib/containerd" +imports = ["data2.toml", "data1.toml"] +` + + data2 := ` +disabled_plugins = ["io.containerd.v1.xyz"] +imports = ["data1.toml", "data2.toml"] +` + tempDir := t.TempDir() + + err := os.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0o600) + assert.NoError(t, err) + + err = os.WriteFile(filepath.Join(tempDir, "data2.toml"), []byte(data2), 0o600) + assert.NoError(t, err) + + var out Config + err = LoadConfig(context.Background(), filepath.Join(tempDir, "data1.toml"), &out) + assert.NoError(t, err) + + assert.Equal(t, 2, out.Version) + assert.Equal(t, "/var/lib/containerd", out.Root) + assert.Equal(t, []string{"io.containerd.v1.xyz"}, out.DisabledPlugins) + + sort.Strings(out.Imports) + assert.Equal(t, []string{ + "data1.toml", + "data2.toml", + }, out.Imports) +} + +// https://github.com/containerd/containerd/issues/10905 +func TestLoadConfigWithDefaultConfigVersion(t *testing.T) { + data1 := ` +disabled_plugins=["cri"] +` + tempDir := t.TempDir() + + err := os.WriteFile(filepath.Join(tempDir, "data1.toml"), []byte(data1), 0o600) + assert.NoError(t, err) + + var out Config + out.Version = version.ConfigVersion + err = LoadConfig(context.Background(), filepath.Join(tempDir, "data1.toml"), &out) + assert.NoError(t, err) + + assert.Equal(t, version.ConfigVersion, out.Version) + assert.Equal(t, []string{"io.containerd.grpc.v1.cri"}, out.DisabledPlugins) +} + +func TestDecodePlugin(t *testing.T) { + ctx := logtest.WithT(context.Background(), t) + data := ` +version = 2 +[plugins."io.containerd.runtime.v2.task"] + shim_debug = true +` + + tempDir := t.TempDir() + + path := filepath.Join(tempDir, "config.toml") + err := os.WriteFile(path, []byte(data), 0o600) + assert.NoError(t, err) + + var out Config + err = LoadConfig(context.Background(), path, &out) + assert.NoError(t, err) + + pluginConfig := map[string]interface{}{} + _, err = out.Decode(ctx, "io.containerd.runtime.v2.task", &pluginConfig) + assert.NoError(t, err) + assert.Equal(t, true, pluginConfig["shim_debug"]) +} + +// TestDecodePluginInV1Config tests decoding non-versioned config +// (should be parsed as V1 config) and migrated to latest. +func TestDecodePluginInV1Config(t *testing.T) { + ctx := logtest.WithT(context.Background(), t) + data := ` +[plugins.task] + shim_debug = true +` + + path := filepath.Join(t.TempDir(), "config.toml") + err := os.WriteFile(path, []byte(data), 0o600) + assert.NoError(t, err) + + var out Config + err = LoadConfig(context.Background(), path, &out) + assert.NoError(t, err) + assert.Equal(t, 0, out.Version) + + err = out.MigrateConfig(ctx) + assert.NoError(t, err) + assert.Equal(t, 3, out.Version) + + pluginConfig := map[string]interface{}{} + _, err = out.Decode(ctx, "io.containerd.runtime.v2.task", &pluginConfig) + assert.NoError(t, err) + assert.Equal(t, true, pluginConfig["shim_debug"]) +} + +func TestMergingPluginsWithTwoCriDropInConfigs(t *testing.T) { + data1 := ` +[plugins."io.containerd.grpc.v1.cri".cni] + bin_dir = "/cm/local/apps/kubernetes/current/bin/cni" +` + data2 := ` +[plugins."io.containerd.grpc.v1.cri".registry] + config_path = "/cm/local/apps/containerd/var/etc/certs.d" +` + expected := ` +[cni] + bin_dir = '/cm/local/apps/kubernetes/current/bin/cni' + +[registry] + config_path = '/cm/local/apps/containerd/var/etc/certs.d' +` + + testMergeConfig(t, []string{data1, data2}, expected, "io.containerd.grpc.v1.cri") + testMergeConfig(t, []string{data2, data1}, expected, "io.containerd.grpc.v1.cri") +} + +func TestMergingPluginsWithTwoCriCniDropInConfigs(t *testing.T) { + data1 := ` +[plugins."io.containerd.grpc.v1.cri".cni] + bin_dir = "/cm/local/apps/kubernetes/current/bin/cni" +` + data2 := ` +[plugins."io.containerd.grpc.v1.cri".cni] + conf_dir = "/tmp" +` + expected := ` +[cni] + bin_dir = '/cm/local/apps/kubernetes/current/bin/cni' + conf_dir = '/tmp' +` + testMergeConfig(t, []string{data1, data2}, expected, "io.containerd.grpc.v1.cri") +} + +func TestMergingPluginsWithTwoCriRuntimeDropInConfigs(t *testing.T) { + runcRuntime := ` +[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true +` + nvidiaRuntime := ` +[plugins] + [plugins."io.containerd.grpc.v1.cri"] + [plugins."io.containerd.grpc.v1.cri".containerd] + default_runtime_name = "nvidia" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] + privileged_without_host_devices = false + runtime_engine = "" + runtime_root = "" + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options] + BinaryName = "/usr/bin/nvidia-container-runtime" + SystemdCgroup = true +` + expected := ` +[containerd] + default_runtime_name = 'nvidia' + + [containerd.runtimes] + [containerd.runtimes.nvidia] + privileged_without_host_devices = false + runtime_engine = '' + runtime_root = '' + runtime_type = 'io.containerd.runc.v2' + + [containerd.runtimes.nvidia.options] + BinaryName = '/usr/bin/nvidia-container-runtime' + SystemdCgroup = true + + [containerd.runtimes.runc] + runtime_type = 'io.containerd.runc.v2' + + [containerd.runtimes.runc.options] + SystemdCgroup = true +` + testMergeConfig(t, []string{runcRuntime, nvidiaRuntime}, expected, "io.containerd.grpc.v1.cri") + + // Merging a third config that customizes only the default_runtime_name should result in mostly identical result + runcDefault := ` + [plugins."io.containerd.grpc.v1.cri".containerd] + default_runtime_name = "runc" +` + // This will then be the only difference in our expected TOML + expected2 := strings.Replace(expected, "default_runtime_name = 'nvidia'", "default_runtime_name = 'runc'", 1) + + testMergeConfig(t, []string{runcRuntime, nvidiaRuntime, runcDefault}, expected2, "io.containerd.grpc.v1.cri") + + // Mixing up the order will again result in 'nvidia' being the default runtime + testMergeConfig(t, []string{runcRuntime, runcDefault, nvidiaRuntime}, expected, "io.containerd.grpc.v1.cri") +} + +func TestMergingPluginsWithTwoCriRuntimeWithPodAnnotationsDropInConfigs(t *testing.T) { + runc1 := ` +[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + cni_conf_dir = "/foo" + pod_annotations = ["a", "b", "c"] +` + runc2 := ` +[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + cni_conf_dir = "/bar" + pod_annotations = ["d", "e", "f"] +` + expected := ` +[containerd] + [containerd.runtimes] + [containerd.runtimes.runc] + cni_conf_dir = '/bar' + pod_annotations = ['d', 'e', 'f'] + runtime_type = 'io.containerd.runc.v2' +` + testMergeConfig(t, []string{runc1, runc2}, expected, "io.containerd.grpc.v1.cri") + + // The other way around: runc1 over runc2 + expected = ` +[containerd] + [containerd.runtimes] + [containerd.runtimes.runc] + cni_conf_dir = '/foo' + pod_annotations = ['a', 'b', 'c'] + runtime_type = 'io.containerd.runc.v2' +` + testMergeConfig(t, []string{runc2, runc1}, expected, "io.containerd.grpc.v1.cri") +} + +func testMergeConfig(t *testing.T, inputs []string, expected string, comparePlugin string) { + tempDir := t.TempDir() + var result Config + + for i, data := range inputs { + filename := fmt.Sprintf("data%d.toml", i+1) + filepath := filepath.Join(tempDir, filename) + err := os.WriteFile(filepath, []byte(data), 0600) + assert.NoError(t, err) + + var tempOut Config + err = LoadConfig(context.Background(), filepath, &tempOut) + assert.NoError(t, err) + + if i == 0 { + result = tempOut + } else { + err = mergeConfig(&result, &tempOut) + assert.NoError(t, err) + } + } + + criPlugin := result.Plugins[comparePlugin] + var buf bytes.Buffer + if err := toml.NewEncoder(&buf).SetIndentTables(true).Encode(criPlugin); err != nil { + panic(err) + } + assert.Equal(t, strings.TrimLeft(expected, "\n"), buf.String()) +} diff --git a/cmd/containerd/server/namespace.go b/cmd/containerd/server/namespace.go new file mode 100644 index 000000000000..82870b2d2b7d --- /dev/null +++ b/cmd/containerd/server/namespace.go @@ -0,0 +1,52 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package server + +import ( + "context" + + "github.com/containerd/containerd/v2/pkg/namespaces" + "google.golang.org/grpc" +) + +func unaryNamespaceInterceptor(ctx context.Context, req interface{}, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + if ns, ok := namespaces.Namespace(ctx); ok { + // The above call checks the *incoming* metadata, this makes sure the outgoing metadata is also set + ctx = namespaces.WithNamespace(ctx, ns) + } + return handler(ctx, req) +} + +func streamNamespaceInterceptor(srv interface{}, ss grpc.ServerStream, _ *grpc.StreamServerInfo, handler grpc.StreamHandler) error { + ctx := ss.Context() + if ns, ok := namespaces.Namespace(ctx); ok { + // The above call checks the *incoming* metadata, this makes sure the outgoing metadata is also set + ctx = namespaces.WithNamespace(ctx, ns) + ss = &wrappedSSWithContext{ctx: ctx, ServerStream: ss} + } + + return handler(srv, ss) +} + +type wrappedSSWithContext struct { + grpc.ServerStream + ctx context.Context +} + +func (w *wrappedSSWithContext) Context() context.Context { + return w.ctx +} diff --git a/cmd/containerd/server/server.go b/cmd/containerd/server/server.go new file mode 100644 index 000000000000..6cc3c52e4d4d --- /dev/null +++ b/cmd/containerd/server/server.go @@ -0,0 +1,614 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package server + +import ( + "context" + "crypto/tls" + "crypto/x509" + "errors" + "expvar" + "fmt" + "io" + "net" + "net/http" + "net/http/pprof" + "os" + "path/filepath" + "runtime" + "sync" + "sync/atomic" + "time" + + "github.com/containerd/log" + "github.com/containerd/ttrpc" + "github.com/docker/go-metrics" + grpc_prometheus "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus" + v1 "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/prometheus/client_golang/prometheus" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" + "google.golang.org/grpc" + "google.golang.org/grpc/backoff" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/credentials/insecure" + + diffapi "github.com/containerd/containerd/api/services/diff/v1" + sbapi "github.com/containerd/containerd/api/services/sandbox/v1" + ssapi "github.com/containerd/containerd/api/services/snapshots/v1" + "github.com/containerd/platforms" + "github.com/containerd/plugin" + "github.com/containerd/plugin/registry" + + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" + csproxy "github.com/containerd/containerd/v2/core/content/proxy" + "github.com/containerd/containerd/v2/core/diff" + diffproxy "github.com/containerd/containerd/v2/core/diff/proxy" + sbproxy "github.com/containerd/containerd/v2/core/sandbox/proxy" + ssproxy "github.com/containerd/containerd/v2/core/snapshots/proxy" + "github.com/containerd/containerd/v2/defaults" + "github.com/containerd/containerd/v2/internal/wintls" + "github.com/containerd/containerd/v2/pkg/dialer" + "github.com/containerd/containerd/v2/pkg/sys" + "github.com/containerd/containerd/v2/pkg/timeout" + "github.com/containerd/containerd/v2/plugins" + "github.com/containerd/containerd/v2/plugins/services/warning" + "github.com/containerd/containerd/v2/version" +) + +// CreateTopLevelDirectories creates the top-level root and state directories. +func CreateTopLevelDirectories(config *srvconfig.Config) error { + switch { + case config.Root == "": + return errors.New("root must be specified") + case config.State == "": + return errors.New("state must be specified") + case config.Root == config.State: + return errors.New("root and state must be different paths") + } + + if err := sys.MkdirAllWithACL(config.Root, 0o700); err != nil { + return err + } + // chmod is needed for upgrading from an older release that created the dir with 0o711 + if err := os.Chmod(config.Root, 0o700); err != nil { + return err + } + + // For supporting userns-remapped containers, the state dir cannot be just mkdired with 0o700. + // Each of plugins creates a dedicated directory beneath the state dir with appropriate permission bits. + if err := sys.MkdirAllWithACL(config.State, 0o711); err != nil { + return err + } + if config.State != defaults.DefaultStateDir { + // XXX: socketRoot in pkg/shim is hard-coded to the default state directory. + // See https://github.com/containerd/containerd/issues/10502#issuecomment-2249268582 for why it's set up that way. + // The default fifo directory in pkg/cio is also configured separately and defaults to the default state directory instead of the configured state directory. + // Make sure the default state directory is created with the correct permissions. + if err := sys.MkdirAllWithACL(defaults.DefaultStateDir, 0o711); err != nil { + return err + } + } + + if config.TempDir != "" { + if err := sys.MkdirAllWithACL(config.TempDir, 0o700); err != nil { + return err + } + // chmod is needed for upgrading from an older release that created the dir with 0o711 + if err := os.Chmod(config.Root, 0o700); err != nil { + return err + } + if runtime.GOOS == "windows" { + // On Windows, the Host Compute Service (vmcompute) will read the + // TEMP/TMP setting from the calling process when creating the + // tempdir to extract an image layer to. This allows the + // administrator to align the tempdir location with the same volume + // as the snapshot dir to avoid a copy operation when moving the + // extracted layer to the snapshot dir location. + os.Setenv("TEMP", config.TempDir) + os.Setenv("TMP", config.TempDir) + } else { + os.Setenv("TMPDIR", config.TempDir) + } + } + return nil +} + +// New creates and initializes a new containerd server +func New(ctx context.Context, config *srvconfig.Config) (*Server, error) { + var ( + currentVersion = config.Version + migrationT time.Duration + ) + if currentVersion < version.ConfigVersion { + // Migrate config to latest version + t1 := time.Now() + err := config.MigrateConfig(ctx) + if err != nil { + return nil, err + } + migrationT = time.Since(t1) + } + + if err := apply(ctx, config); err != nil { + return nil, err + } + for key, sec := range config.Timeouts { + d, err := time.ParseDuration(sec) + if err != nil { + return nil, fmt.Errorf("unable to parse %s into a time duration", sec) + } + timeout.Set(key, d) + } + loaded, err := LoadPlugins(ctx, config) + if err != nil { + return nil, err + } + for id, p := range config.StreamProcessors { + diff.RegisterProcessor(diff.BinaryHandler(id, p.Returns, p.Accepts, p.Path, p.Args, p.Env)) + } + + var prometheusServerMetricsOpts []grpc_prometheus.ServerMetricsOption + if config.Metrics.GRPCHistogram { + // Enable grpc time histograms to measure rpc latencies + prometheusServerMetricsOpts = append(prometheusServerMetricsOpts, grpc_prometheus.WithServerHandlingTimeHistogram()) + } + + prometheusServerMetrics := grpc_prometheus.NewServerMetrics(prometheusServerMetricsOpts...) + prometheus.MustRegister(prometheusServerMetrics) + + serverOpts := []grpc.ServerOption{ + grpc.StatsHandler(otelgrpc.NewServerHandler()), + grpc.ChainStreamInterceptor( + streamNamespaceInterceptor, + prometheusServerMetrics.StreamServerInterceptor(), + ), + grpc.ChainUnaryInterceptor( + unaryNamespaceInterceptor, + prometheusServerMetrics.UnaryServerInterceptor(), + ), + } + if config.GRPC.MaxRecvMsgSize > 0 { + serverOpts = append(serverOpts, grpc.MaxRecvMsgSize(config.GRPC.MaxRecvMsgSize)) + } + if config.GRPC.MaxSendMsgSize > 0 { + serverOpts = append(serverOpts, grpc.MaxSendMsgSize(config.GRPC.MaxSendMsgSize)) + } + ttrpcServer, err := newTTRPCServer() + if err != nil { + return nil, err + } + tcpServerOpts := serverOpts + if config.GRPC.TCPTLSCert != "" { + log.G(ctx).Info("setting up tls on tcp GRPC services...") + + tlsCert, err := tls.LoadX509KeyPair(config.GRPC.TCPTLSCert, config.GRPC.TCPTLSKey) + if err != nil { + return nil, err + } + tlsConfig := &tls.Config{Certificates: []tls.Certificate{tlsCert}} + + if config.GRPC.TCPTLSCA != "" { + caCertPool := x509.NewCertPool() + caCert, err := os.ReadFile(config.GRPC.TCPTLSCA) + if err != nil { + return nil, fmt.Errorf("failed to load CA file: %w", err) + } + caCertPool.AppendCertsFromPEM(caCert) + tlsConfig.ClientCAs = caCertPool + tlsConfig.ClientAuth = tls.RequireAndVerifyClientCert + } + tcpServerOpts = append(tcpServerOpts, grpc.Creds(credentials.NewTLS(tlsConfig))) + } else if config.GRPC.TCPTLSCName != "" { + tlsConfig, CA, res, err := + wintls.SetupTLSFromWindowsCertStore(ctx, config.GRPC.TCPTLSCName) + if err != nil { + return nil, fmt.Errorf("failed to setup TLS from Windows cert store: %w", err) + } + // Cache resource for cleanup (Windows only) + setTLSResource(res) + if CA != nil { + tlsConfig.ClientCAs = CA + tlsConfig.ClientAuth = tls.RequireAndVerifyClientCert + } + tcpServerOpts = append(tcpServerOpts, grpc.Creds(credentials.NewTLS(tlsConfig))) + } + + // grpcService allows GRPC services to be registered with the underlying server + type grpcService interface { + Register(*grpc.Server) error + } + + // tcpService allows GRPC services to be registered with the underlying tcp server + type tcpService interface { + RegisterTCP(*grpc.Server) error + } + + // ttrpcService allows TTRPC services to be registered with the underlying server + type ttrpcService interface { + RegisterTTRPC(*ttrpc.Server) error + } + + var ( + grpcServer = grpc.NewServer(serverOpts...) + tcpServer = grpc.NewServer(tcpServerOpts...) + + grpcServices []grpcService + tcpServices []tcpService + ttrpcServices []ttrpcService + s = &Server{ + prometheusServerMetrics: prometheusServerMetrics, + grpcServer: grpcServer, + tcpServer: tcpServer, + ttrpcServer: ttrpcServer, + config: config, + } + initialized = plugin.NewPluginSet() + required = make(map[string]struct{}) + ) + for _, r := range config.RequiredPlugins { + required[r] = struct{}{} + } + + if currentVersion < version.ConfigVersion { + t1 := time.Now() + // Run migration for each configuration version + // Run each plugin migration for each version to ensure that migration logic is simple and + // focused on upgrading from one version at a time. + for v := currentVersion; v < version.ConfigVersion; v++ { + for _, p := range loaded { + if p.ConfigMigration != nil { + if err := p.ConfigMigration(ctx, v, config.Plugins); err != nil { + return nil, err + } + } + } + } + migrationT = migrationT + time.Since(t1) + } + if migrationT > 0 { + log.G(ctx).WithField("t", migrationT).Warnf("Configuration migrated from version %d, use `containerd config migrate` to avoid migration", currentVersion) + } + + for _, p := range loaded { + id := p.URI() + log.G(ctx).WithFields(log.Fields{"id": id, "type": p.Type}).Info("loading plugin") + var mustSucceed atomic.Int32 + + initContext := plugin.NewContext( + ctx, + initialized, + map[string]string{ + plugins.PropertyRootDir: filepath.Join(config.Root, id), + plugins.PropertyStateDir: filepath.Join(config.State, id), + plugins.PropertyGRPCAddress: config.GRPC.Address, + plugins.PropertyTTRPCAddress: config.TTRPC.Address, + }, + ) + initContext.RegisterReadiness = func() func() { + mustSucceed.Store(1) + return s.RegisterReadiness() + } + + // load the plugin specific configuration if it is provided + if p.Config != nil { + pc, err := config.Decode(ctx, id, p.Config) + if err != nil { + return nil, err + } + initContext.Config = pc + } + result := p.Init(initContext) + if err := initialized.Add(result); err != nil { + return nil, fmt.Errorf("could not add plugin result to plugin set: %w", err) + } + + instance, err := result.Instance() + if err != nil { + if plugin.IsSkipPlugin(err) { + log.G(ctx).WithFields(log.Fields{"error": err, "id": id, "type": p.Type}).Info("skip loading plugin") + } else { + log.G(ctx).WithFields(log.Fields{"error": err, "id": id, "type": p.Type}).Warn("failed to load plugin") + } + if _, ok := required[id]; ok { + return nil, fmt.Errorf("load required plugin %s: %w", id, err) + } + // If readiness was registered during initialization, the plugin cannot fail + if mustSucceed.Load() != 0 { + return nil, fmt.Errorf("plugin failed after registering readiness %s: %w", id, err) + } + continue + } + + delete(required, id) + // check for grpc services that should be registered with the server + if src, ok := instance.(grpcService); ok { + grpcServices = append(grpcServices, src) + } + if src, ok := instance.(ttrpcService); ok { + ttrpcServices = append(ttrpcServices, src) + } + if service, ok := instance.(tcpService); ok { + tcpServices = append(tcpServices, service) + } + + s.plugins = append(s.plugins, result) + } + if len(required) != 0 { + var missing []string + for id := range required { + missing = append(missing, id) + } + return nil, fmt.Errorf("required plugin %s not included", missing) + } + + // register services after all plugins have been initialized + for _, service := range grpcServices { + if err := service.Register(grpcServer); err != nil { + return nil, err + } + } + for _, service := range ttrpcServices { + if err := service.RegisterTTRPC(ttrpcServer); err != nil { + return nil, err + } + } + for _, service := range tcpServices { + if err := service.RegisterTCP(tcpServer); err != nil { + return nil, err + } + } + + recordConfigDeprecations(ctx, config, initialized) + return s, nil +} + +// recordConfigDeprecations attempts to record use of any deprecated config field. Failures are logged and ignored. +func recordConfigDeprecations(ctx context.Context, config *srvconfig.Config, set *plugin.Set) { + // record any detected deprecations without blocking server startup + p := set.Get(plugins.WarningPlugin, plugins.DeprecationsPlugin) + if p == nil { + log.G(ctx).Warn("failed to find warning service to record deprecations") + return + } + instance, err := p.Instance() + if err != nil { + log.G(ctx).WithError(err).Warn("failed to load warning service to record deprecations") + return + } + warn, ok := instance.(warning.Service) + if !ok { + log.G(ctx).WithError(err).Warn("failed to load warning service to record deprecations, unexpected plugin type") + return + } + + // warn.Emit(ctx, deprecation...) will be used for future deprecations + _ = warn +} + +// Server is the containerd main daemon +type Server struct { + prometheusServerMetrics *grpc_prometheus.ServerMetrics + grpcServer *grpc.Server + ttrpcServer *ttrpc.Server + tcpServer *grpc.Server + config *srvconfig.Config + plugins []*plugin.Plugin + ready sync.WaitGroup +} + +// ServeGRPC provides the containerd grpc APIs on the provided listener +func (s *Server) ServeGRPC(l net.Listener) error { + s.prometheusServerMetrics.InitializeMetrics(s.grpcServer) + return trapClosedConnErr(s.grpcServer.Serve(l)) +} + +// ServeTTRPC provides the containerd ttrpc APIs on the provided listener +func (s *Server) ServeTTRPC(l net.Listener) error { + return trapClosedConnErr(s.ttrpcServer.Serve(context.Background(), l)) +} + +// ServeMetrics provides a prometheus endpoint for exposing metrics +func (s *Server) ServeMetrics(l net.Listener) error { + m := http.NewServeMux() + m.Handle("/v1/metrics", metrics.Handler()) + srv := &http.Server{ + Handler: m, + ReadHeaderTimeout: 5 * time.Minute, // "G112: Potential Slowloris Attack (gosec)"; not a real concern for our use, so setting a long timeout. + } + return trapClosedConnErr(srv.Serve(l)) +} + +// ServeTCP allows services to serve over tcp +func (s *Server) ServeTCP(l net.Listener) error { + s.prometheusServerMetrics.InitializeMetrics(s.tcpServer) + return trapClosedConnErr(s.tcpServer.Serve(l)) +} + +// ServeDebug provides a debug endpoint +func (s *Server) ServeDebug(l net.Listener) error { + // don't use the default http server mux to make sure nothing gets registered + // that we don't want to expose via containerd + m := http.NewServeMux() + m.Handle("/debug/vars", expvar.Handler()) + m.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index)) + m.Handle("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline)) + m.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile)) + m.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol)) + m.Handle("/debug/pprof/trace", http.HandlerFunc(pprof.Trace)) + srv := &http.Server{ + Handler: m, + ReadHeaderTimeout: 5 * time.Minute, // "G112: Potential Slowloris Attack (gosec)"; not a real concern for our use, so setting a long timeout. + } + return trapClosedConnErr(srv.Serve(l)) +} + +// Stop the containerd server canceling any open connections +func (s *Server) Stop() { + s.grpcServer.Stop() + // Clean up TLS resources (Windows only) + cleanupTLSResources() + for i := len(s.plugins) - 1; i >= 0; i-- { + p := s.plugins[i] + instance, err := p.Instance() + if err != nil { + log.L.WithFields(log.Fields{"error": err, "id": p.Registration.URI()}).Error("could not get plugin instance") + continue + } + closer, ok := instance.(io.Closer) + if !ok { + continue + } + if err := closer.Close(); err != nil { + log.L.WithFields(log.Fields{"error": err, "id": p.Registration.URI()}).Error("failed to close plugin") + } + } +} + +func (s *Server) RegisterReadiness() func() { + s.ready.Add(1) + return func() { + s.ready.Done() + } +} + +func (s *Server) Wait() { + s.ready.Wait() +} + +// LoadPlugins loads all plugins into containerd and generates an ordered graph +// of all plugins. +func LoadPlugins(ctx context.Context, config *srvconfig.Config) ([]plugin.Registration, error) { + // load all plugins into containerd + clients := &proxyClients{} + for name, pp := range config.ProxyPlugins { + var ( + t plugin.Type + f func(*grpc.ClientConn) interface{} + + address = pp.Address + p v1.Platform + err error + ) + + switch pp.Type { + case string(plugins.SnapshotPlugin), "snapshot": + t = plugins.SnapshotPlugin + ssname := name + f = func(conn *grpc.ClientConn) interface{} { + return ssproxy.NewSnapshotter(ssapi.NewSnapshotsClient(conn), ssname) + } + + case string(plugins.ContentPlugin), "content": + t = plugins.ContentPlugin + f = func(conn *grpc.ClientConn) interface{} { + return csproxy.NewContentStore(conn) + } + case string(plugins.SandboxControllerPlugin), "sandbox": + t = plugins.SandboxControllerPlugin + f = func(conn *grpc.ClientConn) interface{} { + return sbproxy.NewSandboxController(sbapi.NewControllerClient(conn), name) + } + case string(plugins.DiffPlugin), "diff": + t = plugins.DiffPlugin + f = func(conn *grpc.ClientConn) interface{} { + return diffproxy.NewDiffApplier(diffapi.NewDiffClient(conn)) + } + default: + log.G(ctx).WithField("type", pp.Type).Warn("unknown proxy plugin type") + } + if pp.Platform != "" { + p, err = platforms.Parse(pp.Platform) + if err != nil { + log.G(ctx).WithFields(log.Fields{"error": err, "plugin": name}).Warn("skipping proxy platform with bad platform") + } + } else { + p = platforms.DefaultSpec() + } + + exports := pp.Exports + if exports == nil { + exports = map[string]string{} + } + exports["address"] = address + + registry.Register(&plugin.Registration{ + Type: t, + ID: name, + InitFn: func(ic *plugin.InitContext) (interface{}, error) { + ic.Meta.Exports = exports + ic.Meta.Platforms = append(ic.Meta.Platforms, p) + ic.Meta.Capabilities = pp.Capabilities + conn, err := clients.getClient(address) + if err != nil { + return nil, err + } + return f(conn), nil + }, + }) + + } + + filter := srvconfig.V2DisabledFilter + // return the ordered graph for plugins + return registry.Graph(filter(config.DisabledPlugins)), nil +} + +type proxyClients struct { + m sync.Mutex + clients map[string]*grpc.ClientConn +} + +func (pc *proxyClients) getClient(address string) (*grpc.ClientConn, error) { + pc.m.Lock() + defer pc.m.Unlock() + if pc.clients == nil { + pc.clients = map[string]*grpc.ClientConn{} + } else if c, ok := pc.clients[address]; ok { + return c, nil + } + + backoffConfig := backoff.DefaultConfig + backoffConfig.MaxDelay = 3 * time.Second + connParams := grpc.ConnectParams{ + Backoff: backoffConfig, + } + gopts := []grpc.DialOption{ + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithConnectParams(connParams), + grpc.WithContextDialer(dialer.ContextDialer), + + // TODO(stevvooe): We may need to allow configuration of this on the client. + grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(defaults.DefaultMaxRecvMsgSize)), + grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(defaults.DefaultMaxSendMsgSize)), + } + + conn, err := grpc.NewClient(dialer.DialAddress(address), gopts...) + if err != nil { + return nil, fmt.Errorf("failed to dial %q: %w", address, err) + } + + pc.clients[address] = conn + + return conn, nil +} + +func trapClosedConnErr(err error) error { + if err == nil || errors.Is(err, net.ErrClosed) { + return nil + } + return err +} diff --git a/cmd/containerd/server/server_linux.go b/cmd/containerd/server/server_linux.go new file mode 100644 index 000000000000..3e1cc46d95bc --- /dev/null +++ b/cmd/containerd/server/server_linux.go @@ -0,0 +1,79 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package server + +import ( + "context" + "os" + + "github.com/containerd/cgroups/v3" + cgroup1 "github.com/containerd/cgroups/v3/cgroup1" + cgroupsv2 "github.com/containerd/cgroups/v3/cgroup2" + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" + "github.com/containerd/containerd/v2/internal/wintls" + "github.com/containerd/containerd/v2/pkg/sys" + "github.com/containerd/log" + "github.com/containerd/otelttrpc" + "github.com/containerd/ttrpc" + specs "github.com/opencontainers/runtime-spec/specs-go" +) + +// apply sets config settings on the server process +func apply(ctx context.Context, config *srvconfig.Config) error { + if config.OOMScore != 0 { + log.G(ctx).Debugf("changing OOM score to %d", config.OOMScore) + if err := sys.SetOOMScore(os.Getpid(), config.OOMScore); err != nil { + log.G(ctx).WithError(err).Errorf("failed to change OOM score to %d", config.OOMScore) + } + } + if config.Cgroup.Path != "" { + if cgroups.Mode() == cgroups.Unified { + cg, err := cgroupsv2.Load(config.Cgroup.Path) + if err != nil { + return err + } + if err := cg.AddProc(uint64(os.Getpid())); err != nil { + return err + } + } else { + cg, err := cgroup1.Load(cgroup1.StaticPath(config.Cgroup.Path)) + if err != nil { + if err != cgroup1.ErrCgroupDeleted { + return err + } + if cg, err = cgroup1.New(cgroup1.StaticPath(config.Cgroup.Path), &specs.LinuxResources{}); err != nil { + return err + } + } + if err := cg.AddProc(uint64(os.Getpid())); err != nil { + return err + } + } + } + return nil +} + +func newTTRPCServer() (*ttrpc.Server, error) { + return ttrpc.NewServer( + ttrpc.WithServerHandshaker(ttrpc.UnixSocketRequireSameUser()), + ttrpc.WithUnaryServerInterceptor(otelttrpc.UnaryServerInterceptor()), + ) +} + +// TLS resource helpers are no-ops on Linux. +func setTLSResource(r wintls.CertResource) {} +func cleanupTLSResources() {} diff --git a/cmd/containerd/server/server_solaris.go b/cmd/containerd/server/server_solaris.go new file mode 100644 index 000000000000..416d3cdeed2e --- /dev/null +++ b/cmd/containerd/server/server_solaris.go @@ -0,0 +1,41 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package server + +import ( + "context" + + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" + "github.com/containerd/containerd/v2/internal/wintls" + "github.com/containerd/otelttrpc" + "github.com/containerd/ttrpc" +) + +func apply(_ context.Context, _ *srvconfig.Config) error { + return nil +} + +// TLS resource helpers are no-ops on Solaris. +func setTLSResource(r wintls.CertResource) {} +func cleanupTLSResources() {} + +// newTTRPCServer provides the ttrpc server for Solaris builds. +func newTTRPCServer() (*ttrpc.Server, error) { + return ttrpc.NewServer( + ttrpc.WithUnaryServerInterceptor(otelttrpc.UnaryServerInterceptor()), + ) +} diff --git a/cmd/containerd/server/server_test.go b/cmd/containerd/server/server_test.go new file mode 100644 index 000000000000..5d8fb0d67bfb --- /dev/null +++ b/cmd/containerd/server/server_test.go @@ -0,0 +1,150 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package server + +import ( + "context" + "testing" + + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" + "github.com/containerd/containerd/v2/version" + "github.com/containerd/plugin" + "github.com/containerd/plugin/registry" + "github.com/stretchr/testify/assert" +) + +const testPath = "/tmp/path/for/testing" + +func TestCreateTopLevelDirectoriesErrorsWithSamePathForRootAndState(t *testing.T) { + path := testPath + err := CreateTopLevelDirectories(&srvconfig.Config{ + Root: path, + State: path, + }) + assert.EqualError(t, err, "root and state must be different paths") +} + +func TestCreateTopLevelDirectoriesWithEmptyStatePath(t *testing.T) { + statePath := "" + rootPath := testPath + err := CreateTopLevelDirectories(&srvconfig.Config{ + Root: rootPath, + State: statePath, + }) + assert.EqualError(t, err, "state must be specified") +} + +func TestCreateTopLevelDirectoriesWithEmptyRootPath(t *testing.T) { + statePath := testPath + rootPath := "" + err := CreateTopLevelDirectories(&srvconfig.Config{ + Root: rootPath, + State: statePath, + }) + assert.EqualError(t, err, "root must be specified") +} + +func TestMigration(t *testing.T) { + registry.Reset() + defer registry.Reset() + + configVersion := version.ConfigVersion - 1 + + type testConfig struct { + Migrated string `toml:"migrated"` + NotMigrated string `toml:"notmigrated"` + } + + registry.Register(&plugin.Registration{ + Type: "io.containerd.test", + ID: "t1", + Config: &testConfig{}, + InitFn: func(ic *plugin.InitContext) (interface{}, error) { + c, ok := ic.Config.(*testConfig) + if !ok { + t.Error("expected first plugin to have configuration") + } else { + if c.Migrated != "" { + t.Error("expected first plugin to have empty value for migrated config") + } + if c.NotMigrated != "don't migrate me" { + t.Errorf("expected first plugin does not have correct value for not migrated config: %q", c.NotMigrated) + } + } + return nil, nil + }, + }) + registry.Register(&plugin.Registration{ + Type: "io.containerd.new", + Requires: []plugin.Type{ + "io.containerd.test", // Ensure this test runs second + }, + ID: "t2", + Config: &testConfig{}, + InitFn: func(ic *plugin.InitContext) (interface{}, error) { + c, ok := ic.Config.(*testConfig) + if !ok { + t.Error("expected second plugin to have configuration") + } else { + if c.Migrated != "migrate me" { + t.Errorf("expected second plugin does not have correct value for migrated config: %q", c.Migrated) + } + if c.NotMigrated != "" { + t.Error("expected second plugin to have empty value for not migrated config") + } + } + return nil, nil + }, + ConfigMigration: func(ctx context.Context, v int, plugins map[string]interface{}) error { + if v != configVersion { + t.Errorf("unxpected version: %d", v) + } + t1, ok := plugins["io.containerd.test.t1"] + if !ok { + t.Error("plugin not set as expected") + return nil + } + conf, ok := t1.(map[string]interface{}) + if !ok { + t.Errorf("unexpected config value: %v", t1) + return nil + } + newconf := map[string]interface{}{ + "migrated": conf["migrated"], + } + delete(conf, "migrated") + plugins["io.containerd.new.t2"] = newconf + + return nil + }, + }) + + config := &srvconfig.Config{} + config.Version = configVersion + config.Plugins = map[string]interface{}{ + "io.containerd.test.t1": map[string]interface{}{ + "migrated": "migrate me", + "notmigrated": "don't migrate me", + }, + } + + ctx := context.Background() + _, err := New(ctx, config) + if err != nil { + t.Fatal(err) + } +} diff --git a/services/server/server_unsupported.go b/cmd/containerd/server/server_unsupported.go similarity index 75% rename from services/server/server_unsupported.go rename to cmd/containerd/server/server_unsupported.go index c3eb53b54587..a85232c1b05a 100644 --- a/services/server/server_unsupported.go +++ b/cmd/containerd/server/server_unsupported.go @@ -22,7 +22,8 @@ package server import ( "context" - srvconfig "github.com/containerd/containerd/services/server/config" + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" + "github.com/containerd/containerd/v2/internal/wintls" "github.com/containerd/ttrpc" ) @@ -33,3 +34,7 @@ func apply(_ context.Context, _ *srvconfig.Config) error { func newTTRPCServer() (*ttrpc.Server, error) { return ttrpc.NewServer() } + +// TLS resource helpers are no-ops on other unsupported platforms. +func setTLSResource(r wintls.CertResource) {} +func cleanupTLSResources() {} diff --git a/cmd/containerd/server/server_windows.go b/cmd/containerd/server/server_windows.go new file mode 100644 index 000000000000..6a415650b868 --- /dev/null +++ b/cmd/containerd/server/server_windows.go @@ -0,0 +1,54 @@ +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package server + +import ( + "context" + + srvconfig "github.com/containerd/containerd/v2/cmd/containerd/server/config" + "github.com/containerd/containerd/v2/internal/wintls" + "github.com/containerd/log" + "github.com/containerd/otelttrpc" + "github.com/containerd/ttrpc" +) + +// tlsResource holds Windows-specific TLS resources for cleanup on Stop. +var tlsResource wintls.CertResource + +// setTLSResource caches the resource for later cleanup. +func setTLSResource(r wintls.CertResource) { tlsResource = r } + +// cleanupTLSResources releases any cached TLS resources; safe to call multiple times. +func cleanupTLSResources() { + if tlsResource != nil { + if err := tlsResource.Close(); err != nil { + log.L.WithError(err).Error("failed to cleanup TLS resources") + } + tlsResource = nil + } +} + +// Windows-specific apply and TTRPC server constructor +func apply(_ context.Context, _ *srvconfig.Config) error { + return nil +} + +func newTTRPCServer() (*ttrpc.Server, error) { + return ttrpc.NewServer( + ttrpc.WithUnaryServerInterceptor(otelttrpc.UnaryServerInterceptor()), + ) +} diff --git a/cmd/ctr/app/main.go b/cmd/ctr/app/main.go index f2a352f1a88c..13ec27635df5 100644 --- a/cmd/ctr/app/main.go +++ b/cmd/ctr/app/main.go @@ -20,37 +20,50 @@ import ( "fmt" "io" - "github.com/containerd/containerd/cmd/ctr/commands/containers" - "github.com/containerd/containerd/cmd/ctr/commands/content" - "github.com/containerd/containerd/cmd/ctr/commands/events" - "github.com/containerd/containerd/cmd/ctr/commands/images" - "github.com/containerd/containerd/cmd/ctr/commands/install" - "github.com/containerd/containerd/cmd/ctr/commands/leases" - namespacesCmd "github.com/containerd/containerd/cmd/ctr/commands/namespaces" - ociCmd "github.com/containerd/containerd/cmd/ctr/commands/oci" - "github.com/containerd/containerd/cmd/ctr/commands/plugins" - "github.com/containerd/containerd/cmd/ctr/commands/pprof" - "github.com/containerd/containerd/cmd/ctr/commands/run" - "github.com/containerd/containerd/cmd/ctr/commands/sandboxes" - "github.com/containerd/containerd/cmd/ctr/commands/snapshots" - "github.com/containerd/containerd/cmd/ctr/commands/tasks" - versionCmd "github.com/containerd/containerd/cmd/ctr/commands/version" - "github.com/containerd/containerd/defaults" - "github.com/containerd/containerd/namespaces" - "github.com/containerd/containerd/version" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/containerd/log" + "github.com/urfave/cli/v2" "google.golang.org/grpc/grpclog" + + "github.com/containerd/containerd/v2/cmd/ctr/commands/containers" + "github.com/containerd/containerd/v2/cmd/ctr/commands/content" + "github.com/containerd/containerd/v2/cmd/ctr/commands/deprecations" + "github.com/containerd/containerd/v2/cmd/ctr/commands/events" + "github.com/containerd/containerd/v2/cmd/ctr/commands/images" + "github.com/containerd/containerd/v2/cmd/ctr/commands/info" + "github.com/containerd/containerd/v2/cmd/ctr/commands/install" + "github.com/containerd/containerd/v2/cmd/ctr/commands/leases" + namespacesCmd "github.com/containerd/containerd/v2/cmd/ctr/commands/namespaces" + ociCmd "github.com/containerd/containerd/v2/cmd/ctr/commands/oci" + "github.com/containerd/containerd/v2/cmd/ctr/commands/plugins" + "github.com/containerd/containerd/v2/cmd/ctr/commands/pprof" + "github.com/containerd/containerd/v2/cmd/ctr/commands/run" + "github.com/containerd/containerd/v2/cmd/ctr/commands/sandboxes" + "github.com/containerd/containerd/v2/cmd/ctr/commands/snapshots" + "github.com/containerd/containerd/v2/cmd/ctr/commands/tasks" + versionCmd "github.com/containerd/containerd/v2/cmd/ctr/commands/version" + "github.com/containerd/containerd/v2/defaults" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/containerd/v2/version" ) -var extraCmds = []cli.Command{} +var extraCmds = []*cli.Command{} func init() { // Discard grpc logs so that they don't mess with our stdio grpclog.SetLoggerV2(grpclog.NewLoggerV2(io.Discard, io.Discard, io.Discard)) - cli.VersionPrinter = func(c *cli.Context) { - fmt.Println(c.App.Name, version.Package, c.App.Version) + cli.VersionPrinter = func(cliContext *cli.Context) { + fmt.Println(cliContext.App.Name, version.Package, cliContext.App.Version) + } + cli.VersionFlag = &cli.BoolFlag{ + Name: "version", + Aliases: []string{"v"}, + Usage: "Print the version", + } + cli.HelpFlag = &cli.BoolFlag{ + Name: "help", + Aliases: []string{"h"}, + Usage: "Show help", } } @@ -73,34 +86,37 @@ stable from release to release of the containerd project.` containerd CLI ` + app.DisableSliceFlagSeparator = true app.EnableBashCompletion = true app.Flags = []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "debug", - Usage: "enable debug output in logs", + Usage: "Enable debug output in logs", }, - cli.StringFlag{ - Name: "address, a", - Usage: "address for containerd's GRPC server", - Value: defaults.DefaultAddress, - EnvVar: "CONTAINERD_ADDRESS", + &cli.StringFlag{ + Name: "address", + Aliases: []string{"a"}, + Usage: "Address for containerd's GRPC server", + Value: defaults.DefaultAddress, + EnvVars: []string{"CONTAINERD_ADDRESS"}, }, - cli.DurationFlag{ + &cli.DurationFlag{ Name: "timeout", - Usage: "total timeout for ctr commands", + Usage: "Total timeout for ctr commands", }, - cli.DurationFlag{ + &cli.DurationFlag{ Name: "connect-timeout", - Usage: "timeout for connecting to containerd", + Usage: "Timeout for connecting to containerd", }, - cli.StringFlag{ - Name: "namespace, n", - Usage: "namespace to use with commands", - Value: namespaces.Default, - EnvVar: namespaces.NamespaceEnvVar, + &cli.StringFlag{ + Name: "namespace", + Aliases: []string{"n"}, + Usage: "Namespace to use with commands", + Value: namespaces.Default, + EnvVars: []string{namespaces.NamespaceEnvVar}, }, } - app.Commands = append([]cli.Command{ + app.Commands = append([]*cli.Command{ plugins.Command, versionCmd.Command, containers.Command, @@ -116,10 +132,12 @@ containerd CLI install.Command, ociCmd.Command, sandboxes.Command, + info.Command, + deprecations.Command, }, extraCmds...) - app.Before = func(context *cli.Context) error { - if context.GlobalBool("debug") { - logrus.SetLevel(logrus.DebugLevel) + app.Before = func(cliContext *cli.Context) error { + if cliContext.Bool("debug") { + return log.SetLevel("debug") } return nil } diff --git a/cmd/ctr/app/main_unix.go b/cmd/ctr/app/main_unix.go index f922e4e04c38..ab004e9e3b7e 100644 --- a/cmd/ctr/app/main_unix.go +++ b/cmd/ctr/app/main_unix.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows /* Copyright The containerd Authors. @@ -19,7 +18,7 @@ package app -import "github.com/containerd/containerd/cmd/ctr/commands/shim" +import "github.com/containerd/containerd/v2/cmd/ctr/commands/shim" func init() { extraCmds = append(extraCmds, shim.Command) diff --git a/cmd/ctr/commands/client.go b/cmd/ctr/commands/client.go index c6bdc390c85b..8e5e3442fe77 100644 --- a/cmd/ctr/commands/client.go +++ b/cmd/ctr/commands/client.go @@ -17,11 +17,16 @@ package commands import ( - gocontext "context" + "context" + "fmt" + "os" + "strconv" - "github.com/containerd/containerd" - "github.com/containerd/containerd/namespaces" - "github.com/urfave/cli" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/pkg/epoch" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/log" + "github.com/urfave/cli/v2" ) // AppContext returns the context for a command. Should only be called once per @@ -29,30 +34,57 @@ import ( // // This will ensure the namespace is picked up and set the timeout, if one is // defined. -func AppContext(context *cli.Context) (gocontext.Context, gocontext.CancelFunc) { +func AppContext(cliContext *cli.Context) (context.Context, context.CancelFunc) { var ( - ctx = gocontext.Background() - timeout = context.GlobalDuration("timeout") - namespace = context.GlobalString("namespace") - cancel gocontext.CancelFunc + ctx = cliContext.Context + timeout = cliContext.Duration("timeout") + namespace = cliContext.String("namespace") + cancel context.CancelFunc ) ctx = namespaces.WithNamespace(ctx, namespace) if timeout > 0 { - ctx, cancel = gocontext.WithTimeout(ctx, timeout) + ctx, cancel = context.WithTimeout(ctx, timeout) } else { - ctx, cancel = gocontext.WithCancel(ctx) + ctx, cancel = context.WithCancel(ctx) + } + if tm, err := epoch.SourceDateEpoch(); err != nil { + log.L.WithError(err).Warn("Failed to read SOURCE_DATE_EPOCH") + } else if tm != nil { + log.L.Debugf("Using SOURCE_DATE_EPOCH: %v", tm) + ctx = epoch.WithSourceDateEpoch(ctx, tm) } return ctx, cancel } // NewClient returns a new containerd client -func NewClient(context *cli.Context, opts ...containerd.ClientOpt) (*containerd.Client, gocontext.Context, gocontext.CancelFunc, error) { - timeoutOpt := containerd.WithTimeout(context.GlobalDuration("connect-timeout")) +func NewClient(cliContext *cli.Context, opts ...containerd.Opt) (*containerd.Client, context.Context, context.CancelFunc, error) { + timeoutOpt := containerd.WithTimeout(cliContext.Duration("connect-timeout")) opts = append(opts, timeoutOpt) - client, err := containerd.New(context.GlobalString("address"), opts...) + socketPath := cliContext.String("address") + if _, err := os.Stat(socketPath); err != nil { + return nil, nil, nil, fmt.Errorf("cannot access socket %s: %w", socketPath, err) + } + client, err := containerd.New(socketPath, opts...) if err != nil { return nil, nil, nil, err } - ctx, cancel := AppContext(context) + ctx, cancel := AppContext(cliContext) + var suppressDeprecationWarnings bool + if s := os.Getenv("CONTAINERD_SUPPRESS_DEPRECATION_WARNINGS"); s != "" { + suppressDeprecationWarnings, err = strconv.ParseBool(s) + if err != nil { + log.L.WithError(err).Warn("Failed to parse CONTAINERD_SUPPRESS_DEPRECATION_WARNINGS=" + s) + } + } + if !suppressDeprecationWarnings { + resp, err := client.IntrospectionService().Server(ctx) + if err != nil { + log.L.WithError(err).Warn("Failed to check deprecations") + } else { + for _, d := range resp.Deprecations { + log.L.Warn("DEPRECATION: " + d.Message) + } + } + } return client, ctx, cancel, nil } diff --git a/cmd/ctr/commands/cni.go b/cmd/ctr/commands/cni.go index c7e20b3bc25d..43d2cb5abebb 100644 --- a/cmd/ctr/commands/cni.go +++ b/cmd/ctr/commands/cni.go @@ -20,14 +20,14 @@ import ( "context" "fmt" - "github.com/containerd/containerd" - "github.com/containerd/containerd/namespaces" - "github.com/containerd/typeurl" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/pkg/namespaces" + "github.com/containerd/typeurl/v2" ) func init() { typeurl.Register(&NetworkMetaData{}, - "github.com/containerd/containerd/cmd/ctr/commands", "NetworkMetaData") + "github.com/containerd/containerd/v2/cmd/ctr/commands", "NetworkMetaData") } const ( @@ -36,7 +36,7 @@ const ( CtrCniMetadataExtension = "ctr.cni-containerd.metadata" ) -//ctr pass cni network metadata to containerd if ctr run use option of --cni +// NetworkMetaData ctr pass cni network metadata to containerd if ctr run use option of --cni type NetworkMetaData struct { EnableCni bool } diff --git a/cmd/ctr/commands/commands.go b/cmd/ctr/commands/commands.go index 4b8b9cf20d76..946da78ed3f2 100644 --- a/cmd/ctr/commands/commands.go +++ b/cmd/ctr/commands/commands.go @@ -23,204 +23,219 @@ import ( "path/filepath" "strings" - "github.com/containerd/containerd/defaults" - "github.com/urfave/cli" + "github.com/containerd/containerd/v2/defaults" + "github.com/containerd/containerd/v2/pkg/atomicfile" + + "github.com/urfave/cli/v2" ) var ( // SnapshotterFlags are cli flags specifying snapshotter names SnapshotterFlags = []cli.Flag{ - cli.StringFlag{ - Name: "snapshotter", - Usage: "snapshotter name. Empty value stands for the default value.", - EnvVar: "CONTAINERD_SNAPSHOTTER", + &cli.StringFlag{ + Name: "snapshotter", + Usage: "Snapshotter name. Empty value stands for the default value.", + EnvVars: []string{"CONTAINERD_SNAPSHOTTER"}, }, } // SnapshotterLabels are cli flags specifying labels which will be added to the new snapshot for container. - SnapshotterLabels = cli.StringSliceFlag{ + SnapshotterLabels = &cli.StringSliceFlag{ Name: "snapshotter-label", - Usage: "labels added to the new snapshot for this container.", + Usage: "Labels added to the new snapshot for this container.", } // LabelFlag is a cli flag specifying labels - LabelFlag = cli.StringSliceFlag{ + LabelFlag = &cli.StringSliceFlag{ Name: "label", - Usage: "labels to attach to the image", + Usage: "Labels to attach to the image", } // RegistryFlags are cli flags specifying registry options RegistryFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "skip-verify,k", - Usage: "skip SSL certificate validation", + &cli.BoolFlag{ + Name: "skip-verify", + Aliases: []string{"k"}, + Usage: "Skip SSL certificate validation", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "plain-http", - Usage: "allow connections using plain HTTP", + Usage: "Allow connections using plain HTTP", }, - cli.StringFlag{ - Name: "user,u", - Usage: "user[:password] Registry user and password", + &cli.StringFlag{ + Name: "user", + Aliases: []string{"u"}, + Usage: "User[:password] Registry user and password", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "refresh", - Usage: "refresh token for authorization server", + Usage: "Refresh token for authorization server", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "hosts-dir", // compatible with "/etc/docker/certs.d" Usage: "Custom hosts configuration directory", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "tlscacert", - Usage: "path to TLS root CA", + Usage: "Path to TLS root CA", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "tlscert", - Usage: "path to TLS client certificate", + Usage: "Path to TLS client certificate", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "tlskey", - Usage: "path to TLS client key", + Usage: "Path to TLS client key", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "http-dump", - Usage: "dump all HTTP request/responses when interacting with container registry", + Usage: "Dump all HTTP request/responses when interacting with container registry", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "http-trace", - Usage: "enable HTTP tracing for registry interactions", + Usage: "Enable HTTP tracing for registry interactions", + }, + } + + // RuntimeFlags are cli flags specifying runtime + RuntimeFlags = []cli.Flag{ + &cli.StringFlag{ + Name: "runtime", + Usage: "Runtime name or absolute path to runtime binary", + Value: defaults.DefaultRuntime, + }, + &cli.StringFlag{ + Name: "runtime-config-path", + Usage: "Optional runtime config path", }, } // ContainerFlags are cli flags specifying container options ContainerFlags = []cli.Flag{ - cli.StringFlag{ - Name: "config,c", - Usage: "path to the runtime-specific spec config file", + &cli.StringFlag{ + Name: "config", + Aliases: []string{"c"}, + Usage: "Path to the runtime-specific spec config file", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "cwd", - Usage: "specify the working directory of the process", + Usage: "Specify the working directory of the process", }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "env", - Usage: "specify additional container environment variables (e.g. FOO=bar)", + Usage: "Specify additional container environment variables (e.g. FOO=bar)", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "env-file", - Usage: "specify additional container environment variables in a file(e.g. FOO=bar, one per line)", + Usage: "Specify additional container environment variables in a file(e.g. FOO=bar, one per line)", }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "label", - Usage: "specify additional labels (e.g. foo=bar)", + Usage: "Specify additional labels (e.g. foo=bar)", }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "annotation", - Usage: "specify additional OCI annotations (e.g. foo=bar)", + Usage: "Specify additional OCI annotations (e.g. foo=bar)", }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "mount", - Usage: "specify additional container mount (e.g. type=bind,src=/tmp,dst=/host,options=rbind:ro)", + Usage: "Specify additional container mount (e.g. type=bind,src=/tmp,dst=/host,options=rbind:ro)", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "net-host", - Usage: "enable host networking for the container", + Usage: "Enable host networking for the container", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "privileged", - Usage: "run privileged container", + Usage: "Run privileged container", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "read-only", - Usage: "set the containers filesystem as readonly", - }, - cli.StringFlag{ - Name: "runtime", - Usage: "runtime name or absolute path to runtime binary", - Value: defaults.DefaultRuntime, + Usage: "Set the containers filesystem as readonly", }, - cli.StringFlag{ - Name: "runtime-config-path", - Usage: "optional runtime config path", + &cli.StringFlag{ + Name: "sandbox", + Usage: "Create the container in the given sandbox", }, - cli.BoolFlag{ - Name: "tty,t", - Usage: "allocate a TTY for the container", + &cli.BoolFlag{ + Name: "tty", + Aliases: []string{"t"}, + Usage: "Allocate a TTY for the container", }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "with-ns", - Usage: "specify existing Linux namespaces to join at container runtime (format ':')", + Usage: "Specify existing Linux namespaces to join at container runtime (format ':')", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "pid-file", - Usage: "file path to write the task's pid", + Usage: "File path to write the task's pid", }, - cli.IntSliceFlag{ + &cli.IntSliceFlag{ Name: "gpus", - Usage: "add gpus to the container", + Usage: "Add gpus to the container", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "allow-new-privs", - Usage: "turn off OCI spec's NoNewPrivileges feature flag", + Usage: "Turn off OCI spec's NoNewPrivileges feature flag", }, - cli.Uint64Flag{ + &cli.Uint64Flag{ Name: "memory-limit", - Usage: "memory limit (in bytes) for the container", + Usage: "Memory limit (in bytes) for the container", }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "cap-add", - Usage: "add Linux capabilities (Set capabilities with 'CAP_' prefix)", + Usage: "Add Linux capabilities (Set capabilities with 'CAP_' prefix)", }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "cap-drop", - Usage: "drop Linux capabilities (Set capabilities with 'CAP_' prefix)", + Usage: "Drop Linux capabilities (Set capabilities with 'CAP_' prefix)", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "seccomp", - Usage: "enable the default seccomp profile", + Usage: "Enable the default seccomp profile", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "seccomp-profile", - Usage: "file path to custom seccomp profile. seccomp must be set to true, before using seccomp-profile", + Usage: "File path to custom seccomp profile. seccomp must be set to true, before using seccomp-profile", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "apparmor-default-profile", - Usage: "enable AppArmor with the default profile with the specified name, e.g. \"cri-containerd.apparmor.d\"", + Usage: "Enable AppArmor with the default profile with the specified name, e.g. \"cri-containerd.apparmor.d\"", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "apparmor-profile", - Usage: "enable AppArmor with an existing custom profile", + Usage: "Enable AppArmor with an existing custom profile", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "blockio-config-file", - Usage: "file path to blockio class definitions. By default class definitions are not loaded.", + Usage: "File path to blockio class definitions. By default class definitions are not loaded.", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "blockio-class", - Usage: "name of the blockio class to associate the container with", + Usage: "Name of the blockio class to associate the container with", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "rdt-class", - Usage: "name of the RDT class to associate the container with. Specifies a Class of Service (CLOS) for cache and memory bandwidth management.", + Usage: "Name of the RDT class to associate the container with. Specifies a Class of Service (CLOS) for cache and memory bandwidth management.", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "hostname", - Usage: "set the container's host name", + Usage: "Set the container's host name", }, - cli.StringFlag{ - Name: "user,u", - Usage: "username or user id, group optional (format: [:])", + &cli.StringFlag{ + Name: "user", + Aliases: []string{"u"}, + Usage: "Username or user id, group optional (format: [:])", }, } ) // ObjectWithLabelArgs returns the first arg and a LabelArgs object -func ObjectWithLabelArgs(clicontext *cli.Context) (string, map[string]string) { +func ObjectWithLabelArgs(cliContext *cli.Context) (string, map[string]string) { var ( - first = clicontext.Args().First() - labelStrings = clicontext.Args().Tail() + first = cliContext.Args().First() + labelStrings = cliContext.Args().Tail() ) return first, LabelArgs(labelStrings) @@ -230,13 +245,10 @@ func ObjectWithLabelArgs(clicontext *cli.Context) (string, map[string]string) { func LabelArgs(labelStrings []string) map[string]string { labels := make(map[string]string, len(labelStrings)) for _, label := range labelStrings { - parts := strings.SplitN(label, "=", 2) - key := parts[0] - value := "true" - if len(parts) > 1 { - value = parts[1] + key, value, ok := strings.Cut(label, "=") + if !ok { + value = "true" } - labels[key] = value } @@ -247,11 +259,11 @@ func LabelArgs(labelStrings []string) map[string]string { func AnnotationArgs(annoStrings []string) (map[string]string, error) { annotations := make(map[string]string, len(annoStrings)) for _, anno := range annoStrings { - parts := strings.SplitN(anno, "=", 2) - if len(parts) != 2 { + key, value, ok := strings.Cut(anno, "=") + if !ok { return nil, fmt.Errorf("invalid key=value format annotation: %v", anno) } - annotations[parts[0]] = parts[1] + annotations[key] = value } return annotations, nil } @@ -271,15 +283,14 @@ func WritePidFile(path string, pid int) error { if err != nil { return err } - tempPath := filepath.Join(filepath.Dir(path), fmt.Sprintf(".%s", filepath.Base(path))) - f, err := os.OpenFile(tempPath, os.O_RDWR|os.O_CREATE|os.O_EXCL|os.O_SYNC, 0666) + f, err := atomicfile.New(path, 0o666) if err != nil { return err } _, err = fmt.Fprintf(f, "%d", pid) - f.Close() if err != nil { + f.Cancel() return err } - return os.Rename(tempPath, path) + return f.Close() } diff --git a/cmd/ctr/commands/commands_unix.go b/cmd/ctr/commands/commands_unix.go index 6ba5332a8df3..b17e789f4468 100644 --- a/cmd/ctr/commands/commands_unix.go +++ b/cmd/ctr/commands/commands_unix.go @@ -1,5 +1,4 @@ //go:build !windows -// +build !windows /* Copyright The containerd Authors. @@ -20,28 +19,81 @@ package commands import ( - "github.com/urfave/cli" + "errors" + + "github.com/containerd/containerd/api/types/runc/options" + runtimeoptions "github.com/containerd/containerd/api/types/runtimeoptions/v1" + "github.com/urfave/cli/v2" ) func init() { - ContainerFlags = append(ContainerFlags, cli.BoolFlag{ + RuntimeFlags = append(RuntimeFlags, &cli.StringFlag{ + Name: "runc-binary", + Usage: "Specify runc-compatible binary", + }, &cli.StringFlag{ + Name: "runc-root", + Usage: "Specify runc-compatible root", + }, &cli.BoolFlag{ + Name: "runc-systemd-cgroup", + Usage: "Start runc with systemd cgroup manager", + }) + ContainerFlags = append(ContainerFlags, &cli.BoolFlag{ Name: "rootfs", - Usage: "use custom rootfs that is not managed by containerd snapshotter", - }, cli.BoolFlag{ + Usage: "Use custom rootfs that is not managed by containerd snapshotter", + }, &cli.BoolFlag{ Name: "no-pivot", - Usage: "disable use of pivot-root (linux only)", - }, cli.Int64Flag{ + Usage: "Disable use of pivot-root (linux only)", + }, &cli.Int64Flag{ Name: "cpu-quota", Usage: "Limit CPU CFS quota", Value: -1, - }, cli.Uint64Flag{ + }, &cli.Uint64Flag{ Name: "cpu-period", Usage: "Limit CPU CFS period", - }, cli.StringFlag{ + }, &cli.StringFlag{ Name: "rootfs-propagation", - Usage: "set the propagation of the container rootfs", - }, cli.StringSliceFlag{ + Usage: "Set the propagation of the container rootfs", + }, &cli.StringSliceFlag{ Name: "device", - Usage: "file path to a device to add to the container; or a path to a directory tree of devices to add to the container", + Usage: "File path to a device to add to the container; or a path to a directory tree of devices to add to the container", }) } + +func getRuncOptions(cliContext *cli.Context) (*options.Options, error) { + runtimeOpts := &options.Options{} + if runcBinary := cliContext.String("runc-binary"); runcBinary != "" { + runtimeOpts.BinaryName = runcBinary + } + if cliContext.Bool("runc-systemd-cgroup") { + if cliContext.String("cgroup") == "" { + // runc maps "machine.slice:foo:deadbeef" to "/machine.slice/foo-deadbeef.scope" + return nil, errors.New("option --runc-systemd-cgroup requires --cgroup to be set, e.g. \"machine.slice:foo:deadbeef\"") + } + runtimeOpts.SystemdCgroup = true + } + if root := cliContext.String("runc-root"); root != "" { + runtimeOpts.Root = root + } + + return runtimeOpts, nil +} + +func RuntimeOptions(cliContext *cli.Context) (interface{}, error) { + // validate first + if (cliContext.String("runc-binary") != "" || cliContext.Bool("runc-systemd-cgroup")) && + cliContext.String("runtime") != "io.containerd.runc.v2" { + return nil, errors.New("specifying runc-binary and runc-systemd-cgroup is only supported for \"io.containerd.runc.v2\" runtime") + } + + if cliContext.String("runtime") == "io.containerd.runc.v2" { + return getRuncOptions(cliContext) + } + + if configPath := cliContext.String("runtime-config-path"); configPath != "" { + return &runtimeoptions.Options{ + ConfigPath: configPath, + }, nil + } + + return nil, nil +} diff --git a/cmd/ctr/commands/commands_windows.go b/cmd/ctr/commands/commands_windows.go index 179cce501f55..15bc3951cebb 100644 --- a/cmd/ctr/commands/commands_windows.go +++ b/cmd/ctr/commands/commands_windows.go @@ -17,24 +17,26 @@ package commands import ( - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) func init() { ContainerFlags = append(ContainerFlags, - cli.Uint64Flag{ + &cli.Uint64Flag{ Name: "cpu-count", - Usage: "number of CPUs available to the container", - }, - cli.Uint64Flag{ + Usage: "Number of CPUs available to the container", + }, &cli.Uint64Flag{ Name: "cpu-shares", Usage: "The relative number of CPU shares given to the container relative to other workloads. Between 0 and 10,000.", - }, - cli.Uint64Flag{ + }, &cli.Uint64Flag{ Name: "cpu-max", Usage: "The number of processor cycles threads in a container can use per 10,000 cycles. Set to a percentage times 100. Between 1 and 10,000", - }, cli.StringSliceFlag{ + }, &cli.StringSliceFlag{ Name: "device", - Usage: "identifier of a device to add to the container (e.g. class://5B45201D-F2F2-4F3B-85BB-30FF1F953599)", + Usage: "Identifier of a device to add to the container (e.g. class://5B45201D-F2F2-4F3B-85BB-30FF1F953599)", }) } + +func RuntimeOptions(cliContext *cli.Context) (interface{}, error) { + return nil, nil +} diff --git a/cmd/ctr/commands/containers/checkpoint.go b/cmd/ctr/commands/containers/checkpoint.go index 62804f486cda..da048f1ca1be 100644 --- a/cmd/ctr/commands/containers/checkpoint.go +++ b/cmd/ctr/commands/containers/checkpoint.go @@ -20,40 +20,40 @@ import ( "errors" "fmt" - "github.com/containerd/containerd" - "github.com/containerd/containerd/cmd/ctr/commands" - "github.com/containerd/containerd/errdefs" - "github.com/urfave/cli" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/cmd/ctr/commands" + "github.com/containerd/errdefs" + "github.com/urfave/cli/v2" ) -var checkpointCommand = cli.Command{ +var checkpointCommand = &cli.Command{ Name: "checkpoint", - Usage: "checkpoint a container", + Usage: "Checkpoint a container", ArgsUsage: "CONTAINER REF", Flags: []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "rw", - Usage: "include the rw layer in the checkpoint", + Usage: "Include the rw layer in the checkpoint", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "image", - Usage: "include the image in the checkpoint", + Usage: "Include the image in the checkpoint", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "task", - Usage: "checkpoint container task", + Usage: "Checkpoint container task", }, }, - Action: func(context *cli.Context) error { - id := context.Args().First() + Action: func(cliContext *cli.Context) error { + id := cliContext.Args().First() if id == "" { return errors.New("container id must be provided") } - ref := context.Args().Get(1) + ref := cliContext.Args().Get(1) if ref == "" { return errors.New("ref must be provided") } - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -62,13 +62,13 @@ var checkpointCommand = cli.Command{ containerd.WithCheckpointRuntime, } - if context.Bool("image") { + if cliContext.Bool("image") { opts = append(opts, containerd.WithCheckpointImage) } - if context.Bool("rw") { + if cliContext.Bool("rw") { opts = append(opts, containerd.WithCheckpointRW) } - if context.Bool("task") { + if cliContext.Bool("task") { opts = append(opts, containerd.WithCheckpointTask) } container, err := client.LoadContainer(ctx, id) diff --git a/cmd/ctr/commands/containers/containers.go b/cmd/ctr/commands/containers/containers.go index ed89d2de47f9..4f7e5394252d 100644 --- a/cmd/ctr/commands/containers/containers.go +++ b/cmd/ctr/commands/containers/containers.go @@ -23,23 +23,23 @@ import ( "strings" "text/tabwriter" - "github.com/containerd/containerd" - "github.com/containerd/containerd/cio" - "github.com/containerd/containerd/cmd/ctr/commands" - "github.com/containerd/containerd/cmd/ctr/commands/run" - "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/log" - "github.com/containerd/typeurl" - "github.com/urfave/cli" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/cmd/ctr/commands" + "github.com/containerd/containerd/v2/cmd/ctr/commands/run" + "github.com/containerd/containerd/v2/core/containers" + "github.com/containerd/containerd/v2/pkg/cio" + "github.com/containerd/errdefs" + "github.com/containerd/log" + "github.com/containerd/typeurl/v2" + "github.com/urfave/cli/v2" ) // Command is the cli command for managing containers -var Command = cli.Command{ +var Command = &cli.Command{ Name: "containers", - Usage: "manage containers", + Usage: "Manage containers", Aliases: []string{"c", "container"}, - Subcommands: []cli.Command{ + Subcommands: []*cli.Command{ createCommand, deleteCommand, infoCommand, @@ -50,27 +50,26 @@ var Command = cli.Command{ }, } -var createCommand = cli.Command{ - Name: "create", - Usage: "create container", - ArgsUsage: "[flags] Image|RootFS CONTAINER [COMMAND] [ARG...]", - SkipArgReorder: true, - Flags: append(append(commands.SnapshotterFlags, []cli.Flag{commands.SnapshotterLabels}...), commands.ContainerFlags...), - Action: func(context *cli.Context) error { +var createCommand = &cli.Command{ + Name: "create", + Usage: "Create container", + ArgsUsage: "[flags] Image|RootFS CONTAINER [COMMAND] [ARG...]", + Flags: append(commands.RuntimeFlags, append(append(commands.SnapshotterFlags, []cli.Flag{commands.SnapshotterLabels}...), commands.ContainerFlags...)...), + Action: func(cliContext *cli.Context) error { var ( id string ref string - config = context.IsSet("config") + config = cliContext.IsSet("config") ) if config { - id = context.Args().First() - if context.NArg() > 1 { + id = cliContext.Args().First() + if cliContext.NArg() > 1 { return fmt.Errorf("with spec config file, only container id should be provided: %w", errdefs.ErrInvalidArgument) } } else { - id = context.Args().Get(1) - ref = context.Args().First() + id = cliContext.Args().Get(1) + ref = cliContext.Args().First() if ref == "" { return fmt.Errorf("image ref must be provided: %w", errdefs.ErrInvalidArgument) } @@ -78,12 +77,12 @@ var createCommand = cli.Command{ if id == "" { return fmt.Errorf("container id must be provided: %w", errdefs.ErrInvalidArgument) } - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } defer cancel() - _, err = run.NewContainer(ctx, client, context) + _, err = run.NewContainer(ctx, client, cliContext) if err != nil { return err } @@ -91,23 +90,24 @@ var createCommand = cli.Command{ }, } -var listCommand = cli.Command{ +var listCommand = &cli.Command{ Name: "list", Aliases: []string{"ls"}, - Usage: "list containers", + Usage: "List containers", ArgsUsage: "[flags] [, ...]", Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "quiet, q", - Usage: "print only the container id", + &cli.BoolFlag{ + Name: "quiet", + Aliases: []string{"q"}, + Usage: "Print only the container id", }, }, - Action: func(context *cli.Context) error { + Action: func(cliContext *cli.Context) error { var ( - filters = context.Args() - quiet = context.Bool("quiet") + filters = cliContext.Args().Slice() + quiet = cliContext.Bool("quiet") ) - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -145,33 +145,33 @@ var listCommand = cli.Command{ }, } -var deleteCommand = cli.Command{ +var deleteCommand = &cli.Command{ Name: "delete", - Usage: "delete one or more existing containers", + Usage: "Delete one or more existing containers", ArgsUsage: "[flags] CONTAINER [CONTAINER, ...]", Aliases: []string{"del", "remove", "rm"}, Flags: []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "keep-snapshot", - Usage: "do not clean up snapshot with container", + Usage: "Do not clean up snapshot with container", }, }, - Action: func(context *cli.Context) error { + Action: func(cliContext *cli.Context) error { var exitErr error - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } defer cancel() deleteOpts := []containerd.DeleteOpts{} - if !context.Bool("keep-snapshot") { + if !cliContext.Bool("keep-snapshot") { deleteOpts = append(deleteOpts, containerd.WithSnapshotCleanup) } - if context.NArg() == 0 { + if cliContext.NArg() == 0 { return fmt.Errorf("must specify at least one container to delete: %w", errdefs.ErrInvalidArgument) } - for _, arg := range context.Args() { + for _, arg := range cliContext.Args().Slice() { if err := deleteContainer(ctx, client, arg, deleteOpts...); err != nil { if exitErr == nil { exitErr = err @@ -206,18 +206,18 @@ func deleteContainer(ctx context.Context, client *containerd.Client, id string, } -var setLabelsCommand = cli.Command{ +var setLabelsCommand = &cli.Command{ Name: "label", - Usage: "set and clear labels for a container", + Usage: "Set and clear labels for a container", ArgsUsage: "[flags] CONTAINER [=, ...]", Description: "set and clear labels for a container", Flags: []cli.Flag{}, - Action: func(context *cli.Context) error { - containerID, labels := commands.ObjectWithLabelArgs(context) + Action: func(cliContext *cli.Context) error { + containerID, labels := commands.ObjectWithLabelArgs(cliContext) if containerID == "" { return fmt.Errorf("container id must be provided: %w", errdefs.ErrInvalidArgument) } - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -244,22 +244,22 @@ var setLabelsCommand = cli.Command{ }, } -var infoCommand = cli.Command{ +var infoCommand = &cli.Command{ Name: "info", - Usage: "get info about a container", + Usage: "Get info about a container", ArgsUsage: "CONTAINER", Flags: []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "spec", - Usage: "only display the spec", + Usage: "Only display the spec", }, }, - Action: func(context *cli.Context) error { - id := context.Args().First() + Action: func(cliContext *cli.Context) error { + id := cliContext.Args().First() if id == "" { return fmt.Errorf("container id must be provided: %w", errdefs.ErrInvalidArgument) } - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -272,7 +272,7 @@ var infoCommand = cli.Command{ if err != nil { return err } - if context.Bool("spec") { + if cliContext.Bool("spec") { v, err := typeurl.UnmarshalAny(info.Spec) if err != nil { return err diff --git a/cmd/ctr/commands/containers/restore.go b/cmd/ctr/commands/containers/restore.go index 2847340c9135..e63b25b993a5 100644 --- a/cmd/ctr/commands/containers/restore.go +++ b/cmd/ctr/commands/containers/restore.go @@ -19,37 +19,40 @@ package containers import ( "errors" - "github.com/containerd/containerd" - "github.com/containerd/containerd/cio" - "github.com/containerd/containerd/cmd/ctr/commands" - "github.com/containerd/containerd/errdefs" - "github.com/urfave/cli" + "github.com/containerd/console" + containerd "github.com/containerd/containerd/v2/client" + "github.com/containerd/containerd/v2/cmd/ctr/commands" + "github.com/containerd/containerd/v2/cmd/ctr/commands/tasks" + "github.com/containerd/containerd/v2/pkg/cio" + "github.com/containerd/errdefs" + "github.com/containerd/log" + "github.com/urfave/cli/v2" ) -var restoreCommand = cli.Command{ +var restoreCommand = &cli.Command{ Name: "restore", - Usage: "restore a container from checkpoint", + Usage: "Restore a container from checkpoint", ArgsUsage: "CONTAINER REF", Flags: []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "rw", - Usage: "restore the rw layer from the checkpoint", + Usage: "Restore the rw layer from the checkpoint", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "live", - Usage: "restore the runtime and memory data from the checkpoint", + Usage: "Restore the runtime and memory data from the checkpoint", }, }, - Action: func(context *cli.Context) error { - id := context.Args().First() + Action: func(cliContext *cli.Context) error { + id := cliContext.Args().First() if id == "" { return errors.New("container id must be provided") } - ref := context.Args().Get(1) + ref := cliContext.Args().Get(1) if ref == "" { return errors.New("ref must be provided") } - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -73,7 +76,7 @@ var restoreCommand = cli.Command{ containerd.WithRestoreSpec, containerd.WithRestoreRuntime, } - if context.Bool("rw") { + if cliContext.Bool("rw") { opts = append(opts, containerd.WithRestoreRW) } @@ -81,17 +84,60 @@ var restoreCommand = cli.Command{ if err != nil { return err } - topts := []containerd.NewTaskOpts{} - if context.Bool("live") { + if cliContext.Bool("live") { topts = append(topts, containerd.WithTaskCheckpoint(checkpoint)) } + spec, err := ctr.Spec(ctx) + if err != nil { + return err + } - task, err := ctr.NewTask(ctx, cio.NewCreator(cio.WithStdio), topts...) + useTTY := spec.Process.Terminal + + var con console.Console + if useTTY { + con = console.Current() + defer con.Reset() + if err := con.SetRaw(); err != nil { + return err + } + } + + task, err := tasks.NewTask(ctx, client, ctr, "", con, false, "", []cio.Opt{}, topts...) if err != nil { return err } - return task.Start(ctx) + var statusC <-chan containerd.ExitStatus + if useTTY { + if statusC, err = task.Wait(ctx); err != nil { + return err + } + } + + if err := task.Start(ctx); err != nil { + return err + } + if !useTTY { + return nil + } + + if err := tasks.HandleConsoleResize(ctx, task, con); err != nil { + log.G(ctx).WithError(err).Error("console resize") + } + + status := <-statusC + code, _, err := status.Result() + if err != nil { + return err + } + if _, err := task.Delete(ctx); err != nil { + return err + } + if code != 0 { + return cli.Exit("", int(code)) + } + return nil }, } diff --git a/cmd/ctr/commands/content/content.go b/cmd/ctr/commands/content/content.go index f8828e064026..236b6e335fa6 100644 --- a/cmd/ctr/commands/content/content.go +++ b/cmd/ctr/commands/content/content.go @@ -21,32 +21,35 @@ import ( "fmt" "io" "os" + "os/exec" + "sort" "strings" "text/tabwriter" "time" - "github.com/containerd/containerd/cmd/ctr/commands" - "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" - "github.com/containerd/containerd/log" + "github.com/containerd/containerd/v2/cmd/ctr/commands" + "github.com/containerd/containerd/v2/core/content" + "github.com/containerd/containerd/v2/core/remotes" + "github.com/containerd/errdefs" + "github.com/containerd/log" units "github.com/docker/go-units" digest "github.com/opencontainers/go-digest" ocispec "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/urfave/cli" - exec "golang.org/x/sys/execabs" + "github.com/urfave/cli/v2" ) var ( // Command is the cli command for managing content - Command = cli.Command{ + Command = &cli.Command{ Name: "content", - Usage: "manage content", + Usage: "Manage content", Subcommands: cli.Commands{ activeIngestCommand, deleteCommand, editCommand, fetchCommand, fetchObjectCommand, + fetchBlobCommand, getCommand, ingestCommand, listCommand, @@ -56,17 +59,17 @@ var ( }, } - getCommand = cli.Command{ + getCommand = &cli.Command{ Name: "get", - Usage: "get the data for an object", + Usage: "Get the data for an object", ArgsUsage: "[, ...]", Description: "display the image object", - Action: func(context *cli.Context) error { - dgst, err := digest.Parse(context.Args().First()) + Action: func(cliContext *cli.Context) error { + dgst, err := digest.Parse(cliContext.Args().First()) if err != nil { return err } - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -85,26 +88,26 @@ var ( }, } - ingestCommand = cli.Command{ + ingestCommand = &cli.Command{ Name: "ingest", - Usage: "accept content into the store", + Usage: "Accept content into the store", ArgsUsage: "[flags] ", Description: "ingest objects into the local content store", Flags: []cli.Flag{ - cli.Int64Flag{ + &cli.Int64Flag{ Name: "expected-size", - Usage: "validate against provided size", + Usage: "Validate against provided size", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "expected-digest", - Usage: "verify content against expected digest", + Usage: "Verify content against expected digest", }, }, - Action: func(context *cli.Context) error { + Action: func(cliContext *cli.Context) error { var ( - ref = context.Args().First() - expectedSize = context.Int64("expected-size") - expectedDigest = digest.Digest(context.String("expected-digest")) + ref = cliContext.Args().First() + expectedSize = cliContext.Int64("expected-size") + expectedDigest = digest.Digest(cliContext.String("expected-digest")) ) if err := expectedDigest.Validate(); expectedDigest != "" && err != nil { return err @@ -112,7 +115,7 @@ var ( if ref == "" { return errors.New("must specify a transaction reference") } - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -127,26 +130,27 @@ var ( }, } - activeIngestCommand = cli.Command{ + activeIngestCommand = &cli.Command{ Name: "active", - Usage: "display active transfers", + Usage: "Display active transfers", ArgsUsage: "[flags] []", Description: "display the ongoing transfers", Flags: []cli.Flag{ - cli.DurationFlag{ - Name: "timeout, t", - Usage: "total timeout for fetch", - EnvVar: "CONTAINERD_FETCH_TIMEOUT", + &cli.DurationFlag{ + Name: "timeout", + Aliases: []string{"t"}, + Usage: "Total timeout for fetch", + EnvVars: []string{"CONTAINERD_FETCH_TIMEOUT"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "root", - Usage: "path to content store root", + Usage: "Path to content store root", Value: "/tmp/content", // TODO(stevvooe): for now, just use the PWD/.content }, }, - Action: func(context *cli.Context) error { - match := context.Args().First() - client, ctx, cancel, err := commands.NewClient(context) + Action: func(cliContext *cli.Context) error { + match := cliContext.Args().First() + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -169,24 +173,25 @@ var ( }, } - listCommand = cli.Command{ + listCommand = &cli.Command{ Name: "list", Aliases: []string{"ls"}, - Usage: "list all blobs in the store", + Usage: "List all blobs in the store", ArgsUsage: "[flags]", Description: "list blobs in the content store", Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "quiet, q", - Usage: "print only the blob digest", + &cli.BoolFlag{ + Name: "quiet", + Aliases: []string{"q"}, + Usage: "Print only the blob digest", }, }, - Action: func(context *cli.Context) error { + Action: func(cliContext *cli.Context) error { var ( - quiet = context.Bool("quiet") - args = []string(context.Args()) + quiet = cliContext.Bool("quiet") + args = cliContext.Args().Slice() ) - client, ctx, cancel, err := commands.NewClient(context) + client, ctx, cancel, err := commands.NewClient(cliContext) if err != nil { return err } @@ -209,6 +214,7 @@ var ( for k, v := range info.Labels { labelStrings = append(labelStrings, strings.Join([]string{k, v}, "=")) } + sort.Strings(labelStrings) labels := strings.Join(labelStrings, ",") if labels == "" { labels = "-" @@ -228,14 +234,14 @@ var ( }, } - setLabelsCommand = cli.Command{ + setLabelsCommand = &cli.Command{ Name: "label", - Usage: "add labels to content", + Usage: "Add labels to content", ArgsUsage: " [