You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ignite.apache.org by GitBox <gi...@apache.org> on 2020/12/11 13:06:58 UTC

[GitHub] [ignite] nizhikov opened a new pull request #8568: IGNITE-12824: WIP

nizhikov opened a new pull request #8568:
URL: https://github.com/apache/ignite/pull/8568


   Thank you for submitting the pull request to the Apache Ignite.
   
   In order to streamline the review of the contribution 
   we ask you to ensure the following steps have been taken:
   
   ### The Contribution Checklist
   - [ ] There is a single JIRA ticket related to the pull request. 
   - [ ] The web-link to the pull request is attached to the JIRA ticket.
   - [ ] The JIRA ticket has the _Patch Available_ state.
   - [ ] The pull request body describes changes that have been made. 
   The description explains _WHAT_ and _WHY_ was made instead of _HOW_.
   - [ ] The pull request title is treated as the final commit message. 
   The following pattern must be used: `IGNITE-XXXX Change summary` where `XXXX` - number of JIRA issue.
   - [ ] A reviewer has been mentioned through the JIRA comments 
   (see [the Maintainers list](https://cwiki.apache.org/confluence/display/IGNITE/How+to+Contribute#HowtoContribute-ReviewProcessandMaintainers)) 
   - [ ] The pull request has been checked by the Teamcity Bot and 
   the `green visa` attached to the JIRA ticket (see [TC.Bot: Check PR](https://mtcga.gridgain.com/prs.html))
   
   ### Notes
   - [How to Contribute](https://cwiki.apache.org/confluence/display/IGNITE/How+to+Contribute)
   - [Coding abbreviation rules](https://cwiki.apache.org/confluence/display/IGNITE/Abbreviation+Rules)
   - [Coding Guidelines](https://cwiki.apache.org/confluence/display/IGNITE/Coding+Guidelines)
   - [Apache Ignite Teamcity Bot](https://cwiki.apache.org/confluence/display/IGNITE/Apache+Ignite+Teamcity+Bot)
   
   If you need any help, please email dev@ignite.apache.org or ask anу advice on http://asf.slack.com _#ignite_ channel.
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov commented on pull request #8568: IGNITE-12824: Allows to work with non UTC dates for .Net Core applications

Posted by GitBox <gi...@apache.org>.
nizhikov commented on pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#issuecomment-749516236


   @ptupitsyn all comments fixed. Please, take a look one more time.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] ptupitsyn commented on a change in pull request #8568: IGNITE-12824: Allows to work with non UTC dates for .Net Core applications

Posted by GitBox <gi...@apache.org>.
ptupitsyn commented on a change in pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#discussion_r547424529



##########
File path: modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDateTimeTest.cs
##########
@@ -110,6 +111,34 @@ public void TestClassAttributes()
             AssertTimestampField<DateTimeClassAttribute2>((o, d) => o.Value = d, o => o.Value, "Value");
         }
 
+#if NETCOREAPP
+        /// <summary>
+        /// Tests custom timestamp converter.
+        /// </summary>
+        [Test]
+        public void TestCustomTimestampConverter()
+        {
+            var cfg =  new IgniteConfiguration(TestUtils.GetTestConfiguration(name: "ignite-1"))
+            {
+                BinaryConfiguration = new BinaryConfiguration()
+                {
+                    ForceTimestamp = true, 
+                    TimestampConverter = new TimestampConverter()
+                }
+            };
+            var ignite = Ignition.Start(cfg);
+            var binary = ignite.GetBinary();
+ 
+            // Check config.
+            Assert.NotNull(ignite.GetConfiguration().BinaryConfiguration.TimestampConverter);
+
+            AssertTimestampField<DateTimeObj2>((o, d) => o.Value = d, o => o.Value, "Value");
+
+            var ex = Assert.Throws<BinaryObjectException>(() => binary.ToBinary<IBinaryObject>(new DateTime(1997, 8, 29)), 
+                "Converter Error!");

Review comment:
       1. Unused variable `ex`.
   2. `"Converter Error!"` is a message that will be displayed on assertion failure. I think the intent here is to check the exception message instead. To do that, add `Assert.AreEqual("Converter Error!", ex.Message)`.

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDateTimeTest.cs
##########
@@ -110,6 +111,34 @@ public void TestClassAttributes()
             AssertTimestampField<DateTimeClassAttribute2>((o, d) => o.Value = d, o => o.Value, "Value");
         }
 
+#if NETCOREAPP

Review comment:
       I think this test will work on .NET Framework too (and we should have a test that works on .NET Framework).




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov commented on pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
nizhikov commented on pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#issuecomment-750824778


   @ptupitsyn I'm glad that you help me with the patch. Appreciate it!
   
   Now, PR looks good? What do you think? :)


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov commented on pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
nizhikov commented on pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#issuecomment-750231325


   https://ci.ignite.apache.org/viewLog.html?buildId=5802444&buildTypeId=IgniteTests24Java8_RunAllNet - tests run


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov merged pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
nizhikov merged pull request #8568:
URL: https://github.com/apache/ignite/pull/8568


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] ptupitsyn commented on a change in pull request #8568: IGNITE-12824: Allows to work with non UTC dates for .Net Core applications

Posted by GitBox <gi...@apache.org>.
ptupitsyn commented on a change in pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#discussion_r547177545



##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinarySystemHandlers.cs
##########
@@ -258,8 +255,16 @@ public static bool TryReadSystemType<T>(byte typeId, BinaryReader ctx, out T res
 
             if (handler == null)
             {
-                res = default(T);
-                return false;
+                if (typeId == BinaryTypeId.Timestamp)
+                {
+                    // Date.
+                    handler = new BinarySystemReader<DateTime?>(stream => BinaryUtils.ReadTimestamp(stream, ctx.Marshaller.DateTimeConverter));

Review comment:
       Avoid object allocation and call `ReadTimestamp` directly:
   ```
   res = TypeCaster<T>.Cast(BinaryUtils.ReadTimestamp(ctx.Stream, ctx.Marshaller.DateTimeConverter));
   return true;
   ```

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/IDateTimeConverter.cs
##########
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+
+    /// <summary>
+    /// Converter for DateTime objects.
+    /// </summary>
+    public interface IDateTimeConverter
+    {
+        /// <summary>Convert date to Java ticks.</summary>

Review comment:
       `Convert` -> `Converts`, here and below

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/IDateTimeConverter.cs
##########
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+
+    /// <summary>
+    /// Converter for DateTime objects.
+    /// </summary>
+    public interface IDateTimeConverter

Review comment:
       Since we decided to operate on Java-specific Timestamp format here, I think a better name would be `ITimestampConverter`. It is also consistent with `WriteTimestamp` / `ReadTimestamp` methods.

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryConfiguration.cs
##########
@@ -136,6 +137,11 @@ public BinaryConfiguration(params Type[] binaryTypes)
         /// </summary>
         public IBinarySerializer Serializer { get; set; }
 
+        /// <summary>
+        /// Default date time converter.
+        /// </summary>
+        public IDateTimeConverter DateTimeConverter { get; set; }

Review comment:
       See below - let's rename to `ITimestampConverter TimestampConverter`

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/IDateTimeConverter.cs
##########
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+
+    /// <summary>
+    /// Converter for DateTime objects.

Review comment:
       `Converts <see cref="DateTime"/> values to Java Timestamp and back.`

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryConfiguration.cs
##########
@@ -136,6 +137,11 @@ public BinaryConfiguration(params Type[] binaryTypes)
         /// </summary>
         public IBinarySerializer Serializer { get; set; }
 
+        /// <summary>
+        /// Default date time converter.
+        /// </summary>

Review comment:
       Also please update the doc for `ForceTimestamp` below like this:
   ```
   Only UTC values are supported in Timestamp format. Other values will cause an exception on write, unless <see cref="TimestampConverter"/> is provided.
   ```

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryConfiguration.cs
##########
@@ -136,6 +137,11 @@ public BinaryConfiguration(params Type[] binaryTypes)
         /// </summary>
         public IBinarySerializer Serializer { get; set; }
 
+        /// <summary>
+        /// Default date time converter.
+        /// </summary>

Review comment:
       ```
           /// <summary>
           /// Gets or sets a converter between <see cref="DateTime"/> and Java Timestamp.
           /// Called from <see cref="IBinaryWriter.WriteTimestamp"/>, <see cref="IBinaryWriter.WriteTimestampArray"/>,
           /// <see cref="IBinaryReader.ReadTimestamp"/>, <see cref="IBinaryReader.ReadTimestampArray"/>.
           /// <para />
           /// See also <see cref="ForceTimestamp"/>.
           /// </summary>
   ```




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] ptupitsyn commented on a change in pull request #8568: IGNITE-12824: Allows to work with non UTC dates for .Net Core applications

Posted by GitBox <gi...@apache.org>.
ptupitsyn commented on a change in pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#discussion_r547181731



##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryConfiguration.cs
##########
@@ -136,6 +137,11 @@ public BinaryConfiguration(params Type[] binaryTypes)
         /// </summary>
         public IBinarySerializer Serializer { get; set; }
 
+        /// <summary>
+        /// Default date time converter.
+        /// </summary>
+        public IDateTimeConverter DateTimeConverter { get; set; }

Review comment:
       See above - let's rename to `ITimestampConverter TimestampConverter`




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov commented on a change in pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
nizhikov commented on a change in pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#discussion_r548235253



##########
File path: modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDateTimeTest.cs
##########
@@ -134,10 +133,22 @@ public void TestCustomTimestampConverter()
 
             AssertTimestampField<DateTimeObj2>((o, d) => o.Value = d, o => o.Value, "Value");
 
-            var ex = Assert.Throws<BinaryObjectException>(() => binary.ToBinary<IBinaryObject>(new DateTime(1997, 8, 29)), 
-                "Converter Error!");
+            var dt1 = new DateTime(1997, 8, 29, 0, 0, 0, DateTimeKind.Utc);
+
+            var ex = Assert.Throws<BinaryObjectException>(() => binary.ToBinary<DateTime>(dt1));
+            Assert.AreEqual("ToJavaTicks Error!", ex.Message);

Review comment:
       Fixed.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov commented on pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
nizhikov commented on pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#issuecomment-750803682


   @ptupitsyn 
   
   > What about some tests for cache key/value scenario and cache key field/value field? For now we only test IBinary.ToBinary, which can follow a different code path.
   
   Tests for cache added.
   
   > TestCustomTimestampConverter does not cover successful use case when the value is returned from the converter
   
   Fixed.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] ptupitsyn commented on a change in pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
ptupitsyn commented on a change in pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#discussion_r548131924



##########
File path: modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDateTimeTest.cs
##########
@@ -134,10 +133,22 @@ public void TestCustomTimestampConverter()
 
             AssertTimestampField<DateTimeObj2>((o, d) => o.Value = d, o => o.Value, "Value");
 
-            var ex = Assert.Throws<BinaryObjectException>(() => binary.ToBinary<IBinaryObject>(new DateTime(1997, 8, 29)), 
-                "Converter Error!");
+            var dt1 = new DateTime(1997, 8, 29, 0, 0, 0, DateTimeKind.Utc);
+
+            var ex = Assert.Throws<BinaryObjectException>(() => binary.ToBinary<DateTime>(dt1));
+            Assert.AreEqual("ToJavaTicks Error!", ex.Message);

Review comment:
       Let's extract a constant to avoid repeating `"ToJavaTicks Error!"` value.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov commented on a change in pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
nizhikov commented on a change in pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#discussion_r547742901



##########
File path: modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDateTimeTest.cs
##########
@@ -110,6 +111,34 @@ public void TestClassAttributes()
             AssertTimestampField<DateTimeClassAttribute2>((o, d) => o.Value = d, o => o.Value, "Value");
         }
 
+#if NETCOREAPP

Review comment:
       Fixed.

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDateTimeTest.cs
##########
@@ -110,6 +111,34 @@ public void TestClassAttributes()
             AssertTimestampField<DateTimeClassAttribute2>((o, d) => o.Value = d, o => o.Value, "Value");
         }
 
+#if NETCOREAPP
+        /// <summary>
+        /// Tests custom timestamp converter.
+        /// </summary>
+        [Test]
+        public void TestCustomTimestampConverter()
+        {
+            var cfg =  new IgniteConfiguration(TestUtils.GetTestConfiguration(name: "ignite-1"))
+            {
+                BinaryConfiguration = new BinaryConfiguration()
+                {
+                    ForceTimestamp = true, 
+                    TimestampConverter = new TimestampConverter()
+                }
+            };
+            var ignite = Ignition.Start(cfg);
+            var binary = ignite.GetBinary();
+ 
+            // Check config.
+            Assert.NotNull(ignite.GetConfiguration().BinaryConfiguration.TimestampConverter);
+
+            AssertTimestampField<DateTimeObj2>((o, d) => o.Value = d, o => o.Value, "Value");
+
+            var ex = Assert.Throws<BinaryObjectException>(() => binary.ToBinary<IBinaryObject>(new DateTime(1997, 8, 29)), 
+                "Converter Error!");

Review comment:
       Thanks! Fixed




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] ptupitsyn commented on pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
ptupitsyn commented on pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#issuecomment-750822028


   @nizhikov I've added one more test that does not rely on exceptions and pushed to the branch (hope you don't mind). Just to make sure that success path is tested as well.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov commented on a change in pull request #8568: IGNITE-12824: Allows to work with non UTC dates for .Net Core applications

Posted by GitBox <gi...@apache.org>.
nizhikov commented on a change in pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#discussion_r547207585



##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/IDateTimeConverter.cs
##########
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Binary
+{
+    using System;
+
+    /// <summary>
+    /// Converter for DateTime objects.
+    /// </summary>
+    public interface IDateTimeConverter

Review comment:
       Renamed

##########
File path: modules/platforms/dotnet/Apache.Ignite.Core/Binary/BinaryConfiguration.cs
##########
@@ -136,6 +137,11 @@ public BinaryConfiguration(params Type[] binaryTypes)
         /// </summary>
         public IBinarySerializer Serializer { get; set; }
 
+        /// <summary>
+        /// Default date time converter.
+        /// </summary>
+        public IDateTimeConverter DateTimeConverter { get; set; }

Review comment:
       Renamed




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [ignite] nizhikov commented on pull request #8568: IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter

Posted by GitBox <gi...@apache.org>.
nizhikov commented on pull request #8568:
URL: https://github.com/apache/ignite/pull/8568#issuecomment-750010984


   @ptupitsyn 
   
   > Please add tests to verify that converter is called in all possible cases:
   
   Thanks! Good catch!
   
   I've added tests and they showed some bugs in the current changes.
   Fixed it.
   
   Please, take a look.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org