Попытка удалить все файлы в Google Cloud Storage Bucket из приложения Play приводит к неустранимой фатальной ошибке при закрытии потока ActorSystem - PullRequest
0 голосов
/ 17 октября 2018

У меня есть приложение Play Framework, которое работает на Google App Engine и имеет процесс, который пытается удалить все файлы в хранилище Google Cloud Platform (GCP).

Когда я запускаю этот процесс, оновыдает эту ошибку: a.a.ActorSystemImpl - Uncaught fatal error from thread [application-akka.actor.default-dispatcher-91] shutting down ActorSystem [application]

Вот код, который я использую для запуска этого процесса:

private static final String BUCKET_NAME = Configuration.root().getString("google.storage.bucket.name");
public static final Boolean debugOn = true; // Set to true to log...

public static void removeAllFilesFromBucket() throws Exception {
    if (debugOn == true) {
        Logger.info("GoogleControl.removeAllFilesFromBucket: Starting...");
    }

    String credentialsFileName = "";
    Storage storage = null;

    try {
        if (debugOn == true) {
            Logger.info("GoogleControl.removeAllFilesFromBucket: Getting credentialsFileName path...");
        }
        credentialsFileName = Configuration.root().getString("google.storage.credentials.file");
        if (debugOn == true) {
            Logger.info("GoogleControl.removeAllFilesFromBucket: credentialsFileName = " + credentialsFileName);
        }

        if (debugOn == true) {
            Logger.info("GoogleControl.removeAllFilesFromBucket: Setting InputStream...");
        }
        InputStream in = GoogleControl.class.getClassLoader().getResourceAsStream(credentialsFileName);
        if (in == null) {
            if (debugOn == true) {
                Logger.info("GoogleControl.removeAllFilesFromBucket: InputStream is null");
            }
        }
        if (debugOn == true) {
            Logger.info("GoogleControl.removeAllFilesFromBucket: InputStream set...");
        }

        try {
            storage = StorageOptions.newBuilder().setCredentials(ServiceAccountCredentials.fromStream(in)).build()
                    .getService();
        } catch (Exception se) {
            System.out.println("--- START ERROR WITH SETTING STORAGE OBJECT ---");
            se.printStackTrace();
            System.out.println("--- END ERROR WITH SETTING STORAGE OBJECT ---");
        }

        try {
            if (debugOn == true) {
                Logger.info("GoogleControl.removeAllFilesFromBucket: Cycling through blob objects...");
            }

            String blobName = "";
            if (debugOn == true) {
                Logger.info("GoogleControl.removeAllFilesFromBucket: Setting Page<Blob> blobs...");
            }
            Page<Blob> blobs = storage.list(BUCKET_NAME, BlobListOption.currentDirectory(),
                    BlobListOption.prefix(""));
            if (debugOn == true) {
                Logger.info("GoogleControl.removeAllFilesFromBucket: Set Page<Blob> blobs...");
            }
            for (Blob blob : blobs.iterateAll()) {
                // do something with the blob
                blobName = blob.getName();
                if (debugOn == true) {
                    Logger.info("GoogleControl.removeAllFilesFromBucket: blobName = " + blobName);
                }
                BlobId blobId = BlobId.of(BUCKET_NAME, blobName);
                boolean deleted = storage.delete(blobId);
                if (deleted) {
                    // the blob was deleted
                    if (debugOn == true) {
                        Logger.info("GoogleControl.removeAllFilesFromBucket: Blob is deleted...");
                    }
                } else {
                    // the blob was not found
                    if (debugOn == true) {
                        Logger.info("GoogleControl.removeAllFilesFromBucket: Blob is not found/not deleted...");
                    }
                }
            }
            if (debugOn == true) {
                Logger.info("GoogleControl.removeAllFilesFromBucket: Blob Object set...");
            }
        } catch (Exception se) {
            System.out.println("--- START ERROR WITH SETTING BLOB OBJECT ---");
            se.printStackTrace();
            System.out.println("--- END ERROR WITH SETTING BLOB OBJECT ---");
        }

    } catch (Exception ex) {
        System.out.println("--- START ERROR SENDFILETOBUCKET ---");
        ex.printStackTrace();
        System.out.println("--- END ERROR SENDFILETOBUCKET ---");
    }
}

Вывод выглядит так:

application - GoogleControl.removeAllFilesFromBucket: Starting...

application - GoogleControl.removeAllFilesFromBucket: Getting credentialsFileName path...

application - GoogleControl.removeAllFilesFromBucket: credentialsFileName = ptp_test_default_service_account.json

application - GoogleControl.removeAllFilesFromBucket: Setting InputStream...

application - GoogleControl.removeAllFilesFromBucket: InputStream set...

application - GoogleControl.removeAllFilesFromBucket: Cycling through blob objects...

application - GoogleControl.removeAllFilesFromBucket: Setting Page<Blob> blobs...

 a.a.ActorSystemImpl - Uncaught fatal error from thread [application-akka.actor.default-dispatcher-91] shutting down ActorSystem [application]

ЭтоКажется, что он попал в строку прямо перед тем, как попытаться установить объект Blob.Я использую эти примеры:

https://cloud.google.com/storage/docs/listing-objects

https://github.com/googleapis/google-cloud-java/blob/master/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java

Я нашел несколько сообщений об этой ошибке, но ничего, что помогает:

https://github.com/playframework/play-java-starter-example/issues/65

https://groups.google.com/forum/#!topic/akka-user/R9utH4VIeXU

Я ищу помощь по исправлению этой проблемы, а также помощь с кодом - он может быть неправильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...