Commit Graph

1246 Commits

Author SHA1 Message Date
Chenxiong Qi
b5df1457c4 Merge #1363 Rewrite import_mmd 2019-08-06 01:48:42 +00:00
Chenxiong Qi
9c6c4da80f Rewrite import_mmd
* xmd/mbs is always set if it is not present in xmd, so move the code on
  the top of function. This change is also helpful for accessing keys
  under xmd/mbs.
* By setting xmd/mbs in the beginning, code is simplified to get
  disttag_marking and virtual_streams. The result is much straightforwar
  for getting a default value for them.
* Move disttag_marking validation code next to the line getting
  disttag_marking from xmd/mbs. As a result, the code structure is
  easier to read as getting disttag_marking and validate it, getting
  virtual_streams and validate.
* Rewrite the part of code for check_buildrequires. Always set
  xmd/mbs/buildrequires if it is not present and check_buildrequires is
  set to True, as it is required by
  ModuleBuild.get_buildrequired_base_modules.
* Using in operator instead of dict.get to check if key koji_tag exists.
  Using dict.get would be ambiguous because even if koji_tag exists
  under xmd/mbs, but due to its value is set to None occasionally, there
  is still a message logged to tell koji_tag is not set.
* Rwrite all lines of code for updating virtual streams. A new method
  update_virtual_streams is added to ModuleBuild. This also fixes
  FACTORY-4561.
* Tests are added for the rewrite of virtual streams update.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-08-05 16:10:57 +08:00
mprahl
84e3f6f437 Add a missing foreign key constraint that was missed in 40b2c7d988d7_add_reused_module_id_column.py 2019-08-02 09:33:16 -04:00
mprahl
971aade159 Add SQLite support for the downgrade function in 40b2c7d988d7_add_reused_module_id_column.py 2019-08-02 09:32:41 -04:00
mprahl
f13b7308e1 Add a missing column in 0b00036c540f_add_log_messages_table.py 2019-08-02 09:32:41 -04:00
mprahl
4f3692c711 Fix a flake8 error in 0b00036c540f_add_log_messages_table.py 2019-08-02 09:04:45 -04:00
Jan Kaluža
8dd65a79fa Merge #1340 Added an REST endpoint to display log messages 2019-07-31 12:49:03 +00:00
Martin Curlej
c5d484fb81 Added an REST endpoint to display log messages
The issue is that users don't get feedback from MBS about why a
component was not reused. There was added logic which enables to
store log messages in the database and can be viewed through the
REST api of MBS.

Ticket-ID: #1284

Signed-off-by: Martin Curlej <mcurlej@redhat.com>
2019-07-31 13:32:33 +02:00
Valerij Maljulin
5fb6a2f28a Check dependencies in reuse
Signed-off-by: Valerij Maljulin <vmaljuli@redhat.com>
2019-07-31 11:23:52 +02:00
Chenxiong Qi
308f5bc7cf Serialize component build state trace correctly if state is None
Fixes #1179

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-29 15:56:30 +08:00
Jan Kaluža
24e3d0a31c Merge #1358 Reduce duplicate libsolv API calls 2019-07-25 04:55:30 +00:00
Qixiang Wan
ab8abef058 Fix recover_orphaned_artifact for module-build-macros
When recover_orphaned_artifact is called for module-build-macros
and the module-build-macros is not tagged in the -build Koji tag,
then the tag_artifacts() is called to tag it there.

This is correct, but the issue is that module-build-macros need
to be added to "build" and "srpm-build" Koji tag groups, otherwise
it is not installed in the buildroot by default.
2019-07-23 16:11:27 +08:00
Chenxiong Qi
965d2ab2d4 Reduce duplicate libsolv API calls
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-22 23:32:05 +08:00
Matt Prahl
efb0ab307e Merge #1354 Make fetch_mmd public 2019-07-22 13:59:21 +00:00
Chenxiong Qi
b242b12136 Remove handling of negative deps in _deps2reqs
Fixes #1338

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-22 15:24:07 +08:00
Chenxiong Qi
0d6a26b71e Make fetch_mmd public
fetch_mmd was imported at other places like in views.py for
ImportModuleAPI. So, make it public.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-19 09:29:05 +08:00
Chenxiong Qi
7a38c730e4 Merge #1353 Adjust logs for reading logs easily 2019-07-18 22:33:16 +00:00
Chenxiong Qi
4b1ab34c84 Log full modulemd in debug level in modules.wait handler
A full modulemd is usually a loooon text. This change would be much
easier for reading logs at INFO level only.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:57:42 +08:00
Chenxiong Qi
9d6a34a8e4 Show state name in state transition log
This will show log like "State transition: init -> wait, ...", which is
much straightforward than showing state number "state 1->2".

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:57:42 +08:00
Chenxiong Qi
3b938dba26 No need of argument component_id for ComponentBuild.state_trace
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:27:59 +08:00
Chenxiong Qi
f5717e3469 Fix incorrect error message and method call on ComponentRpm
When resubmitting a module build, if some component is found out that
its attributes have changed, MBS will raise an error to stop the work to
recording components. The problem is original code tells a module build
exists in database already rather than a component build, meanwhile
get_module_name() call on an ComponentRpm object is also incorrect.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:09:45 +08:00
Chenxiong Qi
5028746a2f Fix arguments passed to log.debug
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 22:08:42 +08:00
Chenxiong Qi
3878affa41 Separate use of database sessions
This patch separates the use of database session in different MBS components
and do not mix them together.

In general, MBS components could be separated as the REST API (implemented
based on Flask) and non-REST API including the backend build workflow
(implemented as a fedmsg consumer on top of fedmsg-hub and running
independently) and library shared by them. As a result, there are two kind of
database session used in MBS, one is created and managed by Flask-SQLAlchemy,
and another one is created from SQLAclhemy Session API directly. The goal of
this patch is to make ensure session object is used properly in the right
place.

All the changes follow these rules:

* REST API related code uses the session object db.session created and
  managed by Flask-SQLAlchemy.
* Non-REST API related code uses the session object created with SQLAlchemy
  Session API. Function make_db_session does that.
* Shared code does not created a new session object as much as possible.
  Instead, it accepts an argument db_session.

The first two rules are applicable to tests as well.

Major changes:

* Switch tests back to run with a file-based SQLite database.
* make_session is renamed to make_db_session and SQLAlchemy connection pool
  options are applied for PostgreSQL backend.
* Frontend Flask related code uses db.session
* Shared code by REST API and backend build workflow accepts SQLAlchemy session
  object as an argument. For example, resolver class is constructed with a
  database session, and some functions accepts an argument for database session.
* Build workflow related code use session object returned from make_db_session
  and ensure db.session is not used.
* Only tests for views use db.session, and other tests use db_session fixture
  to access database.
* All argument name session, that is for database access, are renamed to
  db_session.
* Functions model_tests_init_data, reuse_component_init_data and
  reuse_shared_userspace_init_data, which creates fixture data for
  tests, are converted into pytest fixtures from original function
  called inside setup_method or a test method. The reason of this
  conversion is to use fixture ``db_session`` rather than create a
  new one. That would also benefit the whole test suite to reduce the
  number of SQLAlchemy session objects.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-07-18 21:26:50 +08:00
Jan Kaluža
1c76f1223e Merge #1335 Call _get_base_module_stream_overrides when the module is not the input module 2019-07-18 10:38:27 +00:00
mprahl
f2f033e66f Use mmd_to_str in _createrepo to reduce code duplication 2019-07-17 07:11:34 -05:00
Owen W. Taylor
886bd34c55 MockModuleBuilder.py: Fix for libmodulemd v2
With v2 of the libmodulemd API, writing a module to a string requires
creating a Modulemd.ModuleIndex object.
2019-07-17 07:11:34 -05:00
mprahl
280a25b939 Support base modules with virtual streams and no stream version 2019-07-16 14:21:49 +00:00
mprahl
1bcb40d4d0 Allow specifying a specific module build to reuse components from
This resolves #1296.
2019-07-16 11:40:59 +00:00
mprahl
0466ac394b Call _get_base_module_stream_overrides when the module is not the input module
This just simplifies the code. It doesn't change the functionality
at all. The tests had to be changed because it assumed that the
xmd.mbs.buildrequires section would be filled out for the input
module which isn't true.
2019-07-15 13:17:36 -04:00
Luiz Carvalho
302e905f49 Rename trigger_new_repo_when_stalled accurately
Signed-off-by: Luiz Carvalho <lucarval@redhat.com>
2019-07-12 14:12:15 -04:00
Luiz Carvalho
9e50e9e268 Do not start newRepo task if one in progress
Signed-off-by: Luiz Carvalho <lucarval@redhat.com>

Check task status on producer - to be squashed

Signed-off-by: Luiz Carvalho <lucarval@redhat.com>
2019-07-12 14:12:15 -04:00
mprahl
82ec6944c6 Prevent overlapping RPMs from buildrequired base modules from being available when using default modules
When using default modules, this feature will add conflicts to
module-build-macros for every RPM in a buildrequired base module
that overlaps with RPMs in the buildrequired modules. This will
prevent them from being available in the buildroot, and thus
ensure that the RPMs from the buildrequired modules (non-base
modules) are used even if they have a lower NVR.
2019-07-11 09:21:09 -04:00
mprahl
4891716c2d Default the cache directory to the "mbs" directory under tempfile.gettempdir() 2019-07-10 19:01:43 -04:00
mprahl
ddafbb86ff Allow the poller to clean up module builds without arches 2019-07-10 13:29:58 +00:00
Jan Kaluza
8301aeb9eb Return the latest base module in case stream_version_lte is used, but stream is not in x.y.z format.
This seems to be better behaviour than simply rejecting the module build
completely. MBS still shows warning in the log that it cannot find
any compatible module, but the build continues with the base module
requested in the submitted modulemd.
2019-07-10 10:41:21 +02:00
Jan Kaluza
95febc2e1b Allow modules built against platform in 'garbage' state to be used as build dependency. 2019-07-09 07:35:01 +02:00
mprahl
96d44d049e Add the ability to automatically buildrequire default modules defined by the buildrequired base module
A base module can set xmd.mbs.default_modules_url, which contains a
URL to a list of modules in the format of name:stream separated by
new lines. When a module buildrequires this base module, the list
of default modules are added as buildrequires of the module automatically
unless there are conflicting streams or the default module is not
in the MBS database.
2019-07-05 14:52:50 -04:00
mprahl
9f55ce724d Add a global requests session with retry logic configured
This also replaces the usage of other request sessions.
2019-07-03 09:00:49 -04:00
mprahl
db03f0a7f5 Promote resolver._get_module to a public method 2019-07-02 10:45:31 -04:00
mprahl
50f0a60ec1 Allow configuring the number of parallel submissions to Koji
When NUM_CONCURRENT_BUILDS is 0, then multi-threading is disabled
when submitting builds to Koji. This is not acceptable, so this
commit makes the number of threads configurable.
2019-07-01 08:12:12 -04:00
Merlin Mathesius
9f269c39e1 Older versions of kobo.rpmlib.get_header_field() return bytes, newer versions
return str. Decode as necessary.

Signed-off-by: Merlin Mathesius <mmathesi@redhat.com>
2019-06-27 10:44:58 -05:00
Valerij Maljulin
f0dc0b851d Add state_reason on GW failure
Signed-off-by: Valerij Maljulin <vmaljuli@redhat.com>
2019-06-25 17:39:40 +02:00
Jan Kaluža
1a8ac64850 Merge #1305 Minor fixes to _get_filtered_rpms_on_self_dep 2019-06-25 11:49:55 +00:00
Martin Curlej
ed24ca870a Module builds now remember what module they reused for building.
There was a race condition, when 2 builds where build in the same time.
There was an issue that after one has finished the other reused the new build
for reuse and not the one it started with.

Ticket-ID: FACTORY-3862

Signed-off-by: Martin Curlej <mcurlej@redhat.com>
2019-06-25 11:09:33 +02:00
Chenxiong Qi
5bdb77777f Minor fixes to _get_filtered_rpms_on_self_dep
* Add docstring
* Call dict.setdefault to simplify the code a little which constructs the map
  from package name to built RPMs' NVRs.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-06-25 15:13:22 +08:00
Matt Prahl
7341e68ff7 Merge #1292 Remove unused variable local_modules from GenericBuilder.default_buildroot_groups 2019-06-20 16:31:24 +00:00
Chenxiong Qi
8728afffd7 Remove unused variable local_modules from GenericBuilder.default_buildroot_groups
Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2019-06-20 10:25:05 +08:00
Jan Kaluza
c9d2b77167 When no architecture is set in Koji tag, fallback to conf.arches 2019-06-19 14:32:10 +02:00
mprahl
1a17d655ee Accept floats when filtering by stream_version_lte on the API 2019-06-18 10:19:00 -04:00
Jan Kaluža
5794c4375d Merge #1281 Allow buildrequiring modules built against all platform streams. 2019-06-17 05:27:32 +00:00