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 
= x *and *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