I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 4b0d1aac authored by jrandom's avatar jrandom Committed by zzz
Browse files

only read from or write to disk if necessary

parent fb7c06aa
No related branches found
No related tags found
No related merge requests found
...@@ -39,6 +39,8 @@ public class KeyManager { ...@@ -39,6 +39,8 @@ public class KeyManager {
private SigningPrivateKey _signingPrivateKey; private SigningPrivateKey _signingPrivateKey;
private SigningPublicKey _signingPublicKey; private SigningPublicKey _signingPublicKey;
private Map _leaseSetKeys; // Destination --> LeaseSetKeys private Map _leaseSetKeys; // Destination --> LeaseSetKeys
private boolean _alreadyReadFromDisk;
private boolean _pendingWrite;
public final static String PROP_KEYDIR = "router.keyBackupDir"; public final static String PROP_KEYDIR = "router.keyBackupDir";
public final static String DEFAULT_KEYDIR = "keyBackup"; public final static String DEFAULT_KEYDIR = "keyBackup";
...@@ -56,20 +58,34 @@ public class KeyManager { ...@@ -56,20 +58,34 @@ public class KeyManager {
setSigningPrivateKey(null); setSigningPrivateKey(null);
setSigningPublicKey(null); setSigningPublicKey(null);
_leaseSetKeys = new HashMap(); _leaseSetKeys = new HashMap();
_alreadyReadFromDisk = false;
_pendingWrite = false;
_context.jobQueue().addJob(new SynchronizeKeysJob()); _context.jobQueue().addJob(new SynchronizeKeysJob());
} }
/** Configure the router's private key */ /** Configure the router's private key */
public void setPrivateKey(PrivateKey key) { _privateKey = key; } public void setPrivateKey(PrivateKey key) {
_privateKey = key;
_pendingWrite = true;
}
public PrivateKey getPrivateKey() { return _privateKey; } public PrivateKey getPrivateKey() { return _privateKey; }
/** Configure the router's public key */ /** Configure the router's public key */
public void setPublicKey(PublicKey key) { _publicKey = key; } public void setPublicKey(PublicKey key) {
_publicKey = key;
_pendingWrite = true;
}
public PublicKey getPublicKey() { return _publicKey; } public PublicKey getPublicKey() { return _publicKey; }
/** Configure the router's signing private key */ /** Configure the router's signing private key */
public void setSigningPrivateKey(SigningPrivateKey key) { _signingPrivateKey = key; } public void setSigningPrivateKey(SigningPrivateKey key) {
_signingPrivateKey = key;
_pendingWrite = true;
}
public SigningPrivateKey getSigningPrivateKey() { return _signingPrivateKey; } public SigningPrivateKey getSigningPrivateKey() { return _signingPrivateKey; }
/** Configure the router's signing public key */ /** Configure the router's signing public key */
public void setSigningPublicKey(SigningPublicKey key) { _signingPublicKey = key; } public void setSigningPublicKey(SigningPublicKey key) {
_signingPublicKey = key;
_pendingWrite = true;
}
public SigningPublicKey getSigningPublicKey() { return _signingPublicKey; } public SigningPublicKey getSigningPublicKey() { return _signingPublicKey; }
public void registerKeys(Destination dest, SigningPrivateKey leaseRevocationPrivateKey, PrivateKey endpointDecryptionKey) { public void registerKeys(Destination dest, SigningPrivateKey leaseRevocationPrivateKey, PrivateKey endpointDecryptionKey) {
...@@ -78,13 +94,25 @@ public class KeyManager { ...@@ -78,13 +94,25 @@ public class KeyManager {
synchronized (_leaseSetKeys) { synchronized (_leaseSetKeys) {
_leaseSetKeys.put(dest, keys); _leaseSetKeys.put(dest, keys);
} }
_pendingWrite = true;
}
/**
* True if we've never read the data from disk or if we've
* updated data in memory.
*/
private boolean needsSync() {
return !(_alreadyReadFromDisk && !_pendingWrite);
} }
public LeaseSetKeys unregisterKeys(Destination dest) { public LeaseSetKeys unregisterKeys(Destination dest) {
_log.info("Unregistering keys for destination " + dest.calculateHash().toBase64()); _log.info("Unregistering keys for destination " + dest.calculateHash().toBase64());
LeaseSetKeys rv = null;
synchronized (_leaseSetKeys) { synchronized (_leaseSetKeys) {
return (LeaseSetKeys)_leaseSetKeys.remove(dest); rv = (LeaseSetKeys)_leaseSetKeys.remove(dest);
} }
_pendingWrite = true;
return rv;
} }
public LeaseSetKeys getKeys(Destination dest) { public LeaseSetKeys getKeys(Destination dest) {
...@@ -118,12 +146,14 @@ public class KeyManager { ...@@ -118,12 +146,14 @@ public class KeyManager {
getTiming().setStartAfter(KeyManager.this._context.clock().now()+DELAY); getTiming().setStartAfter(KeyManager.this._context.clock().now()+DELAY);
KeyManager.this._context.jobQueue().addJob(this); KeyManager.this._context.jobQueue().addJob(this);
} }
private void syncKeys(File keyDir) { private void syncKeys(File keyDir) {
if (!needsSync()) return;
syncPrivateKey(keyDir); syncPrivateKey(keyDir);
syncPublicKey(keyDir); syncPublicKey(keyDir);
syncSigningKey(keyDir); syncSigningKey(keyDir);
syncVerificationKey(keyDir); syncVerificationKey(keyDir);
_alreadyReadFromDisk = true;
} }
private void syncPrivateKey(File keyDir) { private void syncPrivateKey(File keyDir) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment