3 # Launcher for xseg configurations
5 NI_SAVED=${NONINTERACTIVE}
6 export NONINTERACTIVE=1
8 export NONINTERACTIVE=${NI_SAVED}
12 function pretty_print {
13 echo "======================="
15 echo "======================="
23 function parse_config {
24 [ -e ~/.xsegrc ] && source ~/.xsegrc
26 [ -z "${HOSTNAME}" ] && HOSTNAME=`hostname`
27 [ -z "${XSEG_HOME}" ] && XSEG_HOME="/root/archip/xseg"
28 [ -z "${MODULES_DIR}" ] && MODULES_DIR="${XSEG_HOME}/lib/kernel"
29 [ -z "${SPEC}" ] && SPEC="segdev:xsegbd:512:1024:12"
30 [ -z "${REQS}" ] && REQS=512
31 [ -z "${PORTS}" ] && PORTS=512
32 [ -z "${IMAGES}" ] && IMAGES="/home/user/archip/xseg/peers/user/foo"
33 [ -z "${MAPS}" ] && MAPS="/home/user/archip/xseg/peers/user/foo"
34 [ -z "${PITHOS}" ] && PITHOS="/srv/pithos/data/blocks"
35 [ -z "${PITHOSMAPS}" ] && PITHOSMAPS="/srv/pithos/data/maps"
36 [ -z "${XSEG_LOGS}" ] && XSEG_LOGS="/srv/archip/logs"
37 [ -z "${DEVICE_PREFIX}" ] && DEVICE_PREFIX="/dev/xsegbd"
38 [ -z "${XSEGBD_SYSFS}" ] && XSEGBD_SYSFS="/sys/bus/xsegbd"
39 [ -z "${CHRDEV_NAME}" ] && CHRDEV_NAME="/dev/`cat /proc/devices | grep segdev | awk '{print $2}'`"
40 [ "${CHRDEV_NAME}" = "/dev/" ] && CHRDEV_NAME="/dev/segdev"
41 [ -z "${CHRDEV_MAJOR}" ] && CHRDEV_MAJOR=`cat /proc/devices | grep segdev | awk '{print $1}'`
42 [ -z "${CHRDEV_MAJOR}" ] && CHRDEV_MAJOR=60
43 [ -z "${NR_OPS}" ] && NR_OPS=128
44 [ -z "${BPORT}" ] && BPORT=0
45 [ -z "${VPORT_START}" ] && VPORT_START=4
46 [ -z "${VPORT_END}" ] && VPORT_END=200
47 [ -z "${MPORT}" ] && MPORT=1
48 [ -z "${MBPORT}" ] && MBPORT=2
49 [ -z "${VTOOL}" ] && VTOOL=3
53 function unload_module {
58 unload_module "xsegbd"
59 rm "${CHRDEV_NAME}" || true
60 unload_module "xseg_segdev"
61 unload_module "xseg_posix"
62 unload_module "xseg_pthread"
63 unload_module "segdev"
67 function load_module {
68 (lsmod | grep "$1" > /dev/null) || insmod "${MODULES_DIR}/$1.ko" "$2" || exit 1
72 ls "${CHRDEV_NAME}" &> /dev/null || \
73 mknod "${CHRDEV_NAME}" c "${CHRDEV_MAJOR}" 0 || exit 1
79 load_module "xseg_posix"
80 load_module "xseg_pthread"
81 load_module "xseg_segdev"
83 "${XSEG_HOME}/peers/user/xseg" "${SPEC}" create || true
84 load_module "xsegbd" "spec=$SPEC"
87 function create_segment {
88 "${XSEG_HOME}/peer/users/xseg" "${SPEC}" create
91 function destroy_segment {
92 "${XSEG_TOOL}" "${SPEC}" destroy
95 function alloc_requests {
96 "${XSEG_TOOL}" "${SPEC}" $1 alloc_requests $2
99 function free_requests {
100 "${XSEG_TOOL}" "${SPEC}" $1 free_requests $2
103 function spawn_filed {
104 pgrep -f "peers/user/filed" || \
105 "${XSEG_HOME}/peers/user/filed" "$IMAGES" -p "$BPORT" -g "${SPEC}" -n \
106 ${NR_OPS} &> "${XSEG_LOGS}/filed-${HOSTNAME}" &
109 function spawn_pfiled {
110 "${XSEG_HOME}/peers/user/pfiled" -p "$BPORT" -g "${SPEC}" -n \
111 ${NR_OPS} "${PITHOS}" "${IMAGES}" -v 1 &> "${XSEG_LOGS}/pfiled-${HOSTNAME}" &
114 function spawn_pfiledm {
115 "${XSEG_HOME}/peers/user/pfiled" -p "$MBPORT" -g "${SPEC}" -n \
116 ${NR_OPS} "${PITHOSMAPS}" "${MAPS}" -v 1 &> "${XSEG_LOGS}/pfiledm-${HOSTNAME}" &
119 function spawn_sosd {
120 "${XSEG_HOME}/peers/user/mt-sosd" -p "$BPORT" -g "${SPEC}" -n \
121 ${NR_OPS} --pool "blocks" -v 3 &> "${XSEG_LOGS}/sosd-${HOSTNAME}" &
124 function spawn_sosdm {
125 "${XSEG_HOME}/peers/user/mt-sosd" -p "$MBPORT" -g "${SPEC}" -n \
126 ${NR_OPS} --pool "maps" -v 3 &> "${XSEG_LOGS}/sosdm-${HOSTNAME}" &
129 function spawn_vlmcd {
130 pgrep -f "peers/user/st-vlmcd" || \
131 "${XSEG_HOME}/peers/user/st-vlmcd" -t 1 -sp "$VPORT_START" \
132 -ep "$VPORT_END" -bp "$BPORT" -mp "$MPORT" -g \
133 "${SPEC}" -n ${NR_OPS} -v 3 &> "${XSEG_LOGS}/vlmcd-${HOSTNAME}" &
134 # alloc_requests "$VPORT:0" 128
137 function spawn_mapperdc {
138 echo "\"${XSEG_HOME}/peers/user/mt-mapperd\" -t 1 -sp \"$MPORT\" -ep
139 \"$MPORT\" -bp \"$BPORT\" -mbp \"$MBPORT\" -g \"${SPEC}\" -n ${NR_OPS} -v 3"
140 pgrep -f "mt-mapperd" || \
141 "${XSEG_HOME}/peers/user/mt-mapperd" -t 1 -sp "$MPORT" -ep "$MPORT"\
142 -bp "$BPORT" -mbp "$MBPORT" -g "${SPEC}"\
143 -n ${NR_OPS} -v 3 &> "${XSEG_LOGS}/mapperd-${HOSTNAME}" &
144 # alloc_requests "$MPORT:0" 128
147 function spawn_mapperd {
148 pgrep -f "mapperd.py" || \
149 "${XSEG_HOME}/peers/user/mapperd.py" -p "$MPORT" -b "$BPORT" -g "${SPEC}" \
150 &> "${XSEG_LOGS}/mapperd-${HOSTNAME}" &
151 # alloc_requests "$MPORT:0" 128
154 # map_volume - Map a volume to an xsegbd device
156 # @param $1 target/volume name
159 function map_volume {
160 echo "$1 $2:$3:${REQS}" > "${XSEGBD_SYSFS}/add" || exit 1
163 # unmap_device - Unmap an xsegbd device/volume
165 # @param $1 xsegbd device id
166 function unmap_device {
167 echo "$1" > "${XSEGBD_SYSFS}/remove" || exit 1
171 echo "Usage: ./launch [list | <configuration> [start | stop] | insmod | rmmod]"
174 if [ -n "$NONINTERACTIVE" ]; then
179 XSEG_TOOL="${XSEG_HOME}/peers/user/xseg"
183 echo "filed [start|stop]"
184 echo "map [start|stap]"
198 echo "HOSTNAME=${HOSTNAME}"
199 echo "XSEG_HOME=${XSEG_HOME}"
200 echo "MODULES_DIR=${MODULES_DIR}"
203 echo "PORTS=${PORTS}"
204 echo "IMAGES=${IMAGES}"
205 echo "PITHOS=${PITHOS}"
206 echo "XSEG_LOGS=${XSEG_LOGS}"
207 echo "DEVICE_PREFIX=${DEVICE_PREFIX}"
208 echo "XSEGBD_SYSFS=${XSEGBD_SYSFS}"
209 echo "CHRDEV_NAME=${CHRDEV_NAME}"
210 echo "CHRDEV_MAJOR=${CHRDEV_MAJOR}"
211 echo "NR_OPS=${NR_OPS}"
212 echo "BPORT=${BPORT}"
213 echo "VPORT=${VPORT}"
214 echo "MPORT=${MPORT}"
223 map_volume xsegvol 3 0
226 pkill -f peers/user/filed
243 pkill -f peers/user/mt-vlmcd || true
244 # free_requests "$VPORT:0" 128 || true
245 pkill -f peers/user/mt-mapperd || true
246 # free_requests "$MPORT:0" 128 || true
247 pkill -f peers/user/pfiled || true
264 pkill -f peers/user/mt-vlmcd || true
265 # free_requests "$VPORT:0" 128 || true
266 pkill -f peers/user/mt-mapperd || true
267 # free_requests "$MPORT:0" 128 || true
268 pkill -f peers/user/filed || true
285 pkill -f peers/user/mt-vlmcd || true
286 # free_requests "$VPORT:0" 128 || true
287 pkill -f peers/user/mt-mapperd || true
288 # free_requests "$MPORT:0" 128 || true
289 pkill -f peers/user/filed || true
309 pkill -f peers/user/st-vlmcd || true
310 # free_requests "$VPORT:0" 128 || true
311 pkill -f peers/user/mt-mapperd || true
312 # free_requests "$MPORT:0" 128 || true
313 pkill -f peers/user/pfiled || true
328 pkill -f peers/user/mt-mapperd || true
346 pkill -f peers/user/st-vlmcd || true
347 # free_requests "$VPORT:0" 128 || true
348 pkill -f peers/user/mt-mapperd || true
349 # free_requests "$MPORT:0" 128 || true
350 pkill -f peers/user/mt-sosd || true
365 pkill -f peers/user/mt-mapperd || true