# Azure Blob External Storage Module 

This module use azure blob to store and retrieve workflows/tasks input/output payload that
went over the thresholds defined in properties named `conductor.[workflow|task].[input|output].payload.threshold.kb`.

**Warning** Azure Java SDK use libs already present inside `conductor` like `jackson` and `netty`.
You may encounter deprecated issues, or conflicts and need to adapt the code if the module is not maintained along with `conductor`.
It has only been tested with **v12.2.0**.

## Configuration

### Usage

Documentation [External Payload Storage]([https://netflix.github.io/conductor/externalpayloadstorage/#azure-blob-storage](https://docs.conductor-oss.org/documentation/advanced/externalpayloadstorage.html))

See [https://docs.conductor-oss.org/documentation/advanced/externalpayloadstorage.html]() for more details
### Example

```properties
conductor.additional.modules=com.netflix.conductor.azureblob.AzureBlobModule
es.set.netty.runtime.available.processors=false

workflow.external.payload.storage=AZURE_BLOB
workflow.external.payload.storage.azure_blob.connection_string=DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;EndpointSuffix=localhost
workflow.external.payload.storage.azure_blob.signedurlexpirationseconds=360
```

## Testing

You can use [Azurite](https://github.com/Azure/Azurite) to simulate an Azure Storage.

### Troubleshoots

* When using **es5 persistance** you will receive an `java.lang.IllegalStateException` because the Netty lib will call `setAvailableProcessors` two times. To resolve this issue you need to set the following system property

```
es.set.netty.runtime.available.processors=false
```

If you want to change the default HTTP client of azure sdk, you can use `okhttp` instead of `netty`.
For that you need to add the following [dependency](https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/storage/azure-storage-blob#default-http-client).

```
com.azure:azure-core-http-okhttp:${compatible version}
```
