mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-27 15:32:15 -05:00
rewrite with stronger spaces emphasis
Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
This commit is contained in:
@@ -8,29 +8,12 @@ geekdocFilePath: _index.md
|
||||
geekdocCollapseSection: true
|
||||
---
|
||||
|
||||
## Abstract
|
||||
## Overview
|
||||
|
||||
This service provides an oCIS extension that wraps [reva](https://github.com/cs3org/reva/) and adds an opinionated configuration to it.
|
||||
The storage extension wraps [reva](https://github.com/cs3org/reva/) and adds an opinionated configuration to provide two core services for the oCIS platform:
|
||||
1. A [*Spaces Registry*]({{< ref "./spacesregistry.md" >}}) that acts as a dictionary for storage *Spaces* and their metadata
|
||||
2. A [*Spaces Provider*]({{< ref "./spacesprovider.md" >}}) that organizes *Resources* in storage *Spaces* and persists them in an underlying *Storage System*
|
||||
|
||||
## Architecture Overview
|
||||
*Clients* will use the *Spaces Registry* to poll or get notified about changes in all *Spaces* a user has access to. Every *Space* has a dedicated `/dav/spaces/<spaceid>` WebDAV endpoint that is served by a *Spaces Provider* which uses a specific reva storage driver to wrap an underlying *Storage System*.
|
||||
|
||||
The below diagram shows the oCIS services and the contained reva services within as dashed boxes. In general:
|
||||
1. A request comes in at the proxy and is authenticated using OIDC.
|
||||
2. It is forwarded to the oCIS frontend which handles ocs and ocdav requests by talking to the reva gateway using the CS3 API.
|
||||
3. The gateway acts as a facade to the actual CS3 services: storage providers, user providers, group providers and sharing providers.
|
||||
|
||||
{{< svg src="extensions/storage/static/overview.drawio.svg" >}}
|
||||
|
||||
The dashed lines in the diagram indicate requests that are made to authenticate requests or lookup the storage provider:
|
||||
1. After authenticating a request, the proxy may either use the CS3 `userprovider` or the accounts service to fetch the user information that will be minted into the `x-access-token`.
|
||||
2. The gateway will verify the JWT signature of the `x-access-token` or try to authenticate the request itself, e.g. using a public link token.
|
||||
|
||||
{{< hint warning >}}
|
||||
The bottom part is lighter because we will deprecate it in favor of using only the CS3 user and group providers after moving some account functionality into reva and glauth. The metadata storage is not registered in the reva gateway to seperate metadata necessary for running the service from data that is being served directly.
|
||||
{{< /hint >}}
|
||||
|
||||
## Endpoints and references
|
||||
|
||||
In order to reason about the request flow, two aspects in the architecture need to be understood well:
|
||||
1. What kind of [*namespaces*]({{< ref "./namespaces.md" >}}) are presented at the different WebDAV and CS3 endpoints?
|
||||
2. What kind of [*resource*]({{< ref "./terminology.md#resources" >}}) [*references*]({{< ref "./terminology.md#references" >}}) are exposed or required: path or id based?
|
||||
{{< svg src="extensions/storage/static/storage.drawio.svg" >}}
|
||||
|
||||
@@ -12,7 +12,7 @@ In ownCloud 10 all paths are considered relative to the users home. The CS3 API
|
||||
|
||||
{{< svg src="extensions/storage/static/namespaces.drawio.svg" >}}
|
||||
|
||||
The different paths in the namespaces need to be translated while passing [*references*]({{< ref "./terminology.md#references" >}}) from service to service. While the oc10 endpoints all work on paths we internally reference shared resources by id, so the shares don't break when a file is renamed or moved inside a [*storage space*]({{< ref "./terminology.md#storage-spaces" >}}). The following table lists the various namespaces, paths and id based references:
|
||||
The different paths in the namespaces need to be translated while passing [*references*]({{< ref "./terminology.md#references" >}}) from service to service. While the oc10 endpoints all work on paths we internally reference shared resources by id, so the shares don't break when a file is renamed or moved inside a storage [*space*]({{< ref "./spaces" >}}). The following table lists the various namespaces, paths and id based references:
|
||||
|
||||
| oc10 namespace | CS3 global namespace | storage provider | reference | content |
|
||||
|--------------------------------------------------|----------------------------------------|------------------|-----------|---------|
|
||||
@@ -32,13 +32,13 @@ In the global CS3 namespaces we plan to move `/home/Shares`, which currently lis
|
||||
|
||||
## ownCloud namespaces
|
||||
|
||||
In contrast to the global namespace of CS3, ownCloud always presented a user specific namespace on all endpoints. It will always list the users private files under `/`. Shares can be mounted at an arbitrary location in the users private spaces. See the [webdav]({{< ref "./architecture#webdav" >}}) and [ocs]({{< ref "./architecture#sharing" >}}) sections for more details end examples.
|
||||
In contrast to the global namespace of CS3, ownCloud always presented a user specific namespace on all endpoints. It will always list the users private files under `/`. Shares can be mounted at an arbitrary location in the users private spaces. See the [webdav]({{< ref "./spacesprovider#webdav" >}}) and [ocs]({{< ref "./spacesprovider#sharing" >}}) sections for more details end examples.
|
||||
|
||||
With the spaces concept we are planning to introduce a global namespace to the ownCloud webdav endpoints. This will push the users private space down in the hierarchy: it will move from `/webdav` to `/webdav/home` or `/webdav/users/<username>`. The related [migration stages]({{< ref "../../ocis/migration.md" >}}) are subject to change.
|
||||
|
||||
## CS3 global namespaces
|
||||
|
||||
The *CS3 global namespace* in oCIS is configured in the [*storage space registry*]({{< ref "./terminology.md#storage-space-registries" >}}). oCIS uses these defaults:
|
||||
The *CS3 global namespace* in oCIS is configured in the storage [*spaces registry*]({{< ref "./spacesregistry" >}}). oCIS uses these defaults:
|
||||
|
||||
| global namespace | description |
|
||||
|-|-|
|
||||
@@ -48,7 +48,7 @@ The *CS3 global namespace* in oCIS is configured in the [*storage space registry
|
||||
| `/public/<token>` | a virtual folder listing public shares |
|
||||
| `/spaces/<spacename>` | *TODO: project or group spaces* |
|
||||
|
||||
Technically, the `/home` namespace is not necessary: the [*storage space registry*]({{< ref "./terminology.md#storage-space-registries" >}}) knows the path to a users private space in the `/users` namespace and the gateway can forward the requests to the responsible storage provider.
|
||||
Technically, the `/home` namespace is not necessary: the storage [*spaces registry*]({{< ref "./spacesregistry" >}}) knows the path to a users private space in the `/users` namespace and the gateway can forward the requests to the responsible storage provider.
|
||||
|
||||
{{< hint warning >}}
|
||||
*@jfd: Why don't we use `/home/<userlayout>` instead of `/users/<userlayout>`. Then the paths would be consistent with most unix systems.
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
title: "Releasing"
|
||||
date: 2020-05-22T00:00:00+00:00
|
||||
weight: 60
|
||||
geekdocRepo: https://github.com/owncloud/ocis
|
||||
geekdocEditPath: edit/master/docs/extensions/storage
|
||||
geekdocFilePath: releasing.md
|
||||
---
|
||||
|
||||
{{< toc >}}
|
||||
|
||||
To release a new version of the storage submodule, you have to follow a few simple steps.
|
||||
|
||||
## Preparation
|
||||
|
||||
1. Before releasing, make sure that reva has been [updated to the desired version]({{< ref "updating" >}})
|
||||
|
||||
## Release
|
||||
1. Check out master
|
||||
{{< highlight txt >}}
|
||||
git checkout master
|
||||
git pull origin master
|
||||
{{< / highlight >}}
|
||||
2. Create a new tag (preferably signed) and replace the version number accordingly. Prefix the tag with the submodule `storage/v`.
|
||||
{{< highlight txt >}}
|
||||
git tag -s storage/vx.x.x -m "release vx.x.x"
|
||||
git push origin storage/vx.x.x
|
||||
{{< / highlight >}}
|
||||
5. Wait for CI and check that the GitHub release was published.
|
||||
|
||||
Congratulations, you just released the storage submodule!
|
||||
28
docs/extensions/storage/spaces.md
Normal file
28
docs/extensions/storage/spaces.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "Spaces"
|
||||
date: 2018-05-02T00:00:00+00:00
|
||||
weight: 3
|
||||
geekdocRepo: https://github.com/owncloud/ocis
|
||||
geekdocEditPath: edit/master/docs/extensions/storage
|
||||
geekdocFilePath: spaces.md
|
||||
---
|
||||
|
||||
{{< hint warning >}}
|
||||
|
||||
The current implementation in oCIS might not yet fully reflect this concept. Feel free to add links to ADRs, PRs and Issues in short warning boxes like this.
|
||||
|
||||
{{< /hint >}}
|
||||
|
||||
## Storage Spaces
|
||||
A storage *space* is a logical concept. It organizes a set of [*resources*]({{< ref "#resources" >}}) in a hierarchical tree. It has a single *owner* (*user* or *group*),
|
||||
a *quota*, *permissions* and is identified by a `storage space id`.
|
||||
|
||||
{{< svg src="extensions/storage/static/storagespace.drawio.svg" >}}
|
||||
|
||||
Examples would be every user's personal storage *space*, project storage *spaces* or group storage *spaces*. While they all serve different purposes and may or may not have workflows like anti virus scanning enabled, we need a way to identify and manage these subtrees in a generic way. By creating a dedicated concept for them this becomes easier and literally makes the codebase cleaner. A storage [*Spaces Registry*]({{< ref "./spacesregistry.md" >}}) then allows listing the capabilities of storage *spaces*, e.g. free space, quota, owner, syncable, root etag, upload workflow steps, ...
|
||||
|
||||
Finally, a logical `storage space id` is not tied to a specific [*spaces provider*]({{< ref "./spacesprovider.md" >}}). If the [*storage driver*]({{< ref "./storagedrivers.md" >}}) supports it, we can import existing files including their `file id`, which makes it possible to move storage *spaces* between [*spaces providers*]({{< ref "./spacesprovider.md" >}}) to implement storage classes, e.g. with or without archival, workflows, on SSDs or HDDs.
|
||||
|
||||
## Shares
|
||||
*To be clarified: we are aware that [*storage spaces*]({{< ref "#storage-spaces" >}}) may be too 'heavywheight' for ad hoc sharing with groups. That being said, there is no technical reason why group shares should not be treated like storage [*spaces*]({{< ref "#storage-spaces" >}}) that users can provision themselves. They would share the quota with the users home or personal storage [*space*]({{< ref "#storage-spaces" >}}) and the share initiator would be the sole owner. Technically, the mechanism of treating a share like a new storage [*space*]({{< ref "#storage-spaces" >}}) would be the same. This obviously also extends to user shares and even file individual shares that would be wrapped in a virtual collection. It would also become possible to share collections of arbitrary files in a single storage space, e.g. the ten best pictures from a large album.*
|
||||
|
||||
@@ -1,12 +1,25 @@
|
||||
---
|
||||
title: "Architecture"
|
||||
title: "Spaces Provider"
|
||||
date: 2018-05-02T00:00:00+00:00
|
||||
weight: 10
|
||||
weight: 6
|
||||
geekdocRepo: https://github.com/owncloud/ocis
|
||||
geekdocEditPath: edit/master/docs/extensions/storage
|
||||
geekdocFilePath: architecture.md
|
||||
geekdocFilePath: spacesprovider.md
|
||||
---
|
||||
|
||||
{{< hint warning >}}
|
||||
|
||||
The current implementation in oCIS might not yet fully reflect this concept. Feel free to add links to ADRs, PRs and Issues in short warning boxes like this.
|
||||
|
||||
{{< /hint >}}
|
||||
|
||||
## Spaces Provider
|
||||
A *storage provider* manages [*resources*]({{< ref "#resources" >}}) identified by a [*reference*]({{< ref "#references" >}})
|
||||
by accessing a [*storage system*]({{< ref "#storage-systems" >}}) with a [*storage driver*]({{< ref "./storagedrivers.md" >}}).
|
||||
|
||||
{{< svg src="extensions/storage/static/spacesprovider.drawio.svg" >}}
|
||||
|
||||
|
||||
## Frontend
|
||||
|
||||
The oCIS frontend service starts all services that handle incoming HTTP requests:
|
||||
@@ -38,16 +51,17 @@ The ocdav service not only handles all WebDAV requests under `(remote.php/)(web)
|
||||
| `(remote.php/)webdav/users` | ocdav | storageprovider | `/users` | | |
|
||||
| `(remote.php/)dav/files/<username>` | ocdav | storageprovider | `/users/<userlayout>` | | |
|
||||
| *Spaces concept also needs a new endpoint:* |||||
|
||||
| `(remote.php/)dav/spaces/<spaceid>/<relative_path>` | ocdav | storageregistry & storageprovider | bypass path based namespace and directly talk to the responsible storage provider using a relative path | [spaces concept](https://github.com/owncloud/ocis/pull/1827) needs to point to [*storage spaces*]({{< ref "./terminology.md#storage-spaces" >}}) or a global endpoint | allow accessing spaces, listing is done by the graph api |
|
||||
| `(remote.php/)dav/spaces/<spaceid>/<relative_path>` | ocdav | storageregistry & storageprovider | bypass path based namespace and directly talk to the responsible storage provider using a relative path | [spaces concept](https://github.com/owncloud/ocis/pull/1827) needs to point to storage [*spaces*]({{< ref "./spaces.md" >}}) | allow accessing spaces, listing is done by the graph api |
|
||||
|
||||
|
||||
The correct endpoint for a users home [*storage space*]({{< ref "./terminology.md#storage-spaces" >}}) in oc10 is `remote.php/dav/files/<username>`. In oc10 All requests at this endpoint use a path based reference that is relative to the users home. In oCIS this can be configured and defaults to `/home` as well. Other API endpoints like ocs and the web UI still expect this to be the users home.
|
||||
The correct endpoint for a users home storage [*space*]({{< ref "./spaces.md" >}}) in oc10 is `remote.php/dav/files/<username>`. In oc10 all requests at this endpoint use a path based reference that is relative to the users home. In oCIS this can be configured and defaults to `/home` as well. Other API endpoints like ocs and the web UI still expect this to be the users home.
|
||||
|
||||
In oc10 we originally had `remote.php/webdav` which would render the current users home [*storage space*]({{< ref "./terminology.md#storage-spaces" >}}). The early versions (pre OC7) would jail all received shares into a `remote.php/webdav/shares` subfolder. The semantics for syncing such a folder are [not trivially predictable](https://github.com/owncloud/core/issues/5349), which is why we made shares [freely mountable](https://github.com/owncloud/core/pull/8026) anywhere in the users home.
|
||||
|
||||
The current reva implementation jails shares into a `remote.php/webdav/Shares` folder for performance reasons. Obviously, this brings back the [special semantics for syncing](https://github.com/owncloud/product/issues/7). In the future we will follow [a different solution](https://github.com/owncloud/product/issues/302) and jail the received shares into a dedicated `/shares` space, on the same level as `/home` and `/spaces`. We will add a dedicated [API to list all *storage spaces*](https://github.com/owncloud/ocis/pull/1827) a user has access to and where they are mounted in the users *namespace*.
|
||||
|
||||
{{< hint warning >}}
|
||||
TODO rewrite this hint with `/dav/spaces`
|
||||
Existing folder sync pairs in legacy clients will break when moving the user home down in the path hierarchy like CernBox did.
|
||||
For legacy clients the `remote.php/webdav` endpoint will no longer list the users home directly, but instead present the different types of storage spaces:
|
||||
- `remote.php/webdav/home`: the users home is pushed down into a new `home` [*storage space*]({{< ref "./terminology.md#storage-spaces" >}})
|
||||
@@ -55,11 +69,6 @@ For legacy clients the `remote.php/webdav` endpoint will no longer list the user
|
||||
- `remote.php/webdav/spaces`: other [*storage spaces*]({{< ref "./terminology.md#storage-spaces" >}}) the user has access to, e.g. group or project drives
|
||||
{{< /hint >}}
|
||||
|
||||
{{< hint warning >}}
|
||||
An alternative would be to introduce a new `remote.php/dav/spaces` or `remote.php/dav/global` endpoint. However, `remote.php/dav` properly follows the WebDAV RFCs strictly. To ensure that all resources under that [*namespace*]({{< ref "./terminology.md#namespaces" >}}) are scoped to the user the URL would have to include the principal like `remote.php/dav/spaces/<username>`, a precondition for e.g. WebDAV [RFC5397](https://tools.ietf.org/html/rfc5397). For a history lesson start at [Replace WebDAV with REST
|
||||
owncloud/core#12504](https://github.com/owncloud/core/issues/12504#issuecomment-65218491) which spawned [Add extra layer in DAV to accomodate for other services like versions, trashbin, etc owncloud/core#12543](https://github.com/owncloud/core/issues/12543)
|
||||
{{< /hint >}}
|
||||
|
||||
|
||||
### Sharing
|
||||
|
||||
@@ -92,12 +101,12 @@ The user and public share provider implementations identify the file using the [
|
||||
The OCM API takes an id based reference on the CS3 api, even if the OCM HTTP endpoint takes a path argument. *@jfd: Why? Does it not need the owner? It only stores the owner of the share, which is always the currently looged in user, when creating a share. Afterwards only the owner can update a share ... so collaborative management of shares is not possible. At least for OCM shares.*
|
||||
{{< /hint >}}
|
||||
|
||||
### User and Group provisioning
|
||||
|
||||
In oc10 users are identified by a username, which cannot change, because it is used as a foreign key in several tables. For oCIS we are internally identifying users by a UUID, while using the username in the WebDAV and OCS APIs for backwards compatability. To distinguish this in the URLs we are using `<username>` instead of `<userid>`. You may have encountered `<userlayout>`, which refers to a template that can be configured to build several path segments by filling in user properties, e.g. the first character of the username (`{{substr 0 1 .Username}}/{{.Username}}`), the identity provider (`{{.Id.Idp}}/{{.Username}}`) or the email (`{{.Mail}}`)
|
||||
## REVA Storage Registry
|
||||
|
||||
{{< hint warning >}}
|
||||
Make no mistake, the [OCS Provisioning API](https://doc.owncloud.com/server/developer_manual/core/apis/provisioning-api.html) uses `userid` while it actually is the username, because it is what you use to login.
|
||||
{{< /hint >}}
|
||||
The reva *storage registry* manages the [*CS3 global namespace*]({{< ref "./namespaces.md#cs3-global-namespaces" >}}):
|
||||
It is used by the reva *gateway*
|
||||
to look up `address` and `port` of the [*storage provider*]({{< ref "#storage-providers" >}})
|
||||
that should handle a [*reference*]({{< ref "#references" >}}).
|
||||
|
||||
We are currently working on adding [user management through the CS3 API](https://github.com/owncloud/ocis/pull/1930) to handle user and group provisioning (and deprovisioning).
|
||||
{{< svg src="extensions/storage/static/storageregistry.drawio.svg" >}}
|
||||
21
docs/extensions/storage/spacesregistry.md
Normal file
21
docs/extensions/storage/spacesregistry.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "Spaces Registry"
|
||||
date: 2018-05-02T00:00:00+00:00
|
||||
weight: 9
|
||||
geekdocRepo: https://github.com/owncloud/ocis
|
||||
geekdocEditPath: edit/master/docs/extensions/storage
|
||||
geekdocFilePath: spacesregistry.md
|
||||
---
|
||||
|
||||
{{< hint warning >}}
|
||||
|
||||
The current implementation in oCIS might not yet fully reflect this concept. Feel free to add links to ADRs, PRs and Issues in short warning boxes like this.
|
||||
|
||||
{{< /hint >}}
|
||||
|
||||
## Storage Space Registries
|
||||
|
||||
A storage *spaces registry* manages the [*namespace*]({{< ref "./namespaces.md" >}}) for a *user*: it is used by *clients* to look up storage spaces a user has access to, the `/dav/spaces` endpoint to access it via WabDAV, and where the client should mount it in the users personal namespace.
|
||||
|
||||
{{< svg src="extensions/storage/static/spacesregistry.drawio.svg" >}}
|
||||
|
||||
352
docs/extensions/storage/static/spacesprovider.drawio.svg
Normal file
352
docs/extensions/storage/static/spacesprovider.drawio.svg
Normal file
@@ -0,0 +1,352 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1161px" height="342px" viewBox="-0.5 -0.5 1161 342" content="<mxfile pages="4"><diagram id="ivlTgcF_GoFNmAPzzRq-" name="overview">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</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<rect x="180" y="1" width="800" height="230" fill="none" stroke="#666666" stroke-width="2" stroke-dasharray="6 6" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 798px; height: 1px; padding-top: 228px; margin-left: 182px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #666666; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
oCIS spaces provider
|
||||
<br/>
|
||||
[Software System]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="182" y="228" fill="#666666" font-family="Helvetica" font-size="12px">
|
||||
oCIS spaces provider...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="800" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 801px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
reva storage provider
|
||||
</b>
|
||||
<div>
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
hosts multiple storage spaces using a storage driver
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="880" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
reva storage provider...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="600" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 601px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
reva gateway
|
||||
</b>
|
||||
<div>
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
API facade for internal reva services
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="680" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
reva gateway...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="1000" y="71" width="160" height="110" rx="11" ry="11" fill="#999999" stroke="#8a8a8a" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 1001px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Storage System
|
||||
</b>
|
||||
<div>
|
||||
[Software System]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
provides persistent storage
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="1080" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Storage System...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 960 126 L 991.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 997.76 126 L 989.76 130 L 991.76 126 L 989.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 980px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Reads from and writes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[POSIX, S3]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="980" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Reads from and writes to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="400" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 401px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
reva frontend
|
||||
</b>
|
||||
<div>
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
handles protocol translation
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="480" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
reva frontend...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="200" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 201px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
oCIS proxy
|
||||
</b>
|
||||
<div>
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
Routes requests to oc10 or ecis
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="280" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
oCIS proxy...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 360 126 L 391.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 397.76 126 L 389.76 130 L 391.76 126 L 389.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 380px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Mints an internal JWT
|
||||
<br/>
|
||||
and torwards requests to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[WebDAV, OCS, OCM, tus]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="380" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Mints an internal JWT...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="71" width="160" height="110" rx="11" ry="11" fill="#438dd5" stroke="#3c7fc0" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 1px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Client
|
||||
</b>
|
||||
<div>
|
||||
[Container: C++, Kotlin,
|
||||
<br/>
|
||||
Swift or Vue]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
A desktop, mobile or web Client
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="80" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Client...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 160 126 L 191.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 197.76 126 L 189.76 130 L 191.76 126 L 189.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 180px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Reads from and writes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[WebDAV, libregraph, CS3]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="180" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Reads from and writes to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 560 126 L 591.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 597.76 126 L 589.76 130 L 591.76 126 L 589.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 580px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Reads from and writes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[CS3, tus]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="580" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Reads from and writes to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 760 126 L 791.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 797.76 126 L 789.76 130 L 791.76 126 L 789.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 780px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Forwards to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[CS3, storage registry]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="780" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Forwards to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="241" width="960" height="100" fill="none" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 952px; height: 1px; padding-top: 231px; margin-left: 5px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 110px; overflow: hidden; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<h1>
|
||||
C4 Component diagram for an oCIS spaces provider
|
||||
</h1>
|
||||
<p>
|
||||
An oCIS spaces provider manages resources in storage spaces by persisting them with a specific storage driver in a storage system.
|
||||
</p>
|
||||
<p>
|
||||
Date: 2021-07-22T12:40
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="5" y="243" fill="#000000" font-family="Helvetica" font-size="12px">
|
||||
C4 Component diagram for an oCIS spaces provider...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Viewer does not support full SVG 1.1
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 26 KiB |
@@ -1,136 +1,82 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="632px" height="901px" viewBox="-0.5 -0.5 632 901" content="<mxfile pages="4"><diagram id="ivlTgcF_GoFNmAPzzRq-" name="overview">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</diagram></mxfile>">
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1361px" height="342px" viewBox="-0.5 -0.5 1361 342" content="<mxfile pages="4"><diagram id="ivlTgcF_GoFNmAPzzRq-" name="overview">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</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<rect x="10" y="200" width="620" height="390" fill="none" stroke="#666666" stroke-width="2" stroke-dasharray="6 6" pointer-events="all"/>
|
||||
<rect x="180" y="1" width="1000" height="230" fill="none" stroke="#666666" stroke-width="2" stroke-dasharray="6 6" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 618px; height: 1px; padding-top: 587px; margin-left: 12px;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 998px; height: 1px; padding-top: 228px; margin-left: 182px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #666666; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
oCIS System
|
||||
oCIS spaces registry
|
||||
<br/>
|
||||
[Software System]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="12" y="587" fill="#666666" font-family="Helvetica" font-size="12px">
|
||||
oCIS System...
|
||||
<text x="182" y="228" fill="#666666" font-family="Helvetica" font-size="12px">
|
||||
oCIS spaces registry...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<ellipse cx="175" cy="23.33" rx="23.333333333333332" ry="23.333333333333332" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<path d="M 120 60.67 C 120 47.78 130.45 37.33 143.33 37.33 L 206.67 37.33 C 212.86 37.33 218.79 39.79 223.17 44.17 C 227.54 48.54 230 54.48 230 60.67 L 230 116.67 C 230 129.55 219.55 140 206.67 140 L 143.33 140 C 130.45 140 120 129.55 120 116.67 Z" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<ellipse cx="175" cy="23.33" rx="23.333333333333332" ry="23.333333333333332" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<rect x="800" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 89px; margin-left: 175px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: nowrap; ">
|
||||
<b>
|
||||
Einstein
|
||||
</b>
|
||||
<div>
|
||||
[Person]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
End user
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="175" y="92" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Einstein...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="60" y="220" width="230" height="110" rx="11" ry="11" fill="#438dd5" stroke="#3c7fc0" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 228px; height: 1px; padding-top: 275px; margin-left: 61px;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 801px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Client
|
||||
reva storage registry
|
||||
</b>
|
||||
<div>
|
||||
[Container: C++, Kotlin, Swift or Vue]
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
A desktop, mobile or web Client
|
||||
manages and caches storage space metadata
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="175" y="279" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Client...
|
||||
<text x="880" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
reva storage registry...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="440" y="430" width="160" height="110" rx="11" ry="11" fill="#438dd5" stroke="#3c7fc0" pointer-events="all"/>
|
||||
<rect x="600" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 485px; margin-left: 441px;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 601px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Storage Space Registry
|
||||
reva gateway
|
||||
</b>
|
||||
<div>
|
||||
[Container: golang, HTTP, libregraph]
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
Manages spaces for users
|
||||
API facade for internal reva services
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="520" y="489" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Storage Space Registry...
|
||||
<text x="680" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
reva gateway...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="40" y="430" width="160" height="110" rx="11" ry="11" fill="#438dd5" stroke="#3c7fc0" pointer-events="all"/>
|
||||
<rect x="1200" y="71" width="160" height="110" rx="11" ry="11" fill="#999999" stroke="#8a8a8a" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 485px; margin-left: 41px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Storage Provider
|
||||
</b>
|
||||
<div>
|
||||
[Container: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
Persists storage spaces using reva
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="120" y="489" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Storage Provider...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="40" y="670" width="160" height="110" rx="11" ry="11" fill="#999999" stroke="#8a8a8a" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 725px; margin-left: 41px;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 1201px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
@@ -147,45 +93,285 @@
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="120" y="729" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
<text x="1280" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Storage System...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<ellipse cx="467" cy="23.33" rx="23.333333333333332" ry="23.333333333333332" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<path d="M 412 60.67 C 412 47.78 422.45 37.33 435.33 37.33 L 498.67 37.33 C 504.86 37.33 510.79 39.79 515.17 44.17 C 519.54 48.54 522 54.48 522 60.67 L 522 116.67 C 522 129.55 511.55 140 498.67 140 L 435.33 140 C 422.45 140 412 129.55 412 116.67 Z" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<ellipse cx="467" cy="23.33" rx="23.333333333333332" ry="23.333333333333332" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<path d="M 960 126 L 991.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 997.76 126 L 989.76 130 L 991.76 126 L 989.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 89px; margin-left: 467px;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 980px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: nowrap; ">
|
||||
<b>
|
||||
Moss
|
||||
</b>
|
||||
<div>
|
||||
[Person]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
Administrator
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Provisions and manages spaces in
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[CS3]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="467" y="92" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Moss...
|
||||
<text x="980" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Provisions and manages spaces...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 120 540 L 120 661.76" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 120 667.76 L 116 659.76 L 120 661.76 L 124 659.76 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<rect x="400" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 640px; margin-left: 120px;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 401px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
reva frontend
|
||||
</b>
|
||||
<div>
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
handles protocol translation
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="480" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
reva frontend...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="200" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 201px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
oCIS proxy
|
||||
</b>
|
||||
<div>
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
Routes requests to oc10 or ecis
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="280" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
oCIS proxy...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 360 126 L 391.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 397.76 126 L 389.76 130 L 391.76 126 L 389.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 380px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Mints an internal JWT
|
||||
<br/>
|
||||
and torwards requests to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[libregraph]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="380" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Mints an internal JWT...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="71" width="160" height="110" rx="11" ry="11" fill="#438dd5" stroke="#3c7fc0" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 1px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Client
|
||||
</b>
|
||||
<div>
|
||||
[Container: C++, Kotlin,
|
||||
<br/>
|
||||
Swift or Vue]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
A desktop, mobile or web Client
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="80" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Client...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 160 126 L 191.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 197.76 126 L 189.76 130 L 191.76 126 L 189.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 180px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
polls or gets notified about changes in
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[libregraph]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="180" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
polls or gets notified about c...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 560 126 L 591.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 597.76 126 L 589.76 130 L 591.76 126 L 589.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 580px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Reads from and writes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[CS3, tus]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="580" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Reads from and writes to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 760 126 L 791.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 797.76 126 L 789.76 130 L 791.76 126 L 789.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 780px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Lists spaces using
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[CS3]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="780" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Lists spaces using...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="241" width="960" height="100" fill="none" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 952px; height: 1px; padding-top: 231px; margin-left: 5px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 110px; overflow: hidden; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<h1>
|
||||
C4 Component diagram for an oCIS spaces registry
|
||||
</h1>
|
||||
<p>
|
||||
An oCIS spaces provider manages resources in storage spaces by persisting them with a specific storage driver in a storage system.
|
||||
</p>
|
||||
<p>
|
||||
Date: 2021-07-22T12:40
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="5" y="243" fill="#000000" font-family="Helvetica" font-size="12px">
|
||||
C4 Component diagram for an oCIS spaces registry...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="1000" y="71" width="160" height="110" rx="11" ry="11" fill="#85bbf0" stroke="#78a8d8" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 126px; margin-left: 1001px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
reva storage provider
|
||||
</b>
|
||||
<div>
|
||||
[Component: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
hosts multiple storage spaces using a storage driver
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="1080" y="130" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
reva storage provider...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 1160 126 L 1191.76 126" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 1197.76 126 L 1189.76 130 L 1191.76 126 L 1189.76 122 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 1180px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
@@ -202,226 +388,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="120" y="643" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
<text x="1180" y="44" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Reads from and writes to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 117.5 330 L 118.98 421.77" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 119.08 427.76 L 114.95 419.83 L 118.98 421.77 L 122.95 419.7 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 380px; margin-left: 118px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Reads from and writes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[WebDAV, libregraph, CS3, tus]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="118" y="383" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Reads from and writes to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 232.5 330 L 432.75 437.96" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 438.03 440.81 L 429.09 440.53 L 432.75 437.96 L 432.89 433.49 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 386px; margin-left: 336px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Manages the users Storage Spaces in
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[libregraph]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="336" y="389" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Manages the users Storage Spac...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 175 140 L 175 211.76" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 175 217.76 L 171 209.76 L 175 211.76 L 179 209.76 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 180px; margin-left: 175px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Manages resources with
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[Web UI or native clients]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="175" y="183" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Manages resources with...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 200 485 L 431.76 485" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 437.76 485 L 429.76 489 L 431.76 485 L 429.76 481 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 485px; margin-left: 320px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Registers itself at and
|
||||
<br/>
|
||||
sends space root etag changes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[CS3, libregraph?, PUSH]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="320" y="488" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Registers itself at and...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 471.31 140 L 474.49 191.78" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 474.86 197.77 L 470.38 190.03 L 474.49 191.78 L 478.36 189.54 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 170px; margin-left: 473px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Manages organizational Storage Spaces in
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[WebDAV, libregraph, CS3, CLI]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="473" y="173" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Manages organizational Storage...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="395" y="670" width="160" height="110" rx="11" ry="11" fill="#999999" stroke="#8a8a8a" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 725px; margin-left: 396px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Identity Management System
|
||||
</b>
|
||||
<div>
|
||||
[Software System]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
provides users and groups
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="475" y="729" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Identity Management System...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 475 590 L 475 661.76" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 475 667.76 L 471 659.76 L 475 661.76 L 479 659.76 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 640px; margin-left: 475px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Authenticates users and searches recipients with
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[OpenID Connect, LDAP, REST]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="475" y="643" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Authenticates users and search...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="790" width="620" height="110" fill="none" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 612px; height: 1px; padding-top: 780px; margin-left: 5px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 120px; overflow: hidden; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<h1>
|
||||
C4 Container diagram for the oCIS System
|
||||
</h1>
|
||||
<p>
|
||||
As a platform, the oCIS system may not only includes web, mobile and desktop clients but also the underlying storage system or an identity management system
|
||||
</p>
|
||||
<p>
|
||||
Date: 2021-07-22T16:43
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="5" y="792" fill="#000000" font-family="Helvetica" font-size="12px">
|
||||
C4 Container diagram for the oCIS System...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 30 KiB |
434
docs/extensions/storage/static/storage.drawio.svg
Normal file
434
docs/extensions/storage/static/storage.drawio.svg
Normal file
@@ -0,0 +1,434 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="632px" height="901px" viewBox="-0.5 -0.5 632 901" content="<mxfile pages="4"><diagram id="ivlTgcF_GoFNmAPzzRq-" name="overview">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</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<rect x="10" y="200" width="620" height="390" fill="none" stroke="#666666" stroke-width="2" stroke-dasharray="6 6" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-start; width: 618px; height: 1px; padding-top: 587px; margin-left: 12px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #666666; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
oCIS System
|
||||
<br/>
|
||||
[Software System]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="12" y="587" fill="#666666" font-family="Helvetica" font-size="12px">
|
||||
oCIS System...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<ellipse cx="175" cy="23.33" rx="23.333333333333332" ry="23.333333333333332" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<path d="M 120 60.67 C 120 47.78 130.45 37.33 143.33 37.33 L 206.67 37.33 C 212.86 37.33 218.79 39.79 223.17 44.17 C 227.54 48.54 230 54.48 230 60.67 L 230 116.67 C 230 129.55 219.55 140 206.67 140 L 143.33 140 C 130.45 140 120 129.55 120 116.67 Z" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<ellipse cx="175" cy="23.33" rx="23.333333333333332" ry="23.333333333333332" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 89px; margin-left: 175px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: nowrap; ">
|
||||
<b>
|
||||
Einstein
|
||||
</b>
|
||||
<div>
|
||||
[Person]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
End user
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="175" y="92" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Einstein...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="60" y="220" width="230" height="110" rx="11" ry="11" fill="#438dd5" stroke="#3c7fc0" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 228px; height: 1px; padding-top: 275px; margin-left: 61px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Client
|
||||
</b>
|
||||
<div>
|
||||
[Container: C++, Kotlin, Swift or Vue]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
A desktop, mobile or web Client
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="175" y="279" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Client...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="440" y="430" width="160" height="110" rx="11" ry="11" fill="#438dd5" stroke="#3c7fc0" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 485px; margin-left: 441px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Storage Space Registry
|
||||
</b>
|
||||
<div>
|
||||
[Container: golang, HTTP, libregraph]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
Manages spaces for users
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="520" y="489" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Storage Space Registry...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="40" y="430" width="160" height="110" rx="11" ry="11" fill="#438dd5" stroke="#3c7fc0" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 485px; margin-left: 41px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Storage Space Provider
|
||||
</b>
|
||||
<div>
|
||||
[Container: golang]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
Persists storage spaces using reva
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="120" y="489" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Storage Space Provider...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="40" y="670" width="160" height="110" rx="11" ry="11" fill="#999999" stroke="#8a8a8a" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 725px; margin-left: 41px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Storage System
|
||||
</b>
|
||||
<div>
|
||||
[Software System]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
provides persistent storage
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="120" y="729" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Storage System...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<ellipse cx="467" cy="23.33" rx="23.333333333333332" ry="23.333333333333332" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<path d="M 412 60.67 C 412 47.78 422.45 37.33 435.33 37.33 L 498.67 37.33 C 504.86 37.33 510.79 39.79 515.17 44.17 C 519.54 48.54 522 54.48 522 60.67 L 522 116.67 C 522 129.55 511.55 140 498.67 140 L 435.33 140 C 422.45 140 412 129.55 412 116.67 Z" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<ellipse cx="467" cy="23.33" rx="23.333333333333332" ry="23.333333333333332" fill="#08427b" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 89px; margin-left: 467px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: nowrap; ">
|
||||
<b>
|
||||
Moss
|
||||
</b>
|
||||
<div>
|
||||
[Person]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
Administrator
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="467" y="92" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Moss...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 120 540 L 120 661.76" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 120 667.76 L 116 659.76 L 120 661.76 L 124 659.76 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 640px; margin-left: 120px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Reads from and writes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[POSIX, S3]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="120" y="643" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Reads from and writes to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 117.5 330 L 118.98 421.77" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 119.08 427.76 L 114.95 419.83 L 118.98 421.77 L 122.95 419.7 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 380px; margin-left: 118px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Reads from and writes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[WebDAV, libregraph, CS3, tus]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="118" y="383" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Reads from and writes to...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 232.5 330 L 432.75 437.96" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 438.03 440.81 L 429.09 440.53 L 432.75 437.96 L 432.89 433.49 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 386px; margin-left: 336px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Manages the users Storage Spaces in
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[libregraph]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="336" y="389" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Manages the users Storage Spac...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 175 140 L 175 211.76" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 175 217.76 L 171 209.76 L 175 211.76 L 179 209.76 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 180px; margin-left: 175px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Manages resources with
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[Web UI or native clients]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="175" y="183" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Manages resources with...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 200 485 L 431.76 485" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 437.76 485 L 429.76 489 L 431.76 485 L 429.76 481 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 485px; margin-left: 320px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Registers itself at and
|
||||
<br/>
|
||||
sends space root etag changes to
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[CS3, libregraph?, PUSH]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="320" y="488" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Registers itself at and...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 471.31 140 L 474.49 191.78" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 474.86 197.77 L 470.38 190.03 L 474.49 191.78 L 478.36 189.54 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 170px; margin-left: 473px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Manages organizational Storage Spaces in
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[WebDAV, libregraph, CS3, CLI]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="473" y="173" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Manages organizational Storage...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="395" y="670" width="160" height="110" rx="11" ry="11" fill="#999999" stroke="#8a8a8a" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 725px; margin-left: 396px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<b>
|
||||
Identity Management System
|
||||
</b>
|
||||
<div>
|
||||
[Software System]
|
||||
</div>
|
||||
<br/>
|
||||
<div>
|
||||
provides users and groups
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="475" y="729" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Identity Management System...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 475 590 L 475 661.76" fill="none" stroke="#707070" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke"/>
|
||||
<path d="M 475 667.76 L 471 659.76 L 475 661.76 L 479 659.76 Z" fill="#707070" stroke="#707070" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 640px; margin-left: 475px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #707070; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">
|
||||
<div style="text-align: left">
|
||||
<div style="text-align: center">
|
||||
<b>
|
||||
Authenticates users and searches recipients with
|
||||
</b>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
[OpenID Connect, LDAP, REST]
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="475" y="643" fill="#707070" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
Authenticates users and search...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="0" y="790" width="620" height="110" fill="none" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 612px; height: 1px; padding-top: 780px; margin-left: 5px;">
|
||||
<div style="box-sizing: border-box; font-size: 0; text-align: left; max-height: 120px; overflow: hidden; ">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">
|
||||
<h1>
|
||||
C4 Container diagram for the oCIS System
|
||||
</h1>
|
||||
<p>
|
||||
As a platform, the oCIS system may not only includes web, mobile and desktop clients but also the underlying storage system or an identity management system
|
||||
</p>
|
||||
<p>
|
||||
Date: 2021-07-22T16:43
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="5" y="792" fill="#000000" font-family="Helvetica" font-size="12px">
|
||||
C4 Container diagram for the oCIS System...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Viewer does not support full SVG 1.1
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 33 KiB |
@@ -1,15 +1,18 @@
|
||||
---
|
||||
title: "Storages"
|
||||
title: "Storage drivers"
|
||||
date: 2020-04-27T18:46:00+01:00
|
||||
weight: 37
|
||||
weight: 12
|
||||
geekdocRepo: https://github.com/owncloud/ocis
|
||||
geekdocEditPath: edit/master/docs/extensions/storage
|
||||
geekdocFilePath: storages.md
|
||||
---
|
||||
|
||||
## Storage commands
|
||||
A *storage driver* implements access to a [*storage system*]({{< ref "#storage-systems" >}}):
|
||||
|
||||
`storage` has multiple storage provider commands to preconfigure different default configurations for the reva *storage provider* service. While you could rerun `storage storage-oc` multiple times with different flags to get multiple instances we are giving the different commands the necessary default configuration to allow the `ocis` binary to simply start them and not deal with configuration.
|
||||
It maps the *path* and *id* based CS3 *references* to an appropriate [*storage system*]({{< ref "#storage-systems" >}}) specific reference, e.g.:
|
||||
- eos file ids
|
||||
- posix inodes or paths
|
||||
- deconstructed filesystem nodes
|
||||
|
||||
## Storage providers
|
||||
|
||||
@@ -25,7 +28,6 @@ A lot of different storage technologies exist, ranging from general purpose file
|
||||
|
||||
Unfortunately, no POSIX filesystem natively supports all storage aspects that ownCloud 10 requires:
|
||||
|
||||
|
||||
### A hierarchical file tree
|
||||
An important aspect of a filesystem is organizing files and directories in a file hierarchy, or tree. It allows you to create, move and delete nodes. Beside the name a node also has well known metadata like size and mtime that are persisted in the tree as well.
|
||||
|
||||
@@ -19,7 +19,6 @@ A *resource* is the basic building block that oCIS manages. It can be of [differ
|
||||
- a [*reference*]({{< ref "#references" >}}) which can point to a resource in another [*storage provider*]({{< ref "#storage-providers" >}})
|
||||
|
||||
### References
|
||||
|
||||
A *reference* identifies a [*resource*]({{< ref "#resources" >}}). A [*CS3 reference*](https://cs3org.github.io/cs3apis/#cs3.storage.provider.v1beta1.Reference) can carry a *path* and a [CS3 *resource id*](https://cs3org.github.io/cs3apis/#cs3.storage.provider.v1beta1.ResourceId). The references come in two flavors: absolute and combined.
|
||||
Absolute references have either the *path* or the *resource id* set:
|
||||
- An absolute *path* MUST start with a `/`. The *resource id* MUST be empty.
|
||||
@@ -28,59 +27,12 @@ Combined references have both, *path* and *resource id* set:
|
||||
- the *resource id* identifies the root [*resource*]({{< ref "#resources" >}})
|
||||
- the *path* is relative to that root. It MUST start with `.`
|
||||
|
||||
|
||||
### Storage Spaces
|
||||
A *storage space* organizes a set of [*resources*]({{< ref "#resources" >}}) in a hierarchical tree. It has a single *owner* (*user* or *group*),
|
||||
a *quota*, *permissions* and is identified by a `storage space id`.
|
||||
|
||||
{{< svg src="extensions/storage/static/storagespace.drawio.svg" >}}
|
||||
|
||||
Examples would be every user's personal storage space, project storage spaces or group storage spaces. While they all serve different purposes and may or may not have workflows like anti virus scanning enabled, we need a way to identify and manage these subtrees in a generic way. By creating a dedicated concept for them this becomes easier and literally makes the codebase cleaner. A [*storage space registry*]({{< ref "#storage-space-registries" >}}) then allows listing the capabilities of [*storage spaces*]({{< ref "#storage-spaces" >}}), e.g. free space, quota, owner, syncable, root etag, upload workflow steps, ...
|
||||
|
||||
Finally, a logical `storage space id` is not tied to a specific [*storage provider*]({{< ref "#storage-providers" >}}). If the [*storage driver*]({{< ref "#storage-drivers" >}}) supports it, we can import existing files including their `file id`, which makes it possible to move [*storage spaces*]({{< ref "#storage-spaces" >}}) between [*storage providers*]({{< ref "#storage-providers" >}}) to implement storage classes, e.g. with or without archival, workflows, on SSDs or HDDs.
|
||||
|
||||
### Shares
|
||||
*To be clarified: we are aware that [*storage spaces*]({{< ref "#storage-spaces" >}}) may be too 'heavywheight' for ad hoc sharing with groups. That being said, there is no technical reason why group shares should not be treated like [*storage spaces*]({{< ref "#storage-spaces" >}}) that users can provision themselves. They would share the quota with the users home [*storage space*]({{< ref "#storage-spaces" >}}) and the share initiator would be the sole owner. Technically, the mechanism of treating a share like a new [*storage space*]({{< ref "#storage-spaces" >}}) would be the same. This obviously also extends to user shares and even file indvidual shares that would be wrapped in a virtual collection. It would also become possible to share collections of arbitrary files in a single storage space, e.g. the ten best pictures from a large album.*
|
||||
|
||||
|
||||
### Storage Space Registries
|
||||
|
||||
A *storage space registry* manages the [*namespace*]({{< ref "./namespaces.md" >}}) for a *user*: it is used by *clients* to look up storage spaces a user has access to, the `/dav/spaces` endpoint to access it via WabDAV, and where the client should mount it in the users personal namespace.
|
||||
|
||||
{{< svg src="extensions/storage/static/spacesregistry.drawio.svg" >}}
|
||||
|
||||
|
||||
## Technical concepts
|
||||
|
||||
### Storage Drivers
|
||||
|
||||
A *storage driver* implements access to a [*storage system*]({{< ref "#storage-systems" >}}):
|
||||
|
||||
It maps the *path* and *id* based CS3 *references* to an appropriate [*storage system*]({{< ref "#storage-systems" >}}) specific reference, e.g.:
|
||||
- eos file ids
|
||||
- posix inodes or paths
|
||||
- deconstructed filesystem nodes
|
||||
|
||||
### Storage Providers
|
||||
|
||||
A *storage provider* manages [*resources*]({{< ref "#resources" >}}) identified by a [*reference*]({{< ref "#references" >}})
|
||||
by accessing a [*storage system*]({{< ref "#storage-systems" >}}) with a [*storage driver*]({{< ref "#storage-drivers" >}}).
|
||||
|
||||
{{< svg src="extensions/storage/static/storageprovider.drawio.svg" >}}
|
||||
|
||||
### Storage Registry
|
||||
|
||||
A *storage registry* manages the [*CS3 global namespace*]({{< ref "./namespaces.md#cs3-global-namespaces" >}}):
|
||||
It is used by the *gateway*
|
||||
to look up `address` and `port` of the [*storage provider*]({{< ref "#storage-providers" >}})
|
||||
that should handle a [*reference*]({{< ref "#references" >}}).
|
||||
|
||||
{{< svg src="extensions/storage/static/storageregistry.drawio.svg" >}}
|
||||
|
||||
### Storage Systems
|
||||
Every *storage system* has different native capabilities like id and path based lookups, recursive change time propagation, permissions, trash, versions, archival and more.
|
||||
A [*storage provider*]({{< ref "#storage-providers" >}}) makes the storage system available in the CS3 API by wrapping the capabilities as good as possible using a [*storage driver*]({{< ref "#storage-drivers" >}}).
|
||||
There migt be multiple [*storage drivers*]({{< ref "#storage-drivers" >}}) for a *storage system*, implementing different tradeoffs to match varying requirements.
|
||||
A [*storage provider*]({{< ref "#storage-providers" >}}) makes the storage system available in the CS3 API by wrapping the capabilities as good as possible using a [*storage driver*]({{< ref "./storagedrivers.md" >}}).
|
||||
There might be multiple [*storage drivers*]({{< ref "./storagedrivers.md" >}}) for a *storage system*, implementing different tradeoffs to match varying requirements.
|
||||
|
||||
### Gateways
|
||||
A *gateway* acts as a facade to the storage related services. It authenticates and forwards API calls that are publicly accessible.
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
title: "Updating reva"
|
||||
date: 2020-05-22T00:00:00+00:00
|
||||
weight: 50
|
||||
geekdocRepo: https://github.com/owncloud/ocis
|
||||
geekdocEditPath: edit/master/docs/extensions/storage
|
||||
geekdocFilePath: updating.md
|
||||
---
|
||||
|
||||
{{< toc >}}
|
||||
|
||||
## Updating reva
|
||||
|
||||
1. Run `go get github.com/cs3org/reva@master` in all repos that depend on reva
|
||||
2. Create a changelog entry containing changes that were done in [reva](https://github.com/cs3org/reva/commits/master)
|
||||
3. Create a Pull Request to ocis master with those changes
|
||||
4. If test issues appear, you might need to adjust the tests
|
||||
5. After the PR is merged, consider doing a [release of the storage submodule]({{< ref "releasing" >}})
|
||||
|
||||
@@ -1,12 +1,24 @@
|
||||
---
|
||||
title: "Users"
|
||||
date: 2020-01-16T00:00:00+00:00
|
||||
weight: 35
|
||||
weight: 17
|
||||
geekdocRepo: https://github.com/owncloud/ocis
|
||||
geekdocEditPath: edit/master/docs/extensions/storage
|
||||
geekdocFilePath: users.md
|
||||
---
|
||||
|
||||
TODO add this to the storage overview? or is this a different part? That should be started as a separate service ? And documented elsewhere, eg. in the accounts?
|
||||
|
||||
### User and Group provisioning
|
||||
|
||||
In oc10 users are identified by a username, which cannot change, because it is used as a foreign key in several tables. For oCIS we are internally identifying users by a UUID, while using the username in the WebDAV and OCS APIs for backwards compatability. To distinguish this in the URLs we are using `<username>` instead of `<userid>`. You may have encountered `<userlayout>`, which refers to a template that can be configured to build several path segments by filling in user properties, e.g. the first character of the username (`{{substr 0 1 .Username}}/{{.Username}}`), the identity provider (`{{.Id.Idp}}/{{.Username}}`) or the email (`{{.Mail}}`)
|
||||
|
||||
{{< hint warning >}}
|
||||
Make no mistake, the [OCS Provisioning API](https://doc.owncloud.com/server/developer_manual/core/apis/provisioning-api.html) uses `userid` while it actually is the username, because it is what you use to login.
|
||||
{{< /hint >}}
|
||||
|
||||
We are currently working on adding [user management through the CS3 API](https://github.com/owncloud/ocis/pull/1930) to handle user and group provisioning (and deprovisioning).
|
||||
|
||||
### Demo driver
|
||||
|
||||
This is a simple user driver for testing. It contains three users:
|
||||
|
||||
@@ -21,7 +21,7 @@ The docker stack consists 4 containers. One of them is Traefik, a proxy which is
|
||||
|
||||
Keykloak add two containers: Keycloak itself and a PostgreSQL as database. Keycloak will be configured as oCIS' IDP instead of the internal IDP [LibreGraph Connect]({{< ref "../../extensions/idp" >}})
|
||||
|
||||
The other container is oCIS itself running all extensions in one container. In this example oCIS uses [oCIS storage driver]({{< ref "../../extensions/storage/storages#storage-drivers" >}})
|
||||
The other container is oCIS itself running all extensions in one container. In this example oCIS uses the [oCIS storage driver]({{< ref "../../extensions/storage/storagedrivers" >}})
|
||||
|
||||
## Server Deployment
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ geekdocFilePath: ocis_traefik.md
|
||||
|
||||
The docker stack consists of two containers. One of them is Traefik, a proxy which is terminating ssl and forwards the requests to oCIS in the internal docker network.
|
||||
|
||||
The other one is oCIS itself running all extensions in one container. In this example oCIS uses its internal IDP [LibreGraph Connect]({{< ref "../../extensions/idp" >}}) and the [oCIS storage driver]({{< ref "../../extensions/storage/storages#storage-drivers" >}})
|
||||
The other one is oCIS itself running all extensions in one container. In this example oCIS uses its internal IDP [LibreGraph Connect]({{< ref "../../extensions/idp" >}}) and the [oCIS storage driver]({{< ref "../../extensions/storage/storagedrivers" >}})
|
||||
|
||||
## Server Deployment
|
||||
|
||||
|
||||
Reference in New Issue
Block a user