You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ad...@apache.org on 2017/01/09 22:02:17 UTC

[2/2] kudu git commit: log_block_manager: update list of buggy el6 versions

log_block_manager: update list of buggy el6 versions

The bug fix for ext4 extents tree corruption has been backported to the
el6.8 update stream (aka z-stream). This adds the appropriate logic to
check for that version.

Change-Id: Id22c1d2527216620b6fc98b7a36fdbd552b72ddc
Reviewed-on: http://gerrit.cloudera.org:8080/5632
Reviewed-by: Dan Burkert <da...@apache.org>
Tested-by: Kudu Jenkins
Reviewed-by: Adar Dembo <ad...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/adad9b81
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/adad9b81
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/adad9b81

Branch: refs/heads/master
Commit: adad9b81b41feb84bee4c8419817a8666c7555f3
Parents: 5dd962f
Author: Todd Lipcon <to...@apache.org>
Authored: Fri Jan 6 12:19:48 2017 -0800
Committer: Adar Dembo <ad...@cloudera.com>
Committed: Mon Jan 9 22:01:46 2017 +0000

----------------------------------------------------------------------
 src/kudu/fs/block_manager-test.cc | 20 ++++++++++++++++++--
 src/kudu/fs/log_block_manager.cc  | 20 ++++++++++++++------
 2 files changed, 32 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/adad9b81/src/kudu/fs/block_manager-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/fs/block_manager-test.cc b/src/kudu/fs/block_manager-test.cc
index 5e8bd1e..9802b8b 100644
--- a/src/kudu/fs/block_manager-test.cc
+++ b/src/kudu/fs/block_manager-test.cc
@@ -1308,10 +1308,26 @@ TEST_F(LogBlockManagerTest, TestParseKernelRelease) {
   ASSERT_FALSE(LogBlockManager::IsBuggyEl6Kernel("2.10.0-1.0.0.el6.x86_64"));
   ASSERT_FALSE(LogBlockManager::IsBuggyEl6Kernel("10.0.0-1.0.0.el6.x86_64"));
 
-  // Kernel from el6.6: buggy
+  // Kernels from el6.6, el6.7: buggy
   ASSERT_TRUE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-504.30.3.el6.x86_64"));
+  ASSERT_TRUE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-573.el6.x86_64"));
+  ASSERT_TRUE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-573.1.1.el6.x86_64"));
 
-  // Kernel from el6.9: not buggy.
+  // Kernel from el6.8: buggy
+  ASSERT_TRUE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-642.el6.x86_64"));
+
+  // Kernels from el6.8 update stream before a fix was applied: buggy.
+  ASSERT_TRUE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-642.11.1.el6.x86_64"));
+
+  // Kernels from el6.8 update stream after a fix was applied: not buggy.
+  ASSERT_FALSE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-642.14.1.el6.x86_64"));
+  ASSERT_FALSE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-642.14.2.el6.x86_64"));
+  ASSERT_FALSE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-642.18.1.el6.x86_64"));
+
+  // Kernel from el6.9 development prior to fix: buggy.
+  ASSERT_TRUE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-673.0.0.el6.x86_64"));
+
+  // Kernel from el6.9 development post-fix: not buggy.
   ASSERT_FALSE(LogBlockManager::IsBuggyEl6Kernel("2.6.32-674.0.0.el6.x86_64"));
 }
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/adad9b81/src/kudu/fs/log_block_manager.cc
----------------------------------------------------------------------
diff --git a/src/kudu/fs/log_block_manager.cc b/src/kudu/fs/log_block_manager.cc
index 1cc137b..b77db85 100644
--- a/src/kudu/fs/log_block_manager.cc
+++ b/src/kudu/fs/log_block_manager.cc
@@ -33,6 +33,7 @@
 #include "kudu/gutil/strings/strcat.h"
 #include "kudu/gutil/strings/strip.h"
 #include "kudu/gutil/strings/substitute.h"
+#include "kudu/gutil/strings/util.h"
 #include "kudu/gutil/walltime.h"
 #include "kudu/util/alignment.h"
 #include "kudu/util/atomic.h"
@@ -1773,13 +1774,20 @@ std::string LogBlockManager::ContainerPathForTests(internal::LogBlockContainer*
 }
 
 bool LogBlockManager::IsBuggyEl6Kernel(const string& kernel_release) {
-  // Any kernel older than 2.6.32-674 (el6.9) is buggy.
-  //
-  // TODO(adar): need to update this when the fix is backported to el6.8.z. See
-  // https://bugzilla.redhat.com/show_bug.cgi?id=1397808.
   autodigit_less lt;
-  return kernel_release.find("el6") != string::npos &&
-      lt(kernel_release, "2.6.32-674");
+
+  // Only el6 is buggy.
+  if (kernel_release.find("el6") == string::npos) return false;
+
+  // Kernels in the 6.8 update stream (2.6.32-642.a.b) are fixed
+  // for a >= 14.
+  if (MatchPattern(kernel_release, "2.6.32-642.*.el6.*") &&
+      lt("2.6.32-642.14.0", kernel_release)) {
+    return false;
+  }
+
+  // If the kernel older is than 2.6.32-674 (el6.9), it's buggy.
+  return lt(kernel_release, "2.6.32-674");
 }
 
 int64_t LogBlockManager::LookupBlockLimit(int64_t fs_block_size) {