Examples
Local NLDS
What follows is an example server config file to use for a local, development
version of an NLDS system where all consumers are running concurrently on one
machine - likely a laptop or single vm. This file would be saved at
/etc/server_config
:
{
"authentication" : {
"authenticator_backend" : "jasmin_authenticator",
"jasmin_authenticator" : {
"user_profile_url" : "[REDACTED]",
"user_services_url" : "[REDACTED]",
"oauth_token_introspect_url" : "[REDACTED]"
}
},
"general": {
"retry_delays": [
1, 5, 10, 20, 30, 60, 120, 240, 480
]
},
"index_q":{
"logging":{
"enable": true
},
"filelist_threshold": 10000,
"check_permissions_fl": true,
"max_filesize": 5000000,
"retry_delays": [
0, 0, 0
]
},
"nlds_q":{
"logging":{
"enable": true
}
},
"transfer_put_q":{
"logging":{
"enable": true
},
"tenancy": "example-tenancy.s3.uk",
"require_secure_fl": false,
"retry_delays": [
0, 1, 2
]
},
"transfer_get_q":{
"logging":{
"enable": true
},
"tenancy": "example-tenancy.s3.uk",
"require_secure_fl": false,
"retry_delays": [
10,
20,
30
]
},
"monitor_q":{
"db_engine": "sqlite",
"db_options": {
"db_name" : "//home/nlds/nlds_monitor.db",
"db_user" : "",
"db_passwd" : "",
"echo": false
},
"logging":{
"enable": true
}
},
"logging":{
"log_level": "debug"
},
"logging_q":{
"logging":{
"log_level": "debug",
"add_stdout_fl": false,
"stdout_log_level": "warning",
"log_files": [
"logs/nlds_q.txt",
"logs/index_q.txt",
"logs/catalog_q.txt",
"logs/monitor_q.txt",
"logs/transfer_put_q.txt",
"logs/transfer_get_q.txt",
"logs/logging_q.txt",
"logs/api_server.txt",
"logs/archive_put_q.txt",
"logs/archive_get_q.txt"
],
"max_bytes": 33554432,
"backup_count": 0
}
},
"catalog_q":{
"db_engine": "sqlite",
"db_options": {
"db_name" : "//home/nlds/nlds_catalog.db",
"db_user" : "",
"db_passwd" : "",
"echo": false
},
"retry_delays": [
0,
0,
0
],
"logging":{
"enable": true
},
"default_tape_url": "root://example-tape.endpoint.uk//eos/ctaeos/cta/nlds",
"default_tenancy": "example-tenancy.s3.uk",
},
"archive_get_q": {
"tape_url": "root://example-tape.endpoint.uk//eos/ctaeos/cta/nlds",
"tape_pool": "",
"chunk_size": 262144,
"tenancy": "example-tenancy.s3.uk",
"print_tracebacks_fl": false,
"check_permissions_fl": false,
"require_secure_fl": false,
"max_retries": 5,
"retry_delays": [0.0, 0.0, 0.0],
"logging": {
"enable": true
}
},
"archive_put_q": {
"query_checksum_fl": true,
"tape_url": "root://example-tape.endpoint.uk//eos/ctaeos/cta/nlds",
"tape_pool": "",
"chunk_size": 262144,
"tenancy": "example-tenancy.s3.uk",
"print_tracebacks_fl": false,
"check_permissions_fl": false,
"require_secure_fl": false,
"max_retries": 1,
"retry_delays": [0.0, 0.0, 0.0],
"logging": {
"enable": true
}
},
"rabbitMQ": {
"user": "[REDACTED]",
"password": "[REDACTED]",
"heartbeat": 5,
"server": "[REDACTED]",
"vhost": "delayed-nlds",
"admin_port": 15672,
"exchange": {
"name": "test_exchange",
"type": "topic",
"delayed": true
},
"queues": [
{
"name": "nlds_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "nlds-api.route.*"
},
{
"exchange": "test_exchange",
"routing_key": "nlds-api.*.complete"
},
{
"exchange": "test_exchange",
"routing_key": "nlds-api.*.reroute"
},
{
"exchange": "test_exchange",
"routing_key": "nlds-api.*.failed"
}
]
},
{
"name": "monitor_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "*.monitor-put.start"
},
{
"exchange": "test_exchange",
"routing_key": "*.monitor-get.start"
}
]
},
{
"name": "index_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "*.index.start"
},
{
"exchange": "test_exchange",
"routing_key": "*.index.init"
}
]
},
{
"name": "catalog_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "*.catalog-put.start"
},
{
"exchange": "test_exchange",
"routing_key": "*.catalog-get.start"
},
{
"exchange": "test_exchange",
"routing_key": "*.catalog-del.start"
},
{
"exchange": "test_exchange",
"routing_key": "*.catalog-archive-next.start"
},
{
"exchange": "test_exchange",
"routing_key": "*.catalog-archive-del.start"
},
{
"exchange": "test_exchange",
"routing_key": "*.catalog-archive-update.start"
}
]
},
{
"name": "transfer_put_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "*.transfer-put.start"
}
]
},
{
"name": "transfer_get_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "*.transfer-get.start"
}
]
},
{
"name": "logging_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "*.log.*"
}
]
},
{
"name": "archive_get_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "*.archive-get.start"
}
]
},
{
"name": "archive_put_q",
"bindings": [
{
"exchange": "test_exchange",
"routing_key": "*.archive-put.start"
}
]
}
]
},
"rpc_publisher": {
"queue_exclusivity_fl": true
},
"cronjob_publisher": {
"access_key": "[REDACTED]",
"secret_key": "[REDACTED]",
"tenancy": "example-tenancy.s3.uk"
}
}
Note that this is purely illustrative and doesn’t necessarily use all features within the NLDS - it is provided as a reference for making a new working server config. Note also that certain sensitive information is redacted for security purposes.
Distributed NLDS
When making the config for a distributed NLDS, the above would need to be split
into the appropriate sections for each of the distributed parts being run
separately, namely by the consumer-specific and publisher-specific sections.
Each consumer needs the core, required authentication
and rabbitMQ
,
optionally logging
or general
config and then whatever consumer-specific
values necessary to change from default values.
The following is a breakdown of how it might be achieved:
API-Server
This would only contain the required sections as well as, optionally, any config
for the rpc_publisher
:
{
"authentication": {
"authenticator_backend": "jasmin_authenticator",
"jasmin_authenticator": {
"user_profile_url" : "[REDACTED]",
"user_services_url" : "[REDACTED]",
"oauth_token_introspect_url" : "[REDACTED]"
}
},
"rabbitMQ": {
"user": "[REDACTED]",
"password": "[REDACTED]",
"heartbeat": 5,
"server": "[REDACTED]",
"vhost": "nlds_staging",
"admin_port": 15672,
"exchange": {
"name": "nlds",
"type": "topic",
"delayed": true
},
"queues": []
},
"rpc_publisher": {
"time_limit": 60
}
}
NLDS Worker
This, again, contains the required sections, as well as consumer specific config
for the NLDS-Worker. In this case the additional info would be enabling the
logging at debug
level and defining the bindings (routing keys) for the
consumer’s queue.
{
"authentication": {
"authenticator_backend": "jasmin_authenticator",
"jasmin_authenticator": {
"user_profile_url" : "[REDACTED]",
"user_services_url" : "[REDACTED]",
"oauth_token_introspect_url" : "[REDACTED]"
}
},
"rabbitMQ": {
"user": "[REDACTED]",
"password": "[REDACTED]",
"heartbeat": 5,
"server": "[REDACTED]",
"vhost": "nlds_staging",
"admin_port": 15672,
"exchange": {
"name": "nlds",
"type": "topic",
"delayed": true
},
"queues": [
{
"name": "nlds_q",
"bindings": [
{
"exchange": "nlds",
"routing_key": "nlds-api.route.*"
},
{
"exchange": "nlds",
"routing_key": "nlds-api.*.complete"
},
{
"exchange": "nlds",
"routing_key": "nlds-api.*.failed"
}
]
}
]
},
"logging": {
"log_level": "debug"
},
"nlds_q": {
"logging": {
"enable": true
}
}
}
Every other consumer would be populated similarly.
Note
In the production deployment of NLDS, this is practically achieved through
helm
and the combination of different yaml config files. Please see the
Deployment documentation for more details on the practicalities of
deploying the NLDS.