Commit 2506ddaa authored by Roman Lacko's avatar Roman Lacko
Browse files

use shorter keys in cache

parent aef06aef
Loading
Loading
Loading
Loading
+18 −9
Original line number Original line Diff line number Diff line
@@ -13,39 +13,48 @@ sub new {
    return bless {}, $class;
    return bless {}, $class;
};
};


sub _uri_to_key {
    my (undef, $uri) = @_;
    return $uri->path . ":" . ($uri->query // "");
}

sub get {
sub get {
    my ($self, $uri) = @_;
    my ($self, $uri) = @_;


    my $p = $self->{data}->{$uri};
    my $key = $self->_uri_to_key($uri);
    my $p   = $self->{data}->{$key};


    if ($p) {
    if ($p) {
        $log->trace("cache hit '$uri'");
        $log->trace("cache seach hit '$key' etag '$p->[0]'");
        $log->trace("etag '$p->[0]'");
        return @$p;
        return @$p;
    }
    }


    $log->trace("cache miss '$uri'");
    $log->trace("cache search miss '$key'");
    return;
    return;
};
};


sub set {
sub set {
    my ($self, $uri, $tag, $data) = @_;
    my ($self, $uri, $tag, $data) = @_;
    $self->{data}->{$uri} = [ $tag, $data ];


    $log->trace("cache store '$uri'");
    my $key = $self->_uri_to_key($uri);
    $log->trace("etag '$tag'");
    $self->{data}->{$key} = [ $tag, $data ];

    $log->trace("cache store '$key' etag '$tag'");
    # don't leak data
    # don't leak data
    return;
    return;
};
};


sub flush {
sub flush {
    my ($self, @uris) = @_;
    my ($self, @uris) = @_;
    $log->trace("cache flush '", join(",", @uris), "'");
    my @keys = map { $self->_uri_to_key($_) } (grep { defined } @uris);


    if (!@uris) {
    if (!@uris) {
        $log->trace("cache flush all");
        $self->{data} = {};
        $self->{data} = {};
    } else {
    } else {
        delete $self->{data}->{@uris};
        $log->trace("cache flush " . join(",", map { "'$_'" } @keys))
            if $log->is_trace;
        delete $self->{data}->{@keys};
    }
    }


    # don't leak old keys
    # don't leak old keys