logv / snorkel

UI for interactive data analysis | https://snorkel.logv.org
https://fb.com/groups/snorkelsnorkelsnorkel
161 stars 21 forks source link

Session data null when trying to execute query/server.js #19

Closed adilhafeez closed 7 years ago

adilhafeez commented 7 years ago

I'm seeing following error when trying to issue query against data set. It appears that __user variable is null,

Couldn't setup socket for new client on query controller [TypeError: Cannot read property 'id' of undefined]

this is the source of error,

https://github.com/logv/snorkel/blob/master/snorkel/app/controllers/query/server.js#L823

I took at stack trace just before the exception,

Trace: socket session trace
    at Object.module.exports.socket (/code/snorkel/snorkel/app/controllers/query/server.js:944:13)
    at setup_new_socket (/code/snorkel/snorkel/node_modules/superfluous/core/server/socket.js:98:16)
    at /code/snorkel/snorkel/node_modules/superfluous/core/server/socket.js:230:13
    at /code/snorkel/snorkel/node_modules/superfluous/core/server/context.js:188:9
    at Namespace.run (/code/snorkel/snorkel/node_modules/superfluous/node_modules/continuation-local-storage/context.js:48:5)
    at Function._.extend.create (/code/snorkel/snorkel/node_modules/superfluous/core/server/context.js:185:7)
    at Channel.<anonymous> (/code/snorkel/snorkel/node_modules/superfluous/core/server/socket.js:216:17)
    at Channel.emit (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/node_modules/eventemitter3/index.js:116:35)
    at tick (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/lib/server/spark.js:121:13)
---------------------------------------------
    at Sparky.initialise (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/lib/server/spark.js:120:11)
    at execute (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/lib/server/spark.js:45:16)
    at Array.forEach (native)
    at Sparky.Spark (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/lib/server/spark.js:44:21)
    at new Sparky (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/lib/server/channel.js:57:18)
    at Channel.subscribe (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/lib/server/channel.js:104:15)
    at Sparky.ondata (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/lib/server/multiplex.js:116:17)
    at Sparky.EventEmitter.emit (events.js:117:20)
---------------------------------------------
    at Multiplex.onconnection (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus-multiplex/lib/server/multiplex.js:94:8)
    at each (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/node_modules/asyncemit/index.js:56:19)
    at each (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/node_modules/asyncemit/index.js:57:14)
    at PrimusIO.asyncemit (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/node_modules/asyncemit/index.js:71:5)
    at tick (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/spark.js:292:12)
    at /code/snorkel/snorkel/node_modules/superfluous/node_modules/continuation-local-storage/node_modules/async-listener/glue.js:188:31
    at process._tickDomainCallback [as _tickCallback] (node.js:459:13)
---------------------------------------------
    at Sparky.initialise (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/spark.js:291:11)
    at execute (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/spark.js:57:16)
    at Array.forEach (native)
    at Sparky.Spark (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/spark.js:56:33)
    at new Sparky (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/index.js:77:11)
    at Server.connection (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/transformers/engine.io/server.js:25:17)
    at Server.EventEmitter.emit (events.js:95:17)
    at Server.handshake (/code/snorkel/snorkel/node_modules/superfluous/node_modules/engine.io/lib/server.js:262:8)
---------------------------------------------
    at child.server (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/transformers/engine.io/server.js:24:16)
    at child.initialise (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/transformer.js:51:25)
    at child.Transformer (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/transformer.js:24:8)
    at new child (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/node_modules/fusing/node_modules/predefine/node_modules/extendible/index.js:88:19)
    at PrimusIO.initialise (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/index.js:258:26)
    at PrimusIO.Primus (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/node_modules/primus/index.js:98:8)
    at new PrimusIO (/code/snorkel/snorkel/node_modules/superfluous/node_modules/primus.io/lib/index.js:29:10)
    at Object.module.exports.setup_io (/code/snorkel/snorkel/node_modules/superfluous/core/server/socket.js:144:18)
    at /code/snorkel/snorkel/node_modules/superfluous/core/server/main.js:237:12
adilhafeez commented 7 years ago

@mikramulhaq @okayzed

okayzed commented 7 years ago

I'm uncertain what is causing this. I have set up my local instance with mongo and can not repro, but I have seen a similar issue before in #7. I anticipate a similar fix would work (as a workaround, temporarily): https://github.com/rameshvk/snorkel/commit/5f4355c9d80cec8ab25e69dcbe36e6d9523f7c6f

To dig into what is happening, the __user object is being created in the socket setup: https://github.com/logv/snorkel/blob/master/snorkel/app/server/auth.js#L189

after the page is loaded, the page does a socket setup with the server for further communications. At this point, the __user should be hung off the socket for later use: But it looks like either the session store or the user are not being properly attached for use in the query controller.

Some possibilities: You are not sending over a connect.sid cookie, or your connect.sid cookie in your browser is old / stale and the server can not find it.

okayzed commented 7 years ago

I pushed a commit that I think will address (read: bandaid) this problem. Github decided to auto-close the issue, so please re-open if the fix does not work.

My current assessment is that something is going wrong during socket setup and the user's session can not be loaded (either due to missing info in the session DB, missing info from the browser or an error in the code).

The effect this fix will have (if the bandaid path is used) is that the user's queries will not be properly saved into their history.