[ 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)