waiting for pg 8.4

i will try to follow development of 8.4, and write examples of what's possible with it, based on current HEAD code.

of course there is no guarantee that it will work in final, released 8.4 (it is a bit too early to talk about it, but given the fact that the patch got committed, there is pretty good chance we will see it whenever 8.4 will be released.

today 2 new features: limit (select ) and optional as in select.

Continue reading waiting for pg 8.4

failing ls ?

i have this program, which forks-off worker processes, and then runs in them various tasks.

one of the tasks is to execute some command via system(), but since we need to get stdout and stderr (separately), we used ipc::run module.

simple example of such code would be:

#!/usr/bin/perl
use strict;
use Time::HiRes qw( usleep );
use IPC::Run qw( run );
use POSIX ":sys_wait_h";
sub REAPER {
    my $child;
    while (($child = waitpid(-1,WNOHANG)) > 0) {
    }
    $SIG{CHLD} = \&REAPER;
}
$SIG{CHLD} = \&REAPER;
for (1..100) {
    my $x = fork;
    die "cannot fork?!: $!\n" unless defined $x;
    if ($x) {
        usleep(10000);
        next;
    }
    my @cmd = qw(ls -lad .);
    my ($in, $out, $err);
    my $status = run \@cmd, \$in, \$out, \$err or die "ls: $?";
    printf ("%u\n", $status);
    exit;
}

what it does:

  • defines REAPER function, and sets it as sigchld handler – for details, please check perldoc perlipc. this is basically to avoid creation of zombie processes in case we have long-running parent process, which forks relatively short-lived child-processes.
  • forks off new process
  • after forking, master sleeps for 0.01 second (not to put to much pressure on testing system)
  • child process runs sample command (ls -ald .) via ipc::run, with empty stdin, and catching stdout and stderr.
  • child then exits
  • whole forking/ls-ald. thing is repeated 100 times to show that it's effect is not random.

what's wrong? here is output from it on my machine:

=> perl test.pl
ls: -1 at test.pl line 24.
...
...
...

which basically means ls failed – which is far from true, as this ls succeeds, simple check:

=> perl -e 'use IPC::Run qw(run);my @cmd = qw(ls -lad .);my ($in, $out, $err);my $status = run \@cmd, \$in, \$out, \$err or die "ls: $?";printf ("%u\n", $status);'
1

now, the riddle is: why it fails? (yes, i now know the answer, but it took me some time).

smtp + sql = more than it seems so (part 1)

for quite some time i wanted to write about my experiences with combining smtp server with sql server.

this subject for some people might be too boring, for others – it might be seen as a simple howto. but in my opinion it clearly shows that when you combine 2 such technologies outcome is much better then it would seem (it's called synergy in merketoid-speak).

this subject will be divided into several parts, that will be posted separately (yeah, let's get some traffic to website 🙂

also, i hope to extend it in future if/when i'll find something else that can be added/changed in proposed solution.

so, without further ado, let's start:

Continue reading smtp + sql = more than it seems so (part 1)

it’s coming, it’s coming, it’s here, have no fear

(pgdba@[LOCAL]:5830) 21:45:26 [pgdba]
# SELECT version();
                                                        version
-----------------------------------------------------------------------------------------------------------------------
 PostgreSQL 8.3.0 ON i686-pc-linux-gnu, compiled BY GCC gcc (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)
(1 ROW)

well, actually it is not released yet, but at the very least it's named 8.3 in cvs head 🙂