You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: doc/migrations/6.3.1_6.x.y.md
+45
Original file line number
Diff line number
Diff line change
@@ -36,3 +36,48 @@ It is also possible to completely disable client certificate verification during
36
36
handshake in `just_tls` by setting `tls.verify_mode` to `none`.
37
37
38
38
For more information regarding configuration of TLS for C2S see [Listener modules](../listeners/listen-c2s/#tls-options-for-c2s)
39
+
40
+
## `exml` upgraded to 4.0
41
+
42
+
### Change of internal format of XML messages affects the ways to upgrade MongooseIM cluster
43
+
44
+
`exml` library used for parsing and emitting of XML messages was upgraded to version 4.0.
45
+
In this new version internal representation of XML elements changed - element attributes
46
+
are stored in a map (previously in a key value list).
47
+
48
+
This is a disruptive change, and rollback to previous version is not possible.
49
+
50
+
Parsed XML messages are being sent within MongooseIM cluster between Erlang nodes in internal representation,
51
+
so to understand received messages (Erlang terms), all nodes must have the same code that handle XML elements. This makes a rolling upgrade
52
+
(an upgrade of a cluster node by node) not viable for this release.
53
+
54
+
One solution is to stop the whole MongooseIM cluster, upgrade and start again.
55
+
56
+
The second solution is to configure a new cluster running new version
57
+
alongside the old cluster, and migrate traffic from the old one to the new one.
58
+
59
+
There is a third solution, which allows to maintain service availability but not requiring building a full new cluster.
60
+
In this solution, you upgrade nodes one by one (like in the rolling upgrade), but change configuration to not allow
61
+
upgraded node to rejoin the old cluster, but instead run as a new cluster.
62
+
That way all nodes are migrated one by one to the newly formed cluster. Both clusters have access the same database.
63
+
64
+
One warning regarding this solution: There is a corner case regarding access to archived messages only while both clusters
65
+
are operating simultaneously. It may happen that users still connected to the old cluster try to retrieve newly archived messages.
66
+
This will result in errors and possibly crashes as the old code doesn't recognise new internal representation.
67
+
We just want to warn the operator about such possibility, the chance of it happening is slight, as we recommend the upgrade
68
+
to be undertaken during the time of minimal traffic.
69
+
70
+
### Archived XML - mod_mam
71
+
72
+
Change of XML element representation also affects stored or archived messages, if they are stored in the internal Erlang term format.
73
+
74
+
There is a config setting `modules.mod_mam.db_message_format` which controls the message format for archived messages
75
+
and its default is different depending on the database backend used.
76
+
The default for RDBMS databases is `mam_message_compressed_eterm` (which is Erlang term format) while for Cassandra it is `mam_message_xml`.
77
+
78
+
Messages stored in XML textual format (`mam_message_xml`) are not affected by `exml` version change.
79
+
80
+
For messages stored as Erlang term (`mam_message_compressed_eterm` or `mam_message_eterm`), we provide transparent retrieval of the old format, while new messages will be written in the archive in
81
+
the new format. This means that the change of the format is transparent in operations of MongooseIM.
82
+
However if you have external tools accessing message archive, you may need to verify that they work correctly with the new internal XML element representation.
0 commit comments