使用CFWheels我有时会收到一条错误电子邮件,指出存在数据库错误[Amazon](500310) Invalid operation: table 250818 dropped by concurrent transaction
。在阅读完这篇文章后,似乎在第一笔交易在第一笔交易完成之前开始时就会发生这种情况。 (我不是在这里编辑数据,只是SELECT语句)。
奇怪的部分在我的错误邮件的跟踪中我得到如下内容:
Line 85 in models\ModelA.cfc
Line 73 in controllers\ControllerA.cfc
Line 85 in models\ModelA.cfc
Line 73 in controllers\ControllerA.cfc
就像它试图两次运行相同的代码一样。仅供参考,你不能按照我的代码从73到85然后再回到73.你就是不能。它不起作用。你确实从73到85,这是有道理的,但我不明白为什么它会这样做两次。
什么会导致我的代码至少看起来像是在同一个请求中运行两次,因为我认为这是发生此DB错误的根本原因。
编辑:发生这种情况的示例
控制器:
<cfparam name="params.key" default="0" />
<cfset resource = model("courseResource").findByKey(params.key) />
<cfif isObject(resource)>
<cfset course = model('Course').courseInfo(resource.id) />
<cfquery dbtype="query" name="course">
SELECT * FROM course ORDER BY id
</cfquery>
<!--- HERE IS WHERE ERROR OCCURRED --->
<cfset var enrollment = model("course").getCourseEnrollment(resource.id) />
<cfset resource.handoutdate = dateFormat(resource.handoutDate,'mm/dd/yyyy') />
<cfelse>
<cfset logEvent(SESSION.user.getProperty('id'),'Editing course resource - Missing',params.key) />
<cfset redirectTo(back="true",error="Course resource could not be found") />
</cfif>
模型功能:
<cfargument name="id" type="string" required="true" />
<cfargument name="students" type="string" required="false" default="" />
<cfquery datasource="DSN" name="local.qEnrollment">
SELECT
DISTINCT *fieldnames*
FROM course_dim c
INNER JOIN course_section_dim cs ON cs.course_id = c.id
INNER JOIN enrollment_dim e ON e.course_section_id = cs.id AND e.type = 'TypeName' AND e.workflow_state = 'active'
INNER JOIN user_dim u ON u.id = e.user_id
INNER JOIN pseudonym_dim p ON p.user_id = u.id
WHERE c.id IN (<cfqueryparam value="#ARGUMENTS.id#" list="yes" />)
AND c.sis_source_id IS NOT NULL
<cfif ARGUMENTS.students NEQ ''>
AND p.unique_name IN (<cfqueryparam value="#ARGUMENTS.students#" list="yes" />)
</cfif>
AND e.workflow_state = 'active'
ORDER BY u.name
</cfquery>
<cfreturn qEnrollment />
我不确定你能从中得到什么,但实质上就是这样。我的意思是没有什么疯狂的。我只是不明白调用模型函数的行如何在跟踪中出现两次。这没有任何意义。