Changeset 542c12b in tol for tolsh/tolsh.vfs/lib/tolcomm/tolserver.tcl
- Timestamp:
- Mar 11, 2010, 11:40:22 AM (17 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 2ef94a4
- Parents:
- a4e3c41
- File:
-
- 1 edited
-
tolsh/tolsh.vfs/lib/tolcomm/tolserver.tcl (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tolsh/tolsh.vfs/lib/tolcomm/tolserver.tcl
ra4e3c41 r542c12b 29 29 queue,cancel "" 30 30 } 31 } 31 32 variable trace_active 33 34 set trace_active 0 35 } 36 37 global shared_data 38 set shared_data(request) "" 39 set shared_data(init) "" 40 set shared_data(server_init) 0 32 41 33 42 ############################################################################### … … 288 297 set idtask [insert_expr $chan $idrq $cmd] 289 298 send_to_client $chan "TSTART" "$idrq $idtask" 290 schedule_queue299 after idle ::tolserver::dispatch_to_slave 291 300 292 301 log "debug" "leave, on_toleval" … … 440 449 ############################################################################### 441 450 proc ::tolserver::start { args } { 442 variabledata451 global shared_data 443 452 444 453 array set options { 445 454 -port 6669 446 455 -logfile "" 456 -compile "" 447 457 } 448 458 array set options $args 449 459 450 460 ::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 461 463 if {[catch {open_socket $options(-port)} msgerr]} { 462 464 log emergency "::tolserver::start '$msgerr'" … … 465 467 log "notice" "started" 466 468 } 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 477 proc ::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 486 proc 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]" 467 491 } 468 492 … … 508 532 set client [get_client_id $chan] 509 533 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] 512 535 log "debug" "leave, insert_expr, $idtask" 513 536 set idtask 514 537 } 515 538 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 } 539 proc ::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 546 proc ::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 559 proc ::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 575 proc ::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 584 proc ::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.
