Applied Limits

There are no general limits regarding the number of recursions, linked files, amount of packages etc.

Names, Metadata, Tags and some more values do fall under certain limits that are enforced by the access layer. The following snipped shows the compiled-in (and configurable) limits:

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
 * Defines the maximum amount of characters that may be used in the various
 * name fields (Note: The size was chosen based on the maximum index size
 * supported by MSSQL, it should not be increased).
 */
int MAX_NAME_LENGTH = 432;
  
/**
 * Defines the maximum amount of characters that may be used in the various
 * display name fields.
 */
int MAX_DISPLAY_NAME_LENGTH = 256;
  
/**
 * Defines the maximum amount of characters that all tags may consume when
 * serialized to a whitespace delimited string (hard limit, compiled-in).
 */
int MAX_TAG_STRING_LENGTH = 1024 * 1024;
  
/**
 * Defines the actually applied limit for the tag string length.
 * Configurable; via command line parameter "-Dgacl.max.tag.string.length=value".
 */
int TAG_STRING_LENGTH = Math.min(MAX_TAG_STRING_LENGTH,
        Integer.getInteger("gacl.max.tag.string.length", 64 * 1024));
  
/**
 * Defines the maximum amount of bytes that the serialized metadata element
 * may consume. (Note: "serialized metadata" means the length of the UTF-8
 * encoded XML representation excluding any unnecessary whitespaces)
 * (hard limit, compiled-in).
 */
int MAX_SERIALIZED_METADATA_LENGTH = 1024 * 1024;
  
/**
 * Defines the actually applied limit for the serialized metadata length.
 * Configurable; use command line parameter "-Dgacl.max.serialized.metadata.length=value".
 */
int SERIALIZED_METADATA_LENGTH = Math.min(MAX_SERIALIZED_METADATA_LENGTH,
        Integer.getInteger("gacl.max.serialized.metadata.length", 256 * 1024));
  
/**
 * Defines the actually applied limit for incoming batch request.
 * <p/>
 * If the limit is reached, web-services will not not continue parsing a
 * request and returning an error in order to protect the server from DOS attacks.
 * <p/>
 * Configurable; use command line parameter "-Dgacl.max.incoming.request.batch.size=value".
 */
int MAX_INCOMING_REQUEST_BATCH_SIZE = Integer.
        getInteger("gacl.max.incoming.request.batch.size", 100);
  
/**
 * Defines the maximum amount of characters that may be used in the remote
 * (public) URI field (using ASCII URI encoding).
 */
int SOURCE_MAX_REMOTE_URI_LENGTH = 2 * 1024;
  
/**
 * Defines the maximum amount of characters that may be used in the internal
 * URI field (using ASCII URI encoding).
 */
int SOURCE_MAX_INTERNAL_URI_LENGTH = 1024;
  
/**
 * Defines the maximum amount of characters that may be used in the content
 * tag field.
 */
int SOURCE_MAX_CONTENT_TAG_LENGTH = 128;
  
/**
 * Defines the maximum amount of characters that may be used in the domain
 * name field.
 */
int SOURCE_DOMAIN_MAX_NAME_LENGTH = 256;

In addition, processing has a per session limit to avoid out-of-memory errors:

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// The max prepared source count is MAX_PREPARED_JOBS * MAX_SOURCES_PER_JOB per session.
//
// This limit applies only to jobs & sources that were prepared but not yet started.
// Exceeding the limit will log and discard the eldest job or source but it will not
// cause an error. Therefore it is in general safe to prepare jobs and not further
// process them as the data is either cleaned when the session times out or when more
// than the declared limit of jobs are prepared.
// However it's the responsibility of the client to not exceed the limit with jobs or
// sources that must not get lost.
//
// Attention, every source may consume several KB of RAM, depending directly on the
// size of the metadata element. Adjust these values with care and only when needed.
  
/**
 * Defines the actually applied limit for the amount of prepared jobs within a single
 * session.
 * Configurable; via command line parameter "-Dgacl.max.prepared.jobs=value".
 */
public static final int MAX_PREPARED_JOBS = Math.max(1,
        Integer.getInteger("gacl.max.prepared.jobs", 256));
  
/**
 * Defines the actually applied limit for the amount of sources that may be assigned to
 * a single job.
 * Configurable; via command line parameter "-Dgacl.max.sources.per.job=value".
 */
public static final int MAX_SOURCES_PER_JOB = Math.max(1,
        Integer.getInteger("gacl.max.sources.per.job", 16));