Changeset 25027 for branches/pap/Nebulous-Server/bin/nebdiskd
- Timestamp:
- Aug 7, 2009, 4:08:25 PM (17 years ago)
- Location:
- branches/pap
- Files:
-
- 3 edited
-
. (modified) (1 prop)
-
Nebulous-Server (modified) (1 prop)
-
Nebulous-Server/bin/nebdiskd (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap
- Property svn:mergeinfo changed
-
branches/pap/Nebulous-Server
- Property svn:mergeinfo changed
-
branches/pap/Nebulous-Server/bin/nebdiskd
r23675 r25027 1 1 #!/usr/bin/env perl 2 2 3 # Copyright (C) 2007 Joshua Hoblitt 4 # 5 # $Id: nebdiskd,v 1.14 2008-10-16 22:51:34 jhoblitt Exp $ 3 # Copyright (C) 2007-2009 Joshua Hoblitt 6 4 7 5 use strict; … … 35 33 $user, 36 34 $group, 35 $retry, 37 36 ); 38 37 39 38 GetOptions( 40 'dbhost| h=s' => \$dbhost,39 'dbhost|H=s' => \$dbhost, 41 40 'dbpass|p=s' => \$dbpass, 42 41 'dbuser|u=s' => \$dbuser, … … 46 45 'pidfile=s' => \$pidfile, 47 46 'restart|r' => \$restart, 47 'retry=i' => \$retry, 48 48 'stop|s' => \$stop, 49 'user =s'=> \$user,49 'user|U=s' => \$user, 50 50 'verbose|v' => \$verbose, 51 51 ) || pod2usage( 2 ); … … 61 61 $dbhost ||= $c->get_dbhost || $ENV{'NEB_DBHOST'} || 'localhost'; 62 62 $dbuser ||= $c->get_dbuser || $ENV{'NEB_USER'}; 63 $dbpass ||= $c->get_dbpass || $ENV{'NEB_PASS'} ;63 $dbpass ||= $c->get_dbpass || $ENV{'NEB_PASS'} || undef; 64 64 $pidfile ||= $c->get_pidfile || "/var/tmp/nebdiskd"; 65 65 $user ||= $c->get_user || $<; # user 66 66 $group ||= $c->get_group || $); # group 67 68 my $mounts = $c->get_mounts; 67 $retry ||= $c->get_retry || 1; 68 69 #my $mounts = $c->get_mounts; 69 70 my $poll_interval = $c->get_poll_interval || 5; 70 71 … … 80 81 $c->set_pidfile($pidfile); 81 82 $c->set_poll_interval($poll_interval); 83 $c->set_retry($retry); 82 84 $c->write; 83 85 84 86 pod2usage( -msg => "Unknown option: @ARGV", -exitval => 2 ) if @ARGV; 85 pod2usage( -msg => "Required options: --db -- user --pass", -exitval => 2 )86 unless $db && $dbuser && $dbpass;87 pod2usage( -msg => "Required options: --db --dbuser", -exitval => 2 ) 88 unless $db && $dbuser; 87 89 88 90 # start up logging … … 108 110 log4perl.appender.Mailer.to = ps-ipp-ops@ifa.hawaii.edu 109 111 log4perl.appender.Mailer.subject = nebdiskd alert 110 log4perl.appender.AppError.Filter= MatchWarn 112 log4perl.appender.Mailer.buffered = 0 113 log4perl.appender.Mailer.Filter= MatchWarn 111 114 log4perl.appender.Mailer.layout = Log::Log4perl::Layout::PatternLayout 112 115 log4perl.appender.Mailer.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} | %H | %p | %M - %m%n 116 117 log4perl.appender.Limiter = Log::Log4perl::Appender::Limit 118 log4perl.appender.Limiter.appender = Mailer 119 log4perl.appender.Limiter.block_period = 300 113 120 '; 114 121 Log::Log4perl::init(\$conf); … … 136 143 poll_interval => $poll_interval, 137 144 debug => $debug, 145 retry => $retry, 138 146 ); 139 147 }; … … 155 163 my $dbhost = $p{dbhost} or return; 156 164 my $dbuser = $p{dbuser} or return; 157 my $dbpass = $p{dbpass} or return;165 # my $dbpass = $p{dbpass} or return; 158 166 my $poll_interval = $p{poll_interval} || 60; 159 167 my $debug = $p{debug} || 0; 168 my $retry = $p{retry} || 1; 160 169 161 170 # setup the db on every pass incase the database died on us … … 168 177 169 178 eval { 170 my $r_query = $dbh->prepare_cached("REPLACE INTO mount VALUES(?, ?, ?)"); 171 my $d_query = $dbh->prepare_cached("DELETE FROM mount WHERE mountpoint = ?"); 172 179 my $r_query = $dbh->prepare_cached("REPLACE INTO mountedvol SELECT *, ?, ? FROM volume WHERE mountpoint = ?"); 180 my $d_query = $dbh->prepare_cached("DELETE FROM mountedvol WHERE mountpoint = ?"); 181 182 # get list of mount points 183 my $mounts = []; 184 { 185 # there may be multiple vol_ids per mountpoint but we only need to 186 # check each mointpont once 187 my $query = $dbh->prepare_cached("SELECT DISTINCT mountpoint FROM volume WHERE available = 1"); 188 $query->execute; 189 while (my $row = $query->fetchrow_hashref) { 190 push @$mounts, $row; 191 } 192 $query->finish; 193 } 194 173 195 # determine valid mountpoints 174 196 foreach my $mnt (@$mounts) { 175 $log->debug("checking $mnt"); 197 my $mountpoint = $mnt->{'mountpoint'}; 198 $log->debug("checking $mountpoint"); 176 199 # this /SHOULD/ fail if the mount point is handled by the 177 200 # automounter and it fails to mount 178 eval { 179 unless (is_mountpoint($mnt)) { 201 my $tries = 0; 202 TEST: eval { 203 $tries++; 204 unless (is_mountpoint($mountpoint)) { 180 205 $log->warn("$mnt is not a valid mountpoint"); 181 206 } 182 207 }; 183 208 if ($@) { 209 # try is_mountpoint() again if $retry > 1 210 if ($tries < $retry) { 211 $log->warn("retrying test of $mountpoint"); 212 goto TEST; 213 } 184 214 $log->warn($@); 185 $d_query->execute($m nt);215 $d_query->execute($mountpoint); 186 216 next; 187 217 } … … 190 220 # we determine if it's a valid mountpoint incase 191 221 # is_mountpoint() invokes the automounter 192 my $dev_info = df($m nt, 1024);222 my $dev_info = df($mountpoint, 1024); 193 223 unless (defined $dev_info) { 194 $log->error("can't find device info for $m nt");224 $log->error("can't find device info for $mountpoint"); 195 225 next; 196 226 } 197 227 198 $r_query->execute($mnt, @$dev_info{qw( blocks used )}); 199 $log->debug("adding $mnt to db"); 228 # find vol_id(s) for mountpoint 229 $r_query->execute(@$dev_info{qw( blocks used )}, $mountpoint); 230 $log->debug("adding $mountpoint to db"); 200 231 201 232 } 202 233 203 $dbh->do("call getmountedvol()");204 205 $dbh->commit;206 $log->debug("commited to database");234 # $dbh->do("call getmountedvol()"); 235 236 # $dbh->commit; 237 # $log->debug("commited to database"); 207 238 }; 208 239 if ($@) { 209 $dbh->rollback;210 $log->debug("rolledback transaction");240 # $dbh->rollback; 241 # $log->debug("rolledback transaction"); 211 242 $log->logdie($@); 212 243 } … … 235 266 my %p = @_; 236 267 268 # $p{dbpass} may be undef; 269 237 270 return unless defined $p{db} 238 271 and defined $p{dbhost} 239 and defined $p{dbuser} 240 and defined $p{dbpass}; 272 and defined $p{dbuser}; 241 273 242 274 my $sql = Nebulous::Server::SQL->new; … … 249 281 RaiseError => 1, 250 282 PrintError => 1, 251 AutoCommit => 0,283 AutoCommit => 1, # don't want this to be trasnactional 252 284 }, 253 285 ); … … 255 287 eval { 256 288 $dbh->do( $sql->set_transaction_model ); 257 $dbh->commit;289 # $dbh->commit; 258 290 }; 259 291 if ($@) { 260 $dbh->rollback;292 # $dbh->rollback; 261 293 $log->logdie($@); 262 294 } … … 344 376 =head1 SYNOPSIS 345 377 346 nebdiskd [--db <db name>] [--user <db username>] [--pass <db password>] [--debug] [--pidfile <filename>] [--stop] [--restart] [--verbose] 378 nebdiskd [--db|-D <db name>] [--dbhost|-H <db hostname> 379 [--dbuser|-u <db username>] [--dbpass|-p <db password>] [--debug|-d] 380 [--user|-U <username>] [--group|-g <groupname>] [--pidfile <filename>] 381 [--retry <n>] [--stop|-s] [--restart|-r] [--verbose|-v] 347 382 348 383 =head1 DESCRIPTION … … 355 390 =over 4 356 391 357 =item * --db|- d<db name>392 =item * --db|-D <db name> 358 393 359 394 Name of database (C<namespace>) to write too. … … 362 397 variable is set. 363 398 364 =item * -- user|-u <dbusername>399 =item * --dbuser|-u <username> 365 400 366 401 Username to authenticate with. … … 369 404 variable is set. 370 405 371 =item * -- pass|-p <dbpassword>406 =item * --dbpass|-p <password> 372 407 373 408 Password to authenticate with. 409 410 Optional if defined in the F<.nebdiskdrc> file or the appropriate environment 411 variable is set or if the database does not require a password. 412 413 =item * --dbhost|-H <hostname> 414 415 Database host to connect to. 374 416 375 417 Optional if defined in the F<.nebdiskdrc> file or the appropriate environment 376 418 variable is set. 377 419 378 =item * --debug 420 =item * --debug|-d 379 421 380 422 This flag prevents the program from "daemonizing" so output can be sent to … … 397 439 instance. 398 440 399 =item * --verbose|-r 441 =item * --retry 442 443 The number of times to test a mountpoint for "mountedness" before giving up on 444 it. 445 446 =item * --verbose|-v 400 447 401 448 Turns on informational/debugging messages to be sent to the … … 403 450 with C<--debug>. 404 451 452 =item * --user|-U 453 454 user account to run daemon as. 455 456 =item * --group|-g 457 458 group to run daemon as. 459 405 460 =back 406 461 … … 415 470 =item * C<NEB_DB> 416 471 417 Equivalent to --db|- d472 Equivalent to --db|-D 418 473 419 474 =item * C<NEB_USER> 420 475 421 Equivalent to -- user|-u476 Equivalent to --dbuser|-u 422 477 423 478 =item * C<NEB_PASS> 424 479 425 Equivalent to -- pass|-p480 Equivalent to --dbpass|-p 426 481 427 482 =back … … 439 494 dbpass: '@neb@' 440 495 dbuser: nebulous 441 mounts:442 - /mnt443 - /tmp444 - /usr445 496 pidfile: /var/tmp/nebdiskd 446 497 poll_interval: 5 498 retry: 3 447 499 448 500 The values C<db>, C<dbpass>, C<dbuser>, and C<pidfile> have the same semantics … … 451 503 =over 4 452 504 453 =item * C<mounts>454 455 A list of "paths" to C<stat(2)> before mounted volumes are polled. The propose456 of this option is to attempt to keep "automounted" volumes mounted while this457 program is running.458 459 505 This value may be omitted or left blank. 460 506 … … 465 511 This value may be omitted or left blank. The default value is C<60>s. 466 512 513 =item * C<retry> 514 515 Same as C<--retry>. 516 467 517 =back 468 518 … … 481 531 =head1 COPYRIGHT 482 532 483 Copyright (C) 2007 Joshua Hoblitt. All rights reserved.533 Copyright (C) 2007-2009 Joshua Hoblitt. All rights reserved. 484 534 485 535 This program is free software; you can redistribute it and/or modify it under
Note:
See TracChangeset
for help on using the changeset viewer.
