Search in sources :

Example 1 with IotHubTooManyDevicesException

use of com.microsoft.azure.sdk.iot.service.exceptions.IotHubTooManyDevicesException in project azure-iot-sdk-java by Azure.

the class ExportImportTests method runExportJob.

private static List<ExportImportDevice> runExportJob(Optional<StorageAuthenticationType> storageAuthenticationType) throws Exception {
    Boolean excludeKeys = false;
    String containerSasUri = getContainerSasUri(exportContainer);
    boolean exportJobScheduled = false;
    JobProperties exportJob = null;
    while (!exportJobScheduled) {
        try {
            if (storageAuthenticationType.isPresent()) {
                JobProperties exportJobProperties = JobProperties.createForExportJob(containerSasUri, excludeKeys, storageAuthenticationType.get());
                exportJob = registryManager.exportDevices(exportJobProperties);
            } else {
                exportJob = registryManager.exportDevices(containerSasUri, excludeKeys);
            }
            exportJobScheduled = true;
        } catch (IotHubTooManyDevicesException e) {
            // test is being throttled, wait a while and try again
            Thread.sleep(10 * 1000);
        }
    }
    JobProperties.JobStatus jobStatus;
    long startTime = System.currentTimeMillis();
    while (true) {
        exportJob = registryManager.getJob(exportJob.getJobId());
        jobStatus = exportJob.getStatus();
        if (jobStatus == JobProperties.JobStatus.COMPLETED || jobStatus == JobProperties.JobStatus.FAILED) {
            break;
        }
        if (System.currentTimeMillis() - startTime > EXPORT_JOB_TIMEOUT_MILLISECONDS) {
            fail("Timed out waiting for the export job to complete");
        }
        Thread.sleep(100);
    }
    String exportedDevicesJson = "";
    for (BlobItem blobItem : exportContainer.listBlobs()) {
        BlobInputStream stream = exportContainer.getBlobClient(blobItem.getName()).openInputStream();
        try (Scanner scanner = new Scanner(stream, StandardCharsets.UTF_8.name())) {
            exportedDevicesJson = scanner.next();
        }
    }
    List<ExportImportDevice> result = new ArrayList<>();
    Scanner scanner = new Scanner(exportedDevicesJson);
    while (scanner.hasNextLine()) {
        String exportImportDeviceJson = scanner.nextLine();
        ExportImportDeviceParser parser = new ExportImportDeviceParser(exportImportDeviceJson);
        ExportImportDevice device = Deencapsulation.newInstance(ExportImportDevice.class, new Class[] { ExportImportDeviceParser.class }, parser);
        device.setImportMode(ImportMode.CreateOrUpdate);
        result.add(device);
    }
    scanner.close();
    if (jobStatus != JobProperties.JobStatus.COMPLETED) {
        Assert.fail("The export job was not completed successfully");
    }
    return result;
}
Also used : Scanner(java.util.Scanner) JobProperties(com.microsoft.azure.sdk.iot.service.JobProperties) ExportImportDevice(com.microsoft.azure.sdk.iot.service.ExportImportDevice) ArrayList(java.util.ArrayList) BlobInputStream(com.azure.storage.blob.specialized.BlobInputStream) IotHubTooManyDevicesException(com.microsoft.azure.sdk.iot.service.exceptions.IotHubTooManyDevicesException) BlobItem(com.azure.storage.blob.models.BlobItem) ExportImportDeviceParser(com.microsoft.azure.sdk.iot.deps.serializer.ExportImportDeviceParser)

Example 2 with IotHubTooManyDevicesException

use of com.microsoft.azure.sdk.iot.service.exceptions.IotHubTooManyDevicesException in project azure-iot-sdk-java by Azure.

the class ExportImportTests method runImportJob.

private static void runImportJob(List<ExportImportDevice> devices, ImportMode importMode, Optional<StorageAuthenticationType> storageAuthenticationType) throws Exception {
    // Creating the json string to be submitted for import using the specified importMode
    StringBuilder devicesToAdd = new StringBuilder();
    for (int i = 0; i < devices.size(); i++) {
        devices.get(i).setImportMode(importMode);
        ExportImportDeviceParser parser = Deencapsulation.invoke(devices.get(i), "toExportImportDeviceParser");
        devicesToAdd.append(parser.toJson());
        if (i < devices.size() - 1) {
            devicesToAdd.append("\r\n");
        }
    }
    byte[] blobToImport = devicesToAdd.toString().getBytes(StandardCharsets.UTF_8);
    // Creating the Azure storage blob and uploading the serialized string of devices
    InputStream stream = new ByteArrayInputStream(blobToImport);
    String importBlobName = "devices.txt";
    BlockBlobClient importBlob = importContainer.getBlobClient(importBlobName).getBlockBlobClient();
    importBlob.delete();
    importBlob.upload(stream, blobToImport.length);
    // Starting the import job
    boolean importJobScheduled = false;
    JobProperties importJob = null;
    while (!importJobScheduled) {
        try {
            if (storageAuthenticationType.isPresent()) {
                // For a given StorageAuthenticationType, create JobProperties and pass it
                JobProperties importJobProperties = JobProperties.createForImportJob(getContainerSasUri(importContainer), getContainerSasUri(importContainer), storageAuthenticationType.get());
                importJob = registryManager.importDevices(importJobProperties);
            } else {
                importJob = registryManager.importDevices(getContainerSasUri(importContainer), getContainerSasUri(importContainer));
            }
            importJobScheduled = true;
        } catch (IotHubTooManyDevicesException e) {
            // test is being throttled, wait a while and try again
            Thread.sleep(10 * 1000);
        }
    }
    // Waiting for the import job to complete
    long startTime = System.currentTimeMillis();
    while (true) {
        importJob = registryManager.getJob(importJob.getJobId());
        if (importJob.getStatus() == JobProperties.JobStatus.COMPLETED || importJob.getStatus() == JobProperties.JobStatus.FAILED) {
            break;
        }
        if (System.currentTimeMillis() - startTime > IMPORT_JOB_TIMEOUT_MILLISECONDS) {
            fail("Timed out waiting for the import job to complete");
        }
        Thread.sleep(100);
    }
    // Checking the result of the import job
    if (importJob.getStatus() != JobProperties.JobStatus.COMPLETED) {
        Assert.fail("The import job was not completed successfully for " + importMode + " operation.");
    }
}
Also used : JobProperties(com.microsoft.azure.sdk.iot.service.JobProperties) BlockBlobClient(com.azure.storage.blob.specialized.BlockBlobClient) ByteArrayInputStream(java.io.ByteArrayInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) BlobInputStream(com.azure.storage.blob.specialized.BlobInputStream) InputStream(java.io.InputStream) ExportImportDeviceParser(com.microsoft.azure.sdk.iot.deps.serializer.ExportImportDeviceParser) IotHubTooManyDevicesException(com.microsoft.azure.sdk.iot.service.exceptions.IotHubTooManyDevicesException)

Aggregations

BlobInputStream (com.azure.storage.blob.specialized.BlobInputStream)2 ExportImportDeviceParser (com.microsoft.azure.sdk.iot.deps.serializer.ExportImportDeviceParser)2 JobProperties (com.microsoft.azure.sdk.iot.service.JobProperties)2 IotHubTooManyDevicesException (com.microsoft.azure.sdk.iot.service.exceptions.IotHubTooManyDevicesException)2 BlobItem (com.azure.storage.blob.models.BlobItem)1 BlockBlobClient (com.azure.storage.blob.specialized.BlockBlobClient)1 ExportImportDevice (com.microsoft.azure.sdk.iot.service.ExportImportDevice)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 Scanner (java.util.Scanner)1