EV-Etcd

 view release on metacpan or  search on metacpan

eg/lease_test.pl  view on Meta::CPAN

#!/usr/bin/env perl
use strict;
use warnings;
use lib 'blib/lib', 'blib/arch';
use EV;
use EV::Etcd;
use Data::Dumper;

my $client = EV::Etcd->new(
    endpoints => ['127.0.0.1:2379'],
);

print "=== Lease Test ===\n\n";

my $lease_id;
my $keepalive_count = 0;

# Step 1: Grant a lease with 10 second TTL
print "1. Granting lease with TTL=10s...\n";
$client->lease_grant(10, sub {
    my ($resp, $err) = @_;

    if ($err) {
        print "Lease grant error: $err->{message}\n";
        EV::break;
        return;
    }

    $lease_id = $resp->{id};
    print "   Lease granted: ID=$lease_id, TTL=$resp->{ttl}\n\n";

    # Step 2: Put a key with this lease
    print "2. Putting key '/leasetest' with lease...\n";
    $client->put('/leasetest', 'lease-value', { lease => $lease_id }, sub {
        my ($resp, $err) = @_;

        if ($err) {
            print "Put error: $err->{message}\n";
            EV::break;
            return;
        }

        print "   Key stored with lease (revision: $resp->{header}{revision})\n\n";

        # Step 3: Verify key exists
        print "3. Verifying key exists...\n";
        $client->get('/leasetest', sub {
            my ($resp, $err) = @_;

            if ($err) {
                print "Get error: $err->{message}\n";
                EV::break;
                return;
            }

            if (@{$resp->{kvs}}) {
                print "   Key exists: $resp->{kvs}[0]{key} = $resp->{kvs}[0]{value}\n\n";
            }

            # Step 4: Revoke the lease
            print "4. Revoking lease $lease_id...\n";
            $client->lease_revoke($lease_id, sub {
                my ($resp, $err) = @_;

                if ($err) {
                    print "Lease revoke error: $err->{message}\n";
                    EV::break;
                    return;
                }



( run in 1.393 second using v1.01-cache-2.11-cpan-140bd7fdf52 )