Bug 1250025 - Review Request: rocksdb - A Persistent Key-Value Store for Flash and RAM Storage
Summary: Review Request: rocksdb - A Persistent Key-Value Store for Flash and RAM Storage
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Augusto Caringi
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2015-08-04 11:28 UTC by Matej Mužila
Modified: 2018-02-27 15:23 UTC (History)
5 users (show)

Fixed In Version: rocksdb-5.2.1-1.fc27
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2018-02-27 15:23:32 UTC
Type: ---
Embargoed:
acaringi: fedora-review+


Attachments (Terms of Use)

Description Matej Mužila 2015-08-04 11:28:47 UTC
Spec URL: https://fedorapeople.org/~mmuzila/rocksdb/rocksdb.spec
SRPM URL: https://fedorapeople.org/~mmuzila/rocksdb/rocksdb-3.12-1.fc21.src.rpm

Description: 
Rocksdb is a library that forms the core building block for a fast key value  server, especially suited for storing data on flash drives. It has a            
Log-Structured-Merge-Database (LSM) design with flexible tradeoffs between      Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF) and          Space-Amplification-Factor (SAF). It has multi-threaded compactions, making it specially suitable for storing multiple terabytes of data in a single database.

Fedora Account System Username: mmuzila

Comment 1 Honza Horak 2015-08-14 10:30:31 UTC
Package Review
==============

I've spotted those issues, that should be fixed:

- soname is librocksdb.so.3.12, is this desired? I'd expect just librocksdb.so.3, but maybe upstream decided differently. It might be correct, but just wanted to be sure.

- %defattr(-,root,root,-) is not needed

- Package seems to contain bundled libraries:
  from build.log:
    CC       third-party/gtest-1.7.0/fused-src/gtest/gtest-all.o
  and from spec (no gtest BuildRequirement) it seems gtest is bundled and used
  For third-party/fbson and third-party/flashcache I don't see them in build.log, but it would be better if we can remove all the third-party/ directory.

- (not blocker) changing compiler flags should be done by setting variables like EXTRA_CFLAGS or EXTRA_CXXFLAGS, rather than redefining RPM_OPT_FLAGS:
  RPM_OPT_FLAGS="$RPM_OPT_FLAGS -std=c++11"
  Makefile doesn't have to be patched then.

- I don't think we need to use explicit Requires, if those are libraries:
    Requires:   jemalloc
    Requires:    snappy
    Requires:   bzip2
  Requirements are specified automatically by RPM in those cases:
    libbz2.so.1()(64bit)
    libjemalloc.so.1()(64bit)
    libsnappy.so.1()(64bit)

- (not blocker) no links nor comments in patches


Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed



===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig called in %post and %postun if required.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.
[x]: Development (unversioned) .so files in -devel subpackage, if present.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "BSD (2 clause)", "Unknown or generated". 137 files have
     unknown license.
[x]: License file installed when any subpackage combination is installed.
[x]: %build honors applicable compiler flags or justifies otherwise.
[!]: Package contains no bundled libraries without FPC exception.

- Package seems to contain bundled libraries:
  from build.log:
    CC       third-party/gtest-1.7.0/fused-src/gtest/gtest-all.o
  and from spec (no gtest BuildRequirement) it seems gtest is bundled and used
  For third-party/fbson and third-party/flashcache I don't see them in build.log, but it would be better if we can remove all the third-party/ directory.

[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[x]: Each %files section contains %defattr if rpm < 4.4
     Note: %defattr present but not needed
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[!]: Requires correct, justified where necessary.

- I don't think we need to use explicit Requires, if those are libraries:
    Requires:   jemalloc
    Requires:    snappy
    Requires:   bzip2
  Requirements are specified automatically by RPM in those cases:
    libbz2.so.1()(64bit)
    libjemalloc.so.1()(64bit)
    libsnappy.so.1()(64bit)

[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: All build dependencies are listed in BuildRequires, except for any
     that are listed in the exceptions section of Packaging Guidelines.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 0 bytes in 0 files.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[x]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[!]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in rocksdb-
     devel

- devel package should include %{?_isa}

[?]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[ ]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.

- no links nor comments in patches

[-]: Scriptlets must be sane, if used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[x]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Uses parallel make %{?_smp_mflags} macro.
[x]: SourceX is a working URL.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: No rpmlint messages.
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.


Rpmlint
-------
Checking: rocksdb-3.12-1.fc21.x86_64.rpm
          rocksdb-devel-3.12-1.fc21.x86_64.rpm
          rocksdb-3.12-1.fc21.src.rpm
rocksdb.x86_64: W: spelling-error %description -l en_US tradeoffs -> trade offs, trade-offs, takeoffs
rocksdb.x86_64: W: spelling-error %description -l en_US multi -> mulch, mufti
rocksdb.x86_64: W: spelling-error %description -l en_US compactions -> compaction, comp actions, comp-actions
rocksdb.x86_64: W: shared-lib-calls-exit /usr/lib64/librocksdb.so.3.12.0 exit.5
rocksdb.x86_64: W: no-documentation
rocksdb-devel.x86_64: W: only-non-binary-in-usr-lib
rocksdb-devel.x86_64: W: no-documentation
rocksdb.src: W: spelling-error %description -l en_US tradeoffs -> trade offs, trade-offs, takeoffs
rocksdb.src: W: spelling-error %description -l en_US multi -> mulch, mufti
rocksdb.src: W: spelling-error %description -l en_US compactions -> compaction, comp actions, comp-actions
3 packages and 0 specfiles checked; 0 errors, 10 warnings.




Rpmlint (debuginfo)
-------------------
Checking: rocksdb-debuginfo-3.12-1.fc21.x86_64.rpm
1 packages and 0 specfiles checked; 0 errors, 0 warnings.





Rpmlint (installed packages)
----------------------------
Cannot parse rpmlint output:


Requires
--------
rocksdb (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    bzip2
    jemalloc
    ld-linux-x86-64.so.2()(64bit)
    libbz2.so.1()(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.0)(64bit)
    libgflags.so.2.1()(64bit)
    libjemalloc.so.1()(64bit)
    libm.so.6()(64bit)
    libpthread.so.0()(64bit)
    librt.so.1()(64bit)
    libsnappy.so.1()(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.5)(64bit)
    libstdc++.so.6(CXXABI_1.3.8)(64bit)
    rtld(GNU_HASH)
    snappy

rocksdb-devel (rpmlib, GLIBC filtered):
    librocksdb.so.3.12()(64bit)
    rocksdb



Provides
--------
rocksdb:
    librocksdb.so.3.12()(64bit)
    rocksdb
    rocksdb(x86-64)

rocksdb-devel:
    rocksdb-devel
    rocksdb-devel(x86-64)



Source checksums
----------------
https://github.com/facebook/rocksdb/archive/v3.12.tar.gz#/rocksdb-3.12.tar.gz :
  CHECKSUM(SHA256) this package     : eeb3cadb544e6eac8a3b6fde3c4b82e2de6a4c9bd721d426e2dde44285d48293
  CHECKSUM(SHA256) upstream package : eeb3cadb544e6eac8a3b6fde3c4b82e2de6a4c9bd721d426e2dde44285d48293


Generated by fedora-review 0.5.3 (bcf15e3) last change: 2015-05-04
Command line :/usr/bin/fedora-review -o=--dnf -m fedora-21-x86_64 --rpm-spec -n rocksdb-3.12-1.fc21.src.rpm
Buildroot used: fedora-21-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: Java, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP, Ruby
Disabled flags: EXARCH, DISTTAG, EPEL5, BATCH, EPEL6

Comment 2 Matej Mužila 2016-08-26 16:30:55 UTC
I've updated the package

Spec URL: https://mmuzila.fedorapeople.org/rocksdb.spec
SRPM URL: https://mmuzila.fedorapeople.org/rocksdb-4.11-1.fc22.src.rpm

Description: 
Rocksdb is a library that forms the core building block for a fast key value  server, especially suited for storing data on flash drives. It has a            
Log-Structured-Merge-Database (LSM) design with flexible tradeoffs between      Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF) and          Space-Amplification-Factor (SAF). It has multi-threaded compactions, making it specially suitable for storing multiple terabytes of data in a single database.

Fedora Account System Username: mmuzila

Comment 3 Michal Schorm 2016-08-31 14:36:04 UTC
Package Review
==============

Here is the list of issues that MUST and SHOULD be fixed:

MUST
* Build flag %opt_flags missing and no justification present.
* Latest version is packaked: latest version available from upstream GIT
  is 4.9. https://github.com/facebook/rocksdb/releases
  Where the 4.11 version come from?
* rpmlint output:
  rocksdb.x86_64: W: shared-lib-calls-exit /usr/lib64/librocksdb.so.4.11.0 exit.5
  library should not quit with exit or maybe it shouldn't be a library ?

SHOULD
* Included patch doesn't match app version
* Included patch doesn't link to upstream bugs/comments/lists or are otherwise
  justified.
* %check not present
* description contain 2 typos:
  Typo: "compactions" -> "compaction"
  Typo: "multi-threaded" -> "multithreaded"
* Documentation should be added or upstream should be queried to create some.
* It would be nice to add licence file to -debuginfo subpackage as it can be installed
  as a standalone package.
* In specfile, Source0 should be changed
  from
  "...zip/4.11.fb#/%{name}-%{version}.fb.zip"
  to
  "...zip/%{name}.%{version}.fb#/%{name}-%{version}.fb.zip"
* Same for Patch0, after it will be updated to matching version
* BuildRequires should be aligned with equal number of whitespaces



Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed

===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig called in %post and %postun if required.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.
[x]: Development (unversioned) .so files in -devel subpackage, if present.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: BSD licence in standalone licence file
[x]: License file installed when any subpackage combination is installed.
[x]: %build honors applicable compiler flags or justifies otherwise.
     Note: use opt_flags macro
[?]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content. (only FOSS)
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[?]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[x]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires are correct, justified where necessary.
     Note: whitespace
[x]: Spec file is legible and written in American English.
     Note: Typo: "compactions" -> "compaction"
     Note: Typo: "multi-threaded" -> "multithreaded"
     Note: no documentation.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise. (Source codes bundled)
[x]: Package is not known to require an ExcludeArch tag.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: All build dependencies are listed in BuildRequires, except for any
     that are listed in the exceptions section of Packaging Guidelines.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 0 bytes in 0 files.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Fully versioned dependency in subpackages if applicable.
[?]: Package functions as described.
[!]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[!]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[x]: Scriptlets must be sane, if used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[?]: Package should compile and build into binary rpms on all supported
     architectures.
[!]: %check is present and all tests pass.
     Note: %check SHOULD be added
[?]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot macro is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Uses parallel make %{?_smp_mflags} macro.
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: No rpmlint messages.
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: rocksdb-4.11-1.fc24.x86_64.rpm
          rocksdb-devel-4.11-1.fc24.x86_64.rpm
          rocksdb-debuginfo-4.11-1.fc24.x86_64.rpm
          rocksdb-4.11-1.fc24.src.rpm
rocksdb.x86_64: W: spelling-error %description -l en_US multi -> mulch, mufti
rocksdb.x86_64: W: spelling-error %description -l en_US compactions -> compaction, comp actions, comp-actions
rocksdb.x86_64: W: shared-lib-calls-exit /usr/lib64/librocksdb.so.4.11.0 exit.5
rocksdb.x86_64: W: no-documentation
rocksdb-devel.x86_64: W: only-non-binary-in-usr-lib
rocksdb-devel.x86_64: W: no-documentation
rocksdb.src: W: spelling-error %description -l en_US multi -> mulch, mufti
rocksdb.src: W: spelling-error %description -l en_US compactions -> compaction, comp actions, comp-actions
4 packages and 0 specfiles checked; 0 errors, 8 warnings.




Rpmlint (debuginfo)
-------------------
Checking: rocksdb-debuginfo-4.11-1.fc24.x86_64.rpm
1 packages and 0 specfiles checked; 0 errors, 0 warnings.





Rpmlint (installed packages)
----------------------------
sh: /usr/bin/python: No such file or directory
rocksdb.x86_64: W: spelling-error %description -l en_US multi -> mulch, mufti
rocksdb.x86_64: W: spelling-error %description -l en_US compactions -> compaction, comp actions, comp-actions
rocksdb.x86_64: W: unused-direct-shlib-dependency /usr/lib64/librocksdb.so.4.11.0 /lib64/libgflags.so.2.1
rocksdb.x86_64: W: shared-lib-calls-exit /usr/lib64/librocksdb.so.4.11.0 exit.5
rocksdb.x86_64: W: no-documentation
rocksdb-devel.x86_64: W: only-non-binary-in-usr-lib
rocksdb-devel.x86_64: W: no-documentation
3 packages and 0 specfiles checked; 0 errors, 7 warnings.



Requires
--------
rocksdb (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    ld-linux-x86-64.so.2()(64bit)
    libbz2.so.1()(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.0)(64bit)
    libgflags.so.2.1()(64bit)
    libjemalloc.so.2()(64bit)
    libm.so.6()(64bit)
    libpthread.so.0()(64bit)
    librt.so.1()(64bit)
    libsnappy.so.1()(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.5)(64bit)
    libstdc++.so.6(CXXABI_1.3.8)(64bit)
    rtld(GNU_HASH)

rocksdb-devel (rpmlib, GLIBC filtered):
    librocksdb.so.4.11()(64bit)
    rocksdb(x86-64)

rocksdb-debuginfo (rpmlib, GLIBC filtered):



Provides
--------
rocksdb:
    librocksdb.so.4.11()(64bit)
    rocksdb
    rocksdb(x86-64)

rocksdb-devel:
    rocksdb-devel
    rocksdb-devel(x86-64)

rocksdb-debuginfo:
    rocksdb-debuginfo
    rocksdb-debuginfo(x86-64)



-------
Buildroot used: fedora-24-x86_64

Source checksums
----------------
https://codeload.github.com/facebook/rocksdb/zip/4.11.fb#/rocksdb-4.11.fb.zip :
  CHECKSUM(SHA256) this package     : a024de949fd113eb1c25704581c729abd78c903b5c2ea811ce88cfadc1550590
  CHECKSUM(SHA256) upstream package : a024de949fd113eb1c25704581c729abd78c903b5c2ea811ce88cfadc1550590

Comment 4 Matej Mužila 2017-04-12 13:49:37 UTC
I've updated the package

Spec URL: https://fedorapeople.org/~mmuzila/rocksdb/rocksdb.spec
SRPM URL: https://fedorapeople.org/~mmuzila/rocksdb/rocksdb-5.2.1-1.fc24.src.rpm

Description: 
Rocksdb is a library that forms the core building block for a fast key value
server, especially suited for storing data on flash drives. It has a
Log-Structured-Merge-Database (LSM) design with flexible trade offs between
Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF) and
Space-Amplification-Factor (SAF). It has multithreaded compaction, making it
specially suitable for storing multiple terabytes of data in a single database.


Fedora Account System Username: mmuzila

Notes:
  * Library calls exit(). It is caused by bad design.
  * %check is not present, because the check we need was not provided by upstream.

Comment 5 Augusto Caringi 2017-06-23 14:03:24 UTC
I don't know if is this a big problem, because the package is supposed to be included only in the upcoming F26 (F27?)... But I think that it's worthy to mention:

The i686 build is not working in F25 (and just in F25).

And it seems that it's not a problem in the package itself, but probably a bug in gcc.

I've first tried a koji scratch build and after some time I realized that the i686 build was never finishing (I had to cancel the task - https://koji.fedoraproject.org/koji/taskinfo?taskID=20095030)

Then I tried a local build using "mock -r fedora-25-i386" and the same happened...

It seems that gcc enters in an infinite loop.

For F26 and F27 the build works well for all supported architectures:

https://koji.fedoraproject.org/koji/taskinfo?taskID=20114843
https://koji.fedoraproject.org/koji/taskinfo?taskID=20114856

Comment 6 Augusto Caringi 2017-06-23 15:14:11 UTC
The build time is unusual long given the size of the software... More than 6 minutes on my machine.

The cause is that the Makefile has a problem and as a consequence it doesn't use parallel jobs in the building process (even with the proper utilization of %{?_smp_mflags} in the spec file).

This problem is already fixed in the upstream master branch...

Here is the complete explanation:

"Previously, the shared library (make shared_lib) was built with only one
compile line, compiling all .cc files and linking the shared library in
one step. That step would often take 10+ minutes on one machine, and
could not take advantage of multiple CPUs (it's only one invocation of
the compiler). This commit changes the shared_lib build to compile .o files
individually (placing the resulting .o files in the directory
shared-objects) and then link them into the shared library at the end,
similarly to how the java static build (jls) does it."

https://github.com/facebook/rocksdb/pull/2165

Maybe would be a good idea to apply this patch downstream...

On my machine the building time was cut by more than half.

Comment 7 Augusto Caringi 2017-06-27 08:06:04 UTC
Package Review
==============

MUST
* Package contains no bundled libraries without FPC exception.
  There are 2 third-party libraries in the source tarball: gtest and fbson
  gtest is probably only needed for tests and is being removed in %prep.
  fbson is used (It's a C++ header-only library), just to mention because
  I think that there isn't much we can do about it.

SHOULD
* Latest version is packaged: Upstream seems to be very active and is releasing
  very often, the latest version is 5.4.6 (https://github.com/facebook/rocksdb/releases).
* Package should compile and build into binary rpms on all supported
  architectures: On F25 i686 gcc hangs during compilation (maybe a bug in gcc),
  On F26 i686 and F27 i686 the compilation is successful.
* %check is present and all tests pass: There is a test suite, but 'make check'
  needs recompilation in debug mode.
* Reviewer should test that the package builds in mock: Yes, except for
  F25 i686 (compilation hangs)
* Uses parallel make %{?_smp_mflags} macro:  Yes, but this option has no effect
  due to a problem in the Makefile (Explanation in a previous comment).


Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed

===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig called in %post and %postun if required.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.
[x]: Development (unversioned) .so files in -devel subpackage, if present.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "BSD (3 clause)", "BSD (2 clause)", "Unknown or generated",
     "*No copyright* Apache (v2.0)". 1072 files have unknown license.
     Detailed output of licensecheck in
     /home/acaringi/reviews/1250025-rocksdb/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: %build honors applicable compiler flags or justifies otherwise.
[?]: Package contains no bundled libraries without FPC exception.
     There are 2 thirdy-party libraries in the source tarball: gtest and fbson
     gtest is probably only needed for tests and are being removed in spec file.
     fbson is used (It's a C++ header-only library)
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[x]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: All build dependencies are listed in BuildRequires, except for any
     that are listed in the exceptions section of Packaging Guidelines.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 0 bytes in 0 files.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in rocksdb-
     debuginfo
[?]: Package functions as described.
[!]: Latest version is packaged.
     Upstream seems very active and releasing very often, the latest version
     is 5.4.6
[x]: Package does not include license text files separate from upstream.
[!]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[x]: Scriptlets must be sane, if used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
     Scratch build in koji worked without any problem.
[?]: %check is present and all tests pass.
     make check needs recompilation in debug mode.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Uses parallel make %{?_smp_mflags} macro.
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: No rpmlint messages.
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: rocksdb-5.2.1-1.fc25.x86_64.rpm
          rocksdb-devel-5.2.1-1.fc25.x86_64.rpm
          rocksdb-debuginfo-5.2.1-1.fc25.x86_64.rpm
          rocksdb-5.2.1-1.fc25.src.rpm
rocksdb.x86_64: W: spelling-error %description -l en_US multithreaded -> multicolored
rocksdb.x86_64: W: shared-lib-calls-exit /usr/lib64/librocksdb.so.5.2.1 exit.5
rocksdb.x86_64: W: no-documentation
rocksdb-devel.x86_64: W: only-non-binary-in-usr-lib
rocksdb-devel.x86_64: W: no-documentation
rocksdb.src: W: spelling-error %description -l en_US multithreaded -> multicolored
4 packages and 0 specfiles checked; 0 errors, 6 warnings.




Rpmlint (debuginfo)
-------------------
Checking: rocksdb-debuginfo-5.2.1-1.fc25.x86_64.rpm
1 packages and 0 specfiles checked; 0 errors, 0 warnings.





Rpmlint (installed packages)
----------------------------
rocksdb.x86_64: W: spelling-error %description -l en_US multithreaded -> multicolored
rocksdb.x86_64: W: shared-lib-calls-exit /usr/lib64/librocksdb.so.5.2.1 exit.5
rocksdb.x86_64: W: no-documentation
rocksdb-devel.x86_64: W: only-non-binary-in-usr-lib
rocksdb-devel.x86_64: W: no-documentation
3 packages and 0 specfiles checked; 0 errors, 5 warnings.



Requires
--------
rocksdb (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    ld-linux-x86-64.so.2()(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.0)(64bit)
    libm.so.6()(64bit)
    libpthread.so.0()(64bit)
    librt.so.1()(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.5)(64bit)
    libstdc++.so.6(CXXABI_1.3.8)(64bit)
    rtld(GNU_HASH)

rocksdb-devel (rpmlib, GLIBC filtered):
    librocksdb.so.5.2()(64bit)
    rocksdb(x86-64)

rocksdb-debuginfo (rpmlib, GLIBC filtered):



Provides
--------
rocksdb:
    librocksdb.so.5.2()(64bit)
    rocksdb
    rocksdb(x86-64)

rocksdb-devel:
    rocksdb-devel
    rocksdb-devel(x86-64)

rocksdb-debuginfo:
    rocksdb-debuginfo
    rocksdb-debuginfo(x86-64)



Source checksums
----------------
https://github.com/facebook/rocksdb/archive/v5.2.1.tar.gz#/rocksdb-5.2.1.tar.gz :
  CHECKSUM(SHA256) this package     : cb27afeaa3dea4369e7b982ce336c16ec2848879e7275043b94e9b42570158ec
  CHECKSUM(SHA256) upstream package : cb27afeaa3dea4369e7b982ce336c16ec2848879e7275043b94e9b42570158ec


Generated by fedora-review 0.6.1 (f03e4e7) last change: 2016-05-02
Command line :/usr/bin/fedora-review -b 1250025
Buildroot used: fedora-25-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: Java, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP
Disabled flags: EXARCH, DISTTAG, EPEL5, BATCH, EPEL6

Comment 8 Matej Mužila 2017-06-27 09:26:58 UTC
Hi,

I have a few comments to the pakcage review.

MUST:
    - Bundled gtest is removed before compilation so it shouldn't be a problem.
        (rocksdb.spec:35    rm -rf third-party/gtest-1.7.0)

    - fbson doesn't seem to be released separately. Facebook just bundles
        it into its projects.

SHOULD:
    - Yes, new versions are released very often. At the time of submitting
        rocksdb package for review, the highiest available version was packaged.
    - Package can be built on all supported architectures [1]. It was not
        intended to be added to fedora < f26.
    - The Makefile bug (use of parallel jobs) was already fixed by upstream
        so we do not need to fix it downstream.


Could you please reconsider the package review?

[1] https://fedoraproject.org/wiki/Architectures

Comment 9 Augusto Caringi 2017-06-27 12:24:52 UTC
(In reply to Matej Mužila from comment #8)
> Hi,
> 
> I have a few comments to the pakcage review.
> 
> MUST:
>     - Bundled gtest is removed before compilation so it shouldn't be a
> problem.
>         (rocksdb.spec:35    rm -rf third-party/gtest-1.7.0)
> 
>     - fbson doesn't seem to be released separately. Facebook just bundles
>         it into its projects.
> 
> SHOULD:
>     - Yes, new versions are released very often. At the time of submitting
>         rocksdb package for review, the highiest available version was
> packaged.
>     - Package can be built on all supported architectures [1]. It was not
>         intended to be added to fedora < f26.
>     - The Makefile bug (use of parallel jobs) was already fixed by upstream
>         so we do not need to fix it downstream.
> 
> 
> Could you please reconsider the package review?

For me it's ok... Just suggestions.

Comment 10 Gwyn Ciesla 2017-06-27 13:23:15 UTC
Package request has been approved: https://admin.fedoraproject.org/pkgdb/package/rpms/rocksdb

Comment 11 Jens Petersen 2017-11-09 13:03:19 UTC
Can it be built for f26?


Note You need to log in before you can comment on or make changes to this bug.