Add additional permission checks in order to find potential problems before commit()

Add some comments, remove debug logging output
This commit is contained in:
hns 2004-02-17 15:27:50 +00:00
parent 6f3d080b34
commit 209bfb1c35

View file

@ -55,7 +55,11 @@ public final class XmlDatabase implements IDatabase {
dbHomeDir = new File(dbHome); dbHomeDir = new File(dbHome);
if (!dbHomeDir.exists() && !dbHomeDir.mkdirs()) { if (!dbHomeDir.exists() && !dbHomeDir.mkdirs()) {
throw new RuntimeException("Couldn't create DB-directory"); throw new DatabaseException("Can't create database directory "+dbHomeDir);
}
if (!dbHomeDir.canWrite()) {
throw new DatabaseException("No write permission for database directory "+dbHomeDir);
} }
this.encoding = nmgr.app.getCharset(); this.encoding = nmgr.app.getCharset();
@ -143,6 +147,9 @@ public final class XmlDatabase implements IDatabase {
this.idgen = idgen; this.idgen = idgen;
File file = new File(dbHomeDir, "idgen.xml"); File file = new File(dbHomeDir, "idgen.xml");
if (file.exists() && !file.canWrite()) {
throw new IOException("No write permission for "+file);
}
Resource res = new Resource(file, tmp); Resource res = new Resource(file, tmp);
txn.addResource(res, ITransaction.ADDED); txn.addResource(res, ITransaction.ADDED);
} }
@ -202,6 +209,9 @@ public final class XmlDatabase implements IDatabase {
writer.close(); writer.close();
File file = new File(dbHomeDir, kstr+".xml"); File file = new File(dbHomeDir, kstr+".xml");
if (file.exists() && !file.canWrite()) {
throw new IOException("No write permission for "+file);
}
Resource res = new Resource(file, tmp); Resource res = new Resource(file, tmp);
txn.addResource(res, ITransaction.ADDED); txn.addResource(res, ITransaction.ADDED);
} }
@ -251,10 +261,12 @@ public final class XmlDatabase implements IDatabase {
for (int i=0; i<l; i++) { for (int i=0; i<l; i++) {
Resource res = (Resource) writeFiles.get(i); Resource res = (Resource) writeFiles.get(i);
try { try {
// move temporary file to permanent name
if (res.tmpfile.renameTo(res.file)) { if (res.tmpfile.renameTo(res.file)) {
nmgr.app.logEvent(res.tmpfile+" -> "+res.file); // success - delete tmp file
res.tmpfile.delete(); res.tmpfile.delete();
} else { } else {
// error - leave tmp file and print a message
nmgr.app.logError("*** Error committing "+res.file); nmgr.app.logError("*** Error committing "+res.file);
nmgr.app.logError("*** Committed version is in "+res.tmpfile); nmgr.app.logError("*** Committed version is in "+res.tmpfile);
} }
@ -267,6 +279,7 @@ public final class XmlDatabase implements IDatabase {
l = deleteFiles.size(); l = deleteFiles.size();
for (int i=0; i<l; i++) { for (int i=0; i<l; i++) {
Resource res = (Resource) deleteFiles.get(i); Resource res = (Resource) deleteFiles.get(i);
// delete files enlisted as deleted
try { try {
res.file.delete(); res.file.delete();
} catch (SecurityException ignore) { } catch (SecurityException ignore) {
@ -285,6 +298,7 @@ public final class XmlDatabase implements IDatabase {
int l = writeFiles.size(); int l = writeFiles.size();
for (int i=0; i<l; i++) { for (int i=0; i<l; i++) {
Resource res = (Resource) writeFiles.get(i); Resource res = (Resource) writeFiles.get(i);
// delete tmp files created by this transaction
try { try {
res.tmpfile.delete(); res.tmpfile.delete();
} catch (SecurityException ignore) { } catch (SecurityException ignore) {
@ -329,4 +343,3 @@ public final class XmlDatabase implements IDatabase {
} }