mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-19 04:05:36 +00:00
Merge branch 'master' of ssh://sapsailing.com/home/trac/git into bug5979
This commit is contained in:
-25
@@ -1,25 +0,0 @@
|
||||
<VirtualHost *:80>
|
||||
ServerName git.sapsailing.com
|
||||
SetEnv GIT_PROJECT_ROOT /home/trac/git
|
||||
SetEnv GIT_HTTP_EXPORT_ALL
|
||||
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
|
||||
ScriptAlias /hooks/ /var/www/cgi-bin/
|
||||
|
||||
<Location /git/ >
|
||||
Options +ExecCGI
|
||||
AuthType Basic
|
||||
AuthName 'Git'
|
||||
AuthUserFile '/etc/httpd/conf/passwd.git'
|
||||
Require valid-user
|
||||
</Location>
|
||||
|
||||
<Directory "/var/www/cgi-bin">
|
||||
AllowOverride None
|
||||
Options FollowSymLinks
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
</Directory>
|
||||
|
||||
SetEnvIf User-Agent ".*MSIE.*" \
|
||||
downgrade-1.0 force-response-1.0
|
||||
</VirtualHost>
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
<VirtualHost *:80>
|
||||
ServerName docker.sapsailing.com
|
||||
ProxyPreserveHost on
|
||||
ProxyPass / http://127.0.0.1:5000/
|
||||
ProxyPassReverse / http://127.0.0.1:5000/
|
||||
<Location />
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
AuthName "Docker Registry Authentication"
|
||||
AuthType basic
|
||||
AuthUserFile '/etc/httpd/conf/passwd.git'
|
||||
Require valid-user
|
||||
</Location>
|
||||
# Use separate log files for the SSL virtual host; note that LogLevel
|
||||
# is not inherited from httpd.conf.
|
||||
ErrorLog logs/docker_error_log
|
||||
TransferLog logs/docker_access_log
|
||||
LogLevel warn
|
||||
</VirtualHost>
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName docker-registry.sapsailing.com
|
||||
ProxyPreserveHost on
|
||||
ProxyPass /v2 http://127.0.0.1:5001/v2
|
||||
ProxyPassReverse /v2 http://127.0.0.1:5001/v2
|
||||
<Location />
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
AuthName "Docker Registry Authentication"
|
||||
AuthType basic
|
||||
AuthUserFile '/etc/httpd/conf/passwd.git'
|
||||
Require valid-user
|
||||
</Location>
|
||||
# Use separate log files for the SSL virtual host; note that LogLevel
|
||||
# is not inherited from httpd.conf.
|
||||
ErrorLog logs/docker_error_log
|
||||
TransferLog logs/docker_access_log
|
||||
LogLevel warn
|
||||
</VirtualHost>
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
# sail-insight.com
|
||||
<VirtualHost *:80>
|
||||
ServerName sail-insight.com
|
||||
ServerAlias www.sail-insight.com
|
||||
CustomLog logs/services_log combined env=!original_client_ip
|
||||
CustomLog logs/services_log first_forwarded_for_ip env=original_client_ip
|
||||
Alias / /home/trac/sail-insight-website/
|
||||
<Directory /home/trac/sail-insight-website>
|
||||
Options Indexes FollowSymLinks MultiViews
|
||||
AllowOverride All
|
||||
Order allow,deny
|
||||
allow from all
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
-56
@@ -1,56 +0,0 @@
|
||||
#
|
||||
# Content of this file, with correct values, can be automatically added to
|
||||
# your Apache server by using the AWStats configure.pl tool.
|
||||
#
|
||||
|
||||
|
||||
# If using Windows and Perl ActiveStat, this is to enable Perl script as CGI.
|
||||
#ScriptInterpreterSource registry
|
||||
|
||||
|
||||
#
|
||||
# Directives to add to your Apache conf file to allow use of AWStats as a CGI.
|
||||
# Note that path "/usr/share/awstats/" must reflect your AWStats install path.
|
||||
#
|
||||
Alias /awstatsclasses "/usr/share/awstats/wwwroot/classes/"
|
||||
Alias /awstatscss "/usr/share/awstats/wwwroot/css/"
|
||||
Alias /awstatsicons "/usr/share/awstats/wwwroot/icon/"
|
||||
ScriptAlias /awstats/ "/usr/share/awstats/wwwroot/cgi-bin/"
|
||||
|
||||
# Adding access to /var/log/old/cache/unique-ips-per-referrer/stats:
|
||||
Alias /unique-visitors/ "/var/log/old/cache/unique-ips-per-referrer/stats/"
|
||||
|
||||
#
|
||||
# This is to permit URL access to scripts/files in AWStats directory.
|
||||
#
|
||||
<VirtualHost *:80>
|
||||
ServerName awstats.sapsailing.com
|
||||
CustomLog logs/awstats_access_log combined
|
||||
ErrorLog logs/awstats_error_log
|
||||
|
||||
<Directory "/usr/share/awstats/wwwroot">
|
||||
Options None
|
||||
# AllowOverride None
|
||||
# Order allow,deny
|
||||
# Allow from 127.0.0.1
|
||||
AuthType Basic
|
||||
AuthName 'awstats'
|
||||
AuthUserFile /etc/httpd/conf/passwd.awstats
|
||||
Require valid-user
|
||||
</Directory>
|
||||
|
||||
<Directory "/var/log/old/cache/unique-ips-per-referrer/stats/">
|
||||
Options Indexes
|
||||
# AllowOverride None
|
||||
# Order allow,deny
|
||||
# Allow from 127.0.0.1
|
||||
AuthType Basic
|
||||
AuthName 'awstats'
|
||||
AuthUserFile /etc/httpd/conf/passwd.awstats
|
||||
Require valid-user
|
||||
</Directory>
|
||||
# Additional Perl modules
|
||||
<IfModule mod_env.c>
|
||||
SetEnv PERL5LIB /usr/share/awstats/lib:/usr/share/awstats/plugins:/root/perl5/lib/perl5
|
||||
</IfModule>
|
||||
</VirtualHost>
|
||||
-78
@@ -1,78 +0,0 @@
|
||||
<VirtualHost *:80>
|
||||
ServerName jobs.sapsailing.com
|
||||
CustomLog logs/jobs_log combined env=!original_client_ip
|
||||
CustomLog logs/jobs_log first_forwarded_for_ip env=original_client_ip
|
||||
DocumentRoot /home/trac/static/jobs
|
||||
<Directory /home/trac/static/jobs>
|
||||
Options Indexes FollowSymLinks MultiViews
|
||||
AllowOverride All
|
||||
Order allow,deny
|
||||
allow from all
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
|
||||
# P2 repository
|
||||
<VirtualHost *:80>
|
||||
ServerName p2.sapsailing.com
|
||||
CustomLog logs/services_log combined env=!original_client_ip
|
||||
CustomLog logs/services_log first_forwarded_for_ip env=original_client_ip
|
||||
Alias /p2 /home/trac/p2-repositories
|
||||
<Directory /home/trac/p2-repositories>
|
||||
Options Indexes FollowSymLinks MultiViews
|
||||
AllowOverride None
|
||||
Order allow,deny
|
||||
allow from all
|
||||
</Directory>
|
||||
</VirtualHost>
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName bugzilla.sapsailing.com
|
||||
RewriteEngine On
|
||||
RewriteRule ^/?$ http://bugzilla.sapsailing.com/bugzilla [L]
|
||||
CustomLog logs/services_log combined env=!original_client_ip
|
||||
CustomLog logs/services_log first_forwarded_for_ip env=original_client_ip
|
||||
Alias /bugzilla /usr/share/bugzilla
|
||||
<Directory /usr/share/bugzilla>
|
||||
AddHandler cgi-script .cgi
|
||||
Options +Indexes +ExecCGI +FollowSymLinks
|
||||
DirectoryIndex index.cgi
|
||||
AllowOverride Limit Options FileInfo Indexes AuthConfig
|
||||
</Directory>
|
||||
# Additional Perl modules
|
||||
<IfModule mod_env.c>
|
||||
SetEnv PERL5LIB /root/perl5/lib/perl5:/root/perl5/lib/perl5/x86_64-linux-thread-multi
|
||||
</IfModule>
|
||||
</VirtualHost>
|
||||
|
||||
# Wiki -->
|
||||
<VirtualHost *:80>
|
||||
ServerName wiki.sapsailing.com
|
||||
RewriteEngine on
|
||||
RewriteRule ^/(.*) http://localhost:4567/$1 [P,L]
|
||||
ProxyPassReverse / http://localhost:4567/
|
||||
CustomLog logs/services_log combined env=!original_client_ip
|
||||
CustomLog logs/services_log first_forwarded_for_ip env=original_client_ip
|
||||
</VirtualHost>
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName releases.sapsailing.com
|
||||
DocumentRoot /home/trac/releases
|
||||
<Directory /home/trac/releases>
|
||||
Options +Indexes +FollowSymLinks
|
||||
</Directory>
|
||||
CustomLog logs/services_log combined env=!original_client_ip
|
||||
CustomLog logs/services_log first_forwarded_for_ip env=original_client_ip
|
||||
</VirtualHost>
|
||||
|
||||
<VirtualHost *:80>
|
||||
ServerName static.sapsailing.com
|
||||
DocumentRoot /var/www/static
|
||||
<Directory /var/www/static>
|
||||
Order Deny,Allow
|
||||
Allow from all
|
||||
Options -Indexes +FollowSymLinks -ExecCGI
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
CustomLog logs/services_log combined env=!original_client_ip
|
||||
CustomLog logs/services_log first_forwarded_for_ip env=original_client_ip
|
||||
</VirtualHost>
|
||||
-1
@@ -1 +0,0 @@
|
||||
LoadModule php7_module modules/libphp-7.1.so
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
#
|
||||
# Mod_perl incorporates a Perl interpreter into the Apache web server,
|
||||
# so that the Apache web server can directly execute Perl code.
|
||||
# Mod_perl links the Perl runtime library into the Apache web server
|
||||
# and provides an object-oriented Perl interface for Apache's C
|
||||
# language API. The end result is a quicker CGI script turnaround
|
||||
# process, since no external Perl interpreter has to be started.
|
||||
#
|
||||
|
||||
# Uncomment this line to globally enable warnings, which will be
|
||||
# written to the server's error log. Warnings should be enabled
|
||||
# during the development process, but should be disabled on a
|
||||
# production server as they affect performance.
|
||||
#
|
||||
#PerlSwitches -w
|
||||
|
||||
# Uncomment this line to enable taint checking globally. When Perl is
|
||||
# running in taint mode various checks are performed to reduce the
|
||||
# risk of insecure data being passed to a subshell or being used to
|
||||
# modify the filesystem. Unfortunately many Perl modules are not
|
||||
# taint-safe, so you should exercise care before enabling it on a
|
||||
# production server.
|
||||
#
|
||||
#PerlSwitches -T
|
||||
|
||||
# This will allow execution of mod_perl to compile your scripts to
|
||||
# subroutines which it will execute directly, avoiding the costly
|
||||
# compile process for most requests.
|
||||
#
|
||||
#Alias /perl /var/www/perl
|
||||
#<Directory /var/www/perl>
|
||||
# SetHandler perl-script
|
||||
# PerlResponseHandler ModPerl::Registry
|
||||
# PerlOptions +ParseHeaders
|
||||
# Options +ExecCGI
|
||||
#</Directory>
|
||||
|
||||
# This will allow remote server configuration reports, with the URL of
|
||||
# http://servername/perl-status
|
||||
# Change the ".example.com" to match your domain to enable.
|
||||
#
|
||||
#<Location /perl-status>
|
||||
# SetHandler perl-script
|
||||
# PerlResponseHandler Apache2::Status
|
||||
# Order deny,allow
|
||||
# Deny from all
|
||||
# Allow from .example.com
|
||||
#</Location>
|
||||
-57
@@ -1,57 +0,0 @@
|
||||
#
|
||||
# The following lines prevent .user.ini files from being viewed by Web clients.
|
||||
#
|
||||
<Files ".user.ini">
|
||||
Require all denied
|
||||
</Files>
|
||||
|
||||
#
|
||||
# Allow php to handle Multiviews
|
||||
#
|
||||
AddType text/html .php
|
||||
|
||||
#
|
||||
# Add index.php to the list of files that will be served as directory
|
||||
# indexes.
|
||||
#
|
||||
DirectoryIndex index.php
|
||||
|
||||
# mod_php options
|
||||
<IfModule mod_php7.c>
|
||||
#
|
||||
# Cause the PHP interpreter to handle files with a .php extension.
|
||||
#
|
||||
<FilesMatch \.php$>
|
||||
SetHandler application/x-httpd-php
|
||||
</FilesMatch>
|
||||
|
||||
#
|
||||
# Uncomment the following lines to allow PHP to pretty-print .phps
|
||||
# files as PHP source code:
|
||||
#
|
||||
#<FilesMatch \.phps$>
|
||||
# SetHandler application/x-httpd-php-source
|
||||
#</FilesMatch>
|
||||
|
||||
#
|
||||
# Apache specific PHP configuration options
|
||||
# those can be override in each configured vhost
|
||||
#
|
||||
php_value session.save_handler "files"
|
||||
php_value session.save_path "/var/lib/php/7.1/session"
|
||||
php_value soap.wsdl_cache_dir "/var/lib/php/7.1/wsdlcache"
|
||||
|
||||
#php_value opcache.file_cache "/var/lib/php/7.1/opcache"
|
||||
</IfModule>
|
||||
|
||||
# Redirect to local php-fpm if mod_php is not available
|
||||
<IfModule !mod_php5.c>
|
||||
<IfModule !mod_php7.c>
|
||||
# Enable http authorization headers
|
||||
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
|
||||
|
||||
<FilesMatch \.php$>
|
||||
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
-57
@@ -1,57 +0,0 @@
|
||||
#
|
||||
# The following lines prevent .user.ini files from being viewed by Web clients.
|
||||
#
|
||||
<Files ".user.ini">
|
||||
Require all denied
|
||||
</Files>
|
||||
|
||||
#
|
||||
# Allow php to handle Multiviews
|
||||
#
|
||||
AddType text/html .php
|
||||
|
||||
#
|
||||
# Add index.php to the list of files that will be served as directory
|
||||
# indexes.
|
||||
#
|
||||
DirectoryIndex index.php
|
||||
|
||||
# mod_php options
|
||||
<IfModule mod_php7.c>
|
||||
#
|
||||
# Cause the PHP interpreter to handle files with a .php extension.
|
||||
#
|
||||
<FilesMatch \.php$>
|
||||
SetHandler application/x-httpd-php
|
||||
</FilesMatch>
|
||||
|
||||
#
|
||||
# Uncomment the following lines to allow PHP to pretty-print .phps
|
||||
# files as PHP source code:
|
||||
#
|
||||
#<FilesMatch \.phps$>
|
||||
# SetHandler application/x-httpd-php-source
|
||||
#</FilesMatch>
|
||||
|
||||
#
|
||||
# Apache specific PHP configuration options
|
||||
# those can be override in each configured vhost
|
||||
#
|
||||
php_value session.save_handler "files"
|
||||
php_value session.save_path "/var/lib/php/7.1/session"
|
||||
php_value soap.wsdl_cache_dir "/var/lib/php/7.1/wsdlcache"
|
||||
|
||||
#php_value opcache.file_cache "/var/lib/php/7.1/opcache"
|
||||
</IfModule>
|
||||
|
||||
# Redirect to local php-fpm if mod_php is not available
|
||||
<IfModule !mod_php5.c>
|
||||
<IfModule !mod_php7.c>
|
||||
# Enable http authorization headers
|
||||
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
|
||||
|
||||
<FilesMatch \.php$>
|
||||
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
+41
-8
@@ -5,22 +5,55 @@
|
||||
# after the merge completes. The user, in which the bare repo and hook are installed, must have aws credentials, that
|
||||
# don't need mfa. (These may need to be installed manually -- within the correct user -- if starting from a clean instance.)
|
||||
|
||||
TAG="ReverseProxy"
|
||||
DISPOSABLE_TAG="DisposableProxy"
|
||||
CENTRAL_TAG="CentralReverseProxy"
|
||||
DIR="/etc/httpd"
|
||||
COMMAND="sudo service httpd reload"
|
||||
MAIN_BRANCH_NAME="main"
|
||||
DISPOSABLE_BRANCH_NAME="disposable"
|
||||
CENTRAL_BRANCH_NAME="central"
|
||||
CHECKED_OUT_WORKSPACE_NAME="checked-out" # Assumes it is in the root user.
|
||||
sync_repo() {
|
||||
#$1 tag key to use
|
||||
#$2 branch to check out
|
||||
# Gets all public ips for the instances with the chosen tag and iterates over the IPs.
|
||||
for IP in $(aws ec2 describe-instances --filters Name=tag-key,Values="${1}" | jq -r '.Reservations[].Instances[].PublicIpAddress'); do
|
||||
# strictHostKey... means no authenticity check. The sync-repo... script must be installed in the root user's home.
|
||||
echo $IP
|
||||
ssh -o "StrictHostKeyChecking=no" -o "ConnectTimeout=10" root@${IP} "cd ~ && sync-repo-and-execute-cmd.sh '${DIR}' '${COMMAND}' '${2}'";
|
||||
done;
|
||||
}
|
||||
merge_main_into_branch() {
|
||||
#$1 branch name. Assumes you are in the git repo.
|
||||
git checkout "${1}"
|
||||
git pull
|
||||
echo "merging ${MAIN_BRANCH_NAME} into ${1}"
|
||||
git merge ${MAIN_BRANCH_NAME}
|
||||
git push
|
||||
}
|
||||
while read oldrev newrev refname; do # These vars are passed on stdin to this hook.
|
||||
# Check if the update is on a branch
|
||||
if [[ $refname == "refs/heads/"* ]]; then
|
||||
branch_name=$(echo $refname | sed "s|refs/heads/\(.*\)$|\1|")
|
||||
echo "Update on branch: $branch_name"
|
||||
if [[ "$branch_name" == "$MAIN_BRANCH_NAME" ]]; then
|
||||
# Gets all public ips for the instances with the chosen tag and iterates over the IPs.
|
||||
for IP in $(aws ec2 describe-instances --filters Name=tag-key,Values="${TAG}" | jq -r '.Reservations[].Instances[].PublicIpAddress'); do
|
||||
# strictHostKey... means no authenticity check. The sync-repo... script must be installed in the root user's home.
|
||||
echo "Connecting to $IP"
|
||||
ssh -o "StrictHostKeyChecking=no" root@${IP} "cd ~ && /usr/local/bin/sync-repo-and-execute-cmd.sh '${DIR}' '${COMMAND}' ";
|
||||
done
|
||||
if [[ "$branch_name" == "$DISPOSABLE_BRANCH_NAME" ]]; then
|
||||
echo "All the disposables pull the disposable branch"
|
||||
sync_repo "${DISPOSABLE_TAG}" "${DISPOSABLE_BRANCH_NAME}"
|
||||
elif [[ "$branch_name" == "$CENTRAL_BRANCH_NAME" ]]; then
|
||||
echo "The central pulls the central branch"
|
||||
sync_repo "${CENTRAL_TAG}" "${CENTRAL_BRANCH_NAME}"
|
||||
elif [[ "$branch_name" == "$MAIN_BRANCH_NAME" ]]; then
|
||||
cd ~
|
||||
unset GIT_DIR
|
||||
cd ${CHECKED_OUT_WORKSPACE_NAME}
|
||||
# get the latest main
|
||||
git checkout ${MAIN_BRANCH_NAME}
|
||||
git pull
|
||||
# get the latest diposable branch and merge in changes
|
||||
merge_main_into_branch "$DISPOSABLE_BRANCH_NAME"
|
||||
# get the latest central branch and merge in changes
|
||||
merge_main_into_branch "$CENTRAL_BRANCH_NAME"
|
||||
git checkout ${MAIN_BRANCH_NAME}
|
||||
fi
|
||||
fi
|
||||
done
|
||||
+21
-11
@@ -1,20 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Purpose: This script goes to a given git dir (eg. httpd); fetches any new commits to
|
||||
# the repo; and - if new commits are found - merges them into the branch and runs a command.
|
||||
# Purpose: This script goes to a given git dir (eg. httpd); checks out a given branch; fetches any new commits to
|
||||
# that given branch; and - if new commits are found - merges them into the branch and runs a command.
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "$0 PATH_TO_GIT_REPO COMMAND_TO_RUN_ON_COMPLETION_IN_REPO"
|
||||
echo "$0 PATH_TO_GIT_REPO COMMAND_TO_RUN_ON_COMPLETION_IN_REPO BRANCH_TO_CHECK_OUT"
|
||||
echo ""
|
||||
echo "EXAMPLE: sync-repo-and-execute-cmd.sh \"/etc/httpd\" \"sudo service httpd reload\""
|
||||
echo "This script is used to automatically fetch from a git repo and, if there are new commits, merge the changes."
|
||||
echo "And then run a command, passed as an argument."
|
||||
echo "This script is used to automatically fetch the latest changes to a given branch of a git repo and,"
|
||||
echo "if there are new commits, merge the changes into that branch."
|
||||
echo "And then run a command, passed as an argument. This leaves the repo checked out to the branch in the argument."
|
||||
exit 2
|
||||
fi
|
||||
|
||||
GIT_PATH=$1
|
||||
COMMAND_ON_COMPLETION=$2
|
||||
GIT_BRANCH=$3
|
||||
cd ${GIT_PATH}
|
||||
git checkout ${GIT_BRANCH} >/dev/null 2>&1
|
||||
if [[ "$?" -ne 0 ]]; then
|
||||
echo "Error encountered: issue checking out branch"
|
||||
exit 1
|
||||
fi
|
||||
# Rev-parse gets the commit hash of given reference.
|
||||
CURRENT_HEAD=$(git rev-parse HEAD)
|
||||
GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git fetch
|
||||
@@ -22,17 +29,17 @@ if [[ "$?" -ne 0 ]]; then
|
||||
echo "Error encountered: issue with fetching or there is no repo."
|
||||
exit 1
|
||||
fi
|
||||
if [[ $CURRENT_HEAD != $(git rev-parse origin/main) ]] # Checks if there are new commits
|
||||
if [[ $CURRENT_HEAD != "$(git rev-parse origin/${GIT_BRANCH})" ]] # Checks if there are new commits
|
||||
then
|
||||
logger -t httpd "Changes found; merging now"
|
||||
cd ${GIT_PATH} && git merge origin/main
|
||||
cd ${GIT_PATH} && git merge origin/${GIT_BRANCH}
|
||||
if [[ $? -eq 0 ]]; then
|
||||
logger -t httpdMerge "Merge succeeded: different files edited."
|
||||
else
|
||||
logger -t httpdMerge "First merge unsuccessful: same file modified."
|
||||
git merge --abort # Returns to pre-merge state.
|
||||
git stash
|
||||
git merge origin/main # This should be a fast-forward merge.
|
||||
git merge origin/${GIT_BRANCH} # This should be a fast-forward merge.
|
||||
git stash apply # Keeps stash on top of stack, in case the apply fails.
|
||||
if [[ $? -eq 0 ]]; then
|
||||
logger -t httpdMerge "Second merge success: merge of httpd remote to local successful, and previous working directory changes restored."
|
||||
@@ -47,6 +54,9 @@ then
|
||||
fi
|
||||
fi
|
||||
sleep 2
|
||||
${COMMAND_ON_COMPLETION}
|
||||
fi
|
||||
|
||||
if httpd -t ; then
|
||||
${COMMAND_ON_COMPLETION}
|
||||
else
|
||||
logger -t httpdMerge "Config error"
|
||||
fi
|
||||
fi
|
||||
+1
-1
@@ -11,4 +11,4 @@ WantedBy=httpd.service
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=true
|
||||
ExecStart=/usr/local/bin/sync-repo-and-execute-cmd.sh "/etc/httpd" "echo synced"
|
||||
ExecStart=/usr/local/bin/sync-repo-and-execute-cmd.sh "/etc/httpd" "echo synced" disposable
|
||||
|
||||
@@ -12,7 +12,7 @@ if ! git status; then
|
||||
git init
|
||||
git remote add origin "${REMOTE}"
|
||||
GIT_SSH_COMMAND="ssh -A -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git fetch
|
||||
git checkout main
|
||||
git checkout disposable
|
||||
fi
|
||||
echo "Use Status ${SELF_IP} internal-server-status" > /etc/httpd/conf.d/${STATUS_DEFINITION_FILE}
|
||||
cd /etc/httpd
|
||||
|
||||
+2
-1
@@ -10,7 +10,8 @@ if [[ -z "$selfIp" || -z "$availabilityZone" ]]; then
|
||||
availabilityZone=$(cat /var/cache/availability-zone)
|
||||
fi
|
||||
nlbName="HTTP-to-sapsailing-dot-com"
|
||||
targetGroupArn=$(aws elbv2 describe-target-groups --name "${nlbName}" | jq -r ".TargetGroups[].TargetGroupArn")
|
||||
# First we describe the target groups which are served by a load balancer, which has an ARN containing the substring "loadbalancer/net". Then, we get the tags of these target groups and iterate over the tag descriptions (a list of resourceArns paired with tags), selecting those resources which have a key "allReverseProxies". Finally we extract the resource ARN. Note: .[] means to iterate over an array.
|
||||
targetGroupArn=$(aws elbv2 describe-tags --resource-arns $(aws elbv2 describe-target-groups | jq -r '.TargetGroups | .[] | select(.LoadBalancerArns | .[] | contains("loadbalancer/net") ) | .TargetGroupArn') | jq -r '.TagDescriptions | .[] | select(.Tags | any(.Key=="allReverseProxies") ) | .ResourceArn')
|
||||
if [[ "$#" -eq 0 ]];then
|
||||
echo "Use add-to-nlb OR remove-from-nlb as the first and only argument."
|
||||
exit 2
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
PRIMARY_MASTER=https://paris2024-master.sapsailing.com:9443
|
||||
SECONDARY_MASTER=https://paris2024-secondary-master.sapsailing.com:9443
|
||||
PRIMARY_MASTER=https://palma2024-master.sailing.omegatiming.com:9443
|
||||
SECONDARY_MASTER=https://palma2024-secondary-master.sailing.omegatiming.com:9443
|
||||
COMPARE_OUTPUT=$( /home/sailing/code/java/target/compareServers -ael ${SECONDARY_MASTER} ${PRIMARY_MASTER} )
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "Comparing ${SECONDARY_MASTER} with ${PRIMARY_MASTER} showed differences:
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# Probe for valid AWS MFA token
|
||||
EXPIRY_MARKER_FILE=/tmp/aws-mfa-token-expired
|
||||
aws ec2 describe-instances >/dev/null 2>/dev/null
|
||||
EXIT_CODE=$?
|
||||
if [ "${EXIT_CODE}" = "255" ]; then
|
||||
if [ ! -f "${EXPIRY_MARKER_FILE}" ]; then
|
||||
message="AWS MFA token seems to have expired. aws ec2 describe-instances exited with code ${EXIT_CODE}. Not messaging you again. Try another awsmfa as root@sapsailing.com's tmux."
|
||||
echo "${message}" | notify-operators "AWS MFA token expired"
|
||||
touch "${EXPIRY_MARKER_FILE}"
|
||||
else
|
||||
echo "AWS MFA token expired, but we had sent e-mail already."
|
||||
fi
|
||||
else
|
||||
# Discover replicas
|
||||
IPs=""
|
||||
for i in $( cat `dirname $0`/regions.txt ); do
|
||||
IPs="$( aws --region $i ec2 describe-instances --filters Name=instance-state-name,Values=running Name=tag:sailing-analytics-server,Values=paris2024 | jq .Reservations[].Instances[].PublicIpAddress -r )"
|
||||
if [ -z "${IPs}" ]; then
|
||||
echo "Couldn't find a running replica in region $i" >&2
|
||||
message="Couldn't find a running replica in region $i"
|
||||
echo "${message}" | notify-operators "${message}"
|
||||
else
|
||||
read first others <<<"${IPs}"
|
||||
if ! ssh -o StrictHostKeyChecking=no root@${first} "curl https://palma2024.sailing.omegatiming.com/gwt/status 2>/dev/null >/dev/null"; then
|
||||
echo "Problem reaching palma2024.sailing.omegatiming.com from instance ${first} in region ${i}" >&2
|
||||
message="Problem reaching palma2024.sailing.omegatiming.com from instance ${first} in region ${i}"
|
||||
echo "${message}" | notify-operators "${message}"
|
||||
else
|
||||
echo "Access from region ${i}, IP ${first} OK." >&2
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
#OPERATORS="axel.uhl@sap.com jan.hamann@sapsailing.com alessandro.stoltenberg@sap.com alstolten@gmail.com"
|
||||
OPERATORS="axel.uhl@sap.com jan.hamann@sapsailing.com heather.allard@sap.com finn.huelsbusch@sap.com fabian.kallenbach@sap.com"
|
||||
OPERATORS="axel.uhl@sap.com"
|
||||
logger -t sailing "Sending notification e-mail with subject $1 to ${OPERATORS}"
|
||||
mail -s "$1" ${OPERATORS}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/bin/bash
|
||||
# Upgrades the entire landscape of servers to a new release ${RELEASE}
|
||||
# The procedure works in the following steps:
|
||||
# - patch *.conf files in sap-p1-1:servers/[master|security_service] and sap-p1-2:servers/[secondary_master|replica|master|security_service] so
|
||||
# - patch *.conf files in sap-p1-1:servers/[master|security_service] and sap-p1-2:servers/[secondary_master|master|security_service] so
|
||||
# their INSTALL_FROM_RELEASE points to the new ${RELEASE}
|
||||
# - Install new releases to sap-p1-1:servers/[master|security_service] and sap-p1-2:servers/[secondary_master|replica|master|security_service]
|
||||
# - Install new releases to sap-p1-1:servers/[master|security_service] and sap-p1-2:servers/[secondary_master|master|security_service]
|
||||
# - Update all launch configurations and auto-scaling groups in the cloud (update-launch-configuration.sh)
|
||||
# - Tell all replicas in the cloud to stop replicating (stop-all-cloud-replicas.sh)
|
||||
# - Tell sap-p1-2 secondary_master to restart (./stop; ./start)
|
||||
@@ -29,9 +29,9 @@ if [ $# -eq 0 ]; then
|
||||
echo "Example: $0 -R build-202106041327 -k Jan"
|
||||
|
||||
echo "The procedure works in the following steps:"
|
||||
echo " - patch *.conf files in sap-p1-1:servers/[master|security_service] and sap-p1-2:servers/[secondary_master|replica|master|security_service] so"
|
||||
echo " - patch *.conf files in sap-p1-1:servers/[master|security_service] and sap-p1-2:servers/[secondary_master|master|security_service] so"
|
||||
echo " their INSTALL_FROM_RELEASE points to the new ${RELEASE}"
|
||||
echo " - Install new releases to sap-p1-1:servers/[master|security_service] and sap-p1-2:servers/[secondary_master|replica|master|security_service]"
|
||||
echo " - Install new releases to sap-p1-1:servers/[master|security_service] and sap-p1-2:servers/[secondary_master|master|security_service]"
|
||||
echo " - Update all launch configurations and auto-scaling groups in the cloud (update-launch-configuration.sh)"
|
||||
echo " - Tell all replicas in the cloud to stop replicating (stop-all-cloud-replicas.sh)"
|
||||
echo " - Tell sap-p1-2 secondary_master to restart (./stop; ./start)"
|
||||
@@ -76,7 +76,6 @@ echo " * Patching configurations on sap-p1-1 and sap-p1-2 to new release ${RELEA
|
||||
patch_conf_and_install sap-p1-1 master
|
||||
patch_conf_and_install sap-p1-1 security_service
|
||||
patch_conf_and_install sap-p1-2 secondary_master
|
||||
patch_conf_and_install sap-p1-2 replica
|
||||
patch_conf_and_install sap-p1-2 master
|
||||
patch_conf_and_install sap-p1-2 security_service
|
||||
echo " * Updating launch configurations and auto-scaling groups"
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
<feature
|
||||
id="com.amazon.aws.aws-java-api"
|
||||
label="AWS API"
|
||||
version="2.20.59"
|
||||
version="2.25.11"
|
||||
provider-name="Amazon">
|
||||
|
||||
<plugin
|
||||
id="com.amazon.aws.aws-java-api"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.20.59"
|
||||
version="2.25.11"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.amazon.aws.aws-java-api.source"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.20.59"
|
||||
version="2.25.11"
|
||||
unpack="false"/>
|
||||
|
||||
</feature>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site>
|
||||
<feature url="features/aws-sdk/com.amazon.aws.aws-java-api_2.20.59.jar" id="com.amazon.aws.aws-java-api" version="2.20.59">
|
||||
<feature url="features/aws-sdk/com.amazon.aws.aws-java-api_2.25.11.jar" id="com.amazon.aws.aws-java-api" version="2.25.11">
|
||||
<category name="aws-java-api"/>
|
||||
</feature>
|
||||
<category-def name="com.amazon.aws.aws-java-api" label="aws-java-api"/>
|
||||
|
||||
@@ -5,7 +5,7 @@ repositories {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation platform('software.amazon.awssdk:bom:2.20.59')
|
||||
implementation platform('software.amazon.awssdk:bom:2.25.11')
|
||||
implementation 'software.amazon.awssdk:s3'
|
||||
implementation 'software.amazon.awssdk:lambda'
|
||||
implementation 'software.amazon.awssdk:ec2'
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
</properties>
|
||||
<groupId>com.amazon.aws</groupId>
|
||||
<artifactId>com.amazon.aws.aws-java-api</artifactId>
|
||||
<version>2.20.59</version>
|
||||
<version>2.25.11</version>
|
||||
<packaging>eclipse-plugin</packaging>
|
||||
<build>
|
||||
<plugins>
|
||||
|
||||
@@ -8,6 +8,8 @@ public interface RaceFetcher {
|
||||
|
||||
/**
|
||||
* Not for execution on the client; on the server, returns a <code>TrackedRace</code> object.
|
||||
* The method will not block or wait for the tracked race to appear. If it isn't found (see also
|
||||
* bug 5982) then {@code null} is returned.
|
||||
*/
|
||||
Object getTrackedRace(RegattaAndRaceIdentifier regattaNameAndRaceName);
|
||||
|
||||
|
||||
-5
@@ -9,11 +9,6 @@ public interface RaceIdentifier extends Serializable {
|
||||
|
||||
Object getRace(RaceFetcher raceFetcher);
|
||||
|
||||
/**
|
||||
* Blocks and waits if the tracked race for this race identifier doesn't exist yet.
|
||||
*/
|
||||
Object getTrackedRace(RaceFetcher raceFetcher);
|
||||
|
||||
/**
|
||||
* Immediately returns <code>null</code> if the tracked race for this race identifier doesn't exist yet.
|
||||
*/
|
||||
|
||||
-4
@@ -24,10 +24,6 @@ public class RegattaNameAndRaceName extends RegattaName implements RegattaAndRac
|
||||
return raceFetcher.getRace(this);
|
||||
}
|
||||
@Override
|
||||
public Object getTrackedRace(RaceFetcher raceFetcher) {
|
||||
return raceFetcher.getTrackedRace(this);
|
||||
}
|
||||
@Override
|
||||
public Object getExistingTrackedRace(RaceFetcher raceFetcher) {
|
||||
return raceFetcher.getExistingTrackedRace(this);
|
||||
}
|
||||
|
||||
+1
@@ -154,6 +154,7 @@ public class TracTracConnectivityParamsHandler extends AbstractRaceTrackingConne
|
||||
} else {
|
||||
final String creatorName = SessionUtils.getPrincipal().toString();
|
||||
final TracTracConfigurationImpl tracTracConfiguration = new TracTracConfigurationImpl(creatorName, tractracRace.getEvent().getName(), jsonURL,
|
||||
// FIXME bug5983: stored/live URIs should be captured in the configuration only if they were specified explicitly when the parameters were created
|
||||
(params.getLiveURI() == null ? null : params.getLiveURI().toString()),
|
||||
/* stored URI */ params.isReplayRace(tractracRace) ? null // we mainly want to enable the user to list the event's races again in case they are removed;
|
||||
: (params.getStoredURI() == null ? null : params.getStoredURI().toString()), // live/stored stuff comes from the tracking params
|
||||
|
||||
+5
-1
@@ -219,12 +219,16 @@ public abstract class TrackedRegattaImpl implements TrackedRegatta {
|
||||
public void raceAdded(TrackedRace trackedRace) {
|
||||
synchronized (mutex) { // TODO possible improvement: only notify if trackedRace.getRace() == race; otherwise it cannot have made a difference for getExistingTrackedRace(race)...
|
||||
mutex.notifyAll();
|
||||
} // TODO can't we remove the listener again here?
|
||||
}
|
||||
}
|
||||
};
|
||||
addRaceListener(listener, Optional.empty(), /* synchronous */ false);
|
||||
try {
|
||||
synchronized (mutex) {
|
||||
if (getRegatta().getRaceByName(race.getName()) == null) {
|
||||
throw new IllegalStateException("Race "+race.getName()+" not in regatta "+getRegatta().getName()+
|
||||
"; not blocking for it to appear. It most likely won't");
|
||||
}
|
||||
result = getExistingTrackedRace(race);
|
||||
while (!interrupted && result == null) {
|
||||
try {
|
||||
|
||||
+7
-7
@@ -55,19 +55,19 @@ public class GetSixtyInchStatisticAction implements SailingAction<GetSixtyInchSt
|
||||
final RaceDefinition race = context.getRacingEventService().getRace(identifier);
|
||||
int competitors = com.sap.sse.common.Util.size(race.getCompetitors());
|
||||
legs = race.getCourse().getLegs().size();
|
||||
final DynamicTrackedRace trace = context.getRacingEventService().getTrackedRace(identifier);
|
||||
final DynamicTrackedRace trackedRace = context.getRacingEventService().getTrackedRace(identifier);
|
||||
Duration duration = null;
|
||||
Distance distance = null;
|
||||
TimePoint timePoint;
|
||||
if (trace.getEndOfRace() == null) {
|
||||
if (trackedRace.getEndOfRace() == null) {
|
||||
timePoint = MillisecondsTimePoint.now();
|
||||
duration = estimateDuration(trace, duration, timePoint);
|
||||
distance = estimateDistance(trace, distance, timePoint);
|
||||
duration = estimateDuration(trackedRace, duration, timePoint);
|
||||
distance = estimateDistance(trackedRace, distance, timePoint);
|
||||
} else {
|
||||
final Iterator<Competitor> competitorIterator = trace.getCompetitorsFromBestToWorst(trace.getEndOfRace()).iterator();
|
||||
final Iterator<Competitor> competitorIterator = trackedRace.getCompetitorsFromBestToWorst(trackedRace.getEndOfRace()).iterator();
|
||||
if (competitorIterator.hasNext()) {
|
||||
distance = trace.getDistanceTraveled(competitorIterator.next(), trace.getEndOfRace());
|
||||
duration = trace.getStartOfRace().until(trace.getEndOfRace());
|
||||
distance = trackedRace.getDistanceTraveled(competitorIterator.next(), trackedRace.getEndOfRace());
|
||||
duration = trackedRace.getStartOfRace().until(trackedRace.getEndOfRace());
|
||||
}
|
||||
}
|
||||
return new GetSixtyInchStatisticDTO(competitors, legs, duration, distance);
|
||||
|
||||
+1
-1
@@ -128,7 +128,7 @@ public class QuickRanksLiveCache {
|
||||
public QuickRanksDTO get(RegattaAndRaceIdentifier raceIdentifier) {
|
||||
QuickRanksDTO result = cache.get(raceIdentifier, false);
|
||||
if (result == null) {
|
||||
TrackedRace trackedRace = service.getExistingTrackedRace(raceIdentifier);
|
||||
final TrackedRace trackedRace = service.getExistingTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
trackedRace.addListener(new Listener(raceIdentifier)); // register for all changes that may affect the quick ranks
|
||||
cache.triggerUpdate(raceIdentifier, CalculateOrPurge.CALCULATE);
|
||||
|
||||
+24
-20
@@ -662,7 +662,6 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
* Stops this service and frees its resources. In particular, caching services and threads owned by this service will be
|
||||
* notified to stop their jobs.
|
||||
*/
|
||||
//UNCLEAR
|
||||
public void stop() {
|
||||
quickRanksLiveCache.stop();
|
||||
}
|
||||
@@ -1632,7 +1631,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
|
||||
@Override
|
||||
public SimulatorResultsDTO getSimulatorResults(LegIdentifier legIdentifier) {
|
||||
DynamicTrackedRace trackedRace = getService().getTrackedRace(legIdentifier.getRaceIdentifier());
|
||||
final DynamicTrackedRace trackedRace = getService().getTrackedRace(legIdentifier.getRaceIdentifier());
|
||||
if (trackedRace == null) {
|
||||
throw new IllegalArgumentException("Race for leg " + legIdentifier + " not found!");
|
||||
}
|
||||
@@ -3346,10 +3345,12 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
|
||||
@Override
|
||||
public DynamicTrackedRace getTrackedRace(RegattaAndRaceIdentifier regattaNameAndRaceName) {
|
||||
Regatta regatta = getService().getRegattaByName(regattaNameAndRaceName.getRegattaName());
|
||||
RaceDefinition race = getRaceByName(regatta, regattaNameAndRaceName.getRaceName());
|
||||
DynamicTrackedRace trackedRace = getService().getOrCreateTrackedRegatta(regatta).getTrackedRace(race);
|
||||
getSecurityService().checkCurrentUserReadPermission(trackedRace);
|
||||
final Regatta regatta = getService().getRegattaByName(regattaNameAndRaceName.getRegattaName());
|
||||
final RaceDefinition race = getRaceByName(regatta, regattaNameAndRaceName.getRaceName());
|
||||
final DynamicTrackedRace trackedRace = getService().getOrCreateTrackedRegatta(regatta).getExistingTrackedRace(race);
|
||||
if (trackedRace != null) {
|
||||
getSecurityService().checkCurrentUserReadPermission(trackedRace);
|
||||
}
|
||||
return trackedRace;
|
||||
}
|
||||
|
||||
@@ -5637,9 +5638,9 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
public Boolean checkIfRaceIsTracking(RegattaAndRaceIdentifier race) {
|
||||
getSecurityService().checkCurrentUserReadPermission(race);
|
||||
boolean result = false;
|
||||
DynamicTrackedRace trace = getService().getTrackedRace(race);
|
||||
if (trace != null) {
|
||||
final TrackedRaceStatusEnum status = trace.getStatus().getStatus();
|
||||
DynamicTrackedRace trackedRace = getService().getTrackedRace(race);
|
||||
if (trackedRace != null) {
|
||||
final TrackedRaceStatusEnum status = trackedRace.getStatus().getStatus();
|
||||
if (status == TrackedRaceStatusEnum.LOADING || status == TrackedRaceStatusEnum.TRACKING) {
|
||||
result = true;
|
||||
}
|
||||
@@ -6387,22 +6388,25 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
|
||||
@Override
|
||||
public boolean canSliceRace(RegattaAndRaceIdentifier raceIdentifier) {
|
||||
final boolean result;
|
||||
final Regatta regatta = getService().getRegattaByName(raceIdentifier.getRegattaName());
|
||||
final Leaderboard regattaLeaderboard = getService().getLeaderboardByName(raceIdentifier.getRegattaName());
|
||||
final DynamicTrackedRace trackedRace = getService().getTrackedRace(raceIdentifier);
|
||||
getSecurityService().checkCurrentUserUpdatePermission(raceIdentifier);
|
||||
getSecurityService().checkCurrentUserUpdatePermission(regattaLeaderboard);
|
||||
getSecurityService().checkCurrentUserUpdatePermission(regatta);
|
||||
|
||||
final boolean result;
|
||||
if (regatta == null || !(regattaLeaderboard instanceof RegattaLeaderboard) || trackedRace == null
|
||||
|| trackedRace.getStartOfTracking() == null || !isSmartphoneTrackingEnabled(trackedRace)) {
|
||||
if (trackedRace == null ) {
|
||||
result = false;
|
||||
} else {
|
||||
final Pair<RaceColumn, Fleet> raceColumnAndFleetOfRaceToSlice = regattaLeaderboard
|
||||
.getRaceColumnAndFleet(trackedRace);
|
||||
result = (raceColumnAndFleetOfRaceToSlice != null); // is the TrackedRace associated to the given
|
||||
// RegattaLeaderboard?
|
||||
getSecurityService().checkCurrentUserUpdatePermission(raceIdentifier);
|
||||
getSecurityService().checkCurrentUserUpdatePermission(regattaLeaderboard);
|
||||
getSecurityService().checkCurrentUserUpdatePermission(regatta);
|
||||
if (regatta == null || !(regattaLeaderboard instanceof RegattaLeaderboard) || trackedRace == null
|
||||
|| trackedRace.getStartOfTracking() == null || !isSmartphoneTrackingEnabled(trackedRace)) {
|
||||
result = false;
|
||||
} else {
|
||||
final Pair<RaceColumn, Fleet> raceColumnAndFleetOfRaceToSlice = regattaLeaderboard
|
||||
.getRaceColumnAndFleet(trackedRace);
|
||||
result = (raceColumnAndFleetOfRaceToSlice != null); // is the TrackedRace associated to the given
|
||||
// RegattaLeaderboard?
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+16
-11
@@ -2105,11 +2105,13 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili
|
||||
final List<DynamicTrackedRace> trackedRaces = new ArrayList<>();
|
||||
if (selectedRaces != null && !selectedRaces.isEmpty()) {
|
||||
for (RaceDTO raceDTO : selectedRaces) {
|
||||
DynamicTrackedRace trackedRace = getTrackedRace(raceDTO.getRaceIdentifier());
|
||||
// In case the user selected a distinct set of races, we want the call to completely fail if
|
||||
// tracking wind isn't allowed for at least one race
|
||||
getSecurityService().checkCurrentUserUpdatePermission(trackedRace);
|
||||
trackedRaces.add(trackedRace);
|
||||
final DynamicTrackedRace trackedRace = getTrackedRace(raceDTO.getRaceIdentifier());
|
||||
if (trackedRace != null) {
|
||||
// In case the user selected a distinct set of races, we want the call to completely fail if
|
||||
// tracking wind isn't allowed for at least one race
|
||||
getSecurityService().checkCurrentUserUpdatePermission(trackedRace);
|
||||
trackedRaces.add(trackedRace);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (DynamicTrackedRace race : getAllTrackedRaces()) {
|
||||
@@ -2601,11 +2603,13 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili
|
||||
public RaceDTO setStartTimeReceivedForRace(RaceIdentifier raceIdentifier, Date newStartTimeReceived) {
|
||||
RegattaNameAndRaceName regattaAndRaceIdentifier = new RegattaNameAndRaceName(raceIdentifier.getRegattaName(),
|
||||
raceIdentifier.getRaceName());
|
||||
DynamicTrackedRace trackedRace = getService().getTrackedRace(regattaAndRaceIdentifier);
|
||||
getSecurityService().checkCurrentUserUpdatePermission(trackedRace);
|
||||
trackedRace.setStartTimeReceived(
|
||||
newStartTimeReceived == null ? null : new MillisecondsTimePoint(newStartTimeReceived));
|
||||
return baseDomainFactory.createRaceDTO(getService(), false, regattaAndRaceIdentifier, trackedRace);
|
||||
final DynamicTrackedRace trackedRace = getService().getTrackedRace(regattaAndRaceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
getSecurityService().checkCurrentUserUpdatePermission(trackedRace);
|
||||
trackedRace.setStartTimeReceived(
|
||||
newStartTimeReceived == null ? null : new MillisecondsTimePoint(newStartTimeReceived));
|
||||
}
|
||||
return trackedRace == null ? null : baseDomainFactory.createRaceDTO(getService(), false, regattaAndRaceIdentifier, trackedRace);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -2958,6 +2962,8 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili
|
||||
throw new ServiceException(serverStringMessages.get(locale, "slicingRaceColumnAlreadyUsedThe"));
|
||||
}
|
||||
final DynamicTrackedRace trackedRaceToSlice = getService().getTrackedRace(raceIdentifier);
|
||||
// If tracked race isn't found, a NullPointerException will be thrown next, and that's okay because
|
||||
// it's a bit unusual to not find a race that is just about to be sliced. We couldn't continue anyway.
|
||||
final TimePoint startOfTrackingOfRaceToSlice = trackedRaceToSlice.getStartOfTracking();
|
||||
final TimePoint endOfTrackingOfRaceToSlice = trackedRaceToSlice.getEndOfTracking();
|
||||
if (sliceFrom == null || sliceTo == null || startOfTrackingOfRaceToSlice.after(sliceFrom)
|
||||
@@ -2997,7 +3003,6 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili
|
||||
hasFinishingTime = false;
|
||||
hasFinishedTime = false;
|
||||
}
|
||||
|
||||
// Only wind fixes in the new tracking interval as well as the best fallback fixes are added to the new RaceLog
|
||||
final LogEventTimeRangeWithFallbackFilter<RaceLogWindFixEvent> windFixEvents = new LogEventTimeRangeWithFallbackFilter<>(
|
||||
timeRange);
|
||||
|
||||
@@ -8,7 +8,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
||||
Require-Bundle: com.sap.sailing.domain.common,
|
||||
org.junit;bundle-version="4.8.2",
|
||||
com.amazon.aws.aws-java-api;bundle-version="2.17.124",
|
||||
redisson;bundle-version="3.17.7",
|
||||
redisson;bundle-version="3.27.1",
|
||||
com.amazonaws.aws-lambda-java-core;bundle-version="1.2.1"
|
||||
Bundle-ActivationPolicy: lazy
|
||||
Import-Package: javax.servlet;version="3.1.0"
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
<dependency>
|
||||
<groupId>org.redisson</groupId>
|
||||
<artifactId>redisson</artifactId>
|
||||
<version>3.14.0</version>
|
||||
<version>3.27.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
|
||||
+2
-2
@@ -7,11 +7,11 @@ public interface Configuration {
|
||||
* This host is only reachable through VPC and therefore one needs to ensure that the Lambda has all relevant
|
||||
* permissions
|
||||
*/
|
||||
String[] REDIS_ENDPOINTS = { "redis://fixingestionrediscache-serverless-cvoblp.serverless.euw2.cache.amazonaws.com:6379" };
|
||||
String[] REDIS_ENDPOINTS = { "rediss://fixingestionrediscache-serverless-cvoblp.serverless.euw2.cache.amazonaws.com:6379" };
|
||||
String REDIS_MAP_NAME = "endpoints";
|
||||
|
||||
Region S3_REGION = Region.EU_WEST_2;
|
||||
String S3_BUCKET_NAME = "sapsailing-gps-fixes";
|
||||
|
||||
int TIMEOUT_IN_SECONDS_WHEN_DISPATCHING_TO_ENDPOINT = 3;
|
||||
int TIMEOUT_IN_SECONDS_WHEN_DISPATCHING_TO_ENDPOINT = 30;
|
||||
}
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ public class EndpointRegistrationLambda implements RequestStreamHandler {
|
||||
outputAsStream.write(successResponse.getBytes());
|
||||
} catch (ParseException | JsonDeserializationException e) {
|
||||
context.getLogger().log("Exception trying to deserialize JSON input: " + e.getMessage());
|
||||
} catch (IOException ex) {
|
||||
} catch (Exception ex) {
|
||||
context.getLogger().log(ex.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
|
||||
+23
-20
@@ -70,20 +70,19 @@ public class FixIngestionLambda implements RequestStreamHandler {
|
||||
});
|
||||
final List<EndpointDTO> listOfEndpointsToTrigger = cacheMap.get(deviceIdentifier.getStringRepresentation());
|
||||
if (listOfEndpointsToTrigger != null) {
|
||||
final List<EndpointDTO> endpointsToTrigger = listOfEndpointsToTrigger;
|
||||
for (final EndpointDTO endpoint : endpointsToTrigger) {
|
||||
for (final EndpointDTO endpoint : listOfEndpointsToTrigger) {
|
||||
dispatchToSubscribersTask.submit(() -> {
|
||||
dispatchToSubscribers(endpoint, bodyAsBytes);
|
||||
});
|
||||
}
|
||||
// wait for tasks to complete for <number of end-points>*<timeout for connection>+<ramp-up time>
|
||||
dispatchToSubscribersTask.awaitQuiescence(
|
||||
(endpointsToTrigger.size() * Configuration.TIMEOUT_IN_SECONDS_WHEN_DISPATCHING_TO_ENDPOINT) + 2,
|
||||
TimeUnit.SECONDS);
|
||||
} else {
|
||||
logger.info("No endpoint has been configured for Identifier " + deviceIdentifier.getStringRepresentation());
|
||||
logger.info("No endpoint has been configured for identifier " + deviceIdentifier.getStringRepresentation());
|
||||
}
|
||||
String successResponse = awsInOut.createJsonResponse(deviceIdentifier.getStringRepresentation()).toJSONString();
|
||||
// wait for tasks to complete for <number of end-points>*<timeout for connection>+<ramp-up time>
|
||||
dispatchToSubscribersTask.awaitQuiescence(
|
||||
(listOfEndpointsToTrigger==null?0:listOfEndpointsToTrigger.size() * Configuration.TIMEOUT_IN_SECONDS_WHEN_DISPATCHING_TO_ENDPOINT) + 2,
|
||||
TimeUnit.SECONDS);
|
||||
final String successResponse = awsInOut.createJsonResponse(deviceIdentifier.getStringRepresentation()).toJSONString();
|
||||
logger.info(successResponse);
|
||||
outputAsStream.write(successResponse.getBytes());
|
||||
} catch (ParseException | JsonDeserializationException e) {
|
||||
@@ -106,9 +105,8 @@ public class FixIngestionLambda implements RequestStreamHandler {
|
||||
|
||||
private void dispatchToSubscribers(final EndpointDTO endpoint, final byte[] jsonAsBytes) {
|
||||
logger.info("Connecting to endpoint " + endpoint.getEndpointCallbackUrl() + " with ID " + endpoint.getEndpointUuid());
|
||||
URL endpointUrl;
|
||||
try {
|
||||
endpointUrl = new URL(endpoint.getEndpointCallbackUrl());
|
||||
final URL endpointUrl = new URL(endpoint.getEndpointCallbackUrl());
|
||||
try {
|
||||
final HttpURLConnection connectionToEndpoint = (HttpURLConnection) endpointUrl.openConnection();
|
||||
connectionToEndpoint.setRequestMethod("POST");
|
||||
@@ -134,16 +132,21 @@ public class FixIngestionLambda implements RequestStreamHandler {
|
||||
|
||||
private void storeFixFileToS3(final DeviceIdentifier deviceIdentifier, final List<GPSFixMoving> newFixes)
|
||||
throws IOException {
|
||||
final String dataAsString = newFixes.toString();
|
||||
logger.info("Data to write: " + dataAsString);
|
||||
for (GPSFixMoving fix : newFixes) {
|
||||
final String destinationKey = s3FixStorageStructure.generateKeyForSingleFix(deviceIdentifier, fix.getTimePoint());
|
||||
logger.info("Location: " + destinationKey);
|
||||
final PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket(Configuration.S3_BUCKET_NAME)
|
||||
.key(destinationKey).contentType("application/json").build();
|
||||
final JSONObject serializedFix = gpsFixSerializer.serialize(fix);
|
||||
s3Client.putObject(putObjectRequest, RequestBody.fromString(serializedFix.toJSONString()));
|
||||
try {
|
||||
final String dataAsString = newFixes.toString();
|
||||
logger.info("Data to write: " + dataAsString);
|
||||
for (GPSFixMoving fix : newFixes) {
|
||||
final String destinationKey = s3FixStorageStructure.generateKeyForSingleFix(deviceIdentifier, fix.getTimePoint());
|
||||
logger.info("Location: " + destinationKey);
|
||||
final PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket(Configuration.S3_BUCKET_NAME)
|
||||
.key(destinationKey).contentType("application/json").build();
|
||||
final JSONObject serializedFix = gpsFixSerializer.serialize(fix);
|
||||
s3Client.putObject(putObjectRequest, RequestBody.fromString(serializedFix.toJSONString()));
|
||||
}
|
||||
logger.info("Finished putting object into S3");
|
||||
} catch (Throwable e) {
|
||||
logger.log(Level.SEVERE, "Error writing GPS fix to S3: "+e.getMessage(), e);
|
||||
throw e;
|
||||
}
|
||||
logger.info("Finished putting object into S3");
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.ingestion;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.redisson.Redisson;
|
||||
@@ -14,7 +15,7 @@ public class RedisUtils {
|
||||
|
||||
static {
|
||||
final Config redisConfiguration = new Config();
|
||||
redisConfiguration.useReplicatedServers().addNodeAddress(Configuration.REDIS_ENDPOINTS);
|
||||
redisConfiguration.useClusterServers().setNodeAddresses(Arrays.asList(Configuration.REDIS_ENDPOINTS));
|
||||
redisClient = Redisson.create(redisConfiguration);
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -10,9 +10,10 @@ import com.sap.sailing.domain.racelogtracking.impl.SmartphoneUUIDIdentifierImpl;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.TimeRange;
|
||||
import com.sap.sse.common.impl.MillisecondsDurationImpl;
|
||||
import com.sap.sse.common.impl.TimeRangeImpl;
|
||||
|
||||
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
|
||||
|
||||
/**
|
||||
* This class defines the organization structure of fixes on the S3 storage and is the foundation for all the AWS Lambda
|
||||
* operations. The basic structure distinguishes single fixes which are inserted by the {@link FixIngestionLambda} and
|
||||
@@ -35,7 +36,7 @@ public class S3FixStorageStructure {
|
||||
private static final String SINGLE_FIX_PREFIX = "ingestion";
|
||||
private static final String COLLECTION_PREFIX = "collection";
|
||||
private static final String S3_DELIMITER = "/";
|
||||
private static final Duration COLLECTION_DURATION = new MillisecondsDurationImpl(600_000);
|
||||
private static final Duration COLLECTION_DURATION = Duration.ONE_MINUTE.times(10l);
|
||||
private static final int SINGLE_FIX_BATCH_SIZE = 10;
|
||||
|
||||
/**
|
||||
@@ -205,7 +206,7 @@ public class S3FixStorageStructure {
|
||||
final String collectionName = String.format("%02d:%02d:%02d.%03d-UTC.json", calendar.get(Calendar.HOUR_OF_DAY),
|
||||
calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), calendar.get(Calendar.MILLISECOND));
|
||||
final String year = String.format("%04d", calendar.get(Calendar.YEAR));
|
||||
final String month = String.format("%02d", calendar.get(Calendar.MONTH));
|
||||
final String month = String.format("%02d", calendar.get(Calendar.MONTH)+1);
|
||||
final String dayOfMonth = String.format("%02d", calendar.get(Calendar.DATE));
|
||||
final String generatedKey = combineElementsToKey(prefix, deviceIdentifier.getStringRepresentation(), year,
|
||||
month, dayOfMonth, collectionName);
|
||||
|
||||
+1
-1
@@ -480,7 +480,7 @@ public class LandscapeServiceImpl implements LandscapeService {
|
||||
Util.addAll(eids, eventIDs);
|
||||
}
|
||||
final ReverseProxy<String, SailingAnalyticsMetrics, SailingAnalyticsProcess<String>, RotatingFileBasedLog> reverseProxyCluster =
|
||||
getLandscape().getReverseProxyCluster(region);
|
||||
getLandscape().getCentralReverseProxy(region);
|
||||
// TODO bug5311: when refactoring this for general scope migration, moving to a dedicated replica set will not require this
|
||||
// TODO bug5311: when refactoring this for general scope migration, moving into a cold storage server other than ARCHIVE will require ALBToReverseProxyRedirectMapper instead
|
||||
logger.info("Adding reverse proxy rules for migrated content pointing to ARCHIVE");
|
||||
|
||||
-11
@@ -10,7 +10,6 @@ import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tractracadapter.TracTracAdapterFactory;
|
||||
import com.sap.sailing.server.interfaces.RacingEventService;
|
||||
import com.sap.sse.InvalidDateException;
|
||||
@@ -135,16 +134,6 @@ public abstract class SailingServerHttpServlet extends HttpServlet {
|
||||
return timePoint;
|
||||
}
|
||||
|
||||
protected TrackedRace getTrackedRace(HttpServletRequest req) {
|
||||
Regatta regatta = getRegatta(req);
|
||||
RaceDefinition race = getRaceDefinition(req);
|
||||
TrackedRace trackedRace = null;
|
||||
if (regatta != null && race != null) {
|
||||
trackedRace = getService().getOrCreateTrackedRegatta(regatta).getTrackedRace(race);
|
||||
}
|
||||
return trackedRace;
|
||||
}
|
||||
|
||||
protected TypeBasedServiceFinderFactory getServiceFinderFactory() {
|
||||
return serviceFinderFactory;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1429,7 +1429,7 @@ public class RegattasResource extends AbstractSailingServerResource {
|
||||
if (race == null) {
|
||||
response = getBadRaceErrorResponse(regattaName, raceName);
|
||||
} else {
|
||||
DynamicTrackedRace trackedRace = getService().getTrackedRace(regatta, race);
|
||||
final DynamicTrackedRace trackedRace = getService().getTrackedRace(regatta, race);
|
||||
if (trackedRace != null) {
|
||||
TargetTimeInfo targetTime;
|
||||
try {
|
||||
|
||||
+4
-1
@@ -107,7 +107,10 @@ public class WindResource extends AbstractSailingServerResource {
|
||||
RegattaNameAndRaceName identifier = new RegattaNameAndRaceName(regattaName, raceName);
|
||||
// add wind only to those races the subject is permitted to update
|
||||
if (getSecurityService().hasCurrentUserUpdatePermission(identifier)) {
|
||||
result.add(new RaceIdentifierAndTrackedRace(identifier, getService().getTrackedRace(identifier)));
|
||||
final DynamicTrackedRace trackedRace = getService().getTrackedRace(identifier);
|
||||
if (trackedRace != null) {
|
||||
result.add(new RaceIdentifierAndTrackedRace(identifier, trackedRace));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
+26
-23
@@ -365,31 +365,34 @@ public class ExpeditionAllInOneImporter {
|
||||
securityService.checkCurrentUserExplicitPermissions(service.getRegatta(new RegattaName(regattaNameAndleaderboardName)), DefaultActions.UPDATE);
|
||||
securityService.checkCurrentUserExplicitPermissions(service.getLeaderboardByName(regattaNameAndleaderboardName), DefaultActions.UPDATE);
|
||||
if (importMode == ImportMode.NEW_COMPETITOR) {
|
||||
securityService.checkCurrentUserExplicitPermissions(service.getTrackedRace(new RegattaNameAndRaceName(regattaNameAndleaderboardName, trackedRaceName)), DefaultActions.UPDATE);
|
||||
final TimePointsOfFirstAndLastFix firstAndLastFixAt = importFixes(filenameWithSuffix, fileItem, jsonHolderForGpsFixImport, jsonHolderForSensorFixImport, errors);
|
||||
ensureEventLongEnough(firstAndLastFixAt.getFirstFixAt(), firstAndLastFixAt.getLastFixAt(), eventId);
|
||||
final Iterable<RaceColumn> raceColumns = regattaLeaderboard.getRaceColumns();
|
||||
if (Util.isEmpty(raceColumns)) {
|
||||
return new ImporterResult(serverStringMessages.get(uiLocale, "allInOneErrorInvalidRace"));
|
||||
}
|
||||
try {
|
||||
for (RaceColumn raceColumn : raceColumns) {
|
||||
final Iterable<? extends Fleet> fleets = raceColumn.getFleets();
|
||||
if (Util.size(fleets) != 1) {
|
||||
return new ImporterResult(serverStringMessages.get(uiLocale, "allInOneErrorSplitFleetNotSupported"));
|
||||
final DynamicTrackedRace trackedRace = service.getTrackedRace(new RegattaNameAndRaceName(regattaNameAndleaderboardName, trackedRaceName));
|
||||
if (trackedRace != null) {
|
||||
securityService.checkCurrentUserExplicitPermissions(trackedRace, DefaultActions.UPDATE);
|
||||
final TimePointsOfFirstAndLastFix firstAndLastFixAt = importFixes(filenameWithSuffix, fileItem, jsonHolderForGpsFixImport, jsonHolderForSensorFixImport, errors);
|
||||
ensureEventLongEnough(firstAndLastFixAt.getFirstFixAt(), firstAndLastFixAt.getLastFixAt(), eventId);
|
||||
final Iterable<RaceColumn> raceColumns = regattaLeaderboard.getRaceColumns();
|
||||
if (Util.isEmpty(raceColumns)) {
|
||||
return new ImporterResult(serverStringMessages.get(uiLocale, "allInOneErrorInvalidRace"));
|
||||
}
|
||||
try {
|
||||
for (RaceColumn raceColumn : raceColumns) {
|
||||
final Iterable<? extends Fleet> fleets = raceColumn.getFleets();
|
||||
if (Util.size(fleets) != 1) {
|
||||
return new ImporterResult(serverStringMessages.get(uiLocale, "allInOneErrorSplitFleetNotSupported"));
|
||||
}
|
||||
final Fleet fleet = fleets.iterator().next();
|
||||
DynamicTrackedRace trackedRaceForColumn = (DynamicTrackedRace) raceColumn.getTrackedRace(fleet);
|
||||
if (trackedRaceForColumn == null) {
|
||||
trackedRaceForColumn = trackRace(regattaLeaderboard, raceColumn, fleet);
|
||||
}
|
||||
trackedRaces.add(trackedRaceForColumn);
|
||||
raceNameRaceColumnNameFleetnameList
|
||||
.add(new Triple<>(trackedRaceForColumn.getRaceIdentifier().getRaceName(),
|
||||
raceColumn.getName(), fleet.getName()));
|
||||
}
|
||||
final Fleet fleet = fleets.iterator().next();
|
||||
DynamicTrackedRace trackedRaceForColumn = (DynamicTrackedRace) raceColumn.getTrackedRace(fleet);
|
||||
if (trackedRaceForColumn == null) {
|
||||
trackedRaceForColumn = trackRace(regattaLeaderboard, raceColumn, fleet);
|
||||
}
|
||||
trackedRaces.add(trackedRaceForColumn);
|
||||
raceNameRaceColumnNameFleetnameList
|
||||
.add(new Triple<>(trackedRaceForColumn.getRaceIdentifier().getRaceName(),
|
||||
raceColumn.getName(), fleet.getName()));
|
||||
} catch (Exception e) {
|
||||
throw new AllInOneImportException(e, errors);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new AllInOneImportException(e, errors);
|
||||
}
|
||||
} else if (importMode == ImportMode.NEW_RACE) {
|
||||
// When uploading files with identical name, the second RaceColumn will be named with the upload time in its name
|
||||
|
||||
+23
-21
@@ -28,32 +28,34 @@ public class TrackFilesExportPostServlet extends SailingServerHttpServlet {
|
||||
private static final Logger log = Logger.getLogger(TrackFilesExportPostServlet.class.toString());
|
||||
|
||||
private TrackedRace getTrackedRace(String regattaString, String raceString) {
|
||||
Regatta regatta = getService().getRegattaByName(regattaString);
|
||||
if (regatta == null)
|
||||
return null;
|
||||
RaceDefinition race = regatta.getRaceByName(raceString);
|
||||
if (race == null)
|
||||
return null;
|
||||
|
||||
return getService().getTrackedRace(regatta, race);
|
||||
final TrackedRace result;
|
||||
final Regatta regatta = getService().getRegattaByName(regattaString);
|
||||
if (regatta == null) {
|
||||
result = null;
|
||||
} else {
|
||||
final RaceDefinition race = regatta.getRaceByName(raceString);
|
||||
if (race == null) {
|
||||
result = null;
|
||||
} else {
|
||||
result = getService().getTrackedRace(regatta, race);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<TrackedRace> getTrackedRaces(String[] regattaRaces) {
|
||||
List<TrackedRace> races = new ArrayList<TrackedRace>();
|
||||
|
||||
final List<TrackedRace> races = new ArrayList<TrackedRace>();
|
||||
for (String regattaRace : regattaRaces) {
|
||||
String[] split = regattaRace.split(":");
|
||||
if (split.length == 0)
|
||||
continue;
|
||||
String regattaString = split[0];
|
||||
String raceString = split[1];
|
||||
TrackedRace trackedRace = getTrackedRace(regattaString, raceString);
|
||||
if (trackedRace == null)
|
||||
continue;
|
||||
|
||||
races.add(trackedRace);
|
||||
final String[] split = regattaRace.split(":");
|
||||
if (split.length != 0) {
|
||||
final String regattaString = split[0];
|
||||
final String raceString = split[1];
|
||||
final TrackedRace trackedRace = getTrackedRace(regattaString, raceString);
|
||||
if (trackedRace != null) {
|
||||
races.add(trackedRace);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return races;
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -144,17 +144,17 @@ public abstract class AbstractWindImporter {
|
||||
if (uploadRequest.races.size() > 0) {
|
||||
for (RegattaAndRaceIdentifier raceEntry : uploadRequest.races) {
|
||||
DynamicTrackedRace trackedRace = service.getTrackedRace(raceEntry);
|
||||
SecurityUtils.getSubject()
|
||||
.checkPermission(trackedRace.getIdentifier().getStringPermission(DefaultActions.UPDATE));
|
||||
if (trackedRace != null) {
|
||||
SecurityUtils.getSubject()
|
||||
.checkPermission(trackedRace.getIdentifier().getStringPermission(DefaultActions.UPDATE));
|
||||
trackedRaces.add(trackedRace);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (Regatta regatta : service.getAllRegattas()) {
|
||||
for (RaceDefinition raceDefinition : regatta.getAllRaces()) {
|
||||
final DynamicTrackedRace trackedRace = service.getTrackedRegatta(regatta).getTrackedRace(raceDefinition);
|
||||
if (SecurityUtils.getSubject()
|
||||
final DynamicTrackedRace trackedRace = service.getTrackedRegatta(regatta).getExistingTrackedRace(raceDefinition);
|
||||
if (trackedRace != null && SecurityUtils.getSubject()
|
||||
.isPermitted(trackedRace.getIdentifier().getStringPermission(DefaultActions.UPDATE))) {
|
||||
trackedRaces.add(trackedRace);
|
||||
}
|
||||
|
||||
+9
-2
@@ -161,11 +161,18 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
@Override
|
||||
RaceDefinition getRace(RegattaAndRaceIdentifier raceIdentifier);
|
||||
|
||||
/**
|
||||
* Looks for a {@link DynamicTrackedRace} inside the {@link TrackedRegatta} identified by {@code regatta},
|
||||
* keyed by the race definition {@code race}. If no such race is found, e.g., because it is still in its "loading"
|
||||
* phase and the {@link TrackedRace} hasn't been created and added to the {@link TrackedRegatta} yet, or because
|
||||
* it is in the process of being removed, with the {@link TrackedRace} already gone but the {@link RaceDefinition}
|
||||
* still available (see also bug 5982), this method will return {@code null} without any waiting or blocking.
|
||||
*/
|
||||
DynamicTrackedRace getTrackedRace(Regatta regatta, RaceDefinition race);
|
||||
|
||||
/**
|
||||
* When the regatta, tracked regatta and race definition are found, this method waits for the
|
||||
* tracked race to appear.
|
||||
* This method does not for the tracked race to appear. If any of regatta, race definition or tracked race are not
|
||||
* found, {@code null} is returned.
|
||||
*/
|
||||
DynamicTrackedRace getTrackedRace(RegattaAndRaceIdentifier raceIdentifier);
|
||||
|
||||
|
||||
+3
-1
@@ -475,6 +475,8 @@ public class ImportMasterDataOperation extends
|
||||
DynamicTrackedRace trackedRace = toState
|
||||
.getTrackedRace((RegattaAndRaceIdentifier) raceIdentifier);
|
||||
raceColumn.setTrackedRace(fleet, trackedRace);
|
||||
// in case the TrackedRace wasn't found (see also bug 5982), at least record the race identifier
|
||||
raceColumn.setRaceIdentifier(fleet, raceIdentifier);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -708,7 +710,7 @@ public class ImportMasterDataOperation extends
|
||||
RaceHandle raceHandle = toState.addRace(/* default */ null, paramToStartTracking, /* do not wait */ -1);
|
||||
final RaceDefinition race = raceHandle.getRace(RaceTracker.TIMEOUT_FOR_RECEIVING_RACE_DEFINITION_IN_MILLISECONDS);
|
||||
if (race != null) {
|
||||
final DynamicTrackedRace trackedRace = raceHandle.getTrackedRegatta().getTrackedRace(race);
|
||||
final DynamicTrackedRace trackedRace = raceHandle.getTrackedRegatta().getTrackedRace(race); // wait/block for tracked race to show up
|
||||
result.add(trackedRace);
|
||||
ensureOwnership(trackedRace.getIdentifier(), securityService);
|
||||
creationCount.addOneTrackedRace(race.getId().toString());
|
||||
|
||||
@@ -34,295 +34,291 @@
|
||||
<stringAttribute key="profilingTraceType-PERFORMANCE_HOTSPOT_TRACE" value="KEY_IGNORE_SLEEPING_THREADS%CTX_KEY%false%CTX_ENTRY%KEY_APPLICATION_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_SESSION_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_ENABLEMENT%CTX_KEY%true%CTX_ENTRY%KEY_USER_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_REQUEST_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_TENANT_FILTER%CTX_KEY%*%CTX_ENTRY%"/>
|
||||
<stringAttribute key="profilingTraceType-SYNCHRONIZATION_TRACE" value="KEY_APPLICATION_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_SESSION_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_ENABLEMENT%CTX_KEY%false%CTX_ENTRY%KEY_USER_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_REQUEST_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_TENANT_FILTER%CTX_KEY%*%CTX_ENTRY%"/>
|
||||
<setAttribute key="selected_target_bundles">
|
||||
<setEntry value="routeconverter@default:default"/>
|
||||
<setEntry value="org.apache.commons.codec@default:default"/>
|
||||
<setEntry value="org.apache.poi@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.schemas@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress@default:default"/>
|
||||
<setEntry value="org.apache.poi.source@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress.source@default:default"/>
|
||||
<setEntry value="org.dom4j@default:default"/>
|
||||
<setEntry value="org.apache.xmlbeans@default:default"/>
|
||||
<setEntry value="org.apache.commons.math@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpclient@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpcore@default:default"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="com.sun.jersey.contribs.jersey-multipart@default:default"/>
|
||||
<setEntry value="javax.validation@default:default"/>
|
||||
<setEntry value="org.apache.commons.fileupload@default:default"/>
|
||||
<setEntry value="org.jvnet.mimepull@default:default"/>
|
||||
<setEntry value="org.apache.commons.math3@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core.source@default:default"/>
|
||||
<setEntry value="org.mongodb.bson@default:default"/>
|
||||
<setEntry value="org.mongodb.bson.source@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.warurl@default:default"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="slf4j.jdk14@default:default"/>
|
||||
<setEntry value="lz4-java@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.command@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.shell@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.http@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.http.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.io@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.io.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml.source@default:default"/>
|
||||
<setEntry value="slf4j.api@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.zxing@default:default"/>
|
||||
<setEntry value="org.apache.commons.io@default:default"/>
|
||||
<setEntry value="jcl.over.slf4j@default:default"/>
|
||||
<setEntry value="com.sun.mail.javax.mail@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.lang@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="jackson-jaxrs@default:default"/>
|
||||
<setEntry value="com.sun.jersey@default:default"/>
|
||||
<setEntry value="javax.ws.rs@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils.source@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.scribe@default:default"/>
|
||||
<setEntry value="org.owasp.encoder@default:default"/>
|
||||
<setEntry value="org.owasp.encoder.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web.source@default:default"/>
|
||||
<setEntry value="jackson-core-asl@default:default"/>
|
||||
<setEntry value="jackson-mapper-asl@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.client@default:default"/>
|
||||
<setEntry value="javax.xml@default:default"/>
|
||||
<setEntry value="com.sun.activation.javax.activation@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.common@2:true"/>
|
||||
<setEntry value="org.eclipse.equinox.console@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.launcher@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.simpleconfigurator@2:true"/>
|
||||
<setEntry value="org.eclipse.osgi@-1:true"/>
|
||||
<setEntry value="org.eclipse.osgi.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.function@default:default"/>
|
||||
<setEntry value="org.osgi.util.function.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.position@default:default"/>
|
||||
<setEntry value="org.osgi.util.position.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml.source@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services.source@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.cm@default:default"/>
|
||||
<setEntry value="com.sun.istack.commons-runtime@default:default"/>
|
||||
<setEntry value="com.sun.xml.bind.jaxb-impl@default:default"/>
|
||||
<setEntry value="javax.xml.stream@default:default"/>
|
||||
<setEntry value="javax.xml.ws@default:default"/>
|
||||
<setEntry value="javax.xml.soap@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.util@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.util.source@default:default"/>
|
||||
<setEntry value="com.chargebee.chargebee-java@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch.source@default:default"/>
|
||||
<setEntry value="bcprov-ext@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.tree@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.tree.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp.source@default:default"/>
|
||||
<setEntry value="org.apache.geronimo.specs.geronimo-jta_1.1_spec@default:default"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle@3:true"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle.source@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-el@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-jsp@default:default"/>
|
||||
<setEntry value="org.eclipse.jdt.core.compiler.batch@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.standard-impl@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.taglibs-standard-spec@default:default"/>
|
||||
<setEntry value="javax.annotation@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi-servlet-api@default:default"/>
|
||||
<setEntry value="org.apache.xalan@default:default"/>
|
||||
<setEntry value="org.apache.xml.serializer@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.event@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.annotations@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.jndi@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.plus@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc.source@default:default"/>
|
||||
<setEntry value="org.osgi.service.component@default:default"/>
|
||||
<setEntry value="org.osgi.service.cm@default:default"/>
|
||||
<setEntry value="org.osgi.util.tracker@default:default"/>
|
||||
<setEntry value="org.osgi.service.event@default:default"/>
|
||||
<setEntry value="org.osgi.service.packageadmin@default:default"/>
|
||||
<setEntry value="org.osgi.service.url@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math.source@default:default"/>
|
||||
<setEntry value="com.google.gson@default:default"/>
|
||||
<setEntry value="com.google.gson.source@default:default"/>
|
||||
</setAttribute>
|
||||
<setEntry value="bcprov-ext@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api.source"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api@default:default"/>
|
||||
<setEntry value="com.chargebee.chargebee-java@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-core@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-data@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-math@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch.source"/>
|
||||
<setEntry value="com.github.mwiede.jsch@default:default"/>
|
||||
<setEntry value="com.google.gson.source"/>
|
||||
<setEntry value="com.google.gson@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client.source"/>
|
||||
<setEntry value="com.rabbitmq.client@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc.source"/>
|
||||
<setEntry value="com.sap.db.jdbc@default:default"/>
|
||||
<setEntry value="com.sun.activation.javax.activation@default:default"/>
|
||||
<setEntry value="com.sun.istack.commons-runtime@default:default"/>
|
||||
<setEntry value="com.sun.jersey.contribs.jersey-multipart@default:default"/>
|
||||
<setEntry value="com.sun.jersey@default:default"/>
|
||||
<setEntry value="com.sun.mail.javax.mail@default:default"/>
|
||||
<setEntry value="com.sun.xml.bind.jaxb-impl@default:default"/>
|
||||
<setEntry value="jackson-core-asl@default:default"/>
|
||||
<setEntry value="jackson-jaxrs@default:default"/>
|
||||
<setEntry value="jackson-mapper-asl@default:default"/>
|
||||
<setEntry value="javax.annotation@default:default"/>
|
||||
<setEntry value="javax.validation@default:default"/>
|
||||
<setEntry value="javax.ws.rs@default:default"/>
|
||||
<setEntry value="javax.xml.soap@default:default"/>
|
||||
<setEntry value="javax.xml.stream@default:default"/>
|
||||
<setEntry value="javax.xml.ws@default:default"/>
|
||||
<setEntry value="javax.xml@default:default"/>
|
||||
<setEntry value="jcl.over.slf4j@default:default"/>
|
||||
<setEntry value="lz4-java@default:default"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle.source"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle@3:true"/>
|
||||
<setEntry value="org.apache.commons.beanutils.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils@default:default"/>
|
||||
<setEntry value="org.apache.commons.codec@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4.source"/>
|
||||
<setEntry value="org.apache.commons.collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress.source"/>
|
||||
<setEntry value="org.apache.commons.compress@default:default"/>
|
||||
<setEntry value="org.apache.commons.fileupload@default:default"/>
|
||||
<setEntry value="org.apache.commons.io@default:default"/>
|
||||
<setEntry value="org.apache.commons.lang@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="org.apache.commons.math3@default:default"/>
|
||||
<setEntry value="org.apache.commons.math@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.command@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.shell@default:default"/>
|
||||
<setEntry value="org.apache.geronimo.specs.geronimo-jta_1.1_spec@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpclient@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpcore@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.schemas@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.source"/>
|
||||
<setEntry value="org.apache.poi.ooxml@default:default"/>
|
||||
<setEntry value="org.apache.poi.source"/>
|
||||
<setEntry value="org.apache.poi@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.scribe@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.zxing@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core.source"/>
|
||||
<setEntry value="org.apache.shiro.core@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache.source"/>
|
||||
<setEntry value="org.apache.shiro.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web.source"/>
|
||||
<setEntry value="org.apache.shiro.web@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.standard-impl@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.taglibs-standard-spec@default:default"/>
|
||||
<setEntry value="org.apache.xalan@default:default"/>
|
||||
<setEntry value="org.apache.xml.serializer@default:default"/>
|
||||
<setEntry value="org.apache.xmlbeans@default:default"/>
|
||||
<setEntry value="org.dom4j@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.cm@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.common@2:true"/>
|
||||
<setEntry value="org.eclipse.equinox.console@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.event@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.launcher@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.simpleconfigurator@2:true"/>
|
||||
<setEntry value="org.eclipse.jdt.core.compiler.batch@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.annotations@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy.source"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.http.source"/>
|
||||
<setEntry value="org.eclipse.jetty.http@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.io.source"/>
|
||||
<setEntry value="org.eclipse.jetty.io@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx.source"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jndi@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi-servlet-api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp@default:false"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.warurl@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.plus@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security.source"/>
|
||||
<setEntry value="org.eclipse.jetty.security@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server.source"/>
|
||||
<setEntry value="org.eclipse.jetty.server@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet.source"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax.source"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.source"/>
|
||||
<setEntry value="org.eclipse.jetty.util@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml.source"/>
|
||||
<setEntry value="org.eclipse.jetty.xml@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services.source"/>
|
||||
<setEntry value="org.eclipse.osgi.services@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.source"/>
|
||||
<setEntry value="org.eclipse.osgi.util.source"/>
|
||||
<setEntry value="org.eclipse.osgi.util@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi@-1:true"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="org.jvnet.mimepull@default:default"/>
|
||||
<setEntry value="org.mongodb.bson.source"/>
|
||||
<setEntry value="org.mongodb.bson@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core.source"/>
|
||||
<setEntry value="org.mongodb.driver-core@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-el@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-jsp@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis.source"/>
|
||||
<setEntry value="org.objectweb.asm.analysis@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons.source"/>
|
||||
<setEntry value="org.objectweb.asm.commons@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.source"/>
|
||||
<setEntry value="org.objectweb.asm.tree.source"/>
|
||||
<setEntry value="org.objectweb.asm.tree@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util.source"/>
|
||||
<setEntry value="org.objectweb.asm.util@default:default"/>
|
||||
<setEntry value="org.objectweb.asm@default:default"/>
|
||||
<setEntry value="org.osgi.service.cm@default:default"/>
|
||||
<setEntry value="org.osgi.service.component@default:default"/>
|
||||
<setEntry value="org.osgi.service.event@default:default"/>
|
||||
<setEntry value="org.osgi.service.packageadmin@default:default"/>
|
||||
<setEntry value="org.osgi.service.url@default:default"/>
|
||||
<setEntry value="org.osgi.util.function.source"/>
|
||||
<setEntry value="org.osgi.util.function@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement.source"/>
|
||||
<setEntry value="org.osgi.util.measurement@default:default"/>
|
||||
<setEntry value="org.osgi.util.position.source"/>
|
||||
<setEntry value="org.osgi.util.position@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise.source"/>
|
||||
<setEntry value="org.osgi.util.promise@default:default"/>
|
||||
<setEntry value="org.osgi.util.tracker@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml.source"/>
|
||||
<setEntry value="org.osgi.util.xml@default:default"/>
|
||||
<setEntry value="org.owasp.encoder.source"/>
|
||||
<setEntry value="org.owasp.encoder@default:default"/>
|
||||
<setEntry value="routeconverter@default:default"/>
|
||||
<setEntry value="slf4j.api@default:default"/>
|
||||
<setEntry value="slf4j.jdk14@default:false"/>
|
||||
</setAttribute>
|
||||
<setAttribute key="selected_workspace_bundles">
|
||||
<setEntry value="com.sap.sailing.geocoding@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain@default:default"/>
|
||||
<setEntry value="com.sap.sailing.news@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.windfinderadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.interfaces@default:default"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="com.sap.sailing.declination@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingreplayadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.gwt.ui@6:true"/>
|
||||
<setEntry value="com.sap.sailing.udpconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.simulator@default:default"/>
|
||||
<setEntry value="com.sap.sailing.www@5:true"/>
|
||||
<setEntry value="com.sap.sailing.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.kiworesultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.ess40.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.freg.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.barbados.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailwave.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailti.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.yachtscoring.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.velum.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.monitoring@7:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.racelogtrackingadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.deckmanadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.oceanraceadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.structureimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization@default:default"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars@5:true"/>
|
||||
<setEntry value="com.sap.sailing.windestimation@5:true"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.xrr.schema@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.trackfiles@default:default"/>
|
||||
<setEntry value="com.sap.sailing.competitorimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining.provider@default:default"/>
|
||||
<setEntry value="com.sap.sailing.grib@default:default"/>
|
||||
<setEntry value="com.sap.sailing.nmeaconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.expeditionadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.bravoadapter@5:true"/>
|
||||
<setEntry value="net.sf.marineapi@default:default"/>
|
||||
<setEntry value="com.sap.sailing.routeconverterjava11extension@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.hanaexport@5:true"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt@default:default"/>
|
||||
<setEntry value="com.google.gwt.servlet@default:default"/>
|
||||
<setEntry value="com.sap.sse.security@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.ui@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.userstore.mongodb@4:true"/>
|
||||
<setEntry value="com.sap.sse@default:default"/>
|
||||
<setEntry value="com.sap.sse.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.annotations@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt.adminconsole@default:default"/>
|
||||
<setEntry value="com.sap.sse.mongodb@default:default"/>
|
||||
<setEntry value="com.sap.sse.operationaltransformation@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication@6:true"/>
|
||||
<setEntry value="com.sap.sse.filestorage@4:true"/>
|
||||
<setEntry value="com.sap.sse.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sse.mail@5:true"/>
|
||||
<setEntry value="com.sap.sse.threadmanager@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.common@default:default"/>
|
||||
<setEntry value="org.json.simple@default:default"/>
|
||||
<setEntry value="org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<setEntry value="com.googlecode.java-diff-utils@default:default"/>
|
||||
<setEntry value="org.mp4parser.isoparser@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sse.security.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws@4:true"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.debranding@default:default"/>
|
||||
<setEntry value="elemental2@default:default"/>
|
||||
</setAttribute>
|
||||
<setEntry value="com.google.gwt.servlet@default:default"/>
|
||||
<setEntry value="com.googlecode.java-diff-utils@default:default"/>
|
||||
<setEntry value="com.sap.sailing.barbados.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.competitorimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining.provider@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.declination@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.bravoadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.deckmanadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.expeditionadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.oceanraceadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.racelogtrackingadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingreplayadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.windfinderadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain@default:default"/>
|
||||
<setEntry value="com.sap.sailing.ess40.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.freg.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.geocoding@default:default"/>
|
||||
<setEntry value="com.sap.sailing.grib@default:default"/>
|
||||
<setEntry value="com.sap.sailing.gwt.ui@6:true"/>
|
||||
<setEntry value="com.sap.sailing.hanaexport@5:true"/>
|
||||
<setEntry value="com.sap.sailing.kiworesultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail@default:default"/>
|
||||
<setEntry value="com.sap.sailing.monitoring@7:true"/>
|
||||
<setEntry value="com.sap.sailing.news@4:true"/>
|
||||
<setEntry value="com.sap.sailing.nmeaconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.polars@5:true"/>
|
||||
<setEntry value="com.sap.sailing.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.routeconverterjava11extension@default:false"/>
|
||||
<setEntry value="com.sap.sailing.sailti.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailwave.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.interface@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.trackfiles@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.shared.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.simulator@default:default"/>
|
||||
<setEntry value="com.sap.sailing.udpconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.velum.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.windestimation@5:true"/>
|
||||
<setEntry value="com.sap.sailing.www@5:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.schema@default:default"/>
|
||||
<setEntry value="com.sap.sailing.xrr.structureimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.yachtscoring.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sse.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.annotations@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.ui@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining@default:default"/>
|
||||
<setEntry value="com.sap.sse.debranding@default:default"/>
|
||||
<setEntry value="com.sap.sse.filestorage@4:true"/>
|
||||
<setEntry value="com.sap.sse.gwt.adminconsole@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws@4:true"/>
|
||||
<setEntry value="com.sap.sse.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sse.mail@5:true"/>
|
||||
<setEntry value="com.sap.sse.mongodb@default:default"/>
|
||||
<setEntry value="com.sap.sse.operationaltransformation@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sse.security.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.ui@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.userstore.mongodb@4:true"/>
|
||||
<setEntry value="com.sap.sse.security@default:default"/>
|
||||
<setEntry value="com.sap.sse.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sse.threadmanager@default:default"/>
|
||||
<setEntry value="com.sap.sse@default:default"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="elemental2@default:default"/>
|
||||
<setEntry value="net.sf.marineapi@default:default"/>
|
||||
<setEntry value="org.json.simple@default:default"/>
|
||||
<setEntry value="org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<setEntry value="org.mp4parser.isoparser@default:default"/>
|
||||
</setAttribute>
|
||||
<booleanAttribute key="show_selected_only" value="false"/>
|
||||
<booleanAttribute key="tracing" value="false"/>
|
||||
<booleanAttribute key="useCustomFeatures" value="false"/>
|
||||
|
||||
@@ -25,295 +25,291 @@
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
|
||||
<stringAttribute key="pde.version" value="3.3"/>
|
||||
<setAttribute key="selected_target_bundles">
|
||||
<setEntry value="routeconverter@default:default"/>
|
||||
<setEntry value="org.apache.commons.codec@default:default"/>
|
||||
<setEntry value="org.apache.poi@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.schemas@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress@default:default"/>
|
||||
<setEntry value="org.apache.poi.source@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress.source@default:default"/>
|
||||
<setEntry value="org.dom4j@default:default"/>
|
||||
<setEntry value="org.apache.xmlbeans@default:default"/>
|
||||
<setEntry value="org.apache.commons.math@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpclient@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpcore@default:default"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="com.sun.jersey.contribs.jersey-multipart@default:default"/>
|
||||
<setEntry value="javax.validation@default:default"/>
|
||||
<setEntry value="org.apache.commons.fileupload@default:default"/>
|
||||
<setEntry value="org.jvnet.mimepull@default:default"/>
|
||||
<setEntry value="org.apache.commons.math3@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core.source@default:default"/>
|
||||
<setEntry value="org.mongodb.bson@default:default"/>
|
||||
<setEntry value="org.mongodb.bson.source@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.warurl@default:default"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="slf4j.jdk14@default:default"/>
|
||||
<setEntry value="lz4-java@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.command@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.shell@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.http@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.http.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.io@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.io.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml.source@default:default"/>
|
||||
<setEntry value="slf4j.api@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.zxing@default:default"/>
|
||||
<setEntry value="org.apache.commons.io@default:default"/>
|
||||
<setEntry value="jcl.over.slf4j@default:default"/>
|
||||
<setEntry value="com.sun.mail.javax.mail@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.lang@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="jackson-jaxrs@default:default"/>
|
||||
<setEntry value="com.sun.jersey@default:default"/>
|
||||
<setEntry value="javax.ws.rs@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils.source@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.scribe@default:default"/>
|
||||
<setEntry value="org.owasp.encoder@default:default"/>
|
||||
<setEntry value="org.owasp.encoder.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache.source@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web.source@default:default"/>
|
||||
<setEntry value="jackson-core-asl@default:default"/>
|
||||
<setEntry value="jackson-mapper-asl@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.client@default:default"/>
|
||||
<setEntry value="javax.xml@default:default"/>
|
||||
<setEntry value="com.sun.activation.javax.activation@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.common@2:true"/>
|
||||
<setEntry value="org.eclipse.equinox.console@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.launcher@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.simpleconfigurator@2:true"/>
|
||||
<setEntry value="org.eclipse.osgi@-1:true"/>
|
||||
<setEntry value="org.eclipse.osgi.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.function@default:default"/>
|
||||
<setEntry value="org.osgi.util.function.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.position@default:default"/>
|
||||
<setEntry value="org.osgi.util.position.source@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml.source@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services.source@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.cm@default:default"/>
|
||||
<setEntry value="com.sun.istack.commons-runtime@default:default"/>
|
||||
<setEntry value="com.sun.xml.bind.jaxb-impl@default:default"/>
|
||||
<setEntry value="javax.xml.stream@default:default"/>
|
||||
<setEntry value="javax.xml.ws@default:default"/>
|
||||
<setEntry value="javax.xml.soap@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.util@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.util.source@default:default"/>
|
||||
<setEntry value="com.chargebee.chargebee-java@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch.source@default:default"/>
|
||||
<setEntry value="bcprov-ext@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.tree@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.tree.source@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp.source@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp.source@default:default"/>
|
||||
<setEntry value="org.apache.geronimo.specs.geronimo-jta_1.1_spec@default:default"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle@3:true"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle.source@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-el@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-jsp@default:default"/>
|
||||
<setEntry value="org.eclipse.jdt.core.compiler.batch@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.standard-impl@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.taglibs-standard-spec@default:default"/>
|
||||
<setEntry value="javax.annotation@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi-servlet-api@default:default"/>
|
||||
<setEntry value="org.apache.xalan@default:default"/>
|
||||
<setEntry value="org.apache.xml.serializer@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.event@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.annotations@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.jndi@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.plus@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc.source@default:default"/>
|
||||
<setEntry value="org.osgi.service.component@default:default"/>
|
||||
<setEntry value="org.osgi.service.cm@default:default"/>
|
||||
<setEntry value="org.osgi.util.tracker@default:default"/>
|
||||
<setEntry value="org.osgi.service.event@default:default"/>
|
||||
<setEntry value="org.osgi.service.packageadmin@default:default"/>
|
||||
<setEntry value="org.osgi.service.url@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph.source@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math.source@default:default"/>
|
||||
<setEntry value="com.google.gson@default:default"/>
|
||||
<setEntry value="com.google.gson.source@default:default"/>
|
||||
</setAttribute>
|
||||
<setEntry value="bcprov-ext@default:default"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api.source"/>
|
||||
<setEntry value="com.amazon.aws.aws-java-api@default:default"/>
|
||||
<setEntry value="com.chargebee.chargebee-java@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-core.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-core@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-data.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-data@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-graph@default:default"/>
|
||||
<setEntry value="com.github.haifengl.smile-math.source"/>
|
||||
<setEntry value="com.github.haifengl.smile-math@default:default"/>
|
||||
<setEntry value="com.github.mwiede.jsch.source"/>
|
||||
<setEntry value="com.github.mwiede.jsch@default:default"/>
|
||||
<setEntry value="com.google.gson.source"/>
|
||||
<setEntry value="com.google.gson@default:default"/>
|
||||
<setEntry value="com.rabbitmq.client.source"/>
|
||||
<setEntry value="com.rabbitmq.client@default:default"/>
|
||||
<setEntry value="com.sap.db.jdbc.source"/>
|
||||
<setEntry value="com.sap.db.jdbc@default:default"/>
|
||||
<setEntry value="com.sun.activation.javax.activation@default:default"/>
|
||||
<setEntry value="com.sun.istack.commons-runtime@default:default"/>
|
||||
<setEntry value="com.sun.jersey.contribs.jersey-multipart@default:default"/>
|
||||
<setEntry value="com.sun.jersey@default:default"/>
|
||||
<setEntry value="com.sun.mail.javax.mail@default:default"/>
|
||||
<setEntry value="com.sun.xml.bind.jaxb-impl@default:default"/>
|
||||
<setEntry value="jackson-core-asl@default:default"/>
|
||||
<setEntry value="jackson-jaxrs@default:default"/>
|
||||
<setEntry value="jackson-mapper-asl@default:default"/>
|
||||
<setEntry value="javax.annotation@default:default"/>
|
||||
<setEntry value="javax.validation@default:default"/>
|
||||
<setEntry value="javax.ws.rs@default:default"/>
|
||||
<setEntry value="javax.xml.soap@default:default"/>
|
||||
<setEntry value="javax.xml.stream@default:default"/>
|
||||
<setEntry value="javax.xml.ws@default:default"/>
|
||||
<setEntry value="javax.xml@default:default"/>
|
||||
<setEntry value="jcl.over.slf4j@default:default"/>
|
||||
<setEntry value="lz4-java@default:default"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle.source"/>
|
||||
<setEntry value="org.apache.aries.spifly.dynamic.bundle@3:true"/>
|
||||
<setEntry value="org.apache.commons.beanutils.source@default:default"/>
|
||||
<setEntry value="org.apache.commons.beanutils@default:default"/>
|
||||
<setEntry value="org.apache.commons.codec@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections4.source"/>
|
||||
<setEntry value="org.apache.commons.collections4@default:default"/>
|
||||
<setEntry value="org.apache.commons.collections@default:default"/>
|
||||
<setEntry value="org.apache.commons.compress.source"/>
|
||||
<setEntry value="org.apache.commons.compress@default:default"/>
|
||||
<setEntry value="org.apache.commons.fileupload@default:default"/>
|
||||
<setEntry value="org.apache.commons.io@default:default"/>
|
||||
<setEntry value="org.apache.commons.lang@default:default"/>
|
||||
<setEntry value="org.apache.commons.logging@default:default"/>
|
||||
<setEntry value="org.apache.commons.math3@default:default"/>
|
||||
<setEntry value="org.apache.commons.math@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.command@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.runtime@default:default"/>
|
||||
<setEntry value="org.apache.felix.gogo.shell@default:default"/>
|
||||
<setEntry value="org.apache.geronimo.specs.geronimo-jta_1.1_spec@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpclient@default:default"/>
|
||||
<setEntry value="org.apache.httpcomponents.httpcore@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.schemas@default:default"/>
|
||||
<setEntry value="org.apache.poi.ooxml.source"/>
|
||||
<setEntry value="org.apache.poi.ooxml@default:default"/>
|
||||
<setEntry value="org.apache.poi.source"/>
|
||||
<setEntry value="org.apache.poi@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.scribe@default:default"/>
|
||||
<setEntry value="org.apache.servicemix.bundles.zxing@default:default"/>
|
||||
<setEntry value="org.apache.shiro.core.source"/>
|
||||
<setEntry value="org.apache.shiro.core@default:default"/>
|
||||
<setEntry value="org.apache.shiro.ehcache.source"/>
|
||||
<setEntry value="org.apache.shiro.ehcache@default:default"/>
|
||||
<setEntry value="org.apache.shiro.web.source"/>
|
||||
<setEntry value="org.apache.shiro.web@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.standard-impl@default:default"/>
|
||||
<setEntry value="org.apache.taglibs.taglibs-standard-spec@default:default"/>
|
||||
<setEntry value="org.apache.xalan@default:default"/>
|
||||
<setEntry value="org.apache.xml.serializer@default:default"/>
|
||||
<setEntry value="org.apache.xmlbeans@default:default"/>
|
||||
<setEntry value="org.dom4j@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.cm@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.common@2:true"/>
|
||||
<setEntry value="org.eclipse.equinox.console@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.event@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.launcher@default:default"/>
|
||||
<setEntry value="org.eclipse.equinox.simpleconfigurator@2:true"/>
|
||||
<setEntry value="org.eclipse.jdt.core.compiler.batch@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.annotations@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.apache-jsp@4:true"/>
|
||||
<setEntry value="org.eclipse.jetty.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy.source"/>
|
||||
<setEntry value="org.eclipse.jetty.deploy@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.http.source"/>
|
||||
<setEntry value="org.eclipse.jetty.http@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.io.source"/>
|
||||
<setEntry value="org.eclipse.jetty.io@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx.source"/>
|
||||
<setEntry value="org.eclipse.jetty.jmx@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.jndi@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi-servlet-api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.jsp@default:false"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot.warurl@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.osgi.boot@3:true"/>
|
||||
<setEntry value="org.eclipse.jetty.plus@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.security.source"/>
|
||||
<setEntry value="org.eclipse.jetty.security@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.server.source"/>
|
||||
<setEntry value="org.eclipse.jetty.server@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet.source"/>
|
||||
<setEntry value="org.eclipse.jetty.servlet@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax.source"/>
|
||||
<setEntry value="org.eclipse.jetty.util.ajax@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.util.source"/>
|
||||
<setEntry value="org.eclipse.jetty.util@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp.source"/>
|
||||
<setEntry value="org.eclipse.jetty.webapp@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.api@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.client@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common.source"/>
|
||||
<setEntry value="org.eclipse.jetty.websocket.common@default:default"/>
|
||||
<setEntry value="org.eclipse.jetty.xml.source"/>
|
||||
<setEntry value="org.eclipse.jetty.xml@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.services.source"/>
|
||||
<setEntry value="org.eclipse.osgi.services@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi.source"/>
|
||||
<setEntry value="org.eclipse.osgi.util.source"/>
|
||||
<setEntry value="org.eclipse.osgi.util@default:default"/>
|
||||
<setEntry value="org.eclipse.osgi@-1:true"/>
|
||||
<setEntry value="org.hyperic.sigar@default:default"/>
|
||||
<setEntry value="org.jvnet.mimepull@default:default"/>
|
||||
<setEntry value="org.mongodb.bson.source"/>
|
||||
<setEntry value="org.mongodb.bson@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-core.source"/>
|
||||
<setEntry value="org.mongodb.driver-core@default:default"/>
|
||||
<setEntry value="org.mongodb.driver-sync@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-el@default:default"/>
|
||||
<setEntry value="org.mortbay.jasper.apache-jsp@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.analysis.source"/>
|
||||
<setEntry value="org.objectweb.asm.analysis@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.commons.source"/>
|
||||
<setEntry value="org.objectweb.asm.commons@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.source"/>
|
||||
<setEntry value="org.objectweb.asm.tree.source"/>
|
||||
<setEntry value="org.objectweb.asm.tree@default:default"/>
|
||||
<setEntry value="org.objectweb.asm.util.source"/>
|
||||
<setEntry value="org.objectweb.asm.util@default:default"/>
|
||||
<setEntry value="org.objectweb.asm@default:default"/>
|
||||
<setEntry value="org.osgi.service.cm@default:default"/>
|
||||
<setEntry value="org.osgi.service.component@default:default"/>
|
||||
<setEntry value="org.osgi.service.event@default:default"/>
|
||||
<setEntry value="org.osgi.service.packageadmin@default:default"/>
|
||||
<setEntry value="org.osgi.service.url@default:default"/>
|
||||
<setEntry value="org.osgi.util.function.source"/>
|
||||
<setEntry value="org.osgi.util.function@default:default"/>
|
||||
<setEntry value="org.osgi.util.measurement.source"/>
|
||||
<setEntry value="org.osgi.util.measurement@default:default"/>
|
||||
<setEntry value="org.osgi.util.position.source"/>
|
||||
<setEntry value="org.osgi.util.position@default:default"/>
|
||||
<setEntry value="org.osgi.util.promise.source"/>
|
||||
<setEntry value="org.osgi.util.promise@default:default"/>
|
||||
<setEntry value="org.osgi.util.tracker@default:default"/>
|
||||
<setEntry value="org.osgi.util.xml.source"/>
|
||||
<setEntry value="org.osgi.util.xml@default:default"/>
|
||||
<setEntry value="org.owasp.encoder.source"/>
|
||||
<setEntry value="org.owasp.encoder@default:default"/>
|
||||
<setEntry value="routeconverter@default:default"/>
|
||||
<setEntry value="slf4j.api@default:default"/>
|
||||
<setEntry value="slf4j.jdk14@default:false"/>
|
||||
</setAttribute>
|
||||
<setAttribute key="selected_workspace_bundles">
|
||||
<setEntry value="com.sap.sailing.geocoding@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain@default:default"/>
|
||||
<setEntry value="com.sap.sailing.news@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.windfinderadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.interfaces@default:default"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="com.sap.sailing.declination@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingreplayadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.gwt.ui@6:true"/>
|
||||
<setEntry value="com.sap.sailing.udpconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.simulator@default:default"/>
|
||||
<setEntry value="com.sap.sailing.www@5:true"/>
|
||||
<setEntry value="com.sap.sailing.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.kiworesultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.ess40.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.freg.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.barbados.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailwave.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailti.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.yachtscoring.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.velum.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.monitoring@7:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.racelogtrackingadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.deckmanadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.oceanraceadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.structureimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization@default:default"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars@5:true"/>
|
||||
<setEntry value="com.sap.sailing.windestimation@5:true"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.xrr.schema@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.trackfiles@default:default"/>
|
||||
<setEntry value="com.sap.sailing.competitorimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining.provider@default:default"/>
|
||||
<setEntry value="com.sap.sailing.grib@default:default"/>
|
||||
<setEntry value="com.sap.sailing.nmeaconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.expeditionadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.bravoadapter@5:true"/>
|
||||
<setEntry value="net.sf.marineapi@default:default"/>
|
||||
<setEntry value="com.sap.sailing.routeconverterjava11extension@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.hanaexport@5:true"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt@default:default"/>
|
||||
<setEntry value="com.google.gwt.servlet@default:default"/>
|
||||
<setEntry value="com.sap.sse.security@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.ui@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.userstore.mongodb@4:true"/>
|
||||
<setEntry value="com.sap.sse@default:default"/>
|
||||
<setEntry value="com.sap.sse.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.annotations@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt.adminconsole@default:default"/>
|
||||
<setEntry value="com.sap.sse.mongodb@default:default"/>
|
||||
<setEntry value="com.sap.sse.operationaltransformation@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication@6:true"/>
|
||||
<setEntry value="com.sap.sse.filestorage@4:true"/>
|
||||
<setEntry value="com.sap.sse.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sse.mail@5:true"/>
|
||||
<setEntry value="com.sap.sse.threadmanager@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.common@default:default"/>
|
||||
<setEntry value="org.json.simple@default:default"/>
|
||||
<setEntry value="org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<setEntry value="com.googlecode.java-diff-utils@default:default"/>
|
||||
<setEntry value="org.mp4parser.isoparser@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sse.security.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws@4:true"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.debranding@default:default"/>
|
||||
<setEntry value="elemental2@default:default"/>
|
||||
</setAttribute>
|
||||
<setEntry value="com.google.gwt.servlet@default:default"/>
|
||||
<setEntry value="com.googlecode.java-diff-utils@default:default"/>
|
||||
<setEntry value="com.sap.sailing.barbados.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.competitorimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.dashboards.gwt@6:true"/>
|
||||
<setEntry value="com.sap.sailing.datamining.provider@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.declination@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.bravoadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.deckmanadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.expeditionadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.igtimiadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.oceanraceadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.racelogtrackingadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.swisstimingreplayadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.tractracadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.windfinderadapter@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.domain.yellowbrickadapter@5:true"/>
|
||||
<setEntry value="com.sap.sailing.domain@default:default"/>
|
||||
<setEntry value="com.sap.sailing.ess40.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector.persistence@4:true"/>
|
||||
<setEntry value="com.sap.sailing.expeditionconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.freg.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.geocoding@default:default"/>
|
||||
<setEntry value="com.sap.sailing.grib@default:default"/>
|
||||
<setEntry value="com.sap.sailing.gwt.ui@6:true"/>
|
||||
<setEntry value="com.sap.sailing.hanaexport@5:true"/>
|
||||
<setEntry value="com.sap.sailing.kiworesultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.landscape.ui@default:default"/>
|
||||
<setEntry value="com.sap.sailing.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.manage2sail@default:default"/>
|
||||
<setEntry value="com.sap.sailing.monitoring@7:true"/>
|
||||
<setEntry value="com.sap.sailing.news@4:true"/>
|
||||
<setEntry value="com.sap.sailing.nmeaconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sailing.polars.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sailing.polars@5:true"/>
|
||||
<setEntry value="com.sap.sailing.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.routeconverterjava11extension@default:false"/>
|
||||
<setEntry value="com.sap.sailing.sailti.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.sailwave.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway.serialization@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.server.interface@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server.trackfiles@default:default"/>
|
||||
<setEntry value="com.sap.sailing.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sailing.shared.server.gateway@5:true"/>
|
||||
<setEntry value="com.sap.sailing.shared.server@5:true"/>
|
||||
<setEntry value="com.sap.sailing.simulator@default:default"/>
|
||||
<setEntry value="com.sap.sailing.udpconnector@default:default"/>
|
||||
<setEntry value="com.sap.sailing.velum.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.windestimation@5:true"/>
|
||||
<setEntry value="com.sap.sailing.www@5:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sailing.xrr.schema@default:default"/>
|
||||
<setEntry value="com.sap.sailing.xrr.structureimport@default:default"/>
|
||||
<setEntry value="com.sap.sailing.yachtscoring.resultimport@4:true"/>
|
||||
<setEntry value="com.sap.sse.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.annotations@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.shared@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining.ui@default:default"/>
|
||||
<setEntry value="com.sap.sse.datamining@default:default"/>
|
||||
<setEntry value="com.sap.sse.debranding@default:default"/>
|
||||
<setEntry value="com.sap.sse.filestorage@4:true"/>
|
||||
<setEntry value="com.sap.sse.gwt.adminconsole@default:default"/>
|
||||
<setEntry value="com.sap.sse.gwt@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape.aws@4:true"/>
|
||||
<setEntry value="com.sap.sse.landscape.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.landscape@default:default"/>
|
||||
<setEntry value="com.sap.sse.mail@5:true"/>
|
||||
<setEntry value="com.sap.sse.mongodb@default:default"/>
|
||||
<setEntry value="com.sap.sse.operationaltransformation@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.interfaces@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.replication@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.common@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.datamining@5:true"/>
|
||||
<setEntry value="com.sap.sse.security.interface@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.persistence@default:default"/>
|
||||
<setEntry value="com.sap.sse.security.ui@6:true"/>
|
||||
<setEntry value="com.sap.sse.security.userstore.mongodb@4:true"/>
|
||||
<setEntry value="com.sap.sse.security@default:default"/>
|
||||
<setEntry value="com.sap.sse.shared.android@default:default"/>
|
||||
<setEntry value="com.sap.sse.threadmanager@default:default"/>
|
||||
<setEntry value="com.sap.sse@default:default"/>
|
||||
<setEntry value="com.tractrac.clientmodule@default:default"/>
|
||||
<setEntry value="elemental2@default:default"/>
|
||||
<setEntry value="net.sf.marineapi@default:default"/>
|
||||
<setEntry value="org.json.simple@default:default"/>
|
||||
<setEntry value="org.moxieapps.gwt.highcharts@default:default"/>
|
||||
<setEntry value="org.mp4parser.isoparser@default:default"/>
|
||||
</setAttribute>
|
||||
<booleanAttribute key="show_selected_only" value="false"/>
|
||||
<booleanAttribute key="tracing" value="false"/>
|
||||
<booleanAttribute key="useCustomFeatures" value="false"/>
|
||||
|
||||
+7
-4
@@ -3054,7 +3054,7 @@ Replicator {
|
||||
* already have been removed by the stopAllTrackersForWhichRaceIsLastReachable(...) above; maybe a
|
||||
* Java memory model idiosyncrasy with the queue thread not "seeing" the change to dataTrackers?).
|
||||
* We must make sure to not block its execution, e.g., by synchronization, because otherwise
|
||||
* the the removedTrackedRegatta(regatta) call below may not return, either, as it waits for
|
||||
* the removedTrackedRegatta(regatta) call below may not return, either, as it waits for
|
||||
* tasks it may enqueue after the task enqueued here. See bug 5879.
|
||||
*/
|
||||
trackedRegatta.removeTrackedRace(trackedRace, Optional.of(
|
||||
@@ -3104,6 +3104,9 @@ Replicator {
|
||||
}
|
||||
}
|
||||
}
|
||||
// FIXME bug5982: when the TrackedRace is removed already, queries for the RaceDefinition would still be satisfied up to this point, with a RaceDefinition that is about to disappear;
|
||||
// FIXME bug5982: no TrackedRace will ever appear again for that RaceDefinition; we should consider introducing a locking pattern around the transaction of removing TrackedRace+RaceDefinition
|
||||
// FIXME bug5982: and synchronize accordingly with TrackedRegattaImpl.getTrackedRace(RaceDefinition).
|
||||
// remove the race from the (default) regatta if the regatta is not persistently stored
|
||||
regatta.removeRace(race);
|
||||
if (!regatta.isPersistent() && Util.isEmpty(regatta.getAllRaces())) {
|
||||
@@ -3170,7 +3173,7 @@ Replicator {
|
||||
|
||||
@Override
|
||||
public DynamicTrackedRace getTrackedRace(Regatta regatta, RaceDefinition race) {
|
||||
return getOrCreateTrackedRegatta(regatta).getTrackedRace(race);
|
||||
return getOrCreateTrackedRegatta(regatta).getExistingTrackedRace(race);
|
||||
}
|
||||
|
||||
private DynamicTrackedRace getExistingTrackedRace(Regatta regatta, RaceDefinition race) {
|
||||
@@ -3234,9 +3237,9 @@ Replicator {
|
||||
if (regatta != null) {
|
||||
DynamicTrackedRegatta trackedRegatta = regattaTrackingCache.get(regatta);
|
||||
if (trackedRegatta != null) {
|
||||
RaceDefinition race = getRace(raceIdentifier);
|
||||
RaceDefinition race = regatta.getRaceByName(raceIdentifier.getRaceName());
|
||||
if (race != null) {
|
||||
result = trackedRegatta.getTrackedRace(race);
|
||||
result = trackedRegatta.getExistingTrackedRace(race);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -404,7 +404,7 @@ public class SimulationServiceImpl implements SimulationService {
|
||||
});
|
||||
}
|
||||
if (!legListeners.containsKey(legIdentifier.getRaceIdentifier())) {
|
||||
TrackedRace trackedRace = racingEventService.getTrackedRace(legIdentifier);
|
||||
final TrackedRace trackedRace = racingEventService.getTrackedRace(legIdentifier);
|
||||
if (trackedRace != null) {
|
||||
LegChangeListener listener = new LegChangeListener(trackedRace);
|
||||
legListeners.put(legIdentifier.getRaceIdentifier(), listener);
|
||||
|
||||
@@ -37,28 +37,28 @@
|
||||
id="slf4j.api"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.7.30"
|
||||
version="2.0.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="slf4j.jdk14"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.7.30"
|
||||
version="2.0.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="jul.to.slf4j"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.7.30"
|
||||
version="2.0.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="jcl.over.slf4j"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.7.30"
|
||||
version="2.0.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
@@ -359,7 +359,35 @@
|
||||
id="redisson"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="3.17.7"
|
||||
version="3.27.2"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.esotericsoftware.kryo"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="5.6.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.esotericsoftware.minlog"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.3.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.esotericsoftware.reflectasm"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.11.9"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.fasterxml.jackson.core.jackson-annotations"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.16.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
@@ -397,4 +425,61 @@
|
||||
version="1.72"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="jodd-bean"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="5.1.6"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="net.bytebuddy.byte-buddy"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.14.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="net.bytebuddy.byte-buddy.source"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.14.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="net.bytebuddy.byte-buddy-agent"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.14.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="net.bytebuddy.byte-buddy-agent.source"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.14.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="org.jboss.marshalling.jboss-marshalling-osgi"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.1.4.SP1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.projectreactor.reactor-core"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="3.6.4.RELEASE"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.diffplug.osgi.extension.sun.misc"
|
||||
feature="true"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
</feature>
|
||||
|
||||
@@ -40,4 +40,137 @@
|
||||
version="1.9.13"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.fasterxml.jackson.core.jackson-core"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.16.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.fasterxml.jackson.core.jackson-databind"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.16.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.fasterxml.jackson.dataformat.jackson-dataformat-yaml"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.16.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="org.yaml.snakeyaml"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.2.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.transport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.buffer"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.common"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.resolver"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.transport-classes-epoll"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.transport-native-unix-common"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.transport-classes-kqueue"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.codec"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.handler"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.resolver-dns"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.codec-dns"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.incubator.netty-incubator-transport-classes-io_uring"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.25.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="javax.cache.api"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.1.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.reactivex.rxjava3.rxjava"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="3.1.8"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="reactive-streams"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.0.4"
|
||||
unpack="false"/>
|
||||
|
||||
</feature>
|
||||
|
||||
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -20,10 +20,6 @@
|
||||
<unit id="org.objectweb.asm.util.source" version="9.4.0.v20221107-1714"/>
|
||||
<unit id="org.mockito.mockito-core" version="4.8.1.v20221103-2317"/>
|
||||
<unit id="org.mockito.mockito-core.source" version="4.8.1.v20221103-2317"/>
|
||||
<unit id="net.bytebuddy.byte-buddy" version="1.12.18.v20221114-2102"/>
|
||||
<unit id="net.bytebuddy.byte-buddy.source" version="1.12.18.v20221114-2102"/>
|
||||
<unit id="net.bytebuddy.byte-buddy-agent" version="1.12.18.v20221114-2102"/>
|
||||
<unit id="net.bytebuddy.byte-buddy-agent.source" version="1.12.18.v20221114-2102"/>
|
||||
<unit id="com.sun.jna" version="5.12.1.v20221103-2317"/>
|
||||
<unit id="com.sun.jna.source" version="5.12.1.v20221103-2317"/>
|
||||
<unit id="com.sun.jna.platform" version="5.12.1.v20221103-2317"/>
|
||||
@@ -146,7 +142,7 @@
|
||||
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210223232630/repository"/>
|
||||
</location>
|
||||
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
|
||||
<unit id="com.amazon.aws.aws-java-api.feature.group" version="2.20.59"/>
|
||||
<unit id="com.amazon.aws.aws-java-api.feature.group" version="2.25.11"/>
|
||||
<repository location="https://p2.sapsailing.com/p2/aws-sdk/"/>
|
||||
</location>
|
||||
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
|
||||
@@ -174,6 +170,7 @@
|
||||
<plugin id="jackson-core-asl"/>
|
||||
<plugin id="jackson-jaxrs"/>
|
||||
<plugin id="jackson-mapper-asl"/>
|
||||
<plugin id="com.fasterxml.jackson.core.jackson-core"/>
|
||||
<plugin id="javax.security.auth.message"/>
|
||||
<plugin id="javax.security.auth.message.source"/>
|
||||
<plugin id="javax.validation"/>
|
||||
@@ -393,6 +390,31 @@
|
||||
<plugin id="org.osgi.util.xml"/>
|
||||
<plugin id="org.osgi.util.xml.source"/>
|
||||
<plugin id="redisson"/>
|
||||
<plugin id="com.esotericsoftware.kryo"/>
|
||||
<plugin id="com.esotericsoftware.minlog"/>
|
||||
<plugin id="com.esotericsoftware.reflectasm"/>
|
||||
<plugin id="com.fasterxml.jackson.core.jackson-annotations"/>
|
||||
<plugin id="com.fasterxml.jackson.core.jackson-databind"/>
|
||||
<plugin id="com.fasterxml.jackson.dataformat.jackson-dataformat-yaml"/>
|
||||
<plugin id="org.yaml.snakeyaml"/>
|
||||
<plugin id="io.netty.transport"/>
|
||||
<plugin id="io.netty.buffer"/>
|
||||
<plugin id="io.netty.common"/>
|
||||
<plugin id="io.netty.resolver"/>
|
||||
<plugin id="io.netty.transport-classes-epoll"/>
|
||||
<plugin id="io.netty.transport-native-unix-common"/>
|
||||
<plugin id="io.netty.transport-classes-kqueue"/>
|
||||
<plugin id="io.netty.codec"/>
|
||||
<plugin id="io.netty.handler"/>
|
||||
<plugin id="io.netty.resolver-dns"/>
|
||||
<plugin id="io.netty.codec-dns"/>
|
||||
<plugin id="io.netty.incubator.netty-incubator-transport-classes-io_uring"/>
|
||||
<plugin id="io.reactivex.rxjava3.rxjava"/>
|
||||
<plugin id="reactive-streams"/>
|
||||
<plugin id="jodd-bean"/>
|
||||
<plugin id="org.jboss.marshalling.jboss-marshalling-osgi"/>
|
||||
<plugin id="io.projectreactor.reactor-core"/>
|
||||
<plugin id="com.diffplug.osgi.extension.sun.misc"/>
|
||||
<plugin id="com.google.gson"/>
|
||||
<plugin id="com.google.gson.source"/>
|
||||
<plugin id="com.amazonaws.aws-lambda-java-core"/>
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
id="slf4j.jdk14"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.7.30"
|
||||
version="2.0.12"
|
||||
fragment="true"
|
||||
unpack="false"/>
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
id="slf4j.api"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.7.30"
|
||||
version="2.0.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
@@ -337,7 +337,14 @@
|
||||
id="jcl.over.slf4j"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.7.30"
|
||||
version="2.0.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="jul.to.slf4j"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.0.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
@@ -493,6 +500,13 @@
|
||||
version="1.9.13"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.fasterxml.jackson.core.jackson-core"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.16.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="org.apache.commons.collections"
|
||||
download-size="0"
|
||||
@@ -735,14 +749,14 @@
|
||||
id="com.amazon.aws.aws-java-api"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.20.59"
|
||||
version="2.25.11"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.amazon.aws.aws-java-api.source"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.20.59"
|
||||
version="2.25.11"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
@@ -1012,6 +1026,167 @@
|
||||
version="1.0.1.202007221806"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="redisson"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="3.27.2"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.esotericsoftware.kryo"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="5.6.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.esotericsoftware.reflectasm"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.11.9"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.esotericsoftware.minlog"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.3.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.fasterxml.jackson.core.jackson-annotations"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.16.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.fasterxml.jackson.core.jackson-databind"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.16.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.fasterxml.jackson.dataformat.jackson-dataformat-yaml"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.16.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="org.yaml.snakeyaml"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.2.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.transport"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.buffer"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.common"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.resolver"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.transport-classes-epoll"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.transport-native-unix-common"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.transport-classes-kqueue"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.codec"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.handler"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.resolver-dns"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.codec-dns"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="4.1.107.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.netty.incubator.netty-incubator-transport-classes-io_uring"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.25.Final"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.reactivex.rxjava3.rxjava"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="3.1.8"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="reactive-streams"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.0.4"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="javax.cache.api"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.1.1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.github.haifengl.smile-core"
|
||||
download-size="0"
|
||||
@@ -1082,4 +1257,60 @@
|
||||
version="2.8.9.v20220111-1409"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="jodd-bean"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="5.1.6"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="net.bytebuddy.byte-buddy"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.14.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="net.bytebuddy.byte-buddy.source"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.14.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="net.bytebuddy.byte-buddy-agent"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.14.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="net.bytebuddy.byte-buddy-agent.source"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.14.12"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="org.jboss.marshalling.jboss-marshalling-osgi"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="2.1.4.SP1"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="io.projectreactor.reactor-core"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="3.6.4.RELEASE"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="com.diffplug.osgi.extension.sun.misc"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="1.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
</feature>
|
||||
|
||||
+21
-6
@@ -49,10 +49,15 @@ implements com.sap.sse.landscape.Process<RotatingFileBasedLog, MetricsT> {
|
||||
*/
|
||||
private static final String RELATIVE_CONFIG_PATH = "conf.d";
|
||||
|
||||
/**
|
||||
* The user which contains the checked-out copy of the httpd configuration git.
|
||||
*/
|
||||
private static final String CONFIG_USER = "httpdConf";
|
||||
|
||||
/**
|
||||
* The absolute path to the "httpd config" git repo which stores all httpd configuration files.
|
||||
*/
|
||||
private static final String CONFIG_REPO_PATH = "/etc/httpd";
|
||||
private static final String CONFIG_REPO_PATH = "~" + CONFIG_USER + "/checked-out";
|
||||
|
||||
/**
|
||||
* The branch name that contains the production httpd configuration.
|
||||
@@ -123,13 +128,14 @@ implements com.sap.sse.landscape.Process<RotatingFileBasedLog, MetricsT> {
|
||||
private void setRedirect(String configFileNameForHostname, String macroName, String hostname,
|
||||
Optional<String> optionalKeyName, byte[] privateKeyEncryptionPassphrase, boolean doCommit, boolean doPush, String... macroArguments)
|
||||
throws Exception {
|
||||
String command = "echo \"Use " + macroName + " " + hostname + " " + String.join(" ", macroArguments)
|
||||
+ "\" > " + getAbsoluteConfigFilePath(configFileNameForHostname) + "; service httpd reload" ;
|
||||
String command = "su - " + CONFIG_USER + " -c 'cd " + CONFIG_REPO_PATH + " && git checkout " + CONFIG_REPO_MAIN_BRANCH_NAME + " && echo \"Use " + macroName + " " + hostname + " " + String.join(" ", macroArguments) + "\" > "
|
||||
+ getAbsoluteConfigFilePath(configFileNameForHostname);
|
||||
if (doCommit) {
|
||||
command = command + " && cd "
|
||||
+ CONFIG_REPO_PATH + " && " + createCommitAndPushString(configFileNameForHostname,
|
||||
"Set " + configFileNameForHostname + " redirect", doPush);
|
||||
}
|
||||
command = command + "'; service httpd reload"; // Concludes the su. And reloads as the root user.
|
||||
logger.info("Standard output from setting up the re-direct for " + hostname
|
||||
+ " and reloading the Apache httpd server: "
|
||||
+ runCommandAndReturnStdoutAndStderr(command,
|
||||
@@ -158,7 +164,7 @@ implements com.sap.sse.landscape.Process<RotatingFileBasedLog, MetricsT> {
|
||||
|
||||
/**
|
||||
* Creates a command, that can be ran on an instance to commit, and optionally push, changes to a file (within a git repository). ASSUMES the command is ran from within the repository.
|
||||
* @param editedFileName The file name edited, created or deleted to commit. This includes the {@link #CONFIG_FILE_EXTENSION}, but not a path.
|
||||
* @param editedFileName The file name edited, created or deleted to commit. This includes the {@link #CONFIG_FILE_EXTENSION}, but not a path. The method appends the relative path.
|
||||
* @param commitMsg The commit message, without escaped speech marks.
|
||||
* @param performPush Boolean indicating whether to push changes or not. True for performing a push.
|
||||
* @return Returns the created command (in String form) to perform a commit and optional push.
|
||||
@@ -262,10 +268,19 @@ implements com.sap.sse.landscape.Process<RotatingFileBasedLog, MetricsT> {
|
||||
*/
|
||||
private void removeRedirect(String configFileName, String hostname,
|
||||
Optional<String> optionalKeyName, byte[] privateKeyEncryptionPassphrase) throws Exception {
|
||||
final String command = "rm " + getAbsoluteConfigFilePath(configFileName) + "; service httpd reload" + " && cd " + CONFIG_REPO_PATH + ";" + createCommitAndPushString(configFileName, "Removed " + hostname, true);
|
||||
StringBuilder command = new StringBuilder("su - " + CONFIG_USER + " -c '"); // The Git commit must be ran as the CONFIG_USER.
|
||||
command.append("cd ");
|
||||
command.append(CONFIG_REPO_PATH);
|
||||
command.append(" && git checkout ");
|
||||
command.append(CONFIG_REPO_MAIN_BRANCH_NAME);
|
||||
command.append(" && rm ");
|
||||
command.append(getRelativeConfigFilePath(configFileName));
|
||||
command.append("; ");
|
||||
command.append(createCommitAndPushString(configFileName, "Removed " + hostname, /* Perform push */ true));
|
||||
command.append("'; service httpd reload;"); // ' closes the su. The reload must be run as the root user.
|
||||
logger.info("Standard output from removing the re-direct for " + hostname
|
||||
+ " and reloading the Apache httpd server: "
|
||||
+ runCommandAndReturnStdoutAndStderr(command,
|
||||
+ runCommandAndReturnStdoutAndStderr(command.toString(),
|
||||
"Standard error from removing the re-direct for " + hostname
|
||||
+ " and reloading the Apache httpd server: ",
|
||||
Level.INFO, optionalKeyName, privateKeyEncryptionPassphrase));
|
||||
|
||||
@@ -19,9 +19,9 @@ Our default region in AWS EC2 is eu-west-1 (Ireland). Tests are currently run in
|
||||
|
||||
In Route53 (the AWS DNS) we have registered the sapsailing.com domain and can manage records for any sub-domains. The "apex" record for sapsailing.com points to a Network Load Balancer (NLB), currently ``NLB-sapsailing-dot-com-f937a5b33246d221.elb.eu-west-1.amazonaws.com``, which does the following things:
|
||||
|
||||
* accept SSH connects on port 22; these are forwarded to the internal IP of the web server through the target group ``SSH-to-sapsailing-dot-com``, currently with the internal IP target ``172.31.28.212``
|
||||
* accept HTTP connections for ``sapsailing.com:80``, forwarding them to the target group ``HTTP-to-sapsailing-dot-com`` which is a TCP target group for port 80 with ip-based targets (instance-based was unfortunately not possible for the old ``m3`` instance type of our web server), again pointing to ``172.31.28.212``, the internal IP of our web server
|
||||
* accept HTTPS/TLS connections on port 443, using the ACM-managed certificate for ``*.sapsailing.com`` and ``sapsailing.com`` and also forwarding to the ``HTTP-to-sapsailing-dot-com`` target group
|
||||
* accept SSH connects on port 22; these are forwarded to the internal IP of the web server through the target group ``SSH-to-sapsailing-dot-com-2``, currently with the internal IP target ``172.31.28.212``
|
||||
* accept HTTP connections for ``sapsailing.com:80``, forwarding them to the target group ``HTTP-to-sapsailing-dot-com-2`` which is a TCP target group for port 80 with ip-based targets (instance-based was unfortunately not possible for the old ``m3`` instance type of our web server), again pointing to ``172.31.28.212``, the internal IP of our web server
|
||||
* accept HTTPS/TLS connections on port 443, using the ACM-managed certificate for ``*.sapsailing.com`` and ``sapsailing.com`` and also forwarding to the ``HTTP-to-sapsailing-dot-com-2`` target group
|
||||
* optionally, this NLB could be extended by UDP port mappings in case we see a use case for UDP-based data streams that need forwarding to specific applications, such as the Expedition data typically sent on ports 2010 and following
|
||||
|
||||
Additionally, we have created a CNAME record for ``*.sapsailing.com`` pointing at a default application load balancer (ALB) (currently ``DefDynsapsailing-com-1492504005.eu-west-1.elb.amazonaws.com``) in our default region (eu-west-1). Thie default ALB is also called our "dynamic ALB" because it doesn't depend on DNS rules other than the default one for ``*.sapsailing.com``, so other than changes to the DNS which can take minutes to hours to propagate through the world-wide DNS, changes to the default ALB's rule set take effect immediately. Like all ALBs, this one also has a default rule that refers all traffic not matched by other rules to a target group that forwards traffic to an (in the future probably multiple) Apache httpd webserver. All these ALBs handle SSL termination by means of an ACM-managed certificate that AWS automatically renews before it expires. The traffic routed to the target groups is always HTTP only.
|
||||
@@ -38,6 +38,8 @@ The IPs for all reverse proxies will automatically be added to the `CentralWebSe
|
||||
and to the `DDNSMapped-x-HTTP` (in all the DDNSMapped servers). These are the target groups for the default rules and it ensures availability to the ARCHIVE especially.
|
||||
Currently, the new approach tags instances with `disposableProxy` to indicate it hosts no vital services. `ReverseProxy` also identifies any reverse proxies. The health check for the target groups would change to trigger a script which returns different error codes: healthy/200 if in the same AZ as the archive (or if the failover archive is in use), whilst unhealthy/503 if in different AZs. This will reduce cross-AZ, archive traffic costs, but maintain availability and load balancing.
|
||||
|
||||
For security groups of the central reverse proxy, we want Webserver, as well as Disposable Reverse Proxy. The diposables just have the latter.
|
||||
|
||||
There is hope to also deploy the httpd on already existing instances, which have free resources and a certain tag permitting this
|
||||
co-deployment.
|
||||
Most of sapsailing.com no longer cares about SSL and does not need to have an SSL certificate. Sail-insight still does though. The central reverse proxy offers the following services:
|
||||
@@ -64,8 +66,8 @@ If you see ``Syntax OK`` then reload the configuration using
|
||||
The webserver is registered as target in various locations:
|
||||
|
||||
* As DNS record with its internal IP address (e.g., 172.31.19.129) for the two DNS entries ``logfiles.internal.sapsailing.com`` used by various NFS mounts, and ``smtp.internal.sapsailing.com`` for e-mail traffic sent within the landscape and not requiring the AWS SES
|
||||
* as IP target with its internal IP address for the ``HTTP-to-sapsailing-dot-com`` target group, accepting the HTTP traffic sent straight to ``sapsailing.com`` (not ``www.sapsailing.com``)
|
||||
* as IP target with its internal IP address for the ``SSH-to-sapsailing-dot-com`` target group, accepting the SSH traffic for ``sapsailing.com``
|
||||
* as IP target with its internal IP address for the ``HTTP-to-sapsailing-dot-com-2`` target group, accepting the HTTP traffic sent straight to ``sapsailing.com`` (not ``www.sapsailing.com``)
|
||||
* as IP target with its internal IP address for the ``SSH-to-sapsailing-dot-com-2`` target group, accepting the SSH traffic for ``sapsailing.com``
|
||||
* as regular instance target in all load balancers' default rule's target group, such as ``DefDynsapsailing-com``, ``DNSMapped-0``, ``DNSMapped-1``, and so on; the names of the target groups are ``CentralWebServerHTTP-Dyn``, ``DDNSMapped-0-HTTP``, ``DDNSMapped-1-HTTP``, and so on, respectively
|
||||
* as regular instance target in ``DNSMapped-0``'s target group ``DNSMapped0-Central-HTTP`` to which requests for services available only on the *central* reverse proxy are forwarded to, such as ``releases.sapsailing.com``, ``bugzilla.sapsailing.com``, and so on
|
||||
* as target of the elastic IP address ``54.229.94.254``
|
||||
|
||||
@@ -563,6 +563,12 @@ REPLICATION_HOST=localhost
|
||||
REPLICATION_PORT=5673
|
||||
USE_ENVIRONMENT=live-master-server
|
||||
ADDITIONAL_JAVA_ARGS="${ADDITIONAL_JAVA_ARGS} -Dcom.sap.sse.debranding=true -Dpolardata.source.url=https://www.sapsailing.com:22443 -Dwindestimation.source.url=https://www.sapsailing.com:22443"
|
||||
ADDITIONAL_JAVA_ARGS="$ADDITIONAL_JAVA_ARGS -Dsecurity.sharedAcrossSubdomainsOf=sailing.omegatiming.com -Dsecurity.baseUrlForCrossDomainStorage=https://security-service.sapsailing.com -Dgwt.acceptableCrossDomainStorageRequestOriginRegexp=https?://(.*\.)?sailing\.omegatiming\.com(:[0-9]*)?$"
|
||||
# Place additional secrets here, e.g., from root@sapsailing.com:secrets
|
||||
MANAGE2SAIL_ACCESS_TOKEN=...
|
||||
IGTIMI_CLIENT_ID=...
|
||||
IGTIMI_CLIENT_SECRET=...
|
||||
GOOGLE_MAPS_AUTHENTICATION_PARAMS="..."
|
||||
```
|
||||
|
||||
### Secondary Master
|
||||
@@ -591,6 +597,12 @@ REPLICATION_HOST=localhost
|
||||
REPLICATION_PORT=5673
|
||||
USE_ENVIRONMENT=live-master-server
|
||||
ADDITIONAL_JAVA_ARGS="${ADDITIONAL_JAVA_ARGS} -Dcom.sap.sse.debranding=true -Dpolardata.source.url=https://www.sapsailing.com:22443 -Dwindestimation.source.url=https://www.sapsailing.com:22443"
|
||||
ADDITIONAL_JAVA_ARGS="$ADDITIONAL_JAVA_ARGS -Dsecurity.sharedAcrossSubdomainsOf=sailing.omegatiming.com -Dsecurity.baseUrlForCrossDomainStorage=https://security-service.sapsailing.com -Dgwt.acceptableCrossDomainStorageRequestOriginRegexp=https?://(.*\.)?sailing\.omegatiming\.com(:[0-9]*)?$"
|
||||
# Place additional secrets here, e.g., from root@sapsailing.com:secrets
|
||||
MANAGE2SAIL_ACCESS_TOKEN=...
|
||||
IGTIMI_CLIENT_ID=...
|
||||
IGTIMI_CLIENT_SECRET=...
|
||||
GOOGLE_MAPS_AUTHENTICATION_PARAMS="..."
|
||||
```
|
||||
|
||||
|
||||
@@ -622,6 +634,9 @@ REPLICATION_PORT=5672
|
||||
REPLICATION_CHANNEL=${SERVER_NAME}-replica
|
||||
USE_ENVIRONMENT=live-replica-server
|
||||
ADDITIONAL_JAVA_ARGS="${ADDITIONAL_JAVA_ARGS} -Dcom.sap.sse.debranding=true"
|
||||
ADDITIONAL_JAVA_ARGS="$ADDITIONAL_JAVA_ARGS -Dsecurity.sharedAcrossSubdomainsOf=sailing.omegatiming.com -Dsecurity.baseUrlForCrossDomainStorage=https://security-service.sapsailing.com -Dgwt.acceptableCrossDomainStorageRequestOriginRegexp=https?://(.*\.)?sailing\.omegatiming\.com(:[0-9]*)?$"
|
||||
# Place additional secrets here, e.g., from root@sapsailing.com:secrets
|
||||
GOOGLE_MAPS_AUTHENTICATION_PARAMS="..."
|
||||
```
|
||||
|
||||
(Adjust the release accordingly, of course). (NOTE: During the first production days of the event we noticed that it was really a BAD IDEA to have all replicas use the same DB set-up, all writing to the MongoDB PRIMARY of the "live" replica set in eu-west-1. With tens of replicas running concurrently, this led to a massive block-up based on MongoDB not writing fast enough. This gave rise to a new application server AMI which now has a MongoDB set-up included, using "replica" as the MongoDB replica set name. Now, each replica hence can write into its own MongoDB instance, isolated from all others and scaling linearly.)
|
||||
@@ -641,6 +656,9 @@ REPLICATE_MASTER_EXCHANGE_NAME=paris2024
|
||||
REPLICATE_MASTER_QUEUE_HOST=rabbit-eu-west-3.sapsailing.com
|
||||
REPLICATE_MASTER_BEARER_TOKEN="***"
|
||||
ADDITIONAL_JAVA_ARGS="${ADDITIONAL_JAVA_ARGS} -Dcom.sap.sse.debranding=true"
|
||||
ADDITIONAL_JAVA_ARGS="$ADDITIONAL_JAVA_ARGS -Dsecurity.sharedAcrossSubdomainsOf=sailing.omegatiming.com -Dsecurity.baseUrlForCrossDomainStorage=https://security-service.sapsailing.com -Dgwt.acceptableCrossDomainStorageRequestOriginRegexp=https?://(.*\.)?sailing\.omegatiming\.com(:[0-9]*)?$"
|
||||
# Place additional secrets here, e.g., from root@sapsailing.com:secrets
|
||||
GOOGLE_MAPS_AUTHENTICATION_PARAMS="..."
|
||||
```
|
||||
|
||||
### Application Servers
|
||||
|
||||
Reference in New Issue
Block a user