mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-26 13:59:47 +01:00
DualIndexHashObject can now enqueue saves to prevent repeated-save thrashing
This commit is contained in:
parent
a91c2cd71e
commit
506ebf13c6
@ -36,6 +36,7 @@ sub initialize {
|
||||
my ($self, %conf) = @_;
|
||||
$self->{name} = $conf{name} // 'Dual Index hash object';
|
||||
$self->{filename} = $conf{filename} // Carp::carp("Missing filename to DualIndexHashObject, will not be able to save to or load from file.");
|
||||
$self->{save_queue_timeout} = $conf{save_queue_timeout} // 0;
|
||||
$self->{hash} = {};
|
||||
}
|
||||
|
||||
@ -107,20 +108,34 @@ sub save {
|
||||
return;
|
||||
}
|
||||
|
||||
$self->{pbot}->{logger}->log("Saving $self->{name} to $filename\n");
|
||||
my $subref = sub {
|
||||
$self->{pbot}->{logger}->log("Saving $self->{name} to $filename\n");
|
||||
|
||||
if (not $self->get_data('$metadata$', '$metadata$', 'update_version')) {
|
||||
$self->add('$metadata$', '$metadata$', { update_version => PBot::VERSION::BUILD_REVISION });
|
||||
if (not $self->get_data('$metadata$', '$metadata$', 'update_version')) {
|
||||
$self->add('$metadata$', '$metadata$', { update_version => PBot::VERSION::BUILD_REVISION });
|
||||
}
|
||||
|
||||
$self->set('$metadata$', '$metadata$', 'name', $self->{name}, 1);
|
||||
|
||||
my $json = JSON->new;
|
||||
my $json_text = $json->pretty->canonical->utf8->encode($self->{hash});
|
||||
|
||||
open(FILE, "> $filename") or die "Couldn't open $filename: $!\n";
|
||||
print FILE "$json_text\n";
|
||||
close FILE;
|
||||
};
|
||||
|
||||
if ($self->{save_queue_timeout}) {
|
||||
# enqueue the save to prevent save-thrashing
|
||||
$self->{pbot}->{timer}->replace_subref_or_enqueue_event(
|
||||
$subref,
|
||||
$self->{save_queue_timeout},
|
||||
"save $self->{name}",
|
||||
);
|
||||
} else {
|
||||
# execute it right now
|
||||
$subref->();
|
||||
}
|
||||
|
||||
$self->set('$metadata$', '$metadata$', 'name', $self->{name}, 1);
|
||||
|
||||
my $json = JSON->new;
|
||||
my $json_text = $json->pretty->canonical->utf8->encode($self->{hash});
|
||||
|
||||
open(FILE, "> $filename") or die "Couldn't open $filename: $!\n";
|
||||
print FILE "$json_text\n";
|
||||
close FILE;
|
||||
}
|
||||
|
||||
sub clear {
|
||||
|
@ -258,6 +258,13 @@ sub initialize {
|
||||
|
||||
# give botowner all capabilities
|
||||
$self->{capabilities}->rebuild_botowner_capabilities();
|
||||
|
||||
# flush all pending save events to disk at exit
|
||||
$self->{atexit}->register(sub {
|
||||
$self->{pbot}->{timer}->execute_and_dequeue_event('save *');
|
||||
return;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
sub random_nick {
|
||||
|
Loading…
Reference in New Issue
Block a user