File: OneHash.pm

package info (click to toggle)
libdr-tarantool-perl 0.43-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 488 kB
  • ctags: 319
  • sloc: perl: 5,457; ansic: 594; makefile: 23; sh: 3
file content (82 lines) | stat: -rw-r--r-- 1,786 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
use utf8;
use strict;
use warnings;

package Check::OneHash;
use AnyEvent;
use Coro;
use Coro::AnyEvent;
use DR::Tarantool ':constant';

use constant ITERATIONS => cfg 'check.onehash.iterations';

sub start {

    my $done_time = 0;
    my $total = 0;
    my @fields;
    my $total_errors = 0;
    
    while(1) {

        my $started = now();
        my $errors = 0;

        for (my $i = 0; $i < ITERATIONS; $i++) {
            push @fields => tnt->insert(
                one_hash => [ uuid, uuid ], TNT_FLAG_RETURN);
        }


        for (@fields) {
            my $f = tnt->select(one_hash => [ $_->id ]);
            if ($f) {
                next if $f->id ~~ $_->id;
                next if $f->value ~~ $_->value;
            }
            error 1, 'select exists tuple';
            $errors++;
        }

        for (@fields) {
            my $f = tnt->delete(one_hash => [ $_->id ], TNT_FLAG_RETURN);
            if ($f) {
                next if $f->id ~~ $_->id;
                next if $f->value ~~ $_->value;
            }
            error 1, 'delete exists tuple';
            $errors++;
        }

        for (@fields) {
            next if !defined tnt->select(one_hash => [ $_->id ]);
            error 1, 'select unexists tuple';
            $errors++;
        }

        @fields = ();
        
        my $period = now() - $started;

        $done_time += $period;
        $total += ITERATIONS;
        $total_errors += $errors;

        df '%d iterations in %3.3f seconds (%d errors)',
            $total,
            $done_time,
            $total_errors
        ;
        
        df "%d r/s, %3.5f s/r, %3.5f err/s",
            $total / $done_time,
            $done_time / $total,
            $total_errors / $done_time
        ;
        
    }


}

1;