Pular para o conteúdo principal

Job request

Formato​

O host converte a requisição HTTP (ou a chamada da CLI) num job e o envia ao guest como um frame vsock (4 bytes big-endian de tamanho + JSON).

{
"trace_id": "tr-123",
"lang": "python",
"code": "",
"files": [
{"name": "main.py", "content": "import util\nprint(util.dobro(int(input())))"},
{"name": "util.py", "content": "def dobro(x):\n return 2 * x\n"}
],
"stdin": "21",
"timeout": 10
}

Campos​

CampoTipoDescrição
trace_idstringidentificador do job, devolvido no resultado
langstringlinguagem; precisa existir no executor do guest
codestringcódigo do arquivo principal quando não há files
fileslista de {name, content}arquivos do job; o primeiro é o principal
stdinstringentrada padrão; omitido quando vazio
timeoutinteirosegundos
streambooleanopede a saída em pedaços antes do resultado; veja Streaming
opstringoperação; vazio é o job de código. As operações de máquina (exec, put, pty...) estão em Protocolo vsock

Arquivo principal​

  • Com files, cada arquivo é gravado pelo nome num diretório temporário em /tmp, e o primeiro é o executado (ou compilado).
  • Com só code, o guest grava script.<ext> — exceto Java, que vira Main.java, porque a classe executada é Main.

Regras aplicadas antes de o job chegar ao guest​

O domínio, no host, recusa o job (HTTP 400 na API) quando:

RegraLimite
linguagemno catálogo e com imagem construída neste host (senão E006)
stdin≤ 1.000.000 bytes (senão E005)
timeout> 0 e ≤ 300 s; ausente vira 10 s
conteúdocode ou ao menos um arquivo
arquivosaté 32, sem nome repetido
tamanho totalsoma de code e conteúdos ≤ 4 MiB
nome de arquivosem /, sem .., sem começar com ., ≤ 255 bytes

As regras de nome impedem escrita fora do diretório do job dentro do guest, mesmo a VM sendo descartável.

Prontidão​

Antes do primeiro job real, o host manda à VM um job sh true repetidamente (a cada 1 ms) até receber resposta. É assim que ele sabe que o guest já está escutando.