gpt4 book ai didi

amazon-dynamodb - 无法创建复合索引,卡在 INSTALLED

转载 作者:行者123 更新时间:2023-12-03 15:00:36 25 4
gpt4 key购买 nike

我无法创建索引。我的 Gremlin 代码如下:

usernameProperty = mgmt.getPropertyKey('username')
usernameIndex = mgmt.buildIndex('byUsernameUnique', Vertex.class).addKey(usernameProperty).unique().buildCompositeIndex()
mgmt.setConsistency(usernameIndex, ConsistencyModifier.LOCK)
mgmt.commit()

在我收到两个错误后不久:

18:04:57 ERROR com.thinkaurelius.titan.graphdb.database.management.ManagementLogger - Evicted [1@0a00009d2537-ip-10-0-0-1572] from cache but waiting too long for transactions to close. Stale transaction alert on: [standardtitantx[0x6549ce71]] 18:04:57 ERROR com.thinkaurelius.titan.graphdb.database.management.ManagementLogger - Evicted [1@0a00009d2537-ip-10-0-0-1572] from cache but waiting too long for transactions to close. Stale transaction alert on: [standardtitantx[0x2a2815cc], standardtitantx[0x025dc2c0]]



索引状态卡在 INSTALLED :
usernameIndex.getIndexStatus(usernameProperty)
==>INSTALLED

我读到失败的实例可能会导致问题,但对正在运行的实例的检查仅显示一个:
mgmt.getOpenInstances()
==>0a00009d3011-ip-10-0-0-1572(current)

我也试过发出 REGISTER_INDEX操作,它也会从事务缓存中被逐出,并显示类似的错误消息:
mgmt.updateIndex(usernameIndex, SchemaAction.REGISTER_INDEX).get()
mgmt.commit()

我也试过多次重启服务器。

注册过程似乎只是超时,导致从事务缓存中“逐出”。我已经等了 48 小时,以确保这不是一个缓慢的过程。对 Titan 的正常读取、写入和相关提交似乎工作正常,我只是无法创建此索引。我被卡住了,还有什么我可以尝试的吗?有没有办法延长该交易的超时时间?

我正在使用 DynamoDB 后端运行 Titan 1.0.0(使用 AWS 提供的设置 CloudFormation template )。

编辑:
这是我粘贴到 Gremlin 中的完整命令,并添加了 awaitGraphStatus @M-T-A 建议的步骤:
mgmt = graph.openManagement();
usernameIndex = mgmt.getPropertyKey('usernameIndex');
mgmt.buildIndex('byUsername',Vertex.class).addKey(usernameIndex).unique().buildCompositeIndex();
// I have tried with and without a commit here: mgmt.commit();
mgmt.awaitGraphIndexStatus(graph, 'byUsername').status(SchemaStatus.REGISTERED).timeout(10, java.time.temporal.ChronoUnit.MINUTES).call();

这会导致以下错误:

java.lang.NullPointerException at com.thinkaurelius.titan.graphdb.database.management.GraphIndexStatusWatcher.call(GraphIndexStatusWatcher.java:52) at com.thinkaurelius.titan.graphdb.database.management.GraphIndexStatusWatcher.call(GraphIndexStatusWatcher.java:18) at java_util_concurrent_Callable$call.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:114) at groovysh_evaluate.run(groovysh_evaluate:3) at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) at org.codehaus.groovy.tools.shell.Interpreter.evaluate(Interpreter.groovy:69) at org.codehaus.groovy.tools.shell.Groovysh.execute(Groovysh.groovy:185) at org.codehaus.groovy.tools.shell.Shell.leftShift(Shell.groovy:119) at org.codehaus.groovy.tools.shell.ShellRunner.work(ShellRunner.groovy:94)



我还将注意到禁用和删除索引的例程也失败了。
mgmt = graph.openManagement()
theIndex = mgmt.getGraphIndex('byUsername')
mgmt.updateIndex(theIndex, SchemaAction.DISABLE_INDEX).get()
mgmt.commit()
mgmt.awaitGraphIndexStatus(graph, 'byUsername').status(SchemaStatus.DISABLED).timeout(10, java.time.temporal.ChronoUnit.MINUTES).call();
m = graph.openManagement()
i = m.getGraphIndex('byUsername')
m.updateIndex(i, SchemaAction.REMOVE_INDEX).get()
m.commit()

19:26:26 ERROR com.thinkaurelius.titan.graphdb.database.management.ManagementLogger - Evicted [1@ac1f3fa810472-ip-172-31-63-1681] from cache but waiting too long for transactions to close. Stale transaction alert on: [standardtitantx[0x2314cd97], standardtitantx[0x39f8adc0], standardtitantx[0x09de1b85]]



编辑2:
尝试在同一事务中创建新的属性键和索引确实有效!但这是否意味着我不能在现有的属性键上创建索引??
graph.tx().rollback();
mgmt = graph.openManagement();
indexName = 'byUsernameTest2';
propertyKeyName = 'testPropertyName2';
propertyKey = mgmt.makePropertyKey(propertyKeyName).dataType(String.class).cardinality(Cardinality.SINGLE).make();
mgmt.buildIndex(indexName,Vertex.class).addKey(propertyKey).buildCompositeIndex();
mgmt.commit();
graph.tx().commit();
mgmt.awaitGraphIndexStatus(graph, indexName).status(SchemaStatus.REGISTERED).timeout(10, java.time.temporal.ChronoUnit.MINUTES).call();
mgmt.commit();

暂停后,结果如下:

This management system instance has been closed



尝试获取新索引会导致:
mgmt = graph.openManagement();
index = mgmt.getGraphIndex('byUsernameTest2');
propkey = mgmt.getPropertyKey('testPropertyName2');
index.getIndexStatus(propkey);

==>ENABLED

最佳答案

如果您正在运行多个 Titan 实例,您应该意识到它们需要在索引可用之前进行协调。

此外,围绕事务管理以及在什么情况下事务将保持打开状态存在各种微妙之处;我相信 Titan 1.0.0 在这方面没有 TinkerPop 的最新版本。您是否尝试过在启动后立即创建索引?

最后,索引创建过程会有所不同,具体取决于被索引的属性键之前是否被使用过。您是尝试索引新键还是现有键?

关于amazon-dynamodb - 无法创建复合索引,卡在 INSTALLED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35656531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com