# pict-rs 0.4.2

## Overview

I'm happy to announc pict-rs 0.4.2 today. This is a smaller release but includes some important
changes. A few users had been seeing issues around pict-rs' HTTP client when talking to object
storage or downloading media, this release should fix these issues.

### Features

- [Process Timeout](#process-timeout)


### Bugfix

- [Dangling Backgrounded Uploads](#dangling-backgrounded-uploads)


### Changes

- [Reqwest](#reqwest)


## Upgrade Notes

There's no significant changes from 0.4.1, so upgrading should be as simple as pulling a new version
of pict-rs.


## Descriptions

### Process Timeout

pict-rs spawns processes to handle identifying and processing images. These processes have not had
many bounds in place so far, and are left to run more or less unattended for as long as they care to
take. This can cause problems when a large file is uploaded and causes clients to time out while
waiting. While the proper solution for these cases is to use the backgrounded endpoint to avoid
timing out http requests when processing large files, It may be worth limiting the duration these
processes are allowed to run for.

0.4.2 introduces a new config option: `PICTRS__MEDIA__PROCESS_TIMEOUT`, which governs how long any
given process that pict-rs spawns is allowed to run. The default value here is 30 seconds, but on
systems with slower CPUs or if larger files need to be handled, this value can be increased.
Alternatively, if only small or simple files need to be hosted, then this value can be lowered,
ensuring any file that is too complex will not be succesfully processed.

When an operation times out, this is considered a client error, since the client initiated a request
with a file too complex to process in a reasonable amount of time.


### Dangling Backgrounded Uploads

In some cases, a backgrounded upload could fail and leave the original unprocessed media in the
store, but inaccessible from any client. This is now solved by ensuring that even when processing a
backgrounded upload fails, the source files are cleaned before the job completes.


### Reqwest

This release swaps the `awc` HTTP client library for `reqwest`. Due to a number of HTTP-related
issues, and awc's status as a less-supported member of the actix-web ecosystem, pict-rs has moved to
`reqwest` for making HTTP requests. This should result in slightly better performance, fewer
dangling connections, and fewer connection errors.

The `PICTRS__SERVER__CLIENT_POOL_SIZE` variable is now less useful. Since reqwest doesn't give
control of its pool size directly, this value now limits simultaneous idle connections to a given
host.
