Skip to content

Commit 0f78759

Browse files
committed
Simplify error handling:
- we don't need a special failed page, nextjs does this for us - we don't need to retry room creation, the nanoid has enough entropy that collision likelihood is vanishing The purpose of these is teaching and we just want to focus on the specific thing we are teaching. Putting normal good-practice software dev stuff in there muddies the lesson.
1 parent f8ba297 commit 0f78759

File tree

2 files changed

+11
-47
lines changed

2 files changed

+11
-47
lines changed

src/pages/d/failed.tsx

-17
This file was deleted.

src/pages/index.tsx

+11-30
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { nanoid } from "nanoid";
2-
import { env } from "process";
32
import { consoleLogSink, OptionalLoggerImpl } from "@rocicorp/logger";
43
import { DataDogBrowserLogSink } from "../frontend/data-dog-browser-log-sink";
54
import { workerURL } from "../util/host";
@@ -13,28 +12,12 @@ function Page() {
1312
return "";
1413
}
1514

16-
// We select a roomID probabilistically. If it is taken or there is some
17-
// other error when we try to create it, try a total of this many times
18-
// before giving up.
19-
const maxCreateRoomTries = 2;
20-
2115
export async function getServerSideProps() {
22-
for (let i = 0; i < maxCreateRoomTries; i++) {
23-
const newRoomID = nanoid(6);
24-
const created = await maybeCreateRoom(newRoomID);
25-
if (created) {
26-
return {
27-
redirect: {
28-
destination: `/d/${newRoomID}`,
29-
permanent: false,
30-
},
31-
};
32-
}
33-
}
34-
16+
const newRoomID = nanoid(6);
17+
await createRoom(newRoomID);
3518
return {
3619
redirect: {
37-
destination: `/d/failed`,
20+
destination: `/d/${newRoomID}`,
3821
permanent: false,
3922
},
4023
};
@@ -46,23 +29,21 @@ const createRoomURL = new URL("/createRoom", workerURL).toString();
4629

4730
const createRoomHeaders = new Headers();
4831
createRoomHeaders.set("Content-Type", "application/json");
49-
const reflectApiKey = env.REFLECT_API_KEY || "";
32+
const reflectApiKey = process.env.REFLECT_API_KEY || "";
5033
createRoomHeaders.set("x-reflect-auth-api-key", reflectApiKey);
5134

52-
async function maybeCreateRoom(roomID: string) {
35+
async function createRoom(roomID: string) {
5336
logger.info?.(`Creating room '${roomID}' at ${createRoomURL}`);
5437
const createRoomResponse = await fetch(createRoomURL, {
5538
method: "POST",
5639
headers: createRoomHeaders,
5740
body: JSON.stringify({ roomID }),
5841
});
59-
if (createRoomResponse.status === 200) {
60-
return true;
42+
if (createRoomResponse.status !== 200) {
43+
throw new Error(
44+
`Failed to create room ${roomID}: ${
45+
createRoomResponse.status
46+
}: ${await createRoomResponse.text()}`
47+
);
6148
}
62-
logger.error?.(
63-
`Failed to create room ${roomID}: ${
64-
createRoomResponse.status
65-
}: ${await createRoomResponse.text()}`
66-
);
67-
return false;
6849
}

0 commit comments

Comments
 (0)