aws-sdk/dynose是否可能导致DynamoDB本地的SQLite语法错误



上下文

在从Nodejs 6升级到12时发现问题,以及项目的依赖关系。使用发电机2.3使用docker组合的容器化应用程序:后端和仅动态数据库实例

dynamodb的Docker文件:

FROM openjdk:latest
# Bundle dynamodb
COPY . .
EXPOSE 8000
CMD [ "java", "-jar", "DynamoDBLocal.jar" ]

问题:当提升容器时,在后台初始化dynamodb实例后,会抛出以下错误,导致任何后续查询或调用在后台暂停并超时返回。

错误

dynamodb_1  | Sep 03, 2020 8:14:36 AM com.almworks.sqlite4java.Internal log
dynamodb_1  | WARNING: [sqlite] SQLiteDBAccess$10@b6f156c: job exception
dynamodb_1  | com.almworks.sqlite4java.SQLiteException: [1] DB[1] prepare() DROP INDEX Foobar*HVI; [near "*": syntax error]
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1436)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:580)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:635)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteConnection.prepare(SQLiteConnection.java:622)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.getPreparedStatement(AmazonDynamoDBOfflineSQLiteJob.java:138)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$10.dropGSISQLiteIndex(SQLiteDBAccess.java:1221)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$10.dropIndices(SQLiteDBAccess.java:1169)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$10.doWork(SQLiteDBAccess.java:1155)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.SQLiteDBAccess$10.doWork(SQLiteDBAccess.java:1152)
dynamodb_1  |   at com.amazonaws.services.dynamodbv2.local.shared.access.sqlite.AmazonDynamoDBOfflineSQLiteJob.job(AmazonDynamoDBOfflineSQLiteJob.java:97)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteJob.execute(SQLiteJob.java:372)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue.executeJob(SQLiteQueue.java:534)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:667)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77)
dynamodb_1  |   at com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue.java:205)
dynamodb_1  |   at java.base/java.lang.Thread.run(Thread.java:832)

我怀疑这是在通过Dynamose的model((创建表时发生的,该模型在后台调用aws的DynamoDB createTable方法。

我目前只是在分析nodejs 12和generanose 2.3的升级。在本地,我更喜欢让它运行来测试项目的其他部分,所以我不介意更新索引和重新创建表,但希望知道这个语法错误是从哪里来的,以修复它并继续。

问题:aws-sdk或generanose是否可能导致DynamoDB本地实例尝试删除带有SQLite语法错误的索引?

问题是Dynamose 0.8.7曾经支持具有哈希键和索引标记为全局的属性的Schema。当跳转到最新版本时,一些突破性的更改使它在查询中添加了像"*"这样的字符,从而使SQLite抱怨。

示例:

const FoobarSchema = new dynamoose.Schema({
foo: {
type: String,
hashkey: true,
index: {
global:true
}
}
});
const Foobar = dynamoose.model('Foobar', FoobarSchema, Options); // Blow up

我是这个项目和DynamoDb的新手。我不明白把这两个条件放在一起的原因是什么,以及是否应该支持它。我会在有机会的时候更深入地研究并更新这一点。

删除;共享本地实例.db";在我的";docker/dynolderdb";文件夹为我解决了这个问题(文件在docker compose上再次生成,一切运行良好(

相关内容

最新更新