This patch rewrites incorrectly serialized table descriptors and states from HBASE-26021 into PBs prior to the incompatible change. The patch does this as a part of the active HMaster bootstrap. This approach is _not_ fool proof as it does not handle all the edge cases and may break certain rolling upgrade semantics. However it does provide a way out for tables created with 1.7.0 PB definitions and an upgrade path for 1.7.1. Easiest way is to shutdown the 1.7.0 cluster, reboot with 1.7.1 binaries and everything should work cleanly. However, rolling upgrade could potentially be broken as 1.7.0 client may not be compatible with 1.7.1 server. As noted in the jira, it is not possible that any one upgraded to 1.7.0 yet because they will run into HBASE-26021, however new clusters may have been created with 1.7.0 and hence they need an upgrade path. Tested locally: - Created a mix of enabled/disabled tables created with 1.7.0 - Upgraded the cluster without this patch, noticed deserialization errors - Upgraded the cluster with patch and table metadata has been re-serialized in correct format and table states are preserved. Signed-off-by: Reid Chan <reidchan@apache.org>
281 lines
11 KiB
XML
281 lines
11 KiB
XML
<?xml version="1.0"?>
|
|
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
<!--
|
|
/**
|
|
* 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.
|
|
*/
|
|
-->
|
|
<modelVersion>4.0.0</modelVersion>
|
|
<parent>
|
|
<artifactId>hbase</artifactId>
|
|
<groupId>org.apache.hbase</groupId>
|
|
<version>1.7.1-SNAPSHOT</version>
|
|
<relativePath>..</relativePath>
|
|
</parent>
|
|
|
|
<artifactId>hbase-protocol</artifactId>
|
|
<name>Apache HBase - Protocol</name>
|
|
<description>Protobuf protocol classes used by HBase to communicate.</description>
|
|
|
|
<properties>
|
|
<maven.javadoc.skip>true</maven.javadoc.skip>
|
|
</properties>
|
|
|
|
<build>
|
|
<plugins>
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-site-plugin</artifactId>
|
|
<configuration>
|
|
<skip>true</skip>
|
|
</configuration>
|
|
</plugin>
|
|
<!-- Make a jar and put the sources in the jar -->
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-source-plugin</artifactId>
|
|
</plugin>
|
|
<plugin>
|
|
<!--Make it so assembly:single does nothing in here-->
|
|
<artifactId>maven-assembly-plugin</artifactId>
|
|
<configuration>
|
|
<skipAssembly>true</skipAssembly>
|
|
</configuration>
|
|
</plugin>
|
|
<plugin>
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
<!-- Always skip the second part executions, since we only run simple unit tests in this module -->
|
|
<executions>
|
|
<execution>
|
|
<id>secondPartTestsExecution</id>
|
|
<phase>test</phase>
|
|
<goals>
|
|
<goal>test</goal>
|
|
</goals>
|
|
<configuration>
|
|
<skip>true</skip>
|
|
</configuration>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
</plugins>
|
|
<pluginManagement>
|
|
<plugins>
|
|
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
|
|
<plugin>
|
|
<groupId>org.eclipse.m2e</groupId>
|
|
<artifactId>lifecycle-mapping</artifactId>
|
|
<version>1.0.0</version>
|
|
<configuration>
|
|
<lifecycleMappingMetadata>
|
|
<pluginExecutions>
|
|
<pluginExecution>
|
|
<pluginExecutionFilter>
|
|
<groupId>org.apache.hadoop</groupId>
|
|
<artifactId>hadoop-maven-plugins</artifactId>
|
|
<versionRange>[2.0.5-alpha,)</versionRange>
|
|
<goals>
|
|
<goal>protoc</goal>
|
|
</goals>
|
|
</pluginExecutionFilter>
|
|
<action>
|
|
<ignore></ignore>
|
|
</action>
|
|
</pluginExecution>
|
|
</pluginExecutions>
|
|
</lifecycleMappingMetadata>
|
|
</configuration>
|
|
</plugin>
|
|
</plugins>
|
|
</pluginManagement>
|
|
</build>
|
|
|
|
<dependencies>
|
|
<!-- Intra-project dependencies -->
|
|
<dependency>
|
|
<groupId>org.apache.hbase</groupId>
|
|
<artifactId>hbase-annotations</artifactId>
|
|
<exclusions>
|
|
<exclusion>
|
|
<groupId>jdk.tools</groupId>
|
|
<artifactId>jdk.tools</artifactId>
|
|
</exclusion>
|
|
</exclusions>
|
|
</dependency>
|
|
<!-- General dependencies -->
|
|
<dependency>
|
|
<groupId>com.google.protobuf</groupId>
|
|
<artifactId>protobuf-java</artifactId>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>commons-logging</groupId>
|
|
<artifactId>commons-logging</artifactId>
|
|
</dependency>
|
|
</dependencies>
|
|
|
|
<profiles>
|
|
<!-- Skip the tests in this module -->
|
|
<profile>
|
|
<id>skip-rpc-tests</id>
|
|
<activation>
|
|
<property>
|
|
<name>skip-rpc-tests</name>
|
|
</property>
|
|
</activation>
|
|
<properties>
|
|
<surefire.skipFirstPart>true</surefire.skipFirstPart>
|
|
</properties>
|
|
</profile>
|
|
<profile>
|
|
<id>compile-protobuf</id>
|
|
<activation>
|
|
<property>
|
|
<name>compile-protobuf</name>
|
|
</property>
|
|
</activation>
|
|
<build>
|
|
<plugins>
|
|
<plugin>
|
|
<groupId>org.apache.hadoop</groupId>
|
|
<artifactId>hadoop-maven-plugins</artifactId>
|
|
<executions>
|
|
<execution>
|
|
<id>compile-protoc</id>
|
|
<phase>generate-sources</phase>
|
|
<goals>
|
|
<goal>protoc</goal>
|
|
</goals>
|
|
<configuration>
|
|
<imports>
|
|
<param>${basedir}/src/main/protobuf</param>
|
|
</imports>
|
|
<source>
|
|
<directory>${basedir}/src/main/protobuf</directory>
|
|
<!-- Unfortunately, Hadoop plugin does not support *.proto.
|
|
We have to individually list every proto file here -->
|
|
<includes>
|
|
<include>AccessControl.proto</include>
|
|
<include>Admin.proto</include>
|
|
<include>Aggregate.proto</include>
|
|
<include>Authentication.proto</include>
|
|
<include>Cell.proto</include>
|
|
<include>Client.proto</include>
|
|
<include>ClusterId.proto</include>
|
|
<include>ClusterStatus.proto</include>
|
|
<include>Comparator.proto</include>
|
|
<include>Encryption.proto</include>
|
|
<include>ErrorHandling.proto</include>
|
|
<include>FS.proto</include>
|
|
<include>Filter.proto</include>
|
|
<include>HBase.proto</include>
|
|
<include>HBase-1.7-TableSerialization-Compatibility.proto</include>
|
|
<include>HFile.proto</include>
|
|
<include>LoadBalancer.proto</include>
|
|
<include>MapReduce.proto</include>
|
|
<include>Master.proto</include>
|
|
<include>MasterProcedure.proto</include>
|
|
<include>MultiRowMutation.proto</include>
|
|
<include>Procedure.proto</include>
|
|
<include>Quota.proto</include>
|
|
<include>RPC.proto</include>
|
|
<include>RecentLogs.proto</include>
|
|
<include>RegionNormalizer.proto</include>
|
|
<include>RegionServerStatus.proto</include>
|
|
<include>RowProcessor.proto</include>
|
|
<include>RSGroup.proto</include>
|
|
<include>RSGroupAdmin.proto</include>
|
|
<include>SecureBulkLoad.proto</include>
|
|
<include>ShellExecEndpoint.proto</include>
|
|
<include>Snapshot.proto</include>
|
|
<include>SnapshotCleanup.proto</include>
|
|
<include>Table.proto</include>
|
|
<include>TooSlowLog.proto</include>
|
|
<include>Tracing.proto</include>
|
|
<include>VisibilityLabels.proto</include>
|
|
<include>WAL.proto</include>
|
|
<include>ZooKeeper.proto</include>
|
|
</includes>
|
|
</source>
|
|
<!--<output>${project.build.directory}/generated-sources/java</output>-->
|
|
<output>${basedir}/src/main/java/</output>
|
|
</configuration>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
</plugins>
|
|
</build>
|
|
</profile>
|
|
|
|
<profile>
|
|
<id>errorProne</id>
|
|
<activation>
|
|
<activeByDefault>false</activeByDefault>
|
|
</activation>
|
|
<build>
|
|
<plugins>
|
|
<!-- Turn on error-prone -->
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-compiler-plugin</artifactId>
|
|
<configuration>
|
|
<compilerId>javac-with-errorprone</compilerId>
|
|
<forceJavacCompilerUse>true</forceJavacCompilerUse>
|
|
<showWarnings>true</showWarnings>
|
|
<compilerArgs>
|
|
<arg>-XepDisableWarningsInGeneratedCode</arg>
|
|
<arg>-Xep:FallThrough:OFF</arg> <!-- already in findbugs -->
|
|
</compilerArgs>
|
|
<annotationProcessorPaths>
|
|
<path>
|
|
<groupId>org.apache.hbase</groupId>
|
|
<artifactId>hbase-error-prone</artifactId>
|
|
<version>${project.version}</version>
|
|
</path>
|
|
</annotationProcessorPaths>
|
|
</configuration>
|
|
<dependencies>
|
|
<dependency>
|
|
<groupId>org.apache.hbase</groupId>
|
|
<artifactId>hbase-error-prone</artifactId>
|
|
<version>${project.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.codehaus.plexus</groupId>
|
|
<artifactId>plexus-compiler-javac-errorprone</artifactId>
|
|
<version>${plexus.errorprone.javac.version}</version>
|
|
</dependency>
|
|
<!-- override plexus-compiler-javac-errorprone's dependency on
|
|
Error Prone with the latest version -->
|
|
<dependency>
|
|
<groupId>com.google.errorprone</groupId>
|
|
<artifactId>error_prone_core</artifactId>
|
|
<version>${error-prone.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.apache.hbase</groupId>
|
|
<artifactId>hbase-error-prone</artifactId>
|
|
<version>${project.version}</version>
|
|
</dependency>
|
|
</dependencies>
|
|
</plugin>
|
|
</plugins>
|
|
</build>
|
|
</profile>
|
|
|
|
</profiles>
|
|
</project>
|