Currently there is no limit. It is basically depends on jetty's HashSessionManager. A quick glance through the HashSessionManager doesn't reveal any API to control the max number of sessions. I will keep looking. I just fixed the issue of resource leak. Resources are not released properly when they are expired. I will log a bug in few mins. I think we should get that into the 1.5 release.
Thanks Venki On Thu, Feb 4, 2016 at 1:27 PM, Jason Altekruse <altekruseja...@gmail.com> wrote: > Venki, > > Even for authenticated sessions, do we impose any kind of upper limit on > the number of concurrent connections? I seems like we should issue a > reasonable error message about an over-used Drillbit before the process > dies due to hitting the system file handle limit. > > - Jason > > On Thu, Feb 4, 2016 at 11:00 AM, Josh Schlesser <j...@spoutable.com> > wrote: > > > Thanks Venki, > > Let me know how I can help further. > > > > > On Feb 2, 2016, at 10:23 PM, Venki Korukanti < > venki.koruka...@gmail.com> > > wrote: > > > > > > I think you made valid points. It makes sense to have session less REST > > > calls in both auth enabled and disabled cases. > > > > > > In case of auth enabled: > > > 1) Session-less calls can be authenticated using Basic auth (this was > > > already asked on mailing list sometime back) as a start and move onto > > token > > > based auth later. These requests usually come from non-browsers. The > only > > > issue is setting options before the query. For this we can implement > your > > > suggestion of enhancing the query REST API to accept the options. > > > 2) Session-based call using form auth for browser based access. If we > > > enhance the UI to enter options in the query form, we don't need any > > > session on server actually. > > > > > > I will get a fix ASAP to remove the sessions in anonymous calls as they > > the > > > session are not reused in non-browser cases. > > > > > > Thanks > > > Venki > > > > > > On Tue, Feb 2, 2016 at 9:20 PM, Josh Schlesser <j...@spoutable.com> > > wrote: > > > > > >> No, it wasn’t logging out, it was just stopping, obviously that caused > > >> dangling sessions for the authenticated scenario. > > >> > > >> I don’t think that a short timeout for anonymous sessions is a good > way > > to > > >> go for anonymous api calls. Session management isn’t what anybody > would > > >> expect when using a REST api that is anonymous in a server to server > > >> context. I would expect to use a token for authorization for a > server > > to > > >> server REST api as well. I’m not saying that is what it should be > here, > > >> but that is what my general expectation is based on using other apis. > > In > > >> the case of browser to server REST apis, I have run into > authentication > > for > > >> a browser session and subsequent REST calls leaning on a browser > cookie > > for > > >> persistent authentication. > > >> > > >> Removing sessions for anonymous calls seems like the right path and > > >> possibly easy and I think would be the expected behavior from most > > >> developers. I would advocate for sessionless and token authenticated > > REST > > >> apis for when using authentication for the server to server case and > > cookie > > >> based with a session for the browser to server scenario, but its > really > > the > > >> browser that has a session, not the api per se, its just piggybacking > > on a > > >> regular authenticated web session for the REST api calls. > > >> > > >> This would actually leave me in a quandary for what I am trying to do > > >> which is set a session configuration option ’store.format', but I cant > > >> think of any reason that those types of settings shouldn’t just be set > > on a > > >> per request basis for a REST api. In a server to server context for a > > rest > > >> api, keeping it sessionless means you could front a cluster of > drillbits > > >> with a load balancer and not worry about dying nodes and sticky > sessions > > >> etc... > > >> > > >> I have to get something up and running quickly right now so im > > versioning > > >> back to 1.4 and just spinning up a separate drillbit that will have > the > > >> store.format system variable set to ‘json’ . it will be ok for me > until > > a > > >> good long term solution arrives in drill. > > >> > > >> I’ll run the test on short session_max_idle_secs to 30 seconds on > > >> 1.5.0-SNAPSHOT to see if that gets rid of the file handle starvation > > >> problem, but keep in mind that means that users of the web console > will > > >> have 30 seconds between pages or they have to authenticate again, > which > > >> will probably be very annoying. It doesnt seem like a good long term > > >> solution either. > > >> > > >> How do you think all of this should work? I look forward to staying > > >> involved. > > >> > > >> Cheers, > > >> Josh > > >> > > >>> On Feb 2, 2016, at 4:40 PM, Venki Korukanti < > venki.koruka...@gmail.com > > > > > >> wrote: > > >>> > > >>> When auth is *enabled*, is the worker process logging out after > queries > > >> are > > >>> done? When auth is *disabled* can you set session_max_idle_secs in > > >>> drill.exec.http block in drill-override.conf to something like 30 > > (secs) > > >>> and try? This way anonymous sessions are closed quickly and not kept > > for > > >>> 1hr (default value). I think we may need to avoid creating sessions > in > > >>> anonymous mode (when auth is disabled). > > >>> > > >>> Thanks > > >>> Venki > > >>> > > >>> On Tue, Feb 2, 2016 at 4:02 PM, Josh Schlesser <j...@spoutable.com> > > >> wrote: > > >>> > > >>>> I have a background worker process (on a server, not a browser) that > > >> kicks > > >>>> off every minute or so and issues some queries sequentially to the > > rest > > >>>> query endpoint. In 1.4 with no authentication this worked fine > > except > > >>>> that in 1 instance I need to issue a CTAS query with a different > > format > > >>>> (json). > > >>>> > > >>>> I upgraded to 1.5-SNAPSHOT commit > > >> bb3fc15216d9cab804fc9a6f0e5bd34597dd4394 > > >>>> > > >>>> Since the upgrade I am getting a resource starvation problem with or > > >>>> without authentication > > >>>> The drillbit process stays up for a an hour or less and then becomes > > >>>> unresponsive and eats up the cpu. > > >>>> > > >>>> It is definitely a resource starvation issue, not sure if its a > > resource > > >>>> leak. > > >>>> Below is a stack trace. > > >>>> Also when i lsof on the pid there are a lot (more than a thousand) > of > > >>>> files like this listed which are used by NIO selectors. so it > smells > > >> like > > >>>> a resource leak. > > >>>> > > >>>> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE > > NAME > > >>>> java 2931 root 288u 0000 0,11 0 7705 > > >>>> anon_inode > > >>>> > > >>>> 2016-02-02 21:56:26,520 [qtp1250890858-11590] ERROR > > >>>> o.a.d.e.s.r.a.AnonymousLoginService - Login failed. > > >>>> java.lang.IllegalStateException: failed to create a child event loop > > >>>> at > > >>>> > > >> > > > io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:68) > > >>>> ~[netty-common-4.0.27.Final.jar:4.0.27.Final] > > >>>> at > > >>>> > > >> > > > io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:49) > > >>>> ~[netty-transport-4.0.27.Final.jar:4.0.27.Final] > > >>>> at > > >>>> > > >> > > > io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:61) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> > > >> > > > io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:49) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.rpc.TransportCheck.createEventLoopGroup(TransportCheck.java:73) > > >>>> ~[drill-rpc-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.client.DrillClient.createEventLoop(DrillClient.java:239) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > org.apache.drill.exec.client.DrillClient.connect(DrillClient.java:220) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > org.apache.drill.exec.client.DrillClient.connect(DrillClient.java:178) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.server.rest.auth.AbstractDrillLoginService.createDrillClient(AbstractDrillLoginService.java:56) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.server.rest.auth.AnonymousLoginService.login(AnonymousLoginService.java:47) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.server.rest.auth.AnonymousAuthenticator.validateRequest(AnonymousAuthenticator.java:71) > > >>>> [drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:503) > > >>>> [jetty-security-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1111) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:478) > > >>>> [jetty-servlet-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1045) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at org.eclipse.jetty.server.Server.handle(Server.java:462) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:279) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:534) > > >>>> [jetty-io-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) > > >>>> [jetty-util-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) > > >>>> [jetty-util-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at java.lang.Thread.run(Thread.java:745) [na:1.7.0_91] > > >>>> Caused by: java.lang.RuntimeException: epoll_create1() failed: Too > > many > > >>>> open files > > >>>> at io.netty.channel.epoll.Native.epollCreate(Native Method) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> io.netty.channel.epoll.EpollEventLoop.<init>(EpollEventLoop.java:74) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> > > >> > > > io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:76) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> > > >> > > > io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:64) > > >>>> ~[netty-common-4.0.27.Final.jar:4.0.27.Final] > > >>>> ... 25 common frames omitted > > >>>> 2016-02-02 21:56:30,130 [qtp1250890858-11591] ERROR > > >>>> o.a.d.e.s.r.a.AnonymousLoginService - Login failed. > > >>>> java.lang.IllegalStateException: failed to create a child event loop > > >>>> at > > >>>> > > >> > > > io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:68) > > >>>> ~[netty-common-4.0.27.Final.jar:4.0.27.Final] > > >>>> at > > >>>> > > >> > > > io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:49) > > >>>> ~[netty-transport-4.0.27.Final.jar:4.0.27.Final] > > >>>> at > > >>>> > > >> > > > io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:61) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> > > >> > > > io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:49) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.rpc.TransportCheck.createEventLoopGroup(TransportCheck.java:73) > > >>>> ~[drill-rpc-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.client.DrillClient.createEventLoop(DrillClient.java:239) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > org.apache.drill.exec.client.DrillClient.connect(DrillClient.java:220) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > org.apache.drill.exec.client.DrillClient.connect(DrillClient.java:178) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.server.rest.auth.AbstractDrillLoginService.createDrillClient(AbstractDrillLoginService.java:56) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.server.rest.auth.AnonymousLoginService.login(AnonymousLoginService.java:47) > > >>>> ~[drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.apache.drill.exec.server.rest.auth.AnonymousAuthenticator.validateRequest(AnonymousAuthenticator.java:71) > > >>>> [drill-java-exec-1.5.0-SNAPSHOT.jar:1.5.0-SNAPSHOT] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:503) > > >>>> [jetty-security-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1111) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:478) > > >>>> [jetty-servlet-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1045) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at org.eclipse.jetty.server.Server.handle(Server.java:462) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:279) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232) > > >>>> [jetty-server-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:534) > > >>>> [jetty-io-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) > > >>>> [jetty-util-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at > > >>>> > > >> > > > org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) > > >>>> [jetty-util-9.1.5.v20140505.jar:9.1.5.v20140505] > > >>>> at java.lang.Thread.run(Thread.java:745) [na:1.7.0_91] > > >>>> Caused by: java.lang.RuntimeException: epoll_create1() failed: Too > > many > > >>>> open files > > >>>> at io.netty.channel.epoll.Native.epollCreate(Native Method) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> io.netty.channel.epoll.EpollEventLoop.<init>(EpollEventLoop.java:74) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> > > >> > > > io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:76) > > >>>> ~[netty-transport-native-epoll-4.0.27.Final-linux-x86_64.jar:na] > > >>>> at > > >>>> > > >> > > > io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:64) > > >>>> ~[netty-common-4.0.27.Final.jar:4.0.27.Final] > > >>>> ... 25 common frames omitted > > >>>> > > >>>> > > >>>> > > >>>>> On Feb 2, 2016, at 7:40 AM, Venki Korukanti < > > venki.koruka...@gmail.com > > >>> > > >>>> wrote: > > >>>>> > > >>>>> Currently we keep the DrillClient per session. All the state is in > > >> Server > > >>>>> and DrillClient is the reference to reuse the state. DrillClient is > > >>>>> automatically closed when the session expires (default value is 1hr > > >> after > > >>>>> the last activity on session) or user explicitly logs out. I am > > trying > > >> to > > >>>>> understand if there is a resource leak. Do you have too many > sessions > > >>>> open > > >>>>> when the system load is max or just few sessions but you have > already > > >> ran > > >>>>> many queries using the existing sessions? If it is the former it is > > >>>>> understandable to have per connection per session life. Also are > the > > >>>>> resources not freeing up after logout? > > >>>>> > > >>>>> If you need to have multiple simultaneous sessions, it is better to > > >>>> connect > > >>>>> to different Drillbits (may be in a round-robin fashion) than > always > > >>>>> connecting to a single Drillbit. > > >>>>> > > >>>>> Thanks > > >>>>> Venki > > >>>>> > > >>>>> On Mon, Feb 1, 2016 at 11:51 PM, Josh Schlesser < > j...@spoutable.com > > >>>> <mailto:j...@spoutable.com>> wrote: > > >>>>> > > >>>>>> First: Im a total newb at contributing to apache projects so > please > > >>>> excuse > > >>>>>> any indiscretions, feel free to give comments on style or > whatever, > > i > > >>>> take > > >>>>>> feedback well. Thick skin too. > > >>>>>> > > >>>>>> > > >>>>>> Ill give some background next and then a proposal. > > >>>>>> > > >>>>>> Background: > > >>>>>> I recently changed over to using authentication in the 1.5 > snapshot > > >>>>>> because I need to have a session via the REST api so that I can > set > > >> the > > >>>>>> session storage options in an initial query for a subsequent CTAS > > >> query. > > >>>>>> Previously all rest calls seemed to be completely independent. > > >>>>>> > > >>>>>> Since the change I have started seeing ‘too many files open’ > errors > > in > > >>>> my > > >>>>>> drillbit.log and the drillbit java process becomes effectively > hung > > >>>> waiting > > >>>>>> for open file descriptor slots. When running the top command the > > >>>> machine > > >>>>>> is running at max load due to the drillbit process and the > drillbit > > >>>> becomes > > >>>>>> effectively unresponsive, even the simple pages in the web console > > >> don’t > > >>>>>> respond. Investigating further it seems that there might be a > file > > >>>> kept > > >>>>>> open per session by the drillbit process for the life of the > > session. > > >>>> I > > >>>>>> used the lsof unix command on the drillbit process and found a lot > > of > > >>>> unix > > >>>>>> pipes. Looking at the code it looks like these pipes could be for > > the > > >>>>>> communication between the web process and the rpc server, with one > > >> being > > >>>>>> allocated per session. I haven’t validated this, its just a guess > > >> after > > >>>>>> scanning the code. I had 1.4 running without this requirement > and > > >>>> without > > >>>>>> ever seeing the error. It seems without authentication the number > > of > > >>>> open > > >>>>>> files is a non-issue for me, possibly due to sessions. > > >>>>>> > > >>>>>> I'm wondering if my guess about what is causing the ‘too many open > > >>>> files’ > > >>>>>> error is plausible? Does anybody with a deeper understanding of > > the > > >>>>>> architecture have any comments on this? > > >>>>>> > > >>>>>> Proposal: > > >>>>>> Assuming sessions are the issue, I am making some changes to my > rest > > >>>>>> client so that sessions are more effectively used and I can up the > > >>>> ulimit > > >>>>>> for the drillbit process for the linux user in hopes of mitigating > > >>>> this. I > > >>>>>> am effectively creating a rest client based session pool that > resets > > >>>>>> session variables to defaults when the session gets reused. > > >> However, > > >>>> it > > >>>>>> seems hacky. > > >>>>>> > > >>>>>> Below is an idea for getting per request based settings which > seems > > >> less > > >>>>>> hacky in the long term. > > >>>>>> > > >>>>>> Can I add a new array member to the query.json REST method in a > > >>>> backwards > > >>>>>> compatible way to set session level parameters in a single > request? > > >>>>>> Currently a rest request via the api has a body like so: > > >>>>>> { “queryType”: “SQL”, “query” : “<drill query>”} > > >>>>>> > > >>>>>> id like to do the following > > >>>>>> > > >>>>>> { “queryType”: “SQL”, “query” : “<drill query>”, > “sessionSettings”: > > >>>>>> [“option_1_name”:”option_1_value”, > > “option_2_name”:”option_2_value”]} > > >>>>>> > > >>>>>> or even > > >>>>>> > > >>>>>> { “queryType”: “SQL”, “query” : “<drill query>”, > “sessionSettings”: > > >>>> [“SET > > >>>>>> `option_name` = value”, “SET `option_name1` = value1”,“SET > > >>>> `option_name2` = > > >>>>>> value2”, “SET `option_name3` = value3”]} > > >>>>>> > > >>>>>> As far as I can tell drill is essentially stateless between > queries > > >>>> right > > >>>>>> now except for session level system parameters and authentication. > > >>>> There > > >>>>>> aren’t any in memory temp tables or cursors or variables like > PL/SQL > > >> or > > >>>>>> PSQL or other SQLs that would make it stateful. > > >>>>>> > > >>>>>> Given the stateless assumption, being able to set session level > > params > > >>>> on > > >>>>>> a per request basis would cover all of the cases that I might > need. > > >> It > > >>>>>> looks relatively straight forward to add something to QueryWrapper > > to > > >>>>>> accept an optional query session settings section of the json > packet > > >> and > > >>>>>> execute those ’SET' commands before the final query. This will > > work > > >>>> for > > >>>>>> me, as I can run without authentication in an ’secure' backend > > >>>> environment > > >>>>>> which will remove sessions and hence file descriptors, assuming my > > >>>>>> assumptions about file descriptors and sessions are correct. > > >>>>>> > > >>>>>> > > >>>>>> My java is rusty (circa 2003) but some casual googling implies > that > > if > > >>>>>> this were added as a 3rd @FormParam to submitQuery in > QueryResources > > >> it > > >>>>>> would be magically be null if it werent present and could easily > be > > >>>>>> ignored. If its present then an alternative constructor of > > >> QueryWrapper > > >>>>>> could be called with the extra param and it would be easy to alter > > its > > >>>> run > > >>>>>> method to execute the SET commands. There would need to be some > > error > > >>>>>> handling of course if the SET commands were illegal or failed to > run > > >> for > > >>>>>> some reason. > > >>>>>> > > >>>>>> If this seems reasonable, how do I go about contributing? I > looked > > >>>>>> through the links in the docs to apache foundation incubator > > projects > > >>>> but > > >>>>>> the links to drill were broken :( > > http://drill.apache.org/team.html > > >> < > > >>>>>> http://drill.apache.org/team.html < > > http://drill.apache.org/team.html > > >>>> > > >>>> I read this > > >>>>>> > http://drill.apache.org/docs/apache-drill-contribution-guidelines/ > > < > > >>>> http://drill.apache.org/docs/apache-drill-contribution-guidelines/> > < > > >>>>>> > http://drill.apache.org/docs/apache-drill-contribution-guidelines/> > > >>>> and > > >>>>>> i have subscribed to the dev mailing list (obvious since you are > > >> getting > > >>>>>> this). It said to post here before creating a JIRA. Am I > missing > > >>>>>> anything in my assumptions? Comments? Should I just submit a > JIRA > > >> and > > >>>> a > > >>>>>> patch or submit a JIRA and a comment or wait for comments before > > >> coding > > >>>>>> stuff up as an example? > > >>>>>> > > >>>>>> Thanks for taking the time to read and respond. > > >>>>>> > > >>>>>> Josh > > >>>> > > >>>> > > >> > > >> > > > > >