代码行多次运行会导致并发事务

时间:2016-06-28 15:26:17

标签: coldfusion amazon-redshift cfwheels

使用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 />

我不确定你能从中得到什么,但实质上就是这样。我的意思是没有什么疯狂的。我只是不明白调用模型函数的行如何在跟踪中出现两次。这没有任何意义。

0 个答案:

没有答案