Skip to content

feat: Bigtable authorized views - move the code over to the TabularApiSurface class#1463

Merged
danieljbruce merged 14 commits intobigtable-authorized-viewsfrom
bigtable-authorized-views-initial-refactor
Aug 28, 2024
Merged

feat: Bigtable authorized views - move the code over to the TabularApiSurface class#1463
danieljbruce merged 14 commits intobigtable-authorized-viewsfrom
bigtable-authorized-views-initial-refactor

Conversation

@danieljbruce
Copy link
Contributor

@danieljbruce danieljbruce commented Aug 22, 2024

Summary:

This PR is the first in the series to support the plan from go/node-cbt-authorized-views. Code from the Table class is moved over to the TabularApiSurface class in preparation for future PRs that will make changes to this TabularApiSurface code.

Changes:

  • Code has been moved over from table.ts to tabular-api-service.ts from the Table class to the TabularApiService class. TabularApiSurface now contains the createReadStream, getRows, insert, mutate, row, sampleRowKeysStream, sampleRowKeys methods. Table inherits from TabularApiSurface so Table still does the same thing as before, but when we make the code changes later we will be able to see the changes in isolation because the code from Table has been moved over already.
  • src/row.ts changes - The object passed into the Row is now a TabularAPISurface so row.ts gets interface changes to work with this kind of object
  • src/utils/table.ts changes - some items now live in TabularAPISurface so they get imported from there instead
  • test/table.ts changes - Some mocks using proxyquire must now be on tabular-api-service.js instead of ../src/table.js in order to emulate the same behaviour using the mocks.

Next Steps:

Next we will add all the functions that will be needed on the TabularAPISurface class. TabularAPISurface class contains the old Table functions it needs to contain, but doesn't contain functions that will use Row that will be necessary for the View. In the next PR we won't introduce the View yet, we will just add all the missing functions to TabularAPISurface so that we know it is complete.

@danieljbruce danieljbruce requested a review from a team as a code owner August 22, 2024 17:26
@danieljbruce danieljbruce requested a review from a team August 22, 2024 17:26
@product-auto-label product-auto-label bot added size: xl Pull request size is extra large. api: bigtable Issues related to the googleapis/nodejs-bigtable API. labels Aug 22, 2024
@danieljbruce danieljbruce changed the base branch from main to bigtable-authorized-views August 22, 2024 19:34
src/row.ts Outdated
key?: string;
metadata?: {};
constructor(table: Table, key: string) {
constructor(table: TabularApiService, key: string) {

Choose a reason for hiding this comment

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

Is this meant to be TabularAPISurface or TabularAPIService?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good catch. It should be TabularAPISurface. I changed this everywhere now.

@daniel-sanche daniel-sanche changed the title feat: Bigtable authorized views - move the code over to the TabularApiService class feat: Bigtable authorized views - move the code over to the TabularApiSurface class Aug 28, 2024
Copy link

@daniel-sanche daniel-sanche left a comment

Choose a reason for hiding this comment

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

LGTM after replacing service with surface

test/table.ts Outdated
'./family.js': {Family: FakeFamily},
'./mutation.js': {Mutation: FakeMutation},
'./row.js': {Row: FakeRow},
'./tabular-api-surface': {TabularApiService: FakeTabularApiSurface},

Choose a reason for hiding this comment

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

still a couple "services" here

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yup. I noticed the tests failing and then adjusted these.

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'll have to investigate the reason the most recent tests are failing.

Choose a reason for hiding this comment

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

It looks like there's still at least one :)

(TabularApiService)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Like you pointed out... It looks like TabularApiService still needs to be renamed.

@danieljbruce danieljbruce merged commit 932ab9e into bigtable-authorized-views Aug 28, 2024
@danieljbruce danieljbruce deleted the bigtable-authorized-views-initial-refactor branch August 28, 2024 17:43
danieljbruce added a commit that referenced this pull request Nov 7, 2024
* Create the new tabular api service file

* feat: Bigtable authorized views - move the code over to the TabularApiSurface class (#1463)

* Move the constructor over to TabularApiService

* Move sampleRowKeys over

* Move sampleRowKeys functions over and use promisify

* Adjust the proxyquire to work with TabularAPIserv

* Move all the ReadRows functionality over

* Solve the issue with the is dependency

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* Add header for new class

* Only include Table mocks that are necessary

* Remove TODO

* Rename TabularApiService to TabularApiSurface

* Change all imports to tabular-api-surface

* surface. not service

---------

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>

* feat: Bigtable Authorized Views - Allow checkAndMutate and ReadModifyWriteRow calls on Authorized Views (#1464)

* Move the constructor over to TabularApiService

* Move sampleRowKeys over

* Move sampleRowKeys functions over and use promisify

* Adjust the proxyquire to work with TabularAPIserv

* Move all the ReadRows functionality over

* Solve the issue with the is dependency

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* Add header for new class

* Trying out the FilterInformation class

* Add a DataUtils module for the shared row function

* Outsource functionality of filter to helper

* debugging

* Adjust proxyquire to include mocks for moved fn

* Remove imports

* Outsource code to a createRulesUtil function

* Change proxyquire to include createRulesUtil

* Move increment over to the utils folder

* Move the functions into a static class for mocks

* Remove mockCreateRules and shorten mock

* Stub out FakeRowDataUtil

* Remove unused dependencies

* Add the functions to work with checkAndMutate

and readWriteModifyRow

* Fix regressions from the merge

* Add documentation for the class

* Document the new methods of table

* Change the interface of the rowUtils

* Pull the generateProperties code out avoid duplica

* Move duplicate code out into a getProperties object

* Remove console.log

* Add method for creating views

* Object for making grpc calls for authorized views

* Remove import

* Update the documentation for the Table

* More specific type

* Add documentation for each of the functions

* Remove TODO

* Add headers

* Add documentation for new class

* Remove imports

* Reintroduce before

* Remove unused import

---------

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>

* feat: Create a view on the instance, not on the table (#1476)

* Move view creation from the table class to instanc

* feat: Create a view on the instance, not on the table

* Add table name parameter to the documentation

* Remove Table

* feat: Create the unit tests for Authorized Views ensuring that requests are consistent (#1501)

* Create a test for authorized views

* Set the ReadRows options

* Add authorized view test for createreadstream

* Pass authorizedViewName along for createReadStream

* Add the unit test for getRows

* Add the unit test for getRows

* Take out the test mock for the request function

* Mutate rows request - test setup

* Made corrections and src code changes so unit test

passes

* Fix the readrows test to end the stream

Also add a test for insert and make the test easier to debug.

* Finish the sampleRowKeys tests

* Refactor part of the test for getting request opts

* Authorized views for readRows test should be one

assert

* Add the mock function for request

* Make mutate rows use the mockRequest function

* Setup the sampleRowKeys setup fn to use mockReq

* Add comments to the mocking functions

* Fix comments. Move functions to right place

* Setup the readModifyWriteRow tests

* For createRules test use new mockCallbackRequest

You need to call the callback in order to end the operation to createRules.

* Use the new mockCallbackRequest function

* Get rid of the unused mock function

* Create a test file for createRules not got

* increment

* Add the test for increment

* Change the response value for authorized view

* Add the console logs and change return type

* Flesh out response so that view call works

* Exclude appropriate properties using promisify.

* Removed console logs

* Finished the filter test

* Add the view call for filter

* Remove only

* Change to more readable values

* Remove only

* Add header to the test

* For tests, expect view to be excluded from promis

* run linter

* Add a few @params and @returns

* Add a comment about making requests for auth views

* Added more comments - auth views vs table

Also added a comment for calling increment

* feat: Bigtable authorized views integration tests (#1504)

* Create a test for authorized views

* Set the ReadRows options

* Add authorized view test for createreadstream

* Pass authorizedViewName along for createReadStream

* Add the unit test for getRows

* Add the unit test for getRows

* Take out the test mock for the request function

* Mutate rows request - test setup

* Made corrections and src code changes so unit test

passes

* Fix the readrows test to end the stream

Also add a test for insert and make the test easier to debug.

* Finish the sampleRowKeys tests

* Refactor part of the test for getting request opts

* Authorized views for readRows test should be one

assert

* Add the mock function for request

* Make mutate rows use the mockRequest function

* Setup the sampleRowKeys setup fn to use mockReq

* Add comments to the mocking functions

* Fix comments. Move functions to right place

* Setup the readModifyWriteRow tests

* For createRules test use new mockCallbackRequest

You need to call the callback in order to end the operation to createRules.

* Use the new mockCallbackRequest function

* Get rid of the unused mock function

* Create a test file for createRules not got

* increment

* Add the test for increment

* Change the response value for authorized view

* Add the console logs and change return type

* Flesh out response so that view call works

* Exclude appropriate properties using promisify.

* Removed console logs

* Finished the filter test

* Add the view call for filter

* Remove only

* Change to more readable values

* Remove only

* Add header to the test

* For tests, expect view to be excluded from promis

* run linter

* Create the before hook for auth views

* Note to self on auth views - TODO

* Add an insert statement

* Make a test for getRows

* Add the test for the getRows function.

* Finish ‘should fail when writing to a row not in v

* Add another mutate test, preserve table after test

Add after hook to make sure table values stay the same.

Add test for modifying from different column

* Remove TODO

* refactor the error message in the test

* Add mutate, insert and sampleRowKeys tests

* Fix sampleRowKeys test to require a fix upstream

* Create samplerowkeys and createreadstream tests

* Surround all tests in a try block

This allows for better error reporting

* Fixed the column filter so it works

* Reduce verbosity in tests

In many cases, 3 lines can be reduced to one variable. This is crucial for making the integration tests shorter.

* Replace verbose data with data variable

* Add an insert for multiple rows

* Fix the check and mutate test to ignore corrupt d

* Add the readModifyWriteRow tests

* Add awaits

* wrap columnFamily and columnIdInView in brackets

* Eliminate the TODO

* Remove only

* Add key back to filter config option

---------

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Co-authored-by: Kevin Kim <kevkim@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api: bigtable Issues related to the googleapis/nodejs-bigtable API. size: xl Pull request size is extra large.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants