Changeset 770
- Timestamp:
- 03/15/07 20:18:53 (2 years ago)
- Files:
-
- trunk/server/CHANGES.mogstored (modified) (1 diff)
- trunk/server/mogstored (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/server/CHANGES.mogstored
r520 r770 1 2007-03-15: 2 * this changelog is totally neglected. :/ see svn log. 3 4 * make perlbal's "shutdown graceful" work, by not doing 5 sidechannel accepting ourselves (which never hung up), 6 but subclass Perlbal's TCPListener class, which does it 7 all correctly. 8 1 9 2006-12-27: 2 10 * kill child processes (diskusage and iostat) when being killed. trunk/server/mogstored
r768 r770 113 113 SET persist_client = 1 114 114 ENABLE mogstored 115 116 # don't listen... this is just a stub service. 117 CREATE SERVICE mgmt 118 SET role = management 119 ENABLE mgmt 115 120 "; 116 121 … … 300 305 301 306 sub setup_sidechannel_listener { 302 # setup a new socket for handling size requests 303 my $server = IO::Socket::INET->new(LocalAddr => $mgmt_listen, 304 Type => SOCK_STREAM, 305 Proto => 'tcp', 306 Blocking => 0, 307 Reuse => 1, 308 Listen => 10 ) 309 or die "Error creating management socket: $@\n"; 310 311 # in Perl 5.6, we weren't always seeing this turned off by IO::Socket 312 # so we have to do it manually here just to be sure. 313 IO::Handle::blocking($server, 0); 314 315 # accept handler for new workers 316 my $accept_handler = sub { 317 my $csock = $server->accept or return; 318 IO::Handle::blocking($csock, 0); 319 my $client = SideChannelClient->new($csock); 320 $client->watch_read(1); 321 }; 322 323 # add to fd list so this one gets processed 324 Perlbal::Socket->AddOtherFds(fileno($server) => $accept_handler); 307 Mogstored::SideChannelListener->new($mgmt_listen); 325 308 } 326 309 … … 506 489 507 490 ############################################################################# 491 package Mogstored::SideChannelListener; 492 use strict; 493 use base 'Perlbal::TCPListener'; 494 495 sub new { 496 my ($class, $hostport) = @_; 497 # we don't _really_ need this, but TCPListener kinda does, to keep it from 498 # exploding/warning. so we created this stub service above in our static 499 # config, just for this. 500 my $svc = Perlbal->service("mgmt") or die "Where is mgmt service?"; 501 return $class->SUPER::new($hostport, $svc); 502 } 503 504 sub event_read { 505 my $self = shift; 506 # accept as many connections as we can 507 while (my ($csock, $peeraddr) = $self->{sock}->accept) { 508 IO::Handle::blocking($csock, 0); 509 my $client = Mogstored::SideChannelClient->new($csock); 510 $client->watch_read(1); 511 } 512 } 513 514 ############################################################################# 508 515 ### simple package for handling the stream request port 509 package SideChannelClient;516 package Mogstored::SideChannelClient; 510 517 511 518 use strict; 512 use base qw{ Danga::Socket};519 use base qw{Perlbal::Socket}; 513 520 use fields ( 514 521 'count', # how many requests we've serviced … … 521 528 522 529 sub new { 523 my SideChannelClient $self = shift;530 my Mogstored::SideChannelClient $self = shift; 524 531 $self = fields::new($self) unless ref $self; 525 532 $self->SUPER::new(@_); … … 531 538 532 539 sub event_read { 533 my SideChannelClient $self = shift;540 my Mogstored::SideChannelClient $self = shift; 534 541 535 542 my $bref = $self->read(1024); … … 580 587 # as_string handler 581 588 sub as_string { 582 my SideChannelClient $self = shift;589 my Mogstored::SideChannelClient $self = shift; 583 590 584 591 my $ret = $self->SUPER::as_string; … … 589 596 590 597 sub close { 591 my SideChannelClient $self = shift;598 my Mogstored::SideChannelClient $self = shift; 592 599 main::iostat_unsubscribe($self); 593 600 $self->SUPER::close;
