From ee9ac31c8b934c77170075a4ee07a3d017012c24 Mon Sep 17 00:00:00 2001 From: ragnarok <ragnarok> Date: Mon, 24 Oct 2005 06:27:56 +0000 Subject: [PATCH] * Instantiate new RemoteArchiveBean for each archive fetched by the updater, to prevent weirdness if the index fetch for archive n+1 fails. * Add a blocking fetch to EepGetScheduler and RemoteArchiveBean and use them from the updater, to prevent race conditions with multiple archive fetches. --- apps/syndie/java/src/net/i2p/syndie/Updater.java | 2 +- .../src/net/i2p/syndie/web/RemoteArchiveBean.java | 12 ++++++++++-- core/java/src/net/i2p/util/EepGetScheduler.java | 9 +++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/apps/syndie/java/src/net/i2p/syndie/Updater.java b/apps/syndie/java/src/net/i2p/syndie/Updater.java index 722c0c16b3..a430ec460a 100644 --- a/apps/syndie/java/src/net/i2p/syndie/Updater.java +++ b/apps/syndie/java/src/net/i2p/syndie/Updater.java @@ -20,9 +20,9 @@ public class Updater { _lastUpdate = System.currentTimeMillis(); _log.debug("Update started."); User user = new User(); - RemoteArchiveBean rab = new RemoteArchiveBean(); String[] archives = bm.getUpdateArchives(); for (int i = 0; i < archives.length; i++) { + RemoteArchiveBean rab = new RemoteArchiveBean(); _log.debug("Fetching " + archives[i]); rab.fetchIndex(user, "web", archives[i], bm.getDefaultProxyHost(), bm.getDefaultProxyPort()); if (rab.getRemoteIndex() != null) { diff --git a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java index 40447f11cb..7577979596 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java @@ -134,6 +134,10 @@ public class RemoteArchiveBean { } public void fetchSelectedBulk(User user, Map parameters) { + fetchSelectedBulk(user, parameters, false); + } + + public void fetchSelectedBulk(User user, Map parameters, boolean shouldBlock) { String entries[] = ArchiveViewerBean.getStrings(parameters, "entry"); String action = ArchiveViewerBean.getString(parameters, "action"); if ("Fetch all new entries".equals(action)) { @@ -206,7 +210,7 @@ public class RemoteArchiveBean { File t = File.createTempFile("fetchBulk", ".dat", BlogManager.instance().getTempDir()); tmpFiles.add(t); } - fetch(urls, tmpFiles, user, new BlogStatusListener()); + fetch(urls, tmpFiles, user, new BlogStatusListener(), shouldBlock); } catch (IOException ioe) { _statusMessages.add("Internal error creating temporary file to fetch posts: " + HTMLRenderer.sanitizeString(urls.toString())); } @@ -258,8 +262,12 @@ public class RemoteArchiveBean { } private void fetch(List urls, List tmpFiles, User user, EepGet.StatusListener lsnr) { + fetch(urls, tmpFiles, user, lsnr, false); + } + + private void fetch(List urls, List tmpFiles, User user, EepGet.StatusListener lsnr, boolean shouldBlock) { EepGetScheduler scheduler = new EepGetScheduler(I2PAppContext.getGlobalContext(), urls, tmpFiles, _proxyHost, _proxyPort, lsnr); - scheduler.fetch(); + scheduler.fetch(shouldBlock); } public void fetchIndex(User user, String schema, String location, String proxyHost, String proxyPort) { diff --git a/core/java/src/net/i2p/util/EepGetScheduler.java b/core/java/src/net/i2p/util/EepGetScheduler.java index f3aa173cd6..e39dfafee3 100644 --- a/core/java/src/net/i2p/util/EepGetScheduler.java +++ b/core/java/src/net/i2p/util/EepGetScheduler.java @@ -33,6 +33,15 @@ public class EepGetScheduler implements EepGet.StatusListener { t.start(); } + public void fetch(boolean shouldBlock) { + //Checking for a valid index is done in fetchNext, so we don't have to worry about it. + if (shouldBlock) { + fetchNext(); + } else { + fetch(); + } + } + private void fetchNext() { _curURL++; if (_curURL >= _urls.size()) return; -- GitLab