[ 
https://issues.apache.org/jira/browse/IGNITE-19864?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vyacheslav Koptilin updated IGNITE-19864:
-----------------------------------------
    Description: 
It seems useful to introduce TraceableException, which should be a base 
interface for all internal and public exception classes, that provides a simple 
way to get a trace identifier and error code.
{code:java}
public interface TraceableException {
    /**
     * Returns a unique identifier of the exception.
     *
     * @return Unique identifier of the exception.
     */
    UUID traceId();

    /**
     * Returns a full error code that includes the error's group and code, 
which uniquely identifies the problem within the group. This is a
     * combination of two most-significant bytes for the error group and two 
least-significant bytes for the error code.
     *
     * @return Full error code.
     */
    public int code();

    /**
     * Returns an error group.
     *
     * @see #code()
     * @return Error group.
     */
    public int groupCode();

    /**
     * Returns an error code that uniquely identifies the problem within a 
group.
     *
     * @see #code()
     * @see #groupCode()
     * @return Error code.
     */
    public int errorCode();
}
{code}

It will allow us to simplify a bit the code as follows:

{code:java}
    public static @Nullable UUID extractTraceIdFrom(Throwable t) {
        if (t instanceof IgniteException) {
            return ((IgniteException) t).traceId();
        } else if (t instanceof IgniteCheckedException) {
            return ((IgniteCheckedException) t).traceId();
        } else if (t instanceof IgniteInternalException) {
            return ((IgniteInternalException) t).traceId();
        } else if (t instanceof IgniteInternalCheckedException) {
            return ((IgniteInternalCheckedException) t).traceId();
        }

        return null;
    }

    This boilerplate code can be changed to:

    public static @Nullable UUID extractTraceIdFrom(Throwable t) {
        if (t instanceof TraceableException) {
            return ((TraceableException) t).traceId();
        }

        return null;
    }
{code}


  was:
It seems useful to introduce TraceableException, which should be a base 
interface for all internal and public exception classes, that provides a simple 
way to get a trace identifier at least.
{code:java}
public interface TraceableException {
    /**
     * Returns a unique identifier of the exception.
     *
     * @return Unique identifier of the exception.
     */
    UUID traceId();
}
{code}




> Introduce TraceableException interface
> --------------------------------------
>
>                 Key: IGNITE-19864
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19864
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Vyacheslav Koptilin
>            Assignee: Vyacheslav Koptilin
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-beta2
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> It seems useful to introduce TraceableException, which should be a base 
> interface for all internal and public exception classes, that provides a 
> simple way to get a trace identifier and error code.
> {code:java}
> public interface TraceableException {
>     /**
>      * Returns a unique identifier of the exception.
>      *
>      * @return Unique identifier of the exception.
>      */
>     UUID traceId();
>     /**
>      * Returns a full error code that includes the error's group and code, 
> which uniquely identifies the problem within the group. This is a
>      * combination of two most-significant bytes for the error group and two 
> least-significant bytes for the error code.
>      *
>      * @return Full error code.
>      */
>     public int code();
>     /**
>      * Returns an error group.
>      *
>      * @see #code()
>      * @return Error group.
>      */
>     public int groupCode();
>     /**
>      * Returns an error code that uniquely identifies the problem within a 
> group.
>      *
>      * @see #code()
>      * @see #groupCode()
>      * @return Error code.
>      */
>     public int errorCode();
> }
> {code}
> It will allow us to simplify a bit the code as follows:
> {code:java}
>     public static @Nullable UUID extractTraceIdFrom(Throwable t) {
>         if (t instanceof IgniteException) {
>             return ((IgniteException) t).traceId();
>         } else if (t instanceof IgniteCheckedException) {
>             return ((IgniteCheckedException) t).traceId();
>         } else if (t instanceof IgniteInternalException) {
>             return ((IgniteInternalException) t).traceId();
>         } else if (t instanceof IgniteInternalCheckedException) {
>             return ((IgniteInternalCheckedException) t).traceId();
>         }
>         return null;
>     }
>     This boilerplate code can be changed to:
>     public static @Nullable UUID extractTraceIdFrom(Throwable t) {
>         if (t instanceof TraceableException) {
>             return ((TraceableException) t).traceId();
>         }
>         return null;
>     }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to