El dimecres, 25 abril de 2018 0:54:53 UTC+2, Dan Book va escriure:
>
> Even with write-ahead logging, committing a transaction or running a data 
> update outside a transaction should be immediately reflected in any other 
> readers -- as long as they run the read query after the commit/update has 
> completed. The ability to read while another connection is writing (and see 
> the state unaffected by the transaction) is the primary purpose of WAL mode.
>
> I don't see any issue with what you presented so far, but more important 
> would be to see how you are running updates or transactions.
>

Thanks a lot! This helps me to focus the attention to other issues in order 
to debug this issue!

Cheers!


> On Tue, Apr 24, 2018 at 6:48 PM, mimosinnet <[email protected] 
> <javascript:>> wrote:
>
>> After writing a Mojolicious application 
>> <https://github.com/mimosinnet/lecturers-management> in Mojo::SQLite, 
>> some transactions doesn't seem to be immediately committed to the database. 
>> I wonder if this is related to SQLite Write-Ahead Logging 
>> <http://sqlite.org/wal.html> or how I have defined Mojo::SQLite (I am 
>> afraid it is the latter  :(  ). This is the logic I have followed:
>>
>> --> As some modules need to access the database, I have defined a module 
>> that loads the database 
>> <https://github.com/mimosinnet/lecturers-management/blob/master/lib/GestioMaster/Obj/DB.pm>
>> :
>>
>> *package GestioMaster::Obj::DB;*
>> use Mojo::Base -base;
>>
>> use Mojo::SQLite;
>> use GestioMaster::Model::DB;
>>
>> has sqlite => sub { Mojo::SQLite->new('sqlite:db/master.db') };
>>
>> has model  => sub {
>> my $self = shift;
>> return GestioMaster::Model::DB->new( sqlite =>  $self->sqlite );
>> };
>>
>> --> This module is used when loading the application 
>> <https://github.com/mimosinnet/lecturers-management/blob/master/lib/GestioMaster.pm>
>> :
>>
>> package GestioMaster;
>> use Mojo::Base 'Mojolicious';
>> *use GestioMaster::Obj::DB;*
>>
>> sub startup {
>>   my $self = shift;
>>   my $config = $self->plugin('Config');
>>   $self->helper( model => sub { 
>> state $model = GestioMaster::Obj::DB->new->model;
>>    });
>> ...
>>
>> --> Accessing the database is defined in the Model 
>> <https://github.com/mimosinnet/lecturers-management/blob/master/lib/GestioMaster/Model/DB.pm>
>> : 
>>
>> package GestioMaster::Model::DB;
>> use Mojo::Base -base;
>> has 'sqlite';
>> ...
>> sub un_modul {
>> my ($self, $modul) = @_;
>> return $self->sqlite->db->select('moduls',undef,{ modul => $modul})->hash;
>> }
>> ...
>>
>> --> The same module is also used to define registers from the database 
>> <https://github.com/mimosinnet/lecturers-management/blob/master/lib/GestioMaster/Obj/Modul.pm>
>> :
>>
>> package *GestioMaster::Obj::Modul*;
>> use Mojo::Base -base;
>> # Object that makes database available
>> *use GestioMaster::Obj::DB;*
>>
>> has _model => sub { GestioMaster::Obj::DB->new->model  };
>> has modul => "";
>>
>> has un_modul => sub { 
>> my $self = shift;
>> return $self->_model->un_modul( $self->modul );
>> };
>>
>> has ident => sub { shift->un_modul->{'ident'} };
>> has coord => sub { shift->un_modul->{'coord'} };
>> has nom_modul => sub { shift->un_modul->{'nom_modul'}; };
>> ...
>>
>>
>> --> This builds an array-ref of registers 
>> <https://github.com/mimosinnet/lecturers-management/blob/master/lib/GestioMaster/Controller/Moduls/Modul.pm>
>> :
>>
>> package GestioMaster::Controller::Moduls::Modul;
>> use Mojo::Base -base;
>> use *GestioMaster::Obj::Modul*;
>>
>> has moduls => sub {
>> my $self = shift;
>> my @moduls = qw/M1 M2a M2b M3a M3b M3d M3e M4 M5a M5b M5c M5d M6/;
>> my $mod_obj = [];
>> foreach my $mod ( @moduls  ) {
>> push @{$mod_obj}, *GestioMaster::Obj::Modul*->new( modul => $mod );
>> }
>> return $mod_obj;
>> };
>>
>> d) Used in the controller 
>> <https://github.com/mimosinnet/lecturers-management/blob/master/lib/GestioMaster/Controller/Public.pm>
>> :
>>
>> package GestioMaster::Controller::Public;
>> use GestioMaster::Controller::Moduls::Modul;
>> state $moduls = GestioMaster::Controller::Moduls::Modul->new->moduls;
>>
>> sub inici  { shift->render( moduls => $moduls ) }
>>
>>
>> e) That promised straightforward templates 
>> <https://github.com/mimosinnet/lecturers-management/blob/master/templates/public/inici.html.ep>
>> : 
>>
>> % foreach my $mod ( @{ $moduls } ) {
>> <li><a href="<%= '/pub/modul/' . $mod->modul %>"><%= $mod->modul . ": " . 
>> $mod->nom_modul %></a></li>
>> % }
>>
>>
>> So far so good, till the application started to write to the database and 
>> noticed some transactions were not immediately committed :O
>>
>>
>> My questions:
>>
>> a) Opening the database in two different modules has an effect on how 
>> transactions are committed?
>> b) Could this be solved by "Application-Initiated Checkpoints 
>> <http://sqlite.org/wal.html#application_initiated_checkpoints>"?
>> c) If the application has to be rewritten, how can the database defined 
>> in package *GestioMaster* be accessed from *GestioMaster::Obj::Modul*?
>>
>> Thanks! 
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Mojolicious" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/mojolicious.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to