- 15 Jan, 2018 9 commits
-
-
Kirill Smelkov authored
Storage drivers can register themselves via zodb.RegisterDriver. Later cliens can request to open a storage by URL via zodb.OpenStorage. The opener will lookup driver registry and wrap created driver instance with common layer with cache etc to turn an IStorageDriver into fully working IStorage.
-
Kirill Smelkov authored
The cache is needed so that we can provide IStorage.Prefetch functionality generally wrapped on top of a storage driver: when an object is loaded, the loading itself consists of steps: 1. start loading object into cache, 2. wait for the loading to complete. This way Prefetch is naturally only "1" - start loading object into cache but do not wait for the loading to be complete. Go's goroutines naturally help here where we can spawn every such loading into its own goroutine instead of explicitly programming loading in terms of a state machine. Since this cache is mainly needed for Prefetch to work, not to actually cache data (though it works as cache for repeating access too), the goal when writing it was to add minimal overhead for "data-not-yet-in-cache" case. Current state we are not completely there yet but the latency is acceptable - depending on the workload the cache layer adds ~ 0.5 - 1 - 3µs to loading times.
-
Kirill Smelkov authored
ZODB/py serializes data using python pickles. Basically every serialized object has two parts: class description and object state. Here we start by providing minimal functionality to extract class-name from serialized data. The library used for pickle decoding (and in later patches encoding) is github.com/kisielk/og-rek It was audited by me for security flaws to some extent. Contrary to Python pickle module it does not run arbitrary code on decoding.
-
Kirill Smelkov authored
Since in ZODB TIDs are corresponding to time, provide functionality to convert a tid to timestamp. Do so in exactly the same way as ZODB/py does for interoperability.
-
Kirill Smelkov authored
-
Kirill Smelkov authored
Our path of implementing NEO in Go will be not only for server-side, but also for client-side, since it is needed by Wendelin.core. On server-side we'll also need to work with types and data model Python ZODB implementation uses, so here it goes: Start of ZODB in Go. Here we define ZODB data types, data model and operational interfaces for IStorage + friends. The interfaces are currently read-only with stubs for write mode.
-
Kirill Smelkov authored
Ignore files commonly produced while profiling Go programs and running tests.
-
Kirill Smelkov authored
We want to make sure the code can be used by all projects without a problem. This way the license is GPLv3+ with wide exception for all Free Software / Open Source projects + Business options. Nexedi stack is licensed under Free Software licenses with various exceptions that cover three business cases: - Free Software - Proprietary Software - Rebranding As long as one intends to develop Free Software based on Nexedi stack, no license cost is involved. Developing proprietary software based on Nexedi stack may require a proprietary exception license. Rebranding Nexedi stack is prohibited unless rebranding license is acquired. Through this licensing approach, Nexedi expects to encourage Free Software development without restrictions and at the same time create a framework for proprietary software to contribute to the long term sustainability of the Nexedi stack. Please see https://www.nexedi.com/licensing for details, rationale and options. ( NEO/py for now stays at the old terms but it will be upgraded to the same terms as NEO/go eventually )
-
Kirill Smelkov authored
Sync with current NEO in Python implementation as the first step. We'll be using some common bits and in particular on-the-wire protocol must be the same and for py/go interoperability testing we'll also need python parts.
-
- 05 Jan, 2018 1 commit
-
-
Julien Muchembled authored
-
- 21 Dec, 2017 1 commit
-
-
Julien Muchembled authored
-
- 15 Dec, 2017 3 commits
-
-
Julien Muchembled authored
-
Julien Muchembled authored
-
Julien Muchembled authored
-
- 13 Dec, 2017 1 commit
-
-
Julien Muchembled authored
-
- 11 Dec, 2017 3 commits
-
-
Kirill Smelkov authored
This information is handy to see how well cache performs. Amended by Julien Muchembled: - do not abbreviate some existing field names in repr result (asking the user to look at the source code in order to decipher logs is not nice) - hit: change from %.1f to %.3g - hit: hide it completely if nload is 0 - use __future__.division instead of adding more casts to float
-
Julien Muchembled authored
-
Julien Muchembled authored
-
- 05 Dec, 2017 2 commits
-
-
Julien Muchembled authored
-
Julien Muchembled authored
-
- 04 Dec, 2017 1 commit
-
-
Julien Muchembled authored
-
- 21 Nov, 2017 1 commit
-
-
Julien Muchembled authored
INFO Z2 Log files reopened successfully INFO SignalHandler Caught signal SIGTERM INFO Z2 Shutting down fast INFO ZServer closing HTTP to new connections ERROR ZODB.Connection Couldn't load state for BTrees.LOBTree.LOBucket 0xc12e29 Traceback (most recent call last): File "ZODB/Connection.py", line 909, in setstate self._setstate(obj, oid) File "ZODB/Connection.py", line 953, in _setstate p, serial = self._storage.load(oid, '') File "neo/client/Storage.py", line 81, in load return self.app.load(oid)[:2] File "neo/client/app.py", line 355, in load data, tid, next_tid, _ = self._loadFromStorage(oid, tid, before_tid) File "neo/client/app.py", line 387, in _loadFromStorage askStorage) File "neo/client/app.py", line 297, in _askStorageForRead self.sync() File "neo/client/app.py", line 898, in sync self._askPrimary(Packets.Ping()) File "neo/client/app.py", line 163, in _askPrimary return self._ask(self._getMasterConnection(), packet, File "neo/client/app.py", line 177, in _getMasterConnection result = self.master_conn = self._connectToPrimaryNode() File "neo/client/app.py", line 202, in _connectToPrimaryNode index = (index + 1) % len(master_list) ZeroDivisionError: integer division or modulo by zero
-
- 19 Nov, 2017 1 commit
-
-
Julien Muchembled authored
-
- 17 Nov, 2017 4 commits
-
-
Julien Muchembled authored
-
Julien Muchembled authored
-
Julien Muchembled authored
-
Julien Muchembled authored
-
- 15 Nov, 2017 1 commit
-
-
Julien Muchembled authored
It's not possible yet to replicate a node that is importing data. One must wait that the migration is finished.
-
- 07 Nov, 2017 2 commits
-
-
Julien Muchembled authored
-
Julien Muchembled authored
-
- 31 Oct, 2017 1 commit
-
-
Kirill Smelkov authored
The project to implement NEO storage and probably other pieces in Go with the goal to have much lower request-reply latencies and much better scalability when serving many clients compared to NEO implemented in Python.
-
- 27 Oct, 2017 1 commit
-
-
Julien Muchembled authored
-
- 29 Sep, 2017 3 commits
-
-
Julien Muchembled authored
This reverts commit d3c22487 partially and fixes the bug in a much simpler way.
-
Julien Muchembled authored
-
Julien Muchembled authored
Traceback (most recent call last): [...] File "neo/storage/handlers/client.py", line 115, in askStoreObject *e.args) File "neo/lib/handler.py", line 333, in queueEvent self.sortQueuedEvents() File "neo/lib/handler.py", line 326, in <lambda> self._event_queue.sort(key=key))() File "neo/storage/transactions.py", line 67, in __lt__ return self.locking_tid < other.locking_tid AttributeError: 'NoneType' object has no attribute 'locking_tid' Pending events: (None, <askFetchTransactions: ...>) (<Transaction(C13, locking_tid=03c266508a058388, tid=None, age=0.21s) at 0x7f086bbc3d50>, <_askStoreObject: ...>)
-
- 11 Sep, 2017 1 commit
-
-
Julien Muchembled authored
-
- 05 Sep, 2017 1 commit
-
-
Julien Muchembled authored
It was out-of-date since commit 23b6a66a.
-
- 28 Aug, 2017 1 commit
-
-
Julien Muchembled authored
-
- 11 Jul, 2017 1 commit
-
-
Julien Muchembled authored
This time we had issues with _getObject and getReplicationObjectList on production. It seems related to the upgrade of MariaDB, from 10.0.21 to 10.1.25. See also commits eaa00a88 and 13911ca3
-
- 04 Jul, 2017 1 commit
-
-
Julien Muchembled authored
-