1. 20 Mar, 2020 1 commit
  2. 16 Mar, 2020 2 commits
  3. 14 Feb, 2020 1 commit
    • master: fix tpc_finish possibly trying to kill too many nodes after client-storage failures · 82eea0cd
      When concurrent transactions fail with different storages (e.g. only network
      issues between C1-S2 and C2-S1), in such a way that each transaction can be
      committed but not both (or the cluster would be non-operational), and if the
      first transaction is aborted (between tpc_vote and tpc_finish), then the second
      wrongly failed with INCOMPLETE_TRANSACTION.
      And if both transactions could be committed (e.g. more than 1 replica),
      some nodes would be disconnected for nothing.
      Julien Muchembled committed
  4. 21 Jan, 2020 1 commit
  5. 10 Jan, 2020 1 commit
    • master: fix crash of backup master when disconnected from upstream while serving clients · 7e8ca9ec
      This fixes:
        Traceback (most recent call last):
          File "neo/master/app.py", line 172, in run
          File "neo/master/app.py", line 182, in _run
          File "neo/master/app.py", line 314, in playPrimaryRole
          File "neo/master/backup_app.py", line 101, in provideService
          File "neo/master/app.py", line 474, in changeClusterState
            ) or not node.isClient(), (state, node)
        AssertionError: (<EnumItem STARTING_BACKUP (4)>, <ClientNode(uuid=C1, state=RUNNING, connection=<ServerConnection(nid=C1, address=, handler=ClientReadOnlyServiceHandler, fd=59, on_close=onConnectionClosed, server) at 7f38f5628390>) at 7f38f5628ad0>)
      Julien Muchembled committed
  6. 07 Jan, 2020 1 commit
    • admin: fix handling of immediate connection failure to upstream admin · e2b11d54
      In such case, it didn't reconnect, but thought it was connected,
      which eventually led to crashes like:
        Traceback (most recent call last):
          File "neo/admin/handler.py", line 130, in answerClusterState
            self.app.updateMonitorInformation(None, cluster_state=state)
          File "neo/admin/app.py", line 274, in updateMonitorInformation
          File "neo/lib/connection.py", line 565, in send
            raise ConnectionClosed
      Julien Muchembled committed
  7. 26 Dec, 2019 2 commits
  8. 13 Nov, 2019 1 commit
    • admin: fix possible crash when connecting to upstream admin · d4603189
      This fixes:
        Traceback (most recent call last):
          File "neo/scripts/neoadmin.py", line 31, in main
          File "neo/admin/app.py", line 179, in run
          File "neo/admin/app.py", line 199, in _run
          File "neo/lib/event.py", line 155, in poll
          File "neo/lib/event.py", line 220, in _poll
            if conn.readable():
          File "neo/lib/connection.py", line 487, in readable
          File "neo/lib/connection.py", line 545, in _closure
          File "neo/lib/connection.py", line 534, in close
          File "neo/admin/handler.py", line 210, in connectionClosed
          File "neo/admin/app.py", line 230, in connectToUpstreamAdmin
            None, None, self.name, None, {}))
          File "neo/lib/connection.py", line 574, in ask
            raise ConnectionClosed
      Julien Muchembled committed
  9. 22 Oct, 2019 3 commits
  10. 17 Oct, 2019 3 commits
  11. 14 Oct, 2019 5 commits
  12. 16 Aug, 2019 3 commits
    • Bump protocol version · c681f666
      Julien Muchembled committed
    • protocol: small cleanup in packet registration · c156f11a
      Same as commit a00ab78b.
      It was reverted mistakenly when switching to msgpack.
      Julien Muchembled committed
    • New feature: monitoring · e434c253
      This task is done by the admin node, in 2 possible ways:
      - email notifications, as soon as some state change;
      - new 'neoctl print summary' command that can be used periodically
        to check the health of the database.
      They report the same information.
      About backup clusters:
      The admin of the main cluster also monitors selected backup clusters,
      with the help of their admin nodes.
      Internally, when a backup master node connects to the upstream master node,
      it receives the address of the upstream admin node and forwards it to its
      admin node, which is therefore able to connect to the upstream admin node.
      So the 2 admin nodes remain connected and communicate in 2 ways:
      - the backup node notifies upstream about the health of the backup cluster;
      - the upstream node queries the backup node periodically to check whether
        replication is not too late.
      A few things are hard-coded and we may want to configure them:
      - backup lateness is checked every 10 min;
      - backup is expected to never be late.
      There's also no delay to prevent 2 consecutive emails from having the same
      Date: (unfortunately, the RFC 5322 does not allow sub-second precision),
      in which case the MUA can display them in random order. This is mostly
      confusing when one notification is OK and the other is not, because one
      may wonder if there's a new problem.
      Julien Muchembled committed
  13. 05 Jun, 2019 2 commits
  14. 29 May, 2019 1 commit
  15. 28 May, 2019 1 commit
  16. 24 May, 2019 1 commit
  17. 20 May, 2019 1 commit
  18. 09 May, 2019 3 commits
  19. 30 Apr, 2019 3 commits
    • importer: fix writeback of transactions during which readCurrent() was used · 042f5ac0
      Contrary to FileStorage, NEO remembers uses of readCurrent().
      Julien Muchembled committed
    • master: fix crash in STARTING_BACKUP when connecting to an upstream secondary master · dba07e72
      This fixes the following assertion:
        Traceback (most recent call last):
          File "neo/master/app.py", line 172, in run
          File "neo/master/app.py", line 182, in _run
          File "neo/master/app.py", line 302, in playPrimaryRole
          File "neo/master/backup_app.py", line 114, in provideService
            node, conn = bootstrap.getPrimaryConnection()
          File "neo/lib/bootstrap.py", line 74, in getPrimaryConnection
          File "neo/lib/event.py", line 160, in poll
          File "neo/lib/connection.py", line 504, in process
            self._handlers.handle(self, self._queue.pop(0))
          File "neo/lib/connection.py", line 92, in handle
            self._handle(connection, packet)
          File "neo/lib/connection.py", line 107, in _handle
            pending[0][1].packetReceived(connection, packet)
          File "neo/lib/handler.py", line 125, in packetReceived
          File "neo/lib/handler.py", line 75, in dispatch
            method(conn, *args, **kw)
          File "neo/lib/handler.py", line 159, in notPrimaryMaster
            assert primary != self.app.server
        AttributeError: 'BackupApplication' object has no attribute 'server'
      Julien Muchembled committed
  20. 28 Apr, 2019 3 commits
    • qa: add testrunner options to dump/check the format of network packets · e3cd5c5b
      With the switch to msgpack, there was no schema anymore whereas it was
      sometimes used for both automatic conversion (e.g. the last argument of
      AskStoreTransaction must now be explicitly cast to list) and type checking.
      This somewhat reintroduces a kind of schema that:
      - is used by the test suite for type checking
      - can be generated automatically from the test suite
        when one change the procotol
      Julien Muchembled committed
    • protocol: switch to msgpack for packet serialization · 9d0bf97a
      Not only for performance reasons (at least 3% faster) but also because of
      several ugly things in the way packets were defined:
      - packet field names, which are only documentary; for roots fields,
        they even just duplicate the packet names
      - a lot of repetitions for packet names, and even confusion between the name
        of the packet definition and the name of the actual notify/request packet
      - the need to implement field types for anything, like PByte to support new
        compression formats, since PBoolean is not enough
      neo/lib/protocol.py is now much smaller.
      Julien Muchembled committed
    • Release version 1.12 · 6332112c
      Julien Muchembled committed
  21. 27 Apr, 2019 1 commit