Doesn't work, and doesn't make sense, even. I assume the problem is in the channel, but can't figure out which and why.
Il giorno martedì 28 marzo 2017 14:47:40 UTC+2, [email protected] ha scritto: > > >> 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
