Hi, It doesn't seem to work for me, I changed as well this part below is it ok?? > - List<String> copiedfiles = new ArrayList<String>(); > + Set<String> filesToCopy = new HashSet<String>();
http://www.nabble.com/file/p22734005/ReplicationHandler.java ReplicationHandler.java Thanks a lot, Noble Paul നോബിള് नोब्ळ् wrote: > > James thanks . > > If this is true the place to fix this is in > ReplicationHandler#getFileList(). patch is attached. > > > On Wed, Dec 24, 2008 at 4:04 PM, James Grant <james.gr...@semantico.com> > wrote: >> I had the same problem. It turned out that the list of files from the >> master >> included duplicates. When the slave completes the download and tries to >> move >> the files into the index it comes across a file that does not exist >> because >> it has already been moved so it backs out the whole operation. >> >> My solution for now was to patch the copyindexFiles method of >> org.apache.solr.handler.SnapPuller so that it normalises the list before >> moving the files. This isn't the best solution since it will still >> download >> the file twice but it was the easiest and smallest change to make. The >> patch >> is below >> >> Regards >> >> James >> >> --- src/java/org/apache/solr/handler/SnapPuller.java (revision 727347) >> +++ src/java/org/apache/solr/handler/SnapPuller.java (working copy) >> @@ -470,7 +470,7 @@ >> */ >> private boolean copyIndexFiles(File snapDir, File indexDir) { >> String segmentsFile = null; >> - List<String> copiedfiles = new ArrayList<String>(); >> + Set<String> filesToCopy = new HashSet<String>(); >> for (Map<String, Object> f : filesDownloaded) { >> String fname = (String) f.get(NAME); >> // the segments file must be copied last >> @@ -482,6 +482,10 @@ >> segmentsFile = fname; >> continue; >> } >> + filesToCopy.add(fname); >> + } >> + List<String> copiedfiles = new ArrayList<String>(); >> + for (String fname: filesToCopy) { >> if (!copyAFile(snapDir, indexDir, fname, copiedfiles)) return false; >> copiedfiles.add(fname); >> } >> >> >> Jaco wrote: >>> >>> Hello, >>> >>> While testing out the new replication features, I'm running into some >>> strange problem. On the slave, I keep getting an error like this after >>> all >>> files have been copied from the master to the temporary index.xxxxxxxxx >>> directory: >>> >>> SEVERE: Unable to move index file from: >>> D:\Data\solr\Slave\data\index.20081224110855\_21e.tvx to: >>> D:\Data\Solr\Slave\data\index\_21e.tvx >>> >>> The replication then stops, index remains in original state, so the >>> updates >>> are not available at the slave. >>> >>> This is my replication config at the master: >>> >>> <requestHandler name="/replication" class="solr.ReplicationHandler" > >>> <lst name="master"> >>> <!--Replicate on 'optimize' it can also be 'commit' --> >>> <str name="replicateAfter">commit</str> >>> <str name="confFiles">schema.xml</str> >>> </lst> >>> </requestHandler> >>> >>> This is the replication config at the slave: >>> >>> <requestHandler name="/replication" class="solr.ReplicationHandler" > >>> <lst name="slave"> >>> <str name="masterUrl"> >>> http://hostnamemaster:8080/solr/Master/replication</str> >>> <str name="pollInterval">00:10:00</str> >>> <str name="zip">true</str> >>> </lst> >>> </requestHandler> >>> >>> I'm running a Solr nightly build of 21.12.2008 in Tomcat 6 on Windows >>> 2003. >>> Initially I thought there was some problem with disk space, but this is >>> not >>> the case. Replication did run fine for intial version of index, but >>> after >>> that at some point it didn't work anymore. Any ideas what could be wrong >>> here? >>> >>> Thanks very much in advance, bye, >>> >>> Jaco. >>> >>> >> >> > > > > -- > --Noble Paul > > Index: src/java/org/apache/solr/handler/ReplicationHandler.java > =================================================================== > --- src/java/org/apache/solr/handler/ReplicationHandler.java (revision > 729282) > +++ src/java/org/apache/solr/handler/ReplicationHandler.java (working > copy) > @@ -268,7 +268,7 @@ > List<Map<String, Object>> result = new ArrayList<Map<String, > Object>>(); > try { > //get all the files in the commit > - Collection<String> files = commit.getFileNames(); > + Collection<String> files = new > HashSet<String>(commit.getFileNames()); > for (String fileName : files) { > File file = new File(core.getIndexDir(), fileName); > Map<String, Object> fileMeta = getFileInfo(file); > > -- View this message in context: http://www.nabble.com/%22Unable-to-move-index-file%22-error-during-replication-tp21157722p22734005.html Sent from the Solr - User mailing list archive at Nabble.com.