@firebaseextensions/firestore-bigquery-change-tracker 1.1.15 → 1.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bigquery/index.js +29 -15
- package/lib/logs.js +7 -2
- package/package.json +1 -1
package/lib/bigquery/index.js
CHANGED
|
@@ -42,7 +42,7 @@ Object.defineProperty(exports, "RawChangelogViewSchema", { enumerable: true, get
|
|
|
42
42
|
class FirestoreBigQueryEventHistoryTracker {
|
|
43
43
|
constructor(config) {
|
|
44
44
|
this.config = config;
|
|
45
|
-
this.
|
|
45
|
+
this._initialized = false;
|
|
46
46
|
this.bq = new bigquery.BigQuery();
|
|
47
47
|
this.bq.projectId = config.bqProjectId || process.env.PROJECT_ID;
|
|
48
48
|
if (!this.config.datasetLocation) {
|
|
@@ -138,16 +138,25 @@ class FirestoreBigQueryEventHistoryTracker {
|
|
|
138
138
|
* A half a second delay is added per check while the function
|
|
139
139
|
* continually re-checks until the referenced dataset and table become available.
|
|
140
140
|
*/
|
|
141
|
-
async waitForInitialization(
|
|
141
|
+
async waitForInitialization() {
|
|
142
142
|
return new Promise((resolve) => {
|
|
143
143
|
let handle = setInterval(async () => {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
try {
|
|
145
|
+
const dataset = this.bigqueryDataset();
|
|
146
|
+
const changelogName = this.rawChangeLogTableName();
|
|
147
|
+
const table = dataset.table(changelogName);
|
|
148
|
+
const [datasetExists] = await dataset.exists();
|
|
149
|
+
const [tableExists] = await table.exists();
|
|
150
|
+
if (datasetExists && tableExists) {
|
|
151
|
+
clearInterval(handle);
|
|
152
|
+
return resolve(table);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (ex) {
|
|
147
156
|
clearInterval(handle);
|
|
148
|
-
|
|
157
|
+
logs.failedToInitializeWait(ex.message);
|
|
149
158
|
}
|
|
150
|
-
},
|
|
159
|
+
}, 5000);
|
|
151
160
|
});
|
|
152
161
|
}
|
|
153
162
|
/**
|
|
@@ -163,7 +172,6 @@ class FirestoreBigQueryEventHistoryTracker {
|
|
|
163
172
|
try {
|
|
164
173
|
const dataset = this.bigqueryDataset();
|
|
165
174
|
const table = dataset.table(this.rawChangeLogTableName());
|
|
166
|
-
await this.waitForInitialization(dataset, table);
|
|
167
175
|
logs.dataInserting(rows.length);
|
|
168
176
|
await table.insert(rows, options);
|
|
169
177
|
logs.dataInserted(rows.length);
|
|
@@ -179,7 +187,7 @@ class FirestoreBigQueryEventHistoryTracker {
|
|
|
179
187
|
await handleFailedTransactions_1.default(rows, this.config, e);
|
|
180
188
|
}
|
|
181
189
|
// Reinitializing in case the destintation table is modified.
|
|
182
|
-
this.
|
|
190
|
+
this._initialized = false;
|
|
183
191
|
logs.bigQueryTableInsertErrors(e.errors);
|
|
184
192
|
throw e;
|
|
185
193
|
}
|
|
@@ -189,13 +197,19 @@ class FirestoreBigQueryEventHistoryTracker {
|
|
|
189
197
|
* After the first invokation, it skips initialization assuming these resources are still there.
|
|
190
198
|
*/
|
|
191
199
|
async initialize() {
|
|
192
|
-
|
|
193
|
-
|
|
200
|
+
try {
|
|
201
|
+
if (this._initialized) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
await this.initializeDataset();
|
|
205
|
+
await this.initializeRawChangeLogTable();
|
|
206
|
+
await this.initializeLatestView();
|
|
207
|
+
this._initialized = true;
|
|
208
|
+
}
|
|
209
|
+
catch (ex) {
|
|
210
|
+
await this.waitForInitialization();
|
|
211
|
+
this._initialized = true;
|
|
194
212
|
}
|
|
195
|
-
await this.initializeDataset();
|
|
196
|
-
await this.initializeRawChangeLogTable();
|
|
197
|
-
await this.initializeLatestView();
|
|
198
|
-
this.initialized = true;
|
|
199
213
|
}
|
|
200
214
|
/**
|
|
201
215
|
* Creates the specified dataset if it doesn't already exists.
|
package/lib/logs.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.tableCreationError = exports.invalidClustering = exports.hourAndDatePartitioningWarning = exports.invalidTableReference = exports.invalidProjectIdWarning = exports.cannotPartitionExistingTable = exports.removedClustering = exports.updatedClustering = exports.bigQueryTableInsertErrors = exports.firestoreTimePartitioningParametersWarning = exports.firestoreTimePartitionFieldError = exports.addPartitionFieldColumn = exports.addNewColumn = exports.timestampMissingValue = exports.error = exports.dataTypeInvalid = exports.dataInserting = exports.dataInsertRetried = exports.dataInserted = exports.complete = exports.bigQueryViewValidating = exports.bigQueryViewValidated = exports.bigQueryViewUpToDate = exports.bigQueryViewUpdating = exports.bigQueryViewUpdated = exports.bigQueryViewAlreadyExists = exports.bigQueryViewCreating = exports.bigQueryViewCreated = exports.bigQueryUserDefinedFunctionCreated = exports.bigQueryUserDefinedFunctionCreating = exports.bigQueryTableValidating = exports.bigQueryTableValidated = exports.bigQueryTableUpToDate = exports.bigQueryTableUpdating = exports.bigQueryTableUpdated = exports.bigQueryTableCreating = exports.bigQueryTableCreated = exports.bigQueryTableAlreadyExists = exports.bigQuerySchemaViewCreated = exports.bigQueryLatestSnapshotViewQueryCreated = exports.bigQueryErrorRecordingDocumentChange = exports.bigQueryDatasetExists = exports.bigQueryDatasetCreating = exports.bigQueryDatasetCreated = exports.arrayFieldInvalid = void 0;
|
|
18
|
+
exports.failedToInitializeWait = exports.tableCreationError = exports.invalidClustering = exports.hourAndDatePartitioningWarning = exports.invalidTableReference = exports.invalidProjectIdWarning = exports.cannotPartitionExistingTable = exports.removedClustering = exports.updatedClustering = exports.bigQueryTableInsertErrors = exports.firestoreTimePartitioningParametersWarning = exports.firestoreTimePartitionFieldError = exports.addPartitionFieldColumn = exports.addNewColumn = exports.timestampMissingValue = exports.error = exports.dataTypeInvalid = exports.dataInserting = exports.dataInsertRetried = exports.dataInserted = exports.complete = exports.bigQueryViewValidating = exports.bigQueryViewValidated = exports.bigQueryViewUpToDate = exports.bigQueryViewUpdating = exports.bigQueryViewUpdated = exports.bigQueryViewAlreadyExists = exports.bigQueryViewCreating = exports.bigQueryViewCreated = exports.bigQueryUserDefinedFunctionCreated = exports.bigQueryUserDefinedFunctionCreating = exports.bigQueryTableValidating = exports.bigQueryTableValidated = exports.bigQueryTableUpToDate = exports.bigQueryTableUpdating = exports.bigQueryTableUpdated = exports.bigQueryTableCreating = exports.bigQueryTableCreated = exports.bigQueryTableAlreadyExists = exports.bigQuerySchemaViewCreated = exports.bigQueryLatestSnapshotViewQueryCreated = exports.bigQueryErrorRecordingDocumentChange = exports.bigQueryDatasetExists = exports.bigQueryDatasetCreating = exports.bigQueryDatasetCreated = exports.arrayFieldInvalid = void 0;
|
|
19
19
|
const firebase_functions_1 = require("firebase-functions");
|
|
20
20
|
exports.arrayFieldInvalid = (fieldName) => {
|
|
21
21
|
firebase_functions_1.logger.warn(`Array field '${fieldName}' does not contain an array, skipping`);
|
|
@@ -137,7 +137,9 @@ exports.bigQueryTableInsertErrors = (insertErrors) => {
|
|
|
137
137
|
insertErrors.forEach((error) => {
|
|
138
138
|
firebase_functions_1.logger.warn("ROW DATA JSON:");
|
|
139
139
|
firebase_functions_1.logger.warn(error.row);
|
|
140
|
-
|
|
140
|
+
if (error && error.errors) {
|
|
141
|
+
error.errors.forEach((error) => firebase_functions_1.logger.warn(`ROW ERROR MESSAGE: ${error.message}`));
|
|
142
|
+
}
|
|
141
143
|
});
|
|
142
144
|
};
|
|
143
145
|
exports.updatedClustering = (fields) => {
|
|
@@ -168,3 +170,6 @@ exports.invalidClustering = invalidClustering;
|
|
|
168
170
|
exports.tableCreationError = (table, message) => {
|
|
169
171
|
firebase_functions_1.logger.warn(`Error caught creating table`, message);
|
|
170
172
|
};
|
|
173
|
+
exports.failedToInitializeWait = (message) => {
|
|
174
|
+
firebase_functions_1.logger.warn(`Failed while waiting to initialize.`, message);
|
|
175
|
+
};
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"url": "github.com/firebase/extensions.git",
|
|
6
6
|
"directory": "firestore-bigquery-export/firestore-bigquery-change-tracker"
|
|
7
7
|
},
|
|
8
|
-
"version": "1.1.
|
|
8
|
+
"version": "1.1.16",
|
|
9
9
|
"description": "Core change-tracker library for Cloud Firestore Collection BigQuery Exports",
|
|
10
10
|
"main": "./lib/index.js",
|
|
11
11
|
"scripts": {
|