Hello,

I've been trying to investigate the  problem that has been reported over
time and  so far  I haven't  been able to  reproduce it  or come  to any
conclusive decision regarding  what might be the cause.  When (in Fossil
versions) did this problem first get noticed or start happening?

Thanks to Donny Ward, we at  least have one Fossil repository that seems
to reveal  one possible cause. For  whatever reason, one of  the checkin
artifacts in  the timeline  did not  make it into  a cluster.  I've been
trying to determine how this could come  about and so far can only see a
few possibilities (none of them a solid cause):

1) When  the content was received  for the checkin, something  failed to
put the artifact rid in the unclustered table.

2)  The   artifact  rid   was  in  the   unclustered  table,   but  when
create_cluster() ran it prematurely removed it from the table.

3) The content was originally private  (private content does not get put
into unclustered table) and somehow got marked as public.

4)  There is  a  bug in  this loop  that  sometimes prematurely  removes
artifact rids from the unclustered table:

http://www.fossil-scm.org/index.html/artifact/37f2afbbd186bf5cef90c57b7fa1acd7097977cd?ln=692,701

I haven't been able to find any way that 1 could happen.

The  only  way  I  can  imagine  2   could  happen  is  if  there  is  a
phantom for  the checkin artifact,  the content hasn't yet  arrived, and
create_cluster() is run  which will cause the rid of  the artifact to be
removed from  the unclustered  table and  it will never  make it  into a
cluster.  I'm not  sure how  this could  happen, but  it is  potentially
a  problem  (I  started  working  on this  particular  scenario  in  the
cluster-changes branch).

For 3,  I see that  there is  some code that  will remove rids  from the
private table if they are received and made public:

http://www.fossil-scm.org/index.html/artifact/37f2afbbd186bf5cef90c57b7fa1acd7097977cd?ln=172
http://www.fossil-scm.org/index.html/artifact/ef8da0287cc50af631daec6886f56b458aa1e4fc?ln=738,745

But if  they are in  the private table,  then necessarily they  will not
have been added to the unclustered table:

http://www.fossil-scm.org/index.html/artifact/ef8da0287cc50af631daec6886f56b458aa1e4fc?ln=572,575
http://www.fossil-scm.org/index.html/artifact/ef8da0287cc50af631daec6886f56b458aa1e4fc?ln=596,598

Which means that they  will never show up in a  cluster (even after made
public) and they will  not be in the unclustered table.  So why does the
content_make_public() function  exist? Is it possible  to switch private
content from private to public? I  didn't think it was, but perhaps this
is  also one  potential way  that a  checkin could  fail to  sync if  it
happens because  removing the rid from  the private table won't  put the
rid into the unclustered table.

Finally,  for option  4, this  block  of code  only kicks  in for  large
unclustered tables  where the number  of rows  currently added to  a new
cluster  is >=800  and  the number  of artifacts  not  yet clustered  is
>rows+100. Again, I cannot see where  there is any problem, but a number
of people have indicated  that it happens when there are  a lot of files
in  the  checkin---this  was  also  the  case  of  Donny's  a9b134481708
artifact. It was  a checkin that had 1251 F-cards  in the manifest which
means there were probably a lot of entries in unclustered until the next
time a  pull happened. I have  tried to reproduce it  with various large
numbers of commits and haven't yet been able to cause it.

At any  rate, Donny, were  you doing  anything with private  content for
checkin a9b134481708  in your repository?  Or did  you have any  kind of
automated pull that might have coincided  with the time that the checkin
was being committed to the repository? Did you shun the checkin artifact
and then unshun it?

Other thoughts?

Should cluster artifacts have a D-card  in them? Might make it easier to
correlate the timeline checkins with when they get created.

Thanks,

Andy
-- 
TAI64 timestamp: 4000000053c18e7d


_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to