Changeset 1143 in ProjectBuilder
- Timestamp:
- Jan 10, 2011, 2:26:33 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
devel/pb/bin/pb
r1140 r1143 1668 1668 } 1669 1669 1670 # Useless for VE 1671 my $nport; 1672 if ($cmt !~ /^VE/) { 1673 $nport = $sshport->{$ENV{'PBPROJ'}}; 1674 $nport = "$pbport" if (defined $pbport); 1675 } 1670 # Useless for VE 1671 my $nport = pb_get_port($sshport->{$ENV{'PBPROJ'}},$cmt) if ($cmt !~ /^VE/); 1676 1672 1677 1673 # Remove a potential $ENV{'HOME'} as tdir should be relative to pb's home … … 1915 1911 # TODO: vmmonport should be optional 1916 1912 my ($ptr,$ptr2,$vmpath,$vmport,$vmsize,$vmmonport) = pb_conf_get("vmtype","vmcmd","vmpath","vmport","vmsize","vmmonport"); 1917 my ($vmopt,$vm tmout,$vmsnap) = pb_conf_get_if("vmopt","vmtmout","vmsnap");1913 my ($vmopt,$vmmem,$vmtmout,$vmsnap) = pb_conf_get_if("vmopt","vmmem","vmtmout","vmsnap"); 1918 1914 1919 1915 my $vmtype = $ptr->{$ENV{'PBPROJ'}}; … … 1938 1934 } elsif (defined $vmopt->{$ENV{'PBPROJ'}}) { 1939 1935 $ENV{'PBVMOPT'} .= " $vmopt->{$ENV{'PBPROJ'}}" if ($ENV{'PBVMOPT'} !~ / $vmopt->{$ENV{'PBPROJ'}}/); 1936 } 1937 1938 # How much memory to allocate for VMs 1939 if (defined $vmmem->{$v}) { 1940 $ENV{'PBVMOPT'} .= " -m $vmmem->{$v}"; 1941 } elsif (defined $vmmem->{$ENV{'PBPROJ'}}) { 1942 $ENV{'PBVMOPT'} .= " -m $vmmem->{$ENV{'PBPROJ'}}"; 1940 1943 } 1941 1944 … … 1963 1966 $ENV{'PBVMTMOUT'} = $vmtmout->{$ENV{'PBPROJ'}}; 1964 1967 } 1965 my $nport = $vmport->{$ENV{'PBPROJ'}}; 1966 $nport = "$pbport" if (defined $pbport); 1968 my $nport = pb_get_port($vmport->{$ENV{'PBPROJ'}}); 1967 1969 1968 1970 my $cmd; … … 2224 2226 pb_build2ssh() if (($all == 1) && ($action eq "build")); 2225 2227 2228 # Adapt // mode to memory size 2229 $pbparallel = pb_set_parallel($vtype); 2230 2226 2231 my ($vmexist,$vmpid) = (undef,undef); 2227 2232 my $pm = new Parallel::ForkManager($pbparallel) if (defined $pbparallel); 2228 2233 2234 # Set which port the VM will use to communicate 2235 $pm->run_on_start(pb_set_port(); 2236 2237 my $counter = 0; 2229 2238 foreach my $v (@$v) { 2230 $pm->start and next if (defined $pbparallel); 2239 $counter++; 2240 # Modulo pbparallel 2241 $counter = 1 if ($counter > $pbparallel); 2242 $pm->start($counter) and next if (defined $pbparallel); 2231 2243 # Prepare the script to be executed on the VM/VE 2232 2244 # in $ENV{'PBDESTDIR'}/pbscript.$$ … … 2331 2343 2332 2344 if ($vtype eq "vm") { 2333 # Skip that VM if itsomething went wrong2345 # Skip that VM if something went wrong 2334 2346 if (($vmpid == 0) && ($vmexist == 0)) { 2335 2347 $pm->finish if (defined $pbparallel); … … 2500 2512 my $pbscript = "$ENV{'PBDESTDIR'}/setupv"; 2501 2513 2514 # Adapt // mode to memory size 2515 $pbparallel = pb_set_parallel($vtype); 2516 2517 my $pm = new Parallel::ForkManager($pbparallel) if (defined $pbparallel); 2518 2519 # Set which port the VM will use to communicate 2520 $pm->run_on_start(pb_set_port(); 2521 2522 my $counter = 0; 2502 2523 foreach my $v (@$vm) { 2524 $counter++; 2525 # Modulo pbparallel 2526 $counter = 1 if ($counter > $pbparallel); 2527 $pm->start($counter) and next if (defined $pbparallel); 2528 2503 2529 # Deal with date sync. 2504 2530 my ($ntpline,$dateline) = pb_date2v($vtype,$v); … … 2547 2573 2548 2574 my ($vmhost,$vmport,$vmntp) = pb_conf_get("vmhost","vmport","vmntp"); 2549 my $nport = $vmport->{$ENV{'PBPROJ'}}; 2550 $nport = "$pbport" if (defined $pbport); 2575 my $nport = pb_get_port($vmport->{$ENV{'PBPROJ'}}); 2551 2576 2552 2577 # Skip that VM if something went wrong … … 2880 2905 2881 2906 pb_script2v($pbscript,$vtype,$pbforce,$v); 2907 $pm->finish if (defined $pbparallel); 2908 } 2909 if (defined $pbparallel) { 2910 $pm->wait_all_children; 2882 2911 } 2883 2912 return; … … 3429 3458 } 3430 3459 3460 # Manages VM SSH port communication 3461 sub pb_get_port { 3462 3463 my $port = shift; 3464 my $cmt = shift; 3465 3466 die "No port passed in parameter. Report to dev team\n" if (not defined $port); 3467 my $nport = $port; 3468 # Maybe a port was given as parameter so overwrite 3469 $nport = "$pbport" if (defined $pbport); 3470 # Maybe in // mode so use the env var set up as an offset to the base port, except when called from send2target for Packages 3471 if ($cmt ne "Packages") { 3472 $nport += $ENV{'PBVMPORT'} if ((defined $pbparallel) && (defined $ENV{'PBVMPORT'})); 3473 } 3474 return($nport); 3475 } 3476 3477 sub pb_set_port { 3478 3479 my ($pid,$ident) = @_; 3480 $ENV{'PBVMPORT'} = $ident; 3481 } 3482 3483 sub pb_set_parallel { 3484 3485 my $vtype = shift; 3486 3487 my ($pbvmmem) = pb_conf_get_if("pbvmmem"); 3488 3489 # Take care of memory size if VM, parallel mode and more than 1 action 3490 if ((defined $pbparallel) && ($pbparallel ne 1) && ($vtype eq "vm")) { 3491 eval 3492 { 3493 require Linux::SysInfo; 3494 Linux::SysInfo->import(); 3495 }; 3496 if ($@) { 3497 # Linux::SysInfo not found, defaulting to 4 3498 $pbparallel = 4; 3499 } else { 3500 # Using the memory size 3501 my $si = Linux::SysInfo::sysinfo(); 3502 if (not defined $si) { 3503 $pbparallel = 4 3504 } else { 3505 # Keep the number of VM whose memory can be allocated 3506 my $ram = $si->{"totalram"}-$si->{"sharedram"}-$si->{"bufferram"}; 3507 my $ram2; 3508 if ((defined $pbvmmem) and (defined $pbvmmem->{$ENV{'PBPROJ'}})) { 3509 $ram2 = $pbvmmem->{$ENV{'PBPROJ'}}; 3510 } else { 3511 # Default for KVM/QEMU 3512 $ram2 = 128; 3513 } 3514 $pbparallel = sprintf("%d",$ram/$ram2); 3515 } 3516 } 3517 } 3518 return($pbparallel); 3519 } 3520 3521 3431 3522 1;
Note:
See TracChangeset
for help on using the changeset viewer.