Hi everybody,

Thanks for highlighting this in a public thread.

Before switching to snaps, please consider mongodb lifetime as snapd
does not give you any strict lifetime guarantees as of now:

1. it will try to stop a service on update;
2. will send SIGTERM if that timed out;
3. if processes in the unit's cgroup are still alive after a SIGTERM
timeout it will SIGKILL all of them.

Now, it might be a good idea from the first sight to keep stuff
updated, but I do not want to be in a situation where I have to
explain to a customer that his model is corrupted due to an update
that happened during his 100-node deployment or an update process
where there have been a high volume of traffic preventing the mongodb
service from stopping.

Even if a database could be recovered after a forced crash, filing
charm bugs and restoring a correct state after some lost events would
be a nightmare.

It is a question of update safety which is quite generic.

Please take a look at the forum thread below and an e-mail thread. I
had exactly the same question for libvirt and QEMU. This is valid for
any critical services such as LXD, docker, openvswitch etc.

https://forum.snapcraft.io/t/process-lifecycle-on-snap-refresh/140
https://lists.ubuntu.com/archives/snapcraft/2017-March/003674.html

https://bugs.launchpad.net/snappy/+bug/1632508

Just follow the code path below and you will see it:

https://github.com/snapcore/snapd/blob/release/2.26/overlord/snapstate/snapstate.go#L582-L601

https://github.com/snapcore/snapd/blob/release/2.26/overlord/snapstate/snapstate.go#L113-L123

https://github.com/snapcore/snapd/blob/release/2.26/overlord/snapstate/snapmgr.go#L324-L326

https://github.com/snapcore/snapd/blob/release/2.26/overlord/snapstate/handlers.go#L770-L791

https://github.com/snapcore/snapd/blob/release/2.26/overlord/snapstate/backend/link.go#L81-L83

systemctl stop -> SIGTERM -> SIGKILL
https://github.com/snapcore/snapd/blob/release/2.26/wrappers/services.go#L107-L127

The actual implementation which just calls systemd:
https://github.com/snapcore/snapd/blob/release/2.26/systemd/systemd.go#L279-L323

Or, in a single paste but for an earlier version
https://paste.ubuntu.com/24262077/

----

Have you guys considered that? I understand Juju client updates but we
should really be careful about mongodb updates.

This is a critical point to consider - please don't ignore it.

---

LXD and snapd:

squashfuse must be installed in a container in order for this to work.
Unless you have that, you cannot mount a squashfs file system as there
is no CAP_SYS_ADMIN for unprivileged containers:

http://man7.org/linux/man-pages/man7/capabilities.7.html

"CAP_SYS_ADMIN
...
Perform a range of system administration operations including: ...
mount(2), umount(2),..."

https://lwn.net/Articles/486306/

snapd does not depend on squashfuse currently:
https://packages.ubuntu.com/xenial-updates/snapd

https://packages.ubuntu.com/search?keywords=squashfuse

---

Offline upgrades:

A CDN is used to distribute snap packages, hence, this requires a more
careful handling for offline environments.

See my answer here for hostnames I have found to be used:
https://lists.ubuntu.com/archives/juju/2017-March/008795.html

Technically, a snap store is a web application giving certain files
away by virtue of a REST API.
https://wiki.ubuntu.com/AppStore/Interfaces/ClickPackageIndex

Somebody even tried creating their own bare-bones snap store but this
story is not production-ready yet in my view.
https://github.com/noise/snapstore

Hence, for the field team to use it, we need to have a good story for
that - it would make our live much harder if there wasn't any verified
solution for this.

---

I am open to any feedback regarding auto-updates and offline updates
as this will directly impact what I do.

Thanks in advance.

On 23 Jun 2017 09:08, "Danilo Šegan" <dan...@canonical.com> wrote:

У пет, 23. 06 2017. у 09:00 +0200, Danilo Šegan пише:


...there's no way to do lock-step upgrades...


That's, of course, too strong. What I meant was that there is no way
to do lock-step upgrades while using the default daemon
specifications: you can always decide to do the systemd control of
services yourself.

Cheers,
Danilo

--
Juju-dev mailing list
Juju-dev@lists.ubuntu.com
Modify settings or unsubscribe at:
https://lists.ubuntu.com/mailman/listinfo/juju-dev

-- 
Juju-dev mailing list
Juju-dev@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/juju-dev

Reply via email to