@Test
  public void putWhileDataStoresAreBeingCreatedFails() throws Exception {
    VM accessor = getVM(0);
    VM datastore1 = getVM(1);
    VM datastore2 = getVM(2);
    VM datastore3 = getVM(3);

    accessor.invoke(() -> cache.set(new CacheFactory(getDistributedSystemProperties()).create()));
    datastore1.invoke(() -> cache.set(new CacheFactory(getDistributedSystemProperties()).create()));
    datastore2.invoke(() -> cache.set(new CacheFactory(getDistributedSystemProperties()).create()));
    datastore3.invoke(() -> cache.set(new CacheFactory(getDistributedSystemProperties()).create()));

    blackboard.initBlackboard();

    // Create an accessor for the PR
    accessor.invoke(
        () -> createPartitionedRegion(REGION_NAME, null, 0, 0, 12, newQuarterPartitionResolver()));

    // Set an observer in datastore 1 that will wait in the middle of PR creation
    datastore1.invoke(this::setPRObserverBeforeCalculateStartingBucketId);

    // Start datastore1 asynchronously. This will get stuck waiting in the PR observer
    AsyncInvocation<Void> createRegionInDatastore1 =
        datastore1.invokeAsync(() -> createRegionWithQuarter(QUARTER_1));

    // Make sure datastore 1 gets stuck waiting on the observer
    blackboard.waitForGate("waiting");

    // Start two more data stores asynchronously. These will get stuck waiting for a dlock behind
    // datastore1
    AsyncInvocation<Void> createRegionInDatastore2 =
        datastore2.invokeAsync(() -> createRegionWithQuarter(QUARTER_2));
    AsyncInvocation<Void> createRegionInDatastore3 =
        datastore3.invokeAsync(() -> createRegionWithQuarter(QUARTER_3));

    // Make sure a put to datastore1, which is in the middle of pr initialization, fails correctly
    accessor.invoke(() -> {
      Throwable thrown = catchThrowable(() -> {
        putForQuarter(REGION_NAME, QUARTER_1);
      });

      assertThat(thrown)
          .isInstanceOf(PartitionedRegionStorageException.class);
    });

    // Make sure a put to datastore2, which stuck behind datastore1 in initialization, fails
    // correctly
    accessor.invoke(() -> {
      Throwable thrown = catchThrowable(() -> {
        putForQuarter(REGION_NAME, QUARTER_2);
      });

      assertThat(thrown)
          .isInstanceOf(PartitionedRegionStorageException.class);
    });

    blackboard.signalGate("done");

    createRegionInDatastore1.await();
    createRegionInDatastore2.await();
    createRegionInDatastore3.await();
  }
This tests validate that accessor member does the put on datastores as per primary
FixedPartitionAttributes defined on datastores
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/partitioned/fixed/FixedPartitioningDUnitTest.java