diff options
author | Chocobozzz <me@florianbigard.com> | 2022-10-04 10:03:17 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2022-10-04 10:03:17 +0200 |
commit | cfd57d2ca0bb058087f7dc90fcc3e8442b0288e1 (patch) | |
tree | dc899a1504ecac588e5580553e02571e0f5d7e4b /server/lib/object-storage/shared/object-storage-helpers.ts | |
parent | 9c0cdc5047918b959ebd5e075ddad81eb7fb93f0 (diff) | |
download | PeerTube-cfd57d2ca0bb058087f7dc90fcc3e8442b0288e1.tar.gz PeerTube-cfd57d2ca0bb058087f7dc90fcc3e8442b0288e1.tar.zst PeerTube-cfd57d2ca0bb058087f7dc90fcc3e8442b0288e1.zip |
Live supports object storage
* Sync live files (segments, master playlist, resolution playlist,
segment sha file) into object storage
* Automatically delete them when the live ends
* Segment sha file is now a file on disk, and not stored in memory
anymore
Diffstat (limited to 'server/lib/object-storage/shared/object-storage-helpers.ts')
-rw-r--r-- | server/lib/object-storage/shared/object-storage-helpers.ts | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/server/lib/object-storage/shared/object-storage-helpers.ts b/server/lib/object-storage/shared/object-storage-helpers.ts index 16161362c..c131977e8 100644 --- a/server/lib/object-storage/shared/object-storage-helpers.ts +++ b/server/lib/object-storage/shared/object-storage-helpers.ts | |||
@@ -22,6 +22,24 @@ type BucketInfo = { | |||
22 | PREFIX?: string | 22 | PREFIX?: string |
23 | } | 23 | } |
24 | 24 | ||
25 | async function listKeysOfPrefix (prefix: string, bucketInfo: BucketInfo) { | ||
26 | const s3Client = getClient() | ||
27 | |||
28 | const commandPrefix = bucketInfo.PREFIX + prefix | ||
29 | const listCommand = new ListObjectsV2Command({ | ||
30 | Bucket: bucketInfo.BUCKET_NAME, | ||
31 | Prefix: commandPrefix | ||
32 | }) | ||
33 | |||
34 | const listedObjects = await s3Client.send(listCommand) | ||
35 | |||
36 | if (isArray(listedObjects.Contents) !== true) return [] | ||
37 | |||
38 | return listedObjects.Contents.map(c => c.Key) | ||
39 | } | ||
40 | |||
41 | // --------------------------------------------------------------------------- | ||
42 | |||
25 | async function storeObject (options: { | 43 | async function storeObject (options: { |
26 | inputPath: string | 44 | inputPath: string |
27 | objectStorageKey: string | 45 | objectStorageKey: string |
@@ -36,6 +54,8 @@ async function storeObject (options: { | |||
36 | return uploadToStorage({ objectStorageKey, content: fileStream, bucketInfo }) | 54 | return uploadToStorage({ objectStorageKey, content: fileStream, bucketInfo }) |
37 | } | 55 | } |
38 | 56 | ||
57 | // --------------------------------------------------------------------------- | ||
58 | |||
39 | async function removeObject (filename: string, bucketInfo: BucketInfo) { | 59 | async function removeObject (filename: string, bucketInfo: BucketInfo) { |
40 | const command = new DeleteObjectCommand({ | 60 | const command = new DeleteObjectCommand({ |
41 | Bucket: bucketInfo.BUCKET_NAME, | 61 | Bucket: bucketInfo.BUCKET_NAME, |
@@ -89,6 +109,8 @@ async function removePrefix (prefix: string, bucketInfo: BucketInfo) { | |||
89 | if (listedObjects.IsTruncated) await removePrefix(prefix, bucketInfo) | 109 | if (listedObjects.IsTruncated) await removePrefix(prefix, bucketInfo) |
90 | } | 110 | } |
91 | 111 | ||
112 | // --------------------------------------------------------------------------- | ||
113 | |||
92 | async function makeAvailable (options: { | 114 | async function makeAvailable (options: { |
93 | key: string | 115 | key: string |
94 | destination: string | 116 | destination: string |
@@ -122,7 +144,8 @@ export { | |||
122 | storeObject, | 144 | storeObject, |
123 | removeObject, | 145 | removeObject, |
124 | removePrefix, | 146 | removePrefix, |
125 | makeAvailable | 147 | makeAvailable, |
148 | listKeysOfPrefix | ||
126 | } | 149 | } |
127 | 150 | ||
128 | // --------------------------------------------------------------------------- | 151 | // --------------------------------------------------------------------------- |