Re: [RFA] fix remote testing I/O conflicts

Yvan Roux <[email protected]>
Newsgroups gmane.comp.sysutils.dejagnu.general
Message-ID <CAD57uCdvX=9o0uxzy+uP_8J9_6yxUSb+tNitB3=kdNVjzpbQrQ@mail.gmail.com>
Hi,

here the patch which addresses the comments made on this list and no
irc.  It changes the layout where the testcase are downloaded on the
remote target by introducing a new directory under /tmp, where the
programs are downloaded and executed. (i.e /tmp/test_name.PID =>
/tmp/runtest.PID/test_name and execution => cd /tmp/runtest.PID/ ;
/tmp/runtest.PID/test_name).

Tested on a full cross validaiton of GCC without regressions.

Rq: The behavior of the standard routines is not changed, only the
name remotefile is modifed.

Cheers,
Yvan

2016-04-03  Yvan Roux  <[email protected]>

        * config/unix.exp (unix_load): Delegate remote directory handling to
        remote_download.
        * lib/remote.exp (remnote_download): Create a remote directory (in a
        new global remotedir) if needed and handle it.
        (remote_exec): Execute program inside remotedir when it exists.
        (remote_close): Remove remotedir when it exists.
        (standard_load): Delegate remote directory handling to
        remote_download.

On 15 March 2016 at 05:34, Ben Elliston <[email protected]> wrote:
> Your proposed solution seems fine. Please send a fully documented
> patch and I'll review it.
>
> Cheers, Ben

_______________________________________________
DejaGnu mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/dejagnu
fix-remote-layout.diff (text/plain, 2.6 KB)
diff --git a/config/unix.exp b/config/unix.exp
index c9d80dc..428f741 100644
--- a/config/unix.exp
+++ b/config/unix.exp
@@ -97,7 +97,7 @@ proc unix_load { dest prog args } {
 	    setenv SHLIB_PATH $orig_ld_library_path
 	}
     } else {
-	set remotefile "/tmp/[file tail $prog].[pid]"
+	set remotefile [file tail $prog]
 	set remotefile [remote_download $dest $prog $remotefile]
 	if { $remotefile == "" } {
 	    verbose -log "Download of $prog to [board_info $dest name] failed." 3
diff --git a/lib/remote.exp b/lib/remote.exp
index 043368b..b5f6006 100644
--- a/lib/remote.exp
+++ b/lib/remote.exp
@@ -277,6 +277,8 @@ proc local_exec { commandline inp outp timeout } {
 # redirected).
 #
 proc remote_exec { hostname program args } {
+    global remotedir
+
     if { [llength $args] > 0 } {
 	set pargs [lindex $args 0]
     } else {
@@ -312,6 +314,9 @@ proc remote_exec { hostname program args } {
     if { ![is_remote $hostname] } {
 	set result [local_exec "$program $pargs" $inp $outp $timeout]
     } else {
+        if { [info exists remotedir] } {
+            set program "cd $remotedir ; $program"
+        }
 	set result [call_remote "" exec $hostname $program $pargs $inp $outp]
     }
 
@@ -329,6 +334,11 @@ proc standard_exec { hostname args } {
 #	      or target, host or build.
 #
 proc remote_close { host } {
+    global remotedir
+
+    if {[info exists remotedir]} {
+        remote_exec $host "/bin/rm" "-rf $remotedir"
+    }
     while { 1 } {
 	set result [call_remote "" close "$host"]
 	if { [remote_pop_conn $host] != "pass" } {
@@ -422,6 +432,8 @@ proc standard_reboot { host } {
 #
 
 proc remote_download { dest file args } {
+    global remotedir
+
     if { [llength $args] > 0 } {
 	set destfile [lindex $args 0]
     } else {
@@ -449,6 +461,16 @@ proc remote_download { dest file args } {
 	    }
 	}
     }
+    if { ![info exists remotedir] } {
+        set rtmp "/tmp/runtest.[pid]"
+        set status [remote_exec $dest mkdir "-p $rtmp"]
+        if { [lindex $status 0] != 0 } {
+            verbose -log "Couldn't create remote directory $rtmp on $dest" 3
+            return [list "unresolved" ""]
+        }
+        set remotedir $rtmp
+    }
+    set destfile "$remotedir/$destfile"
 
     return [call_remote "" download $dest $file $destfile]
 }
@@ -1049,7 +1071,7 @@ proc standard_load { dest prog args } {
     }
 
     if {[is_remote $dest]} {
-	set remotefile "/tmp/[file tail $prog].[pid]"
+	set remotefile [file tail $prog]
 	set remotefile [remote_download $dest $prog $remotefile]
 	if { $remotefile == "" } {
 	    verbose -log "Download of $prog to [board_info $dest name] failed." 3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.