Changeset 542c12b in tol for tolsh/tolsh.vfs/lib/tolcomm


Ignore:
Timestamp:
Mar 11, 2010, 11:40:22 AM (17 years ago)
Author:
Liván Ramírez Dorta <livanr68@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
2ef94a4
Parents:
a4e3c41
Message:

refs#873: Improve TolServer process structure

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@2052 be4846ae-f051-483a-831f-b64e7d08527f

Location:
tolsh/tolsh.vfs/lib/tolcomm
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • tolsh/tolsh.vfs/lib/tolcomm/pkgIndex.tcl

    ra4e3c41 r542c12b  
    11
    22  package ifneeded tolserver 1.0 [list source [file join $dir tolserver.tcl]]
     3  package ifneeded tolshared 1.0 [list source [file join $dir tolshared.tcl]]
     4  package ifneeded tolslave 1.0 [list source [file join $dir tolslave.tcl]]
    35  package ifneeded tolclient 1.0 [list source [file join $dir tolclient.tcl]]
    46  package ifneeded rmtps_client 1.0 [list source [file join $dir rmtps_client.tcl]]
  • tolsh/tolsh.vfs/lib/tolcomm/tolserver.tcl

    ra4e3c41 r542c12b  
    2929    queue,cancel ""
    3030  }
    31 }
     31 
     32  variable trace_active
     33 
     34  set trace_active 0
     35}
     36
     37global shared_data
     38set shared_data(request) ""
     39set shared_data(init) ""
     40set shared_data(server_init) 0
    3241
    3342###############################################################################
    … …  
    288297  set idtask [insert_expr $chan $idrq $cmd]
    289298  send_to_client $chan "TSTART" "$idrq $idtask"
    290   schedule_queue
     299  after idle ::tolserver::dispatch_to_slave
    291300 
    292301  log "debug" "leave, on_toleval"
    … …  
    440449###############################################################################
    441450proc ::tolserver::start { args } {
    442   variable data
     451  global shared_data
    443452
    444453  array set options {
    445454    -port 6669
    446455    -logfile ""
     456    -compile ""
    447457  }
    448458  array set options $args
    449459
    450460  ::tlogger::init tolserver $options(-logfile)
    451   ::tlogger::level tolserver "error"
    452 
    453   # redirect the log
    454   ::tol::console eval [string map "%P $options(-port)" {
    455     Text {
    456       Text srv_root = TolAppDataPath+"/server";
    457       Real OSDirMake(srv_root);
    458       Text PutDumpFile(srv_root+"/start.%P.log")
    459     }
    460   }]
     461  ::tlogger::level tolserver "debug"
     462
    461463  if {[catch {open_socket $options(-port)} msgerr]} {
    462464    log emergency "::tolserver::start '$msgerr'"
    … …  
    465467    log "notice" "started"
    466468  }
     469 
     470  server_attach_data
     471
     472  log "debug" "shared_data(init)=$options(-compile)"
     473  set shared_data(init) $options(-compile) 
     474  set shared_data(server_init) 1
     475}
     476
     477proc ::tolserver::server_attach_data {} {
     478  package require tequila
     479  global shared_data
     480
     481  tequila::open localhost 20458
     482  tequila::attach shared_data
     483  trace add var shared_data write tolserver::server_listen
     484}   
     485
     486proc tolserver::server_listen {name index op} {
     487  global shared_data
     488
     489  log "debug" "server_listen:index=$index"
     490  log "debug" "[array get shared_data]"
    467491}
    468492
    … …  
    508532  set client [get_client_id $chan]
    509533  set idtask "${client}:$data(queue,id)"
    510   lappend data(queue,tasks) [list $idtask $idrq $chan $tol_expr]
    511 
     534  push_queue_tasks [list $idtask $idrq $chan $tol_expr]
    512535  log "debug" "leave, insert_expr, $idtask"
    513536  set idtask
    514537}
    515538
    516 proc ::tolserver::process_queue { } {
    517   variable data
    518 
    519   log "debug" "enter, process_queue"
    520 
    521   if {[llength $data(queue,tasks)]} {
    522     set item [lindex $data(queue,tasks) 0]
    523     set data(queue,tasks) [lrange data(queue,tasks) 1 end]
    524     foreach {idtask idrq chan tol_expr} $item break
    525     set idx [lsearch $data(queue,cancel) $idrq]
    526     if {$idx != -1} {
    527       log debug "canceling task $idtask"
    528       # remove idrq from the cancel list
    529       set data(queue,cancel) [lreplace $data(queue,cancel) $idx $idx]
    530     } else {
    531       log debug "processing task $idtask"
    532       ::tol::console eval $tol_expr
    533       # inform client this request has being finished
    534       after idle [namespace code "send_to_client $chan TFINISH $idtask"]
    535     }
    536     schedule_queue
    537   }
    538 
    539   log "debug" "leave, process_queue"
    540 }
    541 
    542 ###########################################################################
    543 #
    544 #
    545 #
    546 ###########################################################################
    547 proc ::tolserver::schedule_queue { } {
    548 
    549   variable data
    550 
    551   if {[llength $data(queue,tasks)]} {
    552     after idle [namespace code process_queue]
    553   }
    554 }
     539proc ::tolserver::push_queue_tasks {item} {
     540  variable data
     541
     542  log "debug" "tolserver::push_queue_tasks:item=$item"
     543  lappend data(queue,tasks) $item
     544}
     545
     546proc ::tolserver::dispatch_to_slave {} {
     547  global shared_data
     548  variable trace_active
     549
     550  log "debug" "tolserver::dispatch_to_slave"
     551  if {$shared_data(slave_status) eq "ready"} {
     552    send_tasks_to_slave
     553  } else {
     554    set trace_active 1
     555    trace add var shared_data(slave_status) write ::tolserver::send_tasks_to_slave
     556  }
     557}
     558
     559proc ::tolserver::send_tasks_to_slave {} {
     560  global shared_data
     561  variable trace_active
     562
     563  if {$trace_active == 1} {
     564    trace remove var shared_data(slave_status) write ::tolserver::send_tasks_to_slave
     565    set trace_active 0
     566  }
     567  log "debug" "tolserver::send_tasks_to_slave"
     568  set t_list [get_queue_tasks]
     569  set_queue_shared $t_list
     570  if {$shared_data(ack) eq 0} {
     571    vwait shared_data(ack)
     572  }
     573}
     574
     575proc ::tolserver::get_queue_tasks {} {
     576  variable data
     577
     578  set t_list $data(queue,tasks)
     579  set data(queue,tasks) [list]
     580  log "debug" "tolserver::get_queue_tasks:t_list=$t_list"
     581  return $t_list
     582}
     583
     584proc ::tolserver::set_queue_shared {t_list} {
     585  global shared_data
     586 
     587  log "debug" "tolserver::set_queue_shared:t_list=$t_list"
     588  set shared_data(request) $t_list
     589}
Note: See TracChangeset for help on using the changeset viewer.