>> go func(j tengin.Job) { m.OnJob(j); m.Done() }(job)
func(j tengin.Job) { go func(){ m.OnJob(j); m.Done()}() }(job)

Djadala
On Tuesday, March 28, 2017 at 3:27:34 PM UTC+3, Danilo Cianfrone wrote:
>
> I'm experiencing a weird bug.
> I have a microservice that uses FBP architecture, with a structure *graph* 
> as main graph and *multiplexer* as first component.
>
> The code is the following:
>
> type graph struct {
> loggable
> fetchable
>
> multiplexer
> fetcher
> nodeEvaluator
> joiner
> treeEvaluator
>
> closed   atomic.Value
> listener atomic.Value
> }
>
> func (g *graph) Submit(job tengin.Job) error {
> if closed := g.closed.Load().(bool); closed {
> return ErrClosed
> }
>
> if err := job.Validate(); err != nil {
> return err
> }
>
> g.Logger.Debug("added new job to the input channel", job.ZapField())
>
> g.multiplexer.Add(1)
> g.multiplexer.Job <- job
> return nil
> }
>
> type multiplexer struct {
> sync.WaitGroup
> loggable
> multiplexerCallbacks
>
> Job        chan tengin.Job
> FetcherOut chan tengin.Job
> NodeOut    chan tengin.Job
> }
>
> func (m *multiplexer) Handler() {
> go func() {
> for job := range m.Job {
> m.Logger.Debug("JOB ARRIVED", job.ZapField())
> go func(j tengin.Job) { m.OnJob(j); m.Done() }(job)
> }
> }()
> }
>
> type Job struct {
> Event ResourceEvent `json:"event"`
> Stuff *stuff.Stuff  `json:"stuff"`
> }
>
> Every Job is submitted in the main graph, and the *graph.Submit()* function 
> writes the incoming Job into the multiplexer Job channel.
> The *multiplexer.Handler() *listens for incoming jobs from the Job 
> channel, and executes the *multiplexer.OnJob() *function *(which is 
> basically state-less).*
>
> Let's say I'm feeding two Jobs to the graph, *Job1 *and *Job2*, where 
> *Job1.Stuff.ID 
> <http://Job1.Stuff.ID> = x *and *Job2.Stuff.ID <http://Job2.Stuff.ID> = y*
> The *multiplexer.Handler() *receives 2 Jobs, but they're *2 instances of 
> Job2!*
>
> In fact, the Logger on *Submit()* prints Job1 and Job2 as one would 
> expect, but the Logger on *Handler() *prints *2 times Job2!*
> Maybe I'm missing something, but *go vet* doesn't highlight any problems.
>
>

-- 
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