From f5f411b62f0182ca7570fddd0cd76434abe2de0c Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Fri, 21 Oct 2016 18:08:31 +0000 Subject: [PATCH] Data: Cache serialized leasesets on floodfills --- core/java/src/net/i2p/data/LeaseSet.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/core/java/src/net/i2p/data/LeaseSet.java b/core/java/src/net/i2p/data/LeaseSet.java index 5bcf28b215..4631644d6d 100644 --- a/core/java/src/net/i2p/data/LeaseSet.java +++ b/core/java/src/net/i2p/data/LeaseSet.java @@ -72,6 +72,8 @@ public class LeaseSet extends DatabaseEntry { private List<Lease> _decryptedLeases; private boolean _decrypted; private boolean _checked; + // cached byte version + private volatile byte _byteified[]; /** * Unlimited before 0.6.3; @@ -92,7 +94,7 @@ public class LeaseSet extends DatabaseEntry { private static final int OLD_MAX_LEASES = 6; public LeaseSet() { - _leases = new ArrayList<Lease>(OLD_MAX_LEASES); + _leases = new ArrayList<Lease>(2); _firstExpiration = Long.MAX_VALUE; } @@ -286,6 +288,7 @@ public class LeaseSet extends DatabaseEntry { } protected byte[] getBytes() { + if (_byteified != null) return _byteified; if ((_destination == null) || (_encryptionKey == null) || (_signingKey == null)) return null; int len = _destination.size() @@ -298,8 +301,7 @@ public class LeaseSet extends DatabaseEntry { _destination.writeBytes(out); _encryptionKey.writeBytes(out); _signingKey.writeBytes(out); - DataHelper.writeLong(out, 1, _leases.size()); - //DataHelper.writeLong(out, 4, _version); + out.write((byte) _leases.size()); for (Lease lease : _leases) lease.writeBytes(out); } catch (IOException ioe) { @@ -308,6 +310,9 @@ public class LeaseSet extends DatabaseEntry { return null; } byte rv[] = out.toByteArray(); + // if we are floodfill and this was published to us + if (_receivedAsPublished) + _byteified = rv; return rv; } @@ -348,8 +353,7 @@ public class LeaseSet extends DatabaseEntry { _destination.writeBytes(out); _encryptionKey.writeBytes(out); _signingKey.writeBytes(out); - DataHelper.writeLong(out, 1, _leases.size()); - //DataHelper.writeLong(out, 4, _version); + out.write((byte) _leases.size()); for (Lease lease : _leases) lease.writeBytes(out); _signature.writeBytes(out); -- GitLab