spkrepo icon indicating copy to clipboard operation
spkrepo copied to clipboard

Automatically create new service when require for a package

Open ymartin59 opened this issue 4 years ago • 3 comments

When trying to publish hassio package #3732 with make publish-arch-x64-6.1, repository rejects action with 502 error and stack trace

/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/dependency.py:465: SAWarning: Object of type <Version> not in session, add operation along 'Package.versions' will not proceed
  prop=self.prop)
Traceback (most recent call last):
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask_restful/__init__.py", line 263, in error_router
    return original_handler(e)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/_compat.py", line 32, in reraise
    raise value.with_traceback(tb)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask_restful/__init__.py", line 263, in error_router
    return original_handler(e)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/_compat.py", line 32, in reraise
    raise value.with_traceback(tb)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/var/www/spkrepo/spkrepo/views/api.py", line 35, in wrapper
    return f(*args, **kwargs)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask_restful/__init__.py", line 431, in wrapper
    resp = resource(*args, **kwargs)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask/views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/flask_restful/__init__.py", line 521, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/var/www/spkrepo/spkrepo/views/api.py", line 217, in post
    db.session.commit()
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/scoping.py", line 150, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 776, in commit
    self.transaction.commit()
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 377, in commit
    self._prepare_impl()
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 357, in _prepare_impl
    self.session.flush()
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 1919, in flush
    self._flush(objects)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 2037, in _flush
    transaction.rollback(_capture_exception=True)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/util/compat.py", line 182, in reraise
    raise value
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/session.py", line 2001, in _flush
    flush_context.execute()
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/unitofwork.py", line 372, in execute
    rec.execute(self)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/unitofwork.py", line 481, in execute
    self.dependency_processor.process_saves(uow, states)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/dependency.py", line 1051, in process_saves
    False, uowcommit, "add"):
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/dependency.py", line 1140, in _synchronize
    self._verify_canload(child)
  File "/var/www/spkrepo/env/lib/python3.4/site-packages/sqlalchemy/orm/dependency.py", line 257, in _verify_canload
    "collection %s" % (self.prop, ))
sqlalchemy.orm.exc.FlushError: Can't flush None value found in collection Version.service_dependencies
[pid: 15518|app: 0|req: 145/145] 90.6.73.90 () {42 vars in 674 bytes} [Sun Jan 26 11:41:31 2020] POST /packages => generated 0 bytes in 1127 msecs (HTTP/1.1 500) 0 headers in 0 bytes (0 switches on core 0)

ymartin59 avatar Jan 26 '20 10:01 ymartin59

I had to manually declare Docker service with SQL insert into service values (5, 'Docker'); to get package uploaded. From my point of view, spkrepo should automatically register new service when required for a package.

ymartin59 avatar Jan 26 '20 13:01 ymartin59

@ymartin59 I guess by the ID of your insert (5) that new SPKs are not automatically added as services upon which we can set dependency?

I'm asking whether it's specific to a dependency that we don't build (ie "docker") versus a dependency that we might build (ie depending on "python3")

chickenandpork avatar Mar 03 '20 10:03 chickenandpork

I'm not sure if we want that to be manual or not. I feel that having that much data validation in the DB is making things hard and there's no use for having a table with services.

Diaoul avatar Jul 14 '20 15:07 Diaoul