As discuss above, i think the answer is decoupling the P and logger, 
storing the logs when the logger is down.The push and pull pattern would be 
better.The p sends all logs and the logger pulls all logs.Just keep a 
bigger storage for un-consumed logs.Queue may be is a better way but using 
a single storage.

在 2019年2月12日星期二 UTC+8上午12:34:46,Michel Levieux写道:
>
> Hi guys. I need a little help here.
>
> I work in a digital marketing company, where we have a program that 
> receives a lot of requests every second (counted in thousands) and logs its 
> behaviour via a logger that runs on another server. We are currently trying 
> to implement a connection-retry system between this program and its logging 
> API. What we want is :
>
> - We have a main program - let's call it P
> - P sends logs to the logger in multiple goroutines.
> - Sometimes we might need to shut down the logger (for maintenance or 
> anything)
> - We want P to keep running when the logger's down
> - Once the logger's up again, P must Dial it back automatically and repair 
> the *bufio.Writer associated with it
>
> Would you guys know a way not to check each single Read/Write if the 
> logger's up?
>
> Up to here we have thought of using atomic, mutexes and context for 
> synchronization, but the issues we face are the following:
>
> - mutexes create "pending" requests, since there's no way to check if a 
> mutex is locked or not
> - we're not really sure about the right way to use context for this 
> specific case
> - we'd like to avoid using atomics as much as possible, notably about this 
> quote from the docs : "*Except for special, low-level applications, 
> synchronization is better done with channels or the facilities of the sync 
> package*"
>
> In the end, what we're looking for is to reach a minimal checking 
> frequency (is connection up? do something, else do nothing), the ideal 
> being not to have to check anything.
>
> Have you guys already faced such problematics in the past? What solutions 
> have you come up with?
>
> Many thx in advance for your help!
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to