backend/server/handlers/xmlrpc/abrt.py
| 19 ++++++++--
java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml
| 1
java/code/src/com/redhat/rhn/domain/server/Crash.java
| 17 ++++++++
java/code/src/com/redhat/rhn/manager/system/CrashManager.java
| 19 +++++++++-
schema/spacewalk/common/tables/rhnServerCrash.sql
| 1
schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.oracle
| 1
schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.postgresql
| 3 +
7 files changed, 56 insertions(+), 5 deletions(-)
New commits:
commit 276ffd44a667bceb23cfc6d961ec61a01ca5e566
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Mon Feb 25 14:27:46 2013 +0100
abrt: delete crash: remove content from filer
diff --git a/backend/server/handlers/xmlrpc/abrt.py
b/backend/server/handlers/xmlrpc/abrt.py
index 76ceee5..591bc47 100644
--- a/backend/server/handlers/xmlrpc/abrt.py
+++ b/backend/server/handlers/xmlrpc/abrt.py
@@ -15,6 +15,7 @@
import base64
import os
+import stat
from spacewalk.common.rhnException import rhnFault
from spacewalk.common.rhnConfig import CFG
@@ -36,13 +37,15 @@ insert into rhnServerCrash (
server_id,
crash,
path,
- count)
+ count,
+ storage_path)
values (
sequence_nextval('rhn_server_crash_id_seq'),
:server_id,
:crash,
:path,
- :crash_count)
+ :crash_count,
+ :storage_path)
""")
_query_update_pkg_data = rhnSQL.Statement("""
@@ -135,6 +138,12 @@ class Abrt(rhnHandler):
log_debug(1, self.server_id, "The crash information is invalid or
incomplete: %s" % str(crash_data))
raise rhnFault(5000)
+ server_org_id = self.server.server['org_id']
+ server_crash_dir = get_crash_path(str(server_org_id), str(self.server_id),
crash_data['crash'])
+ if not server_crash_dir:
+ log_debug(1, self.server_id, "Error composing crash directory
path")
+ raise rhnFault(5002)
+
crash_id = self._get_crash_id(self.server_id, crash_data['crash'])
log_debug(1, "crash_id: %s" % crash_id)
@@ -147,7 +156,8 @@ class Abrt(rhnHandler):
server_id = self.server_id,
crash = crash_data['crash'],
path = crash_data['path'],
- crash_count = crash_data['count'])
+ crash_count = crash_data['count'],
+ storage_path = server_crash_dir)
rhnSQL.commit()
self._update_package_data(self._get_crash_id(self.server_id,
crash_data['crash']), pkg_data)
return 1
@@ -207,6 +217,9 @@ class Abrt(rhnHandler):
if not os.path.exists(absolute_dir):
log_debug(1, self.server_id, "Creating crash directory: %s" %
absolute_dir)
os.makedirs(absolute_dir)
+ mode = stat.S_IRWXU | stat.S_IRWXG | stat.S_IROTH | stat.S_IXOTH
+ os.chmod(absolute_dir, mode)
+ os.chmod(os.path.dirname(os.path.normpath(absolute_dir)), mode)
log_debug(1, self.server_id, "Creating crash file: %s" %
absolute_file)
f = open(absolute_file, 'w+')
diff --git a/java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml
b/java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml
index 4e98522..26b4412 100644
--- a/java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/server/Crash.hbm.xml
@@ -30,6 +30,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="packageNameId" column="package_name_id"
type="long"/>
<property name="packageEvrId" column="package_evr_id"
type="long"/>
<property name="packageArchId" column="package_arch_id"
type="long"/>
+ <property name="storagePath" column="storage_path"
type="string"/>
<property name="created" type="timestamp"
column="created" />
<property name="modified" type="timestamp"
column="modified" />
</class>
diff --git a/java/code/src/com/redhat/rhn/domain/server/Crash.java
b/java/code/src/com/redhat/rhn/domain/server/Crash.java
index 0b10d6f..732bd34 100644
--- a/java/code/src/com/redhat/rhn/domain/server/Crash.java
+++ b/java/code/src/com/redhat/rhn/domain/server/Crash.java
@@ -42,6 +42,7 @@ public class Crash extends BaseDomainHelper {
private Long packageNameId;
private Long packageEvrId;
private Long packageArchId;
+ private String storagePath;
private Date created;
private Date modified;
private Set<CrashFile> crashFiles;
@@ -310,6 +311,22 @@ public class Crash extends BaseDomainHelper {
}
/**
+ * Get the crash storage path.
+ * @return Returns the crash storage path.
+ */
+ public String getStoragePath() {
+ return storagePath;
+ }
+
+ /**
+ * Set the crash storage path.
+ * @param storagePathIn The storage path to set.
+ */
+ public void setStoragePath(String storagePathIn) {
+ storagePath = storagePathIn;
+ }
+
+ /**
* Returns the created date.
* @return the created date.
*/
diff --git a/java/code/src/com/redhat/rhn/manager/system/CrashManager.java
b/java/code/src/com/redhat/rhn/manager/system/CrashManager.java
index c63aaeb..d426d23 100644
--- a/java/code/src/com/redhat/rhn/manager/system/CrashManager.java
+++ b/java/code/src/com/redhat/rhn/manager/system/CrashManager.java
@@ -15,15 +15,19 @@
package com.redhat.rhn.manager.system;
+import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.common.hibernate.LookupException;
import com.redhat.rhn.domain.server.Crash;
import com.redhat.rhn.domain.server.CrashFactory;
+import com.redhat.rhn.domain.server.CrashFile;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.xmlrpc.NoSuchCrashException;
import com.redhat.rhn.frontend.xmlrpc.NoSuchSystemException;
import com.redhat.rhn.manager.BaseManager;
+import java.io.File;
+
import org.apache.log4j.Logger;
/**
@@ -60,12 +64,25 @@ public class CrashManager extends BaseManager {
}
/**
- * Delete a crash
+ * Delete a crash from database and filer.
* @param user User to check the permissions for.
* @param crashId The id of the crash to delete.
*/
public static void deleteCrash(User user, Long crashId) {
Crash crash = lookupCrashByUserAndId(user, crashId);
+
+ // FIXME: async deletion via taskomatic?
+ File storageDir = new File(Config.get().getString("web.mount_point"),
+ crash.getStoragePath());
+
+ for (CrashFile cf : crash.getCrashFiles()) {
+ File crashFile = new File(storageDir, cf.getFilename());
+ if (crashFile.exists() && crashFile.isFile()) {
+ crashFile.delete();
+ }
+ }
+ storageDir.delete();
+
CrashFactory.delete(crash);
}
}
diff --git a/schema/spacewalk/common/tables/rhnServerCrash.sql
b/schema/spacewalk/common/tables/rhnServerCrash.sql
index ed5751b..486818a 100644
--- a/schema/spacewalk/common/tables/rhnServerCrash.sql
+++ b/schema/spacewalk/common/tables/rhnServerCrash.sql
@@ -41,6 +41,7 @@ create table rhnServerCrash
package_arch_id number
constraint rhn_server_crash_arch_id_fk
references rhnPackageArch(id),
+ storage_path varchar(1024),
created timestamp with local time zone
default (current_timestamp) not null,
modified timestamp with local time zone
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.oracle
b/schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.oracle
index ed5751b..a2d3795 100644
---
a/schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.oracle
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.oracle
@@ -41,6 +41,7 @@ create table rhnServerCrash
package_arch_id number
constraint rhn_server_crash_arch_id_fk
references rhnPackageArch(id),
+ storage_path varchar2(1024),
created timestamp with local time zone
default (current_timestamp) not null,
modified timestamp with local time zone
diff --git
a/schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.postgresql
b/schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.postgresql
index c9fe8a7..6e47250 100644
---
a/schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.postgresql
+++
b/schema/spacewalk/upgrade/spacewalk-schema-1.8-to-spacewalk-schema-1.9/013-rhnServerCrash.sql.postgresql
@@ -1,4 +1,4 @@
--- oracle equivalent source sha1 fe95c7a174fbc86d6979350136a7fd11641e24aa
+-- oracle equivalent source sha1 9514c6e098beb581d49e6cd0bc28d1390690a985
--
-- Copyright (c) 2013 Red Hat, Inc.
--
@@ -42,6 +42,7 @@ create table rhnServerCrash
package_arch_id NUMERIC
constraint rhn_server_crash_arch_id_fk
references rhnPackageArch(id),
+ storage_path VARCHAR(1024),
created TIMESTAMPTZ
default (current_timestamp) not null,
modified TIMESTAMPTZ