PHOENIX-1703 Fail connection when server minor version is less than client
minor version
Conflicts:
phoenix-core/src/main/java/org/apache/phoenix/util/MetaDataUtil.java
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/7ccd2542
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/7ccd2542
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/7ccd2542
Branch: refs/heads/3.0
Commit: 7ccd2542cd16f8c10aada5e407f1745819d06a03
Parents: decb89d
Author: James Taylor <[email protected]>
Authored: Thu Mar 19 22:23:20 2015 -0700
Committer: James Taylor <[email protected]>
Committed: Sat Mar 21 23:05:31 2015 -0700
----------------------------------------------------------------------
.../org/apache/phoenix/util/MetaDataUtil.java | 14 ++++++++++----
.../org/apache/phoenix/util/MetaDataUtilTest.java | 18 ++++++++++--------
2 files changed, 20 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/7ccd2542/phoenix-core/src/main/java/org/apache/phoenix/util/MetaDataUtil.java
----------------------------------------------------------------------
diff --git
a/phoenix-core/src/main/java/org/apache/phoenix/util/MetaDataUtil.java
b/phoenix-core/src/main/java/org/apache/phoenix/util/MetaDataUtil.java
index 608bfc2..b1ecc47 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/MetaDataUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/MetaDataUtil.java
@@ -65,21 +65,22 @@ public class MetaDataUtil {
public static final byte[] VIEW_INDEX_SEQUENCE_PREFIX_BYTES =
Bytes.toBytes(VIEW_INDEX_SEQUENCE_PREFIX);
public static final String VIEW_INDEX_ID_COLUMN_NAME = "_INDEX_ID";
- public static boolean areClientAndServerCompatible(long version) {
+ public static boolean areClientAndServerCompatible(long
serverHBaseAndPhoenixVersion) {
// As of 3.0, we allow a client and server to differ for the minor
version.
// Care has to be taken to upgrade the server before the client, as
otherwise
// the client may call expressions that don't yet exist on the server.
// Differing by the patch version has always been allowed.
// Only differing by the major version is not allowed.
- return
areClientAndServerCompatible(MetaDataUtil.decodePhoenixVersion(version),
MetaDataProtocol.PHOENIX_MAJOR_VERSION);
+ return
areClientAndServerCompatible(MetaDataUtil.decodePhoenixVersion(serverHBaseAndPhoenixVersion),
MetaDataProtocol.PHOENIX_MAJOR_VERSION,
MetaDataProtocol.PHOENIX_MINOR_VERSION);
}
// Default scope for testing
- static boolean areClientAndServerCompatible(int version, int pMajor) {
+ static boolean areClientAndServerCompatible(int serverVersion, int
clientMajorVersion, int clientMinorVersion) {
// A server and client with the same major and minor version number
must be compatible.
// So it's important that we roll the PHOENIX_MAJOR_VERSION or
PHOENIX_MINOR_VERSION
// when we make an incompatible change.
- return VersionUtil.encodeMaxMinorVersion(pMajor) >= version &&
VersionUtil.encodeMinMinorVersion(pMajor) <= version;
+ return VersionUtil.encodeMinPatchVersion(clientMajorVersion,
clientMinorVersion) <= serverVersion && // Minor major and minor cannot be
ahead of server
+ VersionUtil.encodeMaxMinorVersion(clientMajorVersion) >=
serverVersion; // Major version must at least be up to server version
}
// Given the encoded integer representing the phoenix version in the
encoded version value.
@@ -115,6 +116,11 @@ public class MetaDataUtil {
return major + "." + minor + "." + patch;
}
+ public static int encodePhoenixVersion() {
+ return
VersionUtil.encodeVersion(MetaDataProtocol.PHOENIX_MAJOR_VERSION,
MetaDataProtocol.PHOENIX_MINOR_VERSION,
+ MetaDataProtocol.PHOENIX_PATCH_NUMBER);
+ }
+
public static long encodeHBaseAndPhoenixVersions(String hbaseVersion) {
return (((long) VersionUtil.encodeVersion(hbaseVersion)) << (Byte.SIZE
* 5)) |
(((long)
VersionUtil.encodeVersion(MetaDataProtocol.PHOENIX_MAJOR_VERSION,
MetaDataProtocol.PHOENIX_MINOR_VERSION,
http://git-wip-us.apache.org/repos/asf/phoenix/blob/7ccd2542/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
----------------------------------------------------------------------
diff --git
a/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
b/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
index f0334f5..25b2cc1 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/util/MetaDataUtilTest.java
@@ -46,14 +46,16 @@ public class MetaDataUtilTest {
@Test
public void testCompatibility() {
-
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(1,2,1),
1));
-
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(1,2,10),
1));
-
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(1,2,0),
1));
-
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(1,2,255),
1));
-
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(2,2,0),
2));
-
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(2,10,36),
2));
-
assertFalse(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(3,1,10),
4));
-
assertFalse(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(3,1,10),
2));
+
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(1,2,1),
1, 2));
+
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(1,2,10),
1, 1));
+
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(1,2,0),
1, 2));
+
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(1,2,255),
1, 2));
+
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(2,2,0),
2, 0));
+
assertTrue(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(2,10,36),
2, 9));
+
assertFalse(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(3,1,10),
4, 0));
+
assertFalse(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(3,1,10),
2, 0));
+
assertFalse(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(3,1,10),
3, 2));
+
assertFalse(MetaDataUtil.areClientAndServerCompatible(VersionUtil.encodeVersion(3,1,10),
3, 5));
}
/**