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