Skip to content
Snippets Groups Projects
  • Vladislav Shpilevoy's avatar
    712af455
    error: make iproto errors reuse mp_error module · 712af455
    Vladislav Shpilevoy authored
    After error objects marshaling was implemented in #4398, there
    were essentially 2 versions of the marshaling - when an error is
    sent inside response body, and when it is thrown and is encoded
    in iproto fields IPROTO_ERROR and IPROTO_ERROR_STACK. That is not
    really useful to have 2 implementation of the same feature. This
    commit drops the old iproto error encoding (its IPROTO_ERROR_STACK
    part), and makes it reuse the common error encoder.
    
    Note, the encoder skips MP_EXT header. This is because
    
    * The header is not needed - error is encoded as a value of
      IPROTO_ERROR_STACK key, so it is known this is an error. MP_EXT
      is needed only when type is unknown on decoding side in advance;
    
    * Old clients may not expect MP_EXT in iproto fields. That is the
      case of netbox connector, at least.
    
    Follow up #4398
    
    @TarantoolBot document
    Title: Stacked diagnostics binary protocol
    Stacked diagnostics is described in details in
    https://github.com/tarantool/doc/issues/1224. This commit
    changes nothing except binary protocol. The old protocol should
    not be documented anywhere.
    
    `IPROTO_ERROR_STACK` is still 0x52, but format of its value is
    different now. It looks exactly like `MP_ERROR` object, without
    `MP_EXT` header.
    
    ```
    IPROTO_ERROR_STACK: <MP_MAP> {
        MP_ERROR_STACK: <MP_ARRAY> [
            <MP_MAP> {
                ... <all the other fields of MP_ERROR> ...
            },
            ...
        ]
    }
    ```
    
    It is easy to see, that key `IPROTO_ERROR_STACK` is called
    'stack', and `MP_ERROR_STACK` is also 'stack'. So it may be good
    to rename the former key in the documentation. For example, the
    old `IPROTO_ERROR` can be renamed to `IPROTO_ERROR_24` and
    `IPROTO_ERROR_STACK` can be renamed to just `IPROTO_ERROR`.
    712af455
    History
    error: make iproto errors reuse mp_error module
    Vladislav Shpilevoy authored
    After error objects marshaling was implemented in #4398, there
    were essentially 2 versions of the marshaling - when an error is
    sent inside response body, and when it is thrown and is encoded
    in iproto fields IPROTO_ERROR and IPROTO_ERROR_STACK. That is not
    really useful to have 2 implementation of the same feature. This
    commit drops the old iproto error encoding (its IPROTO_ERROR_STACK
    part), and makes it reuse the common error encoder.
    
    Note, the encoder skips MP_EXT header. This is because
    
    * The header is not needed - error is encoded as a value of
      IPROTO_ERROR_STACK key, so it is known this is an error. MP_EXT
      is needed only when type is unknown on decoding side in advance;
    
    * Old clients may not expect MP_EXT in iproto fields. That is the
      case of netbox connector, at least.
    
    Follow up #4398
    
    @TarantoolBot document
    Title: Stacked diagnostics binary protocol
    Stacked diagnostics is described in details in
    https://github.com/tarantool/doc/issues/1224. This commit
    changes nothing except binary protocol. The old protocol should
    not be documented anywhere.
    
    `IPROTO_ERROR_STACK` is still 0x52, but format of its value is
    different now. It looks exactly like `MP_ERROR` object, without
    `MP_EXT` header.
    
    ```
    IPROTO_ERROR_STACK: <MP_MAP> {
        MP_ERROR_STACK: <MP_ARRAY> [
            <MP_MAP> {
                ... <all the other fields of MP_ERROR> ...
            },
            ...
        ]
    }
    ```
    
    It is easy to see, that key `IPROTO_ERROR_STACK` is called
    'stack', and `MP_ERROR_STACK` is also 'stack'. So it may be good
    to rename the former key in the documentation. For example, the
    old `IPROTO_ERROR` can be renamed to `IPROTO_ERROR_24` and
    `IPROTO_ERROR_STACK` can be renamed to just `IPROTO_ERROR`.