Fwd: Problem of Replication Reservation Duration

2011-03-11 Thread Li Li
-- Forwarded message --
From: Li Li 
Date: 2011/3/11
Subject: Problem of Replication Reservation Duration
To: solr-...@lucene.apache.org


hi all,
    The replication handler in solr 1.4 which we used seems to be a
little problematic in some extreme situation.
    The default reserve duration is 10s and can't modified by any method.
      private Integer reserveCommitDuration =
SnapPuller.readInterval("00:00:10");
    The current implementation is: slave send a http
request(CMD_GET_FILE_LIST) to ask server list current index files.
    In the response codes of master, it will reserve this commit for 10s.
      // reserve the indexcommit for sometime
      core.getDeletionPolicy().setReserveDuration(version,
reserveCommitDuration);
   If the master's indexes are changed within 10s, the old version
will not be deleted. Otherwise, the old version will be deleted.
    slave then get the files in the list one by one.
    considering the following situation.
    Every mid-night we optimize the whole indexes into one single
index, and every 15 minutes, we add new segments to it.
    e.g. when the slave copy the large optimized indexes, it will cost
more than 15 minutes. So it will fail to copy all files and
retry 5 minutes later. But each time it will re-copy all the files
into a new tmp directory. it will fail again and again as long as
we update indexes within 15 minutes.
    we can tack this problem by setting reserveCommitDuration to 20
minutes. But then because we update small number of
documents very frequently, many useless indexes will be reserved and
it's a waste of disk space.
    Any one confronted the problem before and is there any solution for it?
    We comes up a ugly solution like this: slave fetches files using
multithreads. each file a thread. Thus master will open all the
files that slave needs. As long as the file is opened. when master
want to delete them, these files will be deleted. But the inode
reference count is larger than 0.  Because reading too many files by
master will decrease the ability of master. we want to use
some synchronization mechanism to allow only 1 or 2 ReplicationHandler
threads are doing CMD_GET_FILE command.
    Is that solution feasible?

-
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org



Fwd: Problem of Replication Reservation Duration

2011-03-11 Thread Li Li
-- Forwarded message --
From: Steven A Rowe 
Date: 2011/3/11
Subject: RE: Problem of Replication Reservation Duration
To: "solr-...@lucene.apache.org" 


Hi Li Li,

Please do not use the solr-dev mailing list - Solr and Lucene
development both use the  list.

Steve

> -Original Message-
> From: Li Li [mailto:fancye...@gmail.com]
> Sent: Friday, March 11, 2011 8:41 AM
> To: solr-...@lucene.apache.org
> Subject: Problem of Replication Reservation Duration
>
> hi all,
>     The replication handler in solr 1.4 which we used seems to be a
> little problematic in some extreme situation.
>     The default reserve duration is 10s and can't modified by any method.
>       private Integer reserveCommitDuration =
> SnapPuller.readInterval("00:00:10");
>     The current implementation is: slave send a http
> request(CMD_GET_FILE_LIST) to ask server list current index files.
>     In the response codes of master, it will reserve this commit for 10s.
>       // reserve the indexcommit for sometime
>       core.getDeletionPolicy().setReserveDuration(version,
> reserveCommitDuration);
>    If the master's indexes are changed within 10s, the old version
> will not be deleted. Otherwise, the old version will be deleted.
>     slave then get the files in the list one by one.
>     considering the following situation.
>     Every mid-night we optimize the whole indexes into one single
> index, and every 15 minutes, we add new segments to it.
>     e.g. when the slave copy the large optimized indexes, it will cost
> more than 15 minutes. So it will fail to copy all files and
> retry 5 minutes later. But each time it will re-copy all the files
> into a new tmp directory. it will fail again and again as long as
> we update indexes within 15 minutes.
>     we can tack this problem by setting reserveCommitDuration to 20
> minutes. But then because we update small number of
> documents very frequently, many useless indexes will be reserved and
> it's a waste of disk space.
>     Any one confronted the problem before and is there any solution for
> it?
>     We comes up a ugly solution like this: slave fetches files using
> multithreads. each file a thread. Thus master will open all the
> files that slave needs. As long as the file is opened. when master
> want to delete them, these files will be deleted. But the inode
> reference count is larger than 0.  Because reading too many files by
> master will decrease the ability of master. we want to use
> some synchronization mechanism to allow only 1 or 2 ReplicationHandler
> threads are doing CMD_GET_FILE command.
>     Is that solution feasible?
>
> -
> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
> For additional commands, e-mail: dev-h...@lucene.apache.org

-
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org