[ 
https://issues.apache.org/jira/browse/PHOENIX-3663?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15883451#comment-15883451
 ] 

James Taylor commented on PHOENIX-3663:
---------------------------------------

Patch looks good, [~gjacoby]. One minor issue:
- Instead of instantiating a SQLException directly, create a new enum in 
SQLExceptionCode and use SQLExceptionInfo.Builder to create it:
{code}
     @Override
     public void addConnection(PhoenixConnection connection) throws 
SQLException {
-        connectionQueues.get(getQueueIndex(connection)).add(new 
WeakReference<PhoenixConnection>(connection));
-        if (returnSequenceValues) {
+        if (returnSequenceValues || shouldThrottleNumConnections) {
             synchronized (connectionCountLock) {
+                if (shouldThrottleNumConnections && connectionCount + 1 > 
maxConnectionsAllowed){
+                    GLOBAL_PHOENIX_CONNECTIONS_THROTTLED_COUNTER.increment();
+                    throw new SQLException(String.format("Could not create 
connection " +
+                        "because this client already has the maximum number" +
+                        " of %d connections to the target cluster.", 
maxConnectionsAllowed));
+                }
+
{code}
Something like this:
{code}
                throw new 
SQLExceptionInfo.Builder(SQLExceptionCode.MAX_CONNECTIONS_EXCEEDED)
                .setMessage("Maximum connections = " + maxConnectionsAllowed)
                .build().buildException();
{code}
That way it'll have a unique error code that clients can match against. You 
could optionally create a new class derived from SQLException if we think it's 
likely that clients might catch this exception. You'd then instantiate the 
class in SQLExceptionCode (see other examples there).

> Implement resource controls in Phoenix JDBC driver
> --------------------------------------------------
>
>                 Key: PHOENIX-3663
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3663
>             Project: Phoenix
>          Issue Type: New Feature
>    Affects Versions: 4.9.0
>            Reporter: Geoffrey Jacoby
>            Assignee: Geoffrey Jacoby
>         Attachments: PHOENIX-3663.patch
>
>
> It would be very useful for service protection to be able to limit how many 
> Phoenix connections a particular client machine can request at one time. 
> This feature should be optional, and default to off for backwards 
> compatibility. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to