abdullah alamoudi has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/2764
Change subject: [NO ISSUE][MISC] Add ping function ...................................................................... [NO ISSUE][MISC] Add ping function - user model changes: no - storage format changes: no - interface changes: no Details: - Add a ping function that takes 0 parameter and simply return a single record from each node which contains the node id. Change-Id: Ic077a11b61dec782756e2dede33ca8220893a2de --- A asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingDatasource.java A asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingFunction.java A asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingReader.java A asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingRewriter.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java A asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/ping/ping.1.query.sqlpp A asterixdb/asterix-app/src/test/resources/runtimets/results/misc/ping/ping.1.adm M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml 8 files changed, 212 insertions(+), 1 deletion(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/64/2764/1 diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingDatasource.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingDatasource.java new file mode 100644 index 0000000..480f3c4 --- /dev/null +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingDatasource.java @@ -0,0 +1,44 @@ +/* + * 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.asterix.app.function; + +import org.apache.asterix.metadata.api.IDatasourceFunction; +import org.apache.asterix.metadata.declared.DataSourceId; +import org.apache.asterix.metadata.declared.FunctionDataSource; +import org.apache.asterix.metadata.declared.MetadataProvider; +import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.properties.INodeDomain; + +public class PingDatasource extends FunctionDataSource { + + private static final DataSourceId PING_DATASOURCE_ID = + new DataSourceId(PingRewriter.PING.getNamespace(), PingRewriter.PING.getName()); + + public PingDatasource(INodeDomain domain) throws AlgebricksException { + super(PING_DATASOURCE_ID, domain); + } + + @Override + protected IDatasourceFunction createFunction(MetadataProvider metadataProvider, + AlgebricksAbsolutePartitionConstraint locations) { + return new PingFunction(locations); + } + +} diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingFunction.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingFunction.java new file mode 100644 index 0000000..c37ed7d --- /dev/null +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingFunction.java @@ -0,0 +1,41 @@ +/* + * 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.asterix.app.function; + +import org.apache.asterix.external.api.IRecordReader; +import org.apache.asterix.metadata.declared.AbstractDatasourceFunction; +import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; + +public class PingFunction extends AbstractDatasourceFunction { + + private static final long serialVersionUID = 1L; + + public PingFunction(AlgebricksAbsolutePartitionConstraint locations) { + super(locations); + } + + @Override + public IRecordReader<char[]> createRecordReader(IHyracksTaskContext ctx, int partition) + throws HyracksDataException { + return new PingReader(ctx.getJobletContext().getServiceContext().getNodeId()); + } + +} diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingReader.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingReader.java new file mode 100644 index 0000000..70a03ce --- /dev/null +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingReader.java @@ -0,0 +1,50 @@ +/* + * 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.asterix.app.function; + +import java.io.IOException; + +import org.apache.asterix.external.api.IRawRecord; +import org.apache.asterix.external.input.record.CharArrayRecord; + +public class PingReader extends FunctionReader { + + private final String nodeId; + private boolean consumed = false; + + public PingReader(String nodeId) { + this.nodeId = nodeId; + } + + @Override + public boolean hasNext() throws Exception { + return !consumed; + } + + @Override + public IRawRecord<char[]> next() throws IOException, InterruptedException { + consumed = true; + CharArrayRecord record = new CharArrayRecord(); + record.reset(); + record.append(("{\"node\":\"" + nodeId + "\"}").toCharArray()); + record.endRecord(); + return record; + } + +} diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingRewriter.java new file mode 100644 index 0000000..2fab648 --- /dev/null +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/PingRewriter.java @@ -0,0 +1,43 @@ +/* + * 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.asterix.app.function; + +import org.apache.asterix.common.functions.FunctionConstants; +import org.apache.asterix.metadata.declared.FunctionDataSource; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext; +import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; +import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; + +public class PingRewriter extends FunctionRewriter { + + public static final FunctionIdentifier PING = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "ping", 0); + public static final PingRewriter INSTANCE = new PingRewriter(PING); + + private PingRewriter(FunctionIdentifier functionId) { + super(functionId); + } + + @Override + protected FunctionDataSource toDatasource(IOptimizationContext context, AbstractFunctionCallExpression f) + throws AlgebricksException { + return new PingDatasource(context.getComputationNodeDomain()); + } + +} diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java index c143a63..83ceec7 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/util/MetadataBuiltinFunctions.java @@ -21,6 +21,7 @@ import org.apache.asterix.app.function.DatasetResourcesRewriter; import org.apache.asterix.app.function.DatasetRewriter; import org.apache.asterix.app.function.FeedRewriter; +import org.apache.asterix.app.function.PingRewriter; import org.apache.asterix.app.function.StorageComponentsRewriter; import org.apache.asterix.om.functions.BuiltinFunctions; import org.apache.asterix.om.utils.RecordUtil; @@ -48,7 +49,11 @@ BuiltinFunctions.addUnnestFun(StorageComponentsRewriter.STORAGE_COMPONENTS, false); BuiltinFunctions.addDatasourceFunction(StorageComponentsRewriter.STORAGE_COMPONENTS, StorageComponentsRewriter.INSTANCE); - + // Ping function + BuiltinFunctions.addPrivateFunction(PingRewriter.PING, + (expression, env, mp) -> RecordUtil.FULLY_OPEN_RECORD_TYPE, true); + BuiltinFunctions.addUnnestFun(PingRewriter.PING, true); + BuiltinFunctions.addDatasourceFunction(PingRewriter.PING, PingRewriter.INSTANCE); } private MetadataBuiltinFunctions() { diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/ping/ping.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/ping/ping.1.query.sqlpp new file mode 100644 index 0000000..9f4f062 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/ping/ping.1.query.sqlpp @@ -0,0 +1,21 @@ +/* + * 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. + */ + +set `import-private-functions` `true`; +select value val from ping() val order by val.node; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/ping/ping.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/ping/ping.1.adm new file mode 100644 index 0000000..53d479d --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/ping/ping.1.adm @@ -0,0 +1,2 @@ +{ "node": "asterix_nc1" } +{ "node": "asterix_nc2" } diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml index a8f15ab..8817bc8 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -3678,6 +3678,11 @@ </compilation-unit> </test-case> <test-case FilePath="misc"> + <compilation-unit name="ping"> + <output-dir compare="Text">ping</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="misc"> <compilation-unit name="case_01"> <output-dir compare="Text">case_01</output-dir> </compilation-unit> -- To view, visit https://asterix-gerrit.ics.uci.edu/2764 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic077a11b61dec782756e2dede33ca8220893a2de Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: abdullah alamoudi <bamou...@gmail.com>