fuel-plugin-odl: Patch leveldb before jetty.xml
[armband.git] / patches / fuel-plugin-opendaylight / 0001-ODL-leveldb-leveldbjni-Enable-arm64-support.patch
index 6bf549f..30e9010 100644 (file)
@@ -13,101 +13,30 @@ This is done when running odl-install puppet manifest.
 
 For more info about this ODL limitation, see [1].
 
-[1] https://bugs.opendaylight.org/show_bug.cgi?id=3973
-
 [ Alexandru.Avadanii@enea.com ]
 Remove JAVA8 changes after upstream rework.
+Convert puppet patching to prebuilt DEB package, as part of [2].
+Rebase for Fuel Newton.
 
+[1] https://bugs.opendaylight.org/show_bug.cgi?id=3973
+[2] https://jira.opnfv.org/browse/ARMBAND-114
+
+Change-Id: Ia7abf375ffd122ff0ac7b12422f64526ff2c78fd
 Signed-off-by: Florin Dumitrascu <florin.dumitrascu@enea.com>
 Signed-off-by: Stanislaw Kardach <stanislaw.kardach@cavium.com>
 Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
 ---
- .../modules/opendaylight/files/leveldb-arm64.patch |  35 +++++
- .../opendaylight/files/leveldbjni-native.patch     |  23 ++++
- .../puppet/modules/opendaylight/manifests/init.pp  |   8 ++
- .../modules/opendaylight/manifests/install.pp      |  12 +-
- .../modules/opendaylight/manifests/leveldbjni.pp   | 150 +++++++++++++++++++++
- deployment_tasks.yaml                              |   2 +-
- 6 files changed, 227 insertions(+), 3 deletions(-)
- create mode 100644 deployment_scripts/puppet/modules/opendaylight/files/leveldb-arm64.patch
- create mode 100644 deployment_scripts/puppet/modules/opendaylight/files/leveldbjni-native.patch
+ .../puppet/modules/opendaylight/manifests/init.pp  |  8 +++++++
+ .../modules/opendaylight/manifests/install.pp      |  7 ++++++
+ .../modules/opendaylight/manifests/leveldbjni.pp   | 25 ++++++++++++++++++++++
+ 3 files changed, 40 insertions(+)
  create mode 100644 deployment_scripts/puppet/modules/opendaylight/manifests/leveldbjni.pp
 
-diff --git a/deployment_scripts/puppet/modules/opendaylight/files/leveldb-arm64.patch b/deployment_scripts/puppet/modules/opendaylight/files/leveldb-arm64.patch
-new file mode 100644
-index 0000000..e0824ca
---- /dev/null
-+++ b/deployment_scripts/puppet/modules/opendaylight/files/leveldb-arm64.patch
-@@ -0,0 +1,35 @@
-+diff --git a/port/atomic_pointer.h b/port/atomic_pointer.h
-+index e17bf43..78cb6b3 100644
-+--- a/port/atomic_pointer.h
-++++ b/port/atomic_pointer.h
-+@@ -36,6 +36,8 @@
-+ #define ARCH_CPU_X86_FAMILY 1
-+ #elif defined(__ARMEL__)
-+ #define ARCH_CPU_ARM_FAMILY 1
-++#elif defined(__aarch64__)
-++#define ARCH_CPU_ARM64_FAMILY 1
-+ #elif defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__)
-+ #define ARCH_CPU_PPC_FAMILY 1
-+ #endif
-+@@ -93,6 +95,13 @@ inline void MemoryBarrier() {
-+ }
-+ #define LEVELDB_HAVE_MEMORY_BARRIER
-+
-++// ARM64
-++#elif defined(ARCH_CPU_ARM64_FAMILY)
-++inline void MemoryBarrier() {
-++ asm volatile("dmb sy" : : : "memory");
-++}
-++#define LEVELDB_HAVE_MEMORY_BARRIER
-++
-+ // PPC
-+ #elif defined(ARCH_CPU_PPC_FAMILY) && defined(__GNUC__)
-+ inline void MemoryBarrier() {
-+@@ -216,6 +225,7 @@ class AtomicPointer {
-+ #undef LEVELDB_HAVE_MEMORY_BARRIER
-+ #undef ARCH_CPU_X86_FAMILY
-+ #undef ARCH_CPU_ARM_FAMILY
-++#undef ARCH_CPU_ARM64_FAMILY
-+ #undef ARCH_CPU_PPC_FAMILY
-+
-+ }  // namespace port
-diff --git a/deployment_scripts/puppet/modules/opendaylight/files/leveldbjni-native.patch b/deployment_scripts/puppet/modules/opendaylight/files/leveldbjni-native.patch
-new file mode 100644
-index 0000000..08a528b
---- /dev/null
-+++ b/deployment_scripts/puppet/modules/opendaylight/files/leveldbjni-native.patch
-@@ -0,0 +1,23 @@
-+diff --git a/leveldbjni-all/pom.xml b/leveldbjni-all/pom.xml
-+index 426f2a6..c4a2a16 100755
-+--- a/leveldbjni-all/pom.xml
-++++ b/leveldbjni-all/pom.xml
-+@@ -41,7 +41,7 @@
-+
-+   <groupId>org.fusesource.leveldbjni</groupId>
-+   <artifactId>leveldbjni-all</artifactId>
-+-  <version>1.8</version>
-++  <version>1.8-odl</version>
-+   <packaging>bundle</packaging>
-+
-+   <name>${project.artifactId}</name>
-+@@ -119,7 +119,8 @@
-+               META-INF/native/osx/libleveldbjni.jnilib;osname=macosx;processor=x86,
-+               META-INF/native/osx/libleveldbjni.jnilib;osname=macosx;processor=x86-64,
-+               META-INF/native/linux32/libleveldbjni.so;osname=Linux;processor=x86,
-+-              META-INF/native/linux64/libleveldbjni.so;osname=Linux;processor=x86-64
-++              META-INF/native/linux64/libleveldbjni.so;osname=Linux;processor=x86-64,
-++              META-INF/native/linux64/libleveldbjni.so;osname=Linux;processor=aarch64
-+             </Bundle-NativeCode>
-+          </instructions>
-+         </configuration>
 diff --git a/deployment_scripts/puppet/modules/opendaylight/manifests/init.pp b/deployment_scripts/puppet/modules/opendaylight/manifests/init.pp
-index a322f70..f71bfc8 100644
+index 69cc23a..791ceba 100644
 --- a/deployment_scripts/puppet/modules/opendaylight/manifests/init.pp
 +++ b/deployment_scripts/puppet/modules/opendaylight/manifests/init.pp
-@@ -10,4 +10,12 @@ class opendaylight {
+@@ -9,4 +9,12 @@ class opendaylight {
    $odl_mgmt_ips = values($odl_mgmt_ips_hash)
    $odl_nodes_names = keys($odl_mgmt_ips_hash)
    $node_internal_address = $odl_mgmt_ips_hash["node-${node_uid}"]
@@ -121,59 +50,48 @@ index a322f70..f71bfc8 100644
 +  }
  }
 diff --git a/deployment_scripts/puppet/modules/opendaylight/manifests/install.pp b/deployment_scripts/puppet/modules/opendaylight/manifests/install.pp
-index 924a840..d55a311 100644
+index 2c3d776..673ccb3 100644
 --- a/deployment_scripts/puppet/modules/opendaylight/manifests/install.pp
 +++ b/deployment_scripts/puppet/modules/opendaylight/manifests/install.pp
-@@ -17,6 +17,12 @@ class opendaylight::install (
-     ensure  => installed,
+@@ -20,6 +20,12 @@ class opendaylight::install (
+     ensure  => $odl_package,
    }
+
 +  if ($::osfamily == 'Debian' and $::opendaylight::arch == 'arm64') {
 +    class { 'opendaylight::leveldbjni':
 +      require => Package['opendaylight'],
 +    }
 +  }
 +
-   # quagga
-   class { 'opendaylight::quagga':
-     before => Service['opendaylight']
-@@ -35,7 +41,8 @@ class opendaylight::install (
-   debug("Set odl rest api port to ${rest_port}")
--  file { "${conf_dir}/jetty.xml":
-+  file { 'jetty.xml':
-+    path    => "${conf_dir}/jetty.xml",
-     ensure  => file,
-     owner   => 'odl',
-     content => template('opendaylight/jetty.xml.erb')
-@@ -71,6 +78,7 @@ class opendaylight::install (
-   Package[$odl_package] ->
+   #Temporary solution until number of allowed open files
+   #will be fixed in main systemd service file
+   file {'/etc/systemd/system/opendaylight.service.d':
+@@ -88,6 +94,7 @@ class opendaylight::install (
+   Package['opendaylight'] ->
    Ini_setting <||> ->
    Firewall <||> ->
--  File <||> ->
-+  File['jetty.xml'] ->
 +  Class['opendaylight::leveldbjni'] ->
+   File <||> ~>
    Service['opendaylight']
  }
 diff --git a/deployment_scripts/puppet/modules/opendaylight/manifests/leveldbjni.pp b/deployment_scripts/puppet/modules/opendaylight/manifests/leveldbjni.pp
 new file mode 100644
-index 0000000..5125fc7
+index 0000000..0a20fa3
 --- /dev/null
 +++ b/deployment_scripts/puppet/modules/opendaylight/manifests/leveldbjni.pp
-@@ -0,0 +1,150 @@
+@@ -0,0 +1,25 @@
 +# == Class opendaylight::leveldbjni
 +#
-+# Manages compilation of JNI for leveldb.
++# Manages patching of JNI for leveldb on arm64.
 +#
-+# It compiles the leveldbjni from sources and patches it so that it's properly
-+# detected by maven on arm64 system.
++# It fetches a prebuilt DEB package containing leveldbjni,
++# patched so that it's properly detected by maven on arm64 systems.
 +#
-+class opendaylight::leveldbjni(
-+  $target = '/opt/opendaylight',
-+  $user    = 'odl',
-+  $branch  = 'leveldbjni-1.8',
-+) {
++# DEB: http://linux.enea.com/mos-repos/ubuntu/9.0/ \
++#      pool/main/a/armband-odl-leveldb-fix/
++# JIRA: https://jira.opnfv.org/browse/ARMBAND-114
++#
++class opendaylight::leveldbjni {
 +  case $::osfamily {
 +    'Debian', 'Ubuntu': {}
 +    default: {
@@ -181,147 +99,9 @@ index 0000000..5125fc7
 +    }
 +  }
 +
-+  $libsnappy_dir = '/usr/lib'
-+  $leveldb_dir = "${target}/leveldb"
-+  $leveldbjni_dir = "${target}/leveldbjni"
-+  $environment = ["SNAPPY_HOME=${libsnappy_dir}", "LEVELDB_HOME=${leveldb_dir}", "LEVELDBJNI_HOME=${leveldbjni_dir}", "LIBRARY_PATH=${libsnappy_dir}", "C_INCLUDE_PATH=${libsnappy_dir}", "CPLUS_INCLUDE_PATH=${libsnappy_dir}","JAVA_HOME=/usr/lib/jvm/java-8-openjdk-${::opendaylight::arch}"]
-+  $parallel_jobs = ($processorcount + 1)/2
-+
-+  if ! defined(Package['git']) {
-+    package { 'git':
-+      ensure => 'present',
-+    }
-+  }
-+  if ! defined(Package['build-essential']) {
-+    package { 'build-essential':
-+      ensure => 'present',
-+    }
-+  }
-+  if ! defined(Package['automake']) {
-+    package { 'automake':
-+      ensure => 'present',
-+    }
-+  }
-+  if ! defined(Package['make']) {
-+    package { 'make':
++  if ! defined(Package['armband-odl-leveldb-fix']) {
++    package { 'armband-odl-leveldb-fix':
 +      ensure => 'present',
 +    }
 +  }
-+  if ! defined(Package['libsnappy-dev']) {
-+    package { 'libsnappy-dev':
-+      ensure => 'present',
-+    }
-+  }
-+  if ! defined(Package['patch']) {
-+    package { 'patch':
-+      ensure => 'present',
-+    }
-+  }
-+  if ! defined(Package['maven']) {
-+    package { 'maven':
-+      ensure => 'present',
-+    }
-+  }
-+  if ! defined(Package['openjdk-8-jdk']) {
-+    package { 'openjdk-8-jdk':
-+      ensure => 'present',
-+    }
-+  }
-+
-+  exec { 'leveldb-fetch':
-+    path    => ['/usr/bin'],
-+    command => "git clone git://github.com/chirino/leveldb.git ${leveldb_dir}",
-+    creates => "${leveldb_dir}/.git",
-+    user    => $user,
-+    require => [Package['git']],
-+  } ->
-+  exec { 'leveldbjni-fetch':
-+    path    => ['/usr/bin'],
-+    command => "git clone https://github.com/fusesource/leveldbjni.git -b ${branch} ${leveldbjni_dir}",
-+    creates => "${leveldbjni_dir}/.git",
-+    user    => $user,
-+    require => [Package['git']],
-+  } ->
-+  exec { 'leveldb-merge-google':
-+    path    => ['/usr/bin', '/bin'],
-+    command => "git config user.name odl && git config user.email 'o@d.l' && git remote add google https://github.com/google/leveldb.git && git fetch google master && git fetch --tags google && git merge --no-edit v1.18",
-+    unless  => "git remote | grep google",
-+    cwd     => $leveldb_dir,
-+    user    => $user,
-+    require => [Package['git']],
-+  } ->
-+  exec { 'leveldb-patch':
-+    path    => ['/usr/bin'],
-+    command => "patch -p1 < ${leveldbjni_dir}/leveldb.patch",
-+    unless  => "patch -p1 -R -N --dry-run < ${leveldbjni_dir}/leveldb.patch",
-+    cwd     => $leveldb_dir,
-+    user    => $user,
-+    require => [Package['patch']],
-+  } ->
-+  file { "${leveldb_dir}/leveldb-arm64.patch":
-+    ensure => "file",
-+    source => "puppet:///modules/opendaylight/leveldb-arm64.patch",
-+    owner  => $user,
-+  } ->
-+  exec { 'leveldb-patch-for-arm64':
-+    path    => ['/usr/bin'],
-+    command => "patch -p1 < ${leveldb_dir}/leveldb-arm64.patch",
-+    unless  => "patch -p1 -R -N --dry-run < ${leveldb_dir}/leveldb-arm64.patch",
-+    cwd     => $leveldb_dir,
-+    user    => $user,
-+    require => [Package['patch']],
-+  } ->
-+  exec { 'leveldb-build':
-+    command => "/usr/bin/make libleveldb.a -j${parallel_jobs}",
-+    creates => "${leveldb_dir}/libleveldb.a",
-+    environment => $environment,
-+    cwd     => $leveldb_dir,
-+    user    => $user,
-+    require => [Package['git'], Package['make'], Package['build-essential']],
-+  } ->
-+  file { "${leveldbjni_dir}/leveldbjni.patch":
-+    ensure => "file",
-+    source => "puppet:///modules/opendaylight/leveldbjni-native.patch",
-+    owner  => $user,
-+  } ->
-+  exec { 'leveldbjni-patch':
-+    path    => ['/usr/bin'],
-+    command => "patch -p1 < ${leveldbjni_dir}/leveldbjni.patch",
-+    unless  => "patch -p1 -R -N --dry-run < ${leveldbjni_dir}/leveldbjni.patch",
-+    cwd     => $leveldbjni_dir,
-+    user    => $user,
-+    require => [Package['patch']],
-+  } ->
-+  exec { 'leveldbjni-build':
-+    command     => "/usr/bin/mvn clean install -P download -P linux64 -P all",
-+    # Creates requires a fully qualified path which we don't have
-+    unless      => "/usr/bin/test -d ~${user}/.m2/repository/org/fusesource/leveldbjni/leveldbjni-all",
-+    environment => $environment,
-+    cwd         => $leveldbjni_dir,
-+    user        => $user,
-+    timeout     => 1200,
-+    require     => [Package['maven']],
-+  } ->
-+  # Can't do this with 'file' type because we need to purge existing package
-+  # and at the same time don't perform the copy if we've already copied our
-+  # package.
-+  exec { 'leveldbjni-copy':
-+    path    => ['/bin'],
-+    command => "rm -rf ${target}/system/org/fusesource/leveldbjni && cp -r ~${user}/.m2/repository/org/fusesource/leveldbjni $target/system/org/fusesource/",
-+    creates => "${target}/system/org/fusesource/leveldbjni/leveldbjni-linux64",
-+    user    => $user,
-+  }
 +}
-diff --git a/deployment_tasks.yaml b/deployment_tasks.yaml
-index 3706678..841bfee 100644
---- a/deployment_tasks.yaml
-+++ b/deployment_tasks.yaml
-@@ -17,7 +17,7 @@
-   parameters:
-     puppet_manifest: puppet/manifests/odl-install.pp
-     puppet_modules: puppet/modules:/etc/puppet/modules
--    timeout: 720
-+    timeout: 3600
- - id: netconfig
-   type: puppet
-   version: 2.0.0