HBASE-20356 Make skipping protoc possible
authorMike Drob <mdrob@apache.org>
Thu, 12 Apr 2018 02:25:04 +0000 (21:25 -0500)
committerMike Drob <mdrob@apache.org>
Thu, 12 Apr 2018 18:31:54 +0000 (13:31 -0500)
dev-support/hbase-personality.sh
hbase-protocol-shaded/pom.xml
hbase-protocol/pom.xml
src/main/asciidoc/_chapters/developer.adoc

index 90786f2..3507a1d 100755 (executable)
@@ -554,7 +554,7 @@ function hbaseprotoc_rebuild
   # Need to run 'install' instead of 'compile' because shading plugin
   # is hooked-up to 'install'; else hbase-protocol-shaded is left with
   # half of its process done.
-  modules_workers patch hbaseprotoc install -DskipTests -Pcompile-protobuf -X -DHBasePatchProcess
+  modules_workers patch hbaseprotoc install -DskipTests -X -DHBasePatchProcess
 
   # shellcheck disable=SC2153
   until [[ $i -eq "${#MODULE[@]}" ]]; do
index 021e424..25443e1 100644 (file)
         <version>1.5.3</version>
         <executions>
           <execution>
-            <phase>generate-sources</phase>
+            <phase>process-sources</phase>
             <goals>
               <goal>replace</goal>
             </goals>
             <includes>
                 <include>**/*.java</include>
             </includes>
+            <!-- Ignore errors when missing files, because it means this build
+                 was run with -Dprotoc.skip and there is no -Dreplacer.skip -->
+            <ignoreErrors>true</ignoreErrors>
             <replacements>
               <replacement>
                 <token>([^\.])com.google.protobuf</token>
index e6d546e..bfe2588 100644 (file)
@@ -81,7 +81,7 @@
         <version>1.5.3</version>
         <executions>
           <execution>
-            <phase>generate-sources</phase>
+            <phase>process-sources</phase>
             <goals>
               <goal>replace</goal>
             </goals>
@@ -92,6 +92,9 @@
             <includes>
                 <include>**/*.java</include>
             </includes>
+            <!-- Ignore errors when missing files, because it means this build
+                 was run with -Dprotoc.skip and there is no -Dreplacer.skip -->
+            <ignoreErrors>true</ignoreErrors>
             <replacements>
               <replacement>
                 <token>(public)(\W+static)?(\W+final)?(\W+class)</token>
index 48dc79e..9d9f564 100644 (file)
@@ -415,22 +415,40 @@ use so we can freely change versions without upsetting any downstream project us
 
 The protobuf files are located in _hbase-protocol/src/main/protobuf_.
 For the change to be effective, you will need to regenerate the classes.
-You can use maven profile `compile-protobuf` to do this.
 
 [source,bourne]
 ----
-mvn compile -Pcompile-protobuf
+mvn package -pl hbase-protocol -am
 ----
 
-You may also want to define `protoc.path` for the protoc binary, using the following command:
+Similarly, protobuf definitions for internal use are located in the _hbase-protocol-shaded_ module.
 
 [source,bourne]
 ----
+mvn package -pl hbase-protocol-shaded -am
+----
+
+Typically, protobuf code generation is done using the native `protoc` binary. In our build we use a maven plugin for
+convenience; however, the plugin may not be able to retrieve appropriate binaries for all platforms. If you find yourself
+on a platform where protoc fails, you will have to compile protoc from source, and run it independent of our maven build.
+You can disable the inline code generation by specifying `-Dprotoc.skip` in your maven arguments, allowing your build to proceed further.
 
-mvn compile -Pcompile-protobuf -Dprotoc.path=/opt/local/bin/protoc
+A similar failure relates to the stock CentOS 6 docker image providing a too old version of glibc for the version of protoc that we use.
+In this case, you would have to install glibc 2.14 and protoc 3.5.1 manually, then execute something like:
+
+[source,bourne]
 ----
+cd hbase-protocol-shaded
+LD_LIBRARY_PATH=/opt/glibc-2.14/lib protoc \
+  --proto_path=src/main/protobuf \
+  --java_out=target/generated-sources/protobuf/java \
+  src/main/protobuf/*.proto
+----
+
+[NOTE]
+If you need to manually generate your protobuf files, you should not use `clean` in subsequent maven calls, as that will delete the newly generated files.
 
-Read the _hbase-protocol/README.txt_ for more details.
+Read the _hbase-protocol/README.txt_ for more details
 
 [[build.thrift]]
 ==== Build Thrift