Nothing to see here, move along…
When a new Pracro session is initiated, a connection to PostgreSQL is made. All commands (strings) issued to this connection, will be appended to a string contained in the session class. This string will be serialised with the rest of the session data upon pracrod shutdown and re-read on startup. The first SQL command issued is BEGIN; If a 'commit' is received by the pracro server, it is translated into a COMMIT; on the SQL connection and the command string is cleared. If the client disconnects without any actions, an ROLLBACK; is sent to the SQL server. On reconnect to the session, the entire command string is replayed as it is, and the session is ready to continue where it left off. On the Pracro 'discard' command, a ROLLBACK; is sent to the SQL server, and the command string is cleared.
Person A now thinks that the journal contains “data from B”. But in fact it contains
data from B data from A
This is due to two problems: The field shown on the active session is not nesecarily the one being commit, when the entire session is committed. Second person A cannot see what changes has been made by others.