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

feat!: [Datastore] Upgrade to V2 #7179

Open
wants to merge 55 commits into
base: main
Choose a base branch
from

Conversation

yash30201
Copy link
Contributor

@yash30201 yash30201 commented Mar 26, 2024

Main PR for all the Datastore PHP v2 upgrade changes as mentioned below:

  • Enable direct Gapic Client instantiation in Google\Cloud\Datastore\DatastoreClient 7215b2e
  • Add credentials wrapper support in DatastoreClient 237531f
  • Instantiate serializer and Request Handler in DatastoreClient. cac76f1
  • Update Resource classes to add serializer and requesthandler in their constructor. f39189f
  • Update all the Snippet and Units tests to add $requestHandler prophecy and serializer be2533c
  • Update Client + ResourceClass methods to use request handler for everything, correspondingly, update their unit tests and snippet tests.
  • Remove all references of connection classes from everywhere 4c32fc9
  • Update System tests [Not needed as none of the tests broke🎉]
  • Add MIGRATING.md file e098d66
  • Update DatastoreClient's documentation 2196aa2
  • Remove old GAPIC files (class aliases, etc) 0596f27
  • Increase minimum core to ^1.55 bf2c50b
  • Mark Operation class as internal d6e2823

BREAKING_CHANGE_REASON=RC-1 for the version 2 of the Datastore library.

chore(Datastore): Enhance readability of RunQuery and RunAggregationQuery APIs
@bshaffer
Copy link
Contributor

bshaffer commented May 7, 2024

I'll give this a more thorough review later today, but don't forget we need to remove all V1 GAPIC client classes. For Datastore V1, that would be Datastore/src/V1/DatastoreClient.php and Datastore/src/V1/DatastoreGrpcClient.php.

Also the PR title should be renamed to better describe what the PR is doing. For PubSub, we said "remove connection classes". I don't mind using V2 in the title (since we are bumping to a V2 version), but we do not need to include PHP in the title.

Copy link
Contributor

@bshaffer bshaffer left a comment

Choose a reason for hiding this comment

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

Looks good! A few suggestions with testing and some other minor things. The bigger question I have is with the Operations class - it looks like we are doing a LOT of converting of parameters. Why is so much of this necessary? Since we are doing a major version break, we have an opportunity to clean this up. Parameters which need to be changed should fall in two categories:

  1. We think the current (non-standard) interface is better. This would include things like accepting the string values of constants instead of their int versions. And since we know which parameters are enums, we could even automate this for all parameters (something to consider, but maybe not a good idea)
  2. We think the GAPIC interface is better. These should then be deprecated and either removed entirely (if they are not heavily used parameters) or renamed/converted to their new parameter/type.

Core/src/Testing/DatastoreOperationRefreshTrait.php Outdated Show resolved Hide resolved
Core/src/Testing/DatastoreOperationRefreshTrait.php Outdated Show resolved Hide resolved
Datastore/tests/Snippet/EntityTest.php Outdated Show resolved Hide resolved
Datastore/tests/Snippet/ReadOnlyTransactionTest.php Outdated Show resolved Hide resolved
Datastore/tests/Snippet/ReadOnlyTransactionTest.php Outdated Show resolved Hide resolved
Datastore/src/Operation.php Outdated Show resolved Hide resolved
Datastore/src/Operation.php Outdated Show resolved Hide resolved
}

return $filter;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Shouldn't this logic be in a Serializer class? This makes me a bit nervous, because changes to these parameters will break the API...

Is there a generic way we can do this logic? For instance, Message::serializeToJsonString will handle string enums (e.g. "AND" and "OR")

Datastore/src/Operation.php Show resolved Hide resolved
Datastore/src/Operation.php Show resolved Hide resolved
@yash30201 yash30201 changed the title feat!: [Datastore] Upgrade to PHP V2 feat!: [Datastore] Upgrade to V2 May 13, 2024
@bshaffer bshaffer self-assigned this Jun 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants