Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Documentation before handing off to Hyperledger #8

Merged
merged 5 commits into from
Jul 14, 2022
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 54 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,52 @@
# acapy-cache-redis
Redis Base Cache Plugin
# aries-acapy-cache-redis
ACA-Py Redis Base Cache Plugin
=======================================

[Add description]
ACA-Py uses a modular cache layer to story key-value pairs of data. The purpose
of this plugin is to allow ACA-Py to use Redis as the storage medium for it's
caching needs. When multiple instances of ACA-Py are running, and have a load
balancer distributing the requests, it is possible for requests during the same
exchange to be sent to different instances of ACA-Py. Normally, information for
these requests is cached using the built-in in-memory cache. However, if the
requests go from agent A, to agent B, then back to agent A, the cache may have
invalid data that needs to be refreshed since it is all in-memory. Switching
the backing store from memory to Redis should eliminate this problem entirely.

## Installation and Usage

### With Docker (Recommended)
Running the plugin with docker is simple and straight-forward. There is an
example [docker-compose.yml](./docker-compose.yml) file in the root of the
project that launches both ACA-Py and an accompanying Redis instance. Running
it is as simple as:

```sh
$ docker-compose up --build
```

If you are looking to integrate the plugin with your own projects, it is highly
recommended to take a look at both [docker-compose.yml](./docker-compose.yml)
and the [ACA-Py default.yml](./docker/default.yml) files to help kickstart your
project.

### Without Docker

First, install this plugin into your environment.

```sh
$ poetry install
$ poetry shell
```

Local redis server for development.
Launch a local redis server for development.

```sh
$ docker run -v /redis.conf:/usr/local/etc/redis --name redis_cache redis redis-server /usr/local/etc/redis/redis.conf
$ docker run -d -v `pwd`/redis.conf:/usr/local/etc/redis/redis.conf \
--name redis_cache -p 6379:6379 redis redis-server /usr/local/etc/redis/
```

When starting up ACA-Py, load the plugin along with any other startup
parameters.
parameters. *Note: You may need to change the redis hostname*

```sh
$ aca-py start --arg-file ./docker/default.yml
Expand All @@ -29,11 +55,29 @@ $ aca-py start --arg-file ./docker/default.yml
For manual testing with a second ACA-Py instance, you can run the following.

```sh
$ aca-py start --arg-file ./docker/default.yml --admin 0.0.0.0 3003 -it http 0.0.0.0 3002 -e http://localhost:3002
$ aca-py start --arg-file ./docker/default.yml --admin 0.0.0.0 3003 \
-it http 0.0.0.0 3002 -e http://localhost:3002
```

## Running Tests for development
### Configuration
Within the [default.yml](./docker/default.yml) file, all configuration for the
Redis Base Cache Plugin resides within the `plugin-config-value` block. The
configuration options are defined as follows:
- `redis_cache.connection` The host connection URI for the Redis server. A
different DB can be selected by adding a `/0` or `/1` to the end of the URI
- The URI may start with `rediss://` for SSL connections and `redis://` for
non-SSL connections
- `redis_cache.max_connections` The maximum number of connections to Redis
that the connection pool may allocate
- `redis_cache.credentials.username` Username for the Redis server (if not
using the default user)
- `redis_cache.credentials.password` The password for the Redis server/user
- `redis_cache.ssl.cacerts` Path to the root CA information. Useful for when
using self-signed certificates.

## Running The Integration Tests

```sh
pytest --cov-report term-missing --cov
```
$ docker-compose -f int/docker-compose.yml build
$ docker-compose -f int/docker-compose.yml run tests
```