Pavel,

Thank you for your positive feedback! I will create an IEP.

вт, 3 нояб. 2020 г. в 15:48, Pavel Tupitsyn <ptupit...@apache.org>:

> Alexey,
>
> The proposal looks good to me.
>
> Usually I would try to avoid extra dependencies in the core assembly,
> but NodaTime seems to be worth it.
>
> Would you like to prepare an IEP?
>
> Thanks,
> Pavel
>
>
>
> On Tue, Nov 3, 2020 at 3:15 PM Alexey Kukushkin <kukushkinale...@gmail.com
> >
> wrote:
>
> > We already created tickets and tested the proposed solution with our
> > applications (already in PROD) and an internal fork of Ignite. This
> > discussion is a proposal to donate this change to open source Apache
> Ignite
> > is the community accepts it:
> >
> >    - IGNITE-12824 .NET: Write DateTime in interoperable format by default
> >    <https://issues.apache.org/jira/browse/IGNITE-12824>
> >    - IGNITE-12825 Serialize Java and .NET dates using same calendars
> >    <https://issues.apache.org/jira/browse/IGNITE-12825>
> >
> >
> > вт, 3 нояб. 2020 г. в 15:08, Valentin Kulichenko <
> > valentin.kuliche...@gmail.com>:
> >
> > > Cool, makes sense to me then. Please feel free to create a ticket and
> > mark
> > > it with the "ignite-3" label.
> > >
> > > -Val
> > >
> > > On Tue, Nov 3, 2020 at 4:03 AM Alexey Kukushkin <
> > kukushkinale...@gmail.com
> > > >
> > > wrote:
> > >
> > > > Val, absolutely - our proposal affects .NET API only.
> > > >
> > > > вт, 3 нояб. 2020 г. в 15:00, Valentin Kulichenko <
> > > > valentin.kuliche...@gmail.com>:
> > > >
> > > > > Got it. So it only affects the .NET side, correct?
> > > > >
> > > > > -Val
> > > > >
> > > > > On Tue, Nov 3, 2020 at 3:52 AM Alexey Kukushkin <
> > > > kukushkinale...@gmail.com
> > > > > >
> > > > > wrote:
> > > > >
> > > > > > Hi Val,
> > > > > >
> > > > > > Our proposal does not overlap with IEP-54
> > > > > > <
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-54%3A+Schema-first+Approach
> > > > > > >,
> > > > > > which proposes changing Ignite date storage format. Our proposal
> is
> > > > > > enhancing Ignite to handle .NET dates in a truly portable way
> > instead
> > > > of
> > > > > > requiring the application developers to repeat this task every
> > time:
> > > > > >
> > > > > >    - Write .NET dates as Ignite dates (today .NET dates are
> written
> > > as
> > > > > >    generic Ignite objects)
> > > > > >    - Convert Local .NET dates to UTC inside Ignite and to it
> using
> > > Java
> > > > > >    calendars.
> > > > > >
> > > > > >
> > > > > > вт, 3 нояб. 2020 г. в 11:10, Valentin Kulichenko <
> > > > > > valentin.kuliche...@gmail.com>:
> > > > > >
> > > > > > > Hi Alexey,
> > > > > > >
> > > > > > > The IEP-54 [1] describes the data layout proposed for Ignite
> 3.0,
> > > it
> > > > > > > includes various date/time types. Can you please take a look
> and
> > > > check
> > > > > if
> > > > > > > this addresses your concerns? We can then discuss further if
> > > needed.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-54%3A+Schema-first+Approach
> > > > > > >
> > > > > > > -Val
> > > > > > >
> > > > > > > On Tue, Nov 3, 2020 at 12:05 AM Alexey Kukushkin <
> > > > > > > kukushkinale...@gmail.com>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Pavel,
> > > > > > > >
> > > > > > > > We propose changing public API so this is for Ignite 3.0.
> > > > > > > >
> > > > > > > > Thanks!
> > > > > > > >
> > > > > > > > вт, 3 нояб. 2020 г. в 02:17, Pavel Tupitsyn <
> > > ptupit...@apache.org
> > > > >:
> > > > > > > >
> > > > > > > > > Alexey,
> > > > > > > > >
> > > > > > > > > Just to clarify before we start the discussion:
> > > > > > > > > this proposal seems to introduce some breaking changes, so
> we
> > > are
> > > > > > > talking
> > > > > > > > > about Ignite 3.0, correct?
> > > > > > > > >
> > > > > > > > > Pavel
> > > > > > > > >
> > > > > > > > > On Tue, Nov 3, 2020 at 12:13 AM Alexey Kukushkin <
> > > > > > > > > kukushkinale...@gmail.com>
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > Igniters,
> > > > > > > > > >
> > > > > > > > > > What do you think about changing .NET API to read/write
> > > > portable
> > > > > > > dates
> > > > > > > > by
> > > > > > > > > > default and making that really portable?
> > > > > > > > > >
> > > > > > > > > > *The Problem*
> > > > > > > > > > Presently .NET API writes dates as composite Ignite
> > objects.
> > > > Only
> > > > > > > .NET
> > > > > > > > > > clients can read such dates: any other client (JDBC,
> Java,
> > > etc)
> > > > > > does
> > > > > > > > not
> > > > > > > > > > understand it without custom deserialization.
> > > > > > > > > >
> > > > > > > > > > It is still possible to configure .NET serialization to
> > write
> > > > > dates
> > > > > > > as
> > > > > > > > > > Ignite dates - see DateTime Serialization note
> > > > > > > > > > <
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://ignite.apache.org/docs/latest/net-specific/net-platform-interoperability#types-compatibility
> > > > > > > > > > >.
> > > > > > > > > > But then Ignite accepts only UTC dates, requiring the
> > > > application
> > > > > > > > > > developers to convert local dates to UTC dates and back.
> > This
> > > > > task
> > > > > > is
> > > > > > > > not
> > > > > > > > > > trivial: DateTime.ToUniversalTime
> > > > > > > > > > <
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://docs.microsoft.com/en-us/dotnet/api/system.datetime.touniversaltime?view=netcore-3.1
> > > > > > > > > > >
> > > > > > > > > > uses
> > > > > > > > > > calendars different from Java (and the .NET calendars are
> > the
> > > > > > invalid
> > > > > > > > > ones
> > > > > > > > > > - especially for pre-1990 dates).
> > > > > > > > > >
> > > > > > > > > > The motivation for the current default behavior was
> > probably
> > > > the
> > > > > > > desire
> > > > > > > > > to
> > > > > > > > > > keep the Time Zone information: Ignite dates do not store
> > > time
> > > > > > zones.
> > > > > > > > > >
> > > > > > > > > > In our experience interoperability is more important than
> > > > storing
> > > > > > > time
> > > > > > > > > zone
> > > > > > > > > > info.
> > > > > > > > > >
> > > > > > > > > > *The Proposal*
> > > > > > > > > >
> > > > > > > > > >    1. Always write .NET dates as portable Ignite dates:
> get
> > > rid
> > > > > of
> > > > > > > the
> > > > > > > > > >    BinaryReflectiveSerializer.ForceTimestamp flag that
> > > > currently
> > > > > > > > triggers
> > > > > > > > > > this
> > > > > > > > > >    behavior.
> > > > > > > > > >       - We could still keep the ForceTimestamp flag if
> > saving
> > > > > .NET
> > > > > > > > dates
> > > > > > > > > as
> > > > > > > > > >       transparent objects seems a useful case. We do not
> > > think
> > > > it
> > > > > > is
> > > > > > > > > > useful.
> > > > > > > > > >    2. Automatically convert Local dates to UTC and back
> > > > *inside*
> > > > > > > > > >    Ignite.NET.
> > > > > > > > > >       - In this case we lose the DateTime.Kind of UTC
> > dates:
> > > we
> > > > > > > write a
> > > > > > > > > UTC
> > > > > > > > > >       date but we would read a Local date since Ignite
> > would
> > > > > always
> > > > > > > > > > convert UTC
> > > > > > > > > >       to Local when reading.
> > > > > > > > > >       We could add a UtcDate date flag to
> > > > QuerySqlFieldAttribute
> > > > > > > > > >       and BinaryReflectiveSerializer to control the
> > > > > deserialization
> > > > > > > > > > behavior if
> > > > > > > > > >       keeping dates in UTC format use case seems
> important.
> > > > > > > > > >    3. Use NodaTime <https://nodatime.org/> for
> UTC<->Local
> > > > > > > > conversions.
> > > > > > > > > >    Noda time uses Java calendars making the conversion
> > truely
> > > > > > > portable.
> > > > > > > > > >
> > > > > > > > > > *The Benefits*
> > > > > > > > > >
> > > > > > > > > >    1. We think portable dates are much more important
> than
> > > > > storing
> > > > > > > time
> > > > > > > > > >    zone info. Why do we store time zones for every date
> on
> > > the
> > > > > > server
> > > > > > > > > > anyway?
> > > > > > > > > >    Time zone is client-side info.
> > > > > > > > > >    2. Simpler application code: no more manual
> > configuration
> > > to
> > > > > > > trigger
> > > > > > > > > the
> > > > > > > > > >    portable behavior.
> > > > > > > > > >    3. Non-trivial code to make the truly portable
> > UTC<->Local
> > > > > > > > conversion
> > > > > > > > > is
> > > > > > > > > >    implemented once inside Ignite instead of having every
> > > > > > Ignite.NET
> > > > > > > > > >    application implementing it.
> > > > > > > > > >
> > > > > > > > > > Thank you!
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > > Best regards,
> > > > > > > > > > Alexey
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Best regards,
> > > > > > > > Alexey
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Best regards,
> > > > > > Alexey
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Best regards,
> > > > Alexey
> > > >
> > >
> >
> >
> > --
> > Best regards,
> > Alexey
> >
>


-- 
Best regards,
Alexey

Reply via email to