daml/ledger/ledger-on-memory
Samir Talwar fe7d56f099
kvutils/tools: Split the tools by directory. (#7306)
* kvutils/tools: Split the integrity checkers by package.

The two versions of the integrity checker are intertwined when they
really don't rely on each other at all. This splits them into two
separate packages to make the distinction clear.

CHANGELOG_BEGIN
CHANGELOG_END

* kvutils/tools: Split the integrity checkers by directory.

This splits the integrity checkers further into separate directories, to
make it clear they do not interact at all.

* kvutils/tools: Rename "integrity-check" to "integrity-check-v1".

* ledger-on-memory: Recommend ledger exports (v3), not ledger dumps (v1).

* kvutils/tools: Split the benchmarks from integrity-check-v2.
2020-09-02 12:45:56 +00:00
..
src kvutils: Simplify exporting by pushing the mutations outwards. (#7215) 2020-08-25 17:52:59 +00:00
BUILD.bazel kvutils: Increase the streaming updates timeout in integration tests. (#7278) 2020-08-31 14:40:35 +00:00
README.md kvutils/tools: Split the tools by directory. (#7306) 2020-09-02 12:45:56 +00:00

Overview

This document is to help internal engineers work with ledger-on-memory.

ledger-on-memory is a key/value-based ledger that uses a simple in-memory map as an underlying storage. It uses either H2 or PostgreSQL as its index database.

Ledger On Memory

To build a fat JAR with the server built from HEAD run

bazel build //ledger/ledger-on-memory:app_deploy.jar

The application can be run from command line with the following command:

java -Xmx4G -XX:+UseG1GC -jar bazel-bin/ledger/ledger-on-memory/app_deploy.jar --participant participant-id=foo,port=6861

As run from the main project root directory (adjust the location of the JAR according to your working directory).

Alternatively, the application can be run using the Bazel command:

bazel run //ledger/ledger-on-memory:app -- --participant participant-id=foo,port=6861

Docker

Ledger On Memory can be put into a Docker container by first building it:

bazel build ledger/ledger-on-memory:app-image

Then by running the Bazel target that imports the image into your local Docker repository, and then runs a container from that image.

bazel run ledger/ledger-on-memory:app-image

The container will fail to run, but the image has now been loaded into your local Docker repository under the name bazel/ledger/ledger-on-memory.

It can then be run using Docker:

docker run \
    -it \
    --rm \
    --name ledger \
    --network docker_default \
    -p 6861:6865 \
    bazel/ledger/ledger-on-memory:app-image \
        --participant participant-id=foo,port=6865,address=0.0.0.0

The above command makes the ledger available to clients from the host machine at the address localhost:6861. It is also available to other docker containers on the docker_default network under ledger:6865.

Creating ledger exports

Ledger On Memory can be used to generate ledger exports through an environment variable:

export KVUTILS_LEDGER_EXPORT=/path/to/export/file

Then launch the ledger using the Bazel or Java command as described above.

In case the ledger is run from within the Docker container, use following syntax:

export KVUTILS_LEDGER_EXPORT=/path/to/export/directory"
docker run \
        -it \
        --rm \
        --name ledger \
        --network docker_default \
        -p 6861:6865 \
        -v ${KVUTILS_LEDGER_EXPORT}:/export \
        -e KVUTILS_LEDGER_EXPORT=/export/my-ledger.export \
        bazel/ledger/ledger-on-memory:app-image \
            --participant participant-id=foo,port=6865,address=0.0.0.0