summaryrefslogtreecommitdiff
path: root/src/services
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-07-01 21:12:14 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-07-01 21:12:14 +0900
commit03e999875a7678c0e5293b87397ab67040010eeb (patch)
tree6451269e48a08baf562e6e57909df33ae95b708a /src/services
parentSet job concurrency to reduce performance issue (diff)
downloadsharkey-03e999875a7678c0e5293b87397ab67040010eeb.tar.gz
sharkey-03e999875a7678c0e5293b87397ab67040010eeb.tar.bz2
sharkey-03e999875a7678c0e5293b87397ab67040010eeb.zip
リモートファイルの削除が重い問題を修正
Diffstat (limited to 'src/services')
-rw-r--r--src/services/drive/delete-file.ts51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/services/drive/delete-file.ts b/src/services/drive/delete-file.ts
index 258c0853fb..5b44a0817a 100644
--- a/src/services/drive/delete-file.ts
+++ b/src/services/drive/delete-file.ts
@@ -1,8 +1,10 @@
+import * as Minio from 'minio';
import { DriveFile } from '../../models/entities/drive-file';
import { InternalStorage } from './internal-storage';
import { DriveFiles, Instances, Notes } from '../../models';
import { driveChart, perUserDriveChart, instanceChart } from '../chart';
import { createDeleteObjectStorageFileJob } from '../../queue';
+import { fetchMeta } from '../../misc/fetch-meta';
export async function deleteFile(file: DriveFile, isExpired = false) {
if (file.storedInternal) {
@@ -27,6 +29,40 @@ export async function deleteFile(file: DriveFile, isExpired = false) {
}
}
+ postProcess(file, isExpired);
+}
+
+export async function deleteFileSync(file: DriveFile, isExpired = false) {
+ if (file.storedInternal) {
+ InternalStorage.del(file.accessKey!);
+
+ if (file.thumbnailUrl) {
+ InternalStorage.del(file.thumbnailAccessKey!);
+ }
+
+ if (file.webpublicUrl) {
+ InternalStorage.del(file.webpublicAccessKey!);
+ }
+ } else if (!file.isLink) {
+ const promises = [];
+
+ promises.push(deleteObjectStorageFile(file.accessKey!));
+
+ if (file.thumbnailUrl) {
+ promises.push(deleteObjectStorageFile(file.thumbnailAccessKey!));
+ }
+
+ if (file.webpublicUrl) {
+ promises.push(deleteObjectStorageFile(file.webpublicAccessKey!));
+ }
+
+ await Promise.all(promises);
+ }
+
+ postProcess(file, isExpired);
+}
+
+function postProcess(file: DriveFile, isExpired = false) {
// リモートファイル期限切れ削除後は直リンクにする
if (isExpired && file.userHost !== null && file.uri != null) {
DriveFiles.update(file.id, {
@@ -53,3 +89,18 @@ export async function deleteFile(file: DriveFile, isExpired = false) {
Instances.decrement({ host: file.userHost }, 'driveFiles', 1);
}
}
+
+export async function deleteObjectStorageFile(key: string) {
+ const meta = await fetchMeta();
+
+ const minio = new Minio.Client({
+ endPoint: meta.objectStorageEndpoint!,
+ region: meta.objectStorageRegion ? meta.objectStorageRegion : undefined,
+ port: meta.objectStoragePort ? meta.objectStoragePort : undefined,
+ useSSL: meta.objectStorageUseSSL,
+ accessKey: meta.objectStorageAccessKey!,
+ secretKey: meta.objectStorageSecretKey!,
+ });
+
+ await minio.removeObject(meta.objectStorageBucket!, key);
+}