ptupitsyn commented on code in PR #11176:
URL: https://github.com/apache/ignite/pull/11176#discussion_r1455470459


##########
modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerAsyncResponse.java:
##########
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.odbc;
+
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.processors.platform.client.ClientResponse;
+
+/**
+ * Client listener async response.
+ */
+public class ClientListenerAsyncResponse extends ClientResponse {
+    /** Future for response. */
+    private final IgniteInternalFuture<? extends ClientListenerResponse> fut;
+
+    /**
+     * Constructs async response.
+     */
+    public ClientListenerAsyncResponse(IgniteInternalFuture<? extends 
ClientListenerResponse> fut) {
+        super(STATUS_SUCCESS, null);
+
+        this.fut = fut;
+    }
+
+    /** Future for response. */
+    public IgniteInternalFuture<? extends ClientListenerResponse> future() {
+        return fut;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int status() {
+        try {
+            return fut.get().status();
+        }
+        catch (Exception e) {
+            return STATUS_FAILED;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void status(int status) {
+        throw new IllegalStateException();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String error() {
+        try {
+            return fut.get().error();

Review Comment:
   Same as above - let's add `assert fut.isDone`.



##########
modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerAsyncResponse.java:
##########
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.odbc;
+
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.processors.platform.client.ClientResponse;
+
+/**
+ * Client listener async response.
+ */
+public class ClientListenerAsyncResponse extends ClientResponse {
+    /** Future for response. */
+    private final IgniteInternalFuture<? extends ClientListenerResponse> fut;
+
+    /**
+     * Constructs async response.
+     */
+    public ClientListenerAsyncResponse(IgniteInternalFuture<? extends 
ClientListenerResponse> fut) {
+        super(STATUS_SUCCESS, null);
+
+        this.fut = fut;
+    }
+
+    /** Future for response. */
+    public IgniteInternalFuture<? extends ClientListenerResponse> future() {
+        return fut;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int status() {
+        try {
+            return fut.get().status();
+        }
+        catch (Exception e) {
+            return STATUS_FAILED;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void status(int status) {
+        throw new IllegalStateException();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String error() {
+        try {
+            return fut.get().error();
+        }
+        catch (Exception e) {
+            return e.getMessage();
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void error(String err) {
+        throw new IllegalStateException();
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onSent() {
+        try {
+            fut.get().onSent();

Review Comment:
   Same as above - let's add `assert fut.isDone`



##########
modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheKeyRequest.java:
##########
@@ -47,6 +50,28 @@ public abstract class ClientCacheKeyRequest extends 
ClientCacheDataRequest imple
 
     /** {@inheritDoc} */
     @Override public final ClientResponse process(ClientConnectionContext ctx) 
{
+        updateMetrics(ctx);
+
+        // Process request in overriden method.
+        return process0(ctx);
+    }
+
+    /** {@inheritDoc} */
+    @Override public final IgniteInternalFuture<ClientResponse> 
processAsync(ClientConnectionContext ctx) {
+        updateMetrics(ctx);
+
+        // Process request in overriden method.
+        return processAsync0(ctx);
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isAsync(ClientConnectionContext ctx) {
+        // Every cache data request on the transactional cache can lock the 
thread, even with implicit transaction.
+        return cacheDescriptor(ctx).cacheConfiguration().getAtomicityMode() == 
CacheAtomicityMode.TRANSACTIONAL;

Review Comment:
   I think async processing can improve scalability even for ATOMIC caches, do 
you agree?



##########
modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheDataRequest.java:
##########
@@ -48,4 +54,23 @@ public int txId() {
     @Override public boolean isTransactional() {
         return super.isTransactional();
     }
+
+    /** Chain cache operation future to return response when operation is 
completed. */
+    protected <T> IgniteInternalFuture<ClientResponse> chainFuture(

Review Comment:
   Let's move to `ClientFutureUtils` or similar - seems weird to have it in one 
of the request handlers.



##########
modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheScanQueryRequest.java:
##########
@@ -74,7 +74,8 @@ public ClientCacheScanQueryRequest(BinaryRawReaderEx reader) {
 
     /** {@inheritDoc} */
     @Override public ClientResponse process(ClientConnectionContext ctx) {
-        IgniteCache cache = filterPlatform == ClientPlatform.JAVA && 
!isKeepBinary() ? rawCache(ctx) : cache(ctx);
+        IgniteCache<Object, Object> cache = filterPlatform == 
ClientPlatform.JAVA && !isKeepBinary() ?
+            rawCache(ctx) : cache(ctx);

Review Comment:
   ```suggestion
           IgniteCache<Object, Object> cache = filterPlatform == 
ClientPlatform.JAVA && !isKeepBinary() 
               ? rawCache(ctx) 
               : cache(ctx);
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to