[
https://issues.apache.org/jira/browse/PHOENIX-2862?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15274353#comment-15274353
]
Ankit Singhal commented on PHOENIX-2862:
----------------------------------------
Yes [~jamestaylor], Actually I did the change at server side to restrict 4.7
client to connect if we see IS_SYSTEM_TABLE_MAPPED_TO_NAMESPACE is true at
server but under clientServerCompatibilityCheck.
{code}
@Override
- public void getVersion(RpcController controller, GetVersionRequest request,
- RpcCallback<GetVersionResponse> done) {
+ public void getVersion(RpcController controller, GetVersionRequest
request, RpcCallback<GetVersionResponse> done) {
GetVersionResponse.Builder builder = GetVersionResponse.newBuilder();
- // The first 3 bytes of the long is used to encoding the HBase version
as major.minor.patch.
- // The next 4 bytes of the value is used to encode the Phoenix version
as major.minor.patch.
- long version =
MetaDataUtil.encodeHBaseAndPhoenixVersions(this.env.getHBaseVersion());
-
- // The last byte is used to communicate whether or not mutable
secondary indexing
- // was configured properly.
- version =
- MetaDataUtil.encodeHasIndexWALCodec(version,
-
IndexManagementUtil.isWALEditCodecSet(this.env.getConfiguration()));
+ Configuration config = env.getConfiguration();
+ boolean isSystemTablesMapped =
SchemaUtil.isNamespaceMappingEnabled(PTableType.SYSTEM,
+ new ReadOnlyProps(config.iterator()));
+ if (isSystemTablesMapped
+ &&
PhoenixDatabaseMetaData.MIN_NAMESPACE_MAPPED_PHOENIX_VERSION >
request.getClientVersion()) {
+ logger.error("Old client is not compatible when" + " system tables
are upgraded to map to namespace");
+ ProtobufUtil.setControllerException(controller,
+ ServerUtil.createIOException(
+
SchemaUtil.getPhysicalHBaseTableName(PhoenixDatabaseMetaData.SYSTEM_CATALOG_NAME,
+ isSystemTablesMapped,
PTableType.SYSTEM).getString(),
+ new DoNotRetryIOException(
+ "Old client is not compatible when" + " system
tables are upgraded to map to namespace")));
+ }
+ long version = MetaDataUtil.encodeVersion(env.getHBaseVersion(),
config);
{code}
If you think , I can use your way to throw UNALLOWED_TABLE_MUTATION.
And, the client side changes are for 4.8 client only to confirm that property
for systemNamespaceMapping is consistent on client and server at the time of
upgrading or connecting.
> Do client server compatibility checks before upgrading system tables
> --------------------------------------------------------------------
>
> Key: PHOENIX-2862
> URL: https://issues.apache.org/jira/browse/PHOENIX-2862
> Project: Phoenix
> Issue Type: Sub-task
> Reporter: Ankit Singhal
> Assignee: Ankit Singhal
> Fix For: 4.8.0
>
> Attachments: PHOENIX-2862.patch
>
>
> currently , we allow upgrade of system tables to map to system namespace by
> enabling "phoenix.schema.mapSystemTablesToNamespace" config (conjuction with
> "phoenix.connection.isNamespaceMappingEnabled")
> but we need to ensure following things whenever client connects with above
> config:-
> 1. Server should be upgraded and check consistency of these properties
> between client and server.
> 2. If above property does not exists but system:catalog exists, we should not
> start creating system.catalog.
> 3. if old client connects, it should not create system.catalog again ignoring
> the upgrade and start using it.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)