Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

9651 scalar current date #10978

Merged
merged 2 commits into from Mar 22, 2021

Conversation

BaurzhanSakhariev
Copy link
Contributor

Summary of the changes / Why this improves CrateDB

  • Added date type
  • Added curdate scalar function returning current date in UTC

Checklist

  • Added an entry in CHANGES.txt for user facing changes
  • Updated documentation & sql_features table for user facing changes
  • Touched code is covered by tests
  • CLA is signed
  • This does not contain breaking changes, or if it does:
    • It is released within a major release
    • It is recorded in CHANGES.txt
    • It was marked as deprecated in an earlier release if possible
    • You've thought about the consequences and other components are adapted
      (E.g. AdminUI)

@BaurzhanSakhariev BaurzhanSakhariev requested a review from a team February 1, 2021 08:26
@crate-jenkins
Copy link
Collaborator

Can one of the admins verify this patch?

``CURRENT_DATE``
----------------

The ``CURRENT_DATE`` expression returns the date in UTC timezone at the time the SQL statement was handled. Clock
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your contribution!

Would you mind wrapping this to 79 chars per line?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Copy link
Member

@mfussenegger mfussenegger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution.

There are a couple of parts that are missing to add a new type, so I've left a couple of comments.

We'd probably also need to follow up and support the date time in some artihmetic functions. E.g. to support something like current_date + '1 day'::interval. But I think that could be done in a follow up PR if you're interested.

docs/appendices/release-notes/unreleased.rst Outdated Show resolved Hide resolved
server/src/main/java/io/crate/types/DateType.java Outdated Show resolved Hide resolved

public static final int ID = 23;
public static final DateType INSTANCE = new DateType();
public static final int DATE_SIZE = (int) RamUsageEstimator.shallowSizeOfInstance(Long.class); // Value is written/read long number representing epoch milliseconds.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think LocalDate is bigger than just a Long - this would have to be adjusted if we stick with LocalDate

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I thought I'm estimating size of the data, written to StreamOutput, somehow missed a hint coming from RamUsageEstimator class name)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Upd - As you suggested, I'm using now Long as internal date, reverted DATE_SIZE to Long size

server/src/main/java/io/crate/types/DateType.java Outdated Show resolved Hide resolved
Copy link
Contributor

@nomicode nomicode left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for the PR!

I want to add a quick note to follow up on @mfussenegger's comment. last week, I added a TIP to the CURRENT_TIMESTAMP subsection about CURRENT_TIMESTAMP - '1 day'::interval (see de7cd71)

as the CURRENT_DATE subsection is being added directly below this, it might be a good idea to add a short note saying either that CURRENT_DATE - '1 day'::interval is supported or is not supported. might be overkill though?

docs/appendices/release-notes/unreleased.rst Outdated Show resolved Hide resolved
Copy link
Contributor Author

@BaurzhanSakhariev BaurzhanSakhariev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for the PR!

I want to add a quick note to follow up on @mfussenegger's comment. last week, I added a TIP to the CURRENT_TIMESTAMP subsection about CURRENT_TIMESTAMP - '1 day'::interval (see de7cd71)

as the CURRENT_DATE subsection is being added directly below this, it might be a good idea to add a short note saying either that CURRENT_DATE - '1 day'::interval is supported or is not supported. might be overkill though?

Thanks for the comments! Regarding upper case - done, but I used actual name CURDATE - I added big comment below with all my concern and one of them is that CURRENT_DATE name was failing tests while CURDATE passed them.

TIPS - I think everything related to +/- intreval has to be done in a separate PR in order to keep the current small.

I would like to highlight potential issues with the PR. I think it's fine for now but worth mentioning anyway.

  1. Initially I used "current_date" name for the new scalar function. My test were failing and it took a while before I tried to use different name and same code worked with name "curdate".

As far as I understand, "current_time" is reserved word (saw it in SqlBaseParser) and probably having a new function with that name causes parsing failure.

Also, I saw builder.append("current_date"); in ExpressionFormatter, the only git commit for that line shows "add the presto sql parser".

While usage of curdate passes test, I found it confusing that current_date is a new function but I cannot use that name.

  1. I haven't updated method visitCurrentTime in ExpressionAnalyzer class.It has switch (node.getType()) and that type enum already has DATE - looks like it was a placeholder for the future and I do have to add
    case DATE:
    funcName = CurrentTimeFunction.NAME;
    break; but I decided to clarify that.

  2. DataTypes class has 2 maps:
    TYPE_IDS_TO_MAPPINGS for mapping type to ES type and I mapped new type to "date" - same as existing types TIMESTAMPZ and TIMESTAMP.

However, there is also a reversed map MAPPING_NAMES_TO_TYPES - where ES type is mapped to Crate type.
We cannot have 2 "date" keys and that's why I didn't an entry here. I think mapping ES date to Crate TIMESTAMPZ makes sense as TIMESTAMPZ is the most specific among DATE, TIMESTAMP, TIMESTAMPZ types.

I believe it's fine but I have to explicitly highlight it since it looks like a place where new type might leave a trace but it was not done.

  1. New types' ID field value - I spent some time trying to figure out a pattern or registry of values as I had a feeling that value must be unique throughout all types but the only approach was looking over all type files and checking their ids and keeping some unused number. There are some maps with IDS but one cannot use them as a quick ID-dictionary since they are given not as numbers but in Type.ID form. I hope my approach is fine and I haven't missed some file or even script for assigning those ids.


public static final int ID = 23;
public static final DateType INSTANCE = new DateType();
public static final int DATE_SIZE = (int) RamUsageEstimator.shallowSizeOfInstance(Long.class); // Value is written/read long number representing epoch milliseconds.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I thought I'm estimating size of the data, written to StreamOutput, somehow missed a hint coming from RamUsageEstimator class name)

docs/appendices/release-notes/unreleased.rst Outdated Show resolved Hide resolved
``CURRENT_DATE``
----------------

The ``CURRENT_DATE`` expression returns the date in UTC timezone at the time the SQL statement was handled. Clock
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@BaurzhanSakhariev BaurzhanSakhariev force-pushed the 9651-scalar-current-date branch 2 times, most recently from 1546ef3 to 711c0ba Compare February 2, 2021 09:26
@seut
Copy link
Member

seut commented Feb 2, 2021

@BaurzhanSakhariev

I haven't updated method visitCurrentTime in ExpressionAnalyzer class.It has switch (node.getType()) and that type enum already has DATE - looks like it was a placeholder for the future and I do have to add
case DATE:
funcName = CurrentTimeFunction.NAME;
break; but I decided to clarify that.

Yes we'd have to add here a new case for DATE which must then result in the related current_date function name.

DataTypes class has 2 maps:
TYPE_IDS_TO_MAPPINGS for mapping type to ES type and I mapped new type to "date" - same as existing types TIMESTAMPZ and TIMESTAMP.

However, there is also a reversed map MAPPING_NAMES_TO_TYPES - where ES type is mapped to Crate type.
We cannot have 2 "date" keys and that's why I didn't an entry here. I think mapping ES date to Crate TIMESTAMPZ makes sense as TIMESTAMPZ is the most specific among DATE, TIMESTAMP, TIMESTAMPZ types.

Yes good spot. As the underlaying field mappers (of ES) do not make any difference between DATE and TIMESTAMP, we can not simply map SQL DATE to a storage field type. Because of that I suggest to not support storing SQL DATE column types for now, we'd need to think more about a working solution here, if any.
To prevent that, the entry here https://github.com/crate/crate/pull/10978/files#diff-63dbc4faae4044b73e5c10f6ecf640d41a16284a9615d40e0c59e2ef1517219eR445 must be removed.

New types' ID field value - I spent some time trying to figure out a pattern or registry of values as I had a feeling that value must be unique throughout all types but the only approach was looking over all type files and checking their ids and keeping some unused number. There are some maps with IDS but one cannot use them as a quick ID-dictionary since they are given not as numbers but in Type.ID form. I hope my approach is fine and I haven't missed some file or even script for assigning those ids.

Yes there is no real patter, it should just not be used already. So your chosen ID looks fine.

@BaurzhanSakhariev
Copy link
Contributor Author

BaurzhanSakhariev commented Feb 2, 2021

Thanks for the comment, added case to switch and removed map entry.

@BaurzhanSakhariev BaurzhanSakhariev force-pushed the 9651-scalar-current-date branch 2 times, most recently from 056fe96 to 89572b8 Compare February 3, 2021 07:58
Copy link
Member

@seut seut left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your efforts. I've added another round of suggestions/comments.

docs/general/builtins/scalar.rst Outdated Show resolved Hide resolved
server/src/main/java/io/crate/types/DateType.java Outdated Show resolved Hide resolved
server/src/test/java/io/crate/testing/DataTypeTesting.java Outdated Show resolved Hide resolved
server/src/test/java/io/crate/types/DateTypeTest.java Outdated Show resolved Hide resolved
server/src/test/java/io/crate/types/DateTypeTest.java Outdated Show resolved Hide resolved
server/src/main/java/io/crate/types/DateType.java Outdated Show resolved Hide resolved
server/src/test/java/io/crate/types/DateTypeTest.java Outdated Show resolved Hide resolved
@BaurzhanSakhariev BaurzhanSakhariev force-pushed the 9651-scalar-current-date branch 3 times, most recently from 87a1690 to 2426dc5 Compare February 10, 2021 15:24
Copy link
Member

@seut seut left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really good already, I've added final documentation suggestions.

docs/general/builtins/scalar.rst Outdated Show resolved Hide resolved
docs/general/builtins/scalar.rst Outdated Show resolved Hide resolved
docs/general/builtins/scalar.rst Show resolved Hide resolved
docs/appendices/release-notes/unreleased.rst Outdated Show resolved Hide resolved
docs/general/builtins/scalar.rst Outdated Show resolved Hide resolved
server/src/main/resources/sql_features.tsv Outdated Show resolved Hide resolved
@BaurzhanSakhariev BaurzhanSakhariev force-pushed the 9651-scalar-current-date branch 2 times, most recently from 9c96c30 to f90d8ff Compare February 12, 2021 14:07
@seut
Copy link
Member

seut commented Feb 16, 2021

retest this please

@seut
Copy link
Member

seut commented Feb 16, 2021

@BaurzhanSakhariev Thanks a lot for addressing all comments.
Unfortunately the :server:checkstyleMain task complains now and fails, also the itest task fails because of the newly added Date and Array(Date) PG types, see line 163, in docs/interfaces/postgres.rst.
Could you have a look on these? Thanks!

btw. some hdfs related test also fails cause it uses an old lib version which isn't online anymore. We've fixed this already on master, so rebasing your branch with the latest master will should solve that.

@BaurzhanSakhariev
Copy link
Contributor Author

I'm checking locally, some tests are failing with timeout (looks like I need to configure environment) for example InternalTestCluster.assertAfterTest but couldn't find non-environmental failure locally.

Thanks for pointing out the specific file (I couldn't see it inGitHub report as I need to log in to Jenkins) I will take a look for that specific case.

@BaurzhanSakhariev BaurzhanSakhariev force-pushed the 9651-scalar-current-date branch 2 times, most recently from ebde802 to 7c417bf Compare February 19, 2021 10:34
@BaurzhanSakhariev
Copy link
Contributor Author

I fixed server:checkstyleMain and updated postgres.rst with 2 entries for the new date and corresponding array type.

However, neither itest nor app:run are not working on my machine. I updated postgres.rst by manually filling all columns and ordering by OID.

My OS is 64-bit Windows 10 and problem with itest is that blackbox/bootstrap.sh uses venv/bin/pip whereas for Windows bin should be replaced by Scripts.

I tried that and also changed commandLine "$projectDir/bin/test-docs" to commandLine "sh", "$projectDir/bin/test-docs" but still faced an issue with "Failed to import test module test_docs" - probably test-docs script also has to be adjusted for Windows.

Regarding app:run

it fails with
Exception in thread "main" java.lang.ExceptionInInitializerError
  at java.base/jdk.internal.icu.text.NormalizerBase$NFKDMode.getNormalizer2(NormalizerBase.java:305)
  at java.base/jdk.internal.icu.text.NormalizerBase.normalize(NormalizerBase.java:457)
  at java.base/jdk.internal.icu.text.NormalizerBase.normalize(NormalizerBase.java:461)
  at java.base/java.text.Normalizer.normalize(Normalizer.java:159)
  at java.base/sun.security.x509.AVA.toRFC2253CanonicalString(AVA.java:987)
  at java.base/sun.security.x509.RDN.toRFC2253StringInternal(RDN.java:437)
  at java.base/sun.security.x509.RDN.toRFC2253String(RDN.java:417)
  at java.base/sun.security.x509.X500Name.getRFC2253CanonicalName(X500Name.java:724)
  at java.base/sun.security.x509.X500Name.equals(X500Name.java:416)
  at java.base/sun.security.pkcs.PKCS7.getCertificate(PKCS7.java:694)
  at java.base/sun.security.pkcs.SignerInfo.getCertificate(SignerInfo.java:253)
  at java.base/sun.security.pkcs.SignerInfo.verify(SignerInfo.java:401)
  at java.base/sun.security.pkcs.PKCS7.verify(PKCS7.java:578)
  at java.base/sun.security.pkcs.PKCS7.verify(PKCS7.java:595)
  at java.base/sun.security.pkcs.SignerInfo.getTimestamp(SignerInfo.java:566)
  at java.base/sun.security.pkcs.SignerInfo.verify(SignerInfo.java:324)
  at java.base/sun.security.pkcs.PKCS7.verify(PKCS7.java:578)
  at java.base/sun.security.pkcs.PKCS7.verify(PKCS7.java:595)
  at java.base/sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:293)
  at java.base/sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:269)
  at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:316)
  at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:230)
  at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:749)
  at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1016)
  at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:72)
  at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:873)
  at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:811)
  at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723)
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646)
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
  at io.crate.types.DataTypeXContentExtension.getXContentWriters(DataTypeXContentExtension.java:40)
  at org.elasticsearch.common.xcontent.XContentBuilder.<clinit>(XContentBuilder.java:119)
  at org.elasticsearch.common.settings.Setting.arrayToParsableString(Setting.java:1308)
  at org.elasticsearch.common.settings.Setting$ListSetting.lambda$new$0(Setting.java:1333)
  at org.elasticsearch.common.settings.Setting.<init>(Setting.java:151)
  at org.elasticsearch.common.settings.Setting$ListSetting.<init>(Setting.java:1330)
  at org.elasticsearch.common.settings.Setting.listSetting(Setting.java:1282)
  at org.elasticsearch.common.settings.Setting.listSetting(Setting.java:1250)
  at org.elasticsearch.env.Environment.<clinit>(Environment.java:55)
  at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:66)
  at io.crate.bootstrap.CrateDB.createEnv(CrateDB.java:112)
  at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:82)
  at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
  at org.elasticsearch.cli.Command.main(Command.java:90)
  at io.crate.bootstrap.CrateDB.main(CrateDB.java:91)
  at io.crate.bootstrap.CrateDB.main(CrateDB.java:84)
Caused by: java.lang.NullPointerException: Cannot invoke "java.io.InputStream.available()" because "is" is null
  at java.base/jdk.internal.icu.impl.ICUBinary.getRequiredData(ICUBinary.java:94)
  at java.base/jdk.internal.icu.impl.NormalizerImpl.load(NormalizerImpl.java:431)
  at java.base/jdk.internal.icu.impl.Norm2AllModes$Norm2AllModesSingleton.<init>(Norm2AllModes.java:274)
  at java.base/jdk.internal.icu.impl.Norm2AllModes$NFKCSingleton.<clinit>(Norm2AllModes.java:290)
  at java.base/jdk.internal.icu.impl.Norm2AllModes.getNFKCInstance(Norm2AllModes.java:263)
  at java.base/jdk.internal.icu.text.Normalizer2.getNFKDInstance(Normalizer2.java:123)
  at java.base/jdk.internal.icu.text.NormalizerBase$NFKDModeImpl.<clinit>(NormalizerBase.java:181)
  ... 48 more

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:run'.
> Process 'command 'C:\Users\Baur\.gradle\caches\transforms-3\00cf94b11d7d07694077c263b7fcc56e\transformed\windows-15.0.2-x64.zip/bin/java'' finished with non-zero exit value 1

I've been investigating and trying to fix both commands failure - if I manage to make itest related scripts cross-platform I will create another PR for that.

It would be nice if we can trigger remaining jenkins/pr_tests check to see how my manual additions to the postgres.rst will behave in a proper environment.

@amotl
Copy link
Member

amotl commented Feb 19, 2021

Hi @BaurzhanSakhariev,

thanks for your efforts. Regarding Windows runtime support, CrateDB should work - you might have observed that the main test suite is also being invoked on GitHub Actions. While we occasionally have to adjust things in this space regarding flakyness (e.g. #11045), it works in general.

Regarding blackbox testing, I believe it is using cr8 under the hood. In order to bring that to Windows (see mfussenegger/cr8#327), I already started mfussenegger/cr8#337 but haven't been able to complete this yet.

This is just to give you a heads-up which kinds of patches would have to be applied as a minimum to make it work on Windows. The state of the onion is that, by using those patches, it should already work reasonably but currently fails on test layer teardown on GHA/CI due to some nasty deadlocking issue where I haven't been able to investigate further.

So, while it will probably be a good idea to continue day-to-day development of CrateDB on Linux or macOS, I am happy to hear you also know your way around Windows and hope that you will be available to improve Windows support for all the test harnesses we are running as well as Windows support in general. See, for example, #10516 and #6349.

Additionally, you might want to inspect the GHA recipe to learn about respective arguments to Gradle:

arguments: :server:test -Dtests.crate.run-windows-incompatible=${{ matrix.os == 'ubuntu-latest' }}

It would be nice if we can trigger remaining jenkins/pr_tests check.

After rebasing your branch on top of current master, you might be able to trigger that on your own by adding a comment saying retest this please, which will act as a trigger command to Jenkins.

With kind regards,
Andreas.

@seut
Copy link
Member

seut commented Feb 19, 2021

retest this please

@BaurzhanSakhariev BaurzhanSakhariev force-pushed the 9651-scalar-current-date branch 6 times, most recently from 04e27ef to 9532635 Compare March 10, 2021 15:39
@BaurzhanSakhariev
Copy link
Contributor Author

retest this please

Copy link
Member

@seut seut left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your changes. I've added some comments mostly related to documentation.

docs/general/ddl/data-types.rst Outdated Show resolved Hide resolved
docs/general/ddl/data-types.rst Outdated Show resolved Hide resolved
Comment on lines 587 to 594
Date also accepts a ``bigint`` representing UTC milliseconds since
the epoch.

::

cr> select 1615248000000::date as cd;
+---------------+
| cd |
+---------------+
| 1615248000000 |
+---------------+
SELECT 1 row in set (... sec)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd remove this example if you take my suggestion above which already mention the support of numeric->date casts.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I removed string casting example select '2021-03-09'::date as well as it's also mentioned in suggestion.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think keeping the string cast example would still be valuable (also this may be the common use case).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

docs/general/ddl/data-types.rst Outdated Show resolved Hide resolved
@BaurzhanSakhariev
Copy link
Contributor Author

retest this please

@seut
Copy link
Member

seut commented Mar 12, 2021

retest this please

Copy link
Member

@mfussenegger mfussenegger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left some more coments.
Overall seems like it's almost ready 👍

docs/general/ddl/data-types.rst Outdated Show resolved Hide resolved
Comment on lines +76 to +78
LocalDate dt = LocalDate.parse(s, ISO_FORMATTER);
return dt.atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PostgreSQL supports more text formats as input:

https://www.postgresql.org/docs/current/datatype-datetime.html

I think we either have to extend this, or make it explicit in the documentation that the text format support is not compatible with all PostgreSQL clients.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated data-types.rst and added TODO to DateType

@BaurzhanSakhariev BaurzhanSakhariev force-pushed the 9651-scalar-current-date branch 4 times, most recently from 4046b55 to c6788c8 Compare March 16, 2021 09:51
@BaurzhanSakhariev
Copy link
Contributor Author

retest this please

@seut seut requested a review from mfussenegger March 19, 2021 08:40
@mfussenegger
Copy link
Member

ok to test

Copy link
Member

@mfussenegger mfussenegger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work 👍

@mfussenegger mfussenegger requested a review from seut March 22, 2021 09:07
Copy link
Member

@seut seut left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Great!

@seut seut added the ready-to-merge Let Mergify merge the PR once approved and checks pass label Mar 22, 2021
@mergify mergify bot merged commit 10cbed3 into crate:master Mar 22, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ready-to-merge Let Mergify merge the PR once approved and checks pass
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants