Многопоточность не работает для загрузки файлов в S3 - PullRequest
0 голосов
/ 28 ноября 2018

Я задал так много вопросов по этому поводу, но все еще не смог настроить загрузку моего файла на S3.Также я не хотел помещать все детали в один вопрос и делать его слишком большим, чтобы читать другие.

Я написал свое приложение в многопоточном режиме для загрузки файлов в 3.Где-то моя многопоточность не работает, и поэтому я говорю, потому что, когда я печатал статус загрузки, я получаю ниже вывод

> Transfer: Uploading etc
>   - State: Waiting
>   - Progress: 0 Transfer: Uploading etc
>   - State: Waiting
>   - Progress: 0 Transfer: Uploading etc
>   - State: Waiting
>   - Progress: 0 Transfer: Uploading etc
>   - State: Waiting
>   - Progress: 0 Transfer: Uploading etc
>   - State: InProgress
>   - Progress: 0

Я вижу, что только один находится в состоянии выполнения, остальная часть потока находится в ожидании.Это мой признак того, что мои потоки не работают правильно.

Я подозреваю, что я создаю TransferManager из Runnable, и я передаю конструктор.

Вот мойкод.

Это мой исполнитель

public class UploadExecutor {
    private static String fileLocation = "C:\\Users\\u6034690\\Desktop\\TWOFILE\\Samplefiles";
    // private static String fileLocation="D:\\TRFAudits_Moved\\";
    private static final String _logFileName = "s3FileUploader.log";
    private static Logger _logger = Logger.getLogger(UploadExecutor.class);

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        _logger.info("----------Stating application's  main method----------------- ");
        AWSCredentials credential = new ProfileCredentialsProvider("TRFAuditability-Prod-ServiceUser").getCredentials();
        final ClientConfiguration config = new ClientConfiguration();
        AmazonS3Client s3Client = (AmazonS3Client) AmazonS3ClientBuilder.standard().withRegion("us-east-1")
                .withCredentials(new AWSStaticCredentialsProvider(credential)).withForceGlobalBucketAccessEnabled(true)
                .build();
        s3Client.getClientConfiguration().setMaxConnections(100);
        TransferManager tm = new TransferManager(s3Client);
        // while (true) {
        FileProcessThreads fp = new FileProcessThreads();
        List<File> records = fp.process(fileLocation);
        while (records.size() <= 0) {
            try {
                _logger.info("No records found willl wait for 10 Seconds");
                TimeUnit.SECONDS.sleep(10);
                records = fp.process(fileLocation);
            } catch (InterruptedException e) {
                _logger.error("InterruptedException: " + e.toString());
            }
        }
        _logger.info("Total no of Audit files = " + records.size());
        ExecutorService es = Executors.newFixedThreadPool(6);
        int recordsInEachThread = (int) (records.size() / 6);
        _logger.info("No of records in each thread = " + recordsInEachThread);
        UploadObject my1 = new UploadObject(records.subList(0, recordsInEachThread), tm);
        UploadObject my2 = new UploadObject(records.subList(recordsInEachThread, recordsInEachThread * 2), tm);
        UploadObject my3 = new UploadObject(records.subList(recordsInEachThread * 2, recordsInEachThread * 3), tm);
        UploadObject my4 = new UploadObject(records.subList(recordsInEachThread * 3, recordsInEachThread * 4), tm);
        UploadObject my5 = new UploadObject(records.subList(recordsInEachThread * 4, recordsInEachThread * 5), tm);
        UploadObject my6 = new UploadObject(records.subList(recordsInEachThread * 5, records.size()), tm);
        es.execute(my1);
        es.execute(my2);
        es.execute(my3);
        es.execute(my4);
        es.execute(my5);
        es.execute(my6);
        es.shutdown();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...