1
0
mirror of https://github.com/google/nomulus synced 2026-01-24 06:32:20 +00:00

Compare commits

...

87 Commits

Author SHA1 Message Date
Rachel Guan
3ef1e6c6a4 Add renewal columns in BillingRecurrence (#1568)
* Add renewal columns in BillingRecurrence

* Change from event to recurrence in file name
2022-03-28 17:42:01 -04:00
Lai Jiang
9363b30b3e Set the initial worker count for the RDE beam pipeline at 24 (#1572)
* Set the initial worker count for the RDE beam pipeline at 24

This likely will speed up the pipeline by skipping the initially slow
process of spinning up instances.
2022-03-27 22:51:58 -04:00
Weimin Yu
342f7d72a2 Fix sporadic SQL Snapshot failure (#1571)
* Fix sporadic SQL Snapshot failure

The Postgresql set-snapshot statement (called in
JpaTransactionManager.setDatabaseSnapshot() method) must be the first
statement in the SQL transaction.

Currenty the JpaTransaction.transact() method may insert a query for
DatabaseMigrationStateSchedule before the user query when the cache is
empty or the cached value expires.

This PR proactively preloads the cache in RegistryJpaIO to prevent cache
loading  inside the transaction.

This PR also changes some DatabaseSnapshotTest tests to be retrying, in
case they run just after the cache expires. (This has happened before in
CI).
2022-03-25 15:55:00 -04:00
Michael Muller
3592877210 Terminate with exit code of 1 on format check fail (#1570)
The format check script currently outputs "true" if there were files that need
reformatting and "false" if not, which is useful for gradle but less so for
other applications (notably commit hooks).  Terminate with an exit code of 1
if the format check fails.

TESTED: Tried this from both a pre-commit hook and from the gradle build.
2022-03-25 12:50:27 -04:00
Michael Muller
3006ca39ca Add a "list_txns" to dump Transaction table (#1569)
* Add a "list_txns" to dump Transaction table

Add the list_txns command which can dump the entire contents of the
Transaction table, either in csv format or as human readable transactions.

The CSV format is useful for storing the transaction table at a specific point
in time for later reference without requiring us to repeatedly hit the
replica.

Creating this without tests because this command has a very short shelf-life
and is really only intended to be run by developers.  Tested all features
locally.

* Reformatted
2022-03-25 12:41:10 -04:00
gbrodman
63adfa77ed Use TLS v1.3 explicitly in RDE reporting (#1564)
* Use TLS v1.3 explicitly in RDE reporting

The default Java 1.8 TLS version is 1.2 which isn't supported by the
ICANN upload site.
2022-03-25 12:09:46 -04:00
Weimin Yu
fd5e5bf6f1 Ignore trivial differences when comparing DB (#1567)
* Ignore trivial differences when comparing DB

Some data difference are due to entity model differences and also
harmless. We should igore them when comparing Datastore and SQL.

  This PR ignores the following diffs:
  - null vs empty collection
  - the empty string in Address.stree field, which is a list
2022-03-23 13:52:31 -04:00
sarahcaseybot
2495167215 Address some tiny TODOs (#1566)
* Address some tiny TODOs

* Format fix
2022-03-23 12:23:29 -04:00
gbrodman
0c6f399533 Bump flogger and beam dependency versions (#1562)
* Bump flogger and beam dependency versions

Beam 2.34.0 -> 2.37.0
Flogger 0.7.3 -> 0.7.4

Intellij keeps getting confused about which version of Flogger we're
bringing in. Even though we had previously locked Flogger to 0.7.3, for
some reason it was still bringing in the Beam transitive dependency of
0.6.0 which was causing the a bunch of class initialization errors.

Bumping Beam to 2.34.0 bumps the transitive dependency to 0.7.4 so we
can always use that.
2022-03-22 16:08:32 -04:00
Michael Muller
075ea23f1d Fix build warning (#1565) 2022-03-22 10:34:36 -04:00
Lai Jiang
3c19d4cbf6 Some code health fixes (#1563)
1. testRun_withPrefix() in RdeUploadActionTest does calls a mock lock
   handler and does not actually try to read from the fake GCS
   implementation. Therefore there's no point settig it up.

2. Remove an unused field in UploadDatastoreBackupActionTest.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/google/nomulus/1563)
<!-- Reviewable:end -->
2022-03-22 09:49:14 -04:00
Rachel Guan
ea4d60c830 Remove static methods in back up actions (#1481)
* Remove static methods in back up actions

* Remove BigqueryPollJob helper class

* Add schedule time in task comparison

* Change payload type from byte[] to ByteString
2022-03-17 17:54:20 -04:00
Lai Jiang
c24e0053c8 Fix a subtle issue in BRDA copy caused by Cloud Tasks (#1556)
* Fix a subtle issue in BRDA copy caused by Cloud Tasks

After the Cloud Tasks migration and #1508, the BRDA copy job now
routinely fail on the first try because the revision update is not
commited by the time the Cloud Tasks job enqueued in the same
transaction runs for  the first time. This is because the enqueueing is
a side effect and not part of the transaction. The job eventually
succeeds because of retries.

This PR attempts to mitigate the initial failure by adding a delay to
the enqueued job, and checking the cursor in the job itself to prevent
it from running before the transaction is commited.
2022-03-17 16:32:07 -04:00
Michael Muller
537a6e4466 Fix issues with saving and deleting gap records (#1561)
* Fix issues with saving and deleting gap records

Datastore limits us to mutating up to 25 records per transaction.  We
sometimes exceed that when deleting expired gap records.  In addition, it is
theoretically possible for us to accumulate enough continuous gap records to
exceed this count while replaying the original transaction.

Deal with deletion by breaking up the gap records to be deleted into a batch
size that is small enough to be deleted transactionally (in practice, we don't
much care about the transactionality but it doesn't seem like we can delete
batches without it).

Deal with the possibility of too many additions by always breaking out gap
record storage and last transaction number updates into their own
transaction(s) (separate from the replay of the original SQL transaction).
2022-03-17 15:09:59 -04:00
Ben McIlwain
6c20d39a2d Add domain repo ID and token type indexes to AllocationToken table (#1560)
These are useful for the purposes of filtering by one-time/multi-use tokens, and
for determining which one-time tokens have been used (and if so, for which
domain).
2022-03-17 13:58:45 -04:00
Michael Muller
60c156c061 Track and replay Transaction table gaps (#1557)
* Track and replay Transaction table gaps

Id gaps in the Transaction table can be the result of a transactions committed
out of order.  To deal with this, keep track of gaps for up to five minutes
and check to see if they've been back-filled prior to applying the next batch
of transactions during reply.

* Changes for review

* Calculate gap expiration time before gap queries

* Reformat.
2022-03-16 11:08:45 -04:00
Ben McIlwain
742ad0b37c Add 3 more SQL indexes to the Host table (#1559)
* Add 3 more SQL indexes to the Host table

These indexes on creationTime, deletionTime, and currentSponsorRegistrarId are
present on the other two EPP resource tables (Domain and Contact), and are
useful for a wide variety of operations/analytics queries.
2022-03-15 22:16:36 -04:00
Weimin Yu
6dd6ebce75 Improve cache loading in Registries.java (#1558)
* Improve cache loading in Registries.java

The loader for the TLD cache in Registries.java unnecessarily reads from
another cache when running with SQL, potentially triggering additional
database access. This code runs in the whois query path, and contributes
to the high latency in sandbox.
2022-03-15 22:02:05 -04:00
Ben McIlwain
767e3935af Make DigestType.fromWireValue() more performant (#1555)
* Make DigestType.fromWireValue() more performant
2022-03-15 13:00:54 -04:00
Rachel Guan
86aa420773 Add a a delay to task in CommitLogCheckpointAction (#1554)
* Add delay to task
2022-03-15 10:49:35 -04:00
Ben McIlwain
61b38569e2 Add domainRepoId indexes to billing events (#1544)
The query analyzer identified this is a missing index on the BillingEvent table,
and I added it for recurrences and cancellations as well as it's likely to be a
problem for them too. "Give me all the billing events associated with a given
domain by its repo ID" seems like a pretty common use case for the DB (and does
appear to be used by our invoicing pipeline).

This is a follow-up to PR #1545.
2022-03-14 17:20:58 -04:00
Ben McIlwain
4bfa19a90c Add 9 more indexes to SQL schema (#1540)
These indexes were identified as missing by PostgreSQL's query analyzer in our
sandbox environment (where we get enough realistic EPP traffic to identify these
deficiencies).

Note that a lot of the new indexes being named have to use the DB representation
of the column name because they are either embedded or subclassed entities,
whereas most of the existing ones are able to simply refer to Java field names.

This is the Java schema follow-up PR to PR #1541, which is what added the
actual DB changes through Flyway scripts.
2022-03-14 15:59:05 -04:00
Rachel Guan
a001df6d7a Remove AppEngineServiceUtils dependency (#1534) 2022-03-14 14:10:30 -04:00
Rachel Guan
6caf7819ed Replace email content with placeholders (#1530)
* Replace email content with placeholders

* Improve sample email wording
2022-03-14 11:30:58 -04:00
Weimin Yu
757803e985 Revise host.inet_addresses query to use gin index (#1550)
* Revise host.inet_addresses query to use gin index
2022-03-09 23:32:17 -05:00
Weimin Yu
4b1f4f96e3 Reorganize new schema changes (#1551)
* Reorganize new schema changes

Reorganized new schema changes and make each flyway script update a
single table.

Each flyway script is executed in a single database transaction so that
the script can be rolled back in one shot. It acquires a shared lock on
all tables touched by the script. This is deadlock-prone because in a
busy database, there may be user queries that attempt to lock the same
set of tables, but in different order. By limiting each script to one
table, we avoid the problem.

We should have some a presubmit check to enforce this rule.

All changes have been deployed to Sandbox out-of-band. When doing so,
we changed all CREATE INDEX statements to CREATE INDEX IF NOT EXISTS.

Future deployments should be able to proceed normally.
2022-03-09 20:47:24 -05:00
Ben McIlwain
bd49e8b238 Add anti-deadlock instructions to DB update README (#1552) 2022-03-09 18:50:15 -05:00
Weimin Yu
6249a8e118 Revise Host index on inet_addresses (#1549)
* Revise Host index on inet_addresses

The index on the 'inet_addresses array column should be of gin or gist
type, which index individual array elements. We use gin for now since
host updates are not often, and gin has better accuracy.

Since flyway script V108__... has not been deployed, we  edit the file
in place instead of adding a new script.

This will be followed up with a modified query that can take advantage
of the gin index. Until then we don't expect to see performance
improvement.

The suspected bottlenect query in the whois path is:

select * from "Host" where 'non-ip-string' = any(inet_address) and
deletion_time < now();

It needs to be revised into:

select * from "Host" where array['non-ip-string'] <@ inet_address and
deletion_time < now();

The combined change reduces the query time from 90ms to 30ms in Sandbox,
and from 150ms to 40ms in production.

It is unclear if this solves all problem with whois latency.
2022-03-08 14:22:01 -05:00
Ben McIlwain
9b7bb12cd1 Add deletionTime/inetAddresses indexes to Host table to support WHOIS (#1548)
* Add deletionTime/inetAddresses indexes to Host table to support WHOIS

Weimin identified these as missing, and being the cause of slowdowns in
NameserverLookupByIpCommand that we're seeing in sandbox.

This is the first of two PRs, adding just the Flyway/schema changes. The
second PR adding the Java object model changes is #1547.
2022-03-07 16:07:11 -05:00
Michael Muller
71d13bab71 Improve Transaction gap processing (#1546)
Skip multiple gaps in one pass and write the correct transaction id to
datastore.
2022-03-07 13:26:18 -05:00
Ben McIlwain
8db28b7e61 Add domainRepoId indexes to billing events (#1545)
* Add domainRepoId indexes to billing events #1544

The query analyzer identified this is a missing index on the BillingEvent table,
and I added it for recurrences and cancellations as well as it's likely to be a
problem for them too. "Give me all the billing events associated with a given
domain by its repo ID" seems like a pretty common use case for the DB (and does
appear to be used by our invoicing pipeline).

This is the first of two PRs that makes just the DB changes. The second PR
(#1544) will add the Java code changes, and will be committed after this one is
deployed.
2022-03-07 12:21:40 -05:00
Lai Jiang
5a7dc307c5 Update the the latest LTS Node version (#1543)
<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/google/nomulus/1543)
<!-- Reviewable:end -->
2022-03-07 11:49:18 -05:00
Ben McIlwain
67278af3cb Add 9 more indexes to SQL schema (#1541)
* Add 9 more indexes to SQL schema

This indexes were identified as missing by PostgreSQL's query analyzer in our
sandbox environment (where we get enough realistic EPP traffic to identify these
deficiencies).

This is the first of two PRs -- the second PR (#1540) will be merged only after
this one is live in production. Note that this is the PR that actually modifies
the database though, so once this one is deployed we will already have the
benefit of the new indexes.
2022-03-05 17:57:36 -05:00
sarahcaseybot
1eafc983ab Check signature length in DS records (#1538)
* Check signature length in DS records

* Small fixes

* Add unit tests

* Formatting fix
2022-03-04 15:18:14 -05:00
gbrodman
f1bbdc5a0b Use built-in Java URL connections instead of UrlFetchService (#1535)
- Use the standard HttpsURLConnection to write/read data
- Rewrite RdeReporter, Nordn*Action, and Marksdb classes and related
  tests to conform to the new format
- Remove FakeURLFetchService and ForwardingUrlFetchService as they weren't used
- Refactor UrlFetchException to UrlConnectionException
- Refactor UrlFetchUtils to UrlConnectionUtils

I will need to test this on Alpha. Fortunately the connections that
don't require auth (e.g. TMDB downloading) should be testable.
2022-03-04 14:16:22 -05:00
Michael Muller
b146301495 Allow replicateToDatastore to skip gaps (#1539)
* Allow replicateToDatastore to skip gaps

As it turns out, gaps in the transaction id sequence number are expected
because rollbacks do not rollback sequence numbers.

To deal with this, stop checking these.

This change is not adequate in and of itself, as it is possible for a gap to
be introduced if two transactions are committed out of order of their sequence
number.  We are currently discussing several strategies to mitigate this.

* Remove println, add a record verification
2022-03-04 09:04:13 -05:00
Weimin Yu
437a747eae Pass stack trace to validate_datastore user (#1537)
* Pass stack trace to validate_datastore user
2022-03-03 16:10:31 -05:00
Weimin Yu
a620b37c80 Fix hanging test (#1536)
* Fix hanging test

Tests using the TestServerExtension may hang forever if an underlying
component (e.g., testcontainer for psql) fails. This may be the cause
of the some kokoro runs that timeed out after three hours.
2022-03-03 14:43:32 -05:00
Rachel Guan
267cbeb95b Inject CloudTasksUtil to AsyncTaskEnqueuer (#1522)
* Inject CloudTasksUtil to AsyncTasksEnqueuer

* Rebase

* Remove QUEUE_ASYNC_DELETE from AsyncTasksEnqueuer

* Refactor create() 

* Remove AppEngineServiceUtil depdendency from AsyncTaskEnqueuer
2022-03-02 11:31:45 -05:00
Weimin Yu
b9fcabbc36 Save db discrepancies to GCS (#1527)
* Save db discrepancies to GCS
2022-02-28 16:52:09 -05:00
Weimin Yu
4f33de10f3 Add a tools command to launch SQL validation job (#1526)
* Add a tools command to launch SQL validation job

Stopping using Pipeline.run().waitUntilFinish in
ValidateDatastorePipeline. Flex-templalate does not support blocking
wait in the main thread.

This PR adds a new ValidateSqlCommand that launches the pipeline and
maintains the SQL snapshot while the pipeline is running.

This PR also added more parameters to both ValidateSqlCommand and
ValidateDatastoreCommand:
- The -c option to supply an optional incremental comparison start time
- The -r option to supply an optional release tag that is not 'live',
  e.g., nomulus-DDDDYYMM-RC00

If the manual launch option (-m) is enabled, the commands will print the
gcloud command that can launch the pipeline.

Tested with sandbox, qa and the dev project.
2022-02-28 13:14:57 -05:00
Michael Muller
d6bb83f6d3 Nullify contact fields in setContactFields (#1533)
When setting contact fields from a set of DesignatedContact's, nullify the
existing fields so they don't stick around if they're not in the new set.
2022-02-28 10:57:35 -05:00
Michael Muller
a8d3d22c5a Don't reset the update time for TLD updates (#1532)
* Don't reset the update time for TLD updates

It turns out that the reason that the Registrar update timestamp isn't updated
for some of the tests is because the record is updated unchanged.  We can
avoid this problem by not trying to update the registrar to the same value.
So in this case, if the registrar alreay contains the TLD we're adding, don't
try to add it.
2022-02-25 13:09:36 -05:00
Rachel Guan
fac659b520 Inject CloudTasksUtils to DomainLockUtils (#1519)
* Move enqueueDomainRelock to DomainLockUtils

* Rebase and improve PR

* Inject CloudTaskUtils to DomainLockUtils
2022-02-25 11:38:38 -05:00
gbrodman
178702ded3 Fix DTR creation in one location and clean up replay comparison (#1529)
* Fix DTR creation in one location and clean up replay comparison
2022-02-23 11:07:10 -05:00
Lai Jiang
59bca1a9ed Disable sending cert expiration emails on sandbox (#1528) 2022-02-22 14:46:27 -05:00
Michael Muller
f8198fa590 Do full database comparison during replay tests (#1524)
* Fix entity delete replication, compare db @ replay

Replay tests currently only verify that the contents of a transaction are
can be successfully replicated to the other database.  They do not verify that
the contents of both databases are equivalent.  As a result, we miss any
changes omitted from the transaction (as was the case with entity deletions).

This change adds a final database comparison to ReplayExtension so we can
safely say that the databases are in the same state.

This comparison is introduced in part as a unit test for the one-line fix for
replication of an "entity delete" operation (where we delete using an entity
object instead of the object's key) which so far has only affected PollMessage
deletion.  The fix is also included in this commit within
JpaTransactionManagerImpl.

* Exclude tests and entities with failing comparisons

* Get all tests to pass and fix more timestamp

Fix most of the unit tests that were broken by this change.

- Fix timestamp updates after grace period changes in DomainContent and for
  TLD changes in Registrar.
- Reenable full database comparison for most DomainCreateFlowTest's.
- Make some test entities NonReplicated so they don't break when used with
  jpaTm().delete()
- Diable checking of a few more entity types that are failing comparisons.
- Add some formatting fixes.

* Remove unnecessary "NoDatabaseCompare"

I turns out that after other fixes/elisions we no longer need these for
any tests in DomainCreateFlowTest.

* Changes for review

* Remove old "compare" flag.

* Reformatted.
2022-02-22 10:49:57 -05:00
Lai Jiang
bbac81996b Make a few quality-of-life improvements in CloudTasksUtils (#1521)
* Make a few quality-of-life improvements in CloudTasksUtils

1. Update the method names. There are too many overloaded methods and it
   is hard to figure out which one does which without checking the
   javadoc.

2. Added a method in the task matcher to specify the delay time in
   DateTime, so the caller does not need to convert it to Timestamp.

3. Remove the expilict dependency on a clock when enqueueing a task with
   delay, the clock is now injected directly into the util instance
   itself.
2022-02-18 20:21:56 -05:00
Ben McIlwain
52c759d1db Disable prober data deletion cron job in prod & sandbox (#1525)
* Disable prober data deletion cron job in prod & sandbox

This is going to unnecessarily make the database migration more complex, and we
don't need them that badly. We'll re-enable these cron jobs once we've written
the new version of this action that handles Cloud SQL correctly (the current
version only does Datastore anyway).
2022-02-17 08:46:40 -08:00
Weimin Yu
453af87615 Ignore prober data when comparing databases (#1523)
* Ignore prober data when comparing databases

Completely ignore prober data when comparing Datastore and SQL.

Prober data deletions are not propagated from Datastore to SQL. It is
difficult to distinguish soft-deletes from normal updates, therefore
difficult to avoid false positives when looking for differences.
2022-02-15 12:01:20 -05:00
Ben McIlwain
d0d7515c0a Make NordnUploadAction resilient to duplicate task queue tasks (#1516)
This is necessary because the Cloud Tasks API is not transactionally enrolled,
so it's possible that multiple tasks might end up being enqueued. We need to be
able to handle them.
2022-02-14 14:59:46 -05:00
Michael Muller
2c70127573 Fix update timestamps for DomainContent types (#1517)
* Fix update timestamps for DomainContent types

We expect update timestamps to be updated whenever a containing entity is
modified and persisted, but unfortunately Hibernate doesn't seem to do this --
instead it appears to regard such an entity as unchanged.

To work around this, we explicitly reset the update timestamp whenever a
nested collection is modified in the Builder.

Note that this change only solves the problem for DomainContent.  All other
entitities containing UpdateAutoTimestamp will need to be audited and
instrumented with a similar change.

* Fix a handful of tests broken by this change

* Reformatted.
2022-02-14 11:31:03 -05:00
Rachel Guan
d3fc6063c9 Use CloudTasksUtils to enqueue in RegistrarSettingsAction (#1467)
* Use CloudTaskUtils to enqueue

* Add CloudTasksUtilsModule to FrontendComponent

* Fix Uri query issue

* Remove header and check service in matcher

* Use a ThreadLocal boolean in TestServer to determine enqueueing

* Extract enqueuing and email sending from tm().transact()
2022-02-10 11:16:28 -05:00
Weimin Yu
82802ec85c Compare datastore to sql action (#1507)
* Add action to DB comparison pipeline

Add a backend Action in Nomulus server that lanuches the pipeline for
comparing datastore (secondary) with Cloud SQL (primary).

* Save progress

* Revert test changes

* Add pipeline launching
2022-02-10 10:43:36 -05:00
Rachel Guan
e53594a626 Fix protobuf-java-util dependency (#1518) 2022-02-09 14:11:09 -05:00
Rachel Guan
e6577e3f23 Use CloudTasksUtil to enqueue task in IcannReportingStagingAction (#1489)
* Use CloudTasksUtil to enqueue task

* Use schedule time helper and add schedule time comparison
2022-02-09 12:33:56 -05:00
Michael Muller
c9da36be9f Fix create/update timestamp replay problems (#1515)
* Fix create/update timestamp replay problems

When CreateAutoTimestamp and UpdateAutoTimestamp are inserted into a
Transaction, their values are not populated in the same way as when they are
stored in the course of an SQL commit.  This results in different timestamp
values between SQL and datastore during the SQL -> DS replay.

Fix this by providing these values from the JPA transaction time when we're
doing transaction serialization.

This change also removes the initialization of the Ofy clock in
ExpandRecurringBillingEventsActionTest.  It's not necessary as the
ReplayExtension already takes care of this and doing it after the
ReplayExtension as we were breaks a test now that the update timestamps are
correct.
2022-02-09 08:48:51 -05:00
Rachel Guan
2ccae00dae Remove ReportingUtils and use CloudTasksUtil to enqueue tasks in GenerateInvoicesAction and GenerateSpec11ReportAction (#1491)
* Remove ReportingUtils and use CloudTaskUtil to enqueue 

* Use schedule time helper to enqueue and update schedule time comparison

* Fix comment, indentation in gradle file and improve time comparison
2022-02-08 17:48:47 -05:00
Rachel Guan
00c8b6a76d Change from TaskQueueUtils to CloudTasksUtils in LoadTestAction (#1468)
* Change from TaskQueueUtils to CloudTasksUtils in LoadTestAction

* Put X_CSRF_TOKEN in task headers

* Fix schedule time and gradle issue

* Remove TaskQueue constant dependency

* Double run seconds

* Add comment for X_CSRF_TOKEN
2022-02-08 17:44:24 -05:00
Lai Jiang
09dca28122 Make EscrowDepositEncryptor work with BRDA deposits (#1512)
Also make it possible to specify a revision number.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/google/nomulus/1512)
<!-- Reviewable:end -->
2022-02-07 12:40:00 -05:00
Weimin Yu
b412bdef9f Fix flaky RdeStagingActionDatastoreTest (#1514)
* Fix flaky RdeStagingActionDatastoreTest

Fixed the most common cause that makes one method flaky (Clock and
timestamp problem). Added a TODO to rethink test case.

Also added notes on tasks potentially enqueued multiple times.
2022-02-04 10:40:52 -05:00
Rachel Guan
62e5de8a3a Add support for delay of duration when scheduling a task (#1493)
* Add support for delay by duration when scheduling task

* Fix comments

* Add test for negative duration

* Change delay parameter type to duration
2022-02-03 22:25:39 -05:00
Lai Jiang
fa9b784c5c Correctly delete all stopped versions except for the most recent 3 (#1511)
The gcloud command does some weird stuff with sorting when custom format
is used. Here we instead rely on linux sort and head command to sort the
versions list.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/google/nomulus/1511)
<!-- Reviewable:end -->
2022-02-03 16:04:58 -05:00
Weimin Yu
e2bd72a74e Add an index on Host.host_name column (#1510)
* Add an index on Host.host_name column

This field is queried during host creation and needs an index to speed
up the query.

Since Hibernate does not explicitly refer to indexes, we can change the
code and schema in one PR.
2022-02-03 15:57:15 -05:00
gbrodman
28d41488b1 Use the built-in replicaJpaTm() in RDAP (#1506)
* Use the built-in replicaJpaTm() in RDAP

This includes a test for the replica-simulating transaction manager and
removal of any replica-specific code in RDAP tests, because it's
unnecessary due to the existing tests.
2022-02-03 11:14:26 -05:00
Weimin Yu
1107b9f2e3 Count duplicates when comparing Databases (#1509)
* Count duplicates when comparing Databases

Cursors may have duplicates in Datastore if imported across projects.
Count them instead of throwing.
2022-02-03 10:59:03 -05:00
Lai Jiang
9624b483d4 Copy the latest revision of BRDA during upload (#1508)
The revision was hardcoded to 0, which caused problem when we need to
re-run BRDA.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/google/nomulus/1508)
<!-- Reviewable:end -->
2022-02-02 21:54:42 -05:00
Rachel Guan
365937f22d Change from TaskQueueUtils to CloudTasksUtils in RdeStaging (#1411)
* Change from TaskQueueUtils to CloudTaskUtils in RdeStaging
2022-02-01 20:41:56 -05:00
sarahcaseybot
d5db6c16bc Add DS validation to match Cloud DNS (#1487)
* Add DS validation to match Cloud DNS

* Add checks to flows

* Add some flow tests

* Add tests for DomainCreateFlow

* Add tests for UpdateDomainCommand

* Fix docs test

* Small fixes

* Remove builder from tests
2022-02-01 15:25:00 -05:00
Lai Jiang
c1ad06afd1 Allow the beam parameter in RDE standard mode (#1505)
Standard mode will determine the watermarks based on the cursors and
kick off subsequent uploading steps. In order to run both the Beam and
the Mapreduce pipeline in parallel, we need to allow setting the beam
parameter when in standard mode. This changes should have been part of
https://github.com/google/nomulus/pull/1500.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/google/nomulus/1505)
<!-- Reviewable:end -->
2022-01-31 14:20:23 -05:00
gbrodman
b24670f33a Use the replica jpaTm in FKI and EppResource cache methods (#1503)
The cached methods are only used in situations where we don't really
care about being 100% synchronously up to date (e.g. whois), and they're
not used frequently anyway, so it's safe to use the replica in these
locations.
2022-01-28 18:05:18 -05:00
Weimin Yu
1253fa479a Release ValidateSqlPipeline as container image (#1504)
* Release ValidateSqlPipeline as container image
2022-01-28 14:57:31 -05:00
Weimin Yu
5f0dd24906 Release ValidateDatastorePipeline (#1501)
* Release ValidateDatastorePipeline
2022-01-26 13:38:19 -05:00
Ben McIlwain
e25885e25f Remove obsolete scrap commands (#1502) 2022-01-25 15:23:00 -05:00
gbrodman
cbdf4704ba Add missing @Overrides (#1499)
Not sure how this snuck through
2022-01-24 16:58:38 -05:00
Weimin Yu
207c7e7ca8 Compare migration data with SQL as primary DB (#1497)
* Compare migration data with SQL as primary DB

Add a BEAM pipeline that compares the secondary Datastore against SQL.
This is a dumb pipeline to be launched by a driver (in a followup PR).
Manually tested pipeline in sandbox.

Also updated the ValidateSqlPipeline and the snapshot finder class so
that an appropriate Datastore export is found (one that ends before the
replay checkpoint value).
2022-01-24 11:20:48 -05:00
Lai Jiang
b3a0eb6bd8 Add a cron job to run the RDE Beam pipeline in parallel with MapReduce (#1500) 2022-01-21 23:36:13 -05:00
gbrodman
c602aa6e67 Use the read-only replica for JPA invoicing (#1494)
* Use the read-only replica for JPA invoicing
2022-01-20 20:50:10 +00:00
gbrodman
c6008b65a0 Use a read-only replica SQL instance in RdapDomainSearchAction (#1495)
We can use it more places later but this can serve as a template. We
should inject the connection to the read-only replica (only created
once) to the constructor of the action, then use that instead of the
regular transaction manager.

We add a transaction manager that simulates the read-only-replica
behavior for testing purposes as well.

In addition, we set the transaction isolation level to READ COMMITTED
for this transaction manager (this is fine since we're never writing to
it). Postgres requires this for replica SQL access (it fails if we try
to use SERIALIZABLE) transactions. We didn't see this with the pipelines
before since those already had transaction isolation level overrides
2022-01-20 15:39:07 -05:00
gbrodman
eded6813ab Add a bit of documentation about the replica config (#1488) 2022-01-13 15:44:04 -05:00
Rachel Guan
bbe5c058fe Add support for empty or null params for createTask() (#1448)
* Add support for null or empty params

* Add Null or empty check in CollectionUtils

* Remove content type header for empty params in POST request
2022-01-13 12:44:41 -05:00
Weimin Yu
4b0cf576f8 CommitLog handling code should call ofyTm (#1492)
* CommitLog handling code should call ofyTm

The tm() call will use JPA transaction manager after the switch-over to
SQL. These calls would lose their transaction semantics.

Both actions are to be invoked after the switchover in case we have to
switch back to Datastore as primary.
2022-01-13 12:33:19 -05:00
Michael Muller
045de3889b Allow database comparison when in read-only mode (#1490)
Note: this change was actually authored by @weiminyu, I'm checking it in for
expediency.
2022-01-13 09:32:49 -05:00
Weimin Yu
68fc4cd022 Only compare recent changes in Datastore and SQL (#1485)
* Only compare recent changes in Datastore and SQL

When comparing Datastore and SQL, ignore older History and EPP resource
objects. This cuts the run time in half compared with a full comparison.
The intention is to run a full comparison before the switch-over from
Datastore and SQL, and run this incremental comparison during the down
time.

The incremental comparison takes about 25 minutes in production.
Performance can be improved further by filtering out older billing
events (OneTime and Cancellation). However, we don't think further
optimization is worth the effort (considering that Recurring events
cannot be filtered since they are mutable but without lastUpdateTime).

Verified in Sandbox and prod with and without time filter.
2022-01-11 14:17:32 -05:00
Lai Jiang
ebe55146c3 Add a command to compare two escrow deposits (#1476)
We already have ValidateEscrowDepositCommand to check for internal
reference consistency of two deposits, i. e. making sure that all
contacts and hosts referenced by domains exist in the same deposit.
Therefore to compare whether two deposits are equal we only need to make
sure that they contain the same domains and registrars, assuming they
both pass the validation. We don't compare their contents directly
because the MapReduce deposit contains all contacts and domains whereas
the Beam deposit only contains referenced ones, making a direct
comparison impossible.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/google/nomulus/1476)
<!-- Reviewable:end -->
2022-01-11 11:47:58 -05:00
gbrodman
807ddf46b9 Add replicateToDatastore cron job to prod (#1459)
No issues with this in sandbox so we should add it in prod
2022-01-10 16:38:25 -05:00
gbrodman
ff8f86090d Speed up updating of premium lists (#1482)
* Speed up updating of premium lists

There are two parts to this:
1. Don't load the premium entries in the command prompt (this isn't
necessary and we didn't display that information anyway).
2. Set a proper batch size (rather than just 1) when saving all the
premium entries. This means that we generate only one INSERT statement
rather than N statements.
2022-01-10 16:33:35 -05:00
376 changed files with 16465 additions and 12692 deletions

View File

@@ -55,7 +55,7 @@ plugins {
node {
download = true
version = "14.15.5"
version = "16.14.0"
npmVersion = "6.14.11"
}

View File

@@ -4,7 +4,7 @@
com.google.auto.value:auto-value-annotations:1.7.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotations:2.5.1
com.google.flogger:flogger:0.7.3
com.google.flogger:flogger:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava

View File

@@ -4,7 +4,7 @@
com.google.auto.value:auto-value-annotations:1.7.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotations:2.5.1
com.google.flogger:flogger:0.7.3
com.google.flogger:flogger:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava

View File

@@ -4,8 +4,8 @@
com.google.auto.value:auto-value-annotations:1.7.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotations:2.5.1
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava

View File

@@ -4,8 +4,8 @@
com.google.auto.value:auto-value-annotations:1.7.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotations:2.5.1
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava

View File

@@ -4,7 +4,7 @@
com.google.auto.value:auto-value-annotations:1.7.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotations:2.5.1
com.google.flogger:flogger:0.7.3
com.google.flogger:flogger:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava

View File

@@ -4,7 +4,7 @@
com.google.auto.value:auto-value-annotations:1.7.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotations:2.5.1
com.google.flogger:flogger:0.7.3
com.google.flogger:flogger:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava

View File

@@ -4,8 +4,8 @@
com.google.auto.value:auto-value-annotations:1.7.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotations:2.5.1
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava

View File

@@ -4,8 +4,8 @@
com.google.auto.value:auto-value-annotations:1.7.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotations:2.5.1
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava

View File

@@ -41,4 +41,20 @@ public interface Sleeper {
* @see com.google.common.util.concurrent.Uninterruptibles#sleepUninterruptibly
*/
void sleepUninterruptibly(ReadableDuration duration);
/**
* Puts the current thread to interruptible sleep.
*
* <p>This is a convenience method for {@link #sleep} that properly converts an {@link
* InterruptedException} to a {@link RuntimeException}.
*/
default void sleepInterruptibly(ReadableDuration duration) {
try {
sleep(duration);
} catch (InterruptedException e) {
// Restore current thread's interrupted state.
Thread.currentThread().interrupt();
throw new RuntimeException("Interrupted.", e);
}
}
}

View File

@@ -319,6 +319,7 @@ dependencies {
testCompile deps['com.google.appengine:appengine-testing']
testCompile deps['com.google.guava:guava-testlib']
testCompile deps['com.google.monitoring-client:contrib']
testCompile deps['com.google.protobuf:protobuf-java-util']
testCompile deps['com.google.truth:truth']
testCompile deps['com.google.truth.extensions:truth-java8-extension']
testCompile deps['org.checkerframework:checker-qual']
@@ -676,9 +677,9 @@ Optional<List<String>> getToolArgsList() {
// To run the nomulus tools with these command line tokens:
// "--foo", "bar baz", "--qux=quz"
// gradle registryTool --args="--foo 'bar baz' --qux=quz"
// gradle core:registryTool --args="--foo 'bar baz' --qux=quz"
// or:
// gradle registryTool --PtoolArgs="--foo|bar baz|--qux=quz"
// gradle core:registryTool -PtoolArgs="--foo|bar baz|--qux=quz"
// Note that the delimiting pipe can be backslash escaped if it is part of a
// parameter.
ext.createToolTask = {
@@ -706,7 +707,7 @@ createToolTask(
'initSqlPipeline', 'google.registry.beam.initsql.InitSqlPipeline')
createToolTask(
'validateSqlPipeline', 'google.registry.beam.comparedb.ValidateSqlPipeline')
'validateDatabasePipeline', 'google.registry.beam.comparedb.ValidateDatabasePipeline')
createToolTask(
@@ -793,6 +794,11 @@ if (environment == 'alpha') {
mainClass: 'google.registry.beam.rde.RdePipeline',
metaData : 'google/registry/beam/rde_pipeline_metadata.json'
],
validateDatabase :
[
mainClass: 'google.registry.beam.comparedb.ValidateDatabasePipeline',
metaData: 'google/registry/beam/validate_database_pipeline_metadata.json'
],
]
project.tasks.create("stageBeamPipelines") {
doLast {

View File

@@ -7,11 +7,11 @@ args4j:args4j:2.0.23
cglib:cglib-nodep:2.2
com.101tec:zkclient:0.10
com.beust:jcommander:1.60
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -26,113 +26,114 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.6
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -143,9 +144,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -165,31 +166,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -213,33 +217,33 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -249,7 +253,7 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -278,11 +282,11 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -7,11 +7,11 @@ args4j:args4j:2.0.23
cglib:cglib-nodep:2.2
com.101tec:zkclient:0.10
com.beust:jcommander:1.60
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -25,113 +25,114 @@ com.github.jnr:jnr-posix:3.1.4
com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.6
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -142,9 +143,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -164,28 +165,28 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-stub:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -208,33 +209,33 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.conscrypt:conscrypt-openjdk-uber:2.5.1
@@ -243,7 +244,6 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -272,11 +272,11 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -11,11 +11,11 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -30,114 +30,115 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud.sql:postgres-socket-factory:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -148,9 +149,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -173,31 +174,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -222,34 +226,34 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -259,7 +263,7 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -291,12 +295,12 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.webjars.npm:viz.js-for-graphviz-java:2.1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -11,11 +11,11 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -30,114 +30,115 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud.sql:postgres-socket-factory:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -148,9 +149,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -173,31 +174,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -221,34 +225,34 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -258,7 +262,6 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -290,12 +293,12 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.webjars.npm:viz.js-for-graphviz-java:2.1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -7,11 +7,11 @@ args4j:args4j:2.0.23
cglib:cglib-nodep:2.2
com.101tec:zkclient:0.10
com.beust:jcommander:1.60
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -26,113 +26,114 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.6
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -143,9 +144,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -165,31 +166,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -213,33 +217,33 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -249,7 +253,7 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -278,11 +282,11 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -7,11 +7,11 @@ args4j:args4j:2.0.23
cglib:cglib-nodep:2.2
com.101tec:zkclient:0.10
com.beust:jcommander:1.60
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -25,113 +25,114 @@ com.github.jnr:jnr-posix:3.1.4
com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.6
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -142,9 +143,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -164,28 +165,28 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-stub:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -209,33 +210,33 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.conscrypt:conscrypt-openjdk-uber:2.5.1
@@ -244,7 +245,7 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -273,11 +274,11 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -11,11 +11,11 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -30,113 +30,114 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -147,9 +148,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -172,31 +173,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -221,34 +225,34 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -258,7 +262,7 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -289,12 +293,12 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.webjars.npm:viz.js-for-graphviz-java:2.1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -11,11 +11,11 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -30,113 +30,114 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -147,9 +148,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -172,31 +173,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -221,34 +225,34 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -258,7 +262,7 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -289,12 +293,12 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.webjars.npm:viz.js-for-graphviz-java:2.1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -11,11 +11,11 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -30,113 +30,114 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -147,9 +148,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -172,31 +173,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -221,34 +225,34 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -258,7 +262,7 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -289,12 +293,12 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.webjars.npm:viz.js-for-graphviz-java:2.1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -11,11 +11,11 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -30,114 +30,115 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud.sql:postgres-socket-factory:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.113.12
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -148,9 +149,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.googlecode.charts4j:charts4j:1.3
@@ -173,31 +174,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -221,34 +225,34 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
org.apache.commons:commons-lang3:3.8.1
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.apache.httpcomponents:httpcore:4.4.15
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -258,7 +262,6 @@ org.easymock:easymock:3.0
org.flywaydb:flyway-core:5.2.4
org.glassfish.jaxb:jaxb-runtime:2.3.1
org.glassfish.jaxb:txw2:2.3.1
org.hamcrest:hamcrest-core:2.1
org.hamcrest:hamcrest:2.1
org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
org.hibernate:hibernate-core:5.4.23.Final
@@ -290,12 +293,12 @@ org.testcontainers:database-commons:1.15.2
org.testcontainers:jdbc:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.webjars.npm:viz.js-for-graphviz-java:2.1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -7,11 +7,11 @@ args4j:args4j:2.0.23
cglib:cglib-nodep:2.2
com.101tec:zkclient:0.10
com.beust:jcommander:1.60
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -26,61 +26,63 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
@@ -88,54 +90,53 @@ com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-api-stubs:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-nio:0.123.4
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.118.0
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.6
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava-testlib:30.1.1-jre
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -147,9 +148,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.google.truth.extensions:truth-java8-extension:1.1.2
@@ -174,31 +175,34 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -223,24 +227,24 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-direct-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-direct-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
@@ -249,18 +253,18 @@ org.apache.commons:commons-text:1.6
org.apache.ftpserver:ftplet-api:1.0.6
org.apache.ftpserver:ftpserver-core:1.0.6
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.apache.httpcomponents:httpcore:4.4.15
org.apache.mina:mina-core:2.0.4
org.apache.sshd:sshd-core:2.0.0
org.apache.sshd:sshd-scp:2.0.0
org.apache.sshd:sshd-sftp:2.0.0
org.apache.tomcat:tomcat-annotations-api:8.0.5
org.apiguardian:apiguardian-api:1.1.0
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -328,11 +332,11 @@ org.testcontainers:junit-jupiter:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:selenium:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -7,11 +7,11 @@ args4j:args4j:2.0.23
cglib:cglib-nodep:2.2
com.101tec:zkclient:0.10
com.beust:jcommander:1.60
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -25,61 +25,63 @@ com.github.jnr:jnr-posix:3.1.4
com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
@@ -87,54 +89,53 @@ com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-api-stubs:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-nio:0.123.4
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.118.0
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.6
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava-testlib:30.1.1-jre
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -146,9 +147,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.google.truth.extensions:truth-java8-extension:1.1.2
@@ -173,28 +174,28 @@ io.confluent:kafka-avro-serializer:5.3.2
io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-stub:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -219,24 +220,24 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-direct-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-direct-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
@@ -245,18 +246,18 @@ org.apache.commons:commons-text:1.6
org.apache.ftpserver:ftplet-api:1.0.6
org.apache.ftpserver:ftpserver-core:1.0.6
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.apache.httpcomponents:httpcore:4.4.15
org.apache.mina:mina-core:2.0.4
org.apache.sshd:sshd-core:2.0.0
org.apache.sshd:sshd-scp:2.0.0
org.apache.sshd:sshd-sftp:2.0.0
org.apache.tomcat:tomcat-annotations-api:8.0.5
org.apiguardian:apiguardian-api:1.1.0
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.conscrypt:conscrypt-openjdk-uber:2.5.1
@@ -323,11 +324,11 @@ org.testcontainers:junit-jupiter:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:selenium:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -11,11 +11,11 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -30,61 +30,63 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
@@ -92,55 +94,54 @@ com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-api-stubs:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud.sql:postgres-socket-factory:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-nio:0.123.4
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.118.0
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava-testlib:30.1.1-jre
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -152,9 +153,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.google.truth.extensions:truth-java8-extension:1.1.2
@@ -183,31 +184,34 @@ io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.github.java-diff-utils:java-diff-utils:4.9
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -233,24 +237,24 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-direct-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-direct-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
@@ -259,18 +263,18 @@ org.apache.commons:commons-text:1.6
org.apache.ftpserver:ftplet-api:1.0.6
org.apache.ftpserver:ftpserver-core:1.0.6
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.apache.httpcomponents:httpcore:4.4.15
org.apache.mina:mina-core:2.0.4
org.apache.sshd:sshd-core:2.0.0
org.apache.sshd:sshd-scp:2.0.0
org.apache.sshd:sshd-sftp:2.0.0
org.apache.tomcat:tomcat-annotations-api:8.0.5
org.apiguardian:apiguardian-api:1.1.0
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -340,12 +344,12 @@ org.testcontainers:junit-jupiter:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:selenium:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.webjars.npm:viz.js-for-graphviz-java:2.1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -11,11 +11,11 @@ com.eclipsesource.j2v8:j2v8_linux_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86:4.6.0
com.eclipsesource.j2v8:j2v8_win32_x86_64:4.6.0
com.fasterxml.jackson.core:jackson-annotations:2.12.4
com.fasterxml.jackson.core:jackson-core:2.12.4
com.fasterxml.jackson.core:jackson-databind:2.12.4
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.4
com.fasterxml.jackson:jackson-bom:2.12.4
com.fasterxml.jackson.core:jackson-annotations:2.13.0
com.fasterxml.jackson.core:jackson-core:2.13.0
com.fasterxml.jackson.core:jackson-databind:2.13.0
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.0
com.fasterxml.jackson:jackson-bom:2.13.0
com.fasterxml:classmate:1.5.1
com.github.docker-java:docker-java-api:3.2.7
com.github.docker-java:docker-java-transport-zerodep:3.2.7
@@ -30,61 +30,63 @@ com.github.jnr:jnr-unixsocket:0.38.5
com.github.jnr:jnr-x86asm:1.0.2
com.google.android:annotations:4.1.1.4
com.google.api-client:google-api-client-appengine:1.31.3
com.google.api-client:google-api-client-jackson2:1.31.3
com.google.api-client:google-api-client-jackson2:1.32.2
com.google.api-client:google-api-client-java6:1.31.3
com.google.api-client:google-api-client-servlet:1.31.3
com.google.api-client:google-api-client:1.32.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api-client:google-api-client:1.32.2
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-bigtable-v2:1.27.1
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:grpc-google-common-protos:2.3.2
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.1.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.125.0
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.125.0
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.1.0
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.1.0
com.google.api.grpc:proto-google-cloud-datastore-v1:0.91.3
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.2
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.96.2
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.2.0
com.google.api.grpc:grpc-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:grpc-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:grpc-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:grpc-google-common-protos:2.7.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:2.8.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:0.132.1
com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:0.132.1
com.google.api.grpc:proto-google-cloud-bigtable-admin-v2:2.5.1
com.google.api.grpc:proto-google-cloud-bigtable-v2:2.5.1
com.google.api.grpc:proto-google-cloud-datastore-v1:0.93.2
com.google.api.grpc:proto-google-cloud-firestore-v1:3.0.10
com.google.api.grpc:proto-google-cloud-pubsub-v1:1.97.1
com.google.api.grpc:proto-google-cloud-pubsublite-v1:1.4.8
com.google.api.grpc:proto-google-cloud-secretmanager-v1:1.4.0
com.google.api.grpc:proto-google-cloud-secretmanager-v1beta1:1.4.0
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-v1:6.12.1
com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:6.17.4
com.google.api.grpc:proto-google-cloud-spanner-v1:6.17.4
com.google.api.grpc:proto-google-cloud-storage-v2:2.0.1-alpha
com.google.api.grpc:proto-google-cloud-tasks-v2:1.33.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta2:0.89.2
com.google.api.grpc:proto-google-cloud-tasks-v2beta3:0.89.2
com.google.api.grpc:proto-google-common-protos:2.5.0
com.google.api.grpc:proto-google-iam-v1:1.1.0
com.google.api:api-common:2.0.2
com.google.api:gax-grpc:2.4.1
com.google.api:gax-httpjson:0.88.0
com.google.api:gax:2.4.1
com.google.api.grpc:proto-google-common-protos:2.7.1
com.google.api.grpc:proto-google-iam-v1:1.2.0
com.google.api:api-common:2.1.2
com.google.api:gax-grpc:2.8.1
com.google.api:gax-httpjson:0.93.1
com.google.api:gax:2.8.1
com.google.apis:google-api-services-admin-directory:directory_v1-rev118-1.25.0
com.google.apis:google-api-services-appengine:v1-rev130-1.25.0
com.google.apis:google-api-services-bigquery:v2-rev20210813-1.32.1
com.google.apis:google-api-services-bigquery:v2-rev20211129-1.32.1
com.google.apis:google-api-services-clouddebugger:v2-rev20210813-1.32.1
com.google.apis:google-api-services-cloudkms:v1-rev108-1.25.0
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20210815-1.32.1
com.google.apis:google-api-services-cloudresourcemanager:v1-rev20211017-1.32.1
com.google.apis:google-api-services-dataflow:v1b3-rev20210818-1.32.1
com.google.apis:google-api-services-dns:v2beta1-rev99-1.25.0
com.google.apis:google-api-services-drive:v2-rev393-1.25.0
com.google.apis:google-api-services-groupssettings:v1-rev82-1.25.0
com.google.apis:google-api-services-healthcare:v1-rev20210806-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20201022-1.31.0
com.google.apis:google-api-services-healthcare:v1-rev20211016-1.32.1
com.google.apis:google-api-services-iamcredentials:v1-rev20210326-1.32.1
com.google.apis:google-api-services-monitoring:v3-rev540-1.25.0
com.google.apis:google-api-services-pubsub:v1-rev20210809-1.32.1
com.google.apis:google-api-services-pubsub:v1-rev20211130-1.32.1
com.google.apis:google-api-services-sheets:v4-rev612-1.25.0
com.google.apis:google-api-services-sqladmin:v1beta4-rev20210119-1.31.0
com.google.apis:google-api-services-storage:v1-rev20210127-1.32.1
com.google.apis:google-api-services-storage:v1-rev20211201-1.32.1
com.google.appengine.tools:appengine-gcs-client:0.8.1
com.google.appengine.tools:appengine-mapreduce:0.9
com.google.appengine.tools:appengine-pipeline:0.2.13
@@ -92,55 +94,54 @@ com.google.appengine:appengine-api-1.0-sdk:1.9.86
com.google.appengine:appengine-api-stubs:1.9.86
com.google.appengine:appengine-remote-api:1.9.86
com.google.appengine:appengine-testing:1.9.86
com.google.auth:google-auth-library-credentials:1.1.0
com.google.auth:google-auth-library-oauth2-http:1.1.0
com.google.auth:google-auth-library-credentials:1.3.0
com.google.auth:google-auth-library-oauth2-http:1.3.0
com.google.auto.service:auto-service-annotations:1.0-rc7
com.google.auto.value:auto-value-annotations:1.8.2
com.google.auto.value:auto-value-annotations:1.9
com.google.auto.value:auto-value:1.7.4
com.google.cloud.bigdataoss:gcsio:2.2.2
com.google.cloud.bigdataoss:util:2.2.2
com.google.cloud.bigtable:bigtable-client-core:1.23.1
com.google.cloud.bigtable:bigtable-metrics-api:1.23.1
com.google.cloud.datastore:datastore-v1-proto-client:1.6.3
com.google.cloud.bigdataoss:gcsio:2.2.4
com.google.cloud.bigdataoss:util:2.2.4
com.google.cloud.bigtable:bigtable-client-core:1.25.1
com.google.cloud.bigtable:bigtable-metrics-api:1.25.1
com.google.cloud.datastore:datastore-v1-proto-client:2.1.3
com.google.cloud.sql:jdbc-socket-factory-core:1.2.1
com.google.cloud.sql:postgres-socket-factory:1.2.1
com.google.cloud:google-cloud-bigquery:2.1.2
com.google.cloud:google-cloud-bigquerystorage:2.1.0
com.google.cloud:google-cloud-bigquerystorage:2.8.1
com.google.cloud:google-cloud-bigtable:1.27.1
com.google.cloud:google-cloud-core-grpc:2.1.0
com.google.cloud:google-cloud-core-http:2.1.0
com.google.cloud:google-cloud-core:2.1.0
com.google.cloud:google-cloud-firestore:3.0.2
com.google.cloud:google-cloud-core-grpc:2.3.5
com.google.cloud:google-cloud-core-http:1.95.4
com.google.cloud:google-cloud-core:2.3.5
com.google.cloud:google-cloud-firestore:3.0.10
com.google.cloud:google-cloud-nio:0.123.4
com.google.cloud:google-cloud-pubsub:1.114.2
com.google.cloud:google-cloud-pubsublite:1.2.0
com.google.cloud:google-cloud-pubsub:1.115.1
com.google.cloud:google-cloud-pubsublite:1.4.8
com.google.cloud:google-cloud-secretmanager:1.4.0
com.google.cloud:google-cloud-spanner:6.12.1
com.google.cloud:google-cloud-spanner:6.17.4
com.google.cloud:google-cloud-storage:1.118.0
com.google.cloud:google-cloud-tasks:1.33.2
com.google.cloud:grpc-gcp:1.1.0
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.2
com.google.cloud:proto-google-cloud-firestore-bundle-v1:3.0.10
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.8.8
com.google.code.gson:gson:2.8.9
com.google.common.html.types:types:1.0.6
com.google.dagger:dagger:2.33
com.google.errorprone:error_prone_annotations:2.9.0
com.google.errorprone:error_prone_annotations:2.10.0
com.google.escapevelocity:escapevelocity:0.9.1
com.google.flatbuffers:flatbuffers-java:1.12.0
com.google.flogger:flogger-system-backend:0.7.3
com.google.flogger:flogger:0.7.3
com.google.flogger:google-extensions:0.6
com.google.flogger:flogger-system-backend:0.7.4
com.google.flogger:flogger:0.7.4
com.google.flogger:google-extensions:0.7.4
com.google.guava:failureaccess:1.0.1
com.google.guava:guava-testlib:30.1.1-jre
com.google.guava:guava:30.1.1-jre
com.google.guava:guava:31.0.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.gwt:gwt-user:2.9.0
com.google.http-client:google-http-client-apache-v2:1.39.2
com.google.http-client:google-http-client-apache-v2:1.40.1
com.google.http-client:google-http-client-appengine:1.39.2
com.google.http-client:google-http-client-gson:1.40.0
com.google.http-client:google-http-client-jackson2:1.39.2
com.google.http-client:google-http-client-protobuf:1.33.0
com.google.http-client:google-http-client:1.40.0
com.google.http-client:google-http-client-gson:1.41.0
com.google.http-client:google-http-client-jackson2:1.41.0
com.google.http-client:google-http-client-protobuf:1.40.1
com.google.http-client:google-http-client:1.41.0
com.google.inject.extensions:guice-multibindings:4.1.0
com.google.inject:guice:4.1.0
com.google.j2objc:j2objc-annotations:1.3
@@ -152,9 +153,9 @@ com.google.oauth-client:google-oauth-client-appengine:1.31.4
com.google.oauth-client:google-oauth-client-java6:1.31.4
com.google.oauth-client:google-oauth-client-jetty:1.31.4
com.google.oauth-client:google-oauth-client-servlet:1.31.4
com.google.oauth-client:google-oauth-client:1.31.5
com.google.protobuf:protobuf-java-util:3.17.3
com.google.protobuf:protobuf-java:3.17.3
com.google.oauth-client:google-oauth-client:1.32.1
com.google.protobuf:protobuf-java-util:3.19.2
com.google.protobuf:protobuf-java:3.19.2
com.google.re2j:re2j:1.6
com.google.template:soy:2021-02-01
com.google.truth.extensions:truth-java8-extension:1.1.2
@@ -183,31 +184,34 @@ io.confluent:kafka-schema-registry-client:5.3.2
io.dropwizard.metrics:metrics-core:3.1.2
io.github.classgraph:classgraph:4.8.104
io.github.java-diff-utils:java-diff-utils:4.9
io.grpc:grpc-alts:1.40.1
io.grpc:grpc-api:1.40.1
io.grpc:grpc-auth:1.40.1
io.grpc:grpc-context:1.40.1
io.grpc:grpc-core:1.40.1
io.grpc:grpc-grpclb:1.40.1
io.grpc:grpc-netty-shaded:1.40.1
io.grpc:grpc-netty:1.40.0
io.grpc:grpc-protobuf-lite:1.40.1
io.grpc:grpc-protobuf:1.40.1
io.grpc:grpc-stub:1.40.1
io.netty:netty-buffer:4.1.52.Final
io.netty:netty-codec-http2:4.1.52.Final
io.netty:netty-codec-http:4.1.52.Final
io.netty:netty-codec-socks:4.1.52.Final
io.netty:netty-codec:4.1.52.Final
io.netty:netty-common:4.1.52.Final
io.netty:netty-handler-proxy:4.1.52.Final
io.netty:netty-handler:4.1.52.Final
io.netty:netty-resolver:4.1.52.Final
io.grpc:grpc-alts:1.43.2
io.grpc:grpc-api:1.43.2
io.grpc:grpc-auth:1.43.2
io.grpc:grpc-context:1.43.2
io.grpc:grpc-core:1.43.2
io.grpc:grpc-grpclb:1.43.2
io.grpc:grpc-netty-shaded:1.43.2
io.grpc:grpc-netty:1.43.2
io.grpc:grpc-protobuf-lite:1.43.2
io.grpc:grpc-protobuf:1.43.2
io.grpc:grpc-services:1.43.2
io.grpc:grpc-stub:1.43.2
io.grpc:grpc-xds:1.43.2
io.netty:netty-buffer:4.1.63.Final
io.netty:netty-codec-http2:4.1.63.Final
io.netty:netty-codec-http:4.1.63.Final
io.netty:netty-codec-socks:4.1.63.Final
io.netty:netty-codec:4.1.63.Final
io.netty:netty-common:4.1.63.Final
io.netty:netty-handler-proxy:4.1.63.Final
io.netty:netty-handler:4.1.63.Final
io.netty:netty-resolver:4.1.63.Final
io.netty:netty-tcnative-boringssl-static:2.0.33.Final
io.netty:netty-transport:4.1.52.Final
io.opencensus:opencensus-api:0.28.0
io.opencensus:opencensus-contrib-grpc-util:0.28.0
io.netty:netty-transport:4.1.63.Final
io.opencensus:opencensus-api:0.30.0
io.opencensus:opencensus-contrib-grpc-util:0.30.0
io.opencensus:opencensus-contrib-http-util:0.28.0
io.opencensus:opencensus-proto:0.2.0
io.perfmark:perfmark-api:0.23.0
it.unimi.dsi:fastutil:6.5.16
javax.activation:activation:1.1
@@ -233,24 +237,24 @@ org.apache.arrow:arrow-format:5.0.0
org.apache.arrow:arrow-memory-core:5.0.0
org.apache.arrow:arrow-vector:5.0.0
org.apache.avro:avro:1.8.2
org.apache.beam:beam-model-fn-execution:2.34.0
org.apache.beam:beam-model-job-management:2.34.0
org.apache.beam:beam-model-pipeline:2.34.0
org.apache.beam:beam-runners-core-construction-java:2.34.0
org.apache.beam:beam-runners-core-java:2.34.0
org.apache.beam:beam-runners-direct-java:2.34.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.34.0
org.apache.beam:beam-runners-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-core:2.34.0
org.apache.beam:beam-sdks-java-expansion-service:2.34.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.34.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.34.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.34.0
org.apache.beam:beam-sdks-java-fn-execution:2.34.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.34.0
org.apache.beam:beam-sdks-java-io-kafka:2.34.0
org.apache.beam:beam-model-fn-execution:2.37.0
org.apache.beam:beam-model-job-management:2.37.0
org.apache.beam:beam-model-pipeline:2.37.0
org.apache.beam:beam-runners-core-construction-java:2.37.0
org.apache.beam:beam-runners-core-java:2.37.0
org.apache.beam:beam-runners-direct-java:2.37.0
org.apache.beam:beam-runners-google-cloud-dataflow-java:2.37.0
org.apache.beam:beam-runners-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-core:2.37.0
org.apache.beam:beam-sdks-java-expansion-service:2.37.0
org.apache.beam:beam-sdks-java-extensions-arrow:2.37.0
org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.37.0
org.apache.beam:beam-sdks-java-extensions-protobuf:2.37.0
org.apache.beam:beam-sdks-java-fn-execution:2.37.0
org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.37.0
org.apache.beam:beam-sdks-java-io-kafka:2.37.0
org.apache.beam:beam-vendor-bytebuddy-1_11_0:0.1
org.apache.beam:beam-vendor-grpc-1_36_0:0.2
org.apache.beam:beam-vendor-grpc-1_43_2:0.1
org.apache.beam:beam-vendor-guava-26_0-jre:0.1
org.apache.commons:commons-compress:1.20
org.apache.commons:commons-exec:1.3
@@ -259,18 +263,18 @@ org.apache.commons:commons-text:1.6
org.apache.ftpserver:ftplet-api:1.0.6
org.apache.ftpserver:ftpserver-core:1.0.6
org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore:4.4.14
org.apache.httpcomponents:httpcore:4.4.15
org.apache.mina:mina-core:2.0.4
org.apache.sshd:sshd-core:2.0.0
org.apache.sshd:sshd-scp:2.0.0
org.apache.sshd:sshd-sftp:2.0.0
org.apache.tomcat:tomcat-annotations-api:8.0.5
org.apiguardian:apiguardian-api:1.1.0
org.bouncycastle:bcpg-jdk15on:1.61
org.bouncycastle:bcpkix-jdk15on:1.61
org.bouncycastle:bcprov-jdk15on:1.61
org.bouncycastle:bcpg-jdk15on:1.67
org.bouncycastle:bcpkix-jdk15on:1.67
org.bouncycastle:bcprov-jdk15on:1.67
org.checkerframework:checker-compat-qual:2.5.5
org.checkerframework:checker-qual:3.18.0
org.checkerframework:checker-qual:3.21.0
org.codehaus.jackson:jackson-core-asl:1.9.13
org.codehaus.jackson:jackson-mapper-asl:1.9.13
org.codehaus.mojo:animal-sniffer-annotations:1.20
@@ -341,12 +345,12 @@ org.testcontainers:junit-jupiter:1.15.2
org.testcontainers:postgresql:1.15.2
org.testcontainers:selenium:1.15.2
org.testcontainers:testcontainers:1.15.2
org.threeten:threetenbp:1.5.1
org.threeten:threetenbp:1.5.2
org.tukaani:xz:1.5
org.w3c.css:sac:1.3
org.webjars.npm:viz.js-for-graphviz-java:2.1.3
org.xerial.snappy:snappy-java:1.1.8.4
org.yaml:snakeyaml:1.27
org.yaml:snakeyaml:1.28
us.fatehi:schemacrawler-api:16.10.1
us.fatehi:schemacrawler-diagram:16.10.1
us.fatehi:schemacrawler-tools:16.10.1

View File

@@ -21,6 +21,7 @@ import static google.registry.backup.ExportCommitLogDiffAction.UPPER_CHECKPOINT_
import static google.registry.backup.RestoreCommitLogsAction.BUCKET_OVERRIDE_PARAM;
import static google.registry.backup.RestoreCommitLogsAction.FROM_TIME_PARAM;
import static google.registry.backup.RestoreCommitLogsAction.TO_TIME_PARAM;
import static google.registry.backup.SyncDatastoreToSqlSnapshotAction.SQL_SNAPSHOT_ID_PARAM;
import static google.registry.request.RequestParameters.extractOptionalParameter;
import static google.registry.request.RequestParameters.extractRequiredDatetimeParameter;
import static google.registry.request.RequestParameters.extractRequiredParameter;
@@ -98,6 +99,12 @@ public final class BackupModule {
return extractRequiredDatetimeParameter(req, TO_TIME_PARAM);
}
@Provides
@Parameter(SQL_SNAPSHOT_ID_PARAM)
static String provideSqlSnapshotId(HttpServletRequest req) {
return extractRequiredParameter(req, SQL_SNAPSHOT_ID_PARAM);
}
@Provides
@Backups
static ListeningExecutorService provideListeningExecutorService() {

View File

@@ -17,7 +17,7 @@ package google.registry.backup;
import static google.registry.backup.ExportCommitLogDiffAction.LOWER_CHECKPOINT_TIME_PARAM;
import static google.registry.backup.ExportCommitLogDiffAction.UPPER_CHECKPOINT_TIME_PARAM;
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
import static google.registry.util.DateTimeUtils.isBeforeOrAt;
import com.google.common.collect.ImmutableMultimap;
@@ -28,10 +28,11 @@ import google.registry.model.ofy.CommitLogCheckpointRoot;
import google.registry.request.Action;
import google.registry.request.Action.Service;
import google.registry.request.auth.Auth;
import google.registry.util.Clock;
import google.registry.util.CloudTasksUtils;
import java.util.Optional;
import javax.inject.Inject;
import org.joda.time.DateTime;
import org.joda.time.Duration;
/**
* Action that saves commit log checkpoints to Datastore and kicks off a diff export task.
@@ -56,7 +57,22 @@ public final class CommitLogCheckpointAction implements Runnable {
private static final String QUEUE_NAME = "export-commits";
@Inject Clock clock;
/**
* The amount of time enqueueing should be delayed.
*
* <p>The {@link ExportCommitLogDiffAction} is enqueued in {@link CommitLogCheckpointAction},
* which is inside a Datastore transaction that persists the checkpoint to be exported. After the
* switch to CloudTasks API, the task may be invoked before the Datastore transaction commits.
* When this happens, the checkpoint is not found which leads to {@link
* com.google.common.base.VerifyException}.
*
* <p>In order to invoke the task after the transaction commits, a reasonable delay should be
* added to each task. The latency of the request is mostly in the range of 4-6 seconds; Choosing
* a value 30% greater than the upper bound should solve the issue invoking a task before the
* transaction commits.
*/
static final Duration ENQUEUE_DELAY_SECONDS = Duration.standardSeconds(8);
@Inject CommitLogCheckpointStrategy strategy;
@Inject CloudTasksUtils cloudTasksUtils;
@@ -64,32 +80,48 @@ public final class CommitLogCheckpointAction implements Runnable {
@Override
public void run() {
createCheckPointAndStartAsyncExport();
}
/**
* Creates a {@link CommitLogCheckpoint} and initiates an asynchronous export task.
*
* @return the {@code CommitLogCheckpoint} to be exported
*/
public Optional<CommitLogCheckpoint> createCheckPointAndStartAsyncExport() {
final CommitLogCheckpoint checkpoint = strategy.computeCheckpoint();
logger.atInfo().log(
"Generated candidate checkpoint for time: %s", checkpoint.getCheckpointTime());
tm().transact(
() -> {
DateTime lastWrittenTime = CommitLogCheckpointRoot.loadRoot().getLastWrittenTime();
if (isBeforeOrAt(checkpoint.getCheckpointTime(), lastWrittenTime)) {
logger.atInfo().log(
"Newer checkpoint already written at time: %s", lastWrittenTime);
return;
}
auditedOfy()
.saveIgnoringReadOnlyWithoutBackup()
.entities(
checkpoint, CommitLogCheckpointRoot.create(checkpoint.getCheckpointTime()));
// Enqueue a diff task between previous and current checkpoints.
cloudTasksUtils.enqueue(
QUEUE_NAME,
CloudTasksUtils.createPostTask(
ExportCommitLogDiffAction.PATH,
Service.BACKEND.toString(),
ImmutableMultimap.of(
LOWER_CHECKPOINT_TIME_PARAM,
lastWrittenTime.toString(),
UPPER_CHECKPOINT_TIME_PARAM,
checkpoint.getCheckpointTime().toString())));
});
boolean isCheckPointPersisted =
ofyTm()
.transact(
() -> {
DateTime lastWrittenTime =
CommitLogCheckpointRoot.loadRoot().getLastWrittenTime();
if (isBeforeOrAt(checkpoint.getCheckpointTime(), lastWrittenTime)) {
logger.atInfo().log(
"Newer checkpoint already written at time: %s", lastWrittenTime);
return false;
}
auditedOfy()
.saveIgnoringReadOnlyWithoutBackup()
.entities(
checkpoint,
CommitLogCheckpointRoot.create(checkpoint.getCheckpointTime()));
// Enqueue a diff task between previous and current checkpoints.
cloudTasksUtils.enqueue(
QUEUE_NAME,
cloudTasksUtils.createPostTaskWithDelay(
ExportCommitLogDiffAction.PATH,
Service.BACKEND.toString(),
ImmutableMultimap.of(
LOWER_CHECKPOINT_TIME_PARAM,
lastWrittenTime.toString(),
UPPER_CHECKPOINT_TIME_PARAM,
checkpoint.getCheckpointTime().toString()),
ENQUEUE_DELAY_SECONDS));
return true;
});
return isCheckPointPersisted ? Optional.of(checkpoint) : Optional.empty();
}
}

View File

@@ -18,7 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static google.registry.mapreduce.MapreduceRunner.PARAM_DRY_RUN;
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
@@ -288,7 +288,8 @@ public final class DeleteOldCommitLogsAction implements Runnable {
}
DeletionResult deletionResult =
tm().transactNew(
ofyTm()
.transactNew(
() -> {
CommitLogManifest manifest = auditedOfy().load().key(manifestKey).now();
// It is possible that the same manifestKey was run twice, if a shard had to be

View File

@@ -76,7 +76,10 @@ public class ReplayCommitLogsToSqlAction implements Runnable {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private static final Duration LEASE_LENGTH = standardHours(1);
public static final String REPLAY_TO_SQL_LOCK_NAME =
ReplayCommitLogsToSqlAction.class.getSimpleName();
public static final Duration REPLAY_TO_SQL_LOCK_LEASE_LENGTH = standardHours(1);
// Stop / pause where we are if we've been replaying for more than five minutes to avoid GAE
// request timeouts
private static final Duration REPLAY_TIMEOUT_DURATION = Duration.standardMinutes(5);
@@ -115,7 +118,11 @@ public class ReplayCommitLogsToSqlAction implements Runnable {
}
Optional<Lock> lock =
Lock.acquireSql(
this.getClass().getSimpleName(), null, LEASE_LENGTH, requestStatusChecker, false);
REPLAY_TO_SQL_LOCK_NAME,
null,
REPLAY_TO_SQL_LOCK_LEASE_LENGTH,
requestStatusChecker,
false);
if (!lock.isPresent()) {
String message = "Can't acquire SQL commit log replay lock, aborting.";
logger.atSevere().log(message);

View File

@@ -0,0 +1,187 @@
// Copyright 2022 The Nomulus Authors. All Rights Reserved.
//
// Licensed 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.
package google.registry.backup;
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import com.google.common.flogger.FluentLogger;
import google.registry.beam.comparedb.LatestDatastoreSnapshotFinder;
import google.registry.config.RegistryConfig.Config;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.model.ofy.CommitLogCheckpoint;
import google.registry.model.replay.ReplicateToDatastoreAction;
import google.registry.request.Action;
import google.registry.request.Action.Service;
import google.registry.request.Parameter;
import google.registry.request.Response;
import google.registry.request.auth.Auth;
import google.registry.util.Sleeper;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.Optional;
import javax.inject.Inject;
import org.joda.time.DateTime;
import org.joda.time.Duration;
/**
* Synchronizes Datastore to a given SQL snapshot when SQL is the primary database.
*
* <p>The caller takes the responsibility for:
*
* <ul>
* <li>verifying the current migration stage
* <li>acquiring the {@link ReplicateToDatastoreAction#REPLICATE_TO_DATASTORE_LOCK_NAME
* replication lock}, and
* <li>while holding the lock, creating an SQL snapshot and invoking this action with the snapshot
* id
* </ul>
*
* The caller may release the replication lock upon receiving the response from this action. Please
* refer to {@link google.registry.tools.ValidateDatastoreCommand} for more information on usage.
*
* <p>This action plays SQL transactions up to the user-specified snapshot, creates a new CommitLog
* checkpoint, and exports all CommitLogs to GCS up to this checkpoint. The timestamp of this
* checkpoint can be used to recreate a Datastore snapshot that is equivalent to the given SQL
* snapshot. If this action succeeds, the checkpoint timestamp is included in the response (the
* format of which is defined by {@link #SUCCESS_RESPONSE_TEMPLATE}).
*/
@Action(
service = Service.BACKEND,
path = SyncDatastoreToSqlSnapshotAction.PATH,
method = Action.Method.POST,
auth = Auth.AUTH_INTERNAL_OR_ADMIN)
@DeleteAfterMigration
public class SyncDatastoreToSqlSnapshotAction implements Runnable {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
public static final String PATH = "/_dr/task/syncDatastoreToSqlSnapshot";
public static final String SUCCESS_RESPONSE_TEMPLATE =
"Datastore is up-to-date with provided SQL snapshot (%s). CommitLog timestamp is (%s).";
static final String SQL_SNAPSHOT_ID_PARAM = "sqlSnapshotId";
private static final int COMMITLOGS_PRESENCE_CHECK_ATTEMPTS = 10;
private static final Duration COMMITLOGS_PRESENCE_CHECK_DELAY = Duration.standardSeconds(6);
private final Response response;
private final Sleeper sleeper;
@Config("commitLogGcsBucket")
private final String gcsBucket;
private final GcsDiffFileLister gcsDiffFileLister;
private final LatestDatastoreSnapshotFinder datastoreSnapshotFinder;
private final CommitLogCheckpointAction commitLogCheckpointAction;
private final String sqlSnapshotId;
@Inject
SyncDatastoreToSqlSnapshotAction(
Response response,
Sleeper sleeper,
@Config("commitLogGcsBucket") String gcsBucket,
GcsDiffFileLister gcsDiffFileLister,
LatestDatastoreSnapshotFinder datastoreSnapshotFinder,
CommitLogCheckpointAction commitLogCheckpointAction,
@Parameter(SQL_SNAPSHOT_ID_PARAM) String sqlSnapshotId) {
this.response = response;
this.sleeper = sleeper;
this.gcsBucket = gcsBucket;
this.gcsDiffFileLister = gcsDiffFileLister;
this.datastoreSnapshotFinder = datastoreSnapshotFinder;
this.commitLogCheckpointAction = commitLogCheckpointAction;
this.sqlSnapshotId = sqlSnapshotId;
}
@Override
public void run() {
logger.atInfo().log("Datastore validation invoked. SqlSnapshotId is %s.", sqlSnapshotId);
try {
CommitLogCheckpoint checkpoint = ensureDatabasesComparable(sqlSnapshotId);
response.setStatus(SC_OK);
response.setPayload(
String.format(SUCCESS_RESPONSE_TEMPLATE, sqlSnapshotId, checkpoint.getCheckpointTime()));
return;
} catch (Throwable e) {
logger.atSevere().withCause(e).log("Failed to sync Datastore to SQL.");
response.setStatus(SC_INTERNAL_SERVER_ERROR);
response.setPayload(getStackTrace(e));
}
}
private static String getStackTrace(Throwable e) {
try {
ByteArrayOutputStream bis = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(bis);
e.printStackTrace(printStream);
printStream.close();
return bis.toString();
} catch (RuntimeException re) {
return re.getMessage();
}
}
private CommitLogCheckpoint ensureDatabasesComparable(String sqlSnapshotId) {
// Replicate SQL transaction to Datastore, up to when this snapshot is taken.
int playbacks = ReplicateToDatastoreAction.replayAllTransactions(Optional.of(sqlSnapshotId));
logger.atInfo().log("Played %s SQL transactions.", playbacks);
Optional<CommitLogCheckpoint> checkpoint = exportCommitLogs();
if (!checkpoint.isPresent()) {
throw new RuntimeException("Cannot create CommitLog checkpoint");
}
logger.atInfo().log(
"CommitLog checkpoint created at %s.", checkpoint.get().getCheckpointTime());
verifyCommitLogsPersisted(checkpoint.get());
return checkpoint.get();
}
private Optional<CommitLogCheckpoint> exportCommitLogs() {
// Trigger an async CommitLog export to GCS. Will check file availability later.
// Although we can add support to synchronous execution, it can disrupt the export cadence
// when the system is busy
Optional<CommitLogCheckpoint> checkpoint =
commitLogCheckpointAction.createCheckPointAndStartAsyncExport();
// Failure to create checkpoint most likely caused by race with cron-triggered checkpointing.
// Retry once.
if (!checkpoint.isPresent()) {
commitLogCheckpointAction.createCheckPointAndStartAsyncExport();
}
return checkpoint;
}
private void verifyCommitLogsPersisted(CommitLogCheckpoint checkpoint) {
DateTime exportStartTime =
datastoreSnapshotFinder
.getSnapshotInfo(checkpoint.getCheckpointTime().toInstant())
.exportInterval()
.getStart();
logger.atInfo().log("Found Datastore export at %s", exportStartTime);
for (int attempts = 0; attempts < COMMITLOGS_PRESENCE_CHECK_ATTEMPTS; attempts++) {
try {
gcsDiffFileLister.listDiffFiles(gcsBucket, exportStartTime, checkpoint.getCheckpointTime());
return;
} catch (IllegalStateException e) {
// Gap in commitlog files. Fall through to sleep and retry.
logger.atInfo().log("Commitlog files not yet found on GCS.");
}
sleeper.sleepInterruptibly(COMMITLOGS_PRESENCE_CHECK_DELAY);
}
throw new RuntimeException("Cannot find all commitlog files.");
}
}

View File

@@ -22,15 +22,17 @@ import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
import com.google.appengine.api.taskqueue.TransientFailureException;
import com.google.common.base.Joiner;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Multimap;
import com.google.common.flogger.FluentLogger;
import google.registry.config.RegistryConfig.Config;
import google.registry.model.EppResource;
import google.registry.model.domain.RegistryLock;
import google.registry.model.eppcommon.Trid;
import google.registry.model.host.HostResource;
import google.registry.persistence.VKey;
import google.registry.util.AppEngineServiceUtils;
import google.registry.request.Action.Service;
import google.registry.util.CloudTasksUtils;
import google.registry.util.Retrier;
import javax.inject.Inject;
import javax.inject.Named;
@@ -59,25 +61,23 @@ public final class AsyncTaskEnqueuer {
private static final Duration MAX_ASYNC_ETA = Duration.standardDays(30);
private final Duration asyncDeleteDelay;
private final Queue asyncActionsPushQueue;
private final Queue asyncDeletePullQueue;
private final Queue asyncDnsRefreshPullQueue;
private final AppEngineServiceUtils appEngineServiceUtils;
private final Retrier retrier;
private CloudTasksUtils cloudTasksUtils;
@Inject
public AsyncTaskEnqueuer(
@Named(QUEUE_ASYNC_ACTIONS) Queue asyncActionsPushQueue,
@Named(QUEUE_ASYNC_DELETE) Queue asyncDeletePullQueue,
@Named(QUEUE_ASYNC_HOST_RENAME) Queue asyncDnsRefreshPullQueue,
@Config("asyncDeleteFlowMapreduceDelay") Duration asyncDeleteDelay,
AppEngineServiceUtils appEngineServiceUtils,
CloudTasksUtils cloudTasksUtils,
Retrier retrier) {
this.asyncActionsPushQueue = asyncActionsPushQueue;
this.asyncDeletePullQueue = asyncDeletePullQueue;
this.asyncDnsRefreshPullQueue = asyncDnsRefreshPullQueue;
this.asyncDeleteDelay = asyncDeleteDelay;
this.appEngineServiceUtils = appEngineServiceUtils;
this.cloudTasksUtils = cloudTasksUtils;
this.retrier = retrier;
}
@@ -103,19 +103,17 @@ public final class AsyncTaskEnqueuer {
entityKey, firstResave, MAX_ASYNC_ETA);
return;
}
logger.atInfo().log("Enqueuing async re-save of %s to run at %s.", entityKey, whenToResave);
String backendHostname = appEngineServiceUtils.getServiceHostname("backend");
TaskOptions task =
TaskOptions.Builder.withUrl(ResaveEntityAction.PATH)
.method(Method.POST)
.header("Host", backendHostname)
.countdownMillis(etaDuration.getMillis())
.param(PARAM_RESOURCE_KEY, entityKey.stringify())
.param(PARAM_REQUESTED_TIME, now.toString());
Multimap<String, String> params = ArrayListMultimap.create();
params.put(PARAM_RESOURCE_KEY, entityKey.stringify());
params.put(PARAM_REQUESTED_TIME, now.toString());
if (whenToResave.size() > 1) {
task.param(PARAM_RESAVE_TIMES, Joiner.on(',').join(whenToResave.tailSet(firstResave, false)));
params.put(PARAM_RESAVE_TIMES, Joiner.on(',').join(whenToResave.tailSet(firstResave, false)));
}
addTaskToQueueWithRetry(asyncActionsPushQueue, task);
logger.atInfo().log("Enqueuing async re-save of %s to run at %s.", entityKey, whenToResave);
cloudTasksUtils.enqueue(
QUEUE_ASYNC_ACTIONS,
cloudTasksUtils.createPostTaskWithDelay(
ResaveEntityAction.PATH, Service.BACKEND.toString(), params, etaDuration));
}
/** Enqueues a task to asynchronously delete a contact or host, by key. */
@@ -152,32 +150,6 @@ public final class AsyncTaskEnqueuer {
.param(PARAM_REQUESTED_TIME, now.toString()));
}
/**
* Enqueues a task to asynchronously re-lock a registry-locked domain after it was unlocked.
*
* <p>Note: the relockDuration must be present on the lock object.
*/
public void enqueueDomainRelock(RegistryLock lock) {
checkArgument(
lock.getRelockDuration().isPresent(),
"Lock with ID %s not configured for relock",
lock.getRevisionId());
enqueueDomainRelock(lock.getRelockDuration().get(), lock.getRevisionId(), 0);
}
/** Enqueues a task to asynchronously re-lock a registry-locked domain after it was unlocked. */
void enqueueDomainRelock(Duration countdown, long lockRevisionId, int previousAttempts) {
String backendHostname = appEngineServiceUtils.getServiceHostname("backend");
addTaskToQueueWithRetry(
asyncActionsPushQueue,
TaskOptions.Builder.withUrl(RelockDomainAction.PATH)
.method(Method.POST)
.header("Host", backendHostname)
.param(RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM, String.valueOf(lockRevisionId))
.param(RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM, String.valueOf(previousAttempts))
.countdownMillis(countdown.getMillis()));
}
/**
* Adds a task to a queue with retrying, to avoid aborting the entire flow over a transient issue
* enqueuing a task.

View File

@@ -88,7 +88,6 @@ public class RelockDomainAction implements Runnable {
private final SendEmailService sendEmailService;
private final DomainLockUtils domainLockUtils;
private final Response response;
private final AsyncTaskEnqueuer asyncTaskEnqueuer;
@Inject
public RelockDomainAction(
@@ -99,8 +98,7 @@ public class RelockDomainAction implements Runnable {
@Config("supportEmail") String supportEmail,
SendEmailService sendEmailService,
DomainLockUtils domainLockUtils,
Response response,
AsyncTaskEnqueuer asyncTaskEnqueuer) {
Response response) {
this.oldUnlockRevisionId = oldUnlockRevisionId;
this.previousAttempts = previousAttempts;
this.alertRecipientAddress = alertRecipientAddress;
@@ -109,7 +107,6 @@ public class RelockDomainAction implements Runnable {
this.sendEmailService = sendEmailService;
this.domainLockUtils = domainLockUtils;
this.response = response;
this.asyncTaskEnqueuer = asyncTaskEnqueuer;
}
@Override
@@ -245,8 +242,7 @@ public class RelockDomainAction implements Runnable {
}
}
Duration timeBeforeRetry = previousAttempts < ATTEMPTS_BEFORE_SLOWDOWN ? TEN_MINUTES : ONE_HOUR;
asyncTaskEnqueuer.enqueueDomainRelock(
timeBeforeRetry, oldUnlockRevisionId, previousAttempts + 1);
domainLockUtils.enqueueDomainRelock(timeBeforeRetry, oldUnlockRevisionId, previousAttempts + 1);
}
private void sendSuccessEmail(RegistryLock oldLock) {

View File

@@ -23,6 +23,7 @@ import com.google.common.collect.Streams;
import google.registry.beam.common.RegistryQuery.CriteriaQuerySupplier;
import google.registry.model.UpdateAutoTimestamp;
import google.registry.model.UpdateAutoTimestamp.DisableAutoUpdateResource;
import google.registry.model.common.DatabaseMigrationStateSchedule;
import google.registry.model.replay.SqlEntity;
import google.registry.persistence.transaction.JpaTransactionManager;
import google.registry.persistence.transaction.TransactionManagerFactory;
@@ -234,6 +235,10 @@ public final class RegistryJpaIO {
@ProcessElement
public void processElement(OutputReceiver<T> outputReceiver) {
// Preload the migration schedule into cache, otherwise the cache loading query may happen
// before the setDatabaseSnapshot call in the transaction below, causing it to fail.
DatabaseMigrationStateSchedule.get();
jpaTm()
.transactNoRetry(
() -> {

View File

@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet;
import com.googlecode.objectify.Key;
import google.registry.backup.VersionedEntity;
import google.registry.beam.initsql.Transforms;
import google.registry.model.EppResource;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.model.billing.BillingEvent;
import google.registry.model.common.Cursor;
@@ -42,6 +43,7 @@ import google.registry.model.tld.Registry;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import javax.annotation.Nullable;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.transforms.ParDo;
@@ -93,7 +95,8 @@ public final class DatastoreSnapshots {
String commitLogDir,
DateTime commitLogFromTime,
DateTime commitLogToTime,
Set<Class<?>> kinds) {
Set<Class<?>> kinds,
Optional<DateTime> compareStartTime) {
PCollectionTuple snapshot =
pipeline.apply(
"Load Datastore snapshot.",
@@ -112,11 +115,11 @@ public final class DatastoreSnapshots {
perTypeSnapshots =
perTypeSnapshots.and(
createSqlEntityTupleTag((Class<? extends SqlEntity>) kind),
datastoreEntityToPojo(perKindSnapshot, kind.getSimpleName()));
datastoreEntityToPojo(perKindSnapshot, kind.getSimpleName(), compareStartTime));
continue;
}
Verify.verify(kind == HistoryEntry.class, "Unexpected Non-SqlEntity class: %s", kind);
PCollectionTuple historyEntriesByType = splitHistoryEntry(perKindSnapshot);
PCollectionTuple historyEntriesByType = splitHistoryEntry(perKindSnapshot, compareStartTime);
for (Map.Entry<TupleTag<?>, PCollection<?>> entry :
historyEntriesByType.getAll().entrySet()) {
perTypeSnapshots = perTypeSnapshots.and(entry.getKey().getId(), entry.getValue());
@@ -129,7 +132,9 @@ public final class DatastoreSnapshots {
* Splits a {@link PCollection} of {@link HistoryEntry HistoryEntries} into three collections of
* its child entities by type.
*/
static PCollectionTuple splitHistoryEntry(PCollection<VersionedEntity> historyEntries) {
static PCollectionTuple splitHistoryEntry(
PCollection<VersionedEntity> historyEntries, Optional<DateTime> compareStartTime) {
DateTime nullableStartTime = compareStartTime.orElse(null);
return historyEntries.apply(
"Split HistoryEntry by Resource Type",
ParDo.of(
@@ -138,6 +143,7 @@ public final class DatastoreSnapshots {
public void processElement(
@Element VersionedEntity historyEntry, MultiOutputReceiver out) {
Optional.ofNullable(Transforms.convertVersionedEntityToSqlEntity(historyEntry))
.filter(e -> isEntityIncludedForComparison(e, nullableStartTime))
.ifPresent(
sqlEntity ->
out.get(createSqlEntityTupleTag(sqlEntity.getClass()))
@@ -155,7 +161,8 @@ public final class DatastoreSnapshots {
* objects.
*/
static PCollection<SqlEntity> datastoreEntityToPojo(
PCollection<VersionedEntity> entities, String desc) {
PCollection<VersionedEntity> entities, String desc, Optional<DateTime> compareStartTime) {
DateTime nullableStartTime = compareStartTime.orElse(null);
return entities.apply(
"Datastore Entity to Pojo " + desc,
ParDo.of(
@@ -164,8 +171,23 @@ public final class DatastoreSnapshots {
public void processElement(
@Element VersionedEntity entity, OutputReceiver<SqlEntity> out) {
Optional.ofNullable(Transforms.convertVersionedEntityToSqlEntity(entity))
.filter(e -> isEntityIncludedForComparison(e, nullableStartTime))
.ifPresent(out::output);
}
}));
}
static boolean isEntityIncludedForComparison(
SqlEntity entity, @Nullable DateTime compareStartTime) {
if (compareStartTime == null) {
return true;
}
if (entity instanceof HistoryEntry) {
return compareStartTime.isBefore(((HistoryEntry) entity).getModificationTime());
}
if (entity instanceof EppResource) {
return compareStartTime.isBefore(((EppResource) entity).getUpdateTimestamp().getTimestamp());
}
return true;
}
}

View File

@@ -53,11 +53,11 @@ public class LatestDatastoreSnapshotFinder {
}
/**
* Finds information of the most recent Datastore snapshot, including the GCS folder of the
* exported data files and the start and stop times of the export. The folder of the CommitLogs is
* also included in the return.
* Finds information of the most recent Datastore snapshot that ends strictly before {@code
* exportEndTimeUpperBound}, including the GCS folder of the exported data files and the start and
* stop times of the export. The folder of the CommitLogs is also included in the return.
*/
public DatastoreSnapshotInfo getSnapshotInfo() {
public DatastoreSnapshotInfo getSnapshotInfo(Instant exportEndTimeUpperBound) {
String bucketName = RegistryConfig.getDatastoreBackupsBucket().substring("gs://".length());
/**
* Find the bucket-relative path to the overall metadata file of the last Datastore export.
@@ -65,7 +65,8 @@ public class LatestDatastoreSnapshotFinder {
* return value is like
* "2021-11-19T06:00:00_76493/2021-11-19T06:00:00_76493.overall_export_metadata".
*/
Optional<String> metaFilePathOptional = findMostRecentExportMetadataFile(bucketName, 2);
Optional<String> metaFilePathOptional =
findNewestExportMetadataFileBeforeTime(bucketName, exportEndTimeUpperBound, 5);
if (!metaFilePathOptional.isPresent()) {
throw new NoSuchElementException("No exports found over the past 2 days.");
}
@@ -85,8 +86,9 @@ public class LatestDatastoreSnapshotFinder {
}
/**
* Finds the bucket-relative path of the overall export metadata file, in the given bucket,
* searching back up to {@code lookBackDays} days, including today.
* Finds the latest Datastore export that ends strictly before {@code endTimeUpperBound} and
* returns the bucket-relative path of the overall export metadata file, in the given bucket. The
* search goes back for up to {@code lookBackDays} days in time, including today.
*
* <p>The overall export metadata file is the last file created during a Datastore export. All
* data has been exported by the creation time of this file. The name of this file, like that of
@@ -95,7 +97,8 @@ public class LatestDatastoreSnapshotFinder {
* <p>An example return value: {@code
* 2021-11-19T06:00:00_76493/2021-11-19T06:00:00_76493.overall_export_metadata}.
*/
private Optional<String> findMostRecentExportMetadataFile(String bucketName, int lookBackDays) {
private Optional<String> findNewestExportMetadataFileBeforeTime(
String bucketName, Instant endTimeUpperBound, int lookBackDays) {
DateTime today = clock.nowUtc();
for (int day = 0; day < lookBackDays; day++) {
String dateString = today.minusDays(day).toString("yyyy-MM-dd");
@@ -107,7 +110,11 @@ public class LatestDatastoreSnapshotFinder {
.sorted(Comparator.<String>naturalOrder().reversed())
.findFirst();
if (metaFilePath.isPresent()) {
return metaFilePath;
BlobInfo blobInfo = gcsUtils.getBlobInfo(BlobId.of(bucketName, metaFilePath.get()));
Instant exportEndTime = new Instant(blobInfo.getCreateTime());
if (exportEndTime.isBefore(endTimeUpperBound)) {
return metaFilePath;
}
}
} catch (IOException ioe) {
throw new RuntimeException(ioe);
@@ -118,12 +125,12 @@ public class LatestDatastoreSnapshotFinder {
/** Holds information about a Datastore snapshot. */
@AutoValue
abstract static class DatastoreSnapshotInfo {
abstract String exportDir();
public abstract static class DatastoreSnapshotInfo {
public abstract String exportDir();
abstract String commitLogDir();
public abstract String commitLogDir();
abstract Interval exportInterval();
public abstract Interval exportInterval();
static DatastoreSnapshotInfo create(
String exportDir, String commitLogDir, Interval exportOperationInterval) {

View File

@@ -14,15 +14,22 @@
package google.registry.beam.comparedb;
import static com.google.common.base.Preconditions.checkState;
import static google.registry.beam.comparedb.ValidateSqlUtils.createSqlEntityTupleTag;
import static google.registry.beam.comparedb.ValidateSqlUtils.getMedianIdForHistoryTable;
import com.google.auto.value.AutoValue;
import com.google.common.base.Strings;
import com.google.common.base.Verify;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSetMultimap;
import com.google.common.collect.Streams;
import google.registry.beam.common.RegistryJpaIO;
import google.registry.beam.common.RegistryJpaIO.Read;
import google.registry.model.EppResource;
import google.registry.model.UpdateAutoTimestamp;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.model.billing.BillingEvent;
import google.registry.model.bulkquery.BulkQueryEntities;
@@ -50,8 +57,10 @@ import google.registry.model.replay.SqlEntity;
import google.registry.model.reporting.DomainTransactionRecord;
import google.registry.model.tld.Registry;
import google.registry.persistence.transaction.CriteriaQueryBuilder;
import google.registry.util.DateTimeUtils;
import java.io.Serializable;
import java.util.Optional;
import javax.persistence.Entity;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.transforms.Flatten;
@@ -65,6 +74,7 @@ import org.apache.beam.sdk.values.PCollectionList;
import org.apache.beam.sdk.values.PCollectionTuple;
import org.apache.beam.sdk.values.TypeDescriptor;
import org.apache.beam.sdk.values.TypeDescriptors;
import org.joda.time.DateTime;
/**
* Utilities for loading SQL snapshots.
@@ -113,28 +123,48 @@ public final class SqlSnapshots {
public static PCollectionTuple loadCloudSqlSnapshotByType(
Pipeline pipeline,
ImmutableSet<Class<? extends SqlEntity>> sqlEntityTypes,
Optional<String> snapshotId) {
Optional<String> snapshotId,
Optional<DateTime> compareStartTime) {
PCollectionTuple perTypeSnapshots = PCollectionTuple.empty(pipeline);
for (Class<? extends SqlEntity> clazz : sqlEntityTypes) {
if (clazz == DomainBase.class) {
perTypeSnapshots =
perTypeSnapshots.and(
createSqlEntityTupleTag(DomainBase.class),
loadAndAssembleDomainBase(pipeline, snapshotId));
loadAndAssembleDomainBase(pipeline, snapshotId, compareStartTime));
continue;
}
if (clazz == DomainHistory.class) {
perTypeSnapshots =
perTypeSnapshots.and(
createSqlEntityTupleTag(DomainHistory.class),
loadAndAssembleDomainHistory(pipeline, snapshotId));
loadAndAssembleDomainHistory(pipeline, snapshotId, compareStartTime));
continue;
}
if (clazz == ContactHistory.class) {
perTypeSnapshots =
perTypeSnapshots.and(
createSqlEntityTupleTag(ContactHistory.class),
loadContactHistory(pipeline, snapshotId));
loadContactHistory(pipeline, snapshotId, compareStartTime));
continue;
}
if (clazz == HostHistory.class) {
perTypeSnapshots =
perTypeSnapshots.and(
createSqlEntityTupleTag(HostHistory.class),
loadHostHistory(
pipeline, snapshotId, compareStartTime.orElse(DateTimeUtils.START_OF_TIME)));
continue;
}
if (EppResource.class.isAssignableFrom(clazz) && compareStartTime.isPresent()) {
perTypeSnapshots =
perTypeSnapshots.and(
createSqlEntityTupleTag(clazz),
pipeline.apply(
"SQL Load " + clazz.getSimpleName(),
buildEppResourceQueryWithTimeFilter(
clazz, SqlEntity.class, snapshotId, compareStartTime.get())
.withSnapshot(snapshotId.orElse(null))));
continue;
}
perTypeSnapshots =
@@ -155,20 +185,33 @@ public final class SqlSnapshots {
* @see BulkQueryEntities
*/
public static PCollection<SqlEntity> loadAndAssembleDomainBase(
Pipeline pipeline, Optional<String> snapshotId) {
Pipeline pipeline, Optional<String> snapshotId, Optional<DateTime> compareStartTime) {
PCollection<KV<String, Serializable>> baseObjects =
readAllAndAssignKey(pipeline, DomainBaseLite.class, DomainBaseLite::getRepoId, snapshotId);
readAllAndAssignKey(
pipeline,
DomainBaseLite.class,
DomainBaseLite::getRepoId,
snapshotId,
compareStartTime);
PCollection<KV<String, Serializable>> gracePeriods =
readAllAndAssignKey(pipeline, GracePeriod.class, GracePeriod::getDomainRepoId, snapshotId);
readAllAndAssignKey(
pipeline,
GracePeriod.class,
GracePeriod::getDomainRepoId,
snapshotId,
compareStartTime);
PCollection<KV<String, Serializable>> delegationSigners =
readAllAndAssignKey(
pipeline,
DelegationSignerData.class,
DelegationSignerData::getDomainRepoId,
snapshotId);
snapshotId,
compareStartTime);
PCollection<KV<String, Serializable>> domainHosts =
readAllAndAssignKey(pipeline, DomainHost.class, DomainHost::getDomainRepoId, snapshotId);
readAllAndAssignKey(
pipeline, DomainHost.class, DomainHost::getDomainRepoId, snapshotId, compareStartTime);
DateTime nullableCompareStartTime = compareStartTime.orElse(null);
return PCollectionList.of(
ImmutableList.of(baseObjects, gracePeriods, delegationSigners, domainHosts))
.apply("SQL Merge DomainBase parts", Flatten.pCollections())
@@ -184,6 +227,14 @@ public final class SqlSnapshots {
TypedClassifier partsByType = new TypedClassifier(kv.getValue());
ImmutableSet<DomainBaseLite> baseObjects =
partsByType.getAllOf(DomainBaseLite.class);
if (nullableCompareStartTime != null) {
Verify.verify(
baseObjects.size() <= 1,
"Found duplicate DomainBaseLite object per repoId: " + kv.getKey());
if (baseObjects.isEmpty()) {
return;
}
}
Verify.verify(
baseObjects.size() == 1,
"Expecting one DomainBaseLite object per repoId: " + kv.getKey());
@@ -205,16 +256,16 @@ public final class SqlSnapshots {
* <p>This method uses two queries to load data in parallel. This is a performance optimization
* specifically for the production database.
*/
static PCollection<SqlEntity> loadContactHistory(Pipeline pipeline, Optional<String> snapshotId) {
long medianId =
getMedianIdForHistoryTable("ContactHistory")
.orElseThrow(
() -> new IllegalStateException("Not a valid database: no ContactHistory."));
static PCollection<SqlEntity> loadContactHistory(
Pipeline pipeline, Optional<String> snapshotId, Optional<DateTime> compareStartTime) {
PartitionedQuery partitionedQuery =
buildPartitonedHistoryQuery(ContactHistory.class, compareStartTime);
PCollection<SqlEntity> part1 =
pipeline.apply(
"SQL Load ContactHistory first half",
RegistryJpaIO.read(
String.format("select c from ContactHistory c where id <= %s", medianId),
partitionedQuery.firstHalfQuery(),
partitionedQuery.parameters(),
false,
SqlEntity.class::cast)
.withSnapshot(snapshotId.orElse(null)));
@@ -222,7 +273,8 @@ public final class SqlSnapshots {
pipeline.apply(
"SQL Load ContactHistory second half",
RegistryJpaIO.read(
String.format("select c from ContactHistory c where id > %s", medianId),
partitionedQuery.secondHalfQuery(),
partitionedQuery.parameters(),
false,
SqlEntity.class::cast)
.withSnapshot(snapshotId.orElse(null)));
@@ -231,6 +283,19 @@ public final class SqlSnapshots {
.apply("Combine ContactHistory parts", Flatten.pCollections());
}
/** Loads all {@link HostHistory} entities from the database. */
static PCollection<SqlEntity> loadHostHistory(
Pipeline pipeline, Optional<String> snapshotId, DateTime compareStartTime) {
return pipeline.apply(
"SQL Load HostHistory",
RegistryJpaIO.read(
"select c from HostHistory c where :compareStartTime < modificationTime",
ImmutableMap.of("compareStartTime", compareStartTime),
false,
SqlEntity.class::cast)
.withSnapshot(snapshotId.orElse(null)));
}
/**
* Bulk-loads all parts of {@link DomainHistory} and assembles them in the pipeline.
*
@@ -240,16 +305,15 @@ public final class SqlSnapshots {
* @see BulkQueryEntities
*/
static PCollection<SqlEntity> loadAndAssembleDomainHistory(
Pipeline pipeline, Optional<String> snapshotId) {
long medianId =
getMedianIdForHistoryTable("DomainHistory")
.orElseThrow(
() -> new IllegalStateException("Not a valid database: no DomainHistory."));
Pipeline pipeline, Optional<String> snapshotId, Optional<DateTime> compareStartTime) {
PartitionedQuery partitionedQuery =
buildPartitonedHistoryQuery(DomainHistoryLite.class, compareStartTime);
PCollection<KV<String, Serializable>> baseObjectsPart1 =
queryAndAssignKey(
pipeline,
"first half",
String.format("select c from DomainHistory c where id <= %s", medianId),
partitionedQuery.firstHalfQuery(),
partitionedQuery.parameters(),
DomainHistoryLite.class,
compose(DomainHistoryLite::getDomainHistoryId, DomainHistoryId::toString),
snapshotId);
@@ -257,7 +321,8 @@ public final class SqlSnapshots {
queryAndAssignKey(
pipeline,
"second half",
String.format("select c from DomainHistory c where id > %s", medianId),
partitionedQuery.secondHalfQuery(),
partitionedQuery.parameters(),
DomainHistoryLite.class,
compose(DomainHistoryLite::getDomainHistoryId, DomainHistoryId::toString),
snapshotId);
@@ -266,26 +331,31 @@ public final class SqlSnapshots {
pipeline,
GracePeriodHistory.class,
compose(GracePeriodHistory::getDomainHistoryId, DomainHistoryId::toString),
snapshotId);
snapshotId,
compareStartTime);
PCollection<KV<String, Serializable>> delegationSigners =
readAllAndAssignKey(
pipeline,
DomainDsDataHistory.class,
compose(DomainDsDataHistory::getDomainHistoryId, DomainHistoryId::toString),
snapshotId);
snapshotId,
compareStartTime);
PCollection<KV<String, Serializable>> domainHosts =
readAllAndAssignKey(
pipeline,
DomainHistoryHost.class,
compose(DomainHistoryHost::getDomainHistoryId, DomainHistoryId::toString),
snapshotId);
snapshotId,
compareStartTime);
PCollection<KV<String, Serializable>> transactionRecords =
readAllAndAssignKey(
pipeline,
DomainTransactionRecord.class,
compose(DomainTransactionRecord::getDomainHistoryId, DomainHistoryId::toString),
snapshotId);
snapshotId,
compareStartTime);
DateTime nullableCompareStartTime = compareStartTime.orElse(null);
return PCollectionList.of(
ImmutableList.of(
baseObjectsPart1,
@@ -307,6 +377,15 @@ public final class SqlSnapshots {
TypedClassifier partsByType = new TypedClassifier(kv.getValue());
ImmutableSet<DomainHistoryLite> baseObjects =
partsByType.getAllOf(DomainHistoryLite.class);
if (nullableCompareStartTime != null) {
Verify.verify(
baseObjects.size() <= 1,
"Found duplicate DomainHistoryLite object per domainHistoryId: "
+ kv.getKey());
if (baseObjects.isEmpty()) {
return;
}
}
Verify.verify(
baseObjects.size() == 1,
"Expecting one DomainHistoryLite object per domainHistoryId: "
@@ -328,12 +407,19 @@ public final class SqlSnapshots {
Pipeline pipeline,
Class<R> type,
SerializableFunction<R, String> keyFunction,
Optional<String> snapshotId) {
Optional<String> snapshotId,
Optional<DateTime> compareStartTime) {
Read<R, R> queryObject;
if (compareStartTime.isPresent() && EppResource.class.isAssignableFrom(type)) {
queryObject =
buildEppResourceQueryWithTimeFilter(type, type, snapshotId, compareStartTime.get());
} else {
queryObject =
RegistryJpaIO.read(() -> CriteriaQueryBuilder.create(type).build())
.withSnapshot(snapshotId.orElse(null));
}
return pipeline
.apply(
"SQL Load " + type.getSimpleName(),
RegistryJpaIO.read(() -> CriteriaQueryBuilder.create(type).build())
.withSnapshot(snapshotId.orElse(null)))
.apply("SQL Load " + type.getSimpleName(), queryObject)
.apply(
"Assign Key to " + type.getSimpleName(),
MapElements.into(
@@ -346,13 +432,15 @@ public final class SqlSnapshots {
Pipeline pipeline,
String diffrentiator,
String jplQuery,
ImmutableMap<String, Object> queryParameters,
Class<R> type,
SerializableFunction<R, String> keyFunction,
Optional<String> snapshotId) {
return pipeline
.apply(
"SQL Load " + type.getSimpleName() + " " + diffrentiator,
RegistryJpaIO.read(jplQuery, false, type::cast).withSnapshot(snapshotId.orElse(null)))
RegistryJpaIO.read(jplQuery, queryParameters, false, type::cast)
.withSnapshot(snapshotId.orElse(null)))
.apply(
"Assign Key to " + type.getSimpleName() + " " + diffrentiator,
MapElements.into(
@@ -367,6 +455,71 @@ public final class SqlSnapshots {
return r -> f2.apply(f1.apply(r));
}
static <R, T> Read<R, T> buildEppResourceQueryWithTimeFilter(
Class<R> entityType,
Class<T> castOutputAsType,
Optional<String> snapshotId,
DateTime compareStartTime) {
String tableName = getJpaEntityName(entityType);
String jpql =
String.format("select c from %s c where :compareStartTime < updateTimestamp", tableName);
return RegistryJpaIO.read(
jpql,
ImmutableMap.of("compareStartTime", UpdateAutoTimestamp.create(compareStartTime)),
false,
(R x) -> castOutputAsType.cast(x))
.withSnapshot(snapshotId.orElse(null));
}
static PartitionedQuery buildPartitonedHistoryQuery(
Class<?> entityType, Optional<DateTime> compareStartTime) {
String tableName = getJpaEntityName(entityType);
Verify.verify(
!Strings.isNullOrEmpty(tableName), "Invalid entity type %s", entityType.getSimpleName());
long medianId =
getMedianIdForHistoryTable(tableName)
.orElseThrow(() -> new IllegalStateException("Not a valid database: no " + tableName));
String firstHalfQuery = String.format("select c from %s c where id <= :historyId", tableName);
String secondHalfQuery = String.format("select c from %s c where id > :historyId", tableName);
if (compareStartTime.isPresent()) {
String timeFilter = " and :compareStartTime < modificationTime";
firstHalfQuery += timeFilter;
secondHalfQuery += timeFilter;
return PartitionedQuery.createPartitionedQuery(
firstHalfQuery,
secondHalfQuery,
ImmutableMap.of("historyId", medianId, "compareStartTime", compareStartTime.get()));
} else {
return PartitionedQuery.createPartitionedQuery(
firstHalfQuery, secondHalfQuery, ImmutableMap.of("historyId", medianId));
}
}
private static String getJpaEntityName(Class entityType) {
Entity entityAnnotation = (Entity) entityType.getAnnotation(Entity.class);
checkState(
entityAnnotation != null, "Unexpected non-entity type %s", entityType.getSimpleName());
return Strings.isNullOrEmpty(entityAnnotation.name())
? entityType.getSimpleName()
: entityAnnotation.name();
}
/** Contains two queries that partition the target table in two. */
@AutoValue
abstract static class PartitionedQuery {
abstract String firstHalfQuery();
abstract String secondHalfQuery();
abstract ImmutableMap<String, Object> parameters();
public static PartitionedQuery createPartitionedQuery(
String firstHalfQuery, String secondHalfQuery, ImmutableMap<String, Object> parameters) {
return new AutoValue_SqlSnapshots_PartitionedQuery(
firstHalfQuery, secondHalfQuery, parameters);
}
}
/** Container that receives mixed-typed data and groups them by {@link Class}. */
static class TypedClassifier {
private final ImmutableSetMultimap<Class<?>, Object> classifiedEntities;

View File

@@ -0,0 +1,206 @@
// Copyright 2021 The Nomulus Authors. All Rights Reserved.
//
// Licensed 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.
package google.registry.beam.comparedb;
import static com.google.common.base.Verify.verify;
import static org.apache.beam.sdk.values.TypeDescriptors.strings;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.common.flogger.FluentLogger;
import google.registry.beam.common.RegistryPipelineOptions;
import google.registry.beam.common.RegistryPipelineWorkerInitializer;
import google.registry.beam.comparedb.LatestDatastoreSnapshotFinder.DatastoreSnapshotInfo;
import google.registry.beam.comparedb.ValidateSqlUtils.CompareSqlEntity;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.model.domain.DomainBase;
import google.registry.model.domain.DomainHistory;
import google.registry.model.replay.SqlEntity;
import google.registry.persistence.PersistenceModule.JpaTransactionManagerType;
import google.registry.persistence.PersistenceModule.TransactionIsolationLevel;
import google.registry.util.SystemClock;
import java.io.Serializable;
import java.util.Optional;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.coders.SerializableCoder;
import org.apache.beam.sdk.io.TextIO;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.Flatten;
import org.apache.beam.sdk.transforms.GroupByKey;
import org.apache.beam.sdk.transforms.ParDo;
import org.apache.beam.sdk.transforms.WithKeys;
import org.apache.beam.sdk.values.PCollectionList;
import org.apache.beam.sdk.values.PCollectionTuple;
import org.apache.beam.sdk.values.TupleTag;
import org.joda.time.DateTime;
import org.joda.time.Duration;
/**
* Validates the asynchronous data replication process between Datastore and Cloud SQL.
*
* <p>This pipeline is to be launched by {@link google.registry.tools.ValidateDatastoreCommand} or
* {@link google.registry.tools.ValidateSqlCommand}.
*/
@DeleteAfterMigration
public class ValidateDatabasePipeline {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
/** Specifies the extra CommitLogs to load before the start of a Database export. */
private static final Duration COMMITLOG_START_TIME_MARGIN = Duration.standardMinutes(10);
private final ValidateDatabasePipelineOptions options;
private final LatestDatastoreSnapshotFinder datastoreSnapshotFinder;
public ValidateDatabasePipeline(
ValidateDatabasePipelineOptions options,
LatestDatastoreSnapshotFinder datastoreSnapshotFinder) {
this.options = options;
this.datastoreSnapshotFinder = datastoreSnapshotFinder;
}
@VisibleForTesting
void run(Pipeline pipeline) {
DateTime latestCommitLogTime = DateTime.parse(options.getLatestCommitLogTimestamp());
DatastoreSnapshotInfo mostRecentExport =
datastoreSnapshotFinder.getSnapshotInfo(latestCommitLogTime.toInstant());
logger.atInfo().log(
"Comparing datastore export at %s and commitlog timestamp %s.",
mostRecentExport.exportDir(), latestCommitLogTime);
Optional<String> outputPath =
Optional.ofNullable(options.getDiffOutputGcsBucket())
.map(
bucket ->
String.format(
"gs://%s/validate_database/%s/diffs.txt",
bucket, new SystemClock().nowUtc()));
outputPath.ifPresent(path -> logger.atInfo().log("Discrepancies will be logged to %s", path));
setupPipeline(
pipeline,
Optional.ofNullable(options.getSqlSnapshotId()),
mostRecentExport,
latestCommitLogTime,
Optional.ofNullable(options.getComparisonStartTimestamp()).map(DateTime::parse),
outputPath);
pipeline.run();
}
static void setupPipeline(
Pipeline pipeline,
Optional<String> sqlSnapshotId,
DatastoreSnapshotInfo mostRecentExport,
DateTime latestCommitLogTime,
Optional<DateTime> compareStartTime,
Optional<String> diffOutputPath) {
pipeline
.getCoderRegistry()
.registerCoderForClass(SqlEntity.class, SerializableCoder.of(Serializable.class));
PCollectionTuple datastoreSnapshot =
DatastoreSnapshots.loadDatastoreSnapshotByKind(
pipeline,
mostRecentExport.exportDir(),
mostRecentExport.commitLogDir(),
mostRecentExport.exportInterval().getStart().minus(COMMITLOG_START_TIME_MARGIN),
// Increase by 1ms since we want to include commitLogs latestCommitLogTime but
// this parameter is exclusive.
latestCommitLogTime.plusMillis(1),
DatastoreSnapshots.ALL_DATASTORE_KINDS,
compareStartTime);
PCollectionTuple cloudSqlSnapshot =
SqlSnapshots.loadCloudSqlSnapshotByType(
pipeline, SqlSnapshots.ALL_SQL_ENTITIES, sqlSnapshotId, compareStartTime);
verify(
datastoreSnapshot.getAll().keySet().equals(cloudSqlSnapshot.getAll().keySet()),
"Expecting the same set of types in both snapshots.");
PCollectionList<String> diffLogs = PCollectionList.empty(pipeline);
for (Class<? extends SqlEntity> clazz : SqlSnapshots.ALL_SQL_ENTITIES) {
TupleTag<SqlEntity> tag = ValidateSqlUtils.createSqlEntityTupleTag(clazz);
verify(
datastoreSnapshot.has(tag), "Missing %s in Datastore snapshot.", clazz.getSimpleName());
verify(cloudSqlSnapshot.has(tag), "Missing %s in Cloud SQL snapshot.", clazz.getSimpleName());
diffLogs =
diffLogs.and(
PCollectionList.of(datastoreSnapshot.get(tag))
.and(cloudSqlSnapshot.get(tag))
.apply(
"Combine from both snapshots: " + clazz.getSimpleName(),
Flatten.pCollections())
.apply(
"Assign primary key to merged " + clazz.getSimpleName(),
WithKeys.of(ValidateDatabasePipeline::getPrimaryKeyString)
.withKeyType(strings()))
.apply("Group by primary key " + clazz.getSimpleName(), GroupByKey.create())
.apply("Compare " + clazz.getSimpleName(), ParDo.of(new CompareSqlEntity())));
}
if (diffOutputPath.isPresent()) {
diffLogs
.apply("Gather diff logs", Flatten.pCollections())
.apply(
"Output diffs",
TextIO.write()
.to(diffOutputPath.get())
/**
* Output to a single file for ease of use since diffs should be few. If this
* assumption turns out not to be false, user should abort the pipeline and
* investigate why.
*/
.withoutSharding()
.withDelimiter((Strings.repeat("-", 80) + "\n").toCharArray()));
}
}
private static String getPrimaryKeyString(SqlEntity sqlEntity) {
// SqlEntity.getPrimaryKeyString only works with entities registered with Hibernate.
// We are using the BulkQueryJpaTransactionManager, which does not recognize DomainBase and
// DomainHistory. See BulkQueryEntities.java for more information.
if (sqlEntity instanceof DomainBase) {
return "DomainBase_" + ((DomainBase) sqlEntity).getRepoId();
}
if (sqlEntity instanceof DomainHistory) {
return "DomainHistory_" + ((DomainHistory) sqlEntity).getDomainHistoryId().toString();
}
return sqlEntity.getPrimaryKeyString();
}
public static void main(String[] args) {
ValidateDatabasePipelineOptions options =
PipelineOptionsFactory.fromArgs(args)
.withValidation()
.as(ValidateDatabasePipelineOptions.class);
RegistryPipelineOptions.validateRegistryPipelineOptions(options);
// Defensively set important options.
options.setIsolationOverride(TransactionIsolationLevel.TRANSACTION_REPEATABLE_READ);
options.setJpaTransactionManagerType(JpaTransactionManagerType.BULK_QUERY);
// Set up JPA in the pipeline harness (the locally executed part of the main() method). Reuse
// code in RegistryPipelineWorkerInitializer, which only applies to pipeline worker VMs.
new RegistryPipelineWorkerInitializer().beforeProcessing(options);
LatestDatastoreSnapshotFinder datastoreSnapshotFinder =
DaggerLatestDatastoreSnapshotFinder_LatestDatastoreSnapshotFinderFinderComponent.create()
.datastoreSnapshotInfoFinder();
new ValidateDatabasePipeline(options, datastoreSnapshotFinder).run(Pipeline.create(options));
}
}

View File

@@ -0,0 +1,55 @@
// Copyright 2022 The Nomulus Authors. All Rights Reserved.
//
// Licensed 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.
package google.registry.beam.comparedb;
import google.registry.beam.common.RegistryPipelineOptions;
import google.registry.model.annotations.DeleteAfterMigration;
import javax.annotation.Nullable;
import org.apache.beam.sdk.options.Description;
import org.apache.beam.sdk.options.Validation;
/** BEAM pipeline options for {@link ValidateDatabasePipeline}. */
@DeleteAfterMigration
public interface ValidateDatabasePipelineOptions extends RegistryPipelineOptions {
@Description(
"The id of the SQL snapshot to be compared with Datastore. "
+ "If null, the current state of the SQL database is used.")
@Nullable
String getSqlSnapshotId();
void setSqlSnapshotId(String snapshotId);
@Description("The latest CommitLogs to load, in ISO8601 format.")
@Validation.Required
String getLatestCommitLogTimestamp();
void setLatestCommitLogTimestamp(String commitLogEndTimestamp);
@Description(
"For history entries and EPP resources, only those modified strictly after this time are "
+ "included in comparison. Value is in ISO8601 format. "
+ "Other entity types are not affected.")
@Nullable
String getComparisonStartTimestamp();
void setComparisonStartTimestamp(String comparisonStartTimestamp);
@Description("The GCS bucket where discrepancies found during comparison should be logged.")
@Nullable
String getDiffOutputGcsBucket();
void setDiffOutputGcsBucket(String gcsBucket);
}

View File

@@ -1,240 +0,0 @@
// Copyright 2021 The Nomulus Authors. All Rights Reserved.
//
// Licensed 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.
package google.registry.beam.comparedb;
import static com.google.common.base.Verify.verify;
import static org.apache.beam.sdk.values.TypeDescriptors.strings;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.base.Stopwatch;
import com.google.common.flogger.FluentLogger;
import google.registry.beam.common.DatabaseSnapshot;
import google.registry.beam.common.RegistryPipelineWorkerInitializer;
import google.registry.beam.comparedb.LatestDatastoreSnapshotFinder.DatastoreSnapshotInfo;
import google.registry.beam.comparedb.ValidateSqlUtils.CompareSqlEntity;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.model.domain.DomainBase;
import google.registry.model.domain.DomainHistory;
import google.registry.model.replay.SqlEntity;
import google.registry.model.replay.SqlReplayCheckpoint;
import google.registry.model.server.Lock;
import google.registry.persistence.PersistenceModule.JpaTransactionManagerType;
import google.registry.persistence.PersistenceModule.TransactionIsolationLevel;
import google.registry.persistence.transaction.TransactionManagerFactory;
import google.registry.util.RequestStatusChecker;
import java.io.Serializable;
import java.util.Optional;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.PipelineResult.State;
import org.apache.beam.sdk.coders.SerializableCoder;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.Flatten;
import org.apache.beam.sdk.transforms.GroupByKey;
import org.apache.beam.sdk.transforms.ParDo;
import org.apache.beam.sdk.transforms.WithKeys;
import org.apache.beam.sdk.values.PCollectionList;
import org.apache.beam.sdk.values.PCollectionTuple;
import org.apache.beam.sdk.values.TupleTag;
import org.joda.time.DateTime;
import org.joda.time.Duration;
/**
* Validates the asynchronous data replication process from Datastore (primary storage) to Cloud SQL
* (secondary storage).
*/
@DeleteAfterMigration
public class ValidateSqlPipeline {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
/** Specifies the extra CommitLogs to load before the start of a Database export. */
private static final Duration COMMITLOG_START_TIME_MARGIN = Duration.standardMinutes(10);
/**
* Name of the lock used by the commitlog replay process.
*
* <p>See {@link google.registry.backup.ReplayCommitLogsToSqlAction} for more information.
*/
private static final String COMMITLOG_REPLAY_LOCK_NAME = "ReplayCommitLogsToSqlAction";
private static final Duration REPLAY_LOCK_LEASE_LENGTH = Duration.standardHours(1);
private static final java.time.Duration REPLAY_LOCK_ACQUIRE_TIMEOUT =
java.time.Duration.ofMinutes(6);
private static final java.time.Duration REPLAY_LOCK_ACQUIRE_DELAY =
java.time.Duration.ofSeconds(30);
private final ValidateSqlPipelineOptions options;
private final DatastoreSnapshotInfo mostRecentExport;
public ValidateSqlPipeline(
ValidateSqlPipelineOptions options, DatastoreSnapshotInfo mostRecentExport) {
this.options = options;
this.mostRecentExport = mostRecentExport;
}
void run() {
run(Pipeline.create(options));
}
@VisibleForTesting
void run(Pipeline pipeline) {
// TODO(weiminyu): ensure migration stage is DATASTORE_PRIMARY or DATASTORE_PRIMARY_READ_ONLY
Optional<Lock> lock = acquireCommitLogReplayLock();
if (lock.isPresent()) {
logger.atInfo().log("Acquired CommitLog Replay lock.");
} else {
throw new RuntimeException("Failed to acquire CommitLog Replay lock.");
}
try {
DateTime latestCommitLogTime =
TransactionManagerFactory.jpaTm().transact(() -> SqlReplayCheckpoint.get());
Preconditions.checkState(
latestCommitLogTime.isAfter(mostRecentExport.exportInterval().getEnd()),
"Cannot recreate Datastore snapshot since target time is in the middle of an export.");
try (DatabaseSnapshot databaseSnapshot = DatabaseSnapshot.createSnapshot()) {
// Eagerly release the commitlog replay lock so that replay can resume.
lock.ifPresent(Lock::releaseSql);
lock = Optional.empty();
setupPipeline(pipeline, Optional.of(databaseSnapshot.getSnapshotId()), latestCommitLogTime);
State state = pipeline.run().waitUntilFinish();
if (!State.DONE.equals(state)) {
throw new IllegalStateException("Unexpected pipeline state: " + state);
}
}
} finally {
lock.ifPresent(Lock::releaseSql);
}
}
void setupPipeline(
Pipeline pipeline, Optional<String> sqlSnapshotId, DateTime latestCommitLogTime) {
pipeline
.getCoderRegistry()
.registerCoderForClass(SqlEntity.class, SerializableCoder.of(Serializable.class));
PCollectionTuple datastoreSnapshot =
DatastoreSnapshots.loadDatastoreSnapshotByKind(
pipeline,
mostRecentExport.exportDir(),
mostRecentExport.commitLogDir(),
mostRecentExport.exportInterval().getStart().minus(COMMITLOG_START_TIME_MARGIN),
// Increase by 1ms since we want to include commitLogs latestCommitLogTime but
// this parameter is exclusive.
latestCommitLogTime.plusMillis(1),
DatastoreSnapshots.ALL_DATASTORE_KINDS);
PCollectionTuple cloudSqlSnapshot =
SqlSnapshots.loadCloudSqlSnapshotByType(
pipeline, SqlSnapshots.ALL_SQL_ENTITIES, sqlSnapshotId);
verify(
datastoreSnapshot.getAll().keySet().equals(cloudSqlSnapshot.getAll().keySet()),
"Expecting the same set of types in both snapshots.");
for (Class<? extends SqlEntity> clazz : SqlSnapshots.ALL_SQL_ENTITIES) {
TupleTag<SqlEntity> tag = ValidateSqlUtils.createSqlEntityTupleTag(clazz);
verify(
datastoreSnapshot.has(tag), "Missing %s in Datastore snapshot.", clazz.getSimpleName());
verify(cloudSqlSnapshot.has(tag), "Missing %s in Cloud SQL snapshot.", clazz.getSimpleName());
PCollectionList.of(datastoreSnapshot.get(tag))
.and(cloudSqlSnapshot.get(tag))
.apply("Combine from both snapshots: " + clazz.getSimpleName(), Flatten.pCollections())
.apply(
"Assign primary key to merged " + clazz.getSimpleName(),
WithKeys.of(ValidateSqlPipeline::getPrimaryKeyString).withKeyType(strings()))
.apply("Group by primary key " + clazz.getSimpleName(), GroupByKey.create())
.apply("Compare " + clazz.getSimpleName(), ParDo.of(new CompareSqlEntity()));
}
}
private static String getPrimaryKeyString(SqlEntity sqlEntity) {
// SqlEntity.getPrimaryKeyString only works with entities registered with Hibernate.
// We are using the BulkQueryJpaTransactionManager, which does not recognize DomainBase and
// DomainHistory. See BulkQueryEntities.java for more information.
if (sqlEntity instanceof DomainBase) {
return "DomainBase_" + ((DomainBase) sqlEntity).getRepoId();
}
if (sqlEntity instanceof DomainHistory) {
return "DomainHistory_" + ((DomainHistory) sqlEntity).getDomainHistoryId().toString();
}
return sqlEntity.getPrimaryKeyString();
}
private static Optional<Lock> acquireCommitLogReplayLock() {
Stopwatch stopwatch = Stopwatch.createStarted();
while (stopwatch.elapsed().minus(REPLAY_LOCK_ACQUIRE_TIMEOUT).isNegative()) {
Optional<Lock> lock = tryAcquireCommitLogReplayLock();
if (lock.isPresent()) {
return lock;
}
logger.atInfo().log("Failed to acquired CommitLog Replay lock. Will retry...");
try {
Thread.sleep(REPLAY_LOCK_ACQUIRE_DELAY.toMillis());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("Interrupted.");
}
}
return Optional.empty();
}
private static Optional<Lock> tryAcquireCommitLogReplayLock() {
return Lock.acquireSql(
COMMITLOG_REPLAY_LOCK_NAME,
null,
REPLAY_LOCK_LEASE_LENGTH,
getLockingRequestStatusChecker(),
false);
}
/**
* Returns a fake implementation of {@link RequestStatusChecker} that is required for lock
* acquisition. The default implementation is AppEngine-specific and is unusable on GCE.
*/
private static RequestStatusChecker getLockingRequestStatusChecker() {
return new RequestStatusChecker() {
@Override
public String getLogId() {
return "ValidateSqlPipeline";
}
@Override
public boolean isRunning(String requestLogId) {
return true;
}
};
}
public static void main(String[] args) {
ValidateSqlPipelineOptions options =
PipelineOptionsFactory.fromArgs(args).withValidation().as(ValidateSqlPipelineOptions.class);
// Defensively set important options.
options.setIsolationOverride(TransactionIsolationLevel.TRANSACTION_REPEATABLE_READ);
options.setJpaTransactionManagerType(JpaTransactionManagerType.BULK_QUERY);
// Reuse Dataflow worker initialization code to set up JPA in the pipeline harness.
new RegistryPipelineWorkerInitializer().beforeProcessing(options);
DatastoreSnapshotInfo mostRecentExport =
DaggerLatestDatastoreSnapshotFinder_LatestDatastoreSnapshotFinderFinderComponent.create()
.datastoreSnapshotInfoFinder()
.getSnapshotInfo();
new ValidateSqlPipeline(options, mostRecentExport).run(Pipeline.create(options));
}
}

View File

@@ -20,10 +20,10 @@ import static google.registry.persistence.transaction.TransactionManagerFactory.
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.flogger.FluentLogger;
import com.google.common.collect.Maps;
import com.google.common.collect.Maps.EntryTransformer;
import google.registry.beam.initsql.Transforms;
import google.registry.config.RegistryEnvironment;
import google.registry.model.BackupGroupRoot;
import google.registry.model.EppResource;
import google.registry.model.ImmutableObject;
import google.registry.model.annotations.DeleteAfterMigration;
@@ -38,24 +38,29 @@ import google.registry.model.poll.PollMessage;
import google.registry.model.registrar.Registrar;
import google.registry.model.replay.SqlEntity;
import google.registry.model.reporting.HistoryEntry;
import google.registry.util.DiffUtils;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.math.BigInteger;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.beam.sdk.metrics.Counter;
import org.apache.beam.sdk.metrics.Metrics;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.values.KV;
import org.apache.beam.sdk.values.TupleTag;
import org.checkerframework.checker.nullness.qual.Nullable;
/** Helpers for use by {@link ValidateSqlPipeline}. */
/** Helpers for use by {@link ValidateDatabasePipeline}. */
@DeleteAfterMigration
final class ValidateSqlUtils {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private ValidateSqlUtils() {}
@@ -67,7 +72,7 @@ final class ValidateSqlUtils {
* Query template for finding the median value of the {@code history_revision_id} column in one of
* the History tables.
*
* <p>The {@link ValidateSqlPipeline} uses this query to parallelize the query to some of the
* <p>The {@link ValidateDatabasePipeline} uses this query to parallelize the query to some of the
* history tables. Although the {@code repo_id} column is the leading column in the primary keys
* of these tables, in practice and with production data, division by {@code history_revision_id}
* works slightly faster for unknown reasons.
@@ -99,13 +104,12 @@ final class ValidateSqlUtils {
return new TupleTag<SqlEntity>(actualType.getSimpleName()) {};
}
static class CompareSqlEntity extends DoFn<KV<String, Iterable<SqlEntity>>, Void> {
static class CompareSqlEntity extends DoFn<KV<String, Iterable<SqlEntity>>, String> {
private final HashMap<String, Counter> totalCounters = new HashMap<>();
private final HashMap<String, Counter> missingCounters = new HashMap<>();
private final HashMap<String, Counter> unequalCounters = new HashMap<>();
private final HashMap<String, Counter> badEntityCounters = new HashMap<>();
private volatile boolean logPrinted = false;
private final HashMap<String, Counter> duplicateEntityCounters = new HashMap<>();
private String getCounterKey(Class<?> clazz) {
return PollMessage.class.isAssignableFrom(clazz) ? "PollMessage" : clazz.getSimpleName();
@@ -120,84 +124,129 @@ final class ValidateSqlUtils {
counterKey, Metrics.counter("CompareDB", "Missing In One DB: " + counterKey));
unequalCounters.put(counterKey, Metrics.counter("CompareDB", "Not Equal:" + counterKey));
badEntityCounters.put(counterKey, Metrics.counter("CompareDB", "Bad Entities:" + counterKey));
duplicateEntityCounters.put(
counterKey, Metrics.counter("CompareDB", "Duplicate Entities:" + counterKey));
}
String duplicateEntityLog(String key, ImmutableList<SqlEntity> entities) {
return String.format("%s: %d entities.", key, entities.size());
}
String unmatchedEntityLog(String key, SqlEntity entry) {
// For a PollMessage only found in Datastore, key is not enough to query for it.
return String.format("Missing in one DB:\n%s", entry instanceof PollMessage ? entry : key);
}
/**
* A rudimentary debugging helper that prints the first pair of unequal entities in each worker.
* This will be removed when we start exporting such entities to GCS.
*/
void logDiff(String key, Object entry0, Object entry1) {
if (logPrinted) {
return;
}
logPrinted = true;
String unEqualEntityLog(String key, SqlEntity entry0, SqlEntity entry1) {
Map<String, Object> fields0 = ((ImmutableObject) entry0).toDiffableFieldMap();
Map<String, Object> fields1 = ((ImmutableObject) entry1).toDiffableFieldMap();
StringBuilder sb = new StringBuilder();
fields0.forEach(
(field, value) -> {
if (fields1.containsKey(field)) {
if (!Objects.equals(value, fields1.get(field))) {
sb.append(field + " not match: " + value + " -> " + fields1.get(field) + "\n");
}
} else {
sb.append(field + "Not found in entity 2\n");
}
});
fields1.forEach(
(field, value) -> {
if (!fields0.containsKey(field)) {
sb.append(field + "Not found in entity 1\n");
}
});
logger.atWarning().log(key + " " + sb.toString());
return key + " " + DiffUtils.prettyPrintEntityDeepDiff(fields0, fields1);
}
String badEntitiesLog(String key, SqlEntity entry0, SqlEntity entry1) {
Map<String, Object> fields0 = ((ImmutableObject) entry0).toDiffableFieldMap();
Map<String, Object> fields1 = ((ImmutableObject) entry1).toDiffableFieldMap();
return String.format(
"Failed to parse one or both entities for key %s:\n%s\n",
key, DiffUtils.prettyPrintEntityDeepDiff(fields0, fields1));
}
@ProcessElement
public void processElement(@Element KV<String, Iterable<SqlEntity>> kv) {
public void processElement(
@Element KV<String, Iterable<SqlEntity>> kv, OutputReceiver<String> out) {
ImmutableList<SqlEntity> entities = ImmutableList.copyOf(kv.getValue());
verify(!entities.isEmpty(), "Can't happen: no value for key %s.", kv.getKey());
verify(entities.size() <= 2, "Unexpected duplicates for key %s", kv.getKey());
String counterKey = getCounterKey(entities.get(0).getClass());
ensureCounterExists(counterKey);
totalCounters.get(counterKey).inc();
if (entities.size() > 2) {
// Duplicates may happen with Cursors if imported across projects. Its key in Datastore, the
// id field, encodes the project name and is not fixed by the importing job.
duplicateEntityCounters.get(counterKey).inc();
out.output(duplicateEntityLog(kv.getKey(), entities) + "\n");
return;
}
if (entities.size() == 1) {
if (isSpecialCaseProberEntity(entities.get(0))) {
return;
}
missingCounters.get(counterKey).inc();
// Temporary debugging help. See logDiff() above.
if (!logPrinted) {
logPrinted = true;
logger.atWarning().log("Unexpected single entity: %s", kv.getKey());
}
out.output(unmatchedEntityLog(kv.getKey(), entities.get(0)) + "\n");
return;
}
SqlEntity entity0 = entities.get(0);
SqlEntity entity1 = entities.get(1);
if (isSpecialCaseProberEntity(entity0) && isSpecialCaseProberEntity(entity1)) {
// Ignore prober-related data: their deletions are not propagated from Datastore to SQL.
// When code reaches here, in most cases it involves one soft deleted entity in Datastore
// and an SQL entity with its pre-deletion status.
return;
}
SqlEntity entity0;
SqlEntity entity1;
try {
entity0 = normalizeEntity(entities.get(0));
entity1 = normalizeEntity(entities.get(1));
entity0 = normalizeEntity(entity0);
entity1 = normalizeEntity(entity1);
} catch (Exception e) {
// Temporary debugging help. See logDiff() above.
if (!logPrinted) {
logPrinted = true;
badEntityCounters.get(counterKey).inc();
}
badEntityCounters.get(counterKey).inc();
out.output(badEntitiesLog(kv.getKey(), entity0, entity1));
return;
}
if (!Objects.equals(entity0, entity1)) {
Map<String, Object> fields0 =
Maps.transformEntries(
((ImmutableObject) entity0).toDiffableFieldMap(), new DiffableFieldNormalizer());
Map<String, Object> fields1 =
Maps.transformEntries(
((ImmutableObject) entity1).toDiffableFieldMap(), new DiffableFieldNormalizer());
if (!Objects.equals(fields0, fields1)) {
unequalCounters.get(counterKey).inc();
logDiff(kv.getKey(), entities.get(0), entities.get(1));
out.output(kv.getKey() + " " + DiffUtils.prettyPrintEntityDeepDiff(fields0, fields1));
}
}
}
/**
* Normalizes trivial differences between objects persisted in Datastore and SQL.
*
* <p>This class works on a map generated by {@link ImmutableObject#toDiffableFieldMap}, and
* performs the following changes:
*
* <ul>
* <li>If a value is an empty {@link Collection}, it is converted to null
* <li>For each {@link google.registry.model.eppcommon.Address} object, empty strings are
* removed from its {@code string} field, which is a {@link List}.
* </ul>
*/
static class DiffableFieldNormalizer
implements EntryTransformer<String, Object, Object>, Serializable {
@Override
public Object transformEntry(String key, @Nullable Object value) {
if (value instanceof Collection && ((Collection<?>) value).isEmpty()) {
return null;
}
if (key.equals("street") && value instanceof List) {
return ((List<?>) value)
.stream().filter(v -> v != null && !Objects.equals("", v)).collect(Collectors.toList());
}
// Short-term hack: LinkedHashMap<String, ?> represents a child ImmutableObject instance.
if (value instanceof LinkedHashMap
&& ((LinkedHashMap<?, ?>) value).keySet().stream().anyMatch(e -> e instanceof String)) {
return Maps.transformEntries((Map<String, Object>) value, this);
}
return value;
}
}
static SqlEntity normalizeEntity(SqlEntity sqlEntity) {
if (sqlEntity instanceof EppResource) {
return normalizeEppResource(sqlEntity);
@@ -218,15 +267,6 @@ final class ValidateSqlUtils {
*/
static SqlEntity normalizeEppResource(SqlEntity eppResource) {
try {
if (isSpecialCaseProberEntity(eppResource)) {
// Clearing some timestamps. See isSpecialCaseProberEntity() for reasons.
Field lastUpdateTime = BackupGroupRoot.class.getDeclaredField("updateTimestamp");
lastUpdateTime.setAccessible(true);
lastUpdateTime.set(eppResource, null);
Field deletionTime = EppResource.class.getDeclaredField("deletionTime");
deletionTime.setAccessible(true);
deletionTime.set(eppResource, null);
}
Field authField =
eppResource instanceof DomainContent
? DomainContent.class.getDeclaredField("authInfo")

View File

@@ -68,6 +68,7 @@ import org.apache.beam.sdk.values.PDone;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openpgp.PGPPublicKey;
import org.joda.time.DateTime;
import org.joda.time.Duration;
public class RdeIO {
@@ -248,6 +249,9 @@ public class RdeIO {
// Now that we're done, output roll the cursor forward.
if (key.manual()) {
logger.atInfo().log("Manual operation; not advancing cursor or enqueuing upload task.");
// Temporary measure to run RDE in beam in parallel with the daily MapReduce based RDE runs.
} else if (tm().isOfy()) {
logger.atInfo().log("Ofy is primary TM; not advancing cursor or enqueuing upload task.");
} else {
outputReceiver.output(KV.of(key, revision));
}
@@ -258,6 +262,7 @@ public class RdeIO {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private static final long serialVersionUID = 5822176227753327224L;
private static final Duration ENQUEUE_DELAY = Duration.standardMinutes(1);
private final CloudTasksUtils cloudTasksUtils;
@@ -268,10 +273,10 @@ public class RdeIO {
@ProcessElement
public void processElement(
@Element KV<PendingDeposit, Integer> input, PipelineOptions options) {
tm().transact(
() -> {
PendingDeposit key = input.getKey();
int revision = input.getValue();
Registry registry = Registry.get(key.tld());
Optional<Cursor> cursor =
transactIfJpaTm(
@@ -293,22 +298,30 @@ public class RdeIO {
tm().put(Cursor.create(key.cursor(), newPosition, registry));
logger.atInfo().log(
"Rolled forward %s on %s cursor to %s.", key.cursor(), key.tld(), newPosition);
RdeRevision.saveRevision(key.tld(), key.watermark(), key.mode(), revision);
RdeRevision.saveRevision(key.tld(), key.watermark(), key.mode(), input.getValue());
// Enqueueing a task is a side effect that is not undone if the transaction rolls
// back. So this may result in multiple copies of the same task being processed.
// This is fine because the RdeUploadAction is guarded by a lock and tracks progress
// by cursor. The BrdaCopyAction writes a file to GCS, which is an atomic action. It
// is also guarded by a cursor to not run before the cursor is updated. We also
// include a delay to minimize the chance that the enqueued job executes before the
// transaction is committed, which triggers a retry.
if (key.mode() == RdeMode.FULL) {
cloudTasksUtils.enqueue(
RDE_UPLOAD_QUEUE,
CloudTasksUtils.createPostTask(
cloudTasksUtils.createPostTaskWithDelay(
RdeUploadAction.PATH,
Service.BACKEND.getServiceId(),
ImmutableMultimap.of(
RequestParameters.PARAM_TLD,
key.tld(),
RdeModule.PARAM_PREFIX,
options.getJobName() + '/')));
options.getJobName() + '/'),
ENQUEUE_DELAY));
} else {
cloudTasksUtils.enqueue(
BRDA_QUEUE,
CloudTasksUtils.createPostTask(
cloudTasksUtils.createPostTaskWithDelay(
BrdaCopyAction.PATH,
Service.BACKEND.getServiceId(),
ImmutableMultimap.of(
@@ -317,7 +330,8 @@ public class RdeIO {
RdeModule.PARAM_WATERMARK,
key.watermark().toString(),
RdeModule.PARAM_PREFIX,
options.getJobName() + '/')));
options.getJobName() + '/'),
ENQUEUE_DELAY));
}
});
}

View File

@@ -21,6 +21,7 @@ import dagger.Module;
import dagger.Provides;
import google.registry.config.CredentialModule.DefaultCredential;
import google.registry.config.RegistryConfig.Config;
import google.registry.util.Clock;
import google.registry.util.CloudTasksUtils;
import google.registry.util.CloudTasksUtils.GcpCloudTasksClient;
import google.registry.util.CloudTasksUtils.SerializableCloudTasksClient;
@@ -46,8 +47,9 @@ public abstract class CloudTasksUtilsModule {
@Config("projectId") String projectId,
@Config("locationId") String locationId,
SerializableCloudTasksClient client,
Retrier retrier) {
return new CloudTasksUtils(retrier, projectId, locationId, client);
Retrier retrier,
Clock clock) {
return new CloudTasksUtils(retrier, clock, projectId, locationId, client);
}
// Provides a supplier instead of using a Dagger @Provider because the latter is not serializable.

View File

@@ -33,6 +33,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedMap;
import dagger.Module;
import dagger.Provides;
import google.registry.persistence.transaction.JpaTransactionManager;
import google.registry.util.TaskQueueUtils;
import google.registry.util.YamlUtils;
import java.lang.annotation.Documented;
@@ -575,6 +576,19 @@ public final class RegistryConfig {
return config.beam.highPerformanceMachineType;
}
/**
* Returns initial number of workers used for a Beam pipeline. Autoscaling can still in effect.
*
* @see <a
* href=https://cloud.google.com/dataflow/docs/guides/deploying-a-pipeline#horizontal-autoscaling>
* Horizontal Autoscaling </a>
*/
@Provides
@Config("initialWorkerCount")
public static int provideInitialWorkerCount(RegistryConfigSettings config) {
return config.beam.initialWorkerCount;
}
/**
* Returns the default job region to run Apache Beam (Cloud Dataflow) jobs in.
*
@@ -1531,6 +1545,31 @@ public final class RegistryConfig {
return CONFIG_SETTINGS.get().hibernate.hikariIdleTimeout;
}
/**
* JDBC-specific: driver default batch size is 0, which means that every INSERT statement will be
* sent to the database individually. Batching allows us to group together multiple inserts into
* one single INSERT statement which can dramatically increase speed in situations with many
* inserts.
*
* <p>Hibernate docs, i.e.
* https://docs.jboss.org/hibernate/orm/5.6/userguide/html_single/Hibernate_User_Guide.html,
* recommend between 10 and 50.
*/
public static String getHibernateJdbcBatchSize() {
return CONFIG_SETTINGS.get().hibernate.jdbcBatchSize;
}
/**
* Returns the JDBC fetch size.
*
* <p>Postgresql-specific: driver default fetch size is 0, which disables streaming result sets.
* Here we set a small default geared toward Nomulus server transactions. Large queries can
* override the defaults using {@link JpaTransactionManager#setQueryFetchSize}.
*/
public static String getHibernateJdbcFetchSize() {
return CONFIG_SETTINGS.get().hibernate.jdbcFetchSize;
}
/** Returns the roid suffix to be used for the roids of all contacts and hosts. */
public static String getContactAndHostRoidSuffix() {
return CONFIG_SETTINGS.get().registryPolicy.contactAndHostRoidSuffix;

View File

@@ -120,6 +120,8 @@ public class RegistryConfigSettings {
public String hikariMinimumIdle;
public String hikariMaximumPoolSize;
public String hikariIdleTimeout;
public String jdbcBatchSize;
public String jdbcFetchSize;
}
/** Configuration for Cloud SQL. */
@@ -135,6 +137,7 @@ public class RegistryConfigSettings {
public static class Beam {
public String defaultJobRegion;
public String highPerformanceMachineType;
public int initialWorkerCount;
public String stagingBucketUrl;
}

View File

@@ -221,6 +221,17 @@ hibernate:
hikariMinimumIdle: 1
hikariMaximumPoolSize: 10
hikariIdleTimeout: 300000
# The batch size is basically the number of insertions / updates in a single
# transaction that will be batched together into one INSERT/UPDATE statement.
# A larger batch size is useful when inserting or updating many entities in a
# single transaction. Hibernate docs
# (https://docs.jboss.org/hibernate/orm/5.6/userguide/html_single/Hibernate_User_Guide.html)
# recommend between 10 and 50.
jdbcBatchSize: 50
# The fetch size is the number of entities retrieved at a time from the
# database cursor. Here we set a small default geared toward Nomulus server
# transactions. Large queries can override the defaults on a per-query basis.
jdbcFetchSize: 20
cloudSql:
# jdbc url for the Cloud SQL database.
@@ -231,6 +242,9 @@ cloudSql:
jdbcUrl: jdbc:postgresql://localhost
# This name is used by Cloud SQL when connecting to the database.
instanceConnectionName: project-id:region:instance-id
# If non-null, we will use this instance for certain read-only actions or
# pipelines, e.g. RDE, in order to offload some work from the primary
# instance. Expect any write actions on this instance to fail.
replicaInstanceConnectionName: null
cloudDns:
@@ -428,6 +442,11 @@ beam:
# core count per machine may be preferable in order to preserve IP addresses.
# See: https://cloud.google.com/compute/quotas#cpu_quota
highPerformanceMachineType: n2-standard-4
# The initial number of workers requested. This can help speed up the pipeline
# which otherwise would take some time to spin up the necessary number of
# works. Autoscaling is still in effect to reduce the number of workers if
# not in use.
initialWorkerCount: 24
stagingBucketUrl: gcs-bucket-with-staged-templates
keyring:
@@ -472,9 +491,9 @@ sslCertificateValidation:
# The minimum number of days between two successive expiring notification emails.
expirationWarningIntervalDays: 15
# Text for expiring certificate notification email subject.
expirationWarningEmailSubjectText: "[Important] Expiring SSL certificate for Google Registry EPP connection"
# Text for expiring certificate notification email body that accepts 3 parameters:
# registrar name, certificate type, and expiration date, respectively.
expirationWarningEmailSubjectText: "Expiring SSL certificate for Example Registry EPP connection"
# Text for expiring certificate notification email body that accepts 4 parameters:
# registrar name, certificate type, expiration date and registrar id, respectively.
expirationWarningEmailBodyText: |
Dear %1$s,
@@ -482,25 +501,15 @@ sslCertificateValidation:
Kindly update your production account certificate within the support console using the following steps:
1. Navigate to support.registry.google and login using your %4$s@registry.google credentials.
* If this is your first time logging in, you will be prompted to reset your password, so please keep your new password safe.
* If you are already logged in with some other Google account(s) but not your %4$s@registry.google account, you need to click on
“Add Account” and login using your %4$s@registry.google credentials.
1. Navigate to support.registry.example and login using your %4$s@registry.example credentials.
2. Select “Settings > Security” from the left navigation bar.
3. Click “Edit” on the top left corner.
4. Enter your full certificate string (including lines -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----) in the box.
5. Click “Save”. If there are validation issues with the form, you will be prompted to fix them and click “Save” again.
4. Enter your full certificate string in the box.
5. Click “Save”.
A failover SSL certificate can also be added in order to prevent connection issues once your main certificate expires. Connecting with either of the certificates will work with our production EPP server.
Further information about our EPP connection requirements can be found in section 9.2 in the updated Technical Guide in your Google Drive folder.
Note that account certificate changes take a few minutes to become effective and that the existing connections will remain unaffected by the change.
If you also would like to update your OT&E account certificate, please send an email from your primary or technical contact to registry-support@google.com and include the full certificate string (including lines -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----).
Regards,
Google Registry
Example Registry
# The minimum number of bits an RSA key must contain.
minimumRsaKeyLength: 2048

View File

@@ -20,7 +20,6 @@ import google.registry.request.Action;
import google.registry.request.Action.Service;
import google.registry.request.Parameter;
import google.registry.request.auth.Auth;
import google.registry.util.Clock;
import google.registry.util.CloudTasksUtils;
import java.util.Optional;
import javax.inject.Inject;
@@ -35,7 +34,6 @@ public final class CommitLogFanoutAction implements Runnable {
public static final String BUCKET_PARAM = "bucket";
@Inject Clock clock;
@Inject CloudTasksUtils cloudTasksUtils;
@Inject @Parameter("endpoint") String endpoint;
@@ -43,18 +41,15 @@ public final class CommitLogFanoutAction implements Runnable {
@Inject @Parameter("jitterSeconds") Optional<Integer> jitterSeconds;
@Inject CommitLogFanoutAction() {}
@Override
public void run() {
for (int bucketId : CommitLogBucket.getBucketIds()) {
cloudTasksUtils.enqueue(
queue,
CloudTasksUtils.createPostTask(
cloudTasksUtils.createPostTaskWithJitter(
endpoint,
Service.BACKEND.toString(),
ImmutableMultimap.of(BUCKET_PARAM, Integer.toString(bucketId)),
clock,
jitterSeconds));
}
}

View File

@@ -45,7 +45,6 @@ import google.registry.request.ParameterMap;
import google.registry.request.RequestParameters;
import google.registry.request.Response;
import google.registry.request.auth.Auth;
import google.registry.util.Clock;
import google.registry.util.CloudTasksUtils;
import java.util.Optional;
import java.util.stream.Stream;
@@ -98,7 +97,6 @@ public final class TldFanoutAction implements Runnable {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@Inject Clock clock;
@Inject CloudTasksUtils cloudTasksUtils;
@Inject Response response;
@Inject @Parameter(ENDPOINT_PARAM) String endpoint;
@@ -159,7 +157,7 @@ public final class TldFanoutAction implements Runnable {
params = ArrayListMultimap.create(params);
params.put(RequestParameters.PARAM_TLD, tld);
}
return CloudTasksUtils.createPostTask(
endpoint, Service.BACKEND.toString(), params, clock, jitterSeconds);
return cloudTasksUtils.createPostTaskWithJitter(
endpoint, Service.BACKEND.toString(), params, jitterSeconds);
}
}

View File

@@ -422,6 +422,12 @@ have been in the database for a certain period of time. -->
<url-pattern>/_dr/task/createSyntheticHistoryEntries</url-pattern>
</servlet-mapping>
<!-- Action to sync Datastore to a snapshot of the primary SQL database. -->
<servlet-mapping>
<servlet-name>backend-servlet</servlet-name>
<url-pattern>/_dr/task/syncDatastoreToSqlSnapshot</url-pattern>
</servlet-mapping>
<!-- Security config -->
<security-constraint>
<web-resource-collection>

View File

@@ -36,6 +36,19 @@
<target>backend</target>
</cron>
<cron>
<url>/_dr/task/rdeStaging?beam=true</url>
<description>
This job generates a full RDE escrow deposit as a single gigantic XML
document using the Beam pipeline regardless of the current TM
configuration and streams it to cloud storage. It does not trigger the
subsequent upload tasks and is meant to run parallel with the main cron
job in order to compare the results from both runs.
</description>
<schedule>every 8 hours from 00:07 to 20:00</schedule>
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/cron/fanout?queue=rde-upload&endpoint=/_dr/task/rdeUpload&forEachRealTld]]></url>
<description>
@@ -240,16 +253,6 @@
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/cron/fanout?queue=retryable-cron-tasks&endpoint=/_dr/task/deleteProberData&runInEmpty]]></url>
<description>
This job clears out data from probers and runs once a week.
</description>
<schedule>every monday 14:00</schedule>
<timezone>UTC</timezone>
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/cron/fanout?queue=retryable-cron-tasks&endpoint=/_dr/task/exportReservedTerms&forEachRealTld]]></url>
<description>
@@ -349,6 +352,15 @@
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/cron/replicateToDatastore]]></url>
<description>
Replays recent transactions from SQL to the Datastore secondary backend.
</description>
<schedule>every 3 minutes</schedule>
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/task/wipeOutContactHistoryPii]]></url>
<description>

View File

@@ -168,15 +168,6 @@
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/task/sendExpiringCertificateNotificationEmail]]></url>
<description>
This job runs an action that sends emails to partners if their certificates are expiring soon.
</description>
<schedule>every day 04:30</schedule>
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/cron/fanout?queue=export-snapshot&endpoint=/_dr/task/backupDatastore&runInEmpty]]></url>
<description>
@@ -191,16 +182,6 @@
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/cron/fanout?queue=retryable-cron-tasks&endpoint=/_dr/task/deleteProberData&runInEmpty]]></url>
<description>
This job clears out data from probers and runs once a week.
</description>
<schedule>every monday 14:00</schedule>
<timezone>UTC</timezone>
<target>backend</target>
</cron>
<cron>
<url><![CDATA[/_dr/cron/fanout?queue=retryable-cron-tasks&endpoint=/_dr/task/exportReservedTerms&forEachRealTld]]></url>
<description>

View File

@@ -14,18 +14,22 @@
package google.registry.export;
import static google.registry.export.CheckBackupAction.enqueuePollTask;
import static google.registry.request.Action.Method.POST;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.flogger.FluentLogger;
import google.registry.config.RegistryConfig;
import google.registry.export.datastore.DatastoreAdmin;
import google.registry.export.datastore.Operation;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.request.Action;
import google.registry.request.Action.Service;
import google.registry.request.HttpException.InternalServerErrorException;
import google.registry.request.Response;
import google.registry.request.auth.Auth;
import google.registry.util.Clock;
import google.registry.util.CloudTasksUtils;
import javax.inject.Inject;
/**
@@ -59,6 +63,8 @@ public class BackupDatastoreAction implements Runnable {
@Inject DatastoreAdmin datastoreAdmin;
@Inject Response response;
@Inject Clock clock;
@Inject CloudTasksUtils cloudTasksUtils;
@Inject
BackupDatastoreAction() {}
@@ -73,8 +79,19 @@ public class BackupDatastoreAction implements Runnable {
.execute();
String backupName = backup.getName();
// Enqueue a poll task to monitor the backup and load REPORTING-related kinds into bigquery.
enqueuePollTask(backupName, AnnotatedEntities.getReportingKinds());
// Enqueue a poll task to monitor the backup for completion and load reporting-related kinds
// into bigquery.
cloudTasksUtils.enqueue(
CheckBackupAction.QUEUE,
cloudTasksUtils.createPostTaskWithDelay(
CheckBackupAction.PATH,
Service.BACKEND.toString(),
ImmutableMultimap.of(
CheckBackupAction.CHECK_BACKUP_NAME_PARAM,
backupName,
CheckBackupAction.CHECK_BACKUP_KINDS_TO_LOAD_PARAM,
Joiner.on(',').join(AnnotatedEntities.getReportingKinds())),
CheckBackupAction.POLL_COUNTDOWN));
String message =
String.format(
"Datastore backup started with name: %s\nSaving to %s",

View File

@@ -14,18 +14,14 @@
package google.registry.export;
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
import static com.google.appengine.api.taskqueue.TaskOptions.Builder.withUrl;
import static google.registry.bigquery.BigqueryUtils.toJobReferenceString;
import com.google.api.services.bigquery.Bigquery;
import com.google.api.services.bigquery.model.Job;
import com.google.api.services.bigquery.model.JobReference;
import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.TaskHandle;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
import com.google.cloud.tasks.v2.Task;
import com.google.common.flogger.FluentLogger;
import com.google.protobuf.ByteString;
import dagger.Lazy;
import google.registry.request.Action;
import google.registry.request.Header;
@@ -33,12 +29,10 @@ import google.registry.request.HttpException.BadRequestException;
import google.registry.request.HttpException.NotModifiedException;
import google.registry.request.Payload;
import google.registry.request.auth.Auth;
import google.registry.util.TaskQueueUtils;
import google.registry.util.CloudTasksUtils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.inject.Inject;
import org.joda.time.Duration;
@@ -67,11 +61,14 @@ public class BigqueryPollJobAction implements Runnable {
static final Duration POLL_COUNTDOWN = Duration.standardSeconds(20);
@Inject Bigquery bigquery;
@Inject TaskQueueUtils taskQueueUtils;
@Inject CloudTasksUtils cloudTasksUtils;
@Inject @Header(CHAINED_TASK_QUEUE_HEADER) Lazy<String> chainedQueueName;
@Inject @Header(PROJECT_ID_HEADER) String projectId;
@Inject @Header(JOB_ID_HEADER) String jobId;
@Inject @Payload byte[] payload;
@Inject @Payload ByteString payload;
@Inject BigqueryPollJobAction() {}
@Override
@@ -79,20 +76,25 @@ public class BigqueryPollJobAction implements Runnable {
boolean jobOutcome =
checkJobOutcome(); // Throws a NotModifiedException if the job hasn't completed.
// If the job failed, do not enqueue the next step.
if (!jobOutcome || payload == null || payload.length == 0) {
if (!jobOutcome || payload == null || payload.size() == 0) {
return;
}
// If there is a payload, it's a chained task, so enqueue it.
TaskOptions task;
Task task;
try {
task = (TaskOptions) new ObjectInputStream(new ByteArrayInputStream(payload)).readObject();
task =
(Task)
new ObjectInputStream(new ByteArrayInputStream(payload.toByteArray())).readObject();
} catch (ClassNotFoundException | IOException e) {
throw new BadRequestException("Cannot deserialize task from payload", e);
}
String taskName = taskQueueUtils.enqueue(getQueue(chainedQueueName.get()), task).getName();
Task enqueuedTask = cloudTasksUtils.enqueue(chainedQueueName.get(), task);
logger.atInfo().log(
"Added chained task %s for %s to queue %s: %s",
taskName, task.getUrl(), chainedQueueName.get(), task);
enqueuedTask.getName(),
enqueuedTask.getAppEngineHttpRequest().getRelativeUri(),
chainedQueueName.get(),
enqueuedTask);
}
/**
@@ -124,51 +126,4 @@ public class BigqueryPollJobAction implements Runnable {
logger.atInfo().log("Bigquery job succeeded - %s.", jobRefString);
return true;
}
/** Helper class to enqueue a bigquery poll job. */
public static class BigqueryPollJobEnqueuer {
private final TaskQueueUtils taskQueueUtils;
@Inject
BigqueryPollJobEnqueuer(TaskQueueUtils taskQueueUtils) {
this.taskQueueUtils = taskQueueUtils;
}
/** Enqueue a task to poll for the success or failure of the referenced BigQuery job. */
public TaskHandle enqueuePollTask(JobReference jobRef) {
return taskQueueUtils.enqueue(
getQueue(QUEUE), createCommonPollTask(jobRef).method(Method.GET));
}
/**
* Enqueue a task to poll for the success or failure of the referenced BigQuery job and to
* launch the provided task in the specified queue if the job succeeds.
*/
public TaskHandle enqueuePollTask(
JobReference jobRef, TaskOptions chainedTask, Queue chainedTaskQueue) throws IOException {
// Serialize the chainedTask into a byte array to put in the task payload.
ByteArrayOutputStream taskBytes = new ByteArrayOutputStream();
new ObjectOutputStream(taskBytes).writeObject(chainedTask);
return taskQueueUtils.enqueue(
getQueue(QUEUE),
createCommonPollTask(jobRef)
.method(Method.POST)
.header(CHAINED_TASK_QUEUE_HEADER, chainedTaskQueue.getQueueName())
.payload(taskBytes.toByteArray()));
}
/**
* Enqueue a task to poll for the success or failure of the referenced BigQuery job and to
* launch the provided task in the specified queue if the job succeeds.
*/
private static TaskOptions createCommonPollTask(JobReference jobRef) {
// Omit host header so that task will be run on the current backend/module.
return withUrl(PATH)
.countdownMillis(POLL_COUNTDOWN.getMillis())
.header(PROJECT_ID_HEADER, jobRef.getProjectId())
.header(JOB_ID_HEADER, jobRef.getJobId());
}
}
}

View File

@@ -16,18 +16,14 @@ package google.registry.export;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.Sets.intersection;
import static google.registry.export.UploadDatastoreBackupAction.enqueueUploadBackupTask;
import static google.registry.request.Action.Method.GET;
import static google.registry.request.Action.Method.POST;
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskHandle;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.common.flogger.FluentLogger;
@@ -35,6 +31,7 @@ import google.registry.export.datastore.DatastoreAdmin;
import google.registry.export.datastore.Operation;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.request.Action;
import google.registry.request.Action.Service;
import google.registry.request.HttpException;
import google.registry.request.HttpException.BadRequestException;
import google.registry.request.HttpException.InternalServerErrorException;
@@ -45,6 +42,7 @@ import google.registry.request.RequestMethod;
import google.registry.request.Response;
import google.registry.request.auth.Auth;
import google.registry.util.Clock;
import google.registry.util.CloudTasksUtils;
import java.io.IOException;
import java.util.Set;
import javax.inject.Inject;
@@ -83,6 +81,7 @@ public class CheckBackupAction implements Runnable {
@Inject DatastoreAdmin datastoreAdmin;
@Inject Clock clock;
@Inject Response response;
@Inject CloudTasksUtils cloudTasksUtils;
@Inject @RequestMethod Action.Method requestMethod;
@Inject
@@ -175,21 +174,22 @@ public class CheckBackupAction implements Runnable {
if (exportedKindsToLoad.isEmpty()) {
message += "no kinds to load into BigQuery.";
} else {
enqueueUploadBackupTask(backupId, backup.getExportFolderUrl(), exportedKindsToLoad);
/** Enqueue a task for starting a backup load. */
cloudTasksUtils.enqueue(
UploadDatastoreBackupAction.QUEUE,
cloudTasksUtils.createPostTask(
UploadDatastoreBackupAction.PATH,
Service.BACKEND.toString(),
ImmutableMultimap.of(
UploadDatastoreBackupAction.UPLOAD_BACKUP_ID_PARAM,
backupId,
UploadDatastoreBackupAction.UPLOAD_BACKUP_FOLDER_PARAM,
backup.getExportFolderUrl(),
UploadDatastoreBackupAction.UPLOAD_BACKUP_KINDS_PARAM,
Joiner.on(',').join(exportedKindsToLoad))));
message += "BigQuery load task enqueued.";
}
logger.atInfo().log(message);
response.setPayload(message);
}
/** Enqueue a poll task to monitor the named backup for completion. */
static TaskHandle enqueuePollTask(String backupId, ImmutableSet<String> kindsToLoad) {
return QueueFactory.getQueue(QUEUE)
.add(
TaskOptions.Builder.withUrl(PATH)
.method(Method.POST)
.countdownMillis(POLL_COUNTDOWN.getMillis())
.param(CHECK_BACKUP_NAME_PARAM, backupId)
.param(CHECK_BACKUP_KINDS_TO_LOAD_PARAM, Joiner.on(',').join(kindsToLoad)));
}
}

View File

@@ -26,7 +26,6 @@ import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Streams;
import com.google.common.flogger.FluentLogger;
import com.google.common.net.MediaType;
import google.registry.config.RegistryConfig.Config;
@@ -143,7 +142,7 @@ public class ExportPremiumTermsAction implements Runnable {
PremiumListDao.getLatestRevision(premiumListName).isPresent(),
"Could not load premium list for " + tld);
SortedSet<String> premiumTerms =
Streams.stream(PremiumListDao.loadAllPremiumEntries(premiumListName))
PremiumListDao.loadAllPremiumEntries(premiumListName).stream()
.map(PremiumEntry::toString)
.collect(ImmutableSortedSet.toImmutableSortedSet(String::compareTo));

View File

@@ -21,8 +21,6 @@ import com.google.api.services.bigquery.Bigquery;
import com.google.api.services.bigquery.model.Table;
import com.google.api.services.bigquery.model.TableReference;
import com.google.api.services.bigquery.model.ViewDefinition;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
import com.google.common.flogger.FluentLogger;
import google.registry.bigquery.CheckedBigquery;
import google.registry.config.RegistryConfig.Config;
@@ -85,17 +83,6 @@ public class UpdateSnapshotViewAction implements Runnable {
@Inject
UpdateSnapshotViewAction() {}
/** Create a task for updating a snapshot view. */
static TaskOptions createViewUpdateTask(
String datasetId, String tableId, String kindName, String viewName) {
return TaskOptions.Builder.withUrl(PATH)
.method(Method.POST)
.param(UPDATE_SNAPSHOT_DATASET_ID_PARAM, datasetId)
.param(UPDATE_SNAPSHOT_TABLE_ID_PARAM, tableId)
.param(UPDATE_SNAPSHOT_KIND_PARAM, kindName)
.param(UPDATE_SNAPSHOT_VIEWNAME_PARAM, viewName);
}
@Override
public void run() {
try {

View File

@@ -14,9 +14,7 @@
package google.registry.export;
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
import static com.google.common.base.MoreObjects.firstNonNull;
import static google.registry.export.UpdateSnapshotViewAction.createViewUpdateTask;
import static google.registry.request.Action.Method.POST;
import com.google.api.services.bigquery.Bigquery;
@@ -25,27 +23,33 @@ import com.google.api.services.bigquery.model.JobConfiguration;
import com.google.api.services.bigquery.model.JobConfigurationLoad;
import com.google.api.services.bigquery.model.JobReference;
import com.google.api.services.bigquery.model.TableReference;
import com.google.appengine.api.taskqueue.TaskHandle;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
import com.google.cloud.tasks.v2.Task;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.flogger.FluentLogger;
import com.google.common.net.HttpHeaders;
import com.google.common.net.MediaType;
import com.google.protobuf.ByteString;
import com.google.protobuf.util.Timestamps;
import google.registry.bigquery.BigqueryUtils.SourceFormat;
import google.registry.bigquery.BigqueryUtils.WriteDisposition;
import google.registry.bigquery.CheckedBigquery;
import google.registry.config.RegistryConfig.Config;
import google.registry.export.BigqueryPollJobAction.BigqueryPollJobEnqueuer;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.request.Action;
import google.registry.request.Action.Service;
import google.registry.request.HttpException.BadRequestException;
import google.registry.request.HttpException.InternalServerErrorException;
import google.registry.request.Parameter;
import google.registry.request.auth.Auth;
import google.registry.util.Clock;
import google.registry.util.CloudTasksUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import javax.inject.Inject;
/** Action to load a Datastore backup from Google Cloud Storage into BigQuery. */
@@ -75,7 +79,9 @@ public class UploadDatastoreBackupAction implements Runnable {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@Inject CheckedBigquery checkedBigquery;
@Inject BigqueryPollJobEnqueuer bigqueryPollEnqueuer;
@Inject CloudTasksUtils cloudTasksUtils;
@Inject Clock clock;
@Inject @Config("projectId") String projectId;
@Inject
@@ -93,18 +99,6 @@ public class UploadDatastoreBackupAction implements Runnable {
@Inject
UploadDatastoreBackupAction() {}
/** Enqueue a task for starting a backup load. */
public static TaskHandle enqueueUploadBackupTask(
String backupId, String gcsFile, ImmutableSet<String> kinds) {
return getQueue(QUEUE)
.add(
TaskOptions.Builder.withUrl(PATH)
.method(Method.POST)
.param(UPLOAD_BACKUP_ID_PARAM, backupId)
.param(UPLOAD_BACKUP_FOLDER_PARAM, gcsFile)
.param(UPLOAD_BACKUP_KINDS_PARAM, Joiner.on(',').join(kinds)));
}
@Override
public void run() {
try {
@@ -142,12 +136,46 @@ public class UploadDatastoreBackupAction implements Runnable {
Job job = makeLoadJob(jobRef, sourceUri, tableId);
bigquery.jobs().insert(projectId, job).execute();
// Enqueue a task to check on the load job's completion, and if it succeeds, to update a
// well-known view in BigQuery to point at the newly loaded backup table for this kind.
bigqueryPollEnqueuer.enqueuePollTask(
jobRef,
createViewUpdateTask(BACKUP_DATASET, tableId, kindName, LATEST_BACKUP_VIEW_NAME),
getQueue(UpdateSnapshotViewAction.QUEUE));
// Serialize the chainedTask into a byte array to put in the task payload.
ByteArrayOutputStream taskBytes = new ByteArrayOutputStream();
new ObjectOutputStream(taskBytes)
.writeObject(
cloudTasksUtils.createPostTask(
UpdateSnapshotViewAction.PATH,
Service.BACKEND.toString(),
ImmutableMultimap.of(
UpdateSnapshotViewAction.UPDATE_SNAPSHOT_DATASET_ID_PARAM,
BACKUP_DATASET,
UpdateSnapshotViewAction.UPDATE_SNAPSHOT_TABLE_ID_PARAM,
tableId,
UpdateSnapshotViewAction.UPDATE_SNAPSHOT_KIND_PARAM,
kindName,
UpdateSnapshotViewAction.UPDATE_SNAPSHOT_VIEWNAME_PARAM,
LATEST_BACKUP_VIEW_NAME)));
// Enqueues a task to poll for the success or failure of the referenced BigQuery job and to
// launch the provided task in the specified queue if the job succeeds.
cloudTasksUtils.enqueue(
BigqueryPollJobAction.QUEUE,
Task.newBuilder()
.setAppEngineHttpRequest(
cloudTasksUtils
.createPostTask(BigqueryPollJobAction.PATH, Service.BACKEND.toString(), null)
.getAppEngineHttpRequest()
.toBuilder()
.putHeaders(BigqueryPollJobAction.PROJECT_ID_HEADER, jobRef.getProjectId())
.putHeaders(BigqueryPollJobAction.JOB_ID_HEADER, jobRef.getJobId())
.putHeaders(
BigqueryPollJobAction.CHAINED_TASK_QUEUE_HEADER,
UpdateSnapshotViewAction.QUEUE)
// need to include CONTENT_TYPE in header when body is not empty
.putHeaders(HttpHeaders.CONTENT_TYPE, MediaType.FORM_DATA.toString())
.setBody(ByteString.copyFrom(taskBytes.toByteArray()))
.build())
.setScheduleTime(
Timestamps.fromMillis(
clock.nowUtc().plus(BigqueryPollJobAction.POLL_COUNTDOWN).getMillis()))
.build());
builder.append(String.format(" - %s:%s\n", projectId, jobId));
logger.atInfo().log("Submitted load job %s:%s.", projectId, jobId);

View File

@@ -14,8 +14,6 @@
package google.registry.export.sheet;
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
import static com.google.appengine.api.taskqueue.TaskOptions.Builder.withUrl;
import static com.google.common.net.MediaType.PLAIN_TEXT_UTF_8;
import static google.registry.request.Action.Method.POST;
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
@@ -23,7 +21,6 @@ import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
import com.google.common.flogger.FluentLogger;
import google.registry.config.RegistryConfig.Config;
import google.registry.request.Action;
@@ -100,7 +97,7 @@ public class SyncRegistrarsSheetAction implements Runnable {
}
public static final String PATH = "/_dr/task/syncRegistrarsSheet";
private static final String QUEUE = "sheet";
public static final String QUEUE = "sheet";
private static final String LOCK_NAME = "Synchronize registrars sheet";
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@@ -144,11 +141,4 @@ public class SyncRegistrarsSheetAction implements Runnable {
Result.LOCKED.send(response, null);
}
}
/**
* Enqueues a sync registrar sheet task targeting the App Engine service specified by hostname.
*/
public static void enqueueRegistrarSheetSync(String hostname) {
getQueue(QUEUE).add(withUrl(PATH).method(Method.GET).header("Host", hostname));
}
}

View File

@@ -107,7 +107,7 @@ public class CertificateChecker {
// https://stackoverflow.com/questions/49895713/how-to-find-the-matching-curve-name-from-an-ecpublickey.
if (key instanceof ECPublicKey) {
ECPublicKey ecKey = (ECPublicKey) key;
params = EC5Util.convertSpec(ecKey.getParams(), false);
params = EC5Util.convertSpec(ecKey.getParams());
} else if (key instanceof org.bouncycastle.jce.interfaces.ECPublicKey) {
org.bouncycastle.jce.interfaces.ECPublicKey ecKey =
(org.bouncycastle.jce.interfaces.ECPublicKey) key;

View File

@@ -169,6 +169,7 @@ import org.joda.time.Duration;
* @error {@link DomainFlowUtils.FeesMismatchException}
* @error {@link DomainFlowUtils.FeesRequiredDuringEarlyAccessProgramException}
* @error {@link DomainFlowUtils.FeesRequiredForPremiumNameException}
* @error {@link DomainFlowUtils.InvalidDsRecordException}
* @error {@link DomainFlowUtils.InvalidIdnDomainLabelException}
* @error {@link DomainFlowUtils.InvalidPunycodeException}
* @error {@link DomainFlowUtils.InvalidTcnIdChecksumException}

View File

@@ -129,6 +129,7 @@ import google.registry.model.tld.label.ReservedList;
import google.registry.model.tmch.ClaimsListDao;
import google.registry.persistence.VKey;
import google.registry.tldconfig.idn.IdnLabelValidator;
import google.registry.tools.DigestType;
import google.registry.util.Idn;
import java.math.BigDecimal;
import java.util.Collection;
@@ -144,6 +145,7 @@ import org.joda.money.CurrencyUnit;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.xbill.DNS.DNSSEC.Algorithm;
/** Static utility functions for domain flows. */
public class DomainFlowUtils {
@@ -293,13 +295,59 @@ public class DomainFlowUtils {
/** Check that the DS data that will be set on a domain is valid. */
static void validateDsData(Set<DelegationSignerData> dsData) throws EppException {
if (dsData != null && dsData.size() > MAX_DS_RECORDS_PER_DOMAIN) {
throw new TooManyDsRecordsException(
String.format(
"A maximum of %s DS records are allowed per domain.", MAX_DS_RECORDS_PER_DOMAIN));
if (dsData != null) {
if (dsData.size() > MAX_DS_RECORDS_PER_DOMAIN) {
throw new TooManyDsRecordsException(
String.format(
"A maximum of %s DS records are allowed per domain.", MAX_DS_RECORDS_PER_DOMAIN));
}
ImmutableList<DelegationSignerData> invalidAlgorithms =
dsData.stream()
.filter(ds -> !validateAlgorithm(ds.getAlgorithm()))
.collect(toImmutableList());
if (!invalidAlgorithms.isEmpty()) {
throw new InvalidDsRecordException(
String.format(
"Domain contains DS record(s) with an invalid algorithm wire value: %s",
invalidAlgorithms));
}
ImmutableList<DelegationSignerData> invalidDigestTypes =
dsData.stream()
.filter(ds -> !DigestType.fromWireValue(ds.getDigestType()).isPresent())
.collect(toImmutableList());
if (!invalidDigestTypes.isEmpty()) {
throw new InvalidDsRecordException(
String.format(
"Domain contains DS record(s) with an invalid digest type: %s",
invalidDigestTypes));
}
ImmutableList<DelegationSignerData> digestsWithInvalidDigestLength =
dsData.stream()
.filter(
ds ->
DigestType.fromWireValue(ds.getDigestType()).isPresent()
&& (ds.getDigest().length
!= DigestType.fromWireValue(ds.getDigestType()).get().getBytes()))
.collect(toImmutableList());
if (!digestsWithInvalidDigestLength.isEmpty()) {
throw new InvalidDsRecordException(
String.format(
"Domain contains DS record(s) with an invalid digest length: %s",
digestsWithInvalidDigestLength));
}
}
}
public static boolean validateAlgorithm(int alg) {
if (alg > 255 || alg < 0) {
return false;
}
// Algorithms that are reserved or unassigned will just return a string representation of their
// integer wire value.
String algorithm = Algorithm.string(alg);
return !algorithm.equals(Integer.toString(alg));
}
/** We only allow specifying years in a period. */
static Period verifyUnitIsYears(Period period) throws EppException {
if (!checkNotNull(period).getUnit().equals(Period.Unit.YEARS)) {
@@ -1077,7 +1125,16 @@ public class DomainFlowUtils {
// Only cancel fields which are cancelable
if (cancelableFields.contains(record.getReportField())) {
int cancelledAmount = -1 * record.getReportAmount();
recordsBuilder.add(record.asBuilder().setReportAmount(cancelledAmount).build());
// NB: It's necessary to create a new DomainTransactionRecord from scratch so that we
// don't retain the ID of the previous record to cancel. If we keep the ID, Hibernate
// will remove that record from the DB entirely as the record will be re-parented on
// this DomainHistory being created now.
recordsBuilder.add(
DomainTransactionRecord.create(
record.getTld(),
record.getReportingTime(),
record.getReportField(),
cancelledAmount));
}
}
}
@@ -1217,6 +1274,13 @@ public class DomainFlowUtils {
}
}
/** Domain has an invalid DS record. */
static class InvalidDsRecordException extends ParameterValuePolicyErrorException {
public InvalidDsRecordException(String message) {
super(message);
}
}
/** Domain name is under tld which doesn't exist. */
static class TldDoesNotExistException extends ParameterValueRangeErrorException {
public TldDoesNotExistException(String tld) {

View File

@@ -114,6 +114,7 @@ import org.joda.time.DateTime;
* @error {@link DomainFlowUtils.EmptySecDnsUpdateException}
* @error {@link DomainFlowUtils.FeesMismatchException}
* @error {@link DomainFlowUtils.FeesRequiredForNonFreeOperationException}
* @error {@link DomainFlowUtils.InvalidDsRecordException}
* @error {@link DomainFlowUtils.LinkedResourcesDoNotExistException}
* @error {@link DomainFlowUtils.LinkedResourceInPendingDeleteProhibitsOperationException}
* @error {@link DomainFlowUtils.MaxSigLifeChangeNotSupportedException}

View File

@@ -14,8 +14,6 @@
package google.registry.loadtest;
import static com.google.appengine.api.taskqueue.QueueConstants.maxTasksPerAdd;
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static com.google.common.collect.Lists.partition;
@@ -24,16 +22,20 @@ import static google.registry.util.ResourceUtils.readResourceUtf8;
import static java.util.Arrays.asList;
import static org.joda.time.DateTimeZone.UTC;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.cloud.tasks.v2.Task;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Iterators;
import com.google.common.flogger.FluentLogger;
import com.google.protobuf.Timestamp;
import google.registry.config.RegistryEnvironment;
import google.registry.request.Action;
import google.registry.request.Action.Service;
import google.registry.request.Parameter;
import google.registry.request.auth.Auth;
import google.registry.security.XsrfTokenManager;
import google.registry.util.TaskQueueUtils;
import google.registry.util.CloudTasksUtils;
import java.time.Instant;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
@@ -62,6 +64,7 @@ public class LoadTestAction implements Runnable {
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private static final int NUM_QUEUES = 10;
private static final int MAX_TASKS_PER_LOAD = 100;
private static final int ARBITRARY_VALID_HOST_LENGTH = 40;
private static final int MAX_CONTACT_LENGTH = 13;
private static final int MAX_DOMAIN_LABEL_LENGTH = 63;
@@ -146,7 +149,7 @@ public class LoadTestAction implements Runnable {
@Parameter("hostInfos")
int hostInfosPerSecond;
@Inject TaskQueueUtils taskQueueUtils;
@Inject CloudTasksUtils cloudTasksUtils;
private final String xmlContactCreateTmpl;
private final String xmlContactCreateFail;
@@ -208,7 +211,7 @@ public class LoadTestAction implements Runnable {
ImmutableList<String> contactNames = contactNamesBuilder.build();
ImmutableList<String> hostPrefixes = hostPrefixesBuilder.build();
ImmutableList.Builder<TaskOptions> tasks = new ImmutableList.Builder<>();
ImmutableList.Builder<Task> tasks = new ImmutableList.Builder<>();
for (int offsetSeconds = 0; offsetSeconds < runSeconds; offsetSeconds++) {
DateTime startSecond = initialStartSecond.plusSeconds(offsetSeconds);
// The first "failed" creates might actually succeed if the object doesn't already exist, but
@@ -254,7 +257,7 @@ public class LoadTestAction implements Runnable {
.collect(toImmutableList()),
startSecond));
}
ImmutableList<TaskOptions> taskOptions = tasks.build();
ImmutableList<Task> taskOptions = tasks.build();
enqueue(taskOptions);
logger.atInfo().log("Added %d total load test tasks.", taskOptions.size());
}
@@ -322,28 +325,51 @@ public class LoadTestAction implements Runnable {
return name.toString();
}
private List<TaskOptions> createTasks(List<String> xmls, DateTime start) {
ImmutableList.Builder<TaskOptions> tasks = new ImmutableList.Builder<>();
private List<Task> createTasks(List<String> xmls, DateTime start) {
ImmutableList.Builder<Task> tasks = new ImmutableList.Builder<>();
for (int i = 0; i < xmls.size(); i++) {
// Space tasks evenly within across a second.
int offsetMillis = (int) (1000.0 / xmls.size() * i);
Instant scheduleTime =
Instant.ofEpochMilli(start.plusMillis((int) (1000.0 / xmls.size() * i)).getMillis());
tasks.add(
TaskOptions.Builder.withUrl("/_dr/epptool")
.etaMillis(start.getMillis() + offsetMillis)
.header(X_CSRF_TOKEN, xsrfToken)
.param("clientId", registrarId)
.param("superuser", Boolean.FALSE.toString())
.param("dryRun", Boolean.FALSE.toString())
.param("xml", xmls.get(i)));
Task.newBuilder()
.setAppEngineHttpRequest(
cloudTasksUtils
.createPostTask(
"/_dr/epptool",
Service.TOOLS.toString(),
ImmutableMultimap.of(
"clientId",
registrarId,
"superuser",
Boolean.FALSE.toString(),
"dryRun",
Boolean.FALSE.toString(),
"xml",
xmls.get(i)))
.toBuilder()
.getAppEngineHttpRequest()
.toBuilder()
// instead of adding the X_CSRF_TOKEN to params, this remains as part of
// headers because of the existing setup for authentication in {@link
// google.registry.request.auth.LegacyAuthenticationMechanism}
.putHeaders(X_CSRF_TOKEN, xsrfToken)
.build())
.setScheduleTime(
Timestamp.newBuilder()
.setSeconds(scheduleTime.getEpochSecond())
.setNanos(scheduleTime.getNano())
.build())
.build());
}
return tasks.build();
}
private void enqueue(List<TaskOptions> tasks) {
List<List<TaskOptions>> chunks = partition(tasks, maxTasksPerAdd());
private void enqueue(List<Task> tasks) {
List<List<Task>> chunks = partition(tasks, MAX_TASKS_PER_LOAD);
// Farm out tasks to multiple queues to work around queue qps quotas.
for (int i = 0; i < chunks.size(); i++) {
taskQueueUtils.enqueue(getQueue("load" + (i % NUM_QUEUES)), chunks.get(i));
cloudTasksUtils.enqueue("load" + (i % NUM_QUEUES), chunks.get(i));
}
}
}

View File

@@ -60,4 +60,25 @@ public abstract class BackupGroupRoot extends ImmutableObject implements UnsafeS
protected void copyUpdateTimestamp(BackupGroupRoot other) {
this.updateTimestamp = PreconditionsUtils.checkArgumentNotNull(other, "other").updateTimestamp;
}
/**
* Resets the {@link #updateTimestamp} to force Hibernate to persist it.
*
* <p>This method is for use in setters in derived builders that do not result in the derived
* object being persisted.
*/
protected void resetUpdateTimestamp() {
this.updateTimestamp = UpdateAutoTimestamp.create(null);
}
/**
* Sets the {@link #updateTimestamp}.
*
* <p>This method is for use in the few places where we need to restore the update timestamp after
* mutating a collection in order to force the new timestamp to be persisted when it ordinarily
* wouldn't.
*/
protected void setUpdateTimestamp(UpdateAutoTimestamp timestamp) {
updateTimestamp = timestamp;
}
}

View File

@@ -40,6 +40,7 @@ import google.registry.model.rde.RdeRevision;
import google.registry.model.registrar.Registrar;
import google.registry.model.registrar.RegistrarContact;
import google.registry.model.replay.LastSqlTransaction;
import google.registry.model.replay.ReplayGap;
import google.registry.model.reporting.HistoryEntry;
import google.registry.model.server.Lock;
import google.registry.model.server.ServerSecret;
@@ -86,6 +87,7 @@ public final class EntityClasses {
Registrar.class,
RegistrarContact.class,
Registry.class,
ReplayGap.class,
ServerSecret.class);
private EntityClasses() {}

View File

@@ -21,6 +21,7 @@ import static com.google.common.collect.Sets.union;
import static google.registry.config.RegistryConfig.getEppResourceCachingDuration;
import static google.registry.config.RegistryConfig.getEppResourceMaxCachedEntries;
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.replicaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.util.CollectionUtils.nullToEmpty;
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
@@ -361,6 +362,16 @@ public abstract class EppResource extends BackupGroupRoot implements Buildable {
return thisCastToDerived();
}
/**
* Set the update timestamp.
*
* <p>This is provided at EppResource since BackupGroupRoot doesn't have a Builder.
*/
public B setUpdateTimestamp(UpdateAutoTimestamp updateTimestamp) {
getInstance().setUpdateTimestamp(updateTimestamp);
return thisCastToDerived();
}
/** Build the resource, nullifying empty strings and sets and setting defaults. */
@Override
public T build() {
@@ -380,13 +391,13 @@ public abstract class EppResource extends BackupGroupRoot implements Buildable {
@Override
public EppResource load(VKey<? extends EppResource> key) {
return tm().doTransactionless(() -> tm().loadByKey(key));
return replicaTm().doTransactionless(() -> replicaTm().loadByKey(key));
}
@Override
public Map<VKey<? extends EppResource>, EppResource> loadAll(
Iterable<? extends VKey<? extends EppResource>> keys) {
return tm().doTransactionless(() -> tm().loadByKeys(keys));
return replicaTm().doTransactionless(() -> replicaTm().loadByKeys(keys));
}
};

View File

@@ -308,7 +308,9 @@ public abstract class BillingEvent extends ImmutableObject
@javax.persistence.Index(columnList = "eventTime"),
@javax.persistence.Index(columnList = "billingTime"),
@javax.persistence.Index(columnList = "syntheticCreationTime"),
@javax.persistence.Index(columnList = "allocationToken")
@javax.persistence.Index(columnList = "domainRepoId"),
@javax.persistence.Index(columnList = "allocationToken"),
@javax.persistence.Index(columnList = "cancellation_matching_billing_recurrence_id")
})
@AttributeOverride(name = "id", column = @Column(name = "billing_event_id"))
@WithLongVKey(compositeKey = true)
@@ -518,6 +520,7 @@ public abstract class BillingEvent extends ImmutableObject
indexes = {
@javax.persistence.Index(columnList = "registrarId"),
@javax.persistence.Index(columnList = "eventTime"),
@javax.persistence.Index(columnList = "domainRepoId"),
@javax.persistence.Index(columnList = "recurrenceEndTime"),
@javax.persistence.Index(columnList = "recurrence_time_of_year")
})
@@ -614,7 +617,10 @@ public abstract class BillingEvent extends ImmutableObject
indexes = {
@javax.persistence.Index(columnList = "registrarId"),
@javax.persistence.Index(columnList = "eventTime"),
@javax.persistence.Index(columnList = "billingTime")
@javax.persistence.Index(columnList = "domainRepoId"),
@javax.persistence.Index(columnList = "billingTime"),
@javax.persistence.Index(columnList = "billing_event_id"),
@javax.persistence.Index(columnList = "billing_recurrence_id")
})
@AttributeOverride(name = "id", column = @Column(name = "billing_cancellation_id"))
@WithLongVKey(compositeKey = true)

View File

@@ -74,6 +74,8 @@ public class BulkQueryEntities {
builder.setGracePeriods(gracePeriods);
builder.setDsData(delegationSignerData);
builder.setNameservers(nsHosts);
// Restore the original update timestamp (this gets cleared when we set nameservers or DS data).
builder.setUpdateTimestamp(domainBaseLite.getUpdateTimestamp());
return builder.build();
}
@@ -100,6 +102,9 @@ public class BulkQueryEntities {
dsDataHistories.stream()
.map(DelegationSignerData::create)
.collect(toImmutableSet()))
// Restore the original update timestamp (this gets cleared when we set nameservers or
// DS data).
.setUpdateTimestamp(domainHistoryLite.domainContent.getUpdateTimestamp())
.build();
builder.setDomain(newDomainContent);
}

View File

@@ -64,7 +64,7 @@ public class ContactHistory extends HistoryEntry implements SqlEntity, UnsafeSer
// Store ContactBase instead of ContactResource so we don't pick up its @Id
// Nullable for the sake of pre-Registry-3.0 history objects
@Nullable ContactBase contactBase;
@DoNotCompare @Nullable ContactBase contactBase;
@Id
@Access(AccessType.PROPERTY)

View File

@@ -69,7 +69,10 @@ import org.joda.time.DateTime;
@Index(columnList = "techContact"),
@Index(columnList = "tld"),
@Index(columnList = "registrantContact"),
@Index(columnList = "dnsRefreshRequestTime")
@Index(columnList = "dnsRefreshRequestTime"),
@Index(columnList = "billing_recurrence_id"),
@Index(columnList = "transfer_billing_event_id"),
@Index(columnList = "transfer_billing_recurrence_id")
})
@WithStringVKey
@ExternalMessagingName("domain")
@@ -89,7 +92,10 @@ public class DomainBase extends DomainContent
@ElementCollection
@JoinTable(
name = "DomainHost",
indexes = {@Index(columnList = "domain_repo_id,host_repo_id", unique = true)})
indexes = {
@Index(columnList = "domain_repo_id,host_repo_id", unique = true),
@Index(columnList = "host_repo_id")
})
@Access(AccessType.PROPERTY)
@Column(name = "host_repo_id")
public Set<VKey<HostResource>> getNsHosts() {

View File

@@ -779,6 +779,10 @@ public class DomainContent extends EppResource
*/
void setContactFields(Set<DesignatedContact> contacts, boolean includeRegistrant) {
// Set the individual contact fields.
billingContact = techContact = adminContact = null;
if (includeRegistrant) {
registrantContact = null;
}
for (DesignatedContact contact : contacts) {
switch (contact.getType()) {
case BILLING:
@@ -895,6 +899,7 @@ public class DomainContent extends EppResource
public B setDsData(ImmutableSet<DelegationSignerData> dsData) {
getInstance().dsData = dsData;
getInstance().resetUpdateTimestamp();
return thisCastToDerived();
}
@@ -918,11 +923,13 @@ public class DomainContent extends EppResource
public B setNameservers(VKey<HostResource> nameserver) {
getInstance().nsHosts = ImmutableSet.of(nameserver);
getInstance().resetUpdateTimestamp();
return thisCastToDerived();
}
public B setNameservers(ImmutableSet<VKey<HostResource>> nameservers) {
getInstance().nsHosts = forceEmptyToNull(nameservers);
getInstance().resetUpdateTimestamp();
return thisCastToDerived();
}
@@ -1032,17 +1039,20 @@ public class DomainContent extends EppResource
public B setGracePeriods(ImmutableSet<GracePeriod> gracePeriods) {
getInstance().gracePeriods = gracePeriods;
getInstance().resetUpdateTimestamp();
return thisCastToDerived();
}
public B addGracePeriod(GracePeriod gracePeriod) {
getInstance().gracePeriods = union(getInstance().getGracePeriods(), gracePeriod);
getInstance().resetUpdateTimestamp();
return thisCastToDerived();
}
public B removeGracePeriod(GracePeriod gracePeriod) {
getInstance().gracePeriods =
CollectionUtils.difference(getInstance().getGracePeriods(), gracePeriod);
getInstance().resetUpdateTimestamp();
return thisCastToDerived();
}

View File

@@ -86,7 +86,7 @@ public class DomainHistory extends HistoryEntry implements SqlEntity {
// Store DomainContent instead of DomainBase so we don't pick up its @Id
// Nullable for the sake of pre-Registry-3.0 history objects
@Nullable DomainContent domainContent;
@DoNotCompare @Nullable DomainContent domainContent;
@Id
@Access(AccessType.PROPERTY)
@@ -105,6 +105,7 @@ public class DomainHistory extends HistoryEntry implements SqlEntity {
// We could have reused domainContent.nsHosts here, but Hibernate throws a weird exception after
// we change to use a composite primary key.
// TODO(b/166776754): Investigate if we can reuse domainContent.nsHosts for storing host keys.
@DoNotCompare
@ElementCollection
@JoinTable(
name = "DomainHistoryHost",
@@ -118,6 +119,7 @@ public class DomainHistory extends HistoryEntry implements SqlEntity {
@Column(name = "host_repo_id")
Set<VKey<HostResource>> nsHosts;
@DoNotCompare
@OneToMany(
cascade = {CascadeType.ALL},
fetch = FetchType.EAGER,
@@ -137,6 +139,7 @@ public class DomainHistory extends HistoryEntry implements SqlEntity {
// HashSet rather than ImmutableSet so that Hibernate can fill them out lazily on request
Set<DomainDsDataHistory> dsDataHistories = new HashSet<>();
@DoNotCompare
@OneToMany(
cascade = {CascadeType.ALL},
fetch = FetchType.EAGER,

View File

@@ -46,7 +46,12 @@ import org.joda.time.DateTime;
*/
@Embed
@Entity
@Table(indexes = @Index(columnList = "domainRepoId"))
@Table(
indexes = {
@Index(columnList = "domainRepoId"),
@Index(columnList = "billing_event_id"),
@Index(columnList = "billing_recurrence_id")
})
public class GracePeriod extends GracePeriodBase implements DatastoreAndSqlEntity {
@Id
@@ -189,18 +194,6 @@ public class GracePeriod extends GracePeriodBase implements DatastoreAndSqlEntit
return clone;
}
/**
* Returns a clone of this {@link GracePeriod} with {@link #billingEventRecurring} set to the
* given value.
*
* <p>TODO(b/162231099): Remove this function after duplicate id issue is solved.
*/
public GracePeriod cloneWithRecurringBillingEvent(VKey<BillingEvent.Recurring> recurring) {
GracePeriod clone = clone(this);
clone.billingEventRecurring = BillingRecurrenceVKey.create(recurring);
return clone;
}
/** Entity class to represent a historic {@link GracePeriod}. */
@Entity(name = "GracePeriodHistory")
@Table(indexes = @Index(columnList = "domainRepoId"))

View File

@@ -76,6 +76,8 @@ import org.joda.time.DateTime;
@javax.persistence.Index(
columnList = "domainName",
name = "allocation_token_domain_name_idx"),
@javax.persistence.Index(columnList = "tokenType"),
@javax.persistence.Index(columnList = "redemption_domain_repo_id")
})
public class AllocationToken extends BackupGroupRoot implements Buildable, DatastoreAndSqlEntity {

View File

@@ -66,7 +66,7 @@ public class HostHistory extends HistoryEntry implements SqlEntity, UnsafeSerial
// Store HostBase instead of HostResource so we don't pick up its @Id
// Nullable for the sake of pre-Registry-3.0 history objects
@Nullable HostBase hostBase;
@DoNotCompare @Nullable HostBase hostBase;
@Id
@Access(AccessType.PROPERTY)

View File

@@ -34,6 +34,25 @@ import javax.persistence.AccessType;
@ReportedOn
@Entity
@javax.persistence.Entity(name = "Host")
@javax.persistence.Table(
name = "Host",
/**
* A gin index defined on the inet_addresses field ({@link HostBase#inetAddresses} cannot be
* declared here because JPA/Hibernate does not support index type specification. As a result,
* the hibernate-generated schema (which is for reference only) does not have this index.
*
* <p>There are Hibernate-specific solutions for adding this index to Hibernate's domain model.
* We could either declare the index in hibernate.cfg.xml or add it to the {@link
* org.hibernate.cfg.Configuration} instance for {@link SessionFactory} instantiation (which
* would prevent us from using JPA standard bootstrapping). For now, there is no obvious benefit
* doing either.
*/
indexes = {
@javax.persistence.Index(columnList = "hostName"),
@javax.persistence.Index(columnList = "creationTime"),
@javax.persistence.Index(columnList = "deletionTime"),
@javax.persistence.Index(columnList = "currentSponsorRegistrarId")
})
@ExternalMessagingName("host")
@WithStringVKey
@Access(AccessType.FIELD) // otherwise it'll use the default if the repoId (property)

View File

@@ -21,6 +21,7 @@ import static google.registry.config.RegistryConfig.getEppResourceCachingDuratio
import static google.registry.config.RegistryConfig.getEppResourceMaxCachedEntries;
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.replicaJpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.util.CollectionUtils.entriesToImmutableMap;
import static google.registry.util.TypeUtils.instantiate;
@@ -51,6 +52,7 @@ import google.registry.model.host.HostResource;
import google.registry.model.replay.DatastoreOnlyEntity;
import google.registry.persistence.VKey;
import google.registry.persistence.transaction.CriteriaQueryBuilder;
import google.registry.persistence.transaction.JpaTransactionManager;
import google.registry.util.NonFinalForTesting;
import java.util.Collection;
import java.util.Comparator;
@@ -198,7 +200,7 @@ public abstract class ForeignKeyIndex<E extends EppResource> extends BackupGroup
*/
public static <E extends EppResource> ImmutableMap<String, ForeignKeyIndex<E>> load(
Class<E> clazz, Collection<String> foreignKeys, final DateTime now) {
return loadIndexesFromStore(clazz, foreignKeys, true).entrySet().stream()
return loadIndexesFromStore(clazz, foreignKeys, true, false).entrySet().stream()
.filter(e -> now.isBefore(e.getValue().getDeletionTime()))
.collect(entriesToImmutableMap());
}
@@ -217,7 +219,10 @@ public abstract class ForeignKeyIndex<E extends EppResource> extends BackupGroup
*/
private static <E extends EppResource>
ImmutableMap<String, ForeignKeyIndex<E>> loadIndexesFromStore(
Class<E> clazz, Collection<String> foreignKeys, boolean inTransaction) {
Class<E> clazz,
Collection<String> foreignKeys,
boolean inTransaction,
boolean useReplicaJpaTm) {
if (tm().isOfy()) {
Class<ForeignKeyIndex<E>> fkiClass = mapToFkiClass(clazz);
return ImmutableMap.copyOf(
@@ -226,17 +231,18 @@ public abstract class ForeignKeyIndex<E extends EppResource> extends BackupGroup
: tm().doTransactionless(() -> auditedOfy().load().type(fkiClass).ids(foreignKeys)));
} else {
String property = RESOURCE_CLASS_TO_FKI_PROPERTY.get(clazz);
JpaTransactionManager jpaTmToUse = useReplicaJpaTm ? replicaJpaTm() : jpaTm();
ImmutableList<ForeignKeyIndex<E>> indexes =
tm().transact(
() ->
jpaTm()
.criteriaQuery(
CriteriaQueryBuilder.create(clazz)
.whereFieldIsIn(property, foreignKeys)
.build())
.getResultStream()
.map(e -> ForeignKeyIndex.create(e, e.getDeletionTime()))
.collect(toImmutableList()));
jpaTmToUse.transact(
() ->
jpaTmToUse
.criteriaQuery(
CriteriaQueryBuilder.create(clazz)
.whereFieldIsIn(property, foreignKeys)
.build())
.getResultStream()
.map(e -> ForeignKeyIndex.create(e, e.getDeletionTime()))
.collect(toImmutableList()));
// We need to find and return the entities with the maximum deletionTime for each foreign key.
return Multimaps.index(indexes, ForeignKeyIndex::getForeignKey).asMap().entrySet().stream()
.map(
@@ -260,7 +266,8 @@ public abstract class ForeignKeyIndex<E extends EppResource> extends BackupGroup
loadIndexesFromStore(
RESOURCE_CLASS_TO_FKI_CLASS.inverse().get(key.getKind()),
ImmutableSet.of(foreignKey),
false)
false,
true)
.get(foreignKey));
}
@@ -276,7 +283,7 @@ public abstract class ForeignKeyIndex<E extends EppResource> extends BackupGroup
Streams.stream(keys).map(v -> v.getSqlKey().toString()).collect(toImmutableSet());
ImmutableSet<VKey<ForeignKeyIndex<?>>> typedKeys = ImmutableSet.copyOf(keys);
ImmutableMap<String, ? extends ForeignKeyIndex<? extends EppResource>> existingFkis =
loadIndexesFromStore(resourceClass, foreignKeys, false);
loadIndexesFromStore(resourceClass, foreignKeys, false, true);
// ofy omits keys that don't have values in Datastore, so re-add them in
// here with Optional.empty() values.
return Maps.asMap(
@@ -336,7 +343,7 @@ public abstract class ForeignKeyIndex<E extends EppResource> extends BackupGroup
// Safe to cast VKey<FKI<E>> to VKey<FKI<?>>
@SuppressWarnings("unchecked")
ImmutableList<VKey<ForeignKeyIndex<?>>> fkiVKeys =
Streams.stream(foreignKeys)
foreignKeys.stream()
.map(fk -> (VKey<ForeignKeyIndex<?>>) VKey.create(fkiClass, fk))
.collect(toImmutableList());
try {

View File

@@ -41,7 +41,7 @@ import org.joda.time.DateTime;
/** Wrapper for {@link Supplier} that associates a time with each attempt. */
@DeleteAfterMigration
class CommitLoggedWork<R> implements Runnable {
public class CommitLoggedWork<R> implements Runnable {
private final Supplier<R> work;
private final Clock clock;

View File

@@ -46,6 +46,7 @@ import static google.registry.util.X509Utils.loadCertificate;
import static java.util.Comparator.comparing;
import static java.util.function.Predicate.isEqual;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
@@ -991,6 +992,16 @@ public class Registrar extends ImmutableObject
return this;
}
/**
* This lets tests set the update timestamp in cases where setting fields resets the timestamp
* and breaks the verification that an object has not been updated since it was copied.
*/
@VisibleForTesting
public Builder setLastUpdateTime(DateTime timestamp) {
getInstance().lastUpdateTime = UpdateAutoTimestamp.create(timestamp);
return this;
}
/** Build the registrar, nullifying empty fields. */
@Override
public Registrar build() {

View File

@@ -0,0 +1,60 @@
// Copyright 2022 The Nomulus Authors. All Rights Reserved.
//
// Licensed 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.
package google.registry.model.replay;
import static google.registry.model.annotations.NotBackedUp.Reason.TRANSIENT;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import google.registry.model.ImmutableObject;
import google.registry.model.annotations.DeleteAfterMigration;
import google.registry.model.annotations.NotBackedUp;
import org.joda.time.DateTime;
/**
* Tracks gaps in transaction ids when replicating from SQL to datastore.
*
* <p>SQL -&gt; DS replication uses a Transaction table indexed by a SEQUENCE column, which normally
* increments monotonically for each committed transaction. Gaps in this sequence can occur when a
* transaction is rolled back or when a transaction has been initiated but not committed to the
* table at the time of a query. To protect us from the latter scenario, we need to keep track of
* these gaps and replay any of them that have been filled in since we processed their batch.
*/
@DeleteAfterMigration
@NotBackedUp(reason = TRANSIENT)
@Entity
public class ReplayGap extends ImmutableObject implements DatastoreOnlyEntity {
@Id long transactionId;
// We can't use a CreateAutoTimestamp here because this ends up getting persisted in an ofy
// transaction that happens in JPA mode, so we don't end up getting an active transaction manager
// when the timestamp needs to be set.
DateTime timestamp;
ReplayGap() {}
ReplayGap(DateTime timestamp, long transactionId) {
this.timestamp = timestamp;
this.transactionId = transactionId;
}
long getTransactionId() {
return transactionId;
}
DateTime getTimestamp() {
return timestamp;
}
}

View File

@@ -14,6 +14,8 @@
package google.registry.model.replay;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
@@ -40,6 +42,7 @@ import google.registry.request.auth.Auth;
import google.registry.util.Clock;
import google.registry.util.RequestStatusChecker;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.inject.Inject;
@@ -59,6 +62,10 @@ public class ReplicateToDatastoreAction implements Runnable {
public static final String PATH = "/_dr/cron/replicateToDatastore";
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
/** Name of the lock that ensures sequential execution of replays. */
public static final String REPLICATE_TO_DATASTORE_LOCK_NAME =
ReplicateToDatastoreAction.class.getSimpleName();
/**
* Number of transactions to fetch from SQL. The rationale for 200 is that we're processing these
* every minute and our production instance currently does about 2 mutations per second, so this
@@ -66,7 +73,21 @@ public class ReplicateToDatastoreAction implements Runnable {
*/
public static final int BATCH_SIZE = 200;
private static final Duration LEASE_LENGTH = standardHours(1);
/**
* The longest time that we'll keep trying to resolve a gap in the Transaction table in
* milliseconds, after which, the gap record will be deleted.
*/
public static final long MAX_GAP_RETENTION_MILLIS = 300000;
/**
* The maximum number of entitities to be mutated per transaction. For our purposes, the entities
* that we're keeping track of are each in their own entity group. Per datastore documentation, we
* should be allowed to update up to 25 of them. In practice, we get an error if we go beyond 24
* (possibly due to something in our own infrastructure).
*/
private static final int MAX_ENTITIES_PER_TXN = 24;
public static final Duration REPLICATE_TO_DATASTORE_LOCK_LEASE_LENGTH = standardHours(1);
private final Clock clock;
private final RequestStatusChecker requestStatusChecker;
@@ -81,81 +102,212 @@ public class ReplicateToDatastoreAction implements Runnable {
}
@VisibleForTesting
public List<TransactionEntity> getTransactionBatch() {
public List<TransactionEntity> getTransactionBatchAtSnapshot() {
return getTransactionBatchAtSnapshot(Optional.empty());
}
/**
* Get the next batch of transactions, optionally from a specific SQL database snapshot.
*
* <p>Note that this method may also apply transactions from previous batches that had not yet
* been committed at the time the previous batch was retrieved.
*/
static List<TransactionEntity> getTransactionBatchAtSnapshot(Optional<String> snapshotId) {
// Get the next batch of transactions that we haven't replicated.
LastSqlTransaction lastSqlTxnBeforeBatch = ofyTm().transact(LastSqlTransaction::load);
try {
return jpaTm()
.transactWithoutBackup(
() ->
jpaTm()
.query(
"SELECT txn FROM TransactionEntity txn WHERE id >"
+ " :lastId ORDER BY id",
TransactionEntity.class)
.setParameter("lastId", lastSqlTxnBeforeBatch.getTransactionId())
.setMaxResults(BATCH_SIZE)
.getResultList());
() -> {
snapshotId.ifPresent(jpaTm()::setDatabaseSnapshot);
// Fill in any gaps in the transaction log that have since become available before
// processing the next batch.
applyMissingTransactions();
return jpaTm()
.query(
"SELECT txn FROM TransactionEntity txn WHERE id >" + " :lastId ORDER BY id",
TransactionEntity.class)
.setParameter("lastId", lastSqlTxnBeforeBatch.getTransactionId())
.setMaxResults(BATCH_SIZE)
.getResultList();
});
} catch (NoResultException e) {
return ImmutableList.of();
}
}
/**
* Apply a transaction to Datastore, returns true if there was a fatal error and the batch should
* be aborted.
* Iterate over the recent gaps in the Transaction table and apply any that have been filled in.
*
* <p>Throws an exception if a fatal error occurred and the batch should be aborted
* <p>Must be called from within a JPA transaction.
*
* <p>Gap rewriting is a complicated matter, and the algorithm is the product of some very deep
* consideration by mmuller and weiminyu. Basically, the constraints are:
*
* <ol>
* <li>Replay has to work against a database snapshot (gap replay would break this, so we don't
* call this method when replaying against a snapshot)
* </ol>
*/
private static void applyMissingTransactions() {
long now = jpaTm().getTransactionTime().getMillis();
ImmutableList<ReplayGap> gaps = ofyTm().loadAllOf(ReplayGap.class);
jpaTm()
.query("SELECT txn from TransactionEntity txn WHERE id IN :gapIds", TransactionEntity.class)
.setParameter(
"gapIds", gaps.stream().map(gap -> gap.getTransactionId()).collect(toImmutableList()))
.getResultStream()
.forEach(
txn -> {
// Transcribe the transaction and delete the gap record in the same ofy transaction.
ofyTm()
.transact(
() -> {
// Write the transaction to datastore.
try {
Transaction.deserialize(txn.getContents()).writeToDatastore();
} catch (IOException e) {
throw new RuntimeException("Error during transaction deserialization", e);
}
// Find and delete the gap record.
ImmutableList<ReplayGap> filledGaps =
gaps.stream()
.filter(gap -> gap.getTransactionId() == txn.getId())
.collect(toImmutableList());
checkState(
filledGaps.size() == 1,
"Bad list of gaps for discovered id: %s",
filledGaps);
auditedOfy().deleteIgnoringReadOnlyWithoutBackup().entity(gaps.get(0));
});
logger.atInfo().log("Applied missing transaction %s", txn.getId());
});
// Clean up any gaps that have expired (in batches because they're each in their own entity
// group).
ArrayList<ReplayGap> gapBatch = new ArrayList<>();
gaps.stream()
.forEach(
gap -> {
if (now - gap.getTimestamp().getMillis() > MAX_GAP_RETENTION_MILLIS) {
gapBatch.add(gap);
}
if (gapBatch.size() == MAX_ENTITIES_PER_TXN) {
deleteReplayGaps(gapBatch);
gapBatch.clear();
}
});
if (!gapBatch.isEmpty()) {
deleteReplayGaps(gapBatch);
}
}
private static void deleteReplayGaps(ArrayList<ReplayGap> gapsToDelete) {
logger.atInfo().log(
"deleting gap records for %s",
gapsToDelete.stream().map(g -> g.getTransactionId()).collect(toImmutableList()));
ofyTm()
.transact(() -> auditedOfy().deleteIgnoringReadOnlyWithoutBackup().entities(gapsToDelete));
}
/**
* Apply a transaction to Datastore.
*
* <p>Throws an exception if a fatal error occurred and the batch should be aborted.
*/
@VisibleForTesting
public void applyTransaction(TransactionEntity txnEntity) {
public static void applyTransaction(TransactionEntity txnEntity) {
logger.atInfo().log("Applying a single transaction Cloud SQL -> Cloud Datastore.");
boolean done = false;
try (UpdateAutoTimestamp.DisableAutoUpdateResource disabler =
UpdateAutoTimestamp.disableAutoUpdate()) {
ofyTm()
.transact(
() -> {
// Reload the last transaction id, which could possibly have changed.
LastSqlTransaction lastSqlTxn = LastSqlTransaction.load();
long nextTxnId = lastSqlTxn.getTransactionId() + 1;
if (nextTxnId < txnEntity.getId()) {
// We're missing a transaction. This is bad. Transaction ids are supposed to
// increase monotonically, so we abort rather than applying anything out of
// order.
throw new IllegalStateException(
String.format(
"Missing transaction: last txn id = %s, next available txn = %s",
nextTxnId - 1, txnEntity.getId()));
} else if (nextTxnId > txnEntity.getId()) {
// We've already replayed this transaction. This shouldn't happen, as GAE cron
// is supposed to avoid overruns and this action shouldn't be executed from any
// other context, but it's not harmful as we can just ignore the transaction. Log
// it so that we know about it and move on.
logger.atWarning().log(
"Ignoring transaction %s, which appears to have already been applied.",
txnEntity.getId());
return;
}
logger.atInfo().log(
"Applying transaction %s to Cloud Datastore.", txnEntity.getId());
// We put this in a do/while loop because we can potentially clean out some range of gaps
// first and we want to do those in their own transaction so as not to run up the entity group
// count. (This is a highly pathological case: consecutive gaps are rare, but the fact that
// they can occur potentially increases the entity group count to beyond what we can
// accommodate in a single transaction.)
do {
done =
ofyTm()
.transact(
() -> {
// Reload the last transaction id, which could possibly have changed.
LastSqlTransaction lastSqlTxn = LastSqlTransaction.load();
long nextTxnId = lastSqlTxn.getTransactionId() + 1;
// At this point, we know txnEntity is the correct next transaction, so write it
// to Datastore.
try {
Transaction.deserialize(txnEntity.getContents()).writeToDatastore();
} catch (IOException e) {
throw new RuntimeException("Error during transaction deserialization", e);
}
// Skip missing transactions. Missed transactions can happen normally. If a
// transaction gets rolled back, the sequence counter doesn't.
int gapCount = 0;
while (nextTxnId < txnEntity.getId()) {
logger.atWarning().log(
"Ignoring transaction %s, which does not exist.", nextTxnId);
auditedOfy()
.saveIgnoringReadOnlyWithoutBackup()
.entity(new ReplayGap(ofyTm().getTransactionTime(), nextTxnId));
++nextTxnId;
// Write the updated last transaction id to Datastore as part of this Datastore
// transaction.
auditedOfy()
.saveIgnoringReadOnlyWithoutBackup()
.entity(lastSqlTxn.cloneWithNewTransactionId(nextTxnId));
logger.atInfo().log(
"Finished applying single transaction Cloud SQL -> Cloud Datastore.");
});
// Don't exceed the entity group count trying to clean these up (we stop at
// max
// - 1 because we also want to save the lastSqlTransaction).
if (++gapCount == MAX_ENTITIES_PER_TXN - 1) {
break;
}
}
// Don't write gap records in the same transaction as the SQL transaction that
// we're replaying. Return false to force us to go through and repeat in a
// new
// transaction.
if (gapCount > 0) {
// We haven't replayed the transaction, but we've determined that we can
// ignore everything before it so update lastSqlTransaction accordingly.
auditedOfy()
.saveIgnoringReadOnlyWithoutBackup()
.entity(lastSqlTxn.cloneWithNewTransactionId(nextTxnId - 1));
return false;
}
if (nextTxnId > txnEntity.getId()) {
// We've already replayed this transaction. This shouldn't happen, as GAE
// cron
// is supposed to avoid overruns and this action shouldn't be executed from
// any
// other context, but it's not harmful as we can just ignore the
// transaction.
// Log it so that we know about it and move on.
logger.atWarning().log(
"Ignoring transaction %s, which appears to have already been applied.",
txnEntity.getId());
return true;
}
logger.atInfo().log(
"Applying transaction %s to Cloud Datastore.", txnEntity.getId());
// At this point, we know txnEntity is the correct next transaction, so write
// it
// to Datastore.
try {
Transaction.deserialize(txnEntity.getContents()).writeToDatastore();
} catch (IOException e) {
throw new RuntimeException("Error during transaction deserialization", e);
}
// Write the updated last transaction id to Datastore as part of this
// Datastore
// transaction.
auditedOfy()
.saveIgnoringReadOnlyWithoutBackup()
.entity(lastSqlTxn.cloneWithNewTransactionId(nextTxnId));
logger.atInfo().log(
"Finished applying single transaction Cloud SQL -> Cloud Datastore.");
return true;
});
} while (!done);
}
}
@@ -174,7 +326,11 @@ public class ReplicateToDatastoreAction implements Runnable {
}
Optional<Lock> lock =
Lock.acquireSql(
this.getClass().getSimpleName(), null, LEASE_LENGTH, requestStatusChecker, false);
REPLICATE_TO_DATASTORE_LOCK_NAME,
null,
REPLICATE_TO_DATASTORE_LOCK_LEASE_LENGTH,
requestStatusChecker,
false);
if (!lock.isPresent()) {
String message = "Can't acquire ReplicateToDatastoreAction lock, aborting.";
logger.atSevere().log(message);
@@ -203,10 +359,14 @@ public class ReplicateToDatastoreAction implements Runnable {
}
private int replayAllTransactions() {
return replayAllTransactions(Optional.empty());
}
public static int replayAllTransactions(Optional<String> snapshotId) {
int numTransactionsReplayed = 0;
List<TransactionEntity> transactionBatch;
do {
transactionBatch = getTransactionBatch();
transactionBatch = getTransactionBatchAtSnapshot(snapshotId);
for (TransactionEntity transaction : transactionBatch) {
applyTransaction(transaction);
numTransactionsReplayed++;

View File

@@ -324,7 +324,7 @@ public class HistoryEntry extends ImmutableObject
// Note: how we wish to treat this Hibernate setter depends on the current state of the object
// and what's passed in. The key principle is that we wish to maintain the link between parent
// and child objects, meaning that we should keep around whichever of the two sets (the
// parameter vs the class variable and clear/populate that as appropriate.
// parameter vs the class variable) and clear/populate that as appropriate.
//
// If the class variable is a PersistentSet and we overwrite it here, Hibernate will throw
// an exception "A collection with cascade=”all-delete-orphan” was no longer referenced by the
@@ -539,7 +539,7 @@ public class HistoryEntry extends ImmutableObject
public B setDomainTransactionRecords(
ImmutableSet<DomainTransactionRecord> domainTransactionRecords) {
getInstance().domainTransactionRecords = domainTransactionRecords;
getInstance().setDomainTransactionRecords(domainTransactionRecords);
return thisCastToDerived();
}
}

View File

@@ -24,6 +24,7 @@ import static com.google.common.collect.Maps.filterValues;
import static google.registry.model.CacheUtils.memoizeWithShortExpiration;
import static google.registry.model.common.EntityGroupRoot.getCrossTldKey;
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.util.CollectionUtils.entriesToImmutableMap;
import static google.registry.util.PreconditionsUtils.checkArgumentNotNull;
@@ -38,6 +39,8 @@ import com.google.common.net.InternetDomainName;
import com.googlecode.objectify.Key;
import google.registry.model.tld.Registry.TldType;
import java.util.Optional;
import java.util.stream.Stream;
import javax.persistence.EntityManager;
/** Utilities for finding and listing {@link Registry} entities. */
public final class Registries {
@@ -58,23 +61,31 @@ public final class Registries {
() ->
tm().doTransactionless(
() -> {
ImmutableSet<String> tlds =
tm().isOfy()
? auditedOfy()
.load()
.type(Registry.class)
.ancestor(getCrossTldKey())
.keys()
.list()
.stream()
.map(Key::getName)
.collect(toImmutableSet())
: tm().loadAllOf(Registry.class).stream()
.map(Registry::getTldStr)
.collect(toImmutableSet());
return Registry.getAll(tlds).stream()
.map(e -> Maps.immutableEntry(e.getTldStr(), e.getTldType()))
.collect(entriesToImmutableMap());
if (tm().isOfy()) {
ImmutableSet<String> tlds =
auditedOfy()
.load()
.type(Registry.class)
.ancestor(getCrossTldKey())
.keys()
.list()
.stream()
.map(Key::getName)
.collect(toImmutableSet());
return Registry.getAll(tlds).stream()
.map(e -> Maps.immutableEntry(e.getTldStr(), e.getTldType()))
.collect(entriesToImmutableMap());
} else {
EntityManager entityManager = jpaTm().getEntityManager();
Stream<?> resultStream =
entityManager
.createQuery("SELECT tldStrId, tldType FROM Tld")
.getResultStream();
return resultStream
.map(e -> ((Object[]) e))
.map(e -> Maps.immutableEntry((String) e[0], ((TldType) e[1])))
.collect(entriesToImmutableMap());
}
}));
}

View File

@@ -21,7 +21,6 @@ import static com.google.common.hash.Funnels.stringFunnel;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Streams;
import com.google.common.hash.BloomFilter;
import google.registry.model.Buildable;
import google.registry.model.ImmutableObject;
@@ -86,9 +85,8 @@ public final class PremiumList extends BaseDomainLabelList<BigDecimal, PremiumEn
*/
public synchronized ImmutableMap<String, BigDecimal> getLabelsToPrices() {
if (labelsToPrices == null) {
Iterable<PremiumEntry> entries = PremiumListDao.loadAllPremiumEntries(name);
labelsToPrices =
Streams.stream(entries)
PremiumListDao.loadAllPremiumEntries(name).stream()
.collect(
toImmutableMap(
PremiumEntry::getDomainLabel,

View File

@@ -28,8 +28,8 @@ import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Streams;
import google.registry.model.tld.label.PremiumList.PremiumEntry;
import google.registry.util.NonFinalForTesting;
import java.math.BigDecimal;
@@ -56,8 +56,7 @@ public class PremiumListDao {
* <p>This is cached for a shorter duration because we need to periodically reload this entity to
* check if a new revision has been published, and if so, then use that.
*
* <p>We also cache the absence of premium lists with a given name to avoid unnecessary pointless
* lookups. Note that this cache is only applicable to PremiumList objects stored in SQL.
* <p>We also cache the absence of premium lists with a given name to avoid pointless lookups.
*/
@NonFinalForTesting
static LoadingCache<String, Optional<PremiumList>> premiumListCache =
@@ -170,11 +169,10 @@ public class PremiumListDao {
if (!isNullOrEmpty(premiumList.getLabelsToPrices())) {
ImmutableSet.Builder<PremiumEntry> entries = new ImmutableSet.Builder<>();
premiumList.getLabelsToPrices().entrySet().stream()
premiumList
.getLabelsToPrices()
.forEach(
entry ->
entries.add(
PremiumEntry.create(revisionId, entry.getValue(), entry.getKey())));
(key, value) -> entries.add(PremiumEntry.create(revisionId, value, key)));
jpaTm().insertAll(entries.build());
}
});
@@ -217,7 +215,7 @@ public class PremiumListDao {
*
* <p>This is an expensive operation and should only be used when the entire list is required.
*/
public static Iterable<PremiumEntry> loadPremiumEntries(PremiumList premiumList) {
public static List<PremiumEntry> loadPremiumEntries(PremiumList premiumList) {
return jpaTm()
.transact(
() ->
@@ -254,15 +252,14 @@ public class PremiumListDao {
*
* <p>This is an expensive operation and should only be used when the entire list is required.
*/
public static Iterable<PremiumEntry> loadAllPremiumEntries(String premiumListName) {
public static ImmutableList<PremiumEntry> loadAllPremiumEntries(String premiumListName) {
PremiumList premiumList =
getLatestRevision(premiumListName)
.orElseThrow(
() ->
new IllegalArgumentException(
String.format("No premium list with name %s.", premiumListName)));
Iterable<PremiumEntry> entries = loadPremiumEntries(premiumList);
return Streams.stream(entries)
return loadPremiumEntries(premiumList).stream()
.map(
premiumEntry ->
new PremiumEntry.Builder()

View File

@@ -94,8 +94,6 @@ public class DomainTransferData extends TransferData<DomainTransferData.Builder>
*
* <p>This field should be null if there is not currently a pending transfer or if the object
* being transferred is not a domain.
*
* <p>TODO(b/158230654) Remove unused columns for TransferData in Contact table.
*/
@IgnoreSave(IfNull.class)
@Column(name = "transfer_billing_event_id")

View File

@@ -14,12 +14,10 @@
package google.registry.model.translators;
import static com.google.common.base.MoreObjects.firstNonNull;
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static org.joda.time.DateTimeZone.UTC;
import google.registry.model.CreateAutoTimestamp;
import google.registry.persistence.transaction.Transaction;
import java.util.Date;
import org.joda.time.DateTime;
@@ -47,13 +45,13 @@ public class CreateAutoTimestampTranslatorFactory
/** Save a timestamp, setting it to the current time if it did not have a previous value. */
@Override
public Date saveValue(CreateAutoTimestamp pojoValue) {
// Don't do this if we're in the course of transaction serialization.
if (Transaction.inSerializationMode()) {
return pojoValue.getTimestamp() == null ? null : pojoValue.getTimestamp().toDate();
}
return firstNonNull(pojoValue.getTimestamp(), ofyTm().getTransactionTime()).toDate();
// Note that we use the current transaction manager -- we need to do this under JPA when we
// serialize the entity from a Transaction object, but we need to use the JPA transaction
// manager in that case.
return (pojoValue.getTimestamp() == null
? tm().getTransactionTime()
: pojoValue.getTimestamp())
.toDate();
}
};
}

View File

@@ -14,6 +14,8 @@
package google.registry.model.translators;
import static com.google.common.base.Preconditions.checkState;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.ofyTm;
import static org.joda.time.DateTimeZone.UTC;
@@ -48,9 +50,16 @@ public class UpdateAutoTimestampTranslatorFactory
@Override
public Date saveValue(UpdateAutoTimestamp pojoValue) {
// Don't do this if we're in the course of transaction serialization.
// If we're in the course of Transaction serialization, we have to use the transaction time
// here and the JPA transaction manager which is what will ultimately be saved during the
// commit.
// Note that this branch doesn't respect "auto update disabled", as this state is
// specifically to address replay, so we add a runtime check for this.
if (Transaction.inSerializationMode()) {
return pojoValue.getTimestamp() == null ? null : pojoValue.getTimestamp().toDate();
checkState(
UpdateAutoTimestamp.autoUpdateEnabled(),
"Auto-update disabled during transaction serialization.");
return jpaTm().getTransactionTime().toDate();
}
return UpdateAutoTimestamp.autoUpdateEnabled()

View File

@@ -43,7 +43,7 @@ import google.registry.rde.JSchModule;
import google.registry.request.Modules.DatastoreServiceModule;
import google.registry.request.Modules.Jackson2Module;
import google.registry.request.Modules.NetHttpTransportModule;
import google.registry.request.Modules.URLFetchServiceModule;
import google.registry.request.Modules.UrlConnectionServiceModule;
import google.registry.request.Modules.UrlFetchTransportModule;
import google.registry.request.Modules.UserServiceModule;
import google.registry.request.auth.AuthModule;
@@ -80,7 +80,7 @@ import javax.inject.Singleton;
ServerTridProviderModule.class,
SheetsServiceModule.class,
StackdriverModule.class,
URLFetchServiceModule.class,
UrlConnectionServiceModule.class,
UrlFetchTransportModule.class,
UserServiceModule.class,
VoidDnsWriterModule.class,

View File

@@ -21,6 +21,7 @@ import google.registry.backup.CommitLogCheckpointAction;
import google.registry.backup.DeleteOldCommitLogsAction;
import google.registry.backup.ExportCommitLogDiffAction;
import google.registry.backup.ReplayCommitLogsToSqlAction;
import google.registry.backup.SyncDatastoreToSqlSnapshotAction;
import google.registry.batch.BatchModule;
import google.registry.batch.DeleteContactsAndHostsAction;
import google.registry.batch.DeleteExpiredDomainsAction;
@@ -199,6 +200,8 @@ interface BackendRequestComponent {
SendExpiringCertificateNotificationEmailAction sendExpiringCertificateNotificationEmailAction();
SyncDatastoreToSqlSnapshotAction syncDatastoreToSqlSnapshotAction();
SyncGroupMembersAction syncGroupMembersAction();
SyncRegistrarsSheetAction syncRegistrarsSheetAction();

View File

@@ -17,6 +17,7 @@ package google.registry.module.frontend;
import com.google.monitoring.metrics.MetricReporter;
import dagger.Component;
import dagger.Lazy;
import google.registry.config.CloudTasksUtilsModule;
import google.registry.config.CredentialModule;
import google.registry.config.RegistryConfig.ConfigModule;
import google.registry.flows.ServerTridProviderModule;
@@ -33,7 +34,6 @@ import google.registry.monitoring.whitebox.StackdriverModule;
import google.registry.privileges.secretmanager.SecretManagerModule;
import google.registry.request.Modules.Jackson2Module;
import google.registry.request.Modules.NetHttpTransportModule;
import google.registry.request.Modules.UrlFetchTransportModule;
import google.registry.request.Modules.UserServiceModule;
import google.registry.request.auth.AuthModule;
import google.registry.ui.ConsoleDebug.ConsoleConfigModule;
@@ -45,10 +45,12 @@ import javax.inject.Singleton;
@Component(
modules = {
AuthModule.class,
CloudTasksUtilsModule.class,
ConfigModule.class,
ConsoleConfigModule.class,
CredentialModule.class,
CustomLogicFactoryModule.class,
CloudTasksUtilsModule.class,
DirectoryModule.class,
DummyKeyringModule.class,
FrontendRequestComponentModule.class,
@@ -62,7 +64,6 @@ import javax.inject.Singleton;
SecretManagerModule.class,
ServerTridProviderModule.class,
StackdriverModule.class,
UrlFetchTransportModule.class,
UserServiceModule.class,
UtilsModule.class
})

View File

@@ -30,10 +30,10 @@ import google.registry.keyring.api.KeyModule;
import google.registry.keyring.kms.KmsModule;
import google.registry.module.pubapi.PubApiRequestComponent.PubApiRequestComponentModule;
import google.registry.monitoring.whitebox.StackdriverModule;
import google.registry.persistence.PersistenceModule;
import google.registry.privileges.secretmanager.SecretManagerModule;
import google.registry.request.Modules.Jackson2Module;
import google.registry.request.Modules.NetHttpTransportModule;
import google.registry.request.Modules.UrlFetchTransportModule;
import google.registry.request.Modules.UserServiceModule;
import google.registry.request.auth.AuthModule;
import google.registry.util.UtilsModule;
@@ -56,11 +56,11 @@ import javax.inject.Singleton;
KeyringModule.class,
KmsModule.class,
NetHttpTransportModule.class,
PersistenceModule.class,
PubApiRequestComponentModule.class,
SecretManagerModule.class,
ServerTridProviderModule.class,
StackdriverModule.class,
UrlFetchTransportModule.class,
UserServiceModule.class,
UtilsModule.class
})

View File

@@ -17,6 +17,7 @@ package google.registry.module.tools;
import com.google.monitoring.metrics.MetricReporter;
import dagger.Component;
import dagger.Lazy;
import google.registry.config.CloudTasksUtilsModule;
import google.registry.config.CredentialModule;
import google.registry.config.RegistryConfig.ConfigModule;
import google.registry.export.DriveModule;
@@ -35,7 +36,6 @@ import google.registry.privileges.secretmanager.SecretManagerModule;
import google.registry.request.Modules.DatastoreServiceModule;
import google.registry.request.Modules.Jackson2Module;
import google.registry.request.Modules.NetHttpTransportModule;
import google.registry.request.Modules.UrlFetchTransportModule;
import google.registry.request.Modules.UserServiceModule;
import google.registry.request.auth.AuthModule;
import google.registry.util.UtilsModule;
@@ -49,6 +49,7 @@ import javax.inject.Singleton;
ConfigModule.class,
CredentialModule.class,
CustomLogicFactoryModule.class,
CloudTasksUtilsModule.class,
DatastoreServiceModule.class,
DirectoryModule.class,
DummyKeyringModule.class,
@@ -64,7 +65,6 @@ import javax.inject.Singleton;
ServerTridProviderModule.class,
StackdriverModule.class,
ToolsRequestComponentModule.class,
UrlFetchTransportModule.class,
UserServiceModule.class,
UtilsModule.class
})

View File

@@ -20,6 +20,8 @@ import static google.registry.config.RegistryConfig.getHibernateHikariConnection
import static google.registry.config.RegistryConfig.getHibernateHikariIdleTimeout;
import static google.registry.config.RegistryConfig.getHibernateHikariMaximumPoolSize;
import static google.registry.config.RegistryConfig.getHibernateHikariMinimumIdle;
import static google.registry.config.RegistryConfig.getHibernateJdbcBatchSize;
import static google.registry.config.RegistryConfig.getHibernateJdbcFetchSize;
import static google.registry.config.RegistryConfig.getHibernateLogSqlQueries;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
@@ -76,15 +78,9 @@ public abstract class PersistenceModule {
public static final String HIKARI_DS_CLOUD_SQL_INSTANCE =
"hibernate.hikari.dataSource.cloudSqlInstance";
/**
* Postgresql-specific: driver default fetch size is 0, which disables streaming result sets. Here
* we set a small default geared toward Nomulus server transactions. Large queries can override
* the defaults using {@link JpaTransactionManager#setQueryFetchSize}.
*/
public static final String JDBC_BATCH_SIZE = "hibernate.jdbc.batch_size";
public static final String JDBC_FETCH_SIZE = "hibernate.jdbc.fetch_size";
private static final int DEFAULT_SERVER_FETCH_SIZE = 20;
@VisibleForTesting
@Provides
@DefaultHibernateConfigs
@@ -111,7 +107,8 @@ public abstract class PersistenceModule {
properties.put(HIKARI_MAXIMUM_POOL_SIZE, getHibernateHikariMaximumPoolSize());
properties.put(HIKARI_IDLE_TIMEOUT, getHibernateHikariIdleTimeout());
properties.put(Environment.DIALECT, NomulusPostgreSQLDialect.class.getName());
properties.put(JDBC_FETCH_SIZE, Integer.toString(DEFAULT_SERVER_FETCH_SIZE));
properties.put(JDBC_BATCH_SIZE, getHibernateJdbcBatchSize());
properties.put(JDBC_FETCH_SIZE, getHibernateJdbcFetchSize());
return properties.build();
}
@@ -280,6 +277,8 @@ public abstract class PersistenceModule {
setSqlCredential(credentialStore, new RobotUser(RobotId.NOMULUS), overrides);
replicaInstanceConnectionName.ifPresent(
name -> overrides.put(HIKARI_DS_CLOUD_SQL_INSTANCE, name));
overrides.put(
Environment.ISOLATION, TransactionIsolationLevel.TRANSACTION_READ_COMMITTED.name());
return new JpaTransactionManagerImpl(create(overrides), clock);
}
@@ -294,6 +293,8 @@ public abstract class PersistenceModule {
HashMap<String, String> overrides = Maps.newHashMap(beamCloudSqlConfigs);
replicaInstanceConnectionName.ifPresent(
name -> overrides.put(HIKARI_DS_CLOUD_SQL_INSTANCE, name));
overrides.put(
Environment.ISOLATION, TransactionIsolationLevel.TRANSACTION_READ_COMMITTED.name());
return new JpaTransactionManagerImpl(create(overrides), clock);
}

View File

@@ -18,7 +18,6 @@ import static google.registry.persistence.transaction.TransactionManagerFactory.
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression;
@@ -42,12 +41,14 @@ public class CriteriaQueryBuilder<T> {
private final CriteriaQuery<T> query;
private final Root<?> root;
private final JpaTransactionManager jpaTm;
private final ImmutableList.Builder<Predicate> predicates = new ImmutableList.Builder<>();
private final ImmutableList.Builder<Order> orders = new ImmutableList.Builder<>();
private CriteriaQueryBuilder(CriteriaQuery<T> query, Root<?> root) {
private CriteriaQueryBuilder(CriteriaQuery<T> query, Root<?> root, JpaTransactionManager jpaTm) {
this.query = query;
this.root = root;
this.jpaTm = jpaTm;
}
/** Adds a WHERE clause to the query, given the specified operation, field, and value. */
@@ -75,18 +76,18 @@ public class CriteriaQueryBuilder<T> {
*/
public <V> CriteriaQueryBuilder<T> whereFieldContains(String fieldName, Object value) {
return where(
jpaTm().getEntityManager().getCriteriaBuilder().isMember(value, root.get(fieldName)));
jpaTm.getEntityManager().getCriteriaBuilder().isMember(value, root.get(fieldName)));
}
/** Orders the result by the given field ascending. */
public CriteriaQueryBuilder<T> orderByAsc(String fieldName) {
orders.add(jpaTm().getEntityManager().getCriteriaBuilder().asc(root.get(fieldName)));
orders.add(jpaTm.getEntityManager().getCriteriaBuilder().asc(root.get(fieldName)));
return this;
}
/** Orders the result by the given field descending. */
public CriteriaQueryBuilder<T> orderByDesc(String fieldName) {
orders.add(jpaTm().getEntityManager().getCriteriaBuilder().desc(root.get(fieldName)));
orders.add(jpaTm.getEntityManager().getCriteriaBuilder().desc(root.get(fieldName)));
return this;
}
@@ -103,23 +104,24 @@ public class CriteriaQueryBuilder<T> {
/** Creates a query builder that will SELECT from the given class. */
public static <T> CriteriaQueryBuilder<T> create(Class<T> clazz) {
return create(jpaTm().getEntityManager(), clazz);
return create(jpaTm(), clazz);
}
/** Creates a query builder for the given entity manager. */
public static <T> CriteriaQueryBuilder<T> create(EntityManager em, Class<T> clazz) {
CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(clazz);
public static <T> CriteriaQueryBuilder<T> create(JpaTransactionManager jpaTm, Class<T> clazz) {
CriteriaQuery<T> query = jpaTm.getEntityManager().getCriteriaBuilder().createQuery(clazz);
Root<T> root = query.from(clazz);
query = query.select(root);
return new CriteriaQueryBuilder<>(query, root);
return new CriteriaQueryBuilder<>(query, root, jpaTm);
}
/** Creates a "count" query for the table for the class. */
public static <T> CriteriaQueryBuilder<Long> createCount(EntityManager em, Class<T> clazz) {
CriteriaBuilder builder = em.getCriteriaBuilder();
public static <T> CriteriaQueryBuilder<Long> createCount(
JpaTransactionManager jpaTm, Class<T> clazz) {
CriteriaBuilder builder = jpaTm.getEntityManager().getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<T> root = query.from(clazz);
query = query.select(builder.count(root));
return new CriteriaQueryBuilder<>(query, root);
return new CriteriaQueryBuilder<>(query, root, jpaTm);
}
}

View File

@@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Streams;
import com.google.common.flogger.FluentLogger;
import com.googlecode.objectify.Key;
import google.registry.model.ImmutableObject;
import google.registry.model.common.DatabaseMigrationStateSchedule;
import google.registry.model.common.DatabaseMigrationStateSchedule.ReplayDirection;
@@ -141,14 +142,15 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
// Postgresql-specific: 'set transaction' command must be called inside a transaction
assertInTransaction();
EntityManager entityManager = getEntityManager();
ReadOnlyCheckingEntityManager entityManager =
(ReadOnlyCheckingEntityManager) getEntityManager();
// Isolation is hardcoded to REPEATABLE READ, as specified by parent's Javadoc.
entityManager
.createNativeQuery("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ")
.executeUpdate();
.executeUpdateIgnoringReadOnly();
entityManager
.createNativeQuery(String.format("SET TRANSACTION SNAPSHOT '%s'", snapshotId))
.executeUpdate();
.executeUpdateIgnoringReadOnly();
return this;
}
@@ -603,6 +605,13 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
managedEntity = getEntityManager().merge(entity);
}
getEntityManager().remove(managedEntity);
// We check shouldReplicate() in TransactionInfo.addDelete(), but we have to check it here as
// well prior to attempting to create a datastore key because a non-replicated entity may not
// have one.
if (shouldReplicate(entity.getClass())) {
transactionInfo.get().addDelete(VKey.from(Key.create(entity)));
}
return managedEntity;
}
@@ -826,6 +835,12 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
replaySqlToDatastoreOverrideForTest.set(Optional.empty());
}
/** Returns true if the entity class should be replicated from SQL to datastore. */
private static boolean shouldReplicate(Class<?> entityClass) {
return !NonReplicatedEntity.class.isAssignableFrom(entityClass)
&& !SqlOnlyEntity.class.isAssignableFrom(entityClass);
}
private static class TransactionInfo {
ReadOnlyCheckingEntityManager entityManager;
boolean inTransaction = false;
@@ -882,12 +897,6 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
}
}
/** Returns true if the entity class should be replicated from SQL to datastore. */
private boolean shouldReplicate(Class<?> entityClass) {
return !NonReplicatedEntity.class.isAssignableFrom(entityClass)
&& !SqlOnlyEntity.class.isAssignableFrom(entityClass);
}
private void recordTransaction() {
if (contentsBuilder != null) {
Transaction persistedTxn = contentsBuilder.build();
@@ -1130,7 +1139,7 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
private TypedQuery<T> buildQuery() {
CriteriaQueryBuilder<T> queryBuilder =
CriteriaQueryBuilder.create(getEntityManager(), entityClass);
CriteriaQueryBuilder.create(JpaTransactionManagerImpl.this, entityClass);
return addCriteria(queryBuilder);
}
@@ -1177,7 +1186,7 @@ public class JpaTransactionManagerImpl implements JpaTransactionManager {
@Override
public long count() {
CriteriaQueryBuilder<Long> queryBuilder =
CriteriaQueryBuilder.createCount(getEntityManager(), entityClass);
CriteriaQueryBuilder.createCount(JpaTransactionManagerImpl.this, entityClass);
return addCriteria(queryBuilder).getSingleResult();
}

View File

@@ -206,7 +206,7 @@ public class ReadOnlyCheckingEntityManager implements EntityManager {
}
@Override
public Query createNativeQuery(String sqlString) {
public ReadOnlyCheckingQuery createNativeQuery(String sqlString) {
return new ReadOnlyCheckingQuery(delegate.createNativeQuery(sqlString));
}

View File

@@ -14,6 +14,7 @@
package google.registry.persistence.transaction;
import com.google.common.annotations.VisibleForTesting;
import google.registry.model.ImmutableObject;
import google.registry.model.replay.SqlOnlyEntity;
import javax.persistence.Entity;
@@ -39,7 +40,8 @@ public class TransactionEntity extends ImmutableObject implements SqlOnlyEntity
TransactionEntity() {}
TransactionEntity(byte[] contents) {
@VisibleForTesting
public TransactionEntity(byte[] contents) {
this.contents = contents;
}

View File

@@ -14,8 +14,8 @@
package google.registry.persistence.transaction;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static google.registry.util.PreconditionsUtils.checkArgumentNotNull;
import static org.joda.time.DateTimeZone.UTC;
import com.google.appengine.api.utils.SystemProperty;
@@ -47,6 +47,10 @@ public final class TransactionManagerFactory {
private static Supplier<JpaTransactionManager> jpaTm =
Suppliers.memoize(TransactionManagerFactory::createJpaTransactionManager);
@NonFinalForTesting
private static Supplier<JpaTransactionManager> replicaJpaTm =
Suppliers.memoize(TransactionManagerFactory::createReplicaJpaTransactionManager);
private static boolean onBeam = false;
private TransactionManagerFactory() {}
@@ -61,6 +65,14 @@ public final class TransactionManagerFactory {
}
}
private static JpaTransactionManager createReplicaJpaTransactionManager() {
if (isInAppEngine()) {
return DaggerPersistenceComponent.create().readOnlyReplicaJpaTransactionManager();
} else {
return DummyJpaTransactionManager.create();
}
}
private static DatastoreTransactionManager createTransactionManager() {
return new DatastoreTransactionManager(null);
}
@@ -108,6 +120,21 @@ public final class TransactionManagerFactory {
return jpaTm.get();
}
/** Returns a read-only {@link JpaTransactionManager} instance if configured. */
public static JpaTransactionManager replicaJpaTm() {
return replicaJpaTm.get();
}
/**
* Returns a {@link TransactionManager} that uses a replica database if one exists.
*
* <p>In Datastore mode, this is unchanged from the regular transaction manager. In SQL mode,
* however, this will be a reference to the read-only replica database if one is configured.
*/
public static TransactionManager replicaTm() {
return tm().isOfy() ? tm() : replicaJpaTm();
}
/** Returns {@link DatastoreTransactionManager} instance. */
@VisibleForTesting
public static DatastoreTransactionManager ofyTm() {
@@ -116,7 +143,7 @@ public final class TransactionManagerFactory {
/** Sets the return of {@link #jpaTm()} to the given instance of {@link JpaTransactionManager}. */
public static void setJpaTm(Supplier<JpaTransactionManager> jpaTmSupplier) {
checkNotNull(jpaTmSupplier, "jpaTmSupplier");
checkArgumentNotNull(jpaTmSupplier, "jpaTmSupplier");
checkState(
RegistryEnvironment.get().equals(RegistryEnvironment.UNITTEST)
|| RegistryToolEnvironment.get() != null,
@@ -124,13 +151,23 @@ public final class TransactionManagerFactory {
jpaTm = Suppliers.memoize(jpaTmSupplier::get);
}
/** Sets the value of {@link #replicaJpaTm()} to the given {@link JpaTransactionManager}. */
public static void setReplicaJpaTm(Supplier<JpaTransactionManager> replicaJpaTmSupplier) {
checkArgumentNotNull(replicaJpaTmSupplier, "replicaJpaTmSupplier");
checkState(
RegistryEnvironment.get().equals(RegistryEnvironment.UNITTEST)
|| RegistryToolEnvironment.get() != null,
"setReplicaJpaTm() should only be called by tools and tests.");
replicaJpaTm = Suppliers.memoize(replicaJpaTmSupplier::get);
}
/**
* Makes {@link #jpaTm()} return the {@link JpaTransactionManager} instance provided by {@code
* jpaTmSupplier} from now on. This method should only be called by an implementor of {@link
* org.apache.beam.sdk.harness.JvmInitializer}.
*/
public static void setJpaTmOnBeamWorker(Supplier<JpaTransactionManager> jpaTmSupplier) {
checkNotNull(jpaTmSupplier, "jpaTmSupplier");
checkArgumentNotNull(jpaTmSupplier, "jpaTmSupplier");
jpaTm = Suppliers.memoize(jpaTmSupplier::get);
onBeam = true;
}

View File

@@ -18,7 +18,7 @@ import static com.google.common.collect.ImmutableSet.toImmutableSet;
import static google.registry.model.EppResourceUtils.loadByForeignKey;
import static google.registry.model.index.ForeignKeyIndex.loadAndGetKey;
import static google.registry.model.ofy.ObjectifyService.auditedOfy;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.replicaJpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.request.Action.Method.GET;
import static google.registry.request.Action.Method.HEAD;
@@ -91,7 +91,9 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
@Inject @Parameter("name") Optional<String> nameParam;
@Inject @Parameter("nsLdhName") Optional<String> nsLdhNameParam;
@Inject @Parameter("nsIp") Optional<String> nsIpParam;
@Inject public RdapDomainSearchAction() {
@Inject
public RdapDomainSearchAction() {
super("domain search", EndpointType.DOMAINS);
}
@@ -223,13 +225,13 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
resultSet = getMatchingResources(query, true, querySizeLimit);
} else {
resultSet =
jpaTm()
replicaJpaTm()
.transact(
() -> {
CriteriaBuilder criteriaBuilder =
jpaTm().getEntityManager().getCriteriaBuilder();
replicaJpaTm().getEntityManager().getCriteriaBuilder();
CriteriaQueryBuilder<DomainBase> queryBuilder =
CriteriaQueryBuilder.create(DomainBase.class)
CriteriaQueryBuilder.create(replicaJpaTm(), DomainBase.class)
.where(
"fullyQualifiedDomainName",
criteriaBuilder::like,
@@ -270,7 +272,7 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
resultSet = getMatchingResources(query, true, querySizeLimit);
} else {
resultSet =
jpaTm()
replicaJpaTm()
.transact(
() -> {
CriteriaQueryBuilder<DomainBase> builder =
@@ -354,7 +356,7 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
.map(VKey::from)
.collect(toImmutableSet());
} else {
return jpaTm()
return replicaJpaTm()
.transact(
() -> {
CriteriaQueryBuilder<HostResource> builder =
@@ -368,11 +370,12 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
builder =
builder.where(
"currentSponsorClientId",
jpaTm().getEntityManager().getCriteriaBuilder()::equal,
replicaJpaTm().getEntityManager().getCriteriaBuilder()::equal,
desiredRegistrar.get());
}
return getMatchingResourcesSql(builder, true, maxNameserversInFirstStage)
.resources().stream()
.resources()
.stream()
.map(HostResource::createVKey)
.collect(toImmutableSet());
});
@@ -509,11 +512,11 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
parameters.put("desiredRegistrar", desiredRegistrar.get());
}
hostKeys =
jpaTm()
replicaJpaTm()
.transact(
() -> {
javax.persistence.Query query =
jpaTm()
replicaJpaTm()
.getEntityManager()
.createNativeQuery(queryBuilder.toString())
.setMaxResults(maxNameserversInFirstStage);
@@ -568,16 +571,16 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
}
stream.forEach(domainSetBuilder::add);
} else {
jpaTm()
replicaJpaTm()
.transact(
() -> {
for (VKey<HostResource> hostKey : hostKeys) {
CriteriaQueryBuilder<DomainBase> queryBuilder =
CriteriaQueryBuilder.create(DomainBase.class)
CriteriaQueryBuilder.create(replicaJpaTm(), DomainBase.class)
.whereFieldContains("nsHosts", hostKey)
.orderByAsc("fullyQualifiedDomainName");
CriteriaBuilder criteriaBuilder =
jpaTm().getEntityManager().getCriteriaBuilder();
replicaJpaTm().getEntityManager().getCriteriaBuilder();
if (!shouldIncludeDeleted()) {
queryBuilder =
queryBuilder.where(
@@ -590,7 +593,7 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
criteriaBuilder::greaterThan,
cursorString.get());
}
jpaTm()
replicaJpaTm()
.criteriaQuery(queryBuilder.build())
.getResultStream()
.filter(this::isAuthorized)

View File

@@ -15,7 +15,7 @@
package google.registry.rdap;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.replicaJpaTm;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.persistence.transaction.TransactionManagerUtil.transactIfJpaTm;
import static google.registry.rdap.RdapUtils.getRegistrarByIanaIdentifier;
@@ -277,7 +277,7 @@ public class RdapEntitySearchAction extends RdapSearchActionBase {
resultSet = getMatchingResources(query, false, rdapResultSetMaxSize + 1);
} else {
resultSet =
jpaTm()
replicaJpaTm()
.transact(
() -> {
CriteriaQueryBuilder<ContactResource> builder =
@@ -399,7 +399,7 @@ public class RdapEntitySearchAction extends RdapSearchActionBase {
querySizeLimit);
} else {
contactResultSet =
jpaTm()
replicaJpaTm()
.transact(
() ->
getMatchingResourcesSql(

Some files were not shown because too many files have changed in this diff Show More