Commit a2b8516c authored by Kirill Smelkov's avatar Kirill Smelkov

go/neo/proto: Don't require deletedAt to be present in OID_NOT_FOUND

Providing deletedAt in addition to oid in OID_NOT_FOUND error is NEO/go extension.
NEO/py sends only OidNotFound(oid):

https://lab.nexedi.com/nexedi/neoppod/blob/v1.12-0-g6332112c/neo/storage/handlers/client.py#L70-72

-> decode deletedAt only if it is present.

Since inspecting NEO/py codebase turned out that message always comes
with oid, remove the "abusing" words about this approach to convey oid
via error message for OID_NOT_FOUND and OID_DOES_NOT_EXIST.

Without this patch TestLoad was failing as

    === RUN   TestLoad/py
    I: runneo.py: /tmp/neo124851059/1: started master(s): 127.0.0.1:19681
        xtesting.go:306: load 0285cbac258bf265:0000000000000000: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbac258bf265:0000000000000000: OID_NOT_FOUND: 0000000000000000
            want: neo://1@127.0.0.1:19681: load 0285cbac258bf265:0000000000000000: 0000000000000000: object was not yet created
        xtesting.go:306: load 0285cbac3d0369e5:0000000000000001: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbac3d0369e5:0000000000000001: OID_NOT_FOUND: 0000000000000001
            want: neo://1@127.0.0.1:19681: load 0285cbac3d0369e5:0000000000000001: 0000000000000001: object was not yet created
        xtesting.go:306: load 0285cbac41b4e832:0000000000000002: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbac41b4e832:0000000000000002: OID_NOT_FOUND: 0000000000000002
            want: neo://1@127.0.0.1:19681: load 0285cbac41b4e832:0000000000000002: 0000000000000002: object was not yet created
        xtesting.go:306: load 0285cbac4666667f:0000000000000003: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbac4666667f:0000000000000003: OID_NOT_FOUND: 0000000000000003
            want: neo://1@127.0.0.1:19681: load 0285cbac4666667f:0000000000000003: 0000000000000003: object was not yet created
        xtesting.go:306: load 0285cbac4fc96318:0000000000000004: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbac4fc96318:0000000000000004: OID_NOT_FOUND: 0000000000000004
            want: neo://1@127.0.0.1:19681: load 0285cbac4fc96318:0000000000000004: 0000000000000004: object was not yet created
        xtesting.go:306: load 0285cbac547ae165:0000000000000005: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbac547ae165:0000000000000005: OID_NOT_FOUND: 0000000000000005
            want: neo://1@127.0.0.1:19681: load 0285cbac547ae165:0000000000000005: 0000000000000005: object was not yet created
        xtesting.go:306: load 0285cbac628f5c4b:0000000000000006: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbac628f5c4b:0000000000000006: OID_NOT_FOUND: 0000000000000006
            want: neo://1@127.0.0.1:19681: load 0285cbac628f5c4b:0000000000000006: 0000000000000006: object was not yet created
        xtesting.go:306: load 0285cbaca444447f:0000000000000007: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbaca444447f:0000000000000007: OID_NOT_FOUND: 0000000000000007
            want: neo://1@127.0.0.1:19681: load 0285cbaca444447f:0000000000000007: 0000000000000007: object was not yet created
        xtesting.go:306: load 0285cbacbbbbbbff:0000000000000008: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbacbbbbbbff:0000000000000008: OID_NOT_FOUND: 0000000000000008
            want: neo://1@127.0.0.1:19681: load 0285cbacbbbbbbff:0000000000000008: 0000000000000008: object was not yet created
        xtesting.go:306: load 0285cbad80da7498:0000000000000009: returned err unexpected:
            have: neo://1@127.0.0.1:19681: load 0285cbad80da7498:0000000000000009: OID_NOT_FOUND: 0000000000000009
            want: neo://1@127.0.0.1:19681: load 0285cbad80da7498:0000000000000009: 0000000000000009: object was not yet created
parent dacce3d1
...@@ -43,14 +43,14 @@ func ZODBErrEncode(err error) *Error { ...@@ -43,14 +43,14 @@ func ZODBErrEncode(err error) *Error {
switch err := err.(type) { switch err := err.(type) {
case *zodb.NoDataError: case *zodb.NoDataError:
// XXX abusing message for oid, deletedAt // message: oid(,deletedAt)?
return &Error{ return &Error{
Code: OID_NOT_FOUND, Code: OID_NOT_FOUND,
Message: err.Oid.String() + "," + err.DeletedAt.String(), Message: err.Oid.String() + "," + err.DeletedAt.String(),
} }
case *zodb.NoObjectError: case *zodb.NoObjectError:
// XXX abusing message for oid // message: oid
return &Error{Code: OID_DOES_NOT_EXIST, Message: err.Oid.String()} return &Error{Code: OID_DOES_NOT_EXIST, Message: err.Oid.String()}
default: default:
...@@ -66,20 +66,25 @@ func ZODBErrEncode(err error) *Error { ...@@ -66,20 +66,25 @@ func ZODBErrEncode(err error) *Error {
func ZODBErrDecode(e *Error) error { func ZODBErrDecode(e *Error) error {
switch e.Code { switch e.Code {
case OID_NOT_FOUND: case OID_NOT_FOUND:
// XXX abusing message for oid, deletedAt // message: oid(,deletedAt)?
zerr := &zodb.NoDataError{}
argv := strings.Split(e.Message, ",") argv := strings.Split(e.Message, ",")
if len(argv) != 2 { var err error
zerr.Oid, err = zodb.ParseOid(argv[0])
if err != nil {
break break
} }
oid, err0 := zodb.ParseOid(argv[0]) if len(argv) >= 2 {
del, err1 := zodb.ParseTid(argv[1]) zerr.DeletedAt, err = zodb.ParseTid(argv[1])
if !(err0 == nil && err1 == nil) { if err != nil {
break break
} }
return &zodb.NoDataError{Oid: oid, DeletedAt: del} }
return zerr
case OID_DOES_NOT_EXIST: case OID_DOES_NOT_EXIST:
oid, err := zodb.ParseOid(e.Message) // XXX abusing message for oid // message: oid
oid, err := zodb.ParseOid(e.Message)
if err == nil { if err == nil {
return &zodb.NoObjectError{oid} return &zodb.NoObjectError{oid}
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment