This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 372545f823ae20b1611872d122c35f1cf18a126f Author: Dmitry Lychagin <[email protected]> AuthorDate: Tue Feb 23 18:51:52 2021 -0800 [NO ISSUE][COMP] Prohibit statements in Metadata dataverse - user model changes: no - storage format changes: no - interface changes: no Details: - The following statements should not be allowed to operate on objects in the Metadata dataverse: - CREATE DATASET, TYPE, SYNONYM, FUNCTION, LIBRARY, ADAPTER, FEED, INGESTION POLICY - DROP DATASET, INDEX, TYPE - LOAD, UPSERT Change-Id: Iabb047db64b8f505c72d303036fd61df8ea37e97 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/10145 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Dmitry Lychagin <[email protected]> Reviewed-by: Ian Maxon <[email protected]> --- .../asterix/translator/AbstractLangTranslator.java | 232 +++++++++++++++++---- .../api/http/server/AbstractNCUdfServlet.java | 4 + .../asterix/api/http/server/NCUdfApiServlet.java | 1 - .../asterix/app/external/ExternalUDFLibrarian.java | 34 ++- .../exception_create_system_dataset.1.ddl.sqlpp | 21 ++ .../exception_create_system_feed.1.ddl.sqlpp | 26 +++ ...exception_create_system_feed_policy.1.ddl.sqlpp | 24 +++ .../exception_create_system_function.1.ddl.sqlpp | 22 ++ .../exception_create_system_synonym.1.ddl.sqlpp | 20 ++ .../exception_create_system_type.1.ddl.sqlpp | 22 ++ ...exception_declare_system_function.1.query.sqlpp | 26 +++ .../exception_drop_system_index.1.ddl.sqlpp | 20 ++ .../exception_drop_system_type.1.ddl.sqlpp | 20 ++ .../src/test/resources/metadata/testsuite.xml | 54 +++++ .../exception_create_system_library.1.lib.sqlpp | 19 ++ .../exception_create_system_adapter.0.ddl.sqlpp | 25 +++ .../exception_create_system_adapter.1.lib.sqlpp | 24 +++ .../exception_create_system_adapter.2.ddl.sqlpp | 25 +++ .../resources/runtimets/testsuite_it_sqlpp.xml | 12 ++ 19 files changed, 577 insertions(+), 54 deletions(-) diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java index 8777f66..58bdaca 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AbstractLangTranslator.java @@ -34,14 +34,26 @@ import org.apache.asterix.common.exceptions.AsterixException; import org.apache.asterix.common.exceptions.CompilationException; import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.common.functions.FunctionConstants; +import org.apache.asterix.common.functions.FunctionSignature; import org.apache.asterix.common.metadata.DataverseName; import org.apache.asterix.lang.common.base.Statement; +import org.apache.asterix.lang.common.statement.CreateAdapterStatement; import org.apache.asterix.lang.common.statement.CreateDataverseStatement; +import org.apache.asterix.lang.common.statement.CreateFeedStatement; +import org.apache.asterix.lang.common.statement.CreateFunctionStatement; +import org.apache.asterix.lang.common.statement.CreateLibraryStatement; +import org.apache.asterix.lang.common.statement.CreateSynonymStatement; import org.apache.asterix.lang.common.statement.DatasetDecl; import org.apache.asterix.lang.common.statement.DataverseDropStatement; import org.apache.asterix.lang.common.statement.DeleteStatement; import org.apache.asterix.lang.common.statement.DropDatasetStatement; +import org.apache.asterix.lang.common.statement.FunctionDecl; +import org.apache.asterix.lang.common.statement.IndexDropStatement; import org.apache.asterix.lang.common.statement.InsertStatement; +import org.apache.asterix.lang.common.statement.LoadStatement; +import org.apache.asterix.lang.common.statement.TypeDecl; +import org.apache.asterix.lang.common.statement.TypeDropStatement; +import org.apache.asterix.lang.common.statement.UpsertStatement; import org.apache.asterix.metadata.dataset.hints.DatasetHints; import org.apache.asterix.metadata.entities.Dataverse; import org.apache.asterix.metadata.utils.MetadataConstants; @@ -59,6 +71,14 @@ public abstract class AbstractLangTranslator { private static final Logger LOGGER = LogManager.getLogger(); + protected static final String INVALID_OPERATION_MESSAGE = "Invalid operation - %s"; + + protected static final String BAD_DATAVERSE_DML_MESSAGE = "%s operation is not permitted in dataverse %s"; + + protected static final String BAD_DATAVERSE_DDL_MESSAGE = "Cannot %s dataverse: %s"; + + protected static final String BAD_DATAVERSE_OBJECT_DDL_MESSAGE = "Cannot %s a %s belonging to the dataverse: %s"; + public void validateOperation(ICcApplicationContext appCtx, Dataverse defaultDataverse, Statement stmt) throws AlgebricksException { @@ -120,15 +140,36 @@ public abstract class AbstractLangTranslator { String message = null; DataverseName dataverseName = defaultDataverse != null ? defaultDataverse.getDataverseName() : null; switch (stmt.getKind()) { + case LOAD: + LoadStatement loadStmt = (LoadStatement) stmt; + if (loadStmt.getDataverseName() != null) { + dataverseName = loadStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_DML_MESSAGE, "Load", dataverseName); + } + break; + case INSERT: InsertStatement insertStmt = (InsertStatement) stmt; if (insertStmt.getDataverseName() != null) { dataverseName = insertStmt.getDataverseName(); } - invalidOperation = MetadataConstants.METADATA_DATAVERSE_NAME.equals(dataverseName); + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_DML_MESSAGE, "Insert", dataverseName); + } + break; + + case UPSERT: + UpsertStatement upsertStmt = (UpsertStatement) stmt; + if (upsertStmt.getDataverseName() != null) { + dataverseName = upsertStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); if (invalidOperation) { - message = "Insert operation is not permitted in dataverse " - + MetadataConstants.METADATA_DATAVERSE_NAME; + message = String.format(BAD_DATAVERSE_DML_MESSAGE, "Upsert", dataverseName); } break; @@ -137,10 +178,9 @@ public abstract class AbstractLangTranslator { if (deleteStmt.getDataverseName() != null) { dataverseName = deleteStmt.getDataverseName(); } - invalidOperation = MetadataConstants.METADATA_DATAVERSE_NAME.equals(dataverseName); + invalidOperation = isMetadataDataverse(dataverseName); if (invalidOperation) { - message = "Delete operation is not permitted in dataverse " - + MetadataConstants.METADATA_DATAVERSE_NAME; + message = String.format(BAD_DATAVERSE_DML_MESSAGE, "Delete", dataverseName); } break; @@ -150,57 +190,179 @@ public abstract class AbstractLangTranslator { invalidOperation = FunctionConstants.ASTERIX_DV.equals(dataverseName) || FunctionConstants.ALGEBRICKS_DV.equals(dataverseName); if (invalidOperation) { - message = "Cannot create dataverse: " + dataverseName; + message = String.format(BAD_DATAVERSE_DDL_MESSAGE, "create", dataverseName); } break; case DATAVERSE_DROP: DataverseDropStatement dvDropStmt = (DataverseDropStatement) stmt; dataverseName = dvDropStmt.getDataverseName(); - invalidOperation = MetadataConstants.METADATA_DATAVERSE_NAME.equals(dataverseName); + invalidOperation = isMetadataDataverse(dataverseName); if (invalidOperation) { - message = "Cannot drop dataverse: " + dataverseName; + message = String.format(BAD_DATAVERSE_DDL_MESSAGE, "drop", dataverseName); } break; - case DATASET_DROP: - DropDatasetStatement dropStmt = (DropDatasetStatement) stmt; - if (dropStmt.getDataverseName() != null) { - dataverseName = dropStmt.getDataverseName(); + case DATASET_DECL: + DatasetDecl dsCreateStmt = (DatasetDecl) stmt; + if (dsCreateStmt.getDataverse() != null) { + dataverseName = dsCreateStmt.getDataverse(); } - invalidOperation = MetadataConstants.METADATA_DATAVERSE_NAME.equals(dataverseName); + invalidOperation = isMetadataDataverse(dataverseName); if (invalidOperation) { - message = "Cannot drop a dataset belonging to the dataverse: " - + MetadataConstants.METADATA_DATAVERSE_NAME; + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "dataset", dataverseName); } - break; - case DATASET_DECL: - DatasetDecl datasetStmt = (DatasetDecl) stmt; - Map<String, String> hints = datasetStmt.getHints(); - if (hints != null && !hints.isEmpty()) { - StringBuilder errorMsgBuffer = new StringBuilder(); - for (Entry<String, String> hint : hints.entrySet()) { - Pair<Boolean, String> validationResult = - DatasetHints.validate(appCtx, hint.getKey(), hint.getValue()); - if (!validationResult.first) { - errorMsgBuffer.append("Dataset: ").append(datasetStmt.getName().getValue()) - .append(" error in processing hint: ").append(hint.getKey()).append(" ") - .append(validationResult.second); - errorMsgBuffer.append(" \n"); + if (!invalidOperation) { + Map<String, String> hints = dsCreateStmt.getHints(); + if (hints != null && !hints.isEmpty()) { + StringBuilder errorMsgBuffer = new StringBuilder(); + for (Entry<String, String> hint : hints.entrySet()) { + Pair<Boolean, String> validationResult = + DatasetHints.validate(appCtx, hint.getKey(), hint.getValue()); + if (!validationResult.first) { + errorMsgBuffer.append("Dataset: ").append(dsCreateStmt.getName().getValue()) + .append(" error in processing hint: ").append(hint.getKey()).append(" ") + .append(validationResult.second); + errorMsgBuffer.append(" \n"); + } + } + invalidOperation = errorMsgBuffer.length() > 0; + if (invalidOperation) { + message = errorMsgBuffer.toString(); } - } - invalidOperation = errorMsgBuffer.length() > 0; - if (invalidOperation) { - message = errorMsgBuffer.toString(); } } break; + + case DATASET_DROP: + DropDatasetStatement dsDropStmt = (DropDatasetStatement) stmt; + if (dsDropStmt.getDataverseName() != null) { + dataverseName = dsDropStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "drop", "dataset", dataverseName); + } + break; + + case INDEX_DROP: + IndexDropStatement idxDropStmt = (IndexDropStatement) stmt; + if (idxDropStmt.getDataverseName() != null) { + dataverseName = idxDropStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "drop", "index", dataverseName); + } + break; + + case TYPE_DECL: + TypeDecl typeCreateStmt = (TypeDecl) stmt; + if (typeCreateStmt.getDataverseName() != null) { + dataverseName = typeCreateStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "type", dataverseName); + } + break; + + case TYPE_DROP: + TypeDropStatement typeDropStmt = (TypeDropStatement) stmt; + if (typeDropStmt.getDataverseName() != null) { + dataverseName = typeDropStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "drop", "type", dataverseName); + } + break; + + case CREATE_SYNONYM: + CreateSynonymStatement synCreateStmt = (CreateSynonymStatement) stmt; + if (synCreateStmt.getDataverseName() != null) { + dataverseName = synCreateStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "synonym", dataverseName); + } + break; + + case FUNCTION_DECL: + FunctionDecl fnDeclStmt = (FunctionDecl) stmt; + FunctionSignature fnDeclSignature = fnDeclStmt.getSignature(); + if (fnDeclSignature.getDataverseName() != null) { + dataverseName = fnDeclSignature.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "declare", "function", dataverseName); + } + break; + + case CREATE_FUNCTION: + CreateFunctionStatement fnCreateStmt = (CreateFunctionStatement) stmt; + FunctionSignature fnCreateSignature = fnCreateStmt.getFunctionSignature(); + if (fnCreateSignature.getDataverseName() != null) { + dataverseName = fnCreateSignature.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "function", dataverseName); + } + break; + + case CREATE_LIBRARY: + CreateLibraryStatement libCreateStmt = (CreateLibraryStatement) stmt; + if (libCreateStmt.getDataverseName() != null) { + dataverseName = libCreateStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "library", dataverseName); + } + break; + + case CREATE_ADAPTER: + CreateAdapterStatement adCreateStmt = (CreateAdapterStatement) stmt; + if (adCreateStmt.getDataverseName() != null) { + dataverseName = adCreateStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "adapter", dataverseName); + } + break; + + case CREATE_FEED: + CreateFeedStatement feedCreateStmt = (CreateFeedStatement) stmt; + if (feedCreateStmt.getDataverseName() != null) { + dataverseName = feedCreateStmt.getDataverseName(); + } + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "feed", dataverseName); + } + break; + + case CREATE_FEED_POLICY: + invalidOperation = isMetadataDataverse(dataverseName); + if (invalidOperation) { + message = String.format(BAD_DATAVERSE_OBJECT_DDL_MESSAGE, "create", "ingestion policy", + dataverseName); + } + break; } if (invalidOperation) { throw new CompilationException(ErrorCode.COMPILATION_ERROR, stmt.getSourceLocation(), - "Invalid operation - " + message); + String.format(INVALID_OPERATION_MESSAGE, message)); } } + + protected static boolean isMetadataDataverse(DataverseName dataverseName) { + return MetadataConstants.METADATA_DATAVERSE_NAME.equals(dataverseName); + } } diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/AbstractNCUdfServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/AbstractNCUdfServlet.java index a952ffb..54e972e 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/AbstractNCUdfServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/AbstractNCUdfServlet.java @@ -39,6 +39,7 @@ import org.apache.asterix.common.library.LibraryDescriptor; import org.apache.asterix.common.metadata.DataverseName; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.common.utils.Pair; import org.apache.hyracks.api.application.INCServiceContext; import org.apache.hyracks.api.client.IHyracksClientConnection; @@ -141,6 +142,9 @@ public abstract class AbstractNCUdfServlet extends AbstractServlet { if (IFormattedException.matchesAny(e, ErrorCode.UNKNOWN_DATAVERSE, ErrorCode.UNKNOWN_LIBRARY)) { return HttpResponseStatus.NOT_FOUND; } + if (e instanceof AlgebricksException) { + return HttpResponseStatus.BAD_REQUEST; + } return HttpResponseStatus.INTERNAL_SERVER_ERROR; } } diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java index fc08f49..0645870 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCUdfApiServlet.java @@ -146,7 +146,6 @@ public class NCUdfApiServlet extends AbstractNCUdfServlet { try { ncMb.sendMessageToPrimaryCC(requestMessage); responseMsg = (InternalRequestResponse) responseFuture.get(120000, TimeUnit.MILLISECONDS); - } finally { ncMb.deregisterMessageFuture(responseFuture.getFutureId()); } diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/external/ExternalUDFLibrarian.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/external/ExternalUDFLibrarian.java index c2b576a..81e35a0 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/external/ExternalUDFLibrarian.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/external/ExternalUDFLibrarian.java @@ -55,41 +55,40 @@ public class ExternalUDFLibrarian implements IExternalUDFLibrarian { @Override public void install(URI path, String libPath, Pair<String, String> credentials) throws Exception { - HttpHost h = new HttpHost(path.getHost(), path.getPort(), "http"); + HttpClientContext hcCtx = createHttpClientContext(path, credentials); HttpPost post = new HttpPost(path); - CredentialsProvider cp = new BasicCredentialsProvider(); - cp.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(credentials.first, credentials.second)); - HttpClientContext hcCtx = HttpClientContext.create(); - hcCtx.setCredentialsProvider(cp); - AuthCache ac = new BasicAuthCache(); - ac.put(h, new BasicScheme()); - hcCtx.setAuthCache(ac); File lib = new File(libPath); HttpEntity file = MultipartEntityBuilder.create().setMode(HttpMultipartMode.STRICT) .addBinaryBody("lib", lib, ContentType.DEFAULT_BINARY, lib.getName()).build(); post.setEntity(file); HttpResponse response = hc.execute(post, hcCtx); - response.getEntity().consumeContent(); - if (response.getStatusLine().getStatusCode() != 200) { - throw new AsterixException(response.getStatusLine().toString()); - } + handleResponse(response); } @Override public void uninstall(URI path, Pair<String, String> credentials) throws IOException, AsterixException { + HttpClientContext hcCtx = createHttpClientContext(path, credentials); + HttpDelete del = new HttpDelete(path); + HttpResponse response = hc.execute(del, hcCtx); + handleResponse(response); + } + + private HttpClientContext createHttpClientContext(URI path, Pair<String, String> credentials) { + HttpClientContext hcCtx = HttpClientContext.create(); + HttpHost h = new HttpHost(path.getHost(), path.getPort(), "http"); CredentialsProvider cp = new BasicCredentialsProvider(); cp.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(credentials.first, credentials.second)); - HttpClientContext hcCtx = HttpClientContext.create(); hcCtx.setCredentialsProvider(cp); - HttpHost h = new HttpHost(path.getHost(), path.getPort(), "http"); AuthCache ac = new BasicAuthCache(); ac.put(h, new BasicScheme()); hcCtx.setAuthCache(ac); - HttpDelete del = new HttpDelete(path); - HttpResponse response = hc.execute(del, hcCtx); + return hcCtx; + } + + private void handleResponse(HttpResponse response) throws IOException, AsterixException { String resp = null; int respCode = response.getStatusLine().getStatusCode(); - if (respCode == 500) { + if (respCode == 500 || respCode == 400) { resp = IOUtils.toString(response.getEntity().getContent()); } response.getEntity().consumeContent(); @@ -100,5 +99,4 @@ public class ExternalUDFLibrarian implements IExternalUDFLibrarian { throw new AsterixException(resp); } } - } diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_dataset/exception_create_system_dataset.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_dataset/exception_create_system_dataset.1.ddl.sqlpp new file mode 100644 index 0000000..3b186dd --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_dataset/exception_create_system_dataset.1.ddl.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. + */ + +create dataset Metadata.NewMetaDataset(id uuid not unknown) + open type primary key id autogenerated; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_feed/exception_create_system_feed.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_feed/exception_create_system_feed.1.ddl.sqlpp new file mode 100644 index 0000000..5b0ffa7 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_feed/exception_create_system_feed.1.ddl.sqlpp @@ -0,0 +1,26 @@ +/* + * 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. + */ + +create feed Metadata.NewMetaFeed with { + "adapter-name" : "http_adapter", + "addresses" : "asterix_nc2:10002,asterix_nc1:10001", + "address-type" : "NC", + "type-name" : "DatasetRecordType", + "format" : "adm" +}; diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_feed_policy/exception_create_system_feed_policy.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_feed_policy/exception_create_system_feed_policy.1.ddl.sqlpp new file mode 100644 index 0000000..b9709cb --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_feed_policy/exception_create_system_feed_policy.1.ddl.sqlpp @@ -0,0 +1,24 @@ +/* + * 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. + */ + +use Metadata; + +create ingestion policy NewMetaPolicy + from path 'data/feed-policy/policy.properties' + definition 'someString'; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_function/exception_create_system_function.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_function/exception_create_system_function.1.ddl.sqlpp new file mode 100644 index 0000000..196870c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_function/exception_create_system_function.1.ddl.sqlpp @@ -0,0 +1,22 @@ +/* + * 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. + */ + +create function Metadata.MyMetaFunction() { + 1 +}; diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_synonym/exception_create_system_synonym.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_synonym/exception_create_system_synonym.1.ddl.sqlpp new file mode 100644 index 0000000..0e6f7ed --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_synonym/exception_create_system_synonym.1.ddl.sqlpp @@ -0,0 +1,20 @@ +/* + * 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. + */ + +create synonym Metadata.NewMetaSynonym for Metadata.`Dataset`; diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_type/exception_create_system_type.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_type/exception_create_system_type.1.ddl.sqlpp new file mode 100644 index 0000000..1222af6 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_create_system_type/exception_create_system_type.1.ddl.sqlpp @@ -0,0 +1,22 @@ +/* + * 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. + */ + +create type Metadata.NewMetaType as open { + id : string +}; diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_declare_system_function/exception_declare_system_function.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_declare_system_function/exception_declare_system_function.1.query.sqlpp new file mode 100644 index 0000000..fe3f250 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_declare_system_function/exception_declare_system_function.1.query.sqlpp @@ -0,0 +1,26 @@ +/* + * 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. + */ + +use Metadata; + +declare function MyMetaFunction() { + 1 +}; + +MyMetaFunction(); diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_system_index/exception_drop_system_index.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_system_index/exception_drop_system_index.1.ddl.sqlpp new file mode 100644 index 0000000..02d32c9 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_system_index/exception_drop_system_index.1.ddl.sqlpp @@ -0,0 +1,20 @@ +/* + * 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. + */ + +drop index Metadata.`Dataset`.`Dataset`; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_system_type/exception_drop_system_type.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_system_type/exception_drop_system_type.1.ddl.sqlpp new file mode 100644 index 0000000..e109d56 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_system_type/exception_drop_system_type.1.ddl.sqlpp @@ -0,0 +1,20 @@ +/* + * 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. + */ + +drop type Metadata.DatasetRecordType; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml index 62db526..8af4c67 100644 --- a/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml +++ b/asterixdb/asterix-app/src/test/resources/metadata/testsuite.xml @@ -327,6 +327,48 @@ </test-group> <test-group name="exception"> <test-case FilePath="exception"> + <compilation-unit name="exception_create_system_dataset"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create a dataset belonging to the dataverse: Metadata (in line 20, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> + <compilation-unit name="exception_create_system_feed"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create a feed belonging to the dataverse: Metadata (in line 20, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> + <compilation-unit name="exception_create_system_feed_policy"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create a ingestion policy belonging to the dataverse: Metadata (in line 22, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> + <compilation-unit name="exception_create_system_function"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create a function belonging to the dataverse: Metadata (in line 20, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> + <compilation-unit name="exception_create_system_synonym"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create a synonym belonging to the dataverse: Metadata (in line 20, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> + <compilation-unit name="exception_create_system_type"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create a type belonging to the dataverse: Metadata (in line 20, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> + <compilation-unit name="exception_declare_system_function"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot declare a function belonging to the dataverse: Metadata (in line 22, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> <compilation-unit name="exception_drop_dataset"> <output-dir compare="Text">none</output-dir> <expected-error>ASX1050: Cannot find dataset with name UnknownDataset in dataverse Default (in line 19, at column 1)</expected-error> @@ -351,6 +393,12 @@ </compilation-unit> </test-case> <test-case FilePath="exception"> + <compilation-unit name="exception_drop_system_index"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot drop a index belonging to the dataverse: Metadata (in line 20, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> <compilation-unit name="exception_drop_nodegroup"> <output-dir compare="Text">none</output-dir> <expected-error>ASX1080: Cannot find node group with name UnknownNodeGroup (in line 19, at column 1)</expected-error> @@ -363,6 +411,12 @@ </compilation-unit> </test-case> <test-case FilePath="exception"> + <compilation-unit name="exception_drop_system_type"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot drop a type belonging to the dataverse: Metadata (in line 20, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="exception"> <compilation-unit name="issue_239_drop_system_dataset_1"> <output-dir compare="Text">none</output-dir> <expected-error>ASX1079: Compilation error: Invalid operation - Cannot drop a dataset belonging to the dataverse: Metadata (in line 26, at column 1)</expected-error> diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/exception_create_system_library/exception_create_system_library.1.lib.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/exception_create_system_library/exception_create_system_library.1.lib.sqlpp new file mode 100644 index 0000000..ac3d3d0 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/exception_create_system_library/exception_create_system_library.1.lib.sqlpp @@ -0,0 +1,19 @@ +/* + * 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. + */ +install Metadata testlib admin admin target/data/externallib/asterix-external-data-testlib.zip diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.0.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.0.ddl.sqlpp new file mode 100644 index 0000000..fd5eb07 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.0.ddl.sqlpp @@ -0,0 +1,25 @@ +/* + * 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. + */ +/* + * Description : Cannot create adapter in Metadata dataverse + * Expected Res : Success + */ + +drop dataverse externallibtest if exists; +create dataverse externallibtest; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.1.lib.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.1.lib.sqlpp new file mode 100644 index 0000000..45cdfd1 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.1.lib.sqlpp @@ -0,0 +1,24 @@ +/* + * 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. + */ +/* + * Description : Cannot create adapter in Metadata dataverse + * Expected Res : Success + */ + +install externallibtest testlib admin admin target/data/externallib/asterix-external-data-testlib.zip \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.2.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.2.ddl.sqlpp new file mode 100644 index 0000000..7fb6235 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/feeds/exception_create_system_adapter/exception_create_system_adapter.2.ddl.sqlpp @@ -0,0 +1,25 @@ +/* + * 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. + */ +/* + * Description : Cannot create adapter in Metadata dataverse + * Expected Res : Success + */ + +create adapter Metadata.NewMetaAdapter + as "org.apache.asterix.external.library.adapter.TestTypedAdapterFactory" at externallibtest.testlib; diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml index cf5b1a7..954252c 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml @@ -35,6 +35,12 @@ </compilation-unit> </test-case> <test-case FilePath="external-library"> + <compilation-unit name="exception_create_system_library"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create a library belonging to the dataverse: Metadata</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="external-library"> <compilation-unit name="type_validation"> <output-dir compare="Text">type_validation</output-dir> </compilation-unit> @@ -104,6 +110,12 @@ </test-group> <test-group name="feeds"> <test-case FilePath="feeds"> + <compilation-unit name="exception_create_system_adapter"> + <output-dir compare="Text">none</output-dir> + <expected-error>ASX1079: Compilation error: Invalid operation - Cannot create a adapter belonging to the dataverse: Metadata (in line 24, at column 1)</expected-error> + </compilation-unit> + </test-case> + <test-case FilePath="feeds"> <compilation-unit name="feed-with-external-function"> <output-dir compare="Text">feed-with-external-function</output-dir> </compilation-unit>
