File: Order.pm

package info (click to toggle)
libdr-tarantool-perl 0.45-2
  • links: PTS
  • area: main
  • in suites: buster, stretch
  • size: 700 kB
  • ctags: 519
  • sloc: perl: 8,181; ansic: 2,398; makefile: 25; sh: 3
file content (98 lines) | stat: -rw-r--r-- 2,171 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
use utf8;
use strict;
use warnings;

package Check::Order;

use constant ITERATIONS => cfg 'check.order.iterations';
use DR::Tarantool ':constant';

sub start {

    my $done_time = 0;
    my $total = 0;
    my $errors = 0;

    while(1) {

        my $started = now();

        my $sid = uuid;
        my $pid = uuid;

        my @orders;
        for (my $i = 0; $i < ITERATIONS; $i++) {

            push @orders => tnt->call_lua(order_add => [
                uuid,
                $pid,
                uuid,
                now(),
                'request',
                $sid,
                uuid,
                '<driver xml>',
                '<order xml>'
            ] => 'orders');

        }

        for (@orders) {
            $_ = [
                $_,
                tnt->call_lua(order_add => [
                    $_->oid,
                    $_->pid,
                    $_->oid_in_pid,
                    now(),
                    ( ( int rand 100 < 50 ) ? 'request' : 'confirm' ),
                    $_->sid,
                    $_->did,
                    '<driver xml>',
                    '<order xml>'
                ] => 'orders')
            ];

            $errors++
                if error((
                        !$_->[1] or
                        !(@{ $_->[1]->raw } - 1 == @{ $_->[0]->raw })
                    ), 'update'
                );
        }


        for (@orders) {
            my $o = tnt->delete(orders => $_->[0]->oid, TNT_FLAG_RETURN);
            $errors++
                if error((
                        !$_->[-1] or
                        !$o or
                        !(@{ $_->[-1]->raw } ~~ @{ $o->raw })
                    ),
                    'delete'
                );
        }

        my $period = now() - $started;
        $done_time += $period;
        $total += ITERATIONS;


        df "done %d iterations in %3.2f seconds (%d errors)",
            $total,
            $done_time,
            $errors
        ;


        df "%d r/s, %3.5f s/r, %3.5f errors/s",
            $total / $done_time,
            $done_time / $total,
            $errors / $done_time
        ;

    }
}

1;