Skip to main content

Software Heritage - Storage

Abstraction layer over the archive, allowing to access all stored source code artifacts as well as their metadata.

Quick start

Dependencies

Python tests for this module include tests that cannot be run without a local Postgresql database, so you need the Postgresql server executable on your machine (no need to have a running Postgresql server). They also expect a cassandra server.

Debian-like host

$ sudo apt install libpq-dev postgresql-11 cassandra

Non Debian-like host

The tests expect the path to cassandra to either be unspecified, it is then looked up at /usr/sbin/cassandra, either specified through the environment variable SWH_CASSANDRA_BIN.

Optionally, you can avoid running the cassandra tests.

(swh) :~/swh-storage$ tox -- -m 'not cassandra'

Installation

It is strongly recommended to use a virtualenv. In the following, we consider you work in a virtualenv named swh. See the developer setup guide for a more details on how to setup a working environment.

You can install the package directly from pypi:

(swh) :~$ pip install swh.storage
[...]

Or from sources:

(swh) :~$ git clone https://forge.softwareheritage.org/source/swh-storage.git
[...]
(swh) :~$ cd swh-storage
(swh) :~/swh-storage$ pip install .
[...]

Then you can check it’s properly installed:

(swh) :~$ swh storage --help
Usage: swh storage [OPTIONS] COMMAND [ARGS]...

  Software Heritage Storage tools.

Options:
  -h, --help  Show this message and exit.

Commands:
  rpc-serve  Software Heritage Storage RPC server.

Tests

The best way of running Python tests for this module is to use tox.

(swh) :~$ pip install tox

tox

From the sources directory, simply use tox:

(swh) :~/swh-storage$ tox
[...]
========= 315 passed, 6 skipped, 15 warnings in 40.86 seconds ==========
_______________________________ summary ________________________________
  flake8: commands succeeded
  py3: commands succeeded
  congratulations :)

Note: it is possible to set the JAVA_HOME environment variable to specify the version of the JVM to be used by Cassandra. For example, at the time of writing this, Cassandra is meant to be run with Java 11. On Debian bookworm, one needs to manually install openjdk-11-jre-headless from bullseye or unstable and set the appropriate environment variable:

(swh) :~/swh-storage$ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
(swh) :~/swh-storage$ tox
[...]

Development

The storage server can be locally started. It requires a configuration file and a running Postgresql database.

Sample configuration

A typical configuration storage.yml file is:

storage:
  cls: postgresql
  db: "dbname=softwareheritage-dev user=<user> password=<pwd>"
  objstorage:
    cls: pathslicing
    root: /tmp/swh-storage/
    slicing: 0:2/2:4/4:6

which means, this uses:

  • a local storage instance whose db connection is to softwareheritage-dev local instance,

  • the objstorage uses a local objstorage instance whose:

    • root path is /tmp/swh-storage,

    • slicing scheme is 0:2/2:4/4:6. This means that the identifier of the content (sha1) which will be stored on disk at first level with the first 2 hex characters, the second level with the next 2 hex characters and the third level with the next 2 hex characters. And finally the complete hash file holding the raw content. For example: 00062f8bd330715c4f819373653d97b3cd34394c will be stored at 00/06/2f/00062f8bd330715c4f819373653d97b3cd34394c

Note that the root path should exist on disk before starting the server.

Starting the storage server

If the python package has been properly installed (e.g. in a virtual env), you should be able to use the command:

(swh) :~/swh-storage$ swh storage -C storage.yml rpc-serve

This runs a local swh-storage api at 5002 port.

(swh) :~/swh-storage$ curl http://127.0.0.1:5002
<html>
<head><title>Software Heritage storage server</title></head>
<body>
<p>You have reached the
<a href="https://www.softwareheritage.org/">Software Heritage</a>
storage server.<br />
See its
<a href="https://docs.softwareheritage.org/devel/swh-storage/">documentation
and API</a> for more information</p>

And then what?

In your upper layer (loader-git, loader-svn, etc…), you can define a remote storage with this snippet of yaml configuration.

storage:
  cls: remote
  url: http://localhost:5002/
storage:
  cls: pipeline
  steps:
    - cls: buffer
      min_batch_size:
      content: 10000
      content_bytes: 104857600
      directory: 1000
      revision: 1000
    - cls: filter
    - cls: remote
      url: http://localhost:5002/

Cassandra

As an alternative to PostgreSQL, swh-storage can use Cassandra as a database backend. It can be used like this:

storage:
  cls: cassandra
  hosts:
    - localhost
  keyspace: swh
  objstorage:
    cls: pathslicing
    root: /home/storage/swh-storage/
    slicing: 0:2/2:4/4:6

The Cassandra swh-storage implementation supports both Cassandra >= 4.0-alpha2 and ScyllaDB >= 4.4 (and possibly earlier versions, but this is untested).

While the main code supports both transparently, running tests or configuring the schema requires specific code when using ScyllaDB, enabled by setting the SWH_USE_SCYLLADB=1 environment variable.

Release files for swh.storage 4.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for swh.storage 4.3.0
File Size Uploaded
swh_storage-4.3.0.tar.gz 442.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for swh.storage 4.3.0
File Interpreter ABI Platform
swh_storage-4.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.0 MB

Release files / swh_storage-4.3.0.tar.gz

Download URL swh_storage-4.3.0.tar.gz
Size 442.6 kB
Tags Source
SHA-256 checksum
How to use checksums
4f7103f8401785624bcd819bc68a650e46b29539b744ec7b75e2995d9cd2384e
BLAKE2b-256 checksum
How to use checksums
a8d446cea176bb0df49ef1c4094f97cd9563546ec7c5b24b7ba405617c6c171b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / swh_storage-4.3.0-py3-none-any.whl

Download URL swh_storage-4.3.0-py3-none-any.whl
Size 585.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0792979e832c70e9f57cfdc2111fc9a3883308f5f07c1ba14c042a3fd2ccb93e
BLAKE2b-256 checksum
How to use checksums
050251b5c019e479d056b56ce8563f2856295345ed347f4c93943ed79d0c3134
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release history Release notifications | RSS feed

This release

4.3.0 This release

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.2

2 release files

4.1.1

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.10.1

2 release files

2.10.0

2 release files

2.9.1

2 release files

2.9.0

2 release files

2.8.1

2 release files

2.8.0

2 release files

2.7.0

2 release files

2.6.1

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.20.0

2 release files

1.18.7

2 release files

1.18.6

2 release files

1.18.4

2 release files

1.18.3

2 release files

1.18.2

2 release files

1.18.1

2 release files

1.18.0

2 release files

1.17.1

2 release files

1.16.0

2 release files

1.15.4

2 release files

1.15.2

2 release files

1.15.0

2 release files

1.14.4

2 release files

1.13.0

2 release files

1.11.0

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.3

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.42.0

2 release files

0.41.0

2 release files

0.40.0

2 release files

0.39.0

2 release files

0.38.0

2 release files

0.37.1

2 release files

0.37.0

2 release files

0.36.0

2 release files

0.35.1

2 release files

0.35.0

2 release files

0.32.0

2 release files

0.31.0

2 release files

0.30.1

2 release files

0.30.0

2 release files

0.29.1

2 release files

0.29.0

2 release files

0.27.4

2 release files

0.27.1

2 release files

0.27.0

2 release files

0.26.0

2 release files

0.25.0

2 release files

0.23.2

2 release files

0.23.1

2 release files

0.23.0

2 release files

0.21.1

2 release files

0.21.0

2 release files

0.20.0

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.17.2

2 release files

0.15.3

2 release files

0.15.2

2 release files

0.15.1

2 release files

0.15.0

2 release files

0.14.3

2 release files

0.14.2

2 release files

0.13.2

2 release files

0.11.8

2 release files

0.11.6

2 release files

0.11.5

2 release files

0.11.4

2 release files

0.11.3

2 release files

0.11.2

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.10.6

2 release files

0.10.5

2 release files

0.10.4

2 release files

0.10.3

2 release files

0.10.2

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page