Splitfilesystem V2
Currently there are three different Versions with different features available. Splitfilesystem and SplitfilesystemV2 are in maintanace mode and can still be used in existing installations. For new installations or repositories SplitfilesystemV3 is recommended.
SplitfilesystemV3
Example:
Code Block |
---|
<repo>.contentservice.type = splitfilesystemv3
<repo>.description = Finance Repository
<repo>.saphttp.security = 1
<repo>.accessmode = rucd
<repo>.authentication.required = false
<repo>.authentication.user =
<repo>.authentication.pwdalias =
#===== FI content service configuration (filesystem|splitfilesystemv2|splitfilesystemv3|azureblobstore|s3blobstore|kgsstore)
<repo>.contentservice.splitfilesystemv3.root = C:/Doc_Base
<repo>.contentservice.splitfilesystemv3.root.2 = C:/Doc_Base_Disk2
<repo>.contentservice.splitfilesystemv3.contrepinpath = true
<repo>.contentservice.splitfilesystemv3.maxfolderblocks=8
<repo>.contentservice.splitfilesystemv3.maxFileNameLength=200
<repo>.contentservice.splitfilesystemv3.rootSelectionIntervalH=24 |
To use the splitfilesystemv3
the <repo>.contentservice.type
needs to be splitfilesystemv3
.
All parameters for splitfilesystemv3
must be configured within <repo>.contentservice.splitfilesystemv3
on a repository or template level.
Parameter | Description | Default | ||
---|---|---|---|---|
root | Folder where the documents and all related data are stored | - | ||
root.<n> | - | |||
root.<n>.freespacegb | -1 | |||
contrepinpath | create a folder in root that has the same name as the repository | false | ||
maxfolderblocks | create subfolder from the base32 encoded folder name with this length, this parameter can reduce the folder depth . Available values 4, 8, 16
| 8 | ||
maxFileNameLength | the filename of the document encoded in base32 is maximum this long, otherwise it will be splitted in subfolders. Any number between 10 and 250 can be used.
| 250 | ||
rootSelectionIntervalH | Timeintervall to find a new root directory, when freespace on disk is smaller than freespacegb. see https://kgs-software.atlassian.net/wiki/spaces/DOCUEN/pages/edit-v2/2339602437#root-folder-selection-behavior | 12 |
root folder selection rules
Multiple root directories are allowed in SFSV3 to spread repositories across different disk/shares and avoid limit of filesystems.
Multiple roots can be configured distinguished by a ordernumber. e.g. root.1
,root.2
the algorithm tries in numbers order to pick the root
it checks the available space and compares it with the given limit. Default limit is -1.
If the algorithm finds out, that a root hasn’t enough space it tries the next.
with limit -1 a drive can be blocked. The space detection is skipped. It is then used in read only state (and / or only for adding components and infos)
if the last root has -1 it will be written until IOEXCEPTION, means the root is “full“
the algorithm is triggered by:
if rootSelectionIntervalH is exceeded
if IOException had happen while IO operation
Example:
Code Block |
---|
<repo>.contentservice.splitfilesystemv3.root = C:/Doc_Base
<repo>.contentservice.splitfilesystemv3.root.2 = C:/Doc_Base_Disk2
<repo>.contentservice.splitfilesystemv3.root.2.freespacegb=-1
<repo>.contentservice.splitfilesystemv3.root.3 = C:/Doc_Base_Disk3
<repo>.contentservice.splitfilesystemv3.root.3.freespacegb=10
<repo>.contentservice.splitfilesystemv3.root.4 = C:/Doc_Base_Disk4
<repo>.contentservice.splitfilesystemv3.root.4.freespacegb=50 |
In this example root is skiped and only used for reading because freespacegb
is not set and therefore -1.
root.2 is also skipped because freespacegb
is -1.
root.3 is only used when C:/Doc_Base_Disk3
has more than 10 GB available space.
root.4 is only used when C:/Doc_Base_Disk4
has more than 50 GB available space.
Is root.3 and root.4 disk space exceeded storing documents is no longer possible only reading.
Be aware that SFSV3 tries to keep documents in same folder together, when a document is stored in the original root and later a second document or component should be added in the same folder even when root.4 is used at the moment, SFSV3 will store the document in root (C:/Doc_Base
). Make sure that your not used disk have some space left otherwise modification is no longer possible.
SplitfilesystemV2
The files are stored within a filesystem in Base32 coded structures. The whole path is base 32 coded and divided into blocks.
...
Code Block |
---|
{ "properties": { "contentDigestAlgorithm": "MD5", "creationUser": "LOCAL SERVICE", "creationTime": "2023-07-13T07:03:50.867280400Z[UTC]", "propertyLayoutVersion": "V02.00", "modificationTime": "2023-07-13T08:03:37.406140Z[UTC]", "modificationUser": "LOCAL SERVICE", "objectName": "20230713_611ce078-2915-423d-8190-c72d40337ff9_node", "contentLength": "1127", "repository": "FI", "contentDigest": "68FAB75EC1AC8D2820068CC95FAA5EDE", "contentStreamLength": "1127", "archiveLinkVersion": "0046" } } |
Configurationparameters
...
In order to store documents on a filesystem parameters have to be defined within the repository.cfg file. In general the file is stored in the folder:
Code Block |
---|
<Tomcat folder>\webapps\<name of the webapp>\WEB-INF\classes\config |
...
Code Block |
---|
# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # the repository list for the default repositoryfactory.class repositoryfactory.repositorylist = FI,MM #---------------------- FI configuration (splitfilesystemv2) ---------------------------------- #===== FI repository configuration FI.contentservice.type = splitfilesystemv3splitfilesystemv2 FI.description = Finance Repository FI.saphttp.security = 1 FI.accessmode = rucd FI.authentication.required = false FI.authentication.user = FI.authentication.pwdalias = #===== FI content service configuration (filesystem|splitfilesystemv2|splitfilesystemv3|azureblobstore|s3blobstore|kgsstore) FI.contentservice.splitfilesystemv3splitfilesystemv2.root = C:/Doc_Base FI.contentservice.splitfilesystemv3splitfilesystemv2.contrepinpath = true FI.contentservice.splitfilesystemv3.maxfolderblocks=8 FI.contentservice.splitfilesystemv3.maxFileNameLength=200 FI.contentservice.splitfilesystemv3.rootSelectionIntervalH=24 #===== FI keystore service configuration (none|pkcs12) FI.keystoreservice.type = pkcs12 FI.keystoreservice.pkcs12.name = common-ks.pkcs12 #===== FI meta service configuration (none|elastic|database|kafka) FI.metaservice.type = none #===== FI meta service configuration (none|elastic|database|kafka) FI.protocolservice.type = none |
...
All further parameters are defined individually for each content repository.
In order to store the documents on the filesystem the content repository type has to be set to splitfilesystemv2
or splitfilesystemv3
.
Code Block |
---|
<repoName>.contentservice.type = splitfilesystemv3 |
In order to store the documents in a specified place the path has to be entered; ex. C:/Doc_Base/
or /opt/Doc_Base
. Please be aware that the separator for the folder always is a / !
When storing the documents on a filesystem we suggest to set the parameter ContrepInPath = true
Code Block |
---|
#<repoName>.contentservice.splitfilesystemv2.root = C:/Doc_Base
#<repoName>.contentservice.splitfilesystemv2.ContrepInPath = true |
The saphttp.security can be set to 0
, 1
or 2
.
0
means that no security is necessary and no certifiate is needed in order to store documents in the content repository
1
means that in order to store documents in the content repository a certificate has to be send from the SAP system to the content server. The certifiacte will be accepted automatically by the content server.
2
means that in order to store documents in the content repository a certificate has to be send from the SAP system to the content server. The certifiacte has to be accepted manually by the content server. This can be done via the transaction CSADMIN within the SAP system.
Code Block |
---|
#<repoName>.saphttp.security = 1 |
The parameters for the accessmode
in general always should be rucd (read, update, create, delete) and the authentication
should be set to false
with no user a/o password.
Code Block |
---|
FI.accessmode = rucd
FI.authentication.required = false
FI.authentication.user =
FI.authentication.pwdalias = |
Differences SFSv2 SFSv3
Version 3 brings these changes compared to v2
the folder block size is not fixed 4 anymore. It can be chosen: 4, 8, 16. With this change the storage folder depth can be reduced.
the file name length can be limited. In v2 there was no limit.
multiple roots are supported. They are used until the free space limit is arrived. Then it choses the next in order.
if limit is -1 it is blocked for writing new documents (exception last one)
root folder selection behavior
...
the algorithm tries in numbers order to pick the root
it checks the available space and compares it with the given limit. Default limit is -1.
If the algorithm finds out, that a root hasn’t enough space it tries the next.
with limit -1 a drive can be blocked. The space detection is skipped. It is then used in read only state (and / or only for adding components and infos)
if the last root has -1 it will be written until IOEXCEPTION
the algorithm is triggered by:
...
if rootSelectionIntervalH is exceeded
...
default false |
Info |
---|
Folder separation is always / see Syntax rules for repository.cfg file |