Author: toad
Date: 2008-05-23 23:59:07 +0000 (Fri, 23 May 2008)
New Revision: 20090
Modified:
trunk/freenet/src/freenet/node/Version.java
Log:
1151:
L10n:
- More Chinese translations.
Client layer:
- USKs: Don't hold the USKFetcher lock while decoding the metadata block. This
method can be called from the packet receiver threads, so shouldn't block for
I/O.
- ClientRequestScheduler: Dropped flag was wrong in removePendingKey(), so
sometimes we wouldn't remove from offeredKeys => memory leak.
Datastore:
- Even faster reconstruction: Don't read the headers unless we need to, seek if
we do.
- Trivial refactoring.
- Don't read the data if we don't need to.
- Fix an instant timeout during reconstruction on a huge store.
Bookmarks:
- Update editions.
Dev stuff:
- Indenting.
- Logging.
- Trivial commits to test whether the smartbear (codecollaborator, closed
source code review engine we've got access to) integration is working, and to
test the attach-a-commit-to-an-existing-review mechanism (which still doesn't
work).
- Comments.
Website:
- Ask for and autodetect java 1.5 (not 1.4). German and English versions.
- Better 404 handling.
- Cleanup an FAQ item slightly.
- Delete dead code which was confusing the parser.
Installer:
- Require java 1.5.
Scripts:
- Fix verify_indent script (add -source 1.4).
j16sdiz
toad
nextgens
OTHER RECENT PROGRESS: (Not part of 1151, but you may be interested in it):
DB4O BRANCH (client layer in database): (toad)
- NOT WORKING. Not even tested. Significant work remains to be done, some
explanation of this on devl list:
Subject: [freenet-dev] Preliminary design notes for queue-in-database (3 days
after starting implementation!!)
- Create branch.
- Use a 64-bit handle to represent the node when pulling objects from db4o.
This is fetched from the port number, we don't use that because it might change.
- For now, a single database, a single thread on which all database access
occurs. This avoids a number of headaches with transactions: refreshing data
structures, multiple copies of the same object, clashes resulting from objects
from two transactions interacting, multiple object caches, etc. Many methods on
ClientRequestScheduler (see below) check whether we want persistent or
non-peristent, and if persistent, queue a job on the database thread
SerialExecutor.
- Delete anyWantKey and related methods. Not used. Use the off-thread
maybeQueueOfferedKey instead.
- ClientRequestSchedulerCore - handles persistent queue data structures etc.
Also implements removeFirst(), which uses both persistent and non-persistent
queues to find the next request to run (whichever has higher priority, retry
count; if there is a tie, random weighted by number of clients between the two;
in other words, exactly the same as previous behaviour). Currently all
non-persistent params must be passed in, although we may change this using
transient members. Currently uses db4o collections (with low activation depth),
but may be migrated to use queries and indexes for better support for
transactions/concurrency.
- ClientRequestSchedulerNonPersistent - non-persistent queue data structures.
- ClientRequestSchedulerBase - some code shared by both.
- ClientRequestScheduler - mostly creates the others, passes stuff along, puts
it onto the right thread.
- Lock in ClientRequestScheduler before calling CRSCore/CRSNP. Don't lock in
them (usually).
- If-it-succeeds-repeat-it logic now deals with BaseSendableGet's rather than
RGA's.
- Delete obsolete Spider and NinjaSpider - I thought we already had?
- SendableRequest.getClient() isn't an Object any more, it's a RequestClient.
- RequestClient has one method, boolean persistent(), this indicates whether
the client is persistent or not. This must not change from creation.
- Both of these in some cases result in changing the client (for round-robin
grouping), e.g. node.nonPersistentClient.
- FCPClient's now have two client objects, one for persistent and one for
non-persistent, because a queue layer client must be one or the other.
- SendableRequest also has persistent(), and so does RandomGrabArray and
SectoredRandomGrabArray, and they enforce this. Also ClientRequester has
persistent().
- CooldownQueue: Make an interface CooldownQueue, keep the old one for
non-persistent requests, implement a new, very simple, db4o-query-based
PersistentCooldownQueue for persistent requests. (The old one is very complex
in order to minimize memory usage; the new one uses objects and queries for
simplicity, to minimize what has to be paged in to RAM, and to maximize
transaction compatibility).
- CooldownQueue: removeKeyBefore() now returns up to specified number of keys
in an array. Much more efficient for database, comparable for non-database.
- Index the CooldownQueue's keys for efficient access. HOPEFULLY this will work
given I've made the keys Comparable. I will test this before merging...
- Pass in ObjectContainer (null if not persistent) to many methods e.g.
CooldownQueue.*.
- Imports.
- Comments.
SALTED HASH DATASTORE BRANCH: (j16sdiz)
- Fix not unlocking or unlocking too early in various places.
- Clarify code for overwriting entry when we get a KeyVerifyException in put()
fetching the key.
- put(): If all slots for the key are occupied, overwrite the first one, not a
random one.
- Cheaper, simpler isFree() (just read the flags)
- Constant for number of probes.
- Don't report inaccurate key count.
- Fix an off by one error shrinking the store.
- Optimisation to checking store size: only read full entry if needed.
- Write a complete empty disk block (512 bytes) when freeing an entry.
- Use Fields.bytesToLong().
- Limit size of old-items file while shrinking to 256MB.
- BLOOM FILTER: mmap'ed bytebuffer, non-counting (bitmapped). Will therefore
need to be regenerated periodically, not implemented yet. Should dramatically
cut the average seeking cost of a typical failed lookup.
- Logging.
- SaltedHashFreenetStore can be configured using the store type option.
However, it will not auto-migrate in any way an old BDBFS store.
- Merge updates from trunk.
JSITE: (bombe)
- 0.4.11.1: Fix an NPE on startup.
- Handle connection closes better. Logging.
- Add svnignore for eclipse settings dir.
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2008-05-23 23:52:12 UTC (rev
20089)
+++ trunk/freenet/src/freenet/node/Version.java 2008-05-23 23:59:07 UTC (rev
20090)
@@ -24,7 +24,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 1150;
+ private static final int buildNumber = 1151;
/** Oldest build of Fred we will talk to */
private static final int oldLastGoodBuild = 1145;