Murtadha Hubail has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/3388
Change subject: [ASTERIXDB-2563][API] Allow All Nodes To Receive Queries
......................................................................
[ASTERIXDB-2563][API] Allow All Nodes To Receive Queries
- user model changes: any node can receive query requests.
- storage format changes: no
- interface changes: no
Details:
- Add required servlets to NCs web server to allow them
to receive query requests.
- Adapt test framework to use NCs endpoints for query requests
when they are configured.
- Make SqlppExecutionTest use NCs endpoints for query requests.
Change-Id: I31f7937d46b4532c30e2201b3e434e62e5c4a4de
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
M
asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
M
asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionTest.java
3 files changed, 46 insertions(+), 2 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/88/3388/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
index c3402f9..eba2049 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/NCApplication.java
@@ -18,13 +18,22 @@
*/
package org.apache.asterix.hyracks.bootstrap;
+import static
org.apache.asterix.api.http.server.ServletConstants.HYRACKS_CONNECTION_ATTR;
+import static org.apache.asterix.common.utils.Servlets.QUERY_RESULT;
+import static org.apache.asterix.common.utils.Servlets.QUERY_SERVICE;
+import static org.apache.asterix.common.utils.Servlets.QUERY_STATUS;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
+import org.apache.asterix.algebra.base.ILangExtension;
+import org.apache.asterix.api.http.server.NCQueryServiceServlet;
import org.apache.asterix.api.http.server.NetDiagnosticsApiServlet;
+import org.apache.asterix.api.http.server.QueryResultApiServlet;
+import org.apache.asterix.api.http.server.QueryStatusApiServlet;
import org.apache.asterix.api.http.server.ServletConstants;
import org.apache.asterix.api.http.server.StorageApiServlet;
import org.apache.asterix.app.config.ConfigValidator;
@@ -57,6 +66,7 @@
import org.apache.asterix.common.utils.Servlets;
import org.apache.asterix.common.utils.StorageConstants;
import org.apache.asterix.common.utils.StoragePathUtil;
+import org.apache.asterix.compiler.provider.ILangCompilationProvider;
import org.apache.asterix.messaging.MessagingChannelInterfaceFactory;
import org.apache.asterix.messaging.NCMessageBroker;
import
org.apache.asterix.transaction.management.resource.PersistentLocalResourceRepository;
@@ -186,9 +196,16 @@
HttpServer apiServer = new HttpServer(webManager.getBosses(),
webManager.getWorkers(),
externalProperties.getNcApiPort(), config);
apiServer.setAttribute(ServletConstants.SERVICE_CONTEXT_ATTR,
ncServiceCtx);
+ apiServer.setAttribute(HYRACKS_CONNECTION_ATTR,
getApplicationContext().getHcc());
apiServer.addServlet(new StorageApiServlet(apiServer.ctx(),
getApplicationContext(), Servlets.STORAGE));
apiServer.addServlet(
new NetDiagnosticsApiServlet(apiServer.ctx(),
getApplicationContext(), Servlets.NET_DIAGNOSTICS));
+ final ILangCompilationProvider sqlppCompilationProvider =
+
ncExtensionManager.getCompilationProvider(ILangExtension.Language.SQLPP);
+ apiServer.addServlet(new NCQueryServiceServlet(apiServer.ctx(), new
String[] { QUERY_SERVICE },
+ getApplicationContext(),
sqlppCompilationProvider.getLanguage(), sqlppCompilationProvider, null));
+ apiServer.addServlet(new QueryStatusApiServlet(apiServer.ctx(),
getApplicationContext(), QUERY_STATUS));
+ apiServer.addServlet(new QueryResultApiServlet(apiServer.ctx(),
getApplicationContext(), QUERY_RESULT));
webManager.add(apiServer);
}
diff --git
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
index 217b065..163ab59 100644
---
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
+++
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
@@ -161,6 +161,7 @@
private static final HashMap<Integer, ITestServer> runningTestServers =
new HashMap<>();
private static Map<String, InetSocketAddress> ncEndPoints;
+ private static List<InetSocketAddress> ncEndPointsList = new ArrayList<>();
private static Map<String, InetSocketAddress> replicationAddress;
private final List<Charset> allCharsets;
@@ -171,6 +172,7 @@
*/
protected final List<InetSocketAddress> endpoints;
protected int endpointSelector;
+ protected int ncEndpointSelector;
protected IExternalUDFLibrarian librarian;
private Map<File, TestLoop> testLoops = new HashMap<>();
private double timeoutMultiplier = 1;
@@ -201,6 +203,7 @@
public void setNcEndPoints(Map<String, InetSocketAddress> ncEndPoints) {
this.ncEndPoints = ncEndPoints;
+ ncEndPointsList.addAll(ncEndPoints.values());
}
public void setNcReplicationAddress(Map<String, InetSocketAddress>
replicationAddress) {
@@ -1794,7 +1797,10 @@
protected URI createEndpointURI(String path, String query) throws
URISyntaxException {
InetSocketAddress endpoint;
- if (isCcEndPointPath(path)) {
+ if (!ncEndPointsList.isEmpty() && path.equals(Servlets.QUERY_SERVICE))
{
+ int endpointIdx = Math.abs(ncEndpointSelector++ %
ncEndPointsList.size());
+ endpoint = ncEndPointsList.get(ncEndpointSelector);
+ } else if (isCcEndPointPath(path)) {
int endpointIdx = Math.abs(endpointSelector++ % endpoints.size());
endpoint = endpoints.get(endpointIdx);
} else {
diff --git
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionTest.java
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionTest.java
index f9f57a3..d34eccd 100644
---
a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionTest.java
+++
b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionTest.java
@@ -18,10 +18,16 @@
*/
package org.apache.asterix.test.runtime;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.asterix.common.api.INcApplicationContext;
import org.apache.asterix.test.common.TestExecutor;
import org.apache.asterix.testframework.context.TestCaseContext;
+import org.apache.hyracks.control.nc.NodeControllerService;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -38,7 +44,9 @@
@BeforeClass
public static void setUp() throws Exception {
- LangExecutionUtil.setUp(TEST_CONFIG_FILE_NAME, new TestExecutor());
+ final TestExecutor testExecutor = new TestExecutor();
+ LangExecutionUtil.setUp(TEST_CONFIG_FILE_NAME, testExecutor);
+ setNcEndpoints(testExecutor);
}
@AfterClass
@@ -61,4 +69,17 @@
public void test() throws Exception {
LangExecutionUtil.test(tcCtx);
}
+
+ private static void setNcEndpoints(TestExecutor testExecutor) {
+ final NodeControllerService[] ncs =
ExecutionTestUtil.integrationUtil.ncs;
+ final Map<String, InetSocketAddress> ncEndPoints = new HashMap<>();
+ final String ip = InetAddress.getLoopbackAddress().getHostAddress();
+ for (NodeControllerService nc : ncs) {
+ final String nodeId = nc.getId();
+ final INcApplicationContext appCtx = (INcApplicationContext)
nc.getApplicationContext();
+ int apiPort = appCtx.getExternalProperties().getNcApiPort();
+ ncEndPoints.put(nodeId, InetSocketAddress.createUnresolved(ip,
apiPort));
+ }
+ testExecutor.setNcEndPoints(ncEndPoints);
+ }
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/3388
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I31f7937d46b4532c30e2201b3e434e62e5c4a4de
Gerrit-Change-Number: 3388
Gerrit-PatchSet: 1
Gerrit-Owner: Murtadha Hubail <[email protected]>