Re: [systemd-devel] odd seek_tail behaviour

2014-10-24 Thread Sascha Kattelmann
Hi,

here is a related "bug" report: 
https://bugs.freedesktop.org/show_bug.cgi?id=64614

Doing a "next" after "seek_tail" ends up in some unexpected behaviour. Just do 
a "previous" after seeking the tail and everything works fine.
The problem is symmetrical: Same goes for "previous" after "seek_head". You 
need to do a "next" immediately after "seek_head".

I hope that will help,
Sascha

- Original Message -
From: "Daurnimator" 
To: "systemd Mailing List" 
Sent: Monday, October 13, 2014 7:27:22 AM
Subject: [systemd-devel] odd seek_tail behaviour

Hi All, 

I was trying to write a program that tailed the journal, but found that 
sd_journal_seek_tail() didn't work as expected. 
That is: that it would seek to the last/most recent thing in the journal, and I 
could tail things from there. 

I whipped up a quick demonstration program, that shows that messages I 'next' 
through, are before the 'cutoff': 

#include  
#include  
#include "systemd/sd-journal.h" 

int main() { 
sd_journal* j; 
assert(sd_journal_open(&j, 0)==0); 
uint64_t from, to; 
assert(sd_journal_get_cutoff_realtime_usec(j, &from, &to)==1); 
printf("CUTOFF = %llu\n", to); 

printf("TAIL = %d\n", sd_journal_seek_tail(j)); 

for (int i=0; i<10; i++) { 
printf("NEXT = %lld\n", sd_journal_next(j)); 
assert(sd_journal_get_realtime_usec(j, &from)==0); 
printf("FOUND from %llu\n", from); 
} 
return 0; 
} 

Compiled with: gcc -std=c99 tail_logs.c -l systemd 

Example output: 

CUTOFF = 1413177397982789 
TAIL = 0 
NEXT = 1 
FOUND from 1400437372012374 
NEXT = 1 
FOUND from 1400438753925868 
NEXT = 1 
FOUND from 1400438753926192 
NEXT = 1 
FOUND from 1400438753926257 
NEXT = 1 
FOUND from 1400438753926289 
NEXT = 1 
FOUND from 1400438753926309 
NEXT = 1 
FOUND from 1400438753926330 
NEXT = 1 
FOUND from 1400438753926353 
NEXT = 1 
FOUND from 1400438753926373 
NEXT = 1 
FOUND from 1400438753926395 


Is this behaviour expected? I'm using systemd 216. 

Regards, 
Daurn. 


___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] odd seek_tail behaviour

2014-10-14 Thread Christian Hesse
Christian Hesse  on Mon, 2014/10/13 23:56:
> Christian Hesse  on Mon, 2014/10/13 20:22:
> > Daurnimator  on Mon, 2014/10/13 01:27:
> > > Hi All,
> > > 
> > > I was trying to write a program that tailed the journal, but found that
> > > sd_journal_seek_tail() didn't work as expected.
> > > That is: that it would seek to the last/most recent thing in the
> > > journal, and I could tail things from there.
> > > 
> > > I whipped up a quick demonstration program, that shows that messages I
> > > 'next' through, are before the 'cutoff':
> > > 
> > > [code and output]
> > > 
> > > Is this behaviour expected? I'm using systemd 216.
> > 
> > I do see a similar problem in my code [0]. I do call sd_journal_previous()
> > after sd_journal_seek_tail(), but I still do see some older message come
> > up.
> > 
> > sd_journal_next() is the first I call in while loop. Perhaps even this is
> > a problem?
> > 
> > [0]
> > https://github.com/eworm-de/journal-notify/blob/master/journal-notify.c
> 
> Looks like I was right. For any reason sd_journal_next() can jump to old
> journal entries (even if sd_journal_previous() has been called before). That
> happens before sd_journal_wait() is called the first time.
> 
> Sadly I do not know how to reproduce. It happens very seldom and I could not
> find the culprit so far.

Actually the problem happens before. I have an old entry selected after
calling sd_journal_previous().

Mhh, does adding matches (sd_journal_add_match(),
sd_journal_add_conjunction() and sd_journal_add_disjunction()) have an effect
to sd_journal_seek_tail() and sd_journal_previous()?
Looks like the problem goes away if I seek to tail first, then add my matches.
-- 
main(a){char*c=/*Schoene Gruesse */"B?IJj;MEH"
"CX:;",b;for(a/*Chris   get my mail address:*/=0;b=c[a++];)
putchar(b-1/(/*   gcc -o sig sig.c && ./sig*/b/42*2-3)*42);}


signature.asc
Description: PGP signature
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] odd seek_tail behaviour

2014-10-13 Thread Christian Hesse
Christian Hesse  on Mon, 2014/10/13 20:22:
> Daurnimator  on Mon, 2014/10/13 01:27:
> > Hi All,
> > 
> > I was trying to write a program that tailed the journal, but found that
> > sd_journal_seek_tail() didn't work as expected.
> > That is: that it would seek to the last/most recent thing in the journal,
> > and I could tail things from there.
> > 
> > I whipped up a quick demonstration program, that shows that messages I
> > 'next' through, are before the 'cutoff':
> > 
> > [code and output]
> > 
> > Is this behaviour expected? I'm using systemd 216.
> 
> I do see a similar problem in my code [0]. I do call sd_journal_previous()
> after sd_journal_seek_tail(), but I still do see some older message come up.
> 
> sd_journal_next() is the first I call in while loop. Perhaps even this is a
> problem?
> 
> [0] https://github.com/eworm-de/journal-notify/blob/master/journal-notify.c

Looks like I was right. For any reason sd_journal_next() can jump to old
journal entries (even if sd_journal_previous() has been called before). That
happens before sd_journal_wait() is called the first time.

Sadly I do not know how to reproduce. It happens very seldom and I could not
find the culprit so far.
-- 
main(a){char*c=/*Schoene Gruesse */"B?IJj;MEH"
"CX:;",b;for(a/*Chris   get my mail address:*/=0;b=c[a++];)
putchar(b-1/(/*   gcc -o sig sig.c && ./sig*/b/42*2-3)*42);}


signature.asc
Description: PGP signature
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] odd seek_tail behaviour

2014-10-13 Thread Christian Hesse
Daurnimator  on Mon, 2014/10/13 01:27:
> Hi All,
> 
> I was trying to write a program that tailed the journal, but found that
> sd_journal_seek_tail() didn't work as expected.
> That is: that it would seek to the last/most recent thing in the journal,
> and I could tail things from there.
> 
> I whipped up a quick demonstration program, that shows that messages I
> 'next' through, are before the 'cutoff':
> 
> [code and output]
> 
> Is this behaviour expected? I'm using systemd 216.

I do see a similar problem in my code [0]. I do call sd_journal_previous()
after sd_journal_seek_tail(), but I still do see some older message come up.

sd_journal_next() is the first I call in while loop. Perhaps even this is a
problem?

[0] https://github.com/eworm-de/journal-notify/blob/master/journal-notify.c

-- 
main(a){char*c=/*Schoene Gruesse */"B?IJj;MEH"
"CX:;",b;for(a/*Chris   get my mail address:*/=0;b=c[a++];)
putchar(b-1/(/*   gcc -o sig sig.c && ./sig*/b/42*2-3)*42);}


signature.asc
Description: PGP signature
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] odd seek_tail behaviour

2014-10-13 Thread Daurnimator
 On 13 October 2014 07:22, Sascha Kattelmann  wrote:

> here is a related "bug" report:
> https://bugs.freedesktop.org/show_bug.cgi?id=64614


sd_journal_next() is documented as returning '0' if there are no more
entries available after the current position.
So this sounds like a bug to me.



> Doing a "next" after "seek_tail" ends up in some unexpected behaviour.
> Just do a "previous" after seeking the tail and everything works fine.
> The problem is symmetrical: Same goes for "previous" after "seek_head".
> You need to do a "next" immediately after "seek_head".
>

If this is the API contract; why not perform "next's" functionality inside
of seek_head?


Thanks for the work around.
I just commited an example script:
https://github.com/daurnimator/lua-systemd/blob/master/examples/tail_logs.lua
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] odd seek_tail behaviour

2014-10-12 Thread Daurnimator
Hi All,

I was trying to write a program that tailed the journal, but found that
sd_journal_seek_tail() didn't work as expected.
That is: that it would seek to the last/most recent thing in the journal,
and I could tail things from there.

I whipped up a quick demonstration program, that shows that messages I
'next' through, are before the 'cutoff':

#include 
#include 
#include "systemd/sd-journal.h"

int main() {
sd_journal* j;
assert(sd_journal_open(&j, 0)==0);
uint64_t from, to;
assert(sd_journal_get_cutoff_realtime_usec(j, &from, &to)==1);
printf("CUTOFF = %llu\n", to);

printf("TAIL = %d\n", sd_journal_seek_tail(j));

for (int i=0; i<10; i++) {
printf("NEXT = %lld\n", sd_journal_next(j));
assert(sd_journal_get_realtime_usec(j, &from)==0);
printf("FOUND from %llu\n", from);
}
return 0;
}

Compiled with: gcc -std=c99 tail_logs.c -l systemd

Example output:

CUTOFF = 1413177397982789
TAIL = 0
NEXT = 1
FOUND from 1400437372012374
NEXT = 1
FOUND from 1400438753925868
NEXT = 1
FOUND from 1400438753926192
NEXT = 1
FOUND from 1400438753926257
NEXT = 1
FOUND from 1400438753926289
NEXT = 1
FOUND from 1400438753926309
NEXT = 1
FOUND from 1400438753926330
NEXT = 1
FOUND from 1400438753926353
NEXT = 1
FOUND from 1400438753926373
NEXT = 1
FOUND from 1400438753926395


Is this behaviour expected? I'm using systemd 216.

Regards,
Daurn.
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel