Hi,

I have been looking at various packages to understand how one goes about 
implementing things in Go. I have been learning a great deal just by 
getting my head around code written by smarter devs than I'm ever likely to 
be ;)

Whilst looking at golang/oauth2, two lines of code handling token expiry 
led me to discover about time.Time's use of both wall and monotonic clocks. 
I realised that either I had failed to understand something or the code was 
wrong. I'm assuming it's the former, so hopefully somebody can explain it 
to me...

In oauth2/internal/token.go, doTokenRoudnTrip sets the Token.Expiry as 
follows:

token.Expiry = time.Now().Add(time.Duration(expires) * time.Second)
 
In oauth2/token.go, the Token.expired function returns this:

return t.Expiry.Round(0).Add(-expiryDelta).Before(timeNow())

If I have read the time package documentation correctly, the monotonic 
clock reading is intended for time measurements. In particular, it provides 
robust behaviour for functions such as Before().

So I do not understand why the monotonic reading is stripped from the time 
value with Round(0) before invoking Before() in the code above. As I read 
it, the token.Expiry has a monotonic clock reading (now + duration) which 
is then stripped when evaluated against Before(now) later on... does this 
not make the code susceptible to issues when system time is being adjusted? 
What is the rationale for Round(0) in this case?

-- ise




-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/b7b70386-0f28-448a-bd95-67d76e273219%40googlegroups.com.

Reply via email to