File: lock_user.sh

package info (click to toggle)
oar 2.5.4-2
  • links: PTS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 11,064 kB
  • sloc: perl: 28,891; ruby: 5,813; sh: 5,208; ml: 3,408; sql: 3,255; cpp: 2,277; ansic: 702; makefile: 389; php: 99; exp: 23
file content (52 lines) | stat: -rw-r--r-- 1,283 bytes parent folder | download | duplicates (9)
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
# $Id$
#It is a lock on idJob per user name
LOCKFILE=/tmp/.OARlockfile
MAXBLOCKTIME=120
SLEEPTIME=1

# take the lock
# $1 : job ID for the reservation
# $2 : user login
#return 1 if the lock times out
lock_file () {
    SPECIFICLOCKFILE=$LOCKFILE"_"$2
    RETURNCODE=0
    WAITINGTIME=0
    set -C
    until ( echo $1 > $SPECIFICLOCKFILE ) 2> /dev/null
    do
        echo "[LOCK] I am waiting for $WAITINGTIME seconds"
        if (( $WAITINGTIME > $MAXBLOCKTIME))
        then
            echo "[LOCK] It is enough, it may be a bug; I take the lock"
            rm -f $SPECIFICLOCKFILE
            RETURNCODE=1
        else
            sleep $SLEEPTIME
        fi
        ((WAITINGTIME= $WAITINGTIME + $SLEEPTIME))
    done
    set +C
    echo "[LOCK] Lock taken"
    return $RETURNCODE
}

#release semaphore
# $1 : job ID for the reservation
# $2 : user login
# return 1 if lock file is not right
unlock_file () {
    SPECIFICLOCKFILE=$LOCKFILE"_"$2
    RETURNCODE=0
    LOCKFILEID=`cat $SPECIFICLOCKFILE`
    if [ "x$LOCKFILEID" == "x$1"  ]
    then
        echo "[LOCK] I release the lock"
        rm -f $SPECIFICLOCKFILE
    else
        echo "[LOCK] this lock is not mine, execution was too long; maximum is $MAXBLOCKTIME"
        RETURNCODE=1
    fi
    return $RETURNCODE
}