ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP/Kernel.pm
(Generate patch)

Comparing AnyEvent-MP/MP/Kernel.pm (file contents):
Revision 1.6 by root, Thu Aug 13 03:34:24 2009 UTC vs.
Revision 1.7 by root, Thu Aug 13 15:29:59 2009 UTC

230 230
231 ($NODE{$noderef} || add_node $noderef) 231 ($NODE{$noderef} || add_node $noderef)
232 ->kill ("$portid", @_); 232 ->kill ("$portid", @_);
233} 233}
234 234
235sub _nodename {
236 require POSIX;
237 (POSIX::uname ())[1]
238}
239
235sub resolve_node($) { 240sub resolve_node($) {
236 my ($noderef) = @_; 241 my ($noderef) = @_;
237 242
238 my $cv = AE::cv; 243 my $cv = AE::cv;
239 my @res; 244 my @res;
250 $noderef = $DEFAULT_PORT unless length $noderef; 255 $noderef = $DEFAULT_PORT unless length $noderef;
251 256
252 my $idx; 257 my $idx;
253 for my $t (split /,/, $noderef) { 258 for my $t (split /,/, $noderef) {
254 my $pri = ++$idx; 259 my $pri = ++$idx;
260
261 $t = length $t ? _nodename . ":$t" : _nodename
262 if $t =~ /^\d*$/;
255 263
256 if ($t =~ /^\d*$/) { 264 my ($host, $port) = AnyEvent::Socket::parse_hostport $t, "aemp=$DEFAULT_PORT"
257 require POSIX; 265 or Carp::croak "$t: unparsable transport descriptor";
258 my $nodename = (POSIX::uname ())[1];
259 266
260 $cv->begin; 267 $cv->begin;
261 AnyEvent::Socket::resolve_sockaddr $nodename, $t || "aemp=$DEFAULT_PORT", "tcp", 0, undef, sub { 268 AnyEvent::Socket::resolve_sockaddr $host, $port, "tcp", 0, undef, sub {
262 for (@_) { 269 for (@_) {
263 my ($service, $host) = AnyEvent::Socket::unpack_sockaddr $_->[3]; 270 my ($service, $host) = AnyEvent::Socket::unpack_sockaddr $_->[3];
264 push @res, [ 271 push @res, [
265 $pri += 1e-5, 272 $pri += 1e-5,
266 AnyEvent::Socket::format_hostport AnyEvent::Socket::format_address $host, $service 273 AnyEvent::Socket::format_hostport AnyEvent::Socket::format_address $host, $service
267 ];
268 }
269 $cv->end;
270 };
271
272# my (undef, undef, undef, undef, @ipv4) = gethostbyname $nodename;
273#
274# for (@ipv4) {
275# push @res, [
276# $pri,
277# AnyEvent::Socket::format_hostport AnyEvent::Socket::format_address $_, $t || $DEFAULT_PORT,
278# ]; 274 ];
279# }
280 } else {
281 my ($host, $port) = AnyEvent::Socket::parse_hostport $t, "aemp=$DEFAULT_PORT"
282 or Carp::croak "$t: unparsable transport descriptor";
283
284 $cv->begin;
285 AnyEvent::Socket::resolve_sockaddr $host, $port, "tcp", 0, undef, sub {
286 for (@_) {
287 my ($service, $host) = AnyEvent::Socket::unpack_sockaddr $_->[3];
288 push @res, [
289 $pri += 1e-5,
290 AnyEvent::Socket::format_hostport AnyEvent::Socket::format_address $host, $service
291 ];
292 }
293 $cv->end;
294 } 275 }
276 $cv->end;
295 } 277 };
296 } 278 }
297 279
298 $cv->end; 280 $cv->end;
299 281
300 $cv 282 $cv
301} 283}
302 284
303sub initialise_node(@) { 285sub initialise_node(@) {
304 my ($noderef, @others) = @_; 286 my ($noderef, @others) = @_;
305 287
306 my $profile = defined $noderef ? {} : \%AnyEvent::MP::Config::CFG; 288 my $profile = AnyEvent::MP::Config::find_profile
289 +(defined $noderef ? $noderef : _nodename);
307 290
308 $noderef = $profile->{noderef} 291 $noderef = $profile->{noderef}
309 unless defined $noderef; 292 if exists $profile->{noderef};
310 293
311 @others = @{ $profile->{seeds} } 294 @others = @{ $profile->{seeds} };
312 unless @others;
313 295
314 if ($noderef =~ /^slave\/(.*)$/) { 296 if ($noderef =~ /^slave\/(.*)$/) {
315 $SLAVE = AE::cv; 297 $SLAVE = AE::cv;
316 my $name = $1; 298 my $name = $1;
317 $name = $NODE unless length $name; 299 $name = $NODE unless length $name;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines