Forum .LRN Q&A: Error deleting from homework folder

Collapse
Posted by Matthew Coupe on
Hi,

I'm getting an error deleting from the homework folder and I'm not sure how to fix it. Any help would be much appreciated... I've seen this post but I'm not sure if it will help me?
https://openacs.org/forums/message-view?message_id=333680

I see this screen: version-delete.tcl
Are you sure that you want to delete this version "Testing Upload File" of "testing-upload-files.txt"? This action cannot be reversed.

Then I get the error at the bottom.

My set up is:
acs-content-repository Content Repository 5.3.2
file-storage File Storage 5.3.1
dotlrn-homework dotLRN Homework 2.3.1

ERROR:

There was a server error processing your request. We apologize.

Take me back where I was (before the error)
Database operation "0or1row" failed
(exception NSDB, "Query was not a statement returning rows.")

while executing
"ns_pg_bind 0or1row nsdb0 {

select file_storage__delete_version(
:item_id,
:version_id
);
}"
("uplevel" body line 1)
invoked from within
"uplevel $ulevel [list ns_pg_bind $type $db $sql]"
("postgresql" arm line 2)
invoked from within
"switch $driverkey {
oracle {
return [uplevel $ulevel [list ns_ora $type $db $sql] $args]
}
..."
invoked from within
"db_exec 0or1row $db $full_statement_name $sql"
invoked from within
"if {[regexp -nocase -- {^\s*select} $test_sql match]} {
# ns_log Debug "PLPGSQL: bypassed anon function"
set selection..."
("uplevel" body line 6)
invoked from within
"uplevel 1 $code_block "
invoked from within
"db_with_handle -dbn $dbn db {
# plsql calls that are simple selects bypass the plpgsql
# mechanism for creating anonymous fun..."
(procedure "db_exec_plsql" line 57)
invoked from within
"db_exec_plsql delete_version "
begin
:1 := file_storage.delete_version(:item_id,:version_id);
end;""
invoked from within
"set parent_id [db_exec_plsql delete_version "
begin
:1 := file_storage.delete_version(:item_id,:version_id);
end..."
("uplevel" body line 10)
invoked from within
"uplevel 1 $transaction_code "
(procedure "db_transaction" line 39)
invoked from within
"db_transaction {

# DRB: damned permissions table has no "on delete cascade" and file storage
# delete assumes there are perms on the ..."
invoked from within
"if {[string equal $confirmed_p "t"]} {
# they have confirmed that they want to delete the version

db_transaction {

# DRB: damned per..."
("uplevel" body line 33)
invoked from within
"uplevel {
ad_page_contract {
confirmation page for version deletion

@author Kevin Scaldeferri (mailto:kevin@arsdigita.com)
@creation-date 10 Nov..."
(procedure "code::tcl::/var/lib/aolserver/nccedudotlrn/packages/dotlrn-h..." line 2)
invoked from within
"code::tcl::$__adp_stub"
invoked from within
"if { [file exists $__adp_stub.tcl] } {

# ensure that data source preparation procedure exists and is up-to-date
adp_init tcl $__adp_stub
..."
("uplevel" body line 3)
invoked from within
"uplevel {

if { [file exists $__adp_stub.tcl] } {

# ensure that data source preparation procedure exists and is up-to-date
adp_init t..."
(procedure "adp_prepare" line 2)
invoked from within
"adp_prepare"
invoked from within
"template::adp_parse [file root [ad_conn file]] {}"
(procedure "adp_parse_ad_conn_file" line 5)
invoked from within
"$handler"
("uplevel" body line 2)
invoked from within
"uplevel $code"
invoked from within
"ad_try {
$handler
} ad_script_abort val {
# do nothing
}"
invoked from within
"rp_serve_concrete_file [ad_conn file]"
(procedure "rp_serve_abstract_file" line 60)
invoked from within
"rp_serve_abstract_file "$root/$path""
("uplevel" body line 2)
invoked from within
"uplevel $code"
invoked from within
"ad_try {
rp_serve_abstract_file "$root/$path"
set tcl_url2file([ad_conn url]) [ad_conn file]
set tcl_url2path_info..."

Collapse
Posted by Dave Bauer on
Go to your error log. You should see a more detailed error message from the database in the log.
Collapse
Posted by Matthew Coupe on
This is from my error log, I can't see a huge amount of difference, I'm never quite sure what syntax I'm looking for here.

Database operation "0or1row" failed
(exception NSDB, "Query was not a statement returning rows.")

while executing
"ns_pg_bind 0or1row nsdb0 {

select file_storage__delete_version(
:item_id,
:version_id
);
}"
("uplevel" body line 1)
invoked from within
"uplevel $ulevel [list ns_pg_bind $type $db $sql]"
("postgresql" arm line 2)
invoked from within
"switch $driverkey {
oracle {
return [uplevel $ulevel [list ns_ora $type $db $sql] $args]
}
..."
invoked from within
"db_exec 0or1row $db $full_statement_name $sql"
invoked from within
"if {[regexp -nocase -- {^\s*select} $test_sql match]} {
# ns_log Debug "PLPGSQL: bypassed anon function"
set selection..."
("uplevel" body line 6)
invoked from within
"uplevel 1 $code_block "
invoked from within
"db_with_handle -dbn $dbn db {
# plsql calls that are simple selects bypass the plpgsql
# mechanism for creating anonymous fun..."
(procedure "db_exec_plsql" line 57)
invoked from within
"db_exec_plsql delete_version "
begin
:1 := file_storage.delete_version(:item_id,:version_id);
end;""
invoked from within
"set parent_id [db_exec_plsql delete_version "
begin
:1 := file_storage.delete_version(:item_id,:version_id);
end..."
("uplevel" body line 10)
invoked from within
"uplevel 1 $transaction_code "
(procedure "db_transaction" line 1)
invoked from within
"db_transaction {

# DRB: damned permissions table has no "on delete cascade" and file storage
# delete assumes there are perms on the ..."
invoked from within
"if {[string equal $confirmed_p "t"]} {
# they have confirmed that they want to delete the version

db_transaction {

# DRB: damned per..."
("uplevel" body line 33)
invoked from within
"uplevel {
ad_page_contract {
confirmation page for version deletion

@author Kevin Scaldeferri (mailto:kevin@arsdigita.com)
@creation-date 10 Nov..."
(procedure "code::tcl::/var/lib/aolserver/nccedudotlrn/packages/dotlrn-h..." line 2)
invoked from within
"code::tcl::$__adp_stub"
invoked from within
"if { [file exists $__adp_stub.tcl] } {

# ensure that data source preparation procedure exists and is up-to-date
adp_init tcl $__adp_stub
..."
("uplevel" body line 3)
invoked from within
"uplevel {

if { [file exists $__adp_stub.tcl] } {

# ensure that data source preparation procedure exists and is up-to-date
adp_init t..."
(procedure "adp_prepare" line 2)
invoked from within
"adp_prepare"
invoked from within
"template::adp_parse [file root [ad_conn file]] {}"
(procedure "adp_parse_ad_conn_file" line 5)
invoked from within
"$handler"
("uplevel" body line 2)
invoked from within
"uplevel $code"
invoked from within
"ad_try {
$handler
} ad_script_abort val {
# do nothing
}"
invoked from within
"rp_serve_concrete_file [ad_conn file]"
(procedure "rp_serve_abstract_file" line 60)
invoked from within
"rp_serve_abstract_file "$root/$path""
("uplevel" body line 2)
invoked from within
"uplevel $code"
invoked from within
"ad_try {
rp_serve_abstract_file "$root/$path"
set tcl_url2file([ad_conn url]) [ad_conn file]
set tcl_url2path_info..."

Collapse
Posted by Dave Bauer on
Scroll back in the log a bit. You should see another error from the datbase. This error is from the database driver. (exception NSDB, "Query was not a statement returning rows.")

All database errors return no rows, so its not really informative except to say the driver did not receive the response it expected. Postgresql itself should also give a message on what was wrong with the actual query.

Collapse
Posted by Matthew Coupe on
Ahh yes, so there is.

Error: Ns_PgExec: result status: 7 message: ERROR: update or delete on table "lobs" violates foreign key constraint "$1" on table "cr_revisions"
DETAIL: Key (lob_id)=(7779) is still referenced from table "cr_revisions".
CONTEXT: SQL statement "delete from lobs where lob_id = $1 and refcount = 0"
PL/pgSQL function "on_lob_ref" line 19 at SQL statement
SQL statement "delete from cr_revisions where revision_id = 9752914"
PL/pgSQL function "acs_object__delete" line 45 at execute statement
SQL statement "SELECT acs_object__delete( $1 )"
PL/pgSQL function "content_revision__del" line 56 at perform
SQL statement "SELECT content_revision__del( $1 )"
PL/pgSQL function "content_revision__delete" line 4 at perform
SQL statement "SELECT content_revision__delete( $1 )"
PL/pgSQL function "file_storage__delete_version" line 11 at perform

Collapse
Posted by Matthew Coupe on
I've had a good look at this and I'm not quite sure what this problem is. Can anyone point me in the right direction?

Could it be caused by a slight mismatch between:
acs-content-repository Content Repository 5.3.2
file-storage File Storage 5.3.1

Collapse
Posted by Dave Bauer on
Hi

I went back and read through this.

So what is happening is that the content is stored in the lobs table.

Each revision, if the content (the file) is the same, will refer to the same row in the lobs table.

The function is attempting to delete the row from the lobs table, although there are still revisions referencing that row.