org.apache.geode.internal.cache.partitioned.fixed.FixedPartitioningTestBase.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.geode.internal.cache.partitioned.fixed.FixedPartitioningTestBase.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for additional information regarding
 * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the License. You may obtain a
 * copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package org.apache.geode.internal.cache.partitioned.fixed;

import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.junit.experimental.categories.Category;

import org.apache.geode.SystemFailure;
import org.apache.geode.cache.AttributesFactory;
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.CacheFactory;
import org.apache.geode.cache.DataPolicy;
import org.apache.geode.cache.DiskStore;
import org.apache.geode.cache.FixedPartitionAttributes;
import org.apache.geode.cache.PartitionAttributesFactory;
import org.apache.geode.cache.PartitionResolver;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.control.RebalanceOperation;
import org.apache.geode.cache.control.RebalanceResults;
import org.apache.geode.cache.control.ResourceManager;
import org.apache.geode.cache.partition.PartitionRegionHelper;
import org.apache.geode.distributed.DistributedSystem;
import org.apache.geode.distributed.internal.DistributionConfig;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
import org.apache.geode.internal.FileUtil;
import org.apache.geode.internal.cache.FixedPartitionAttributesImpl;
import org.apache.geode.internal.cache.HARegion;
import org.apache.geode.internal.cache.PartitionRegionConfig;
import org.apache.geode.internal.cache.PartitionedRegion;
import org.apache.geode.internal.cache.PartitionedRegionHelper;
import org.apache.geode.internal.cache.execute.data.CustId;
import org.apache.geode.internal.cache.execute.data.Customer;
import org.apache.geode.internal.cache.execute.data.Order;
import org.apache.geode.internal.cache.execute.data.OrderId;
import org.apache.geode.internal.cache.execute.data.Shipment;
import org.apache.geode.internal.cache.execute.data.ShipmentId;
import org.apache.geode.internal.cache.partitioned.PartitionedRegionObserver;
import org.apache.geode.internal.cache.partitioned.PartitionedRegionObserverAdapter;
import org.apache.geode.internal.cache.partitioned.PartitionedRegionObserverHolder;
import org.apache.geode.test.dunit.Host;
import org.apache.geode.test.dunit.LogWriterUtils;
import org.apache.geode.test.dunit.VM;
import org.apache.geode.test.dunit.Wait;
import org.apache.geode.test.dunit.WaitCriterion;
import org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase;
import org.apache.geode.test.junit.categories.DistributedTest;

/**
 * This is the base class to do operations
 */
@Category(DistributedTest.class)
public class FixedPartitioningTestBase extends JUnit4DistributedTestCase {

    protected static String Quarter1 = "Q1";
    protected static String Quarter2 = "Q2";
    protected static String Quarter3 = "Q3";
    protected static String Quarter4 = "Q4";

    protected static VM member1 = null;

    protected static VM member2 = null;

    protected static VM member3 = null;

    protected static VM member4 = null;

    static Cache cache = null;

    protected static PartitionedRegion region_FPR = null;

    protected static int redundantCopies;

    private static PartitionedRegionObserver origObserver;

    public enum Months_Accessor {
        JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP
    };

    public enum Months_DataStore {
        JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
    };

    public enum Q1_Months {
        JAN, FEB, MAR
    };

    public enum Q2_Months {
        APR, MAY, JUN
    };

    public enum Q3_Months {
        JUL, AUG, SEP
    };

    public enum Q4_Months {
        OCT, NOV, DEC
    };

    public FixedPartitioningTestBase() {
        super();
    }

    public static void createCacheOnMember() {
        new FixedPartitioningTestBase().createCache();
    }

    public static void createCacheOnMember_DisableMovePrimary() {
        System.setProperty(DistributionConfig.GEMFIRE_PREFIX + "DISABLE_MOVE_PRIMARIES_ON_STARTUP", "true");
        new FixedPartitioningTestBase().createCache();
    }

    private void createCache() {
        try {
            Properties props = new Properties();
            cache = null;
            DistributedSystem ds = getSystem(props);
            assertNotNull(ds);
            ds.disconnect();
            ds = getSystem(props);
            cache = CacheFactory.create(ds);
            assertNotNull(cache);
        } catch (Exception e) {
            org.apache.geode.test.dunit.Assert.fail("Failed while creating the cache", e);
        }
    }

    public static void createRegionWithPartitionAttributes(String regionName,
            List<FixedPartitionAttributes> fpaList, Integer redCopies, Integer localMaxMemory,
            Integer totalNumBuckets, PartitionResolver resolver, String colocatedWith, boolean isPersistence) {
        PartitionAttributesFactory paf_FPR = new PartitionAttributesFactory();
        paf_FPR.setRedundantCopies(redCopies);
        paf_FPR.setLocalMaxMemory(localMaxMemory);
        paf_FPR.setTotalNumBuckets(totalNumBuckets);
        paf_FPR.setPartitionResolver(resolver);
        paf_FPR.setColocatedWith(colocatedWith);
        if (fpaList != null) {
            for (FixedPartitionAttributes fpa : fpaList) {
                paf_FPR.addFixedPartitionAttributes(fpa);
            }
        }
        AttributesFactory af_FPR = new AttributesFactory();
        af_FPR.setPartitionAttributes(paf_FPR.create());
        if (isPersistence) {
            DiskStore ds = cache.findDiskStore("disk");
            if (ds == null) {
                ds = cache.createDiskStoreFactory().setDiskDirs(getDiskDirs()).create("disk");
            }
            af_FPR.setDataPolicy(DataPolicy.PERSISTENT_PARTITION);
            af_FPR.setDiskStoreName("disk");
        }
        region_FPR = (PartitionedRegion) cache.createRegion(regionName, af_FPR.create());
        assertNotNull(region_FPR);
    }

    public static void doRebalance() {
        ResourceManager manager = cache.getResourceManager();
        RebalanceOperation operation = manager.createRebalanceFactory().start();
        try {
            RebalanceResults result = operation.getResults();
        } catch (InterruptedException e) {
            org.apache.geode.test.dunit.Assert.fail("Not expecting exception", e);
        }

    }

    public static File[] getDiskDirs() {
        return new File[] { getDiskDir() };
    }

    private static File getDiskDir() {
        int vmNum = VM.getCurrentVMNum();
        File dir = new File("diskDir", String.valueOf(vmNum)).getAbsoluteFile();
        dir.mkdirs();
        return dir;
    }

    public static void putThorughAccessor(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (Months_Accessor month : Months_Accessor.values()) {
            for (int i = 1; i < 10; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                String value = month.toString() + i;
                region_FPR.put(date, value);
            }
        }
    }

    public static void putThorughAccessor_Immediate(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (int i = 1; i < 10; i++) {
            for (Months_Accessor month : Months_Accessor.values()) {
                Date date = generateDate(i, month.toString(), "Date");
                String value = month.toString() + i;
                region_FPR.put(date, value);
            }
        }
    }

    public static void putThroughDataStore(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (Months_DataStore month : Months_DataStore.values()) {
            for (int i = 1; i < 10; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                String value = month.toString() + i;
                region_FPR.put(date, value);
            }
        }
    }

    public static void putForQuarter(String regionName, String quarters) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        if (quarters.equals("Q1")) {
            for (Q1_Months month : Q1_Months.values()) {
                for (int i = 1; i < 10; i++) {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    region_FPR.put(date, value);
                }
            }
        } else if (quarters.equals("Q2")) {
            for (Q2_Months month : Q2_Months.values()) {
                for (int i = 1; i < 10; i++) {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    region_FPR.put(date, value);
                }
            }
        } else if (quarters.equals("Q3")) {
            for (Q3_Months month : Q3_Months.values()) {
                for (int i = 1; i < 10; i++) {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    region_FPR.put(date, value);
                }
            }
        } else if (quarters.equals("Q4")) {
            for (Q4_Months month : Q4_Months.values()) {
                for (int i = 1; i < 10; i++) {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    region_FPR.put(date, value);
                }
            }
        } else {
            fail("Wrong Quarter");
        }
    }

    public static void getForQuarter(String regionName, String quarters) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        if (quarters.equals(Quarter1)) {
            for (Q1_Months month : Q1_Months.values()) {
                for (int i = 1; i < 10; i++) {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    assertEquals(value, region_FPR.get(date));
                }
            }
        } else if (quarters.equals(Quarter2)) {
            for (Q2_Months month : Q2_Months.values()) {
                for (int i = 1; i < 10; i++) {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    assertEquals(value, region_FPR.get(date));
                }
            }
        } else if (quarters.equals(Quarter3)) {
            for (Q3_Months month : Q3_Months.values()) {
                for (int i = 1; i < 10; i++) {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    assertEquals(value, region_FPR.get(date));
                }
            }
        } else if (quarters.equals(Quarter4)) {
            for (Q4_Months month : Q4_Months.values()) {
                for (int i = 1; i < 10; i++) {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    assertEquals(value, region_FPR.get(date));
                }
            }
        } else {
            fail("Wrong Quarter");
        }
    }

    public static void getForColocation(String customerRegion, String order, String shipment) {
        Region region_Cust = (PartitionedRegion) cache.getRegion(customerRegion);
        assertNotNull(region_Cust);
        for (int i = 1; i <= 20; i++) {
            CustId custid = new CustId(i);
            Customer customer = new Customer("name" + i, "Address" + i);
            try {
                assertEquals(customer, region_Cust.get(custid));
            } catch (Exception e) {
                org.apache.geode.test.dunit.Assert.fail(
                        "getForColocation : failed while doing get operation in CustomerPartitionedRegion ", e);
            }
        }
        Region region_Ord = (PartitionedRegion) cache.getRegion(order);
        assertNull(region_Ord);
        Region region_Ship = (PartitionedRegion) cache.getRegion(shipment);
        assertNull(region_Ship);
    }

    public static void getThroughDataStore(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (Months_DataStore month : Months_DataStore.values()) {
            for (int i = 1; i < 10; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                String value = month.toString() + i;
                assertEquals(value, region_FPR.get(date));
            }
        }
    }

    public static void putThroughDataStore_NoResolver(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (Months_DataStore month : Months_DataStore.values()) {
            for (int i = 1; i < 10; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                String value = month.toString() + i;
                region_FPR.put(date, value);
            }
        }
    }

    public static void putThroughDataStore_CallBackWithResolver(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (Months_DataStore month : Months_DataStore.values()) {
            for (int i = 1; i < 10; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                Date callbackDate = generateDate(i, month.toString(), "MyDate3");
                String value = month.toString() + i;
                region_FPR.put(date, value, callbackDate);
            }
        }
    }

    public static void putThroughDataStore_FixedPartitionResolver_NoResolver(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (Months_DataStore month : Months_DataStore.values()) {
            for (int i = 1; i < 10; i++) {
                if (i % 2 == 1) {
                    MyDate1 date = (MyDate1) generateDate(i, month.toString(), "MyDate1");
                    String value = month.toString() + i;
                    region_FPR.put(date, value);
                } else {
                    Date date = generateDate(i, month.toString(), "Date");
                    String value = month.toString() + i;
                    region_FPR.put(date, value);
                }

            }
        }
    }

    public static void putThroughDataStore_FixedPartitionResolver_PartitionResolver(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (int i = 1; i < 10; i++) {
            for (Months_DataStore month : Months_DataStore.values()) {
                if (month.ordinal() % 2 == 1) {
                    MyDate1 date = (MyDate1) generateDate(i, month.toString(), "MyDate1");
                    String value = month.toString() + i;
                    region_FPR.put(date, value);
                } else {
                    MyDate2 date = (MyDate2) generateDate(i, month.toString(), "MyDate2");
                    String value = month.toString() + i;
                    region_FPR.put(date, value);
                }
            }
        }
    }

    public static void deleteOperation(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        Date date = generateDate(1, "JAN", "Date");
        region_FPR.destroy(date);
    }

    public static void putOperation(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        Date date = generateDate(1, "JAN", "Date");
        region_FPR.put(date, "Jan1");
    }

    public static void putCustomerPartitionedRegion(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);

        for (int i = 1; i <= 40; i++) {
            CustId custid = new CustId(i);
            Customer customer = new Customer("name" + i, "Address" + i);
            try {
                partitionedregion.put(custid, customer);
            } catch (Exception e) {
                org.apache.geode.test.dunit.Assert.fail(
                        "putCustomerPartitionedRegion : failed while doing put operation in CustomerPartitionedRegion ",
                        e);
            }
            LogWriterUtils.getLogWriter().info("Customer :- { " + custid + " : " + customer + " }");
        }
    }

    public static void putOrderPartitionedRegion(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);

        for (int i = 1; i <= 40; i++) {
            CustId custid = new CustId(i);
            for (int j = 1; j <= 10; j++) {
                int oid = (i * 10) + j;
                OrderId orderId = new OrderId(oid, custid);
                Order order = new Order("OREDR" + oid);
                try {
                    partitionedregion.put(orderId, order);
                } catch (Exception e) {
                    org.apache.geode.test.dunit.Assert.fail(
                            "putOrderPartitionedRegion : failed while doing put operation in OrderPartitionedRegion ",
                            e);
                }
                LogWriterUtils.getLogWriter().info("Order :- { " + orderId + " : " + order + " }");
            }
        }
    }

    public static void putShipmentPartitionedRegion(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);
        for (int i = 1; i <= 40; i++) {
            CustId custid = new CustId(i);
            for (int j = 1; j <= 10; j++) {
                int oid = (i * 10) + j;
                OrderId orderId = new OrderId(oid, custid);
                for (int k = 1; k <= 10; k++) {
                    int sid = (oid * 10) + k;
                    ShipmentId shipmentId = new ShipmentId(sid, orderId);
                    Shipment shipment = new Shipment("Shipment" + sid);
                    try {
                        partitionedregion.put(shipmentId, shipment);
                    } catch (Exception e) {
                        org.apache.geode.test.dunit.Assert.fail(
                                "putShipmentPartitionedRegion : failed while doing put operation in ShipmentPartitionedRegion ",
                                e);
                    }
                    LogWriterUtils.getLogWriter().info("Shipment :- { " + shipmentId + " : " + shipment + " }");
                }
            }
        }
    }

    public static void putCustomerPartitionedRegion_Persistence(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);

        for (int i = 1; i <= 20; i++) {
            CustId custid = new CustId(i);
            Customer customer = new Customer("name" + i, "Address" + i);
            try {
                partitionedregion.put(custid, customer);
            } catch (Exception e) {
                org.apache.geode.test.dunit.Assert.fail(
                        "putCustomerPartitionedRegion : failed while doing put operation in CustomerPartitionedRegion ",
                        e);
            }
            LogWriterUtils.getLogWriter().info("Customer :- { " + custid + " : " + customer + " }");
        }
    }

    public static void putOrderPartitionedRegion_Persistence(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);

        for (int i = 1; i <= 20; i++) {
            CustId custid = new CustId(i);
            for (int j = 1; j <= 10; j++) {
                int oid = (i * 10) + j;
                OrderId orderId = new OrderId(oid, custid);
                Order order = new Order("OREDR" + oid);
                try {
                    partitionedregion.put(orderId, order);
                } catch (Exception e) {
                    org.apache.geode.test.dunit.Assert.fail(
                            "putOrderPartitionedRegion : failed while doing put operation in OrderPartitionedRegion ",
                            e);
                }
                LogWriterUtils.getLogWriter().info("Order :- { " + orderId + " : " + order + " }");
            }
        }
    }

    public static void putShipmentPartitionedRegion_Persistence(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);
        for (int i = 1; i <= 20; i++) {
            CustId custid = new CustId(i);
            for (int j = 1; j <= 10; j++) {
                int oid = (i * 10) + j;
                OrderId orderId = new OrderId(oid, custid);
                for (int k = 1; k <= 10; k++) {
                    int sid = (oid * 10) + k;
                    ShipmentId shipmentId = new ShipmentId(sid, orderId);
                    Shipment shipment = new Shipment("Shipment" + sid);
                    try {
                        partitionedregion.put(shipmentId, shipment);
                    } catch (Exception e) {
                        org.apache.geode.test.dunit.Assert.fail(
                                "putShipmentPartitionedRegion : failed while doing put operation in ShipmentPartitionedRegion ",
                                e);
                    }
                    LogWriterUtils.getLogWriter().info("Shipment :- { " + shipmentId + " : " + shipment + " }");
                }
            }
        }
    }

    public static void putCustomerPartitionedRegion_Persistence1(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);

        for (int i = 1; i <= 20; i++) {
            if (i % 2 == 0) {
                CustId custid = new CustId(i);
                Customer customer = new Customer("name" + i, "Address" + i);
                try {
                    partitionedregion.put(custid, customer);
                } catch (Exception e) {
                    org.apache.geode.test.dunit.Assert.fail(
                            "putCustomerPartitionedRegion : failed while doing put operation in CustomerPartitionedRegion ",
                            e);
                }
                LogWriterUtils.getLogWriter().info("Customer :- { " + custid + " : " + customer + " }");
            }
        }
    }

    public static void putOrderPartitionedRegion_Persistence1(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);

        for (int i = 1; i <= 20; i++) {
            if (i % 2 == 0) {
                CustId custid = new CustId(i);
                for (int j = 1; j <= 10; j++) {
                    int oid = (i * 10) + j;
                    OrderId orderId = new OrderId(oid, custid);
                    Order order = new Order("OREDR" + oid);
                    try {
                        partitionedregion.put(orderId, order);
                    } catch (Exception e) {
                        org.apache.geode.test.dunit.Assert.fail(
                                "putOrderPartitionedRegion : failed while doing put operation in OrderPartitionedRegion ",
                                e);
                    }
                    LogWriterUtils.getLogWriter().info("Order :- { " + orderId + " : " + order + " }");
                }
            }
        }
    }

    public static void putShipmentPartitionedRegion_Persistence1(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);
        for (int i = 1; i <= 20; i++) {
            if (i % 2 == 0) {
                CustId custid = new CustId(i);
                for (int j = 1; j <= 10; j++) {
                    int oid = (i * 10) + j;
                    OrderId orderId = new OrderId(oid, custid);
                    for (int k = 1; k <= 10; k++) {
                        int sid = (oid * 10) + k;
                        ShipmentId shipmentId = new ShipmentId(sid, orderId);
                        Shipment shipment = new Shipment("Shipment" + sid);
                        try {
                            partitionedregion.put(shipmentId, shipment);
                        } catch (Exception e) {
                            org.apache.geode.test.dunit.Assert.fail(
                                    "putShipmentPartitionedRegion : failed while doing put operation in ShipmentPartitionedRegion ",
                                    e);
                        }
                        LogWriterUtils.getLogWriter().info("Shipment :- { " + shipmentId + " : " + shipment + " }");
                    }
                }
            }
        }
    }

    public static void putCustomerPartitionedRegion_Persistence2(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);

        for (int i = 1; i <= 20; i++) {
            if (i % 2 == 1) {
                CustId custid = new CustId(i);
                Customer customer = new Customer("name" + i, "Address" + i);
                try {
                    partitionedregion.put(custid, customer);
                } catch (Exception e) {
                    org.apache.geode.test.dunit.Assert.fail(
                            "putCustomerPartitionedRegion : failed while doing put operation in CustomerPartitionedRegion ",
                            e);
                }
                LogWriterUtils.getLogWriter().info("Customer :- { " + custid + " : " + customer + " }");
            }
        }
    }

    public static void putOrderPartitionedRegion_Persistence2(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);

        for (int i = 1; i <= 20; i++) {
            if (i % 2 == 1) {
                CustId custid = new CustId(i);
                for (int j = 1; j <= 10; j++) {
                    int oid = (i * 10) + j;
                    OrderId orderId = new OrderId(oid, custid);
                    Order order = new Order("OREDR" + oid);
                    try {
                        partitionedregion.put(orderId, order);
                    } catch (Exception e) {
                        org.apache.geode.test.dunit.Assert.fail(
                                "putOrderPartitionedRegion : failed while doing put operation in OrderPartitionedRegion ",
                                e);
                    }
                    LogWriterUtils.getLogWriter().info("Order :- { " + orderId + " : " + order + " }");
                }
            }
        }
    }

    public static void putShipmentPartitionedRegion_Persistence2(String partitionedRegionName) {
        assertNotNull(cache);
        Region partitionedregion = cache.getRegion(Region.SEPARATOR + partitionedRegionName);
        assertNotNull(partitionedregion);
        for (int i = 1; i <= 20; i++) {
            if (i % 2 == 1) {
                CustId custid = new CustId(i);
                for (int j = 1; j <= 10; j++) {
                    int oid = (i * 10) + j;
                    OrderId orderId = new OrderId(oid, custid);
                    for (int k = 1; k <= 10; k++) {
                        int sid = (oid * 10) + k;
                        ShipmentId shipmentId = new ShipmentId(sid, orderId);
                        Shipment shipment = new Shipment("Shipment" + sid);
                        try {
                            partitionedregion.put(shipmentId, shipment);
                        } catch (Exception e) {
                            org.apache.geode.test.dunit.Assert.fail(
                                    "putShipmentPartitionedRegion : failed while doing put operation in ShipmentPartitionedRegion ",
                                    e);
                        }
                        LogWriterUtils.getLogWriter().info("Shipment :- { " + shipmentId + " : " + shipment + " }");
                    }
                }
            }
        }
    }

    public static void putHAData(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        assertNotNull(region_FPR);
        for (Months_DataStore month : Months_DataStore.values()) {
            for (int i = 10; i < 20; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                String value = month.toString() + i;
                region_FPR.put(date, value);
            }
        }
    }

    private static Date generateDate(int i, String month, String dateType) {
        String year = "2010";
        String day = null;
        if (i > 0 && i < 10) {
            day = "0" + i;
        } else {
            day = Integer.toString(i);
        }
        String dateString = day + "-" + month + "-" + year;
        String DATE_FORMAT = "dd-MMM-yyyy";
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT, Locale.US);
        try {
            if (StringUtils.equals(dateType, "Date")) {
                return sdf.parse(dateString);
            } else if (StringUtils.equals(dateType, "MyDate1")) {
                return new MyDate1(sdf.parse(dateString).getTime());
            } else if (StringUtils.equals(dateType, "MyDate2")) {
                return new MyDate2(sdf.parse(dateString).getTime());
            } else if (StringUtils.equals(dateType, "MyDate3")) {
                return new MyDate3(sdf.parse(dateString).getTime());
            } else {
                return null;
            }
        } catch (ParseException e) {
            org.apache.geode.test.dunit.Assert.fail("Exception occurred while parsing date", e);
        }
        return null;
    }

    public static void validateAfterPutPartitionedRegion(String customerPartitionedRegionName,
            String orderPartitionedRegionName, String shipmentPartitionedRegionName) throws ClassNotFoundException {

        assertNotNull(cache);
        PartitionedRegion customerPartitionedregion = null;
        PartitionedRegion orderPartitionedregion = null;
        PartitionedRegion shipmentPartitionedregion = null;
        try {
            customerPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + customerPartitionedRegionName);
            orderPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + orderPartitionedRegionName);
            shipmentPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + shipmentPartitionedRegionName);
        } catch (Exception e) {
            org.apache.geode.test.dunit.Assert
                    .fail("validateAfterPutPartitionedRegion : failed while getting the region", e);
        }
        assertNotNull(customerPartitionedregion);

        for (int i = 0; i < 10; i++) {
            InternalDistributedMember idmForCustomer = customerPartitionedregion.getBucketPrimary(i);
            InternalDistributedMember idmForOrder = orderPartitionedregion.getBucketPrimary(i);
            InternalDistributedMember idmForShipment = shipmentPartitionedregion.getBucketPrimary(i);

            // take all the keys from the shipment for each bucket
            Set customerKey = customerPartitionedregion.getBucketKeys(i);
            assertNotNull(customerKey);
            Iterator customerIterator = customerKey.iterator();
            while (customerIterator.hasNext()) {
                CustId custId = (CustId) customerIterator.next();
                assertNotNull(customerPartitionedregion.get(custId));
                Set orderKey = orderPartitionedregion.getBucketKeys(i);
                assertNotNull(orderKey);
                Iterator orderIterator = orderKey.iterator();
                while (orderIterator.hasNext()) {
                    OrderId orderId = (OrderId) orderIterator.next();
                    // assertNotNull(orderPartitionedregion.get(orderId));

                    if (custId.equals(orderId.getCustId())) {
                        LogWriterUtils.getLogWriter()
                                .info(orderId + "belongs to node " + idmForCustomer + " " + idmForOrder);
                        assertEquals(idmForCustomer, idmForOrder);
                    }
                    Set shipmentKey = shipmentPartitionedregion.getBucketKeys(i);
                    assertNotNull(shipmentKey);
                    Iterator shipmentIterator = shipmentKey.iterator();
                    while (shipmentIterator.hasNext()) {
                        ShipmentId shipmentId = (ShipmentId) shipmentIterator.next();
                        // assertNotNull(shipmentPartitionedregion.get(shipmentId));
                        if (orderId.equals(shipmentId.getOrderId())) {
                            LogWriterUtils.getLogWriter()
                                    .info(shipmentId + "belongs to node " + idmForOrder + " " + idmForShipment);
                        }
                    }
                }
            }
        }
    }

    public static void checkPrimaryData(String partitionName) {
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        if (partitionName.equals(Quarter1)) {
            assertEquals(27, localRegion.size());
            assertTRUE_Q1(false);
            assertFALSE_Q2(false);
            assertFALSE_Q3(false);
            assertFALSE_Q4(false);
        } else if (partitionName.equals(Quarter2)) {
            assertEquals(27, localRegion.size());
            assertFALSE_Q1(false);
            assertTRUE_Q2(false);
            assertFALSE_Q3(false);
            assertFALSE_Q4(false);
        } else if (partitionName.equals(Quarter3)) {
            assertEquals(27, localRegion.size());
            assertFALSE_Q1(false);
            assertFALSE_Q2(false);
            assertTRUE_Q3(false);
            assertFALSE_Q4(false);
        } else if (partitionName.equals(Quarter4)) {
            assertEquals(27, localRegion.size());
            assertFALSE_Q1(false);
            assertFALSE_Q2(false);
            assertFALSE_Q3(false);
            assertTRUE_Q4(false);
        }
    }

    public static void checkPrimaryDataPersistence(String partitionName) {
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        if (partitionName.equals(Quarter1)) {
            assertEquals(27 * 2, localRegion.size());
            assertTRUE_Q1(false);
            assertTRUE_Q2(false);
            assertFALSE_Q3(false);
            assertFALSE_Q4(false);
        } else if (partitionName.equals(Quarter2)) {
            assertEquals(27 * 2, localRegion.size());
            assertTRUE_Q1(false);
            assertTRUE_Q2(false);
            assertFALSE_Q3(false);
            assertFALSE_Q4(false);
        } else if (partitionName.equals(Quarter3)) {
            assertEquals(27, localRegion.size());
            assertFALSE_Q1(false);
            assertFALSE_Q2(false);
            assertTRUE_Q3(false);
            assertFALSE_Q4(false);
        } else if (partitionName.equals(Quarter4)) {
            assertEquals(27, localRegion.size());
            assertFALSE_Q1(false);
            assertFALSE_Q2(false);
            assertFALSE_Q3(false);
            assertTRUE_Q4(false);
        }
    }

    public static void checkPrimarySecondaryData(String partitionName, Boolean isHA) {
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        if (partitionName.equals(Quarter1)) {
            assertTRUE_Q1(isHA.booleanValue());
            assertTRUE_Q2(isHA.booleanValue());
            assertFALSE_Q3(isHA.booleanValue());
            assertFALSE_Q4(isHA.booleanValue());
        } else if (partitionName.equals(Quarter2)) {
            assertFALSE_Q1(isHA.booleanValue());
            assertTRUE_Q2(isHA.booleanValue());
            assertTRUE_Q3(isHA.booleanValue());
            assertFALSE_Q4(isHA.booleanValue());
        } else if (partitionName.equals(Quarter3)) {
            assertFALSE_Q1(isHA.booleanValue());
            assertFALSE_Q2(isHA.booleanValue());
            assertTRUE_Q3(isHA.booleanValue());
            assertTRUE_Q4(isHA.booleanValue());
        } else if (partitionName.equals(Quarter4)) {
            assertTRUE_Q1(isHA.booleanValue());
            assertFALSE_Q2(isHA.booleanValue());
            assertFALSE_Q3(isHA.booleanValue());
            assertTRUE_Q4(isHA.booleanValue());
        }
    }

    public static void checkPrimarySecondaryData_TwoSecondaries(String partitionName, Boolean isHA) {
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        if (partitionName.equals(Quarter1)) {
            assertTRUE_Q1(isHA.booleanValue());
            assertFALSE_Q2(isHA.booleanValue());
            assertTRUE_Q3(isHA.booleanValue());
            assertTRUE_Q4(isHA.booleanValue());
        } else if (partitionName.equals(Quarter2)) {
            assertFALSE_Q1(isHA.booleanValue());
            assertTRUE_Q2(isHA.booleanValue());
            assertTRUE_Q3(isHA.booleanValue());
            assertTRUE_Q4(isHA.booleanValue());
        } else if (partitionName.equals(Quarter3)) {
            assertTRUE_Q1(isHA.booleanValue());
            assertTRUE_Q2(isHA.booleanValue());
            assertTRUE_Q3(isHA.booleanValue());
            assertFALSE_Q4(isHA.booleanValue());
        } else if (partitionName.equals(Quarter4)) {
            assertTRUE_Q1(isHA.booleanValue());
            assertTRUE_Q2(isHA.booleanValue());
            assertFALSE_Q3(isHA.booleanValue());
            assertTRUE_Q4(isHA.booleanValue());
        }
    }

    public static void assertTRUE_Q1(boolean isHA) {
        int day = isHA ? 20 : 10;
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        for (Q1_Months month : Q1_Months.values()) {
            for (int i = 1; i < day; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                assertTrue(localRegion.keySet().contains(date));
            }
        }
    }

    public static void assertTRUE_Q2(boolean isHA) {
        int day = isHA ? 20 : 10;
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        for (Q2_Months month : Q2_Months.values()) {
            for (int i = 1; i < day; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                assertTrue(localRegion.keySet().contains(date));
            }
        }
    }

    public static void assertTRUE_Q3(boolean isHA) {
        int day = isHA ? 20 : 10;
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        for (Q3_Months month : Q3_Months.values()) {
            for (int i = 1; i < day; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                assertTrue(localRegion.keySet().contains(date));
            }
        }
    }

    public static void assertTRUE_Q4(boolean isHA) {
        int day = isHA ? 20 : 10;
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        for (Q4_Months month : Q4_Months.values()) {
            for (int i = 1; i < day; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                assertTrue(localRegion.keySet().contains(date));
            }
        }
    }

    public static void assertFALSE_Q1(boolean isHA) {
        int day = isHA ? 20 : 10;
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        for (Q1_Months month : Q1_Months.values()) {
            for (int i = 1; i < day; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                assertFalse(localRegion.keySet().contains(date));
            }
        }
    }

    public static void assertFALSE_Q2(boolean isHA) {
        int day = isHA ? 20 : 10;
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        for (Q2_Months month : Q2_Months.values()) {
            for (int i = 1; i < day; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                assertFalse(localRegion.keySet().contains(date));
            }
        }
    }

    public static void assertFALSE_Q3(boolean isHA) {
        int day = isHA ? 20 : 10;
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        for (Q3_Months month : Q3_Months.values()) {
            for (int i = 1; i < day; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                assertFalse(localRegion.keySet().contains(date));
            }
        }
    }

    public static void assertFALSE_Q4(boolean isHA) {
        int day = isHA ? 20 : 10;
        Region localRegion = PartitionRegionHelper.getLocalData(region_FPR);
        for (Q4_Months month : Q4_Months.values()) {
            for (int i = 1; i < day; i++) {
                Date date = generateDate(i, month.toString(), "Date");
                assertFalse(localRegion.keySet().contains(date));
            }
        }
    }

    public static void checkPrimaryBucketsForQuarter(Integer numBuckets, Integer primaryBuckets) {
        HashMap localBucket2RegionMap = (HashMap) region_FPR.getDataStore().getSizeLocally();
        LogWriterUtils.getLogWriter().info("Size of the " + region_FPR + " in this VM :- "
                + localBucket2RegionMap.size() + "List of buckets : " + localBucket2RegionMap.keySet());
        assertEquals(numBuckets.intValue(), localBucket2RegionMap.size());
        LogWriterUtils.getLogWriter().info("Size of primary buckets the " + region_FPR + " in this VM :- "
                + region_FPR.getDataStore().getNumberOfPrimaryBucketsManaged());
        LogWriterUtils.getLogWriter()
                .info("Lit of Primaries in this VM :- " + region_FPR.getDataStore().getAllLocalPrimaryBucketIds());

        assertEquals(primaryBuckets.intValue(), region_FPR.getDataStore().getNumberOfPrimaryBucketsManaged());
    }

    public static void checkPrimaryBucketsForQuarterAfterCacheClosed(Integer numBuckets, Integer primaryBuckets) {
        HashMap localBucket2RegionMap = (HashMap) region_FPR.getDataStore().getSizeLocally();
        LogWriterUtils.getLogWriter().info("Size of the " + region_FPR + " in this VM :- "
                + localBucket2RegionMap.size() + "List of buckets : " + localBucket2RegionMap.keySet());
        assertEquals(numBuckets.intValue(), localBucket2RegionMap.size());
        LogWriterUtils.getLogWriter().info("Size of primary buckets the " + region_FPR + " in this VM :- "
                + region_FPR.getDataStore().getNumberOfPrimaryBucketsManaged());
        LogWriterUtils.getLogWriter()
                .info("Lit of Primaries in this VM :- " + region_FPR.getDataStore().getAllLocalPrimaryBucketIds());

        assertEquals(region_FPR.getDataStore().getNumberOfPrimaryBucketsManaged() % primaryBuckets.intValue(), 0);
    }

    public static void checkPrimaryBucketsForCustomer(Integer numBuckets, Integer primaryBuckets,
            String customerPartitionedRegionName) {
        PartitionedRegion customerPartitionedregion = null;
        try {
            customerPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + customerPartitionedRegionName);
        } catch (Exception e) {
            org.apache.geode.test.dunit.Assert
                    .fail("validateAfterPutPartitionedRegion : failed while getting the region", e);
        }
        HashMap localBucket2RegionMap_Customer = (HashMap) customerPartitionedregion.getDataStore()
                .getSizeLocally();
        assertEquals(numBuckets.intValue(), localBucket2RegionMap_Customer.size());
        List primaryBuckets_Customer = customerPartitionedregion.getDataStore()
                .getLocalPrimaryBucketsListTestOnly();
        assertEquals(primaryBuckets.intValue(), primaryBuckets_Customer.size());
    }

    public static void checkPrimaryBucketsForColocation(Integer numBuckets, Integer primaryBuckets,
            String customerPartitionedRegionName, String orderPartitionedRegionName,
            String shipmentPartitionedRegionName) {
        assertNotNull(cache);
        PartitionedRegion customerPartitionedregion = null;
        PartitionedRegion orderPartitionedregion = null;
        PartitionedRegion shipmentPartitionedregion = null;
        try {
            customerPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + customerPartitionedRegionName);
            orderPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + orderPartitionedRegionName);
            shipmentPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + shipmentPartitionedRegionName);
        } catch (Exception e) {
            org.apache.geode.test.dunit.Assert
                    .fail("validateAfterPutPartitionedRegion : failed while getting the region", e);
        }
        HashMap localBucket2RegionMap_Customer = (HashMap) customerPartitionedregion.getDataStore()
                .getSizeLocally();
        HashMap localBucket2RegionMap_Order = (HashMap) orderPartitionedregion.getDataStore().getSizeLocally();
        HashMap localBucket2RegionMap_Shipment = (HashMap) shipmentPartitionedregion.getDataStore()
                .getSizeLocally();
        assertEquals(numBuckets.intValue(), localBucket2RegionMap_Customer.size());
        assertEquals(numBuckets.intValue(), localBucket2RegionMap_Order.size());
        assertEquals(numBuckets.intValue(), localBucket2RegionMap_Shipment.size());

        assertEquals(localBucket2RegionMap_Customer.keySet(), localBucket2RegionMap_Order.keySet());
        assertEquals(localBucket2RegionMap_Customer.keySet(), localBucket2RegionMap_Shipment.keySet());
        assertEquals(localBucket2RegionMap_Order.keySet(), localBucket2RegionMap_Shipment.keySet());

        List primaryBuckets_Customer = customerPartitionedregion.getDataStore()
                .getLocalPrimaryBucketsListTestOnly();
        List primaryBuckets_Order = orderPartitionedregion.getDataStore().getLocalPrimaryBucketsListTestOnly();
        List primaryBuckets_Shipment = shipmentPartitionedregion.getDataStore()
                .getLocalPrimaryBucketsListTestOnly();

        assertEquals(primaryBuckets.intValue(), primaryBuckets_Customer.size());
        assertEquals(primaryBuckets.intValue(), primaryBuckets_Order.size());
        assertEquals(primaryBuckets.intValue(), primaryBuckets_Shipment.size());

        assertEquals(primaryBuckets_Customer, primaryBuckets_Order);
        assertEquals(primaryBuckets_Customer, primaryBuckets_Shipment);
        assertEquals(primaryBuckets_Order, primaryBuckets_Shipment);
    }

    public static void checkPrimaryBucketsForColocationAfterCacheClosed(Integer numBuckets, Integer primaryBuckets,
            String customerPartitionedRegionName, String orderPartitionedRegionName,
            String shipmentPartitionedRegionName) {
        assertNotNull(cache);
        PartitionedRegion customerPartitionedregion = null;
        PartitionedRegion orderPartitionedregion = null;
        PartitionedRegion shipmentPartitionedregion = null;
        try {
            customerPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + customerPartitionedRegionName);
            orderPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + orderPartitionedRegionName);
            shipmentPartitionedregion = (PartitionedRegion) cache
                    .getRegion(Region.SEPARATOR + shipmentPartitionedRegionName);
        } catch (Exception e) {
            org.apache.geode.test.dunit.Assert
                    .fail("validateAfterPutPartitionedRegion : failed while getting the region", e);
        }
        HashMap localBucket2RegionMap_Customer = (HashMap) customerPartitionedregion.getDataStore()
                .getSizeLocally();
        HashMap localBucket2RegionMap_Order = (HashMap) orderPartitionedregion.getDataStore().getSizeLocally();
        HashMap localBucket2RegionMap_Shipment = (HashMap) shipmentPartitionedregion.getDataStore()
                .getSizeLocally();
        assertEquals(numBuckets.intValue(), localBucket2RegionMap_Customer.size());
        assertEquals(numBuckets.intValue(), localBucket2RegionMap_Order.size());
        assertEquals(numBuckets.intValue(), localBucket2RegionMap_Shipment.size());

        assertEquals(localBucket2RegionMap_Customer.keySet(), localBucket2RegionMap_Order.keySet());
        assertEquals(localBucket2RegionMap_Customer.keySet(), localBucket2RegionMap_Shipment.keySet());
        assertEquals(localBucket2RegionMap_Order.keySet(), localBucket2RegionMap_Shipment.keySet());

        List primaryBuckets_Customer = customerPartitionedregion.getDataStore()
                .getLocalPrimaryBucketsListTestOnly();
        List primaryBuckets_Order = orderPartitionedregion.getDataStore().getLocalPrimaryBucketsListTestOnly();
        List primaryBuckets_Shipment = shipmentPartitionedregion.getDataStore()
                .getLocalPrimaryBucketsListTestOnly();

        assertEquals(primaryBuckets_Customer.size() % primaryBuckets.intValue(), 0);
        assertEquals(primaryBuckets_Order.size() % primaryBuckets.intValue(), 0);
        assertEquals(primaryBuckets_Shipment.size() % primaryBuckets.intValue(), 0);

        assertEquals(primaryBuckets_Customer, primaryBuckets_Order);
        assertEquals(primaryBuckets_Customer, primaryBuckets_Shipment);
        assertEquals(primaryBuckets_Order, primaryBuckets_Shipment);
    }

    public static void checkFPR(String regionName) {
        region_FPR = (PartitionedRegion) cache.getRegion(regionName);
        PartitionedRegion colocatedRegion = (PartitionedRegion) cache.getRegion(region_FPR.getColocatedWith());
        List<FixedPartitionAttributesImpl> childFPAs = region_FPR.getFixedPartitionAttributesImpl();
        List<FixedPartitionAttributesImpl> parentFPAs = colocatedRegion.getFixedPartitionAttributesImpl();
        assertEquals(parentFPAs, childFPAs);
    }

    public static void checkStartingBucketIDs() {
        assertEquals(region_FPR.getDataStore().getAllLocalPrimaryBucketIds().size() % 3, 0);

    }

    public static void checkStartingBucketIDs_Nodedown() {
        assertEquals(region_FPR.getDataStore().getAllLocalPrimaryBucketIds().size() % 3, 0);
    }

    public static void checkStartingBucketIDs_Nodeup() {
        assertEquals(region_FPR.getDataStore().getAllLocalPrimaryBucketIds().size() % 3, 0);
    }

    public static void setPRObserverBeforeCalculateStartingBucketId() {
        PartitionedRegion.BEFORE_CALCULATE_STARTING_BUCKET_FLAG = true;
        origObserver = PartitionedRegionObserverHolder.setInstance(new PartitionedRegionObserverAdapter() {
            public void beforeCalculatingStartingBucketId() {
                WaitCriterion wc = new WaitCriterion() {
                    String excuse;

                    public boolean done() {
                        Region prRoot = PartitionedRegionHelper.getPRRoot(cache);
                        PartitionRegionConfig regionConfig = (PartitionRegionConfig) prRoot.get("#Quarter");
                        if (regionConfig == null) {
                            return false;
                        } else {
                            if (!regionConfig.isFirstDataStoreCreated()) {
                                return true;
                            } else {
                                return false;
                            }
                        }
                    }

                    public String description() {
                        return excuse;
                    }
                };
                Wait.waitForCriterion(wc, 20000, 500, false);
                LogWriterUtils.getLogWriter().info("end of beforeCalculatingStartingBucketId");
            }
        });
    }

    public static void resetPRObserverBeforeCalculateStartingBucketId() throws Exception {
        PartitionedRegion.BEFORE_CALCULATE_STARTING_BUCKET_FLAG = false;
    }

    @Override
    public final void preTearDown() throws Exception {
        try {
            closeCache();
            member1.invoke(() -> FixedPartitioningTestBase.closeCache());
            member2.invoke(() -> FixedPartitioningTestBase.closeCache());
            member3.invoke(() -> FixedPartitioningTestBase.closeCache());
            member4.invoke(() -> FixedPartitioningTestBase.closeCache());
        } finally {
            // locally destroy all root regions and close the cache
            remoteTearDown();
            // Now invoke it in every VM
            for (int h = 0; h < Host.getHostCount(); h++) {
                Host host = Host.getHost(h);
                for (int v = 0; v < host.getVMCount(); v++) {
                    VM vm = host.getVM(v);
                    vm.invoke(() -> FixedPartitioningTestBase.remoteTearDown());
                }
            }
        }
    }

    /**
     * Local destroy all root regions and close the cache.
     */
    protected synchronized static void remoteTearDown() {
        try {
            if (cache != null && !cache.isClosed()) {
                // try to destroy the root regions first so that
                // we clean up any persistent files.
                for (Iterator itr = cache.rootRegions().iterator(); itr.hasNext();) {
                    Region root = (Region) itr.next();
                    // String name = root.getName();
                    // for colocated regions you can't locally destroy a partitioned
                    // region.
                    if (root.isDestroyed() || root instanceof HARegion || root instanceof PartitionedRegion) {
                        continue;
                    }
                    try {
                        root.localDestroyRegion("teardown");
                    } catch (VirtualMachineError e) {
                        SystemFailure.initiateFailure(e);
                        throw e;
                    } catch (Throwable t) {
                        LogWriterUtils.getLogWriter().error(t);
                    }
                }
            }
        } finally {
            try {
                closeCache();
            } catch (VirtualMachineError e) {
                SystemFailure.initiateFailure(e);
                throw e;
            } catch (Throwable t) {
                LogWriterUtils.getLogWriter().error("Error in closing the cache ", t);

            }
        }

        try {
            cleanDiskDirs();
        } catch (IOException e) {
            LogWriterUtils.getLogWriter().error("Error cleaning disk dirs", e);
        }
    }

    public static void cleanDiskDirs() throws IOException {
        FileUtil.delete(getDiskDir());
    }

    public static void closeCache() {
        System.clearProperty(DistributionConfig.GEMFIRE_PREFIX + "DISABLE_MOVE_PRIMARIES_ON_STARTUP");
        // System.setProperty("gemfire.DISABLE_MOVE_PRIMARIES_ON_STARTUP", "false");
        if (cache != null && !cache.isClosed()) {
            cache.close();
            cache.getDistributedSystem().disconnect();
        }
    }

}