[
https://issues.apache.org/jira/browse/PHOENIX-1311?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15220569#comment-15220569
]
ASF GitHub Bot commented on PHOENIX-1311:
-----------------------------------------
Github user samarthjain commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/153#discussion_r58116856
--- Diff:
phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
---
@@ -3201,4 +3367,155 @@ private MetaDataMutationResult doDropFunction(long
clientTimeStamp, List<byte[]>
return new MetaDataMutationResult(MutationCode.FUNCTION_NOT_FOUND,
EnvironmentEdgeManager.currentTimeMillis(), null);
}
+
+ @Override
+ public void createSchema(RpcController controller, CreateSchemaRequest
request,
+ RpcCallback<MetaDataResponse> done) {
+ MetaDataResponse.Builder builder = MetaDataResponse.newBuilder();
+ String schemaName = null;
+ try {
+ List<Mutation> schemaMutations =
ProtobufUtil.getMutations(request);
+ schemaName = request.getSchemaName();
+ Mutation m =
MetaDataUtil.getPutOnlyTableHeaderRow(schemaMutations);
+
+ byte[] lockKey = m.getRow();
+ Region region = env.getRegion();
+ MetaDataMutationResult result =
checkSchemaKeyInRegion(lockKey, region);
+ if (result != null) {
+ done.run(MetaDataMutationResult.toProto(result));
+ return;
+ }
+ List<RowLock> locks = Lists.newArrayList();
+ long clientTimeStamp =
MetaDataUtil.getClientTimeStamp(schemaMutations);
+ try {
+ acquireLock(region, lockKey, locks);
+ // Get as of latest timestamp so we can detect if we have a
+ // newer function that already
+ // exists without making an additional query
+ ImmutableBytesPtr cacheKey = new
ImmutableBytesPtr(lockKey);
+ PSchema schema = loadSchema(env, lockKey, cacheKey,
clientTimeStamp, clientTimeStamp);
+ if (schema != null) {
+ if (schema.getTimeStamp() < clientTimeStamp) {
+
builder.setReturnCode(MetaDataProtos.MutationCode.SCHEMA_ALREADY_EXISTS);
+
builder.setMutationTime(EnvironmentEdgeManager.currentTimeMillis());
+ builder.setSchema(PSchema.toProto(schema));
+ done.run(builder.build());
+ return;
+ } else {
+
builder.setReturnCode(MetaDataProtos.MutationCode.NEWER_SCHEMA_FOUND);
+
builder.setMutationTime(EnvironmentEdgeManager.currentTimeMillis());
+ builder.setSchema(PSchema.toProto(schema));
+ done.run(builder.build());
+ return;
+ }
+ }
+ region.mutateRowsWithLocks(schemaMutations,
Collections.<byte[]> emptySet(), HConstants.NO_NONCE,
+ HConstants.NO_NONCE);
+
+ // Invalidate the cache - the next getTable call will add
it
+ // TODO: consider loading the table that was just created
here,
+ // patching up the parent table, and updating the cache
+ Cache<ImmutableBytesPtr, PMetaDataEntity> metaDataCache =
GlobalCache.getInstance(this.env)
+ .getMetaDataCache();
+ if (cacheKey != null) {
+ metaDataCache.invalidate(cacheKey);
+ }
+
+ // Get timeStamp from mutations - the above method sets it
if
+ // it's unset
+ long currentTimeStamp =
MetaDataUtil.getClientTimeStamp(schemaMutations);
+
builder.setReturnCode(MetaDataProtos.MutationCode.SCHEMA_NOT_FOUND);
+ builder.setMutationTime(currentTimeStamp);
+ done.run(builder.build());
+ return;
+ } finally {
+ region.releaseRowLocks(locks);
+ }
+ } catch (Throwable t) {
+ logger.error("createFunction failed", t);
--- End diff --
Change the message to:
"Creating the schema " + schemaName + " failed."
> HBase namespaces surfaced in phoenix
> ------------------------------------
>
> Key: PHOENIX-1311
> URL: https://issues.apache.org/jira/browse/PHOENIX-1311
> Project: Phoenix
> Issue Type: New Feature
> Reporter: nicolas maillard
> Assignee: Ankit Singhal
> Priority: Minor
> Fix For: 4.8.0
>
> Attachments: PHOENIX-1311.docx, PHOENIX-1311_v1.patch,
> PHOENIX-1311_v2.patch, PHOENIX-1311_wip.patch, PHOENIX-1311_wip_2.patch
>
>
> Hbase (HBASE-8015) has the concept of namespaces in the form of
> myNamespace:MyTable it would be great if Phoenix leveraged this feature to
> give a database like feature on top of the table.
> Maybe to stay close to Hbase it could also be a create DB:Table...
> or DB.Table which is a more standard annotation?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)