- 26 Apr, 2023 6 commits
-
-
Levin Zimmermann authored
When connecting to a master node, the client needs to try a different master if the initially tried one is a secondary master node. This statement wasn't implemented yet before this patch and therefore it was good luck if the initally tried master was the primary one - and the connection worked - or if it was a secondary master - and the client got stuck in re-trying the same node forever. This patch makes NEO/go usage with clusters of more than one master therefore much more stable.
-
Levin Zimmermann authored
After initial handshake a NEO node checks the identification of its peer by sending the 'RequestIdentification' packet. In case the peer is a secondary master it responds with 'NotPrimaryMaster'. Before this patch 'Dial' ignored the 'NotPrimaryMaster' packet and simply returned a general error. Now - after this patch - 'Dial' returns an instance of 'proto.NotPrimaryMaster' (which implements 'Error'). This helps a caller to correctly handle the secondary-master-case, which otherwise is impossible to differentiate from any other error possibility.
-
Levin Zimmermann authored
When a client receives `NotPrimaryMaster` from a secondary master, the situation is similar as when we receive an error: the other node tells, don't connect with me, connect with someone else. Finally the peer even closes the connection. Due to this similarity in structure (& because it helps us later to teach NEO/go to correctly handle `NotPrimaryMaster` with minimal changes), we implement `Error` for `NotPrimaryMaster`.
-
Levin Zimmermann authored
-
Levin Zimmermann authored
-
Levin Zimmermann authored
-
- 19 Apr, 2023 4 commits
-
-
Levin Zimmermann authored
-
Levin Zimmermann authored
In a NEO URI more than one master node can be specified, because a NEO cluster may have more masters than one. But before this patch 'openClientByURL' always assumed that the given URL only specifies one master. Now the host is split into potentially > 1 master nodes. It therefore works now in the same way as the Python implementation [1]. [1] https://lab.nexedi.com/nexedi/neoppod/blob/342168cd/neo/client/zodburi.py#L64
-
Levin Zimmermann authored
Before this patch Client.URL didn't contain more than one master node. This can be problematic in case we have a cluster with > 1 master nodes and the printer master is a secondary master (which may be down). In this case the user who trusts the "URL" attribute to connect to the cluster won't succeed, because the primary master can't be reached.
-
Levin Zimmermann authored
Some NEO clusters have more than one master to gain a higher availability. Before this patch NEO/go Node type only handled one master address. This commit adjusts the node type and related bits so that it can support more than one master node.
-
- 18 Jan, 2023 3 commits
-
-
Kirill Smelkov authored
* master: go/neo: Expand user prefix in TLS key/cert paths go/neo/interal += xpath, xfilepath
-
Levin Zimmermann authored
This patch fixes a discrepancy between NEO/py and NEO/go: NEO/py expands the '~' and the '~username' prefix in the file path of the TLS certificate/key files [1]. This syntax is used in NEO/py SlapOS SR [2]. We need to fix this discrepancy in NEO/go in order to use TLS encryption with NEO + WCFS. [1] https://lab.nexedi.com/nexedi/neoppod/blob/7c539f0f/neo/lib/config.py#L149 and https://lab.nexedi.com/nexedi/neoppod/blob/fa63d856/neo/lib/app.py#L25-31 [2] https://lab.nexedi.com/nexedi/slapos/blob/397726e1/stack/erp5/instance-zodb-base.cfg.in#L18-20 and https://lab.nexedi.com/nexedi/slapos/blob/a8150a1a/software/neoppod/instance-neo-input-schema.json#L62 /reviewed-by @kirr /reviewed-on kirr/neo!1
-
Levin Zimmermann authored
The xfilepath package supports resolving filepaths with a user prefix to absolute paths: it converts '~' and '~username' to $HOME of user (as it's done by for instance bash). No builtin golang module supports this functionality [1]. We need this functionality in order to imitate the behaviour of NEO/py in NEO/go [2]. --- [1] https://stackoverflow.com/questions/47261719/how-can-i-resolve-a-relative-path-to-absolute-path-in-golang) [2] nexedi/slapos!1307 (comment 17574) /reviewed-by @kirr /reviewed-on !1
-
- 04 Nov, 2022 1 commit
-
-
Kirill Smelkov authored
-
- 03 Nov, 2022 1 commit
-
-
Kirill Smelkov authored
* master: go/neo/t/neotest: Use python -c 'print ...' in a way that works on both py2 and py3 go/neo/t/tzodb.py: Fix zhash for Python3
-
- 18 May, 2022 2 commits
-
-
Kirill Smelkov authored
Without parenthesis it was failing on py3: (neo) (py3.venv) (g.env) kirr@deca:~/src/neo/src/lab.nexedi.com/kirr/neo/go/neo/t$ ./neotest info-local date: Wed, 18 May 2022 11:05:50 +0300 xnode: kirr@deca.navytux.spb.ru (2401:5180:0:af::1 192.168.0.3 (+ 1·ipv4)) uname: Linux deca 5.10.0-13-amd64 #1 SMP Debian 5.10.106-1 (2022-03-17) x86_64 GNU/Linux cpu: Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz File "<string>", line 1 print '%.2fGHz' % (400000 / 1E6) ^ SyntaxError: invalid syntax
-
Kirill Smelkov authored
On py3 dict.keys() returns iterator instead of list: $ ./tzodb.py zhash Traceback (most recent call last): File "/home/kirr/src/neo/src/lab.nexedi.com/kirr/neo/go/neo/t/./tzodb.py", line 141, in <module> main() File "/home/kirr/src/neo/src/lab.nexedi.com/kirr/neo/go/neo/t/./tzodb.py", line 138, in main zhash() File "/home/kirr/src/neo/src/lab.nexedi.com/kirr/neo/go/neo/t/./tzodb.py", line 59, in zhash optv, argv = getopt(sys.argv[2:], "h", ["help", "check=", "bench="] + hashRegistry.keys()) TypeError: can only concatenate list (not "dict_keys") to list
-
- 25 Nov, 2021 2 commits
-
-
Kirill Smelkov authored
* master: go/internal/xurl: New package (draft)
-
Kirill Smelkov authored
With xurl.ParseQuery being simpler analog of url.ParseQuery. Simpler: It returns regular map instead of url.Values by not allowing duplicates.
-
- 24 Nov, 2021 1 commit
-
-
Kirill Smelkov authored
Instead of requiring users to explicitly mark their tests as finished in particular subject-to-deadlock places, tracetest was fixed to unconditionally detect "extra sends" deadlocks automatically: kirr/go123@3b19f68c
-
- 19 Nov, 2021 2 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 12 Nov, 2021 1 commit
-
-
Kirill Smelkov authored
go get: upgraded github.com/fsnotify/fsnotify v1.4.10-0.20200417215612-7f4cf4dd2b52 => v1.5.1 go get: upgraded github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b => v1.0.0 go get: upgraded github.com/gwenn/gosqlite v0.0.0-20201008200117-82e079acf5b6 => v0.0.0-20211101095637-b18efb2e44c8 go get: upgraded github.com/gwenn/yacr v0.0.0-20200112083327-bbe82c1f4d60 => v0.0.0-20211101095056-492fb0c571bc go get: upgraded github.com/kisielk/og-rek v1.1.0 => v1.2.0 go get: upgraded github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5 => v0.1.5 go get: upgraded github.com/tinylib/msgp v1.1.5 => v1.1.6 go get: upgraded golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 => v0.0.0-20211111160137-58aab5ef257a go get: upgraded golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b => v0.0.0-20211111213525-f221eed1c01e go get: upgraded golang.org/x/text v0.3.5 => v0.3.7 go get: upgraded lab.nexedi.com/kirr/go123 v0.0.0-20210128150852-c20e95f0f789 => v0.0.0-20210906140734-c9eb28d9e408 Highlights: - og-rek brings support for pickle protocol 5 - go123 brings in support for Go1.17
-
- 04 Oct, 2021 13 commits
-
-
Kirill Smelkov authored
* master: go/zodb/btree: Change V<op> family to also provide visited node key coverage on visit callback go/zodb/btree: Add KeyRange type go/zodb/btree: Introduce constants for min/max key value go/zodb/btree: tests: Don't forget to close storage go/zodb/btree: Cosmetics
-
Kirill Smelkov authored
WCFS needs to know key coverage for every visited node. WARNING: this is API change.
-
Kirill Smelkov authored
KeyRange represents [lo,hi) key range. It simplifies working with ranges of keys. We will use it in the next commit. KeyRange originated in WCFS and was copied from there: https://lab.nexedi.com/kirr/wendelin.core/blob/57be0126/wcfs/internal/xbtree/blib/keyrange.go
-
Kirill Smelkov authored
We were already using math.Min<Key> in one place, but the number of such places is going to increase. -> Keep min/max definition in only one place.
-
Kirill Smelkov authored
NOTE: db was already being closed in the test's code.
-
Kirill Smelkov authored
-
Kirill Smelkov authored
* t+btree: . . . . . . . X Start reworking BTree to provide keycov on visit callback
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 01 Oct, 2021 2 commits
-
-
Kirill Smelkov authored
-
Kirill Smelkov authored
-
- 08 Sep, 2021 2 commits
-
-
Kirill Smelkov authored
Due to security concerns, go1.17, even though very reluctantly, similarly to Python broke backward compatibility and stopped to treat ';' as separator when parsing URL queries. We still want to accept ';' as separator in credential part. -> Work it around by replacing ';' -> to '&'. See https://golang.org/doc/go1.17#semicolons and https://github.com/golang/go/issues/25192 for context. See also: cf685fb5 (fixup! Y client: Fix URI scheme to move credentials out of query)
-
Kirill Smelkov authored
parse_qsl no longer treats ';' as valid query separator for security reason because most proxies did not do so and it was possible to poison proxy cache due to difference in query separator handling (see bugs.python.org/issue42967). To handle credentials we don't have any proxy here, and it is still perfectly valid to use ';' as credentials separator. -> Fix it with ';' -> '&' replace workaround, before feeding credentials string to parse_qsl. Amends: b9a42957.
-