killme2008 / ring-session-memcached

Ring sessions stored in memcached
3 stars 0 forks source link

Key must not be blank #1

Open magnars opened 8 years ago

magnars commented 8 years ago

Hello there!

First of all, respect that you open sourced this four years ago and it has not needed any changes. :-) I'm using it for one of my projects, and once in a blue moon I get this from memcached:

java.lang.IllegalArgumentException: Key must not be blank

the relevant parts of the stack looks like this:

net.rubyeye.xmemcached.utils.ByteUtils.getBytes                    ByteUtils.java:   53
net.rubyeye.xmemcached.XMemcachedClient.checkStoreArguments        XMemcachedClient.java: 1303
net.rubyeye.xmemcached.XMemcachedClient.set                        XMemcachedClient.java: 1277
net.rubyeye.xmemcached.XMemcachedClient.set                        XMemcachedClient.java: 1336
net.rubyeye.xmemcached.XMemcachedClient.set                        XMemcachedClient.java: 1323
clj-xmemcached.core/xset                                           core.clj:   72
ring.middleware.session.memcached.MemcachedStore/write-session     memcached.clj:   15
ring.middleware.session/bare-session-response                      session.clj:   46
ring.middleware.session/session-response                           session.clj:   67
ring.middleware.session/wrap-session/fn                            session.clj:   98

Do you have any idea what is going on here? Ever experienced it yourself?

Thanks :)

killme2008 commented 8 years ago

It seems that you write a session item with blank key ""

https://github.com/killme2008/ring-session-memcached/blob/master/src/ring/middleware/session/memcached.clj#L13

So the xmemcached throw such exception.

magnars commented 8 years ago

Oh, interesting. That gives me something to explore. Thanks for the blazing fast answer! tor. 15. okt. 2015 kl. 09.14 skrev dennis zhuang notifications@github.com:

It seems that you write a session item with blank key ""

https://github.com/killme2008/ring-session-memcached/blob/master/src/ring/middleware/session/memcached.clj#L13

So the xmemcached throw such exception.

— Reply to this email directly or view it on GitHub https://github.com/killme2008/ring-session-memcached/issues/1#issuecomment-148301647 .

magnars commented 8 years ago

Having looked through all my code, session only ever contains {:account-id [long]} or just {} to log out. It also happens very rarely. Something strange is going on here. Would the same thing happen if it turned out to be {:account nil} somehow?

killme2008 commented 8 years ago

I think the complete stacktrace would show the root cause of the exception that which function tried to write the blank key. The stacktrace above is not complete.

magnars commented 8 years ago

You may be right. Here is the complete stack trace:

java.lang.IllegalArgumentException: Key must not be blank
                                          net.rubyeye.xmemcached.utils.ByteUtils.getBytes               ByteUtils.java:   53
                              net.rubyeye.xmemcached.XMemcachedClient.checkStoreArguments        XMemcachedClient.java: 1303
                                              net.rubyeye.xmemcached.XMemcachedClient.set        XMemcachedClient.java: 1277
                                              net.rubyeye.xmemcached.XMemcachedClient.set        XMemcachedClient.java: 1336
                                              net.rubyeye.xmemcached.XMemcachedClient.set        XMemcachedClient.java: 1323
                                                                 clj-xmemcached.core/xset                     core.clj:   72
                           ring.middleware.session.memcached.MemcachedStore/write-session                memcached.clj:   15
                                            ring.middleware.session/bare-session-response                  session.clj:   46
                                                               clojure.lang.RestFn.invoke                  RestFn.java:  442
                                                 ring.middleware.session/session-response                  session.clj:   67
                                                               clojure.lang.RestFn.invoke                  RestFn.java:  442
                                                  ring.middleware.session/wrap-session/fn                  session.clj:   98
                                                        mytomatoes.web/wrap-exceptions/fn                      web.clj:   55
                                               optimus.strategies/serve-asset-or-continue               strategies.clj:   14
                                                optimus.strategies/serve-frozen-assets/fn               strategies.clj:   43
                                        ring.middleware.content-type/wrap-content-type/fn             content_type.clj:   30
                                        ring.middleware.not-modified/wrap-not-modified/fn             not_modified.clj:   44
                                                        mytomatoes.web/wrap-exceptions/fn                      web.clj:   55
                                                      ring.adapter.jetty/proxy-handler/fn                    jetty.clj:   20
ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle
                                   org.eclipse.jetty.server.handler.HandlerWrapper.handle          HandlerWrapper.java:  116
                                                   org.eclipse.jetty.server.Server.handle                  Server.java:  369
                            org.eclipse.jetty.server.AbstractHttpConnection.handleRequest  AbstractHttpConnection.java:  486
                                  org.eclipse.jetty.server.AbstractHttpConnection.content  AbstractHttpConnection.java:  944
                   org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content  AbstractHttpConnection.java: 1005
                                              org.eclipse.jetty.http.HttpParser.parseNext              HttpParser.java:  865
                                         org.eclipse.jetty.http.HttpParser.parseAvailable              HttpParser.java:  240
                                      org.eclipse.jetty.server.AsyncHttpConnection.handle     AsyncHttpConnection.java:   82
                                    org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle   SelectChannelEndPoint.java:  668
                                     org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run   SelectChannelEndPoint.java:   52
                                    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob        QueuedThreadPool.java:  608
                                     org.eclipse.jetty.util.thread.QueuedThreadPool$3.run        QueuedThreadPool.java:  543
                                                                     java.lang.Thread.run                  Thread.java:  745