blob: 9dbe5dfbfc59438718c1c1ebac3c71619b7c1bb7 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.internal.cache.versions;
import java.io.FileReader;
import java.io.Reader;
import java.net.InetAddress;
import java.util.BitSet;
import org.junit.experimental.categories.Category;
import junit.framework.TestCase;
import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
import com.gemstone.gemfire.internal.Assert;
import com.gemstone.gemfire.internal.cache.versions.RVVException.ReceivedVersionsIterator;
import com.gemstone.gemfire.test.junit.categories.UnitTest;
@Category(UnitTest.class)
public class RegionVersionHolderJUnitTest extends TestCase {
protected InternalDistributedMember member;
int originalBitSetWidth = RegionVersionHolder.BIT_SET_WIDTH;
@Override
protected void setUp() throws Exception {
super.setUp();
member = new InternalDistributedMember(InetAddress.getLocalHost(), 12345);
}
public void test48066_1() {
RegionVersionHolder vh1 = new RegionVersionHolder(member);
for (int i=1; i<=3; i++) {
vh1.recordVersion(i);
}
System.out.println("vh1="+vh1);
RegionVersionHolder vh2 = vh1.clone();
System.out.println("after clone, vh2="+vh2);
{
RegionVersionHolder vh3 = new RegionVersionHolder(member);
for (int i=1; i<=10; i++) {
vh3.recordVersion(i);
}
// create special exception 10(3-11), bitsetVerson=3
vh3.initializeFrom(vh2);
System.out.println("after init, vh3="+vh3);
assertEquals(3, vh3.getVersion());
// to make bsv3,bs=[0,1]
vh3.recordVersion(4);
System.out.println("after record 4, vh3=");
assertEquals(4, vh3.getVersion());
vh3.recordVersion(7);
System.out.println("after record 7, vh3="+vh3);
assertEquals(7, vh3.getVersion());
}
}
public void test48066() {
RegionVersionHolder vh = new RegionVersionHolder(member);
BitSet bs = new BitSet();
bs.set(0, 8679);
bs.set(8705, 8713);
recordVersions(vh, bs);
System.out.println("init:\t\t" +vh);
//This is what happens when we apply an RVV from a member that doesn't
//have an entry for a member that we do have an entry from
vh.initializeFrom(new RegionVersionHolder(0));
System.out.println("init from:\t" +vh);
vh.recordVersion(1);
vh.recordVersion(2);
vh.recordVersion(14);
vh.recordVersion(62);
vh.recordVersion(95);
vh.recordVersion(96);
vh.recordVersion(97);
vh.recordVersion(98);
vh.recordVersion(99);
vh.recordVersion(100);
vh.recordVersion(123);
vh.recordVersion(144);
vh.recordVersion(146);
vh.recordVersion(147);
vh.recordVersion(148);
vh.recordVersion(149);
vh.recordVersion(150);
vh.recordVersion(151);
vh.recordVersion(152);
vh.recordVersion(153);
vh.recordVersion(154);
vh.recordVersion(155);
vh.recordVersion(156);
vh.recordVersion(157);
vh.recordVersion(158);
vh.recordVersion(159);
vh.recordVersion(160);
vh.recordVersion(161);
vh.recordVersion(184);
vh.recordVersion(185);
vh.recordVersion(186);
vh.recordVersion(187);
vh.recordVersion(188);
vh.recordVersion(189);
vh.recordVersion(190);
vh.recordVersion(191);
vh.recordVersion(192);
vh.recordVersion(193);
vh.recordVersion(194);
vh.recordVersion(195);
vh.recordVersion(197);
vh.recordVersion(196);
vh.recordVersion(201);
vh.recordVersion(202);
vh.recordVersion(203);
vh.recordVersion(204);
vh.recordVersion(205);
vh.recordVersion(206);
vh.recordVersion(207);
vh.recordVersion(208);
vh.recordVersion(209);
vh.recordVersion(210);
vh.recordVersion(211);
vh.recordVersion(212);
vh.recordVersion(213);
vh.recordVersion(214);
vh.recordVersion(215);
vh.recordVersion(216);
vh.recordVersion(217);
vh.recordVersion(218);
vh.recordVersion(219);
vh.recordVersion(220);
vh.recordVersion(221);
vh.recordVersion(222);
vh.recordVersion(224);
vh.recordVersion(223);
vh.recordVersion(238);
vh.recordVersion(261);
vh.recordVersion(262);
vh.recordVersion(263);
vh.recordVersion(264);
vh.recordVersion(265);
vh.recordVersion(266);
vh.recordVersion(267);
vh.recordVersion(268);
vh.recordVersion(269);
vh.recordVersion(270);
vh.recordVersion(271);
vh.recordVersion(272);
vh.recordVersion(285);
vh.recordVersion(286);
vh.recordVersion(308);
vh.recordVersion(309);
vh.recordVersion(311);
vh.recordVersion(312);
vh.recordVersion(360);
vh.recordVersion(361);
vh.recordVersion(362);
vh.recordVersion(363);
vh.recordVersion(364);
vh.recordVersion(365);
vh.recordVersion(390);
vh.recordVersion(391);
vh.recordVersion(392);
vh.recordVersion(393);
vh.recordVersion(394);
vh.recordVersion(395);
vh.recordVersion(396);
vh.recordVersion(397);
vh.recordVersion(399);
vh.recordVersion(398);
vh.recordVersion(400);
vh.recordVersion(401);
vh.recordVersion(402);
vh.recordVersion(409);
vh.recordVersion(410);
vh.recordVersion(412);
vh.recordVersion(413);
vh.recordVersion(417);
vh.recordVersion(418);
vh.recordVersion(425);
vh.recordVersion(427);
vh.recordVersion(426);
vh.recordVersion(428);
vh.recordVersion(429);
vh.recordVersion(431);
vh.recordVersion(430);
vh.recordVersion(432);
vh.recordVersion(433);
vh.recordVersion(448);
vh.recordVersion(449);
vh.recordVersion(456);
vh.recordVersion(457);
vh.recordVersion(483);
vh.recordVersion(484);
vh.recordVersion(485);
vh.recordVersion(490);
vh.recordVersion(491);
vh.recordVersion(492);
vh.recordVersion(515);
vh.recordVersion(516);
vh.recordVersion(517);
vh.recordVersion(518);
vh.recordVersion(546);
vh.recordVersion(548);
vh.recordVersion(555);
vh.recordVersion(556);
vh.recordVersion(557);
vh.recordVersion(574);
vh.recordVersion(575);
vh.recordVersion(577);
vh.recordVersion(576);
vh.recordVersion(578);
vh.recordVersion(583);
vh.recordVersion(584);
vh.recordVersion(585);
vh.recordVersion(586);
vh.recordVersion(587);
vh.recordVersion(613);
vh.recordVersion(632);
vh.recordVersion(656);
vh.recordVersion(657);
vh.recordVersion(658);
vh.recordVersion(659);
vh.recordVersion(660);
vh.recordVersion(661);
vh.recordVersion(662);
vh.recordVersion(684);
vh.recordVersion(697);
vh.recordVersion(698);
vh.recordVersion(699);
vh.recordVersion(700);
vh.recordVersion(701);
vh.recordVersion(717);
vh.recordVersion(718);
vh.recordVersion(722);
vh.recordVersion(723);
vh.recordVersion(741);
vh.recordVersion(742);
vh.recordVersion(743);
vh.recordVersion(762);
vh.recordVersion(782);
vh.recordVersion(783);
vh.recordVersion(784);
vh.recordVersion(785);
vh.recordVersion(802);
vh.recordVersion(803);
vh.recordVersion(816);
vh.recordVersion(837);
vh.recordVersion(857);
vh.recordVersion(860);
vh.recordVersion(877);
vh.recordVersion(878);
vh.recordVersion(879);
vh.recordVersion(881);
vh.recordVersion(880);
vh.recordVersion(882);
vh.recordVersion(883);
vh.recordVersion(902);
vh.recordVersion(903);
vh.recordVersion(904);
vh.recordVersion(929);
vh.recordVersion(940);
vh.recordVersion(941);
vh.recordVersion(966);
vh.recordVersion(967);
vh.recordVersion(968);
vh.recordVersion(979);
vh.recordVersion(980);
vh.recordVersion(981);
vh.recordVersion(982);
vh.recordVersion(983);
vh.recordVersion(1083);
vh.recordVersion(1107);
vh.recordVersion(1108);
vh.recordVersion(1130);
vh.recordVersion(1147);
vh.recordVersion(1148);
vh.recordVersion(1149);
vh.recordVersion(1150);
vh.recordVersion(1151);
vh.recordVersion(1152);
vh.recordVersion(1156);
vh.recordVersion(1157);
vh.recordVersion(1158);
vh.recordVersion(1167);
vh.recordVersion(1185);
vh.recordVersion(1186);
vh.recordVersion(1187);
vh.recordVersion(1188);
vh.recordVersion(1189);
vh.recordVersion(1190);
vh.recordVersion(1191);
vh.recordVersion(1200);
vh.recordVersion(1201);
vh.recordVersion(1202);
vh.recordVersion(1222);
vh.recordVersion(1258);
vh.recordVersion(1259);
vh.recordVersion(1260);
vh.recordVersion(1261);
vh.recordVersion(1262);
vh.recordVersion(1263);
vh.recordVersion(1289);
vh.recordVersion(1292);
vh.recordVersion(1293);
vh.recordVersion(1294);
vh.recordVersion(1322);
vh.recordVersion(1323);
vh.recordVersion(1324);
vh.recordVersion(1325);
vh.recordVersion(1327);
vh.recordVersion(1326);
vh.recordVersion(1328);
vh.recordVersion(1329);
vh.recordVersion(1330);
vh.recordVersion(1351);
vh.recordVersion(1352);
vh.recordVersion(1353);
vh.recordVersion(1354);
vh.recordVersion(1418);
vh.recordVersion(1433);
vh.recordVersion(1434);
vh.recordVersion(1455);
vh.recordVersion(2428);
vh.recordVersion(2429);
vh.recordVersion(2430);
vh.recordVersion(2431);
vh.recordVersion(2432);
vh.recordVersion(2433);
vh.recordVersion(2434);
vh.recordVersion(2435);
vh.recordVersion(2436);
vh.recordVersion(2437);
vh.recordVersion(2438);
vh.recordVersion(2439);
vh.recordVersion(2440);
vh.recordVersion(2441);
vh.recordVersion(2442);
vh.recordVersion(2443);
vh.recordVersion(2444);
vh.recordVersion(2445);
vh.recordVersion(2446);
vh.recordVersion(2447);
vh.recordVersion(2468);
vh.recordVersion(2521);
vh.recordVersion(2522);
vh.recordVersion(2523);
vh.recordVersion(2524);
vh.recordVersion(2525);
vh.recordVersion(2526);
vh.recordVersion(2527);
vh.recordVersion(2538);
vh.recordVersion(2539);
vh.recordVersion(2540);
vh.recordVersion(2541);
vh.recordVersion(2566);
vh.recordVersion(2592);
vh.recordVersion(2593);
vh.recordVersion(2594);
vh.recordVersion(2595);
vh.recordVersion(2596);
vh.recordVersion(2603);
vh.recordVersion(2604);
vh.recordVersion(2605);
vh.recordVersion(2606);
vh.recordVersion(2607);
vh.recordVersion(2608);
vh.recordVersion(2609);
vh.recordVersion(2610);
vh.recordVersion(2611);
vh.recordVersion(2612);
vh.recordVersion(2613);
vh.recordVersion(2648);
vh.recordVersion(2649);
vh.recordVersion(2650);
vh.recordVersion(2651);
vh.recordVersion(2652);
vh.recordVersion(2653);
vh.recordVersion(2654);
vh.recordVersion(2713);
vh.recordVersion(2733);
vh.recordVersion(2734);
vh.recordVersion(2735);
vh.recordVersion(2736);
vh.recordVersion(2737);
vh.recordVersion(2763);
vh.recordVersion(2785);
vh.recordVersion(2786);
vh.recordVersion(2812);
vh.recordVersion(2813);
vh.recordVersion(2814);
vh.recordVersion(2815);
vh.recordVersion(2831);
vh.recordVersion(2832);
vh.recordVersion(2833);
vh.recordVersion(2834);
vh.recordVersion(2870);
vh.recordVersion(2881);
vh.recordVersion(2882);
vh.recordVersion(2904);
vh.recordVersion(2905);
vh.recordVersion(2906);
vh.recordVersion(2907);
vh.recordVersion(2908);
vh.recordVersion(2912);
vh.recordVersion(2913);
vh.recordVersion(2914);
vh.recordVersion(2915);
vh.recordVersion(2916);
vh.recordVersion(2917);
vh.recordVersion(2918);
vh.recordVersion(2919);
vh.recordVersion(2920);
vh.recordVersion(2921);
vh.recordVersion(2922);
vh.recordVersion(2924);
vh.recordVersion(2925);
vh.recordVersion(2926);
vh.recordVersion(2927);
vh.recordVersion(2928);
vh.recordVersion(2929);
vh.recordVersion(2930);
vh.recordVersion(2931);
vh.recordVersion(2932);
vh.recordVersion(2933);
vh.recordVersion(2934);
vh.recordVersion(2935);
vh.recordVersion(2936);
vh.recordVersion(2937);
vh.recordVersion(2971);
vh.recordVersion(2988);
vh.recordVersion(2989);
vh.recordVersion(2990);
vh.recordVersion(2991);
vh.recordVersion(2992);
vh.recordVersion(3003);
vh.recordVersion(3004);
vh.recordVersion(3005);
vh.recordVersion(3006);
vh.recordVersion(3007);
vh.recordVersion(3008);
vh.recordVersion(3009);
vh.recordVersion(3011);
vh.recordVersion(3052);
vh.recordVersion(3053);
vh.recordVersion(3054);
vh.recordVersion(3055);
vh.recordVersion(3056);
vh.recordVersion(3058);
vh.recordVersion(3071);
vh.recordVersion(3072);
vh.recordVersion(3075);
vh.recordVersion(3076);
vh.recordVersion(3077);
vh.recordVersion(3078);
vh.recordVersion(3079);
vh.recordVersion(3080);
vh.recordVersion(3081);
vh.recordVersion(3094);
vh.recordVersion(3095);
vh.recordVersion(3105);
vh.recordVersion(3106);
vh.recordVersion(3107);
vh.recordVersion(3108);
vh.recordVersion(3109);
vh.recordVersion(3115);
vh.recordVersion(3116);
vh.recordVersion(3141);
vh.recordVersion(3142);
vh.recordVersion(3143);
vh.recordVersion(3144);
vh.recordVersion(3169);
vh.recordVersion(3170);
vh.recordVersion(3203);
vh.recordVersion(3204);
vh.recordVersion(3205);
vh.recordVersion(3206);
vh.recordVersion(3208);
vh.recordVersion(3207);
vh.recordVersion(3212);
vh.recordVersion(3213);
vh.recordVersion(3214);
vh.recordVersion(3215);
vh.recordVersion(3217);
vh.recordVersion(3218);
vh.recordVersion(3219);
vh.recordVersion(3230);
vh.recordVersion(3259);
vh.recordVersion(3260);
vh.recordVersion(3281);
vh.recordVersion(3282);
vh.recordVersion(3283);
vh.recordVersion(3284);
vh.recordVersion(3285);
vh.recordVersion(3286);
vh.recordVersion(3287);
vh.recordVersion(3288);
vh.recordVersion(3289);
vh.recordVersion(3290);
vh.recordVersion(3296);
vh.recordVersion(3297);
vh.recordVersion(3298);
vh.recordVersion(3302);
vh.recordVersion(3324);
vh.recordVersion(3370);
vh.recordVersion(3371);
vh.recordVersion(3372);
vh.recordVersion(3398);
vh.recordVersion(3399);
vh.recordVersion(3419);
vh.recordVersion(3420);
vh.recordVersion(3422);
vh.recordVersion(3423);
vh.recordVersion(3424);
vh.recordVersion(3425);
vh.recordVersion(3426);
vh.recordVersion(3427);
vh.recordVersion(3428);
vh.recordVersion(3429);
vh.recordVersion(3445);
vh.recordVersion(3446);
vh.recordVersion(3447);
vh.recordVersion(3448);
vh.recordVersion(3464);
vh.recordVersion(3465);
vh.recordVersion(3466);
vh.recordVersion(3467);
vh.recordVersion(3468);
vh.recordVersion(3469);
vh.recordVersion(3470);
vh.recordVersion(3471);
vh.recordVersion(3472);
vh.recordVersion(3473);
vh.recordVersion(3478);
vh.recordVersion(3500);
vh.recordVersion(3501);
vh.recordVersion(3537);
vh.recordVersion(3538);
vh.recordVersion(3559);
vh.recordVersion(3566);
vh.recordVersion(3594);
vh.recordVersion(3595);
vh.recordVersion(3596);
vh.recordVersion(3597);
vh.recordVersion(3662);
vh.recordVersion(3663);
vh.recordVersion(3664);
vh.recordVersion(3665);
vh.recordVersion(3666);
vh.recordVersion(3667);
vh.recordVersion(3668);
vh.recordVersion(3669);
vh.recordVersion(3670);
vh.recordVersion(3673);
vh.recordVersion(3674);
vh.recordVersion(3691);
vh.recordVersion(3692);
vh.recordVersion(3693);
vh.recordVersion(3694);
vh.recordVersion(3720);
vh.recordVersion(3721);
vh.recordVersion(3722);
vh.recordVersion(3723);
vh.recordVersion(3724);
vh.recordVersion(3725);
vh.recordVersion(3757);
vh.recordVersion(3765);
vh.recordVersion(3766);
vh.recordVersion(3767);
vh.recordVersion(3768);
vh.recordVersion(3769);
vh.recordVersion(3770);
vh.recordVersion(3771);
vh.recordVersion(3772);
vh.recordVersion(3773);
vh.recordVersion(3774);
vh.recordVersion(3775);
vh.recordVersion(3776);
vh.recordVersion(3777);
vh.recordVersion(3778);
vh.recordVersion(3779);
vh.recordVersion(3796);
vh.recordVersion(3797);
vh.recordVersion(3798);
vh.recordVersion(3799);
vh.recordVersion(3800);
vh.recordVersion(3821);
vh.recordVersion(3822);
vh.recordVersion(3823);
vh.recordVersion(3840);
vh.recordVersion(3863);
vh.recordVersion(3864);
vh.recordVersion(3865);
vh.recordVersion(3867);
vh.recordVersion(3866);
vh.recordVersion(3890);
vh.recordVersion(3891);
vh.recordVersion(3892);
vh.recordVersion(3893);
vh.recordVersion(3894);
vh.recordVersion(3895);
vh.recordVersion(3915);
vh.recordVersion(3916);
vh.recordVersion(3917);
vh.recordVersion(3918);
vh.recordVersion(3919);
vh.recordVersion(3920);
vh.recordVersion(3929);
vh.recordVersion(3948);
vh.recordVersion(3955);
vh.recordVersion(3975);
vh.recordVersion(3976);
vh.recordVersion(3984);
vh.recordVersion(3985);
vh.recordVersion(3986);
vh.recordVersion(3987);
vh.recordVersion(3990);
vh.recordVersion(4007);
vh.recordVersion(4008);
vh.recordVersion(4009);
vh.recordVersion(4010);
vh.recordVersion(4025);
vh.recordVersion(4026);
vh.recordVersion(4027);
vh.recordVersion(4047);
vh.recordVersion(4067);
vh.recordVersion(4068);
vh.recordVersion(4088);
vh.recordVersion(4104);
vh.recordVersion(4105);
vh.recordVersion(4106);
vh.recordVersion(4114);
vh.recordVersion(4126);
vh.recordVersion(4167);
vh.recordVersion(4175);
vh.recordVersion(4176);
vh.recordVersion(4177);
vh.recordVersion(4179);
vh.recordVersion(4178);
vh.recordVersion(4180);
vh.recordVersion(4187);
vh.recordVersion(4188);
vh.recordVersion(4189);
vh.recordVersion(4190);
vh.recordVersion(4191);
vh.recordVersion(4192);
vh.recordVersion(4193);
vh.recordVersion(4194);
vh.recordVersion(4195);
vh.recordVersion(4196);
vh.recordVersion(4197);
vh.recordVersion(4198);
vh.recordVersion(4199);
vh.recordVersion(4200);
vh.recordVersion(4201);
vh.recordVersion(4202);
vh.recordVersion(4208);
vh.recordVersion(4209);
vh.recordVersion(4275);
vh.recordVersion(4276);
vh.recordVersion(4277);
vh.recordVersion(4278);
vh.recordVersion(4279);
vh.recordVersion(4280);
vh.recordVersion(4281);
vh.recordVersion(4282);
vh.recordVersion(4283);
vh.recordVersion(4284);
vh.recordVersion(4303);
vh.recordVersion(4304);
vh.recordVersion(4305);
vh.recordVersion(4306);
vh.recordVersion(4320);
vh.recordVersion(4321);
vh.recordVersion(4322);
vh.recordVersion(4323);
vh.recordVersion(4324);
vh.recordVersion(4325);
vh.recordVersion(4326);
vh.recordVersion(4327);
vh.recordVersion(4328);
vh.recordVersion(4352);
vh.recordVersion(4353);
vh.recordVersion(4354);
vh.recordVersion(4355);
vh.recordVersion(4356);
vh.recordVersion(4374);
vh.recordVersion(4375);
vh.recordVersion(4376);
vh.recordVersion(4377);
vh.recordVersion(4378);
vh.recordVersion(4379);
vh.recordVersion(4380);
vh.recordVersion(4381);
vh.recordVersion(4382);
vh.recordVersion(4383);
vh.recordVersion(4384);
vh.recordVersion(4385);
vh.recordVersion(4386);
vh.recordVersion(4387);
vh.recordVersion(4388);
vh.recordVersion(4429);
vh.recordVersion(4430);
vh.recordVersion(4431);
vh.recordVersion(4432);
vh.recordVersion(4433);
vh.recordVersion(4434);
vh.recordVersion(4435);
vh.recordVersion(4436);
vh.recordVersion(4438);
vh.recordVersion(4439);
vh.recordVersion(4440);
vh.recordVersion(4441);
vh.recordVersion(4442);
vh.recordVersion(4443);
vh.recordVersion(4444);
vh.recordVersion(4445);
vh.recordVersion(4446);
vh.recordVersion(4447);
vh.recordVersion(4448);
vh.recordVersion(4449);
vh.recordVersion(4468);
vh.recordVersion(4471);
vh.recordVersion(4472);
vh.recordVersion(4483);
vh.recordVersion(4484);
vh.recordVersion(4485);
vh.recordVersion(4486);
vh.recordVersion(4487);
vh.recordVersion(4489);
vh.recordVersion(4488);
vh.recordVersion(4490);
vh.recordVersion(4491);
vh.recordVersion(4492);
vh.recordVersion(4493);
vh.recordVersion(4501);
vh.recordVersion(4540);
vh.recordVersion(4541);
vh.recordVersion(4542);
vh.recordVersion(4543);
vh.recordVersion(4544);
vh.recordVersion(4545);
vh.recordVersion(4546);
vh.recordVersion(4547);
vh.recordVersion(4567);
vh.recordVersion(4568);
vh.recordVersion(4569);
vh.recordVersion(4570);
vh.recordVersion(4571);
vh.recordVersion(4572);
vh.recordVersion(4573);
vh.recordVersion(4574);
vh.recordVersion(4575);
vh.recordVersion(4600);
vh.recordVersion(4601);
vh.recordVersion(4602);
vh.recordVersion(4603);
vh.recordVersion(4616);
vh.recordVersion(4617);
vh.recordVersion(4620);
vh.recordVersion(4621);
vh.recordVersion(4622);
vh.recordVersion(4623);
vh.recordVersion(4624);
vh.recordVersion(4625);
vh.recordVersion(4626);
vh.recordVersion(4627);
vh.recordVersion(4629);
vh.recordVersion(4630);
vh.recordVersion(4631);
vh.recordVersion(4632);
vh.recordVersion(4633);
vh.recordVersion(4634);
vh.recordVersion(4658);
vh.recordVersion(4659);
vh.recordVersion(4678);
vh.recordVersion(4691);
vh.recordVersion(4711);
vh.recordVersion(4737);
vh.recordVersion(4738);
vh.recordVersion(4739);
vh.recordVersion(4740);
vh.recordVersion(4745);
vh.recordVersion(4746);
vh.recordVersion(4747);
vh.recordVersion(4748);
vh.recordVersion(4761);
vh.recordVersion(4762);
vh.recordVersion(4763);
vh.recordVersion(4779);
vh.recordVersion(4780);
vh.recordVersion(4781);
vh.recordVersion(4782);
vh.recordVersion(4807);
vh.recordVersion(4808);
vh.recordVersion(4809);
vh.recordVersion(4810);
vh.recordVersion(4811);
vh.recordVersion(4812);
vh.recordVersion(4813);
vh.recordVersion(4814);
vh.recordVersion(4840);
vh.recordVersion(4859);
vh.recordVersion(4877);
vh.recordVersion(4878);
vh.recordVersion(4879);
vh.recordVersion(4905);
vh.recordVersion(4906);
vh.recordVersion(4910);
vh.recordVersion(4911);
vh.recordVersion(4948);
vh.recordVersion(4949);
vh.recordVersion(4950);
vh.recordVersion(4951);
vh.recordVersion(4952);
vh.recordVersion(4953);
vh.recordVersion(4954);
vh.recordVersion(4955);
vh.recordVersion(4956);
vh.recordVersion(4964);
vh.recordVersion(4976);
vh.recordVersion(4977);
vh.recordVersion(4978);
vh.recordVersion(4979);
vh.recordVersion(4980);
vh.recordVersion(5016);
vh.recordVersion(5026);
vh.recordVersion(5027);
vh.recordVersion(5028);
vh.recordVersion(5029);
vh.recordVersion(5030);
vh.recordVersion(5052);
vh.recordVersion(5053);
vh.recordVersion(5071);
vh.recordVersion(5072);
vh.recordVersion(5094);
vh.recordVersion(5095);
vh.recordVersion(5096);
vh.recordVersion(5097);
vh.recordVersion(5098);
vh.recordVersion(5099);
vh.recordVersion(5100);
vh.recordVersion(5101);
vh.recordVersion(5102);
vh.recordVersion(5103);
vh.recordVersion(5104);
vh.recordVersion(5105);
vh.recordVersion(5106);
vh.recordVersion(5107);
vh.recordVersion(5108);
vh.recordVersion(5109);
vh.recordVersion(5110);
vh.recordVersion(5112);
vh.recordVersion(5138);
vh.recordVersion(5139);
vh.recordVersion(5140);
vh.recordVersion(5141);
vh.recordVersion(5142);
vh.recordVersion(5143);
vh.recordVersion(5144);
vh.recordVersion(5145);
vh.recordVersion(5146);
vh.recordVersion(5147);
vh.recordVersion(5148);
vh.recordVersion(5149);
vh.recordVersion(5150);
vh.recordVersion(5151);
vh.recordVersion(5152);
vh.recordVersion(5163);
vh.recordVersion(5164);
vh.recordVersion(5165);
vh.recordVersion(5166);
vh.recordVersion(5167);
vh.recordVersion(5168);
vh.recordVersion(5169);
vh.recordVersion(5170);
vh.recordVersion(5171);
vh.recordVersion(5172);
vh.recordVersion(5173);
vh.recordVersion(5174);
vh.recordVersion(5175);
vh.recordVersion(5176);
vh.recordVersion(5184);
vh.recordVersion(5185);
vh.recordVersion(5186);
vh.recordVersion(5187);
vh.recordVersion(5205);
vh.recordVersion(5206);
vh.recordVersion(5207);
vh.recordVersion(5208);
vh.recordVersion(5209);
vh.recordVersion(5210);
vh.recordVersion(5211);
vh.recordVersion(5212);
vh.recordVersion(5213);
vh.recordVersion(5214);
vh.recordVersion(5215);
vh.recordVersion(5216);
vh.recordVersion(5217);
vh.recordVersion(5218);
vh.recordVersion(5219);
vh.recordVersion(5221);
vh.recordVersion(5220);
vh.recordVersion(5222);
vh.recordVersion(5224);
vh.recordVersion(5223);
vh.recordVersion(5225);
vh.recordVersion(5226);
vh.recordVersion(5227);
vh.recordVersion(5228);
vh.recordVersion(5229);
vh.recordVersion(5252);
vh.recordVersion(5269);
vh.recordVersion(5270);
vh.recordVersion(5271);
vh.recordVersion(5272);
vh.recordVersion(5273);
vh.recordVersion(5314);
vh.recordVersion(5315);
vh.recordVersion(5316);
vh.recordVersion(5317);
vh.recordVersion(5336);
vh.recordVersion(5337);
vh.recordVersion(5345);
vh.recordVersion(5346);
vh.recordVersion(5347);
vh.recordVersion(5348);
vh.recordVersion(5354);
vh.recordVersion(5363);
vh.recordVersion(5364);
vh.recordVersion(5365);
vh.recordVersion(5366);
vh.recordVersion(5367);
vh.recordVersion(5369);
vh.recordVersion(5368);
vh.recordVersion(5370);
vh.recordVersion(5371);
vh.recordVersion(5372);
vh.recordVersion(5380);
vh.recordVersion(5381);
vh.recordVersion(5382);
vh.recordVersion(5383);
vh.recordVersion(5384);
vh.recordVersion(5385);
vh.recordVersion(5386);
vh.recordVersion(5387);
vh.recordVersion(5406);
vh.recordVersion(5407);
vh.recordVersion(5408);
vh.recordVersion(5410);
vh.recordVersion(5409);
vh.recordVersion(5411);
vh.recordVersion(5427);
vh.recordVersion(5428);
vh.recordVersion(5429);
vh.recordVersion(5430);
vh.recordVersion(5431);
vh.recordVersion(5449);
vh.recordVersion(5450);
vh.recordVersion(5451);
vh.recordVersion(5452);
vh.recordVersion(5453);
vh.recordVersion(5454);
vh.recordVersion(5475);
vh.recordVersion(5476);
vh.recordVersion(5477);
vh.recordVersion(5478);
vh.recordVersion(5524);
vh.recordVersion(5531);
vh.recordVersion(5532);
vh.recordVersion(5533);
vh.recordVersion(5534);
vh.recordVersion(5535);
vh.recordVersion(5536);
vh.recordVersion(5537);
vh.recordVersion(5538);
vh.recordVersion(5539);
vh.recordVersion(5580);
vh.recordVersion(5581);
vh.recordVersion(5587);
vh.recordVersion(5588);
vh.recordVersion(5589);
vh.recordVersion(5590);
vh.recordVersion(5591);
vh.recordVersion(5592);
vh.recordVersion(5593);
vh.recordVersion(5594);
vh.recordVersion(5595);
vh.recordVersion(5596);
vh.recordVersion(5597);
vh.recordVersion(5598);
vh.recordVersion(5599);
vh.recordVersion(5600);
vh.recordVersion(5601);
vh.recordVersion(5602);
vh.recordVersion(5628);
vh.recordVersion(5629);
vh.recordVersion(5652);
vh.recordVersion(5653);
vh.recordVersion(5654);
vh.recordVersion(5655);
vh.recordVersion(5656);
vh.recordVersion(5668);
vh.recordVersion(5669);
vh.recordVersion(5698);
vh.recordVersion(5699);
vh.recordVersion(5700);
vh.recordVersion(5701);
vh.recordVersion(5702);
vh.recordVersion(5711);
vh.recordVersion(5712);
vh.recordVersion(5713);
vh.recordVersion(5714);
vh.recordVersion(5715);
vh.recordVersion(5716);
vh.recordVersion(5717);
vh.recordVersion(5718);
vh.recordVersion(5719);
vh.recordVersion(5737);
vh.recordVersion(5763);
vh.recordVersion(5786);
vh.recordVersion(5787);
vh.recordVersion(5788);
vh.recordVersion(5807);
vh.recordVersion(5808);
vh.recordVersion(5831);
vh.recordVersion(5832);
vh.recordVersion(5856);
vh.recordVersion(5857);
vh.recordVersion(5864);
vh.recordVersion(5865);
vh.recordVersion(5866);
vh.recordVersion(5867);
vh.recordVersion(5868);
vh.recordVersion(5869);
vh.recordVersion(5870);
vh.recordVersion(5898);
vh.recordVersion(5899);
vh.recordVersion(5900);
vh.recordVersion(5901);
vh.recordVersion(5902);
vh.recordVersion(5903);
vh.recordVersion(5908);
vh.recordVersion(5923);
vh.recordVersion(5924);
vh.recordVersion(5925);
vh.recordVersion(5926);
vh.recordVersion(5927);
vh.recordVersion(5928);
vh.recordVersion(5929);
vh.recordVersion(5930);
vh.recordVersion(5931);
vh.recordVersion(5932);
vh.recordVersion(5933);
vh.recordVersion(5940);
vh.recordVersion(5941);
vh.recordVersion(5942);
vh.recordVersion(5943);
vh.recordVersion(5944);
vh.recordVersion(5945);
vh.recordVersion(5968);
vh.recordVersion(5969);
vh.recordVersion(5970);
vh.recordVersion(5971);
vh.recordVersion(5972);
vh.recordVersion(5973);
vh.recordVersion(5974);
vh.recordVersion(5975);
vh.recordVersion(6032);
vh.recordVersion(6048);
vh.recordVersion(6049);
vh.recordVersion(6050);
vh.recordVersion(6051);
vh.recordVersion(6063);
vh.recordVersion(6064);
vh.recordVersion(6065);
vh.recordVersion(6066);
vh.recordVersion(6067);
vh.recordVersion(6068);
vh.recordVersion(6084);
vh.recordVersion(6098);
vh.recordVersion(6099);
vh.recordVersion(6123);
vh.recordVersion(6124);
vh.recordVersion(6125);
vh.recordVersion(6126);
vh.recordVersion(6127);
vh.recordVersion(6128);
vh.recordVersion(6129);
vh.recordVersion(6141);
vh.recordVersion(6169);
vh.recordVersion(6170);
vh.recordVersion(6171);
vh.recordVersion(6190);
vh.recordVersion(6199);
vh.recordVersion(6200);
vh.recordVersion(6218);
vh.recordVersion(6219);
vh.recordVersion(6220);
vh.recordVersion(6221);
vh.recordVersion(6222);
vh.recordVersion(6223);
vh.recordVersion(6224);
vh.recordVersion(6225);
vh.recordVersion(6293);
vh.recordVersion(6302);
vh.recordVersion(6303);
vh.recordVersion(6304);
vh.recordVersion(6305);
vh.recordVersion(6306);
vh.recordVersion(6307);
vh.recordVersion(6308);
vh.recordVersion(6323);
vh.recordVersion(6322);
vh.recordVersion(6325);
vh.recordVersion(6324);
vh.recordVersion(6326);
vh.recordVersion(6327);
vh.recordVersion(6328);
vh.recordVersion(6329);
vh.recordVersion(6347);
vh.recordVersion(6348);
vh.recordVersion(6349);
vh.recordVersion(6350);
vh.recordVersion(6351);
vh.recordVersion(6352);
vh.recordVersion(6353);
vh.recordVersion(6354);
vh.recordVersion(6355);
vh.recordVersion(6356);
vh.recordVersion(6357);
vh.recordVersion(6358);
vh.recordVersion(6359);
vh.recordVersion(6360);
vh.recordVersion(6361);
vh.recordVersion(6362);
vh.recordVersion(6387);
vh.recordVersion(6388);
vh.recordVersion(6398);
vh.recordVersion(6399);
vh.recordVersion(6400);
vh.recordVersion(6401);
vh.recordVersion(6422);
vh.recordVersion(6430);
vh.recordVersion(6431);
vh.recordVersion(6432);
vh.recordVersion(6433);
vh.recordVersion(6434);
vh.recordVersion(6435);
vh.recordVersion(6436);
vh.recordVersion(6450);
vh.recordVersion(6451);
vh.recordVersion(6452);
vh.recordVersion(6456);
vh.recordVersion(6457);
vh.recordVersion(6458);
vh.recordVersion(6459);
vh.recordVersion(6460);
vh.recordVersion(6461);
vh.recordVersion(6462);
vh.recordVersion(6463);
vh.recordVersion(6466);
vh.recordVersion(6467);
vh.recordVersion(6468);
vh.recordVersion(6474);
vh.recordVersion(6475);
vh.recordVersion(6476);
vh.recordVersion(6477);
vh.recordVersion(6478);
vh.recordVersion(6479);
vh.recordVersion(6480);
vh.recordVersion(6481);
vh.recordVersion(6482);
vh.recordVersion(6483);
vh.recordVersion(6484);
vh.recordVersion(6485);
vh.recordVersion(6486);
vh.recordVersion(6487);
vh.recordVersion(6488);
vh.recordVersion(6489);
vh.recordVersion(6528);
vh.recordVersion(6581);
vh.recordVersion(6596);
vh.recordVersion(6597);
vh.recordVersion(6598);
vh.recordVersion(6599);
vh.recordVersion(6600);
vh.recordVersion(6601);
vh.recordVersion(6602);
vh.recordVersion(6628);
vh.recordVersion(6676);
vh.recordVersion(6690);
vh.recordVersion(6704);
vh.recordVersion(6705);
vh.recordVersion(6706);
vh.recordVersion(6768);
vh.recordVersion(6769);
vh.recordVersion(6770);
vh.recordVersion(6771);
vh.recordVersion(6772);
vh.recordVersion(6773);
vh.recordVersion(6774);
vh.recordVersion(6776);
vh.recordVersion(6777);
vh.recordVersion(6778);
vh.recordVersion(6779);
vh.recordVersion(6790);
vh.recordVersion(6791);
vh.recordVersion(6792);
vh.recordVersion(6793);
vh.recordVersion(6794);
vh.recordVersion(6795);
vh.recordVersion(6796);
vh.recordVersion(6797);
vh.recordVersion(6798);
vh.recordVersion(6816);
vh.recordVersion(6817);
vh.recordVersion(6818);
vh.recordVersion(6819);
vh.recordVersion(6820);
vh.recordVersion(6821);
vh.recordVersion(6844);
vh.recordVersion(6843);
vh.recordVersion(6845);
vh.recordVersion(6846);
vh.recordVersion(6847);
vh.recordVersion(6848);
vh.recordVersion(6849);
vh.recordVersion(6850);
vh.recordVersion(6852);
vh.recordVersion(6853);
vh.recordVersion(6855);
vh.recordVersion(6854);
vh.recordVersion(6878);
vh.recordVersion(6884);
vh.recordVersion(6885);
vh.recordVersion(6908);
vh.recordVersion(6907);
vh.recordVersion(6909);
vh.recordVersion(6910);
vh.recordVersion(6911);
vh.recordVersion(6912);
vh.recordVersion(6913);
vh.recordVersion(6936);
vh.recordVersion(6937);
vh.recordVersion(6938);
vh.recordVersion(6939);
vh.recordVersion(6967);
vh.recordVersion(6968);
vh.recordVersion(6989);
vh.recordVersion(7006);
vh.recordVersion(7021);
vh.recordVersion(7022);
vh.recordVersion(7023);
vh.recordVersion(7024);
vh.recordVersion(7028);
vh.recordVersion(7060);
vh.recordVersion(7061);
vh.recordVersion(7062);
vh.recordVersion(7063);
vh.recordVersion(7064);
vh.recordVersion(7065);
vh.recordVersion(7066);
vh.recordVersion(7067);
vh.recordVersion(7068);
vh.recordVersion(7069);
vh.recordVersion(7070);
vh.recordVersion(7071);
vh.recordVersion(7072);
vh.recordVersion(7073);
vh.recordVersion(7074);
vh.recordVersion(7075);
vh.recordVersion(7076);
vh.recordVersion(7094);
vh.recordVersion(7095);
vh.recordVersion(7104);
vh.recordVersion(7105);
vh.recordVersion(7106);
vh.recordVersion(7107);
vh.recordVersion(7108);
vh.recordVersion(7109);
vh.recordVersion(7111);
vh.recordVersion(7110);
vh.recordVersion(7112);
vh.recordVersion(7113);
vh.recordVersion(7114);
vh.recordVersion(7115);
vh.recordVersion(7116);
vh.recordVersion(7117);
vh.recordVersion(7118);
vh.recordVersion(7119);
vh.recordVersion(7120);
vh.recordVersion(7121);
vh.recordVersion(7122);
vh.recordVersion(7123);
vh.recordVersion(7134);
vh.recordVersion(7135);
vh.recordVersion(7136);
vh.recordVersion(7137);
vh.recordVersion(7138);
vh.recordVersion(7187);
vh.recordVersion(7188);
vh.recordVersion(7189);
vh.recordVersion(7190);
vh.recordVersion(7191);
vh.recordVersion(7192);
vh.recordVersion(7193);
vh.recordVersion(7194);
vh.recordVersion(7195);
vh.recordVersion(7196);
vh.recordVersion(7221);
vh.recordVersion(7222);
vh.recordVersion(7223);
vh.recordVersion(7234);
vh.recordVersion(7235);
vh.recordVersion(7236);
vh.recordVersion(7237);
vh.recordVersion(7238);
vh.recordVersion(7244);
vh.recordVersion(7246);
vh.recordVersion(7245);
vh.recordVersion(7247);
vh.recordVersion(7248);
vh.recordVersion(7249);
vh.recordVersion(7280);
vh.recordVersion(7281);
vh.recordVersion(7282);
vh.recordVersion(7283);
vh.recordVersion(7303);
vh.recordVersion(7304);
vh.recordVersion(7305);
vh.recordVersion(7306);
vh.recordVersion(7307);
vh.recordVersion(7308);
vh.recordVersion(7309);
vh.recordVersion(7310);
vh.recordVersion(7336);
vh.recordVersion(7340);
vh.recordVersion(7383);
vh.recordVersion(7400);
vh.recordVersion(7422);
vh.recordVersion(7441);
vh.recordVersion(7442);
vh.recordVersion(7443);
vh.recordVersion(7444);
vh.recordVersion(7445);
vh.recordVersion(7446);
vh.recordVersion(7447);
vh.recordVersion(7448);
vh.recordVersion(7449);
vh.recordVersion(7450);
vh.recordVersion(7451);
vh.recordVersion(7452);
vh.recordVersion(7453);
vh.recordVersion(7454);
vh.recordVersion(7455);
vh.recordVersion(7456);
vh.recordVersion(7457);
vh.recordVersion(7458);
vh.recordVersion(7477);
vh.recordVersion(7506);
vh.recordVersion(7507);
vh.recordVersion(7508);
vh.recordVersion(7509);
vh.recordVersion(7515);
vh.recordVersion(7516);
vh.recordVersion(7517);
vh.recordVersion(7518);
vh.recordVersion(7519);
vh.recordVersion(7521);
vh.recordVersion(7520);
vh.recordVersion(7522);
vh.recordVersion(7523);
vh.recordVersion(7524);
vh.recordVersion(7525);
vh.recordVersion(7526);
vh.recordVersion(7527);
vh.recordVersion(7528);
vh.recordVersion(7530);
vh.recordVersion(7531);
vh.recordVersion(7532);
vh.recordVersion(7533);
vh.recordVersion(7534);
vh.recordVersion(7535);
vh.recordVersion(7536);
vh.recordVersion(7537);
vh.recordVersion(7538);
vh.recordVersion(7539);
vh.recordVersion(7540);
vh.recordVersion(7563);
vh.recordVersion(7564);
vh.recordVersion(7565);
vh.recordVersion(7566);
vh.recordVersion(7567);
vh.recordVersion(7568);
vh.recordVersion(7569);
vh.recordVersion(7570);
vh.recordVersion(7571);
vh.recordVersion(7572);
vh.recordVersion(7573);
vh.recordVersion(7574);
vh.recordVersion(7586);
vh.recordVersion(7587);
vh.recordVersion(7588);
vh.recordVersion(7589);
vh.recordVersion(7590);
vh.recordVersion(7591);
vh.recordVersion(7592);
vh.recordVersion(7593);
vh.recordVersion(7594);
vh.recordVersion(7603);
vh.recordVersion(7604);
vh.recordVersion(7610);
vh.recordVersion(7611);
vh.recordVersion(7612);
vh.recordVersion(7613);
vh.recordVersion(7623);
vh.recordVersion(7624);
vh.recordVersion(7625);
vh.recordVersion(7656);
vh.recordVersion(7659);
vh.recordVersion(7676);
vh.recordVersion(7677);
vh.recordVersion(7678);
vh.recordVersion(7679);
vh.recordVersion(7680);
vh.recordVersion(7704);
vh.recordVersion(7726);
vh.recordVersion(7727);
vh.recordVersion(7728);
vh.recordVersion(7729);
vh.recordVersion(7730);
vh.recordVersion(7731);
vh.recordVersion(7732);
vh.recordVersion(7733);
vh.recordVersion(7734);
vh.recordVersion(7735);
vh.recordVersion(7736);
vh.recordVersion(7744);
vh.recordVersion(7745);
vh.recordVersion(7746);
System.out.println("updated:\t" +vh);
vh.removeExceptionsOlderThan(8712);
System.out.println("after GC:\t" +vh);
RegionVersionHolder clone = vh.clone();
System.out.println("clone: \t\t" + clone);
assertTrue("Expected a version greater than 7746 but got this: " + clone, clone.getVersion() >=7746);
}
/**
* Test merging two version holders
*/
public void testInitializeFrom() {
testInitializeFrom(false);
testInitializeFrom(true);
}
private void testInitializeFrom(boolean withTreeSets) {
RVVException.UseTreeSetsForTesting = withTreeSets;
try {
//Create a bit set that represents some seen version
//with some exceptions
BitSet bs1 = new BitSet();
bs1.set(1, 6);
bs1.set(10, 13);
bs1.set(30, 51);
bs1.set(60, 66);
bs1.set(68, 101);
//Get a version holder that has seen these exceptions
RegionVersionHolder vh1 = buildHolder(bs1);
validateExceptions(vh1);
{
//Simple case, initialize an empty version holder
RegionVersionHolder vh2 = new RegionVersionHolder(member);
vh2.initializeFrom(vh1);
assertEquals("RVV=" + vh2, 100, vh2.getVersion());
compareWithBitSet(bs1, vh2);
validateExceptions(vh2);
}
{
//Initialize a vector that has seen some later versions, and has some older
//exceptions
BitSet bs2 = new BitSet();
//Add an exception that doesn't overlap with vh1 exceptions
bs2.set(80, 106);
bs2.set(72, 74);
//Add an exception that is contained within a vh1 exception
bs2.set(59,70);
bs2.set(57);
//Add exceptions that partially overlap a vh1 exception on either end
bs2.set(35,56);
bs2.set(15,26);
bs2.set(1,4);
RegionVersionHolder vh2 = buildHolder(bs2);
validateExceptions(vh2);
vh2.initializeFrom(vh1);
assertEquals(105, vh2.version);
assertEquals(100, vh2.getVersion());
compareWithBitSet(bs1, vh2);
RegionVersionHolder vh4 = vh2.clone();
assertEquals(105, vh4.version);
assertEquals(100, vh4.getVersion());
compareWithBitSet(bs1, vh4);
// use vh1 to overwrite vh2
vh1.version = 105;
vh1.addException(100,106);
assertTrue(vh2.sameAs(vh1));
validateExceptions(vh2);
}
} finally {
RVVException.UseTreeSetsForTesting = false;
}
}
/**
* Construct a region version holder that matches the seen revisions
* passed in the bit set.
*
*/
private RegionVersionHolder buildHolder(BitSet bs) {
//Createa version holder
RegionVersionHolder vh = new RegionVersionHolder(member);
//Record all of the version in the holder
recordVersions(vh, bs);
//Make sure the holder looks matches the bitset.
compareWithBitSet(bs, vh);
return vh;
}
/**
* Record all the versions represented in the bit set in the
* RegionVersionHolder. This method is overridden in subclasses
* to change the recording order.
*/
protected void recordVersions(RegionVersionHolder vh, BitSet bs) {
// System.out.println("vh="+vh);
for(int i =1; i < bs.length(); i++) {
if(bs.get(i)) {
vh.recordVersion(i);
// System.out.println("after adding " + i + ", vh="+vh);
}
}
}
/**
* Test a case in 46522 where the received exceptions end up
* not being in the RVV interval.
*/
public void testConsumeReceivedRevisions() {
testConsumeReceivedRevisions(false);
testConsumeReceivedRevisions(true);
}
private void testConsumeReceivedRevisions(boolean useTreeSets) {
try {
RVVException.UseTreeSetsForTesting = useTreeSets;
//Create a bit set which matches the seen versions of vh1
BitSet bs1 = new BitSet();
bs1.set(1, 6);
bs1.set(27, 29);
bs1.set(30, 41);
bs1.set(42, 43);
bs1.set(47, 49);
bs1.set(50, 101);
RegionVersionHolder vh1 = buildHolder(bs1);
validateExceptions(vh1);
compareWithBitSet(bs1, vh1);
{
//Initialize a vector that has seen some later versions, and has some older
//exceptions
BitSet bs2 = new BitSet();
//Add an exception that doesn't overlap with vh1 exceptions
bs2.set(1, 6);
bs2.set(20, 44);
bs2.set(49, 101);
RegionVersionHolder vh2 = buildHolder(bs2);
validateExceptions(vh2);
vh2.initializeFrom(vh1);
// bs2.or(bs1);
assertEquals(100, vh2.version);
compareWithBitSet(bs1, vh2);
validateExceptions(vh2);
}
} finally {
RVVException.UseTreeSetsForTesting = false;
}
}
public void testChangeSetForm() {
try {
RVVException.UseTreeSetsForTesting = true;
//Create a bit set which matches the seen versions of vh1
BitSet bs1 = new BitSet();
bs1.set(1024);
RegionVersionHolder vh1 = buildHolder(bs1);
bs1.set(510);
bs1.set(511);
bs1.set(512);
recordVersions(vh1, bs1);
validateExceptions(vh1);
compareWithBitSet(bs1, vh1);
} finally {
RVVException.UseTreeSetsForTesting = false;
}
}
private void compareWithBitSet(BitSet bitSet,
RegionVersionHolder versionHolder) {
for(int i = 1; i < bitSet.length(); i++) {
assertEquals("For entry " + i + " version=" + versionHolder, bitSet.get(i), versionHolder.contains(i));
}
}
/**
* Test the dominates relation between RegionVersionHolders.
*
* This test currently fails in the last case with two different
* holders with the same exception list expressed differently.
* Hence it is disabled.
*
* See bug 47106
*/
public void testDominates() {
testDominates(false);
testDominates(true);
}
private void testDominates(boolean useTreeSets) {
try {
RVVException.UseTreeSetsForTesting = useTreeSets;
//Simple case, - vh2 has a greater version than vh1
{
RegionVersionHolder vh1 = new RegionVersionHolder(member);
RegionVersionHolder vh2 = new RegionVersionHolder(member);
vh1.recordVersion(100);
BitSet bs1 = new BitSet();
bs1.set(1, 100);
recordVersions(vh1, bs1);
BitSet bs2 = new BitSet();
bs2.set(1, 105);
recordVersions(vh2, bs2);
assertFalse(vh1.dominates(vh2));
assertTrue(vh2.dominates(vh1));
}
// test with a gap between the bitsetVersion and the version
{
RegionVersionHolder vh1 = new RegionVersionHolder(member);
RegionVersionHolder vh2 = new RegionVersionHolder(member);
BitSet bs1 = new BitSet();
bs1.set(1, 101);
recordVersions(vh1, bs1);
// this test assumes that the width is much greater than 100, so use the
// original RegionVersionHolder.BIT_SET_WIDTH in order for the assertions to be correct
vh1.recordVersion(2*originalBitSetWidth);
BitSet bs2 = new BitSet();
bs2.set(1, 2*originalBitSetWidth+1);
recordVersions(vh2, bs2);
//vh1={rv2048 bsv100 bs={0, 1948}} or {rv2048 bsv2048 bs={0}; [e(n=2048 p=100)]} after merging
//vh2={rv2048 bsv2047 bs={0, 1}} or {rv2048 bsv2048 bs={0}} after merging
assertFalse(vh1.dominates(vh2));
assertTrue(vh2.dominates(vh1));
}
//More complicated. vh2 has a higher version, but has
//some exceptions that vh1 does not have.
{
RegionVersionHolder vh1 = new RegionVersionHolder(member);
RegionVersionHolder vh2 = new RegionVersionHolder(member);
BitSet bs1 = new BitSet();
bs1.set(1, 21);
bs1.set(30, 101);
recordVersions(vh1,bs1);
BitSet bs2 = new BitSet();
bs2.set(1, 50);
bs2.set(60, 105);
recordVersions(vh2, bs2);
//double check that we didn't screw up the bit sets
assertFalse(dominates(bs2, bs1));
assertFalse(dominates(bs1, bs2));
assertFalse(vh1.dominates(vh2));
assertFalse(vh2.dominates(vh1));
}
//Same version, but both have some exceptions the other doesn't
{
//VH2 will have exceptions for 20-25, 26-30, 41-43
RegionVersionHolder vh1 = new RegionVersionHolder(member);
BitSet bs1 = new BitSet();
//record some versions to generate two exceptions
bs1.set(1, 21);
bs1.set(30, 41);
bs1.set(43, 101);
recordVersions(vh1, bs1);
//now populate some older versions.
bs1.set(25);
bs1.set(26);
recordVersions(vh1, bs1);
//VH2 will have exceptions for 20-25, 26-30, 42-45
RegionVersionHolder vh2 = new RegionVersionHolder(member);
BitSet bs2 = new BitSet();
bs2.set(1, 21);
bs2.set(25, 27);
bs2.set(30, 43);
bs2.set(45, 101);
recordVersions(vh2, bs2);
assertFalse(vh1.dominates(vh2));
assertFalse(vh2.dominates(vh1));
}
//Same version, but vh2 has an exception that vh1 doesn't
{
RegionVersionHolder vh1 = new RegionVersionHolder(member);
BitSet bs1 = new BitSet();
bs1.set(1, 101);
recordVersions(vh1, bs1);
RegionVersionHolder vh2 = new RegionVersionHolder(member);
BitSet bs2 = new BitSet();
bs2.set(1,43);
bs2.set(45,101);
recordVersions(vh2, bs2);
assertTrue(vh1.dominates(vh2));
assertFalse(vh2.dominates(vh1));
}
//Same version, but vh2 has an exception that vh1 doesn't
//With overlapping exception
{
RegionVersionHolder vh1 = new RegionVersionHolder(member);
BitSet bs1 = new BitSet();
bs1.set(1, 44);
bs1.set(45, 101);
recordVersions(vh1, bs1);
RegionVersionHolder vh2 = new RegionVersionHolder(member);
BitSet bs2 = new BitSet();
bs2.set(1, 40);
bs2.set(45, 101);
recordVersions(vh1, bs1);
assertTrue(vh1.dominates(vh2));
assertFalse(vh2.dominates(vh1));
}
//Same version, but vh2 has an exception that vh1 doesn't
//With some differently expressed
//but equivalent exceptions.
{
RegionVersionHolder vh1 = new RegionVersionHolder(member);
BitSet bs1 = new BitSet();
bs1.set(1, 20);
bs1.set(30, 101);
recordVersions(vh1, bs1);
bs1.set(25);
bs1.set(26);
recordVersions(vh1, bs1);
RegionVersionHolder vh2 = new RegionVersionHolder(member);
BitSet bs2 = new BitSet();
bs2.set(1, 20);
bs2.set(30, 101);
bs2.set(25);
bs2.set(26);
recordVersions(vh2, bs2);
// vh1.sameAs(vh2); vh2.sameAs(vh1); //force bitsets to be merged
System.out.println("vh1="+vh1);
System.out.println("vh2="+vh2);
assertTrue(vh1.dominates(vh2));
assertTrue(vh2.dominates(vh1));
}
} finally {
RVVException.UseTreeSetsForTesting = false;
}
}
/**
* Return true if bs1 dominates bs2 - meaning that at least all of the bits
* set in bs2 are set in bs1.
* @param bs1
* @param bs2
* @return
*/
private boolean dominates(BitSet bs1, BitSet bs2) {
//bs1 dominates bs2 if it has set at least all of the bits in bs1.
BitSet copy = new BitSet();
//Make copy a copy of bit set 2
copy.or(bs2);
//Clear all of the bits in copy that are set in bit set 1
copy.andNot(bs1);
//If all of the bits have been cleared in copy, that means
//bit set 1 had at least all of the bits set that were set in
//bs2
return copy.isEmpty();
}
/**
* For test purposes, make sure this version holder is internally consistent.
*/
private void validateExceptions(RegionVersionHolder<?> holder) {
if (holder.getExceptionForTest() != null) {
for(RVVException ex : holder.getExceptionForTest()) {
// now it allows the special exception whose nextVersion==holder.version+1
if(ex.nextVersion > holder.version+1) {
Assert.assertTrue(false, "next version too large next=" + ex.nextVersion + " holder version " + holder.version);
}
if(ex.nextVersion <= ex.previousVersion) {
Assert.assertTrue(false, "bad next and previous next=" + ex.nextVersion + ", previous=" + ex.previousVersion);
}
for(ReceivedVersionsIterator it = ex.receivedVersionsIterator(); it.hasNext(); ) {
Long received = it.next();
if(received >= ex.nextVersion) {
Assert.assertTrue(false, "received greater than next next=" + ex.nextVersion + ", received=" + received + " exception=" + ex);
}
if(received <= ex.previousVersion) {
Assert.assertTrue(false, "received less than previous prev=" + ex.previousVersion + ", received=" + received);
}
}
if(ex.nextVersion - ex.previousVersion > 1000000) {
Assert.assertTrue(false, "to large a gap in exceptions prev=" + ex.previousVersion + ", next=" + ex.nextVersion);
}
}
}
}
}