-
Notifications
You must be signed in to change notification settings - Fork 341
/
start-solr-test-server.sh
executable file
·206 lines (172 loc) · 5.87 KB
/
start-solr-test-server.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#!/bin/bash
set -e
# Redirect output to log files when stdin is not a TTY:
if [ ! -t 0 ]; then
exec 1>test-solr.stdout.log 2>test-solr.stderr.log
fi
SOLR_VERSION=4.10.4
ROOT=$(cd `dirname $0`; pwd)
APP=$ROOT/solr-app
PIDS=$ROOT/solr.pids
export SOLR_ARCHIVE="solr-${SOLR_VERSION}.tgz"
LOGS=$ROOT/logs
cd $ROOT
function download_solr() {
if [ -d "${HOME}/download-cache/" ]; then
export SOLR_ARCHIVE="${HOME}/download-cache/${SOLR_ARCHIVE}"
fi
if [ -f ${SOLR_ARCHIVE} ]; then
# If the tarball doesn't extract cleanly, remove it so it'll download again:
tar -tf ${SOLR_ARCHIVE} > /dev/null || rm ${SOLR_ARCHIVE}
fi
if [ ! -f ${SOLR_ARCHIVE} ]; then
SOLR_DOWNLOAD_URL=$(python get-solr-download-url.py $SOLR_VERSION)
curl -Lo $SOLR_ARCHIVE ${SOLR_DOWNLOAD_URL} || (echo "Unable to download ${SOLR_DOWNLOAD_URL}"; exit 2)
fi
}
function extract_solr() {
APP=solr-app
echo "Extracting Solr ${SOLR_VERSION} to `pwd`/$APP"
rm -rf $APP
mkdir $APP
tar -C $APP -xf ${SOLR_ARCHIVE} --strip-components 1 solr-${SOLR_VERSION}
}
function prepare_solr_home() {
SOLR_HOME=$1
HOST=$2
echo "Preparing SOLR_HOME at $SOLR_HOME for host $HOST"
APP=$(pwd)/solr-app
mkdir -p ${SOLR_HOME}
cp solr-app/example/solr/solr.xml ${SOLR_HOME}/
cp solr-app/example/solr/zoo.cfg ${SOLR_HOME}/
}
function prepare_core() {
SOLR_HOME=$1
CORE=$2
echo "Preparing core $CORE"
CORE_DIR=${SOLR_HOME}/${CORE}
mkdir -p ${CORE_DIR}
cp -r solr-app/example/solr/collection1/conf ${CORE_DIR}/
perl -p -i -e 's|<lib dir="../../../contrib/|<lib dir="$APP/contrib/|'g ${CORE_DIR}/conf/solrconfig.xml
perl -p -i -e 's|<lib dir="../../../dist/|<lib dir="$APP/dist/|'g ${CORE_DIR}/conf/solrconfig.xml
# Add MoreLikeThis handler
perl -p -i -e 's|<!-- A Robust Example|<!-- More like this request handler -->\n <requestHandler name="/mlt" class="solr.MoreLikeThisHandler" />\n\n\n <!-- A Robust Example|'g ${CORE_DIR}/conf/solrconfig.xml
echo "name=${CORE}" > ${CORE_DIR}/core.properties
}
function upload_configs() {
ZKHOST=$1
CONFIGS=$2
APP=${ROOT}/solr-app
echo "Uploading $CONFIGS configs to ZooKeeper at $ZKHOST"
$APP/example/scripts/cloud-scripts/zkcli.sh -cmd upconfig -confdir ${CONFIGS} -confname config -zkhost ${ZKHOST} >> $LOGS/upload.log 2>&1
}
function wait_for() {
NAME=$1
PORT=$2
COUNT=0
echo -n "Waiting for ${NAME} to start on ${PORT}"
while ! curl -s "http://localhost:${PORT}" > /dev/null; do
echo -n '.'
COUNT=$((COUNT+1))
if [ $COUNT -gt 30 ]; then
echo "Port ${PORT} not responding, quitting!"
exit 1
fi
sleep 1
done
echo " done"
}
function create_collection() {
PORT=$1
COLLECTION=$2
NODES=$3
echo "Creating collection $COLLECTION on nodes $NODES"
URL="http://localhost:${PORT}/solr/admin/collections?action=CREATE&name=${COLLECTION}&numShards=1&replicationFactor=2&collection.configName=config&createNodeSet=${NODES}"
curl -s $URL > $LOGS/create-$COLLECTION.log
}
function start_solr() {
SOLR_HOME=$1
PORT=$2
NAME=$3
ARGS=$4
echo
echo "Starting server from ${SOLR_HOME} on port ${PORT}"
# We use exec to allow process monitors to correctly kill the
# actual Java process rather than this launcher script:
export CMD="java -Djetty.port=${PORT} -Dsolr.install.dir=${APP} -Djava.awt.headless=true -Dapple.awt.UIElement=true -Dhost=localhost -Dsolr.solr.home=${SOLR_HOME} ${ARGS} -jar start.jar"
pushd $APP/example > /dev/null
exec $CMD >$LOGS/solr-$NAME.log &
echo $! >> ${PIDS}
popd > /dev/null
}
function stop_solr() {
echo
if [ -f $PIDS ]; then
echo -n "Stopping Solr.."
xargs kill < $PIDS || true
rm ${PIDS}
echo " stopped"
fi
}
function confirm_down() {
NAME=$1
PORT=$2
if curl -s http://localhost:${PORT} > /dev/null 2>&1; then
echo "Port ${PORT} for ${NAME} in use. Quitting."
exit 1
fi
}
function prepare() {
if [ -f $PIDS ]; then
echo "Found existing ${PIDS} file; stopping stale Solr instances" 1>&2
stop_solr
fi
echo "Removing stale working files"
rm -rf $APP
rm -rf $ROOT/solr
rm -rf $LOGS
mkdir -p $LOGS
echo "Preparing SOLR_HOME for tests at $ROOT/solr"
download_solr
extract_solr
prepare_solr_home $ROOT/solr/non-cloud localhost
prepare_core $ROOT/solr/non-cloud core0
prepare_core $ROOT/solr/non-cloud core1
prepare_solr_home $ROOT/solr/cloud-zk-node localhost_zk
prepare_solr_home $ROOT/solr/cloud-node0 localhost_node0
prepare_solr_home $ROOT/solr/cloud-node1 localhost_node1
prepare_core $ROOT/solr/cloud-configs cloud
}
if [ $# -eq 0 ]; then
echo "$0 [prepare] [start] [stop]"
exit
fi
while [ $# -gt 0 ]; do
if [ "$1" = "prepare" ]; then
prepare
elif [ "$1" = "stop" ]; then
stop_solr
elif [ "$1" = "start" ]; then
echo 'Starting Solr'
confirm_down non-cloud 8983
confirm_down cloud-zk 8992
confirm_down cloud-node0 8993
confirm_down cloud-node1 8994
start_solr $ROOT/solr/cloud-zk-node 8992 zk -DzkRun
wait_for ZooKeeper 8992
upload_configs localhost:9992 $ROOT/solr/cloud-configs/cloud/conf
start_solr $ROOT/solr/non-cloud 8983 non-cloud
start_solr $ROOT/solr/cloud-node0 8993 cloud-node0 -DzkHost=localhost:9992
start_solr $ROOT/solr/cloud-node1 8994 cloud-node1 -DzkHost=localhost:9992
wait_for simple-solr 8983
wait_for cloud-node0 8993
wait_for cloud-node1 8994
create_collection 8993 core0 localhost:8993_solr,localhost:8994_solr
create_collection 8993 core1 localhost:8993_solr,localhost:8994_solr
echo 'Solr started'
else
echo "Unknown command: $1"
exit 1
fi
shift
done