Skip to content

Commit 16bc344

Browse files
authored
Change 'not-used-playback' to 'ingest-{playbackId}' (#2193)
* Change 'not-used-playback' to 'ingest-{playbackId}' * Fix RegEx and tests
1 parent 3a65956 commit 16bc344

File tree

2 files changed

+52
-23
lines changed

2 files changed

+52
-23
lines changed

packages/api/src/controllers/stream.test.ts

+16-8
Original file line numberDiff line numberDiff line change
@@ -888,48 +888,56 @@ describe("controllers/stream", () => {
888888
it("should extract host from redirected playback url", async () => {
889889
expect(
890890
extractUrlFrom(
891-
"https://sto-prod-catalyst-0.lp-playback.studio:443/hls/video+not-used-playback/index.m3u8"
891+
"https://sto-prod-catalyst-0.lp-playback.studio:443/hls/video+ingest-12345-67890/index.m3u8",
892+
"12345-67890"
892893
)
893894
).toBe("https://sto-prod-catalyst-0.lp-playback.studio:443/hls/video+");
894895
expect(
895896
extractUrlFrom(
896-
"https://mos2-prod-catalyst-0.lp-playback.studio:443/hls/video+not-used-playback/index.m3u8"
897+
"https://mos2-prod-catalyst-0.lp-playback.studio:443/hls/video+ingest-12345-67890/index.m3u8",
898+
"12345-67890"
897899
)
898900
).toBe(
899901
"https://mos2-prod-catalyst-0.lp-playback.studio:443/hls/video+"
900902
);
901903
expect(
902904
extractUrlFrom(
903-
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+not-used-playback/index.m3u8"
905+
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+ingest-12345-67890/index.m3u8",
906+
"12345-67890"
904907
)
905908
).toBe(
906909
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+"
907910
);
908911
expect(
909912
extractUrlFrom(
910-
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+other-playback/index.m3u8"
913+
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+other-playback/index.m3u8",
914+
"12345-67890"
911915
)
912916
).toBe(null);
913917
});
914918
it("should extract region from redirected playback url", async () => {
915919
expect(
916920
extractRegionFrom(
917-
"https://sto-prod-catalyst-0.lp-playback.studio:443/hls/video+not-used-playback/index.m3u8"
921+
"https://sto-prod-catalyst-0.lp-playback.studio:443/hls/video+ingest-12345-67890/index.m3u8",
922+
"12345-67890"
918923
)
919924
).toBe("sto");
920925
expect(
921926
extractRegionFrom(
922-
"https://mos2-prod-catalyst-0.lp-playback.studio:443/hls/video+not-used-playback/index.m3u8"
927+
"https://mos2-prod-catalyst-0.lp-playback.studio:443/hls/video+ingest-12345-67890/index.m3u8",
928+
"12345-67890"
923929
)
924930
).toBe("mos2");
925931
expect(
926932
extractRegionFrom(
927-
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+not-used-playback/index.m3u8"
933+
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+ingest-12345-67890/index.m3u8",
934+
"12345-67890"
928935
)
929936
).toBe("fra-staging");
930937
expect(
931938
extractRegionFrom(
932-
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+other-playback/index.m3u8"
939+
"https://fra-staging-staging-catalyst-0.livepeer.monster:443/hls/video+other-playback/index.m3u8",
940+
"12345-67890"
933941
)
934942
).toBe(null);
935943
});

packages/api/src/controllers/stream.ts

+36-15
Original file line numberDiff line numberDiff line change
@@ -295,13 +295,14 @@ export function resolvePullUrlFromExistingStreams(
295295

296296
async function resolvePullUrlAndRegion(
297297
stream: NewStreamPayload,
298-
ingest: string
298+
ingest: string,
299+
playbackId: string
299300
): Promise<{ pullUrl: string; pullRegion: string }> {
300301
if (process.env.NODE_ENV === "test") {
301302
return { pullUrl: null, pullRegion: null };
302303
}
303304
const url = new URL(
304-
pathJoin(ingest, `hls`, "not-used-playback", `index.m3u8`)
305+
pathJoin(ingest, `hls`, `ingest-${playbackId}`, `index.m3u8`)
305306
);
306307
const { lat, lon } = stream.pull?.location ?? {};
307308
if (lat && lon) {
@@ -316,23 +317,31 @@ async function resolvePullUrlAndRegion(
316317
return null;
317318
}
318319
return {
319-
pullUrl: extractUrlFrom(response.url),
320-
pullRegion: extractRegionFrom(response.url),
320+
pullUrl: extractUrlFrom(response.url, playbackId),
321+
pullRegion: extractRegionFrom(response.url, playbackId),
321322
};
322323
}
323324

324325
// Extracts Mist URL from redirected node URL, e.g. "https://sto-prod-catalyst-0.lp-playback.studio:443/hls/video+" from "https://sto-prod-catalyst-0.lp-playback.studio:443/hls/video+foo/index.m3u8"
325-
export function extractUrlFrom(playbackUrl: string): string {
326-
const hostRegex =
327-
/(https?:\/\/.+-\w+-catalyst.+\/hls\/.+)not-used-playback\/index.m3u8/;
326+
export function extractUrlFrom(
327+
playbackUrl: string,
328+
playbackId: string
329+
): string {
330+
const hostRegex = new RegExp(
331+
`(https?:\/\/.+-\\w+-catalyst.+\/hls\/.+)ingest-${playbackId}\/index.m3u8`
332+
);
328333
const matches = playbackUrl.match(hostRegex);
329334
return matches ? matches[1] : null;
330335
}
331336

332337
// Extracts region from redirected node URL, e.g. "sto" from "https://sto-prod-catalyst-0.lp-playback.studio:443/hls/video+foo/index.m3u8"
333-
export function extractRegionFrom(playbackUrl: string): string {
334-
const regionRegex =
335-
/https?:\/\/(.+)-\w+-catalyst.+not-used-playback\/index.m3u8/;
338+
export function extractRegionFrom(
339+
playbackUrl: string,
340+
playbackId: string
341+
): string {
342+
const regionRegex = new RegExp(
343+
`https?:\/\/(.+)-\\w+-catalyst.+ingest-${playbackId}\/index.m3u8`
344+
);
336345
const matches = playbackUrl.match(regionRegex);
337346
return matches ? matches[1] : null;
338347
}
@@ -1177,20 +1186,32 @@ app.put(
11771186
const streamExisted = streams.length === 1;
11781187

11791188
const ingest = await getIngestBase(req);
1180-
const { pullUrl, pullRegion } =
1181-
resolvePullUrlFromExistingStreams(streams) ||
1182-
(await resolvePullUrlAndRegion(rawPayload, ingest));
1189+
let streamPullUrl: string;
11831190

11841191
let stream: DBStream;
11851192
if (!streamExisted) {
11861193
logger.info(
11871194
`pull request creating a new stream with name=${rawPayload.name}`
11881195
);
11891196
stream = await handleCreateStream(req, payload);
1197+
const { pullUrl, pullRegion } = await resolvePullUrlAndRegion(
1198+
rawPayload,
1199+
ingest,
1200+
stream.playbackId
1201+
);
1202+
streamPullUrl = pullUrl;
11901203
stream.pullRegion = pullRegion;
11911204
await db.stream.replace(stream);
11921205
} else {
11931206
const oldStream = streams[0];
1207+
const { pullUrl, pullRegion } =
1208+
resolvePullUrlFromExistingStreams(streams) ||
1209+
(await resolvePullUrlAndRegion(
1210+
rawPayload,
1211+
ingest,
1212+
oldStream.playbackId
1213+
));
1214+
streamPullUrl = pullUrl;
11941215
logger.info(
11951216
`pull reusing existing old stream with id=${oldStream.id} name=${oldStream.name}`
11961217
);
@@ -1222,8 +1243,8 @@ app.put(
12221243
}
12231244

12241245
// If pullHost was resolved, then stick to that host for triggering Catalyst pull start
1225-
const playbackUrl = pullUrl
1226-
? pathJoin(pullUrl + stream.playbackId, `index.m3u8`)
1246+
const playbackUrl = streamPullUrl
1247+
? pathJoin(streamPullUrl + stream.playbackId, `index.m3u8`)
12271248
: getHLSPlaybackUrl(ingest, stream);
12281249
if (!stream.isActive || streamExisted) {
12291250
await triggerCatalystPullStart(stream, playbackUrl);

0 commit comments

Comments
 (0)