File Coverage

blib/lib/AnyEvent/IO.pm
Criterion Covered Total %
statement 7 7 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 10 100.0


line stmt bran cond sub pod time code
1             =head1 NAME
2              
3             AnyEvent::IO - the DBI of asynchronous I/O implementations
4              
5             =head1 SYNOPSIS
6              
7             use AnyEvent::IO;
8              
9             # load /etc/passwd, call callback with the file data when done.
10             aio_load "/etc/passwd", sub {
11             my ($data) = @_
12             or return AE::log error => "/etc/passwd: $!";
13              
14             warn "/etc/passwd contains ", ($data =~ y/://) , " colons.\n";
15             };
16              
17             # the rest of the SYNOPSIS does the same, but with individual I/O calls
18              
19             # also import O_XXX flags
20             use AnyEvent::IO qw(:DEFAULT :flags);
21              
22             my $filedata = AE::cv;
23              
24             # first open the file
25             aio_open "/etc/passwd", O_RDONLY, 0, sub {
26             my ($fh) = @_
27             or return AE::log error => "/etc/passwd: $!";
28              
29             # now stat the file to get the size
30             aio_stat $fh, sub {
31             @_
32             or return AE::log error => "/etc/passwd: $!";
33              
34             my $size = -s _;
35              
36             # now read all the file data
37             aio_read $fh, $size, sub {
38             my ($data) = @_
39             or return AE::log error => "/etc/passwd: $!";
40              
41             $size == length $data
42             or return AE::log error => "/etc/passwd: short read, file changed?";
43              
44             # mostly the same as aio_load, above - $data contains
45             # the file contents now.
46             $filedata->($data);
47             };
48             };
49             };
50              
51             my $passwd = $filedata->recv;
52             warn length $passwd, " octets.\n";
53              
54             =head1 DESCRIPTION
55              
56             This module provides functions that do I/O in an asynchronous fashion. It
57             is to I/O the same as L<AnyEvent> is to event libraries - it only
58             I<interfaces> to other implementations or to a portable pure-perl
59             implementation (which does not, however, do asynchronous I/O).
60              
61             The only other implementation that is supported (or even known to the
62             author) is L<IO::AIO>, which is used automatically when it can be loaded
63             (via L<AnyEvent::AIO>, which also needs to be installed). If it is not
64             available, then L<AnyEvent::IO> falls back to its synchronous pure-perl
65             implementation.
66              
67             Unlike L<AnyEvent>, which model to use is currently decided at module load
68             time, not at first use. Future releases might change this.
69              
70             =head2 RATIONALE
71              
72             While disk I/O often seems "instant" compared to, say, socket I/O, there
73             are many situations where your program can block for extended time periods
74             when doing disk I/O. For example, you access a disk on an NFS server and
75             it is gone - can take ages to respond again, if ever. Or your system is
76             extremely busy because it creates or restores a backup - reading data from
77             disk can then take seconds. Or you use Linux, which for so many years has
78             a close-to-broken VM/IO subsystem that can often induce minutes or more of
79             delay for disk I/O, even under what I would consider light I/O loads.
80              
81             Whatever the situation, some programs just can't afford to block for long
82             times (say, half a second or more), because they need to respond as fast
83             as possible.
84              
85             For those cases, you need asynchronous I/O.
86              
87             The problem is, AnyEvent itself sometimes reads disk files (for example,
88             when looking at F</etc/hosts>), and under the above situations, this can
89             bring your program to a complete halt even if your program otherwise
90             takes care to only use asynchronous I/O for everything (e.g. by using
91             L<IO::AIO>).
92              
93             On the other hand, requiring L<IO::AIO> for AnyEvent is clearly
94             impossible, as AnyEvent promises to stay pure-perl, and the overhead of
95             IO::AIO for small programs would be immense, especially when asynchronous
96             I/O isn't even needed.
97              
98             Clearly, this calls for an abstraction layer, and that is what you are
99             looking at right now :-)
100              
101             =head2 ASYNCHRONOUS VS. NON-BLOCKING
102              
103             Many people are continuously confused on what the difference is between
104             asynchronous I/O and non-blocking I/O. In fact, those two terms are
105             not well defined, which often makes it hard to even talk about the
106             difference. Here is a short guideline that should leave you less
107             confused. It only talks about read operations, but the reasoning works
108             with other I/O operations as well.
109              
110             Non-blocking I/O means that data is delivered by some external means,
111             automatically - that is, something I<pushes> data towards your file
112             handle, without you having to do anything. Non-blocking means that if
113             your operating system currently has no data (or EOF, or some error)
114             available for you, it will not wait ("block") as it would normally do,
115             but immediately return with an error (e.g. C<EWOULDBLOCK> - "I would have
116             blocked, but you forbid it").
117              
118             Your program can then wait for data to arrive by other means, for example,
119             an I/O watcher which tells you when to re-attempt the read, after which it
120             can try to read again, and so on.
121              
122             Often, you would expect this to work for disk files as well - if the data
123             isn't already in memory, one might want to wait for it and then re-attempt
124             the read for example. While this is sound reasoning, the POSIX API does
125             not support this, because disk drives and file systems do not send data
126             "on their own", and more so, the OS already knows that data is there, it
127             doesn't need to "wait" until it arrives from some external entity, it only
128             needs to transfer the data from disk to your memory buffer.
129              
130             So basically, while the concept is sound, the existing OS APIs do not
131             support this. Therefore, it makes no sense to switch a disk file handle
132             into non-blocking mode - it will behave exactly the same as in blocking
133             mode, namely it will block until the data has been read from the disk.
134              
135             The alternative to non-blocking I/O that actually works with disk files
136             is usually called I<asynchronous I/O>. Asynchronous, because the actual
137             I/O is done while your program does something else: there is no need to
138             call the read function to see if data is there, you only order the read
139             once, and it will notify you when the read has finished and the data is
140             your buffer - all the work is done in the background.
141              
142             This works with disk files, and even with sockets and other sources. It
143             is, however, not very efficient when used with sources that could be
144             driven in a non-blocking way, because it usually has higher overhead
145             in the OS than non-blocking I/O, because it ties memory buffers for a
146             potentially unlimited time and often only a limited number of operations
147             can be done in parallel.
148              
149             That's why asynchronous I/O makes most sense when confronted with disk
150             files, and non-blocking I/O only makes sense with sockets, pipes and
151             similar streaming sources.
152              
153             =head1 IMPORT TAGS
154              
155             By default, this module exports all C<aio_>xxx functions. In addition,
156             the following import tags can be used:
157              
158             :aio all aio_* functions, same as :DEFAULT
159             :flags the fcntl open flags (O_CREAT, O_RDONLY, ...)
160              
161             =head1 API NOTES
162              
163             The functions in this module are not meant to be the most versatile or
164             the highest-performers (they are not very slow either, of course). They
165             are primarily meant to give users of your code the option to do the I/O
166             asynchronously (by installing L<IO::AIO> and L<AnyEvent::AIO>),
167             without adding a dependency on those modules.
168              
169             =head2 NAMING
170              
171             All the functions in this module implement an I/O operation, usually with
172             the same or similar name as the Perl built-in that they mimic, but with
173             an C<aio_> prefix. If you like you can think of the C<aio_>xxx functions as
174             "AnyEvent I/O" or "Asynchronous I/O" variants of Perl built-ins.
175              
176             =head2 CALLING CONVENTIONS AND ERROR REPORTING
177              
178             Each function expects a callback as their last argument. The callback is
179             usually called with the result data or result code. An error is usually
180             signalled by passing no arguments to the callback, which is then free to
181             look at C<$!> for the error code.
182              
183             This makes all of the following forms of error checking valid:
184              
185             aio_open ...., sub {
186             my $fh = shift # scalar assignment - will assign undef on error
187             or return AE::log error => "...";
188              
189             my ($fh) = @_ # list assignment - will be 0 elements on error
190             or return AE::log error => "...";
191              
192             @_ # check the number of elements directly
193             or return AE::log error => "...";
194              
195             =head2 CAVEAT: RELATIVE PATHS
196              
197             When a path is specified, this path I<must be an absolute> path, unless
198             you make certain that nothing in your process calls C<chdir> or an
199             equivalent function while the request executes.
200              
201             =head2 CAVEAT: OTHER SHARED STATE
202              
203             Changing the C<umask> while any requests execute that create files (or
204             otherwise rely on the current umask) results in undefined behaviour -
205             likewise changing anything else that would change the outcome, such as
206             your effective user or group ID.
207              
208             =head2 CALLBACKS MIGHT BE CALLED BEFORE FUNCTION RETURNS TO CALLER
209              
210             Unlike other functions in the AnyEvent module family, these functions
211             I<may> call your callback instantly, before returning. This should not be
212             a real problem, as these functions never return anything useful.
213              
214             =head2 BEHAVIOUR AT PROGRAM EXIT
215              
216             Both L<AnyEvent::IO::Perl> and L<AnyEvent::IO::IOAIO> implementations
217             make sure that operations that have started will be finished on a clean
218             programs exit. That makes programs work that start some I/O operations and
219             then exit. For example this complete program:
220              
221             use AnyEvent::IO;
222              
223             aio_stat "path1", sub {
224             aio_stat "path2", sub {
225             warn "both stats done\n";
226             };
227             };
228              
229             Starts a C<stat> operation and then exits by "falling off the end" of
230             the program. Nevertheless, I<both> C<stat> operations will be executed,
231             as AnyEvent::IO waits for all outstanding requests to finish and you can
232             start new requests from request callbacks.
233              
234             In fact, since L<AnyEvent::IO::Perl> is currently synchronous, the
235             program will do both stats before falling off the end, but with
236             L<AnyEvent::IO::IOAIO>, the program first falls of the end, then the stats
237             are executed.
238              
239             While not guaranteed, this behaviour will be present in future versions,
240             if reasonably possible (which is extreemly likely :).
241              
242             =cut
243              
244             package AnyEvent::IO;
245              
246 4     4   1318 use AnyEvent (); BEGIN { AnyEvent::common_sense }
  4     4   6  
  4         87  
  4         17  
247              
248 4     4   18 use base "Exporter";
  4         8  
  4         2316  
249              
250             our @AIO_REQ = qw(
251             aio_load aio_open aio_close aio_seek aio_read aio_write aio_truncate
252             aio_utime aio_chown aio_chmod aio_stat aio_lstat
253             aio_link aio_symlink aio_readlink aio_rename aio_unlink
254             aio_mkdir aio_rmdir aio_readdir
255             );
256             *EXPORT = \@AIO_REQ;
257             our @FLAGS = qw(O_RDONLY O_WRONLY O_RDWR O_CREAT O_EXCL O_TRUNC O_APPEND);
258             *EXPORT_OK = \@FLAGS;
259             our %EXPORT_TAGS = (flags => \@FLAGS, aio => \@AIO_REQ);
260              
261             our $MODEL;
262              
263             if ($MODEL) {
264             AE::log 7 => "Found preloaded IO model '$MODEL', using it.";
265             } else {
266             if ($ENV{PERL_ANYEVENT_IO_MODEL} =~ /^([a-zA-Z0-9:]+)$/) {
267             if (eval { require "AnyEvent/IO/$ENV{PERL_ANYEVENT_IO_MODEL}.pm" }) {
268             AE::log 7 => "Loaded IO model '$MODEL' (forced by \$ENV{PERL_ANYEVENT_IO_MODEL}), using it.";
269             } else {
270             undef $MODEL;
271             AE::log 4 => "Unable to load IO model '$ENV{PERL_ANYEVENT_IO_MODEL}' (from \$ENV{PERL_ANYEVENT_IO_MODEL}):\n$@";
272             }
273             }
274              
275             unless ($MODEL) {
276             if (eval { require IO::AIO; require AnyEvent::AIO; require AnyEvent::IO::IOAIO }) {
277             AE::log 7 => "Autoloaded IO model 'IOAIO', using it.";
278             } else {
279             require AnyEvent::IO::Perl;
280             AE::log 7 => "Autoloaded IO model 'Perl', using it.";
281             }
282             }
283             }
284              
285             =head1 GLOBAL VARIABLES AND FUNCTIONS
286              
287             =over 4
288              
289             =item $AnyEvent::IO::MODEL
290              
291             Contains the package name of the backend I/O model in use - at the moment,
292             this is usually C<AnyEvent::IO::Perl> or C<AnyEvent::IO::IOAIO>.
293              
294             =item aio_load $path, $cb->($data)
295              
296             Tries to open C<$path> and read its contents into memory (obviously,
297             should only be used on files that are "small enough"), then passes them to
298             the callback as a string.
299              
300             Example: load F</etc/hosts>.
301              
302             aio_load "/etc/hosts", sub {
303             my ($hosts) = @_
304             or return AE::log error => "/etc/hosts: $!";
305              
306             AE::log info => "/etc/hosts contains ", ($hosts =~ y/\n/), " lines\n";
307             };
308              
309             =item aio_open $path, $flags, $mode, $cb->($fh)
310              
311             Tries to open the file specified by C<$path> with the O_XXX-flags
312             C<$flags> (from the Fcntl module, or see below) and the mode C<$mode> (a
313             good value is 0666 for C<O_CREAT>, and C<0> otherwise).
314              
315             The (normal, standard, perl) file handle associated with the opened file
316             is then passed to the callback.
317              
318             This works very much like Perl's C<sysopen> function.
319              
320             Changing the C<umask> while this request executes results in undefined
321             behaviour - likewise changing anything else that would change the outcome,
322             such as your effective user or group ID.
323              
324             To avoid having to load L<Fcntl>, this module provides constants
325             for C<O_RDONLY>, C<O_WRONLY>, C<O_RDWR>, C<O_CREAT>, C<O_EXCL>,
326             C<O_TRUNC> and C<O_APPEND> - you can either access them directly
327             (C<AnyEvent::IO::O_RDONLY>) or import them by specifying the C<:flags>
328             import tag (see SYNOPSIS).
329              
330             Example: securely open a file in F</var/tmp>, fail if it exists or is a symlink.
331              
332             use AnyEvent::IO qw(:flags);
333              
334             aio_open "/var/tmp/mytmp$$", O_CREAT | O_EXCL | O_RDWR, 0600, sub {
335             my ($fh) = @_
336             or return AE::log error => "$! - denial of service attack?";
337              
338             # now we have $fh
339             };
340              
341             =item aio_close $fh, $cb->($success)
342              
343             Closes the file handle (yes, close can block your process indefinitely)
344             and passes a true value to the callback on success.
345              
346             Due to idiosyncrasies in perl, instead of calling C<close>, the file
347             handle might get closed by C<dup2>'ing another file descriptor over
348             it, that is, the C<$fh> might still be open, but can be closed safely
349             afterwards and must not be used for anything.
350              
351             Example: close a file handle, and dirty as we are, do not even bother
352             to check for errors.
353              
354             aio_close $fh, sub { };
355              
356             =item aio_read $fh, $length, $cb->($data)
357              
358             Tries to read C<$length> octets from the current position from C<$fh> and
359             passes these bytes to C<$cb>. Otherwise the semantics are very much like
360             those of Perl's C<sysread>.
361              
362             If less than C<$length> octets have been read, C<$data> will contain
363             only those bytes actually read. At EOF, C<$data> will be a zero-length
364             string. If an error occurs, then nothing is passed to the callback.
365              
366             Obviously, multiple C<aio_read>'s or C<aio_write>'s at the same time on file
367             handles sharing the underlying open file description results in undefined
368             behaviour, due to sharing of the current file offset (and less obviously
369             so, because OS X is not thread safe and corrupts data when you try).
370              
371             Example: read 128 octets from a file.
372              
373             aio_read $fh, 128, sub {
374             my ($data) = @_
375             or return AE::log error "read from fh: $!";
376            
377             if (length $data) {
378             print "read ", length $data, " octets.\n";
379             } else {
380             print "EOF\n";
381             }
382             };
383              
384             =item aio_seek $fh, $offset, $whence, $callback->($offs)
385              
386             Seeks the filehandle to the new C<$offset>, similarly to Perl's
387             C<sysseek>. The C<$whence> are the traditional values (C<0> to count from
388             start, C<1> to count from the current position and C<2> to count from the
389             end).
390              
391             The resulting absolute offset will be passed to the callback on success.
392              
393             Example: measure the size of the file in the old-fashioned way using seek.
394              
395             aio_seek $fh, 0, 2, sub {
396             my ($size) = @_
397             or return AE::log error => "seek to end failed: $!";
398              
399             # maybe we need to seek to the beginning again?
400             aio_seek $fh, 0, 0, sub {
401             # now we are hopefully at the beginning
402             };
403             };
404              
405             =item aio_write $fh, $data, $cb->($length)
406              
407             Tries to write the octets in C<$data> to the current position of C<$fh>
408             and passes the actual number of bytes written to the C<$cb>. Otherwise the
409             semantics are very much like those of Perl's C<syswrite>.
410              
411             If less than C<length $data> octets have been written, C<$length> will
412             reflect that. If an error occurs, then nothing is passed to the callback.
413              
414             Obviously, multiple C<aio_read>'s or C<aio_write>'s at the same time on file
415             handles sharing the underlying open file description results in undefined
416             behaviour, due to sharing of the current file offset (and less obviously
417             so, because OS X is not thread safe and corrupts data when you try).
418              
419             =item aio_truncate $fh_or_path, $new_length, $cb->($success)
420              
421             Calls C<truncate> on the path or perl file handle and passes a true value
422             to the callback on success.
423              
424             Example: truncate F</etc/passwd> to zero length - this only works on
425             systems that support C<truncate>, should not be tried out for obvious
426             reasons and debian will probably open yte another security bug about this
427             example.
428              
429             aio_truncate "/etc/passwd", sub {
430             @_
431             or return AE::log error => "/etc/passwd: $! - are you root enough?";
432             };
433              
434             =item aio_utime $fh_or_path, $atime, $mtime, $cb->($success)
435              
436             Calls C<utime> on the path or perl file handle and passes a true value to
437             the callback on success.
438              
439             The special case of both C<$atime> and C<$mtime> being C<undef> sets the
440             times to the current time, on systems that support this.
441              
442             Example: try to touch F<file>.
443              
444             aio_utime "file", undef, undef, sub { };
445              
446             =item aio_chown $fh_or_path, $uid, $gid, $cb->($success)
447              
448             Calls C<chown> on the path or perl file handle and passes a true value to
449             the callback on success.
450              
451             If C<$uid> or C<$gid> can be specified as C<undef>, in which case the
452             uid or gid of the file is not changed. This differs from Perl's C<chown>
453             built-in, which wants C<-1> for this.
454              
455             Example: update the group of F<file> to 0 (root), but leave the owner alone.
456              
457             aio_chown "file", undef, 0, sub {
458             @_
459             or return AE::log error => "chown 'file': $!";
460             };
461              
462             =item aio_chmod $fh_or_path, $perms, $cb->($success)
463              
464             Calls C<chmod> on the path or perl file handle and passes a true value to
465             the callback on success.
466              
467             Example: change F<file> to be user/group/world-readable, but leave the other flags
468             alone.
469              
470             aio_stat "file", sub {
471             @_
472             or return AE::log error => "file: $!";
473              
474             aio_chmod "file", (stat _)[2] & 07777 | 00444, sub { };
475             };
476              
477             =item aio_stat $fh_or_path, $cb->($success)
478              
479             =item aio_lstat $path, $cb->($success)
480              
481             Calls C<stat> or C<lstat> on the path or perl file handle and passes a
482             true value to the callback on success.
483              
484             The stat data will be available by C<stat>'ing the C<_> file handle
485             (e.g. C<-x _>, C<stat _> and so on).
486              
487             Example: see if we can find the number of subdirectories of F</etc>.
488              
489             aio_stat "/etc", sub {
490             @_
491             or return AE::log error => "/etc: $!";
492              
493             (stat _)[3] >= 2
494             or return AE::log warn => "/etc has low link count - non-POSIX filesystem?";
495              
496             print "/etc has ", (stat _)[3] - 2, " subdirectories.\n";
497             };
498              
499             =item aio_link $oldpath, $newpath, $cb->($success)
500              
501             Calls C<link> on the paths and passes a true value to the callback on
502             success.
503              
504             Example: link "F<file> to F<file.bak>, then rename F<file.new> over F<file>,
505             to atomically replace it.
506              
507             aio_link "file", "file.bak", sub {
508             @_
509             or return AE::log error => "file: $!";
510              
511             aio_rename "file.new", "file", sub {
512             @_
513             or return AE::log error => "file.new: $!";
514              
515             print "file atomically replaced by file.new, backup file.bak\n";
516             };
517             };
518              
519             =item aio_symlink $oldpath, $newpath, $cb->($success)
520              
521             Calls C<symlink> on the paths and passes a true value to the callback on
522             success.
523              
524             Example: create a symlink "F<slink> containing "random data".
525              
526             aio_symlink "random data", "slink", sub {
527             @_
528             or return AE::log error => "slink: $!";
529             };
530              
531             =item aio_readlink $path, $cb->($target)
532              
533             Calls C<readlink> on the paths and passes the link target string to the
534             callback.
535              
536             Example: read the symlink called Fyslink> and verify that it contains "random data".
537              
538             aio_readlink "slink", sub {
539             my ($target) = @_
540             or return AE::log error => "slink: $!";
541              
542             $target eq "random data"
543             or AE::log critical => "omg, the world will end!";
544             };
545              
546             =item aio_rename $oldpath, $newpath, $cb->($success)
547              
548             Calls C<rename> on the paths and passes a true value to the callback on
549             success.
550              
551             See C<aio_link> for an example.
552              
553             =item aio_unlink $path, $cb->($success)
554              
555             Tries to unlink the object at C<$path> and passes a true value to the
556             callback on success.
557              
558             Example: try to delete the file F<tmpfile.dat~>.
559              
560             aio_unlink "tmpfile.dat~", sub { };
561              
562             =item aio_mkdir $path, $perms, $cb->($success)
563              
564             Calls C<mkdir> on the path with the given permissions C<$perms> (when in
565             doubt, C<0777> is a good value) and passes a true value to the callback on
566             success.
567              
568             Example: try to create the directory F<subdir> and leave it to whoeveer
569             comes after us to check whether it worked.
570              
571             aio_mkdir "subdir", 0777, sub { };
572              
573             =item aio_rmdir $path, $cb->($success)
574              
575             Tries to remove the directory at C<$path> and passes a true value to the
576             callback on success.
577              
578             Example: try to remove the directory F<subdir> and don't give a damn if
579             that fails.
580              
581             aio_rmdir "subdir", sub { };
582              
583             =item aio_readdir $path, $cb->(\@names)
584              
585             Reads all filenames from the directory specified by C<$path> and passes
586             them to the callback, as an array reference with the names (without a path
587             prefix). The F<.> and F<..> names will be filtered out first.
588              
589             The ordering of the file names is undefined - backends that are capable
590             of it (e.g. L<IO::AIO>) will return the ordering that most likely is
591             fastest to C<stat> through, and furthermore put entries that likely are
592             directories first in the array.
593              
594             If you need best performance in recursive directory traversal or when
595             looking at really big directories, you are advised to use L<IO::AIO>
596             directly, specifically the C<aio_readdirx> and C<aio_scandir> functions,
597             which have more options to tune performance.
598              
599             Example: recursively scan a directory hierarchy, silently skip diretcories
600             we couldn't read and print all others.
601              
602             sub scan($); # visibility-in-next statement is not so useful these days
603             sub scan($) {
604             my ($path) = @_;
605              
606             aio_readdir $path, sub {
607             my ($names) = @_
608             or return;
609              
610             print "$path\n";
611              
612             for my $name (@$names) {
613             aio_lstat "$path/$name", sub {
614             scan "$path/$name"
615             if -d _;
616             };
617             }
618             };
619             }
620              
621             scan "/etc";
622              
623             =back
624              
625             =head1 ENVIRONMENT VARIABLES
626              
627             See the description of C<PERL_ANYEVENT_IO_MODEL> in the L<AnyEvent>
628             manpage.
629              
630             =head1 AUTHOR
631              
632             Marc Lehmann <schmorp@schmorp.de>
633             http://anyevent.schmorp.de
634              
635             =cut
636              
637             1
638