[
https://issues.apache.org/jira/browse/PHOENIX-3254?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15530035#comment-15530035
]
ASF GitHub Bot commented on PHOENIX-3254:
-----------------------------------------
Github user JamesRTaylor commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/211#discussion_r80950387
--- Diff:
phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
---
@@ -1499,6 +1502,53 @@ public void createTable(RpcController controller,
CreateTableRequest request,
cell.getTimestamp(),
Type.codeToType(cell.getTypeByte()), bytes);
cells.add(viewConstantCell);
}
+ Short indexId = null;
+ if (request.hasAllocateIndexId() &&
request.getAllocateIndexId()) {
+ String tenantIdStr = tenantIdBytes.length == 0 ? null
: Bytes.toString(tenantIdBytes);
+ final Properties props = new Properties();
+ UpgradeUtil.doNotUpgradeOnFirstConnection(props);
+ try (PhoenixConnection connection =
DriverManager.getConnection(MetaDataUtil.getJdbcUrl(env),
props).unwrap(PhoenixConnection.class)){
+ PName physicalName = parentTable.getPhysicalName();
+ int nSequenceSaltBuckets =
connection.getQueryServices().getSequenceSaltBuckets();
+ SequenceKey key =
MetaDataUtil.getViewIndexSequenceKey(tenantIdStr, physicalName,
+ nSequenceSaltBuckets,
parentTable.isNamespaceMapped() );
+ // TODO Review Earlier sequence was created at
(SCN-1/LATEST_TIMESTAMP) and incremented at the client
max(SCN,dataTable.getTimestamp), but it seems we should
+ // use always LATEST_TIMESTAMP to avoid seeing
wrong sequence values by different connection having SCN
+ // or not.
+ long sequenceTimestamp = HConstants.LATEST_TIMESTAMP;
+ try {
+
connection.getQueryServices().createSequence(key.getTenantId(),
key.getSchemaName(), key.getSequenceName(),
--- End diff --
The RPCs are minimal here because of the way sequences are implemented. By
default, we cache 100 sequences and dole them out as needed. So there's only a
single RPC per 100 invocations of this.
> IndexId Sequence is incremented even if index exists already.
> -------------------------------------------------------------
>
> Key: PHOENIX-3254
> URL: https://issues.apache.org/jira/browse/PHOENIX-3254
> Project: Phoenix
> Issue Type: Bug
> Reporter: Ankit Singhal
> Assignee: Ankit Singhal
> Attachments: PHOENIX-3254.patch, PHOENIX-3254_wip.patch
>
>
> As we are incrementing sequence at the client even if we are not going to
> create a index (in case index already exists and user is using CREATE INDEX
> IF NOT EXISTS) or DDL failed in later stage(due to parent table not found or
> something).
> If this keeps on happening then user may reach the limit of Short.MAX_VALUE
> and TOO_MANY_INDEXES exception will be thrown if user tries to create a new
> index.
> To prevent, this we should increment sequences when we are about to create a
> index at server.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)