Fix some logic and control flow issues

This commit is contained in:
Radon Rosborough 2023-01-04 18:54:15 -07:00
parent 8210b8bee9
commit 1ef298aac6
5 changed files with 32 additions and 20 deletions

View File

@ -284,7 +284,7 @@ export async function initUserSession({ watcher, podName, proxyInfo }) {
} }
} }
resolve({ resolve({
exec: (cmdline, { on, pty }) => { exec: async (cmdline, { on, pty }) => {
// on :: { stdout, stderr, exit, error, close } // on :: { stdout, stderr, exit, error, close }
if (pty) { if (pty) {
cmdline = ["/riju-bin/ptyify", ...cmdline]; cmdline = ["/riju-bin/ptyify", ...cmdline];
@ -312,6 +312,10 @@ export async function initUserSession({ watcher, podName, proxyInfo }) {
} }
); );
} }
await new Promise((resolve, reject) => {
conn.on("open", resolve);
conn.on("error", reject);
});
conn.on("message", (msg) => { conn.on("message", (msg) => {
let event, data, text, exitStatus; let event, data, text, exitStatus;
try { try {
@ -352,7 +356,7 @@ export async function initUserSession({ watcher, podName, proxyInfo }) {
return { return {
stdin: { stdin: {
write: (data) => write: (data) =>
conn.write(JSON.stringify({ event: "stdin", data })), conn.send(JSON.stringify({ event: "stdin", data })),
}, },
}; };
}, },

View File

@ -57,8 +57,8 @@ async function main() {
handlePtyInput: (data) => handlePtyInput(data), handlePtyInput: (data) => handlePtyInput(data),
handlePtyExit: (_status) => {}, handlePtyExit: (_status) => {},
}); });
await new Promise((resolve) => { await new Promise(async (resolve) => {
const exec = session.exec(["bash"], { const exec = await session.exec(["bash"], {
pty: true, pty: true,
on: { on: {
stdout: (data) => pty.handlePtyOutput(data), stdout: (data) => pty.handlePtyOutput(data),

View File

@ -2,7 +2,6 @@ import { spawn } from "child_process";
import { promises as fs } from "fs"; import { promises as fs } from "fs";
import process from "process"; import process from "process";
import TailFile from "@logdna/tail-file";
import * as Sentry from "@sentry/node"; import * as Sentry from "@sentry/node";
import * as tmp from "tmp-promise"; import * as tmp from "tmp-promise";
import { v4 as getUUIDOrig } from "uuid"; import { v4 as getUUIDOrig } from "uuid";
@ -188,25 +187,40 @@ export function deptyify({ handlePtyInput, handlePtyExit }) {
} }
}); });
}); });
const input = new TailFile(`${dir.path}/input`, {
encoding: "utf-8",
});
input.on("data", (data) => handlePtyInput(data));
input.on("tail_error", logError);
input.on("error", logError);
await input.start();
const output = await fs.open(`${dir.path}/output`, "w");
const proc = spawn( const proc = spawn(
"system/out/riju-pty", `${process.cwd()}/system/out/riju-pty`,
["-f", "sh", "-c", "cat > input & cat output"], ["-f", "sh", "-c", "cat > input & cat output"],
{ {
cwd: dir.path, cwd: dir.path,
stdio: "inherit",
} }
); );
await new Promise((resolve, reject) => {
proc.on("spawn", resolve);
proc.on("error", reject);
});
proc.on("exit", (status) => { proc.on("exit", (status) => {
handlePtyExit(status); handlePtyExit(status);
triggerDone(); triggerDone();
}); });
const [input, output] = await new Promise((resolve, reject) => {
setTimeout(() => reject("timed out"), 5000);
resolve(
Promise.all([
fs.open(`${dir.path}/input`, "r"),
fs.open(`${dir.path}/output`, "w"),
])
);
});
setTimeout(async () => {
try {
while (true) {
handlePtyInput(await input.read({ encoding: "utf-8" }));
}
} catch (err) {
logError(err);
}
}, 0);
resolve({ resolve({
handlePtyOutput: async (data) => { handlePtyOutput: async (data) => {
await output.write(data); await output.write(data);

View File

@ -10,7 +10,6 @@
"@babel/preset-env": "^7.12.11", "@babel/preset-env": "^7.12.11",
"@balena/dockerignore": "^1.0.2", "@balena/dockerignore": "^1.0.2",
"@kubernetes/client-node": "^0.18.0", "@kubernetes/client-node": "^0.18.0",
"@logdna/tail-file": "^3.0.0",
"@sentry/node": "^6.11.0", "@sentry/node": "^6.11.0",
"async-lock": "^1.2.6", "async-lock": "^1.2.6",
"babel-loader": "^8.2.2", "babel-loader": "^8.2.2",

View File

@ -904,11 +904,6 @@
optionalDependencies: optionalDependencies:
openid-client "^5.3.0" openid-client "^5.3.0"
"@logdna/tail-file@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@logdna/tail-file/-/tail-file-3.0.0.tgz#0120353e59bf04b318d4861684e95682b0e85071"
integrity sha512-aZy8XzJI9zwl7gbmQa1L5Hr6yJbS062OMQJ7I9sqHD/QMEBfwlhxyytJ4Qe2jAoimefuabopEi4Gk+t/7to6/A==
"@sentry/core@6.11.0": "@sentry/core@6.11.0":
version "6.11.0" version "6.11.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.11.0.tgz#40e94043afcf6407a109be26655c77832c64e740" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.11.0.tgz#40e94043afcf6407a109be26655c77832c64e740"