【发布时间】:2020-01-05 13:59:23
【问题描述】:
我正在使用 Cloud Functions 和 nodeJS 客户端库将数据插入 Spanner。该函数被Pub/sub约2次/秒调用,使用事务插入数据。
阅读文档时,它清楚地表明您必须通过调用来关闭会话: database.close(); 当我这样做时,它会抛出一个错误:
Error: Database is closed. at SessionPool.<anonymous>
(/srv/node_modules/@google-cloud/spanner/build/src/session-
pool.js:264:23)
at Generator.next (<anonymous>) at /srv/node_modules/@google-
cloud/spanner/build/src/session-pool.js:22:71 at new Promise
(<anonymous>) at __awaiter (/srv/node_modules/@google-
cloud/spanner/build/src/session-pool.js:18:12) at SessionPool._acquire
(/srv/node_modules/@google-cloud/spanner/build/src/session-
pool.js:262:16) at SessionPool.getReadSession
(/srv/node_modules/@google-cloud/spanner/build/src/session-
pool.js:204:14) at Database.runStream (/srv/node_modules/@google-
cloud/spanner/build/src/database.js:1157:20) at Database.run
(/srv/node_modules/@google-cloud/spanner/build/src/database.js:988:14)
at PromiseCtor (/srv/node_modules/@google-
cloud/promisify/build/src/index.js:71:28)
所以我的问题是:Spanner 会话在 Cloud 函数中的处理方式是否不同?它是否缓存会话以供下次调用? 我做错了什么,我不应该在云函数中调用 database.close() 吗?
我在返回transaction.commit()和调用transaction.end()之后调用database.close();
谢谢!
【问题讨论】:
-
你说的是this docs 对吧?你也看过tutorial of Cloud functions and Cloud Spanner吗?
-
是的,这些是我读过的文档。在后一个链接中,不调用 database.close() 。那么我应该假设数据库连接在云功能中得到处理和兑现吗?还是为每个 Cloud 函数调用创建一个新会话?
标签: google-cloud-platform google-cloud-functions google-cloud-spanner