The branch, master has been updated via 2747cda3acda1531fccbd52092e08837866d60ab (commit) via 83df64accdfbae7225d3894b49b6c0cde3124847 (commit) via 239588d6ced18485c821c81ce305d9c8d2a2eb2f (commit) via d285cbef38ba3d3346c7aaf09b1d06ff9e592fbb (commit) via f1c987d5219aabd1253b9f7d20ad2a98cddd313d (commit) via 104db977ff52500d132973cb9481373ba6e367bf (commit) from bdf58be37831c772c5f888e267e807c87d13f3d3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2747cda3acda1531fccbd52092e08837866d60ab Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Fri Mar 16 00:05:57 2012 +0100 Improve concurrent database access with session db backend SQLite. commit 83df64accdfbae7225d3894b49b6c0cde3124847 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Fri Mar 16 00:04:53 2012 +0100 Silence error messages if the agent's session.log file is not accessible (e.g. on NFSv4+Krb5-mounted homes). commit 239588d6ced18485c821c81ce305d9c8d2a2eb2f Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Fri Mar 16 00:00:37 2012 +0100 Add/enable debugging of x2gocleansessions. commit d285cbef38ba3d3346c7aaf09b1d06ff9e592fbb Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Thu Mar 15 23:58:22 2012 +0100 Fix race condition between session.log of x2goagent and x2gocleansessions. If x2goagent is now fast enough with appending the new session state to the session.log file, the x2gocleansessions script will mark the session as suspended during the session resuming process. commit f1c987d5219aabd1253b9f7d20ad2a98cddd313d Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Thu Mar 15 23:55:11 2012 +0100 no newline when printing the status commit 104db977ff52500d132973cb9481373ba6e367bf Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Thu Mar 15 23:54:35 2012 +0100 correct changelog ----------------------------------------------------------------------- Summary of changes: debian/changelog | 14 ++++++++++---- x2goserver/bin/x2goresume-session | 30 +++++++++++++++++------------- x2goserver/lib/x2gogetstatus | 2 +- x2goserver/lib/x2gosqlitewrapper.pl | 3 ++- x2goserver/sbin/x2gocleansessions | 16 ++++++++-------- x2goserver/sbin/x2golistsessions_root | 2 +- 6 files changed, 39 insertions(+), 28 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index f8a24d5..e5c3971 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,10 +11,16 @@ x2goserver (3.1.1.0-0~x2go1) UNRELEASED; urgency=low by X2Go client applications to retrieve a list of server-side supported X2Go features. - Update date and version number in man pages. - - Add syslogging to SQLite3 session DB backend for occuring - DB failures. - - If setting a session state to 'R' fails in x2goresume-session, - simly try again. + - Fix race condition between session.log of x2goagent and + x2gocleansessions. If x2goagent is now fast enough with appending + the new session state to the session.log file, the x2gocleansessions + script will mark the session as suspended during the session + resuming process. + - Add X2Go server script x2gogetstatus. + - Add/enable debugging of x2gocleansessions. + - Silence error messages if the agent's session.log file is not accessible + (e.g. on NFSv4+Krb5-mounted homes). + - Improve concurrent database access with session db backend SQLite. * Remove /etc/x2go/applications on package removal if it is a symlink, keep it, if it is a directory. Remove /etc/x2go (if empty after purge) on package purge. diff --git a/x2goserver/bin/x2goresume-session b/x2goserver/bin/x2goresume-session index baf639a..04d2eea 100755 --- a/x2goserver/bin/x2goresume-session +++ b/x2goserver/bin/x2goresume-session @@ -149,25 +149,28 @@ fi echo "$NEWOPTIONS" >"${SESSION_DIR}/options" -# we really have to make sure the session database got this write operation -# this may just be an SQLite issue so... -# FIXME: probably migrate this piece of code to the SQLite db backend... -while True; do - $X2GO_LIB_PATH/x2goresume "$X2GO_CLIENT" "$SESSION_NAME" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" > /dev/null - if [ $($X2GO_LIB_PATH/x2gogetstatus "$SESSION_NAME") == "R" ]; then - break; - else - $X2GO_LIB_PATH/x2gosyslog "$0" "warning" "failed to write to X2Go db, will try again..." - sleep 1; - fi -done - # run x2goserver-extensions for pre-resume x2gofeature X2GO_RUN_EXTENSIONS &>/dev/null && x2goserver-run-extensions "$SESSION_NAME" pre-resume || true kill -HUP $X2GO_AGENT_PID &>/dev/null && { $X2GO_LIB_PATH/x2gosyslog "$0" "notice" "client $X2GO_CLIENT has successfully resumed session with ID $SESSION_NAME" + # FIXME: the below code may not be necessary as we fixed a race condition between x2gocleansessions and x2goagent + + # we really have to make sure the session database gets this write operation + # this may just be an SQLite issue so... + # FIXME: probably migrate this piece of code to the SQLite db backend... + #while true; do + # $X2GO_LIB_PATH/x2goresume "$X2GO_CLIENT" "$SESSION_NAME" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" > /dev/null + # if [ $($X2GO_LIB_PATH/x2gogetstatus "$SESSION_NAME") == "R" ]; then + # break; + # else + # $X2GO_LIB_PATH/x2gosyslog "$0" "warning" "failed to write to X2Go db, will try again..." + # sleep 1; + # fi + #done + $X2GO_LIB_PATH/x2goresume "$X2GO_CLIENT" "$SESSION_NAME" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" > /dev/null + # resume x2godesktopsharing, if it has been in use before the session got suspended x2gofeature X2GO_DESKTOPSHARING &>/dev/null && x2goresume-desktopsharing "$SESSION_NAME" || true @@ -191,3 +194,4 @@ kill -HUP $X2GO_AGENT_PID &>/dev/null && { echo "gr_port=$GR_PORT" echo "sound_port=$SOUND_PORT" echo "fs_port=$FS_PORT" + diff --git a/x2goserver/lib/x2gogetstatus b/x2goserver/lib/x2gogetstatus index a245352..d2271a4 100755 --- a/x2goserver/lib/x2gogetstatus +++ b/x2goserver/lib/x2gogetstatus @@ -34,7 +34,7 @@ my $status; my $sid=shift or die; $status = db_getstatus($sid); -print "$status\n"; +print "$status"; # closing syslog closelog; diff --git a/x2goserver/lib/x2gosqlitewrapper.pl b/x2goserver/lib/x2gosqlitewrapper.pl index 1d8923a..bb0e621 100755 --- a/x2goserver/lib/x2gosqlitewrapper.pl +++ b/x2goserver/lib/x2gosqlitewrapper.pl @@ -63,7 +63,8 @@ my $dbfile="$homedir/x2go_sessions"; my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwuid($<); my $realuser=$uname; -my $dbh=DBI->connect("dbi:SQLite:dbname=$dbfile","","",{AutoCommit => 1}) or die $_; +my $dbh=DBI->connect("dbi:SQLite:dbname=$dbfile","","",{sqlite_use_immediate_transaction => 1, AutoCommit => 1, }) or die $_; +$dbh->sqlite_busy_timeout( 2000 ); my $cmd=shift or die "command not specified"; my $rc=0; diff --git a/x2goserver/sbin/x2gocleansessions b/x2goserver/sbin/x2gocleansessions index b3f65db..6e21482 100755 --- a/x2goserver/sbin/x2gocleansessions +++ b/x2goserver/sbin/x2gocleansessions @@ -56,12 +56,12 @@ sub check_stat my $sess=shift; my $user=shift; my $log="~$user/.x2go/C-$sess/session.log"; - my $text=`tail -1 $log`; + my $text=`tail -1 $log 2>/dev/null`; if ($text =~ m/Session suspended/) { return 0; } - return 1; + return 1; } sub catch_term @@ -101,15 +101,15 @@ elsif ($pid == 0 ) my @sinfo=split('\\|',"@outp[$i]"); if (@sinfo[4]eq 'F') { - #print "@sinfo[1], is blocked\n"; - #print "(@sinfo[1])Unmounting all shares\n"; + syslog('debug', "@sinfo[1] is blocked"); + syslog('debug', "@sinfo[1]: unmounting all shares"); system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); } elsif (! check_pid (@sinfo[0],@sinfo[1],@sinfo[12])) { system("su @sinfo[11] -c \"$x2go_lib_path/x2gochangestatus 'F' @sinfo[1] \" > /dev/null"); - #print "@sinfo[1], pid @sinfo[0] not exist, changing status from @sinfo[4] to F\n"; - #print "(@sinfo[1])Unmounting all shares\n"; + syslog('debug', "@sinfo[1], pid @sinfo[0] does not exist, changing status from @sinfo[4] to F"); + syslog('debug', "@sinfo[1]: unmounting all shares"); system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); } else @@ -119,8 +119,8 @@ elsif ($pid == 0 ) if (!check_stat(@sinfo[1],@sinfo[11])) { system("su @sinfo[11] -c \"$x2go_lib_path/x2gochangestatus 'S' @sinfo[1] \" > /dev/null"); - #print "@sinfo[1], is suspended, changing status from @sinfo[4] to S\n"; - #print "(@sinfo[1])Unmounting all shares\n"; + syslog("@sinfo[1] is suspended, changing status from @sinfo[4] to S"); + syslog("@sinfo[1]: unmounting all shares"); system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); } } diff --git a/x2goserver/sbin/x2golistsessions_root b/x2goserver/sbin/x2golistsessions_root index c1f0567..dddcae3 100755 --- a/x2goserver/sbin/x2golistsessions_root +++ b/x2goserver/sbin/x2golistsessions_root @@ -35,7 +35,7 @@ sub check_stat my $sess=shift; my $user=shift; my $log="~$user/.x2go/C-$sess/session.log"; - my $text=`tail -1 $log`; + my $text=`tail -1 $log 2>/dev/null`; if ($text =~ m/Session suspended/) { return 0; hooks/post-receive -- x2goserver.git (X2Go Server) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2goserver.git" (X2Go Server).