Commit Graph

10 Commits

Author SHA1 Message Date
Colin Walters
3e289ffab0 daemon: Drop internal mutexes for sysroot
Now that the internal reading methods operate on the mainloop, and we
know there can only be one write transaction at a time, it should be
safe to drop the internal mutexes (and multithreading).

Updates to the `OstreeSysroot` instance and DBus API all happen off
the mainloop now.  The write transactions now use a separate
`OstreeSysroot` instance, and do not perform any changes to process
state on their own.  We always reload state from disk.

I think this is a lot simpler to reason about from a correctness point
of view, at a likely negligble loss in performance for read
transactions.
2016-03-08 14:54:22 -05:00
Colin Walters
6f13c39aba transaction: Hoist main context wrapper creation up
Every transaction runs in a thread now, and there's no real drawback
to consistently creating a main context to go with it always.  Most
of the transaction types now do a pull, which needs it.
2016-03-08 14:54:22 -05:00
Colin Walters
7c970e3860 daemon: Maintain sysroot/repo persistently, close race in change updates
Now that we have `ostree_sysroot_load_if_changed()`, we know more
precisely (and cheaply) when things change.  Use inotify to detect
changes as before, but we don't need a timeout because all we do is
call `fstatat()` which is basically free; the inode is going to be in
memory.

This will hopefully help with
https://github.com/projectatomic/rpm-ostree/issues/220
but more investigation is needed.
2016-03-08 14:54:22 -05:00
Colin Walters
b82f7338ea src: Quiet a few gcc -Wmaybe-uninitialized warnings
GCC (at least 5.2.1) isn't smart enough to figure out these are always
initialized.
2015-11-23 12:08:37 -05:00
Matthew Barnes
a388f986bb daemon: Don't keep persistent OstreeSysroot instance
Create and load a new OstreeSysroot and OstreeRepo instance as needed.
This ensures its internal state is up-to-date, since several ostree
commands can alter stored state without the daemon's knowledge.

I would prefer keeping persistent instances if these issues can be
addressed, as it would eliminate some inconvenient error handling.
But this way is safer for now.
2015-09-09 22:00:05 -04:00
Matthew Barnes
9c0e87bc75 daemon: Share Transaction address for identical requests
If a client makes a request that is identical (that is, same method name
and same parameters) to an ongoing transaction, return the bus address of
that transaction.  The client can then "tune in" to the progress messages.
(Remember the Transaction.Start() method returns a boolean to distinguish
a newly-started transaction from an ongoing transaction.)

The driving use case for this is a dropped ssh connection during a long
running transaction -- like "upgrade" -- and being able to reattach to
the transaction's progress messages mid-stream.
2015-09-09 22:00:05 -04:00
Matthew Barnes
b3189b6ae4 daemon: Support multiple Transaction connections
Few things to note:

 - Cancelling a transaction no longer immediately destroys it.

 - Transaction is destroyed when finished (or cancelled) and has
   no client connections.

 - If a client attaches to a finished transaction and calls Start(),
   the transaction will re-emit the Finished signal to that client.

 - The transaction bus address is not yet shared across multiple
   clients, so multiple connections doesn't actually work from the
   outside yet.  It's just supported internally.
2015-09-09 22:00:05 -04:00
Matthew Barnes
24f01556a0 daemon: Make the Transaction.Start() method idempotent
Add a boolean return so callers can distinguish between actually starting
the transaction or reattaching to an in-progress transaction.
2015-09-09 22:00:05 -04:00
Matthew Barnes
6e28454e6d daemon: Change bus name watching semantics
Only watch the caller's bus name until the transaction is started.
Thereafter the transaction proceeds independently of the calling
process.
2015-09-09 22:00:05 -04:00
Matthew Barnes
aaadcba77b daemon: Rename all the things!
Use 'rpmostreed' as the symbol prefix.
2015-09-09 22:00:05 -04:00