[ 
https://issues.apache.org/jira/browse/GEODE-3063?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16286737#comment-16286737
 ] 

ASF GitHub Bot commented on GEODE-3063:
---------------------------------------

karensmolermiller closed pull request #1105: GEODE-3063 partition resolver doc 
revisions
URL: https://github.com/apache/geode/pull/1105
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/geode-book/master_middleman/source/subnavs/geode-subnav.erb 
b/geode-book/master_middleman/source/subnavs/geode-subnav.erb
index b976f09ccc..0c672793bb 100644
--- a/geode-book/master_middleman/source/subnavs/geode-subnav.erb
+++ b/geode-book/master_middleman/source/subnavs/geode-subnav.erb
@@ -868,7 +868,10 @@ limitations under the License.
                                         <a 
href="/docs/guide/<%=vars.product_version_nodot%>/developing/partitioned_regions/custom_partitioning_and_data_colocation.html">Understanding
 Custom Partitioning and Data Colocation</a>
                                     </li>
                                     <li>
-                                        <a 
href="/docs/guide/<%=vars.product_version_nodot%>/developing/partitioned_regions/using_custom_partition_resolvers.html">Custom-Partition
 Your Region Data</a>
+                                        <a 
href="/docs/guide/<%=vars.product_version_nodot%>/developing/partitioned_regions/standard_custom_partitioning.html">Standard
 Custom Partitioning</a>
+                                    </li>
+                                    <li>
+                                        <a 
href="/docs/guide/<%=vars.product_version_nodot%>/developing/partitioned_regions/fixed_custom_partitioning.html">Fixed
 Custom Partitioning</a>
                                     </li>
                                     <li>
                                         <a 
href="/docs/guide/<%=vars.product_version_nodot%>/developing/partitioned_regions/colocating_partitioned_region_data.html">Colocate
 Data from Different Partitioned Regions</a>
diff --git 
a/geode-docs/developing/partitioned_regions/colocating_partitioned_region_data.html.md.erb
 
b/geode-docs/developing/partitioned_regions/colocating_partitioned_region_data.html.md.erb
index 962c21ea83..db405d3814 100644
--- 
a/geode-docs/developing/partitioned_regions/colocating_partitioned_region_data.html.md.erb
+++ 
b/geode-docs/developing/partitioned_regions/colocating_partitioned_region_data.html.md.erb
@@ -19,27 +19,19 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 -->
 
-By default, <%=vars.product_name%> allocates the data locations for a 
partitioned region independent of the data locations for any other partitioned 
region. You can change this policy for any group of partitioned regions, so 
that cross-region, related data is all hosted by the same member. This 
colocation speeds queries and other operations that access data from the 
regions.
+By default, <%=vars.product_name%> allocates the data locations for a 
partitioned region independent of the data locations for any other partitioned 
region. You can change this policy for any group of partitioned regions, so 
that cross-region, related data is all hosted by the same member.
+Colocation is required for some operations,
+and it increases performance for others by reducing the number of data
+accesses to entries that are hosted on other cluster members.
 
 <a 
id="colocating_partitioned_region_data__section_131EC040055E48A6B35E981B5C845A65"></a>
-**Note:**
-If you are colocating data between regions and custom partitioning the data in 
the regions, all colocated regions must use partitioning mechanisms that return 
the same routing object. The most common approach, though not the only one, is 
for all colocated regions to use the same custom PartitionResolver. See 
[Custom-Partition Your Region Data](using_custom_partition_resolvers.html).
 
 Data colocation between partitioned regions generally improves the performance 
of data-intensive operations. You can reduce network hops for iterative 
operations on related data sets. Compute-heavy applications that are 
data-intensive can significantly increase overall throughput. For example, a 
query run on a patient's health records, insurance, and billing information is 
more efficient if all data is grouped in a single member. Similarly, a 
financial risk analytical application runs faster if all trades, risk 
sensitivities, and reference data associated with a single instrument are 
together.
 
-**Prerequisites**
-
-<a 
id="colocating_partitioned_region_data__section_5A8D752F02834146A37D9430F1CA32DA"></a>
-
--   Understand how to configure and create your partitioned regions. See 
[Understanding Partitioning](how_partitioning_works.html) and [Configuring 
Partitioned 
Regions](managing_partitioned_regions.html#configure_partitioned_regions).
--   (Optional) Understand how to custom-partition your data. See 
[Custom-Partition Your Region Data](using_custom_partition_resolvers.html).
--   (Optional) If you want your colocated regions to be highly available, 
understand how high availability for partitioned regions works. See 
[Understanding High Availability for Partitioned 
Regions](how_pr_ha_works.html#how_pr_ha_works).
--   (Optional) Understand how to persist your region data. See [Configure 
Region Persistence and 
Overflow](../storing_data_on_disk/storing_data_on_disk.html).
-
 **Procedure**
 
 1.  Identify one region as the central region, with which data in the other 
regions is explicitly colocated. If you use persistence for any of the regions, 
you must persist the central region.
-    1.  Create the central region before you create the others, either in the 
cache.xml or your code. Regions in the XML are created before regions in the 
code, so if you create any of your colocated regions in the XML, you must 
create the central region in the XML before the others. <%=vars.product_name%> 
will verify its existence when the others are created and return 
`IllegalStateException` if the central region is not there. Do not add any 
colocation specifications to this central region.
+    1.  Create the central region before you create the others, either in the 
`cache.xml` or your code. Regions in the XML are created before regions in the 
code, so if you create any of your colocated regions in the XML, you must 
create the central region in the XML before the others. <%=vars.product_name%> 
will verify its existence when the others are created and return 
`IllegalStateException` if the central region is not there. Do not add any 
colocation specifications to this central region.
     2.  For all other regions, in the region partition attributes, provide the 
central region's name in the `colocated-with` attribute. Use one of these 
methods:
         -   XML:
 
@@ -65,10 +57,13 @@ Data colocation between partitioned regions generally 
improves the performance o
 
             ``` pre
             PartitionAttributes attrs = ...
-            Region trades = new 
RegionFactory().setPartitionAttributes(attrs).create("trades");
+            Region trades = new RegionFactory().setPartitionAttributes(attrs)
+                .create("trades");
             ...
-            attrs = new 
PartitionAttributesFactory().setColocatedWith(trades.getFullPath()).create();
-            Region trade_history = new 
RegionFactory().setPartitionAttributes(attrs).create("trade_history");
+            attrs = new 
PartitionAttributesFactory().setColocatedWith(trades.getFullPath())
+                .create();
+            Region trade_history = new 
RegionFactory().setPartitionAttributes(attrs)
+                .create("trade_history");
             ```
         -   gfsh:
 
@@ -83,7 +78,7 @@ Data colocation between partitioned regions generally 
improves the performance o
     -   `startup-recovery-delay`
     -   `total-num-buckets`
 
-3.  If you custom partition your region data, provide the same custom resolver 
to all colocated regions:
+3.  If you custom partition your region data, specify the custom resolver for 
all colocated regions. This example uses the same partition resolver for both 
regions:
     -   XML:
 
         ``` pre
@@ -115,14 +110,18 @@ Data colocation between partitioned regions generally 
improves the performance o
         PartitionAttributes attrs = 
             new PartitionAttributesFactory()
             .setPartitionResolver(resolver).create();
-        Region trades = new 
RegionFactory().setPartitionAttributes(attrs).create("trades");
+        Region trades = new RegionFactory().setPartitionAttributes(attrs)
+            .create("trades");
         attrs = new PartitionAttributesFactory()
-            
.setColocatedWith(trades.getFullPath()).setPartitionResolver(resolver).create();
-        Region trade_history = new 
RegionFactory().setPartitionAttributes(attrs).create("trade_history");
+            
.setColocatedWith(trades.getFullPath()).setPartitionResolver(resolver)
+            .create();
+        Region trade_history = new 
RegionFactory().setPartitionAttributes(attrs)
+            .create("trade_history");
         ```
     -   gfsh:
 
-        You cannot specify a partition resolver using gfsh.
+        Specify a partition resolver as described in the configuration
+        section of [Custom-Partition Your Region 
Data](using_custom_partition_resolvers.html).
 
 4.  If you want to persist data in the colocated regions, persist the central 
region and then persist the other regions as needed. Use the same disk store 
for all of the colocated regions that you persist.
 
diff --git 
a/geode-docs/developing/partitioned_regions/custom_partitioning_and_data_colocation.html.md.erb
 
b/geode-docs/developing/partitioned_regions/custom_partitioning_and_data_colocation.html.md.erb
index 62e5cabf20..ebf8bb9637 100644
--- 
a/geode-docs/developing/partitioned_regions/custom_partitioning_and_data_colocation.html.md.erb
+++ 
b/geode-docs/developing/partitioned_regions/custom_partitioning_and_data_colocation.html.md.erb
@@ -23,32 +23,30 @@ Custom partitioning and data colocation can be used 
separately or in conjunction
 
 ## <a 
id="custom_partitioning_and_data_colocation__section_ABFEE9CB17AF44F1AE252AC10FB5E999"
 class="no-quick-link"></a>Custom Partitioning
 
-Use custom partitioning to group like entries into region buckets within a 
region. By default, <%=vars.product_name%> assigns new entries to buckets based 
on the entry key contents. With custom partitioning, you can assign your 
entries to buckets in whatever way you want.
+Use custom partitioning to group like entries into region buckets within a 
region. By default, <%=vars.product_name%> assigns new entries to buckets based 
on the entry key's hash code. With custom partitioning, you can assign your 
entries to buckets in whatever way you want.
 
-You can generally get better performance if you use custom partitioning to 
group similar data within a region. For example, a query run on all accounts 
created in January runs faster if all January account data is hosted by a 
single member. Grouping all data for a single customer can improve performance 
of data operations that work on customer data. Data aware function execution 
takes advantage of custom partitioning.
+You can generally get better performance if you use custom partitioning to 
group similar data within a region. For example, a query run on all accounts 
created in January runs faster if all January account data is hosted by a 
single member. Grouping all data for a single customer can improve performance 
of data operations that work on customer data. Data aware function execution 
also takes advantage of custom partitioning.
 
-This figure shows a region with customer data that is grouped into buckets by 
customer.
+With custom partitioning, you have two choices:
 
-<img src="../../images_svg/custom_partitioned.svg" 
id="custom_partitioning_and_data_colocation__image_1D37D547D3244171BB9CADAEC88E7649"
 class="image" />
-
-With custom partitioning, you have three choices:
-
--   **Default string-based partition resolver**. A default partition
-resolver at `org.apache.geode.cache.util.StringPrefixPartitionResolver`
-groups entries into buckets based on a string portion of the key.
-All keys must be strings, specified with a syntax that includes
-a '|' character that delimits the string.
-The substring that precedes the '|' delimiter within the key
-partitions the entry.  
--   **Standard custom partitioning**. With standard partitioning, you group 
entries into buckets, but you do not specify where the buckets reside. 
<%=vars.product_name%> always keeps the entries in the buckets you have 
specified, but may move the buckets around for load balancing.
--   **Fixed custom partitioning**. With fixed partitioning, you provide 
standard partitioning plus you specify the exact member where each data entry 
resides. You do this by assigning the data entry to a bucket and to a partition 
and by naming specific members as primary and secondary hosts of each partition.
+-   **Standard custom partitioning**. With standard custom partitioning, you 
group entries into buckets, but you do not specify where the buckets reside. 
<%=vars.product_name%> always keeps the entries in the buckets you have 
specified, but may move the buckets around for load balancing.
+See [Standard Custom Partitioning](standard_custom_partitioning.html) for
+implementation and configuration details.
+-   **Fixed custom partitioning**. With fixed custom partitioning,
+you specify the exact member where each region entry resides.
+You assign an entry to a partition and then to a bucket within
+that partition.
+You name specific members as primary and secondary hosts of each partition.
 
     This gives you complete control over the locations of your primary and any 
secondary buckets for the region. This can be useful when you want to store 
specific data on specific physical machines or when you need to keep data close 
to certain hardware elements.
 
     Fixed partitioning has these requirements and caveats:
 
-    -   <%=vars.product_name%> cannot rebalance fixed partition region data 
because it cannot move the buckets around among the host members. You must 
carefully consider your expected data loads for the partitions you create.
-    -   With fixed partitioning, the region configuration is different between 
host members. Each member identifies the named partitions it hosts, and whether 
it is hosting the primary copy or a secondary copy. You then program fixed 
partition resolver to return the partition id, so the entry is placed on the 
right members. Only one member can be primary for a particular partition name 
and that member cannot be the partition's secondary.
+    -   <%=vars.product_name%> cannot rebalance fixed partition region data, 
because it cannot move the buckets around among the host members. You must 
carefully consider your expected data loads for the partitions you create.
+    -   With fixed partitioning, the region configuration is different between 
host members. Each member identifies the named partitions it hosts, and whether 
it is hosting the primary copy or a secondary copy. You then program a 
fixed-partition resolver to return the partition id, so the entry is placed on 
the right members. Only one member can be primary for a particular partition 
name, and that member cannot be the partition's secondary.
+
+    See [Fixed Custom Partitioning](fixed_custom_partitioning.html) for
+implementation and configuration details.
 
 ## <a 
id="custom_partitioning_and_data_colocation__section_D2C66951FE38426F9C05050D2B9028D8"
 class="no-quick-link"></a>Data Colocation Between Regions
 
@@ -63,3 +61,5 @@ This figure shows two regions with data colocation where the 
data is partitioned
 Data colocation requires the same data partitioning mechanism for all of the 
colocated regions. You can use the default partitioning provided by 
<%=vars.product_name%> or any of the custom partitioning strategies.
 
 You must use the same high availability settings across your colocated regions.
+
+See [Colocate Data from Different Partitioned 
Regions](colocating_partitioned_region_data.html) for implementation and 
configuration details.
diff --git 
a/geode-docs/developing/partitioned_regions/fixed_custom_partitioning.html.md.erb
 
b/geode-docs/developing/partitioned_regions/fixed_custom_partitioning.html.md.erb
new file mode 100644
index 0000000000..a5f85d8bf3
--- /dev/null
+++ 
b/geode-docs/developing/partitioned_regions/fixed_custom_partitioning.html.md.erb
@@ -0,0 +1,204 @@
+---
+title:  Fixed Custom Partitioning
+---
+
+<!--
+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.
+-->
+
+By default, <%=vars.product_name%> partitions each data entry
+into a bucket using a hashing policy on the key.
+Additionally, the physical location of the key-value pair is
+abstracted away from the application.
+You can change these policies for a partitioned region
+by providing a fixed custom partition resolver that not only maps entries
+to a set of buckets called a partition,
+but also specifies which members host which data buckets.  
+
+<a 
id="custom_partition_region_data__section_CF05CE974C9C4AF78430DA55601D2158"></a>
+**Note:**
+If you are both colocating region data and custom partitioning,
+all colocated regions must use the same custom partitioning mechanism.
+See [Colocate Data from Different Partitioned 
Regions](colocating_partitioned_region_data.html#colocating_partitioned_region_data).
+
+To custom-partition your region data, follow two steps:
+
+- implement the interface
+- configure the regions
+
+These steps differ based on which partition resolver is used.
+
+**Implementing Fixed Custom Partitioning**
+
+-   Implement the `org.apache.geode.cache.FixedPartitionResolver`
+interface within one of the following locations,
+listed here in the search order used by <%=vars.product_name%>:
+    -   **Custom class**. Specify this class as the partition resolver during 
region creation.
+    -   **Entry key**. For keys implemented as objects, define the interface 
for the key's class.
+    -   **Within the cache callback class**. Implement the interface
+within a cache callback's class. When using this implementation,
+any and all `Region` operations must be those that specify the callback
+as a parameter.
+
+-   Implement the resolver's `getName`, `init`, and `close` methods.
+
+    A simple implementation of `getName` is
+
+    ``` pre
+    return getClass().getName();
+    ```
+
+    The `init` method does any initialization steps upon cache
+    start that relate to the partition resolver's task. 
+
+    The `close` method accomplishes any clean up that must be accomplished
+    before a cache close completes. For example, `close` might close
+    files or connections that the partition resolver opened. 
+
+-   Implement the resolver's `getRoutingObject` method to return 
+the routing object for each entry.
+A hash of that returned routing object determines the bucket
+within a partition.
+   
+    This method can be empty for fixed partitioning where there is
+only one bucket per partition.
+That implementation assigns partitions to servers
+such that the application has full control of grouping entries
+on servers.
+
+    **Note:**
+    Only fields on the key should be used when creating the routing object. Do 
not use the value or additional metadata for this purpose.
+
+-   Implement the `getPartitionName` method 
+to return the name of the partition for each entry,
+based on where you want the entries to reside.
+All entries within a partition will be on a single server.
+
+    This example places the data based on date, with a different partition 
name for each quarter-year and a different routing object for each month.
+
+    ``` pre
+    /**
+     * Returns one of four different partition names
+     * (Q1, Q2, Q3, Q4) depending on the entry's date
+     */
+    class QuarterFixedPartitionResolver implements
+        FixedPartitionResolver<String, String> {
+
+      @Override
+      public String getPartitionName(EntryOperation<String, String> opDetails,
+          Set<String> targetPartitions) {
+
+         Date date = (Date)opDetails.getKey();
+         Calendar cal = Calendar.getInstance();
+         cal.setTime(date);
+         int month = cal.get(Calendar.MONTH);
+         if (month >= 0 && month < 3) {
+            if (targetPartitions.contains("Q1")) return "Q1";
+         }
+         else if (month >= 3 && month < 6) {
+            if (targetPartitions.contains("Q2")) return "Q2";
+         }
+         else if (month >= 6 && month < 9) {
+            if (targetPartitions.contains("Q3")) return "Q3";
+         }
+         else if (month >= 9 && month < 12) {
+            if (targetPartitions.contains("Q4")) return "Q4";
+         }
+         return "Invalid Quarter";
+      }
+
+      @Override
+      public String getName() {
+         return "QuarterFixedPartitionResolver";
+      }
+
+      @Override
+      public Serializable getRoutingObject(EntryOperation<String, String> 
opDetails) {
+         Date date = (Date)opDetails.getKey();
+         Calendar cal = Calendar.getInstance();
+         cal.setTime(date);
+         int month = cal.get(Calendar.MONTH);
+         return month;
+      }
+
+      @Override
+      public void close() {
+      }
+    }
+    ```
+
+**Configuring Fixed Custom Partitioning**
+
+-  Set the fixed-partition attributes for each member.
+
+    These attributes define the data stored for the region by the member and 
must be different for different members. See 
`org.apache.geode.cache.FixedPartitionAttributes` for definitions of the 
attributes. Define each `partition-name` in your data-host members for the 
region. For each partition name, in the member you want to host the primary 
copy, define it with `is-primary` set to `true`. In every member you want to 
host the secondary copy, define it with `is-primary` set to `false` (the 
default). The number of secondaries must match the number of redundant copies 
you have defined for the region. See [Configure High Availability for a 
Partitioned Region](configuring_ha_for_pr.html).
+
+    **Note:**
+    Buckets for a partition are hosted only by the members that have defined 
the partition name in their `FixedPartitionAttributes`.
+
+    These examples set the partition attributes for a member to be the primary 
host for the "Q1" partition data and a secondary host for "Q3" partition data.
+    -   XML:
+
+        ``` pre
+        <cache>
+           <region name="Trades">
+              <region-attributes>
+                 <partition-attributes redundant-copies="1">
+                   <partition-resolver>
+                      
<class-name>myPackage.QuarterFixedPartitionResolver</class-name>
+                   </partition-resolver>
+                   <fixed-partition-attributes partition-name="Q1" 
is-primary="true"/>
+                   <fixed-partition-attributes partition-name="Q3" 
is-primary="false"
+                        num-buckets="6"/>
+                 </partition-attributes> 
+              </region-attributes>
+           </region>
+        </cache>
+        ```
+    -   Java:
+
+
+        ``` pre
+        FixedPartitionAttribute fpa1 = FixedPartitionAttributes
+             .createFixedPartition("Q1", true);
+        FixedPartitionAttribute fpa3 = FixedPartitionAttributes
+             .createFixedPartition("Q3", false, 6);
+
+        PartitionAttributesFactory paf = new PartitionAttributesFactory()
+             .setPartitionResolver(new QuarterFixedPartitionResolver())
+             .setTotalNumBuckets(12)
+             .setRedundantCopies(2)
+             .addFixedPartitionAttribute(fpa1)
+             .addFixedPartitionAttribute(fpa3);
+
+        Cache c = new CacheFactory().create();
+
+        Region r = c.createRegionFactory()
+            .setPartitionAttributes(paf.create())
+            .create("Trades");
+        ```
+    -   gfsh:
+
+        You cannot specify a fixed partition resolver using gfsh.
+
+-   If your colocated data is in a server system,
+add the class that implements the `FixedPartitionResolver` interface
+to the `CLASSPATH` of your Java clients.
+For Java single-hop access to work,
+the resolver class needs to have a zero-argument constructor,
+and the resolver class must not have any state;
+the `init` method is included in this restriction.
+
diff --git 
a/geode-docs/developing/partitioned_regions/overview_custom_partitioning_and_data_colocation.html.md.erb
 
b/geode-docs/developing/partitioned_regions/overview_custom_partitioning_and_data_colocation.html.md.erb
index b2ebc08e8b..b5f809af57 100644
--- 
a/geode-docs/developing/partitioned_regions/overview_custom_partitioning_and_data_colocation.html.md.erb
+++ 
b/geode-docs/developing/partitioned_regions/overview_custom_partitioning_and_data_colocation.html.md.erb
@@ -25,12 +25,18 @@ You can customize how <%=vars.product_name_long%> groups 
your partitioned region
 
     Custom partitioning and data colocation can be used separately or in 
conjunction with one another.
 
--   **[Custom-Partition Your Region 
Data](using_custom_partition_resolvers.html)**
+-   **[Standard Custom Partitioning](standard_custom_partitioning.html)**
 
-    By default, <%=vars.product_name%> partitions each data entry into a 
bucket using a hashing policy on the key. Additionally, the physical location 
of the key-value pair is abstracted away from the application. You can change 
these policies for a partitioned region. You can provide your own data 
partitioning resolver and you can additionally specify which members host which 
data buckets.
+    By default, <%=vars.product_name%> partitions each data entry into a 
bucket using a hashing policy on the key. Additionally, the physical location 
of the key-value pair is abstracted away from the application. You can change 
these policies for a partitioned region by providing a standard partition 
resolver that maps entries to a set of buckets called a partition.
 
--   **[Colocate Data from Different Partitioned 
Regions](colocating_partitioned_region_data.html)**
+-   **[Fixed Custom Partitioning](fixed_custom_partitioning.html)**
+
+    By default, <%=vars.product_name%> partitions each data entry into a 
bucket using a hashing policy on the key. Additionally, the physical location 
of the key-value pair is abstracted away from the application. You can change 
these policies for a partitioned region by providing a fixed partition resolver 
that not only maps entries to a set of buckets called a partition, but also 
specifies which members host which data buckets.
 
-    By default, <%=vars.product_name%> allocates the data locations for a 
partitioned region independent of the data locations for any other partitioned 
region. You can change this policy for any group of partitioned regions, so 
that cross-region, related data is all hosted by the same member. This 
colocation speeds queries and other operations that access data from the 
regions.
+-   **[Colocate Data from Different Partitioned 
Regions](colocating_partitioned_region_data.html)**
 
+    By default, <%=vars.product_name%> allocates the data locations for a 
partitioned region independent of the data locations for any other partitioned 
region. You can change this policy for any group of partitioned regions, so 
that cross-region, related data is all hosted by the same member.
+Colocation is required for some operations,
+and it increases performance for others by reducing the number of data
+accesses to entries that are hosted on other cluster members.
 
diff --git 
a/geode-docs/developing/partitioned_regions/standard_custom_partitioning.html.md.erb
 
b/geode-docs/developing/partitioned_regions/standard_custom_partitioning.html.md.erb
new file mode 100644
index 0000000000..6b71b24ca4
--- /dev/null
+++ 
b/geode-docs/developing/partitioned_regions/standard_custom_partitioning.html.md.erb
@@ -0,0 +1,178 @@
+---
+title:  Standard Custom Partitioning
+---
+
+<!--
+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.
+-->
+
+By default, <%=vars.product_name%> partitions each data entry
+into a bucket using a hashing policy on the key.
+Additionally, the physical location of the key-value pair
+is abstracted away from the application.
+You can change these policies for a partitioned region
+by providing a standard custom partition resolver that maps entries
+in a custom manner.
+
+<a 
id="custom_partition_region_data__section_CF05CE974C9C4AF78430DA55601D2158"></a>
+**Note:**
+If you are both colocating region data and custom partitioning,
+all colocated regions must use the same custom partitioning mechanism.
+See [Colocate Data from Different Partitioned 
Regions](colocating_partitioned_region_data.html#colocating_partitioned_region_data).
+
+To custom-partition your region data, follow two steps:
+
+- implement the interface
+- configure the regions
+
+**Implementing Standard Custom Partitioning**
+
+-   Implement the `org.apache.geode.cache.PartitionResolver` interface
+in one of the following ways,
+listed here in the search order used by <%=vars.product_name%>:
+    -   **Using a custom class**. Implement the `PartitionResolver` within 
your class, and then specify your class as the partition
+resolver during region creation.
+    -   **Using the key's class**. Have the entry key's class implement the 
`PartitionResolver` interface.
+    -   **Using the callback argument's class**. Have the class that
+implements your callback argument implement the `PartitionResolver`
+interface. When using this implementation,
+any and all `Region` operations must be those that specify the callback
+argument.
+
+-   Implement the resolver's `getName`, `init`, and `close` methods.
+
+    A simple implementation of `getName` is
+
+    ``` pre
+    return getClass().getName();
+    ```
+
+    The `init` method does any initialization steps upon cache
+    start that relate to the partition resolver's task. 
+    This method is only invoked when using a custom class that is
+    configured by `gfsh` or by XML (in a `cache.xml` file).
+
+    The `close` method accomplishes any clean up that must be accomplished
+    before a cache close completes. For example, `close` might close
+    files or connections that the partition resolver opened. 
+
+-   Implement the resolver's `getRoutingObject` method to return 
+the routing object for each entry.
+A hash of that returned routing object determines the bucket.
+Therefore, `getRoutingObject` should return an object that,
+when run through its `hashCode`, directs grouped objects to the
+desired bucket.
+
+    **Note:**
+    Only the key, as returned by `getKey`, should be used by
+`getRoutingObject`.  Do not use the value associated with the key or any 
additional metadata in the implementation of `getRoutingObject`.
+Do not use `getOperation` or `getValue`.
+
+**Implementing the String Prefix Partition Resolver**
+
+<%=vars.product_name%> provides an implementation of a
+string-based partition resolver in
+`org.apache.geode.cache.util.StringPrefixPartitionResolver`.
+This resolver does not require any further implementation.
+It groups entries into buckets based on a portion of the key.
+All keys must be strings, and each key must include
+a '|' character, which delimits the string.
+The substring that precedes the '|' delimiter within the key
+will be returned by `getRoutingObject`.
+
+**Configuring the Partition Resolver Region Attribute**
+
+Configure the region so <%=vars.product_name%> finds your resolver
+for all region operations.
+
+- **Custom class**.
+Use one of these methods to specify the partition resolver region
+attribute:
+
+    **gfsh:**
+
+    Add the option `--partition-resolver` to the `gfsh create region` command, 
specifying the package and class name of the standard custom partition resolver.
+
+    **gfsh for the String Prefix Partition Resolver:**
+    
+    Add the option 
`--partition-resolver=org.apache.geode.cache.util.StringPrefixPartitionResolver`
 to the `gfsh create region` command.
+
+    **Java API:**
+
+    ``` pre
+    PartitionResolver resolver = new TradesPartitionResolver();
+    PartitionAttributes attrs = 
+        new PartitionAttributesFactory()
+        .setPartitionResolver(resolver).create();
+
+    Cache c = new CacheFactory().create();
+
+    Region r = c.createRegionFactory()
+        .setPartitionAttributes(attrs)
+        .create("trades");
+    ```
+
+    **Java API for the String Prefix Partition Resolver:**
+    
+    ``` pre
+    PartitionAttributes attrs = 
+        new PartitionAttributesFactory()
+        .setPartitionResolver(new StringPrefixPartitionResolver()).create();
+        
+    Cache c = new CacheFactory().create();
+        
+    Region r = c.createRegionFactory()
+        .setPartitionAttributes(attrs)
+        .create("customers");
+    ```
+
+    **XML:**
+
+    ``` pre
+    <region name="trades">
+        <region-attributes>
+            <partition-attributes>
+                <partition-resolver> 
+                    <class-name>myPackage.TradesPartitionResolver
+                    </class-name>
+                </partition-resolver>
+            <partition-attributes>
+        </region-attributes>
+    </region>
+    ```
+
+    **XML for the String Prefix Partition Resolver:**
+    
+    ``` pre
+    <region name="customers">
+        <region-attributes>
+            <partition-attributes>
+                <partition-resolver> 
+                    
<class-name>org.apache.geode.cache.util.StringPrefixPartitionResolver
+                    </class-name>
+                </partition-resolver>
+            <partition-attributes>
+        </region-attributes>
+    </region>
+    ```
+
+-   If your colocated data is in a server system,
+add the `PartitionResolver` implementation class to the `CLASSPATH`
+of your Java clients. 
+For Java single-hop access to work,
+the resolver class needs to have a zero-argument constructor,
+and the resolver class must not have any state;
+the `init` method is included in this restriction.
diff --git 
a/geode-docs/developing/partitioned_regions/using_custom_partition_resolvers.html.md.erb
 
b/geode-docs/developing/partitioned_regions/using_custom_partition_resolvers.html.md.erb
index 44b45d81c9..1255f48ab7 100644
--- 
a/geode-docs/developing/partitioned_regions/using_custom_partition_resolvers.html.md.erb
+++ 
b/geode-docs/developing/partitioned_regions/using_custom_partition_resolvers.html.md.erb
@@ -19,47 +19,67 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 -->
 
-By default, <%=vars.product_name%> partitions each data entry into a bucket 
using a hashing policy on the key. Additionally, the physical location of the 
key-value pair is abstracted away from the application. You can change these 
policies for a partitioned region. You can provide your own data partitioning 
resolver and you can additionally specify which members host which data buckets.
+By default, <%=vars.product_name%> partitions each data entry into a bucket 
using a hashing policy on the key. 
+Additionally, the physical location of the key-value pair 
+is abstracted away from the application.
+You can change these policies for a partitioned region by providing
+your own partition resolver.
+The partitioning can go further with a fixed-partition resolver
+that specifies which members host which data buckets.
 
 <a 
id="custom_partition_region_data__section_CF05CE974C9C4AF78430DA55601D2158"></a>
 **Note:**
-If you are colocating data between regions and custom partitioning the data in 
the regions, all colocated regions must use the same custom partitioning 
mechanism. See [Colocate Data from Different Partitioned 
Regions](colocating_partitioned_region_data.html#colocating_partitioned_region_data).
+If you are both colocating region data and custom partitioning,
+all colocated regions must use the same custom partitioning mechanism.
+See [Colocate Data from Different Partitioned 
Regions](colocating_partitioned_region_data.html#colocating_partitioned_region_data).
 
-<a 
id="custom_partition_region_data__section_1D7043815DF24308ABE4C78BFDFEE686"></a>
+To custom-partition your region data, follow two steps:
 
-For the default implementation of string-based partitioning, use 
`org.apache.geode.cache.util.StringPrefixPartitionResolver`.
-For standard partitioning, use `org.apache.geode.cache.PartitionResolver`. To 
implement fixed partitioning, use 
`org.apache.geode.cache.FixedPartitionResolver`.
+- implement the interface
+- configure the regions
 
-<a 
id="custom_partition_region_data__section_5A8D752F02834146A37D9430F1CA32DA"></a>
+These steps differ based on which partition resolver is used.
 
-**Prerequisites**
+**Implementing Standard Partitioning**
 
--   Create partitioned regions. See [Understanding 
Partitioning](how_partitioning_works.html) and [Configuring Partitioned 
Regions](managing_partitioned_regions.html#configure_partitioned_regions).
--   Decide whether to use the default implementation of the string-based 
partitioning, standard custom partitioning, or fixed custom partitioning. See 
[Understanding Custom Partitioning and Data 
Colocation](custom_partitioning_and_data_colocation.html#custom_partitioning_and_data_colocation).
--   If you also want to colocate data from multiple regions, understand how to 
colocate. See [Colocate Data from Different Partitioned 
Regions](colocating_partitioned_region_data.html#colocating_partitioned_region_data).
+-   Implement the `org.apache.geode.cache.PartitionResolver` interface
+within one of the following locations,
+listed here in the search order used by <%=vars.product_name%>:
+    -   **Within a custom class**. Specify this class as the partition
+resolver during region creation.
+    -   **Within the key's class**. For keys implemented as objects,
+define the interface within the key's class.
+    -   **Within the cache callback class**. Implement the interface
+within a cache callback's class. When using this implementation,
+any and all `Region` operations must be those that specify the callback
+as a parameter.
 
-**Procedure**
+-   Implement the resolver's `getName`, `init`, and `close` methods.
 
-1.  If using `org.apache.geode.cache.PartitionResolver` (standard 
partitioning) or `org.apache.geode.cache.FixedPartitionResolver` (fixed 
partitioning), implement the standard partitioning resolver or the fixed 
partitioning resolver in one of the following locations, listed here in the 
search order used by <%=vars.product_name%>:
-    -   **Custom class**. You provide this class as the partition resolver to 
the region creation.
-    -   **Entry key**. You use the implementing key object for every operation 
on the region entries.
-    -   **Cache callback argument**. This implementation restricts you to 
using methods that accept a cache callback argument to manage the region 
entries. For a full list of the methods that take a callback argument, see the 
`Region` Javadocs.
+    A simple implementation of `getName` is
 
-    If using the default implementation of the string-based
-partition resolver, 
`org.apache.geode.cache.util.StringPrefixPartitionResolver`,
-specify all keys with the required syntax.
-Keys are strings, and contain the '|' character as a delimiter.
-The substring that precedes the '|' delimiter will used in the hash
-function that partitions the entry.
-2.  If you need the resolver's `getName` method, program that.
-3.  If *not* using the default implementation of the string-based
-partition resolver,
-program the resolver's `getRoutingObject` method to return the routing object 
for each entry, based on how you want to group the entries. Give the same 
routing object to entries you want to group together. <%=vars.product_name%> 
will place the entries in the same bucket.
+    ``` pre
+    return getClass().getName();
+    ```
+
+    The `init` method does any initialization steps upon cache
+    start that relate to the partition resolver's task. 
+
+    The `close` method accomplishes any clean up that must be accomplished
+    before a cache close completes. For example, `close` might close
+    files or connections that the partition resolver opened. 
+
+-   Implement the resolver's `getRoutingObject` method to return 
+the routing object for each entry.
+A hash of that returned routing object determines the bucket.
+Therefore, `getRoutingObject` should return an object that,
+when run through its `hashCode`, directs grouped objects to the
+desired bucket.
 
     **Note:**
     Only fields on the key should be used when creating the routing object. Do 
not use the value or additional metadata for this purpose.
 
-    For example, here is an implementation on a region key object that groups 
the entries by month and year:
+    For example, here is an implementation on a region key object that groups 
using the sum of a month and year:
 
     ``` pre
     Public class TradeKey implements PartitionResolver 
@@ -80,116 +100,120 @@ program the resolver's `getRoutingObject` method to 
return the routing object fo
     }
     ```
 
-4.  For fixed partitioning only, program and configure additional fixed 
partitioning pieces:
-    1.  Set the fixed partition attributes for each member.
+**Implementing the String-Based Partition Resolver**
 
-        These attributes define the data stored for the region by the member 
and must be different for different members. See 
`org.apache.geode.cache.FixedPartitionAttributes` for definitions of the 
attributes. Define each `partition-name` in your data host members for the 
region. For each partition name, in the member you want to host the primary 
copy, define it with `is-primary` set to `true`. In every member you want to 
host the secondary copy, define it with `is-primary` set to `false` (the 
default). The number of secondaries must match the number of redundant copies 
you have defined for the region. See [Configure High Availability for a 
Partitioned Region](configuring_ha_for_pr.html).
+The implementation of a string-based partition resolver is in
+`org.apache.geode.cache.util.StringPrefixPartitionResolver`.
+It does not require any further implementation.
 
-        **Note:**
-        Buckets for a partition are hosted only by the members that have 
defined the partition name in their `FixedPartitionAttributes`.
 
-        These examples set the partition attributes for a member to be the 
primary host for the "Q1" partition data and a secondary host for "Q3" 
partition data.
-        -   XML:
+**Implementing Fixed Partitioning**
 
-            ``` pre
-            <cache>
-               <region name="Trades">
-                  <region-attributes>
-                     <partition-attributes redundant-copies="1">
-                       <partition-resolver 
name="QuarterFixedPartitionResolver">
-                          
<class-name>myPackage.QuarterFixedPartitionResolver</class-name>
-                       </partition-resolver>
-                       <fixed-partition-attributes partition-name="Q1" 
is-primary="true"/>
-                       <fixed-partition-attributes partition-name="Q3" 
is-primary="false" num-buckets="6"/>
-                     </partition-attributes> 
-                  </region-attributes>
-               </region>
-            </cache>
-            ```
-        -   Java:
+-   Implement the `org.apache.geode.cache.FixedPartitionResolver`
+interface within one of the following locations,
+listed here in the search order used by <%=vars.product_name%>:
+    -   **Custom class**. Specify this class as the partition resolver during 
region creation.
+    -   **Entry key**. For keys implemented as objects, define the interface 
for the key's class.
+    -   **Within the cache callback class**. Implement the interface
+within a cache callback's class. When using this implementation,
+any and all `Region` operations must be those that specify the callback
+as a parameter.
 
+-   Implement the resolver's `getName`, `init`, and `close` methods.
 
-            ``` pre
-            FixedPartitionAttribute fpa1 = 
FixedPartitionAttributes.createFixedPartition("Q1", true);
-            FixedPartitionAttribute fpa3 = 
FixedPartitionAttributes.createFixedPartition("Q3", false, 6);
+    A simple implementation of `getName` is
 
-            PartitionAttributesFactory paf = new PartitionAttributesFactory()
-                 .setPartitionResolver(new QuarterFixedPartitionResolver())
-                 .setTotalNumBuckets(12)
-                 .setRedundantCopies(2)
-                 .addFixedPartitionAttribute(fpa1)
-                 .addFixedPartitionAttribute(fpa3);
+    ``` pre
+    return getClass().getName();
+    ```
 
-            Cache c = new CacheFactory().create();
+    The `init` method does any initialization steps upon cache
+    start that relate to the partition resolver's task. 
 
-            Region r = c.createRegionFactory()
-                .setPartitionAttributes(paf.create())
-                .create("Trades");
-            ```
-        -   gfsh:
+    The `close` method accomplishes any clean up that must be accomplished
+    before a cache close completes. For example, `close` might close
+    files or connections that the partition resolver opened. 
 
-            You cannot specify a partition resolver using gfsh.
+-   Implement the resolver's `getRoutingObject` method to return 
+the routing object for each entry.
+A hash of that returned routing object determines the bucket
+within a partition.
+   
+    This method can be empty for fixed partitioning where there is
+only one bucket per partition.
+That implementation assigns partitions to servers
+such that the application has full control of grouping entries
+on servers.
 
-    2.  Program the `FixedPartitionResolver` `getPartitionName` method to 
return the name of the partition for each entry, based on where you want the 
entries to reside. <%=vars.product_name%> uses `getPartitionName` and 
`getRoutingObject` to determine where an entry is placed.
+    **Note:**
+    Only fields on the key should be used when creating the routing object. Do 
not use the value or additional metadata for this purpose.
 
-        **Note:**
-        To group entries, assign every entry in the group the same routing 
object and the same partition name.
+-   Implement the `getPartitionName` method 
+to return the name of the partition for each entry,
+based on where you want the entries to reside.
+All entries within a partition will be on a single server.
 
-        This example places the data based on date, with a different partition 
name for each quarter-year and a different routing object for each month.
+    This example places the data based on date, with a different partition 
name for each quarter-year and a different routing object for each month.
 
-        ``` pre
-        /**
-         * Returns one of four different partition names
-         * (Q1, Q2, Q3, Q4) depending on the entry's date
-         */
-        class QuarterFixedPartitionResolver implements
-            FixedPartitionResolver<String, String> {
-
-          @Override
-          public String getPartitionName(EntryOperation<String, String> 
opDetails,
-              Set<String> targetPartitions) {
-
-             Date date = (Date)opDetails.getKey();
-             Calendar cal = Calendar.getInstance();
-             cal.setTime(date);
-             int month = cal.get(Calendar.MONTH);
-             if (month >= 0 && month < 3) {
-                if (targetPartitions.contains("Q1")) return "Q1";
-             }
-             else if (month >= 3 && month < 6) {
-                if (targetPartitions.contains("Q2")) return "Q2";
-             }
-             else if (month >= 6 && month < 9) {
-                if (targetPartitions.contains("Q3")) return "Q3";
-             }
-             else if (month >= 9 && month < 12) {
-                if (targetPartitions.contains("Q4")) return "Q4";
-             }
-             return "Invalid Quarter";
-          }
-
-          @Override
-          public String getName() {
-             return "QuarterFixedPartitionResolver";
-          }
-
-          @Override
-          public Serializable getRoutingObject(EntryOperation<String, String> 
opDetails) {
-             Date date = (Date)opDetails.getKey();
-             Calendar cal = Calendar.getInstance();
-             cal.setTime(date);
-             int month = cal.get(Calendar.MONTH);
-             return month;
-          }
-
-          @Override
-          public void close() {
-          }
-        }
-        ```
+    ``` pre
+    /**
+     * Returns one of four different partition names
+     * (Q1, Q2, Q3, Q4) depending on the entry's date
+     */
+    class QuarterFixedPartitionResolver implements
+        FixedPartitionResolver<String, String> {
+
+      @Override
+      public String getPartitionName(EntryOperation<String, String> opDetails,
+          Set<String> targetPartitions) {
+
+         Date date = (Date)opDetails.getKey();
+         Calendar cal = Calendar.getInstance();
+         cal.setTime(date);
+         int month = cal.get(Calendar.MONTH);
+         if (month >= 0 && month < 3) {
+            if (targetPartitions.contains("Q1")) return "Q1";
+         }
+         else if (month >= 3 && month < 6) {
+            if (targetPartitions.contains("Q2")) return "Q2";
+         }
+         else if (month >= 6 && month < 9) {
+            if (targetPartitions.contains("Q3")) return "Q3";
+         }
+         else if (month >= 9 && month < 12) {
+            if (targetPartitions.contains("Q4")) return "Q4";
+         }
+         return "Invalid Quarter";
+      }
+
+      @Override
+      public String getName() {
+         return "QuarterFixedPartitionResolver";
+      }
+
+      @Override
+      public Serializable getRoutingObject(EntryOperation<String, String> 
opDetails) {
+         Date date = (Date)opDetails.getKey();
+         Calendar cal = Calendar.getInstance();
+         cal.setTime(date);
+         int month = cal.get(Calendar.MONTH);
+         return month;
+      }
+
+      @Override
+      public void close() {
+      }
+    }
+    ```
+
+**Configuring Standard Partitioning**
 
-5.  Configure or program the region so <%=vars.product_name%> finds your 
resolver for every operation that you perform on the region's entries. How you 
do this depends on where you chose to program your custom partitioning 
implementation (step 1).
-    -   **Custom class**. Define the class for the region at creation. The 
resolver will be used for every entry operation. Use one of these methods:
+-   Configure the region so <%=vars.product_name%> finds your resolver
+for all region operations.
+How you do this depends on where you chose to implement
+your custom partitioning.
+    -   **Custom class**. Define the class for the region at creation.
+Use one of these methods:
 
         **XML:**
 
@@ -197,7 +221,7 @@ program the resolver's `getRoutingObject` method to return 
the routing object fo
         <region name="trades">
             <region-attributes>
                 <partition-attributes>
-                    <partition-resolver name="TradesPartitionResolver"> 
+                    <partition-resolver> 
                         <class-name>myPackage.TradesPartitionResolver
                         </class-name>
                     </partition-resolver>
@@ -226,15 +250,25 @@ program the resolver's `getRoutingObject` method to 
return the routing object fo
     -   **Entry key**. Use the key object with the resolver implementation for 
every entry operation.
     -   **Cache callback argument**. Provide the argument to every call that 
accesses an entry. This restricts you to calls that take a callback argument.
 
-    If using the default implementation of the string-based partition 
resolver, configure with one of:
+-   If your colocated data is in a server system,
+add the `PartitionResolver` implementation class to the `CLASSPATH`
+of your Java clients. 
+For Java single-hop access to work,
+the resolver class needs to have a zero-argument constructor,
+and the resolver class must not have any state;
+the `init` method is included in this restriction.
 
-    **XML:**
+**Configuring the String-Based Partition Resolver**
+
+- Define the class for the region at creation. The resolver will be used for 
every entry operation. Use one of these methods:
 
+    **XML:**
+    
     ``` pre
     <region name="customers">
         <region-attributes>
             <partition-attributes>
-                <partition-resolver name="StringPrefixPartitionResolver"> 
+                <partition-resolver> 
                     
<class-name>org.apache.geode.cache.util.StringPrefixPartitionResolver
                     </class-name>
                 </partition-resolver>
@@ -243,21 +277,85 @@ program the resolver's `getRoutingObject` method to 
return the routing object fo
     </region>
     ```
     **Java API:**
-
+    
     ``` pre
     PartitionAttributes attrs = 
         new PartitionAttributesFactory()
         .setPartitionResolver("StringPrefixPartitionResolver").create();
-
+    
     Cache c = new CacheFactory().create();
-
+    
     Region r = c.createRegionFactory()
         .setPartitionAttributes(attrs)
         .create("customers");
     ```
     **gfsh:**
-
+    
     Add the option 
`--partition-resolver=org.apache.geode.cache.util.StringPrefixPartitionResolver`
 to the `gfsh create region` command.
 
-6.  If your colocated data is in a server system, add the `PartitionResolver` 
implementation class to the `CLASSPATH` of your Java clients. The resolver is 
used for single hop access to partitioned region data in the servers.
+-  For colocated data, add the `StringPrefixPartitionResolver`
+implementation class to the `CLASSPATH` of your Java clients.
+The resolver will work with Java single-hop clients.
+
+**Configuring Fixed Partitioning**
+
+-  Set the fixed-partition attributes for each member.
+
+    These attributes define the data stored for the region by the member and 
must be different for different members. See 
`org.apache.geode.cache.FixedPartitionAttributes` for definitions of the 
attributes. Define each `partition-name` in your data-host members for the 
region. For each partition name, in the member you want to host the primary 
copy, define it with `is-primary` set to `true`. In every member you want to 
host the secondary copy, define it with `is-primary` set to `false` (the 
default). The number of secondaries must match the number of redundant copies 
you have defined for the region. See [Configure High Availability for a 
Partitioned Region](configuring_ha_for_pr.html).
+
+    **Note:**
+    Buckets for a partition are hosted only by the members that have defined 
the partition name in their `FixedPartitionAttributes`.
+
+    These examples set the partition attributes for a member to be the primary 
host for the "Q1" partition data and a secondary host for "Q3" partition data.
+    -   XML:
+
+        ``` pre
+        <cache>
+           <region name="Trades">
+              <region-attributes>
+                 <partition-attributes redundant-copies="1">
+                   <partition-resolver>
+                      
<class-name>myPackage.QuarterFixedPartitionResolver</class-name>
+                   </partition-resolver>
+                   <fixed-partition-attributes partition-name="Q1" 
is-primary="true"/>
+                   <fixed-partition-attributes partition-name="Q3" 
is-primary="false"
+                        num-buckets="6"/>
+                 </partition-attributes> 
+              </region-attributes>
+           </region>
+        </cache>
+        ```
+    -   Java:
+
+
+        ``` pre
+        FixedPartitionAttribute fpa1 = FixedPartitionAttributes
+             .createFixedPartition("Q1", true);
+        FixedPartitionAttribute fpa3 = FixedPartitionAttributes
+             .createFixedPartition("Q3", false, 6);
+
+        PartitionAttributesFactory paf = new PartitionAttributesFactory()
+             .setPartitionResolver(new QuarterFixedPartitionResolver())
+             .setTotalNumBuckets(12)
+             .setRedundantCopies(2)
+             .addFixedPartitionAttribute(fpa1)
+             .addFixedPartitionAttribute(fpa3);
+
+        Cache c = new CacheFactory().create();
+
+        Region r = c.createRegionFactory()
+            .setPartitionAttributes(paf.create())
+            .create("Trades");
+        ```
+    -   gfsh:
+
+        You cannot specify a fixed partition resolver using gfsh.
+
+-   If your colocated data is in a server system,
+add the class that implements the `FixedPartitionResolver` interface
+to the `CLASSPATH` of your Java clients.
+For Java single-hop access to work,
+the resolver class needs to have a zero-argument constructor,
+and the resolver class must not have any state;
+the `init` method is included in this restriction.
 
diff --git a/geode-docs/images_svg/custom_partitioned.svg 
b/geode-docs/images_svg/custom_partitioned.svg
deleted file mode 100644
index e952a5c090..0000000000
--- a/geode-docs/images_svg/custom_partitioned.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
-<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xl="http://www.w3.org/1999/xlink"; version="1.1" viewBox="102 228 392 186" 
width="392pt" height="186pt" 
xmlns:dc="http://purl.org/dc/elements/1.1/";><metadata> Produced by OmniGraffle 
6.0.5 <dc:date>2015-04-07 10:07Z</dc:date></metadata><defs><filter id="Shadow" 
filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" 
stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="2.16" 
dy="2.16"/><feFlood flood-color="#4f4f4f" flood-opacity=".30000001" 
result="flood"/><feComposite in="flood" in2="offset" 
operator="in"/></filter><filter id="Shadow_2" 
filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" 
stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="2.16" 
dy="2.16"/><feFlood flood-color="white" flood-opacity=".30000001" 
result="flood"/><feComposite in="flood" in2="offset" 
operator="in"/></filter><radialGradient cx="0" cy="0" r="1" id="Gradient" 
gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#7ca8c4" 
stop-opacity=".65"/><stop offset="1" stop-color="#a8c6d9" 
stop-opacity=".65"/></radialGradient><radialGradient id="Obj_Gradient" 
xl:href="#Gradient" gradientTransform="translate(268.875 396) 
scale(162.99823)"/><font-face font-family="Helvetica" font-size="14" 
units-per-em="1000" underline-position="-75.683594" 
underline-thickness="49.316406" slope="0" x-height="522.94922" 
cap-height="717.28516" ascent="770.01953" descent="-229.98047" 
font-weight="500"><font-face-src><font-face-name 
name="Helvetica"/></font-face-src></font-face><radialGradient cx="0" cy="0" 
r="1" id="Gradient_2" gradientUnits="userSpaceOnUse"><stop offset="0" 
stop-color="white" stop-opacity=".65"/><stop offset="1" stop-color="white" 
stop-opacity=".65"/></radialGradient><radialGradient id="Obj_Gradient_2" 
xl:href="#Gradient_2" gradientTransform="translate(243 378) 
scale(111.19134)"/><font-face font-family="Helvetica" font-size="10" 
units-per-em="1000" underline-position="-75.683594" 
underline-thickness="49.316406" slope="0" x-height="522.94922" 
cap-height="717.28516" ascent="770.01953" descent="-229.98047" 
font-weight="500"><font-face-src><font-face-name 
name="Helvetica"/></font-face-src></font-face><radialGradient cx="0" cy="0" 
r="1" id="Gradient_3" gradientUnits="userSpaceOnUse"><stop offset="0" 
stop-color="#e2edf3" stop-opacity=".65"/><stop offset="1" stop-color="#e2edf3" 
stop-opacity=".65"/></radialGradient><radialGradient id="Obj_Gradient_3" 
xl:href="#Gradient_3" gradientTransform="translate(169.31531 300.02344) 
rotate(-90) scale(25.654718)"/><radialGradient id="Obj_Gradient_4" 
xl:href="#Gradient_3" gradientTransform="translate(199.54969 300.02344) 
rotate(-90) scale(25.654718)"/><radialGradient id="Obj_Gradient_5" 
xl:href="#Gradient_3" gradientTransform="translate(229.78406 300.02344) 
rotate(-90) scale(25.654718)"/><radialGradient id="Obj_Gradient_6" 
xl:href="#Gradient" gradientTransform="translate(476.47125 396) 
scale(162.99823)"/><radialGradient id="Obj_Gradient_7" xl:href="#Gradient_3" 
gradientTransform="translate(169.31531 338.90625) rotate(-90) 
scale(25.654718)"/><radialGradient id="Obj_Gradient_8" xl:href="#Gradient_3" 
gradientTransform="translate(199.54969 338.90625) rotate(-90) 
scale(25.654718)"/><radialGradient id="Obj_Gradient_9" xl:href="#Gradient_3" 
gradientTransform="translate(229.78406 338.90625) rotate(-90) 
scale(25.654718)"/><radialGradient id="Obj_Gradient_a" xl:href="#Gradient_2" 
gradientTransform="translate(451.78875 378) scale(111.19134)"/><radialGradient 
id="Obj_Gradient_b" xl:href="#Gradient_3" 
gradientTransform="translate(378.10406 300.02344) rotate(-90) 
scale(25.654718)"/><radialGradient id="Obj_Gradient_c" xl:href="#Gradient_3" 
gradientTransform="translate(408.33844 300.02344) rotate(-90) 
scale(25.654718)"/><radialGradient id="Obj_Gradient_d" xl:href="#Gradient_3" 
gradientTransform="translate(438.5728 300.02344) rotate(-90) 
scale(25.654718)"/><radialGradient id="Obj_Gradient_e" xl:href="#Gradient_3" 
gradientTransform="translate(378.10406 338.90625) rotate(-90) 
scale(25.654718)"/><radialGradient id="Obj_Gradient_f" xl:href="#Gradient_3" 
gradientTransform="translate(408.33844 338.90625) rotate(-90) 
scale(25.654718)"/><radialGradient id="Obj_Gradient_10" xl:href="#Gradient_3" 
gradientTransform="translate(438.5728 338.90625) rotate(-90) 
scale(25.654718)"/><radialGradient cx="0" cy="0" r="1" id="Gradient_4" 
gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#a8c6d9" 
stop-opacity=".65"/><stop offset="1" stop-color="white" 
stop-opacity=".65"/></radialGradient><radialGradient id="Obj_Gradient_11" 
xl:href="#Gradient_4" gradientTransform="translate(234 324) 
scale(70.113256)"/><font-face font-family="Helvetica" font-size="10" 
units-per-em="1000" underline-position="-75.683594" 
underline-thickness="49.316406" slope="0" x-height="532.22656" 
cap-height="719.72656" ascent="770.01953" descent="-229.98047" 
font-weight="bold"><font-face-src><font-face-name 
name="Helvetica-Bold"/></font-face-src></font-face><radialGradient 
id="Obj_Gradient_12" xl:href="#Gradient_4" 
gradientTransform="translate(234.59625 362.57304) 
scale(70.113256)"/><radialGradient id="Obj_Gradient_13" xl:href="#Gradient_4" 
gradientTransform="translate(442.1925 324) scale(70.113256)"/><radialGradient 
id="Obj_Gradient_14" xl:href="#Gradient_4" 
gradientTransform="translate(442.1925 361.28652) scale(70.113256)"/></defs><g 
stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" 
fill-opacity="1"><title>custom_partitioning</title><g><title>Layer 
1</title><g><xl:use xl:href="#id3_Graphic" filter="url(#Shadow)"/><xl:use 
xl:href="#id4_Graphic" filter="url(#Shadow_2)"/><xl:use xl:href="#id5_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id6_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id7_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id9_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id10_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id11_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id12_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id14_Graphic" 
filter="url(#Shadow_2)"/><xl:use xl:href="#id15_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id16_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id17_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id19_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id20_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id21_Graphic" 
filter="url(#Shadow)"/><xl:use xl:href="#id23_Graphic" 
filter="url(#Shadow_2)"/><xl:use xl:href="#id24_Graphic" 
filter="url(#Shadow_2)"/><xl:use xl:href="#id25_Graphic" 
filter="url(#Shadow_2)"/><xl:use xl:href="#id26_Graphic" 
filter="url(#Shadow_2)"/></g><g id="id3_Graphic"><path d="M 122.4675 241.7175 L 
262.215 241.7175 C 265.89322 241.7175 268.875 244.69928 268.875 248.3775 L 
268.875 389.34 C 268.875 393.01822 265.89322 396 262.215 396 L 122.4675 396 C 
118.78928 396 115.8075 393.01822 115.8075 389.34 L 115.8075 248.3775 C 115.8075 
244.69928 118.78928 241.7175 122.4675 241.7175 Z" 
fill="url(#Obj_Gradient)"/><path d="M 122.4675 241.7175 L 262.215 241.7175 C 
265.89322 241.7175 268.875 244.69928 268.875 248.3775 L 268.875 389.34 C 
268.875 393.01822 265.89322 396 262.215 396 L 122.4675 396 C 118.78928 396 
115.8075 393.01822 115.8075 389.34 L 115.8075 248.3775 C 115.8075 244.69928 
118.78928 241.7175 122.4675 241.7175 Z" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><text 
transform="translate(119.8075 245.7175)" fill="black"><tspan 
font-family="Helvetica" font-size="14" font-weight="500" fill="black" 
x="61.060664" y="14" textLength="84.006836">Member (M1)</tspan></text></g><g 
id="id4_Graphic"><path d="M 140.4675 277.7175 L 236.34 277.7175 C 240.01822 
277.7175 243 280.69928 243 284.3775 L 243 371.34 C 243 375.01822 240.01822 378 
236.34 378 L 140.4675 378 C 136.78928 378 133.8075 375.01822 133.8075 371.34 L 
133.8075 284.3775 C 133.8075 280.69928 136.78928 277.7175 140.4675 277.7175 Z" 
fill="url(#Obj_Gradient_2)"/><path d="M 140.4675 277.7175 L 236.34 277.7175 C 
240.01822 277.7175 243 280.69928 243 284.3775 L 243 371.34 C 243 375.01822 
240.01822 378 236.34 378 L 140.4675 378 C 136.78928 378 133.8075 375.01822 
133.8075 371.34 L 133.8075 284.3775 C 133.8075 280.69928 136.78928 277.7175 
140.4675 277.7175 Z" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><text 
transform="translate(135.8075 279.7175)" fill="black"><tspan 
font-family="Helvetica" font-size="10" font-weight="500" fill="black" 
x="13.5693945" y="10" textLength="73.930664">Partition Region </tspan><tspan 
font-family="Helvetica" font-size="10" font-weight="500" fill="black" 
x="86.953184" y="10" textLength="6.669922">A</tspan></text></g><g 
id="id5_Graphic"><path d="M 145.12781 317.55094 L 145.12781 306.68344 C 
145.12781 303.00522 148.10959 300.02344 151.78781 300.02344 C 151.78781 
300.02344 151.78781 300.02344 151.78781 300.02344 L 162.65531 300.02344 C 
166.33353 300.02344 169.31531 303.00522 169.31531 306.68344 L 169.31531 
317.55094 C 169.31531 321.22916 166.33353 324.21094 162.65531 324.21094 C 
162.65531 324.21094 162.65531 324.21094 162.65531 324.21094 L 151.78781 
324.21094 C 148.10959 324.21094 145.12781 321.22916 145.12781 317.55094 Z" 
fill="url(#Obj_Gradient_3)"/><path d="M 145.12781 317.55094 L 145.12781 
306.68344 C 145.12781 303.00522 148.10959 300.02344 151.78781 300.02344 C 
151.78781 300.02344 151.78781 300.02344 151.78781 300.02344 L 162.65531 
300.02344 C 166.33353 300.02344 169.31531 303.00522 169.31531 306.68344 L 
169.31531 317.55094 C 169.31531 321.22916 166.33353 324.21094 162.65531 
324.21094 C 162.65531 324.21094 162.65531 324.21094 162.65531 324.21094 L 
151.78781 324.21094 C 148.10959 324.21094 145.12781 321.22916 145.12781 
317.55094 Z" stroke="#252525" stroke-linecap="round" stroke-linejoin="round" 
stroke-width=".72000003" stroke-dasharray="1,5"/></g><g id="id6_Graphic"><path 
d="M 175.36219 317.55094 L 175.36219 306.68344 C 175.36219 303.00522 178.34397 
300.02344 182.02219 300.02344 C 182.02219 300.02344 182.02219 300.02344 
182.02219 300.02344 L 192.88969 300.02344 C 196.56791 300.02344 199.54969 
303.00522 199.54969 306.68344 L 199.54969 317.55094 C 199.54969 321.22916 
196.56791 324.21094 192.88969 324.21094 C 192.88969 324.21094 192.88969 
324.21094 192.88969 324.21094 L 182.02219 324.21094 C 178.34397 324.21094 
175.36219 321.22916 175.36219 317.55094 Z" fill="url(#Obj_Gradient_4)"/><path 
d="M 175.36219 317.55094 L 175.36219 306.68344 C 175.36219 303.00522 178.34397 
300.02344 182.02219 300.02344 C 182.02219 300.02344 182.02219 300.02344 
182.02219 300.02344 L 192.88969 300.02344 C 196.56791 300.02344 199.54969 
303.00522 199.54969 306.68344 L 199.54969 317.55094 C 199.54969 321.22916 
196.56791 324.21094 192.88969 324.21094 C 192.88969 324.21094 192.88969 
324.21094 192.88969 324.21094 L 182.02219 324.21094 C 178.34397 324.21094 
175.36219 321.22916 175.36219 317.55094 Z" stroke="#252525" 
stroke-linecap="round" stroke-linejoin="round" stroke-width=".72000003" 
stroke-dasharray="1,5"/></g><g id="id7_Graphic"><path d="M 205.59656 317.55094 
L 205.59656 306.68344 C 205.59656 303.00522 208.57834 300.02344 212.25656 
300.02344 C 212.25656 300.02344 212.25656 300.02344 212.25656 300.02344 L 
223.12406 300.02344 C 226.80228 300.02344 229.78406 303.00522 229.78406 
306.68344 L 229.78406 317.55094 C 229.78406 321.22916 226.80228 324.21094 
223.12406 324.21094 C 223.12406 324.21094 223.12406 324.21094 223.12406 
324.21094 L 212.25656 324.21094 C 208.57834 324.21094 205.59656 321.22916 
205.59656 317.55094 Z" fill="url(#Obj_Gradient_5)"/><path d="M 205.59656 
317.55094 L 205.59656 306.68344 C 205.59656 303.00522 208.57834 300.02344 
212.25656 300.02344 C 212.25656 300.02344 212.25656 300.02344 212.25656 
300.02344 L 223.12406 300.02344 C 226.80228 300.02344 229.78406 303.00522 
229.78406 306.68344 L 229.78406 317.55094 C 229.78406 321.22916 226.80228 
324.21094 223.12406 324.21094 C 223.12406 324.21094 223.12406 324.21094 
223.12406 324.21094 L 212.25656 324.21094 C 208.57834 324.21094 205.59656 
321.22916 205.59656 317.55094 Z" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003" 
stroke-dasharray="1,5"/></g><rect x="139.5" y="297" width="99" 
height="30.234384" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><g id="id9_Graphic"><path 
d="M 330.06375 241.7175 L 469.81125 241.7175 C 473.48947 241.7175 476.47125 
244.69928 476.47125 248.3775 L 476.47125 389.34 C 476.47125 393.01822 473.48947 
396 469.81125 396 L 330.06375 396 C 326.38553 396 323.40375 393.01822 323.40375 
389.34 L 323.40375 248.3775 C 323.40375 244.69928 326.38553 241.7175 330.06375 
241.7175 Z" fill="url(#Obj_Gradient_6)"/><path d="M 330.06375 241.7175 L 
469.81125 241.7175 C 473.48947 241.7175 476.47125 244.69928 476.47125 248.3775 
L 476.47125 389.34 C 476.47125 393.01822 473.48947 396 469.81125 396 L 
330.06375 396 C 326.38553 396 323.40375 393.01822 323.40375 389.34 L 323.40375 
248.3775 C 323.40375 244.69928 326.38553 241.7175 330.06375 241.7175 Z" 
stroke="#252525" stroke-linecap="round" stroke-linejoin="round" 
stroke-width=".72000003"/><text transform="translate(327.40375 245.7175)" 
fill="black"><tspan font-family="Helvetica" font-size="14" font-weight="500" 
fill="black" x="61.060664" y="14" textLength="84.006836">Member 
(M2)</tspan></text></g><g id="id10_Graphic"><path d="M 145.12781 356.43375 L 
145.12781 345.56625 C 145.12781 341.88803 148.10959 338.90625 151.78781 
338.90625 C 151.78781 338.90625 151.78781 338.90625 151.78781 338.90625 L 
162.65531 338.90625 C 166.33353 338.90625 169.31531 341.88803 169.31531 
345.56625 L 169.31531 356.43375 C 169.31531 360.11197 166.33353 363.09375 
162.65531 363.09375 C 162.65531 363.09375 162.65531 363.09375 162.65531 
363.09375 L 151.78781 363.09375 C 148.10959 363.09375 145.12781 360.11197 
145.12781 356.43375 Z" fill="url(#Obj_Gradient_7)"/><path d="M 145.12781 
356.43375 L 145.12781 345.56625 C 145.12781 341.88803 148.10959 338.90625 
151.78781 338.90625 C 151.78781 338.90625 151.78781 338.90625 151.78781 
338.90625 L 162.65531 338.90625 C 166.33353 338.90625 169.31531 341.88803 
169.31531 345.56625 L 169.31531 356.43375 C 169.31531 360.11197 166.33353 
363.09375 162.65531 363.09375 C 162.65531 363.09375 162.65531 363.09375 
162.65531 363.09375 L 151.78781 363.09375 C 148.10959 363.09375 145.12781 
360.11197 145.12781 356.43375 Z" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003" stroke-dasharray="1,5"/></g><g 
id="id11_Graphic"><path d="M 175.36219 356.43375 L 175.36219 345.56625 C 
175.36219 341.88803 178.34397 338.90625 182.02219 338.90625 C 182.02219 
338.90625 182.02219 338.90625 182.02219 338.90625 L 192.88969 338.90625 C 
196.56791 338.90625 199.54969 341.88803 199.54969 345.56625 L 199.54969 
356.43375 C 199.54969 360.11197 196.56791 363.09375 192.88969 363.09375 C 
192.88969 363.09375 192.88969 363.09375 192.88969 363.09375 L 182.02219 
363.09375 C 178.34397 363.09375 175.36219 360.11197 175.36219 356.43375 Z" 
fill="url(#Obj_Gradient_8)"/><path d="M 175.36219 356.43375 L 175.36219 
345.56625 C 175.36219 341.88803 178.34397 338.90625 182.02219 338.90625 C 
182.02219 338.90625 182.02219 338.90625 182.02219 338.90625 L 192.88969 
338.90625 C 196.56791 338.90625 199.54969 341.88803 199.54969 345.56625 L 
199.54969 356.43375 C 199.54969 360.11197 196.56791 363.09375 192.88969 
363.09375 C 192.88969 363.09375 192.88969 363.09375 192.88969 363.09375 L 
182.02219 363.09375 C 178.34397 363.09375 175.36219 360.11197 175.36219 
356.43375 Z" stroke="#252525" stroke-linecap="round" stroke-linejoin="round" 
stroke-width=".72000003" stroke-dasharray="1,5"/></g><g id="id12_Graphic"><path 
d="M 205.59656 356.43375 L 205.59656 345.56625 C 205.59656 341.88803 208.57834 
338.90625 212.25656 338.90625 C 212.25656 338.90625 212.25656 338.90625 
212.25656 338.90625 L 223.12406 338.90625 C 226.80228 338.90625 229.78406 
341.88803 229.78406 345.56625 L 229.78406 356.43375 C 229.78406 360.11197 
226.80228 363.09375 223.12406 363.09375 C 223.12406 363.09375 223.12406 
363.09375 223.12406 363.09375 L 212.25656 363.09375 C 208.57834 363.09375 
205.59656 360.11197 205.59656 356.43375 Z" fill="url(#Obj_Gradient_9)"/><path 
d="M 205.59656 356.43375 L 205.59656 345.56625 C 205.59656 341.88803 208.57834 
338.90625 212.25656 338.90625 C 212.25656 338.90625 212.25656 338.90625 
212.25656 338.90625 L 223.12406 338.90625 C 226.80228 338.90625 229.78406 
341.88803 229.78406 345.56625 L 229.78406 356.43375 C 229.78406 360.11197 
226.80228 363.09375 223.12406 363.09375 C 223.12406 363.09375 223.12406 
363.09375 223.12406 363.09375 L 212.25656 363.09375 C 208.57834 363.09375 
205.59656 360.11197 205.59656 356.43375 Z" stroke="#252525" 
stroke-linecap="round" stroke-linejoin="round" stroke-width=".72000003" 
stroke-dasharray="1,5"/></g><rect x="139.5" y="335.8828" width="99" 
height="30.234384" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><g id="id14_Graphic"><path 
d="M 349.25625 277.7175 L 445.12875 277.7175 C 448.80697 277.7175 451.78875 
280.69928 451.78875 284.3775 L 451.78875 371.34 C 451.78875 375.01822 448.80697 
378 445.12875 378 L 349.25625 378 C 345.57803 378 342.59625 375.01822 342.59625 
371.34 L 342.59625 284.3775 C 342.59625 280.69928 345.57803 277.7175 349.25625 
277.7175 Z" fill="url(#Obj_Gradient_a)"/><path d="M 349.25625 277.7175 L 
445.12875 277.7175 C 448.80697 277.7175 451.78875 280.69928 451.78875 284.3775 
L 451.78875 371.34 C 451.78875 375.01822 448.80697 378 445.12875 378 L 
349.25625 378 C 345.57803 378 342.59625 375.01822 342.59625 371.34 L 342.59625 
284.3775 C 342.59625 280.69928 345.57803 277.7175 349.25625 277.7175 Z" 
stroke="#252525" stroke-linecap="round" stroke-linejoin="round" 
stroke-width=".72000003"/><text transform="translate(344.59625 279.7175)" 
fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="500" 
fill="black" x="13.5693945" y="10" textLength="73.930664">Partition Region 
</tspan><tspan font-family="Helvetica" font-size="10" font-weight="500" 
fill="black" x="86.953184" y="10" textLength="6.669922">A</tspan></text></g><g 
id="id15_Graphic"><path d="M 353.91656 317.55094 L 353.91656 306.68344 C 
353.91656 303.00522 356.89834 300.02344 360.57656 300.02344 L 371.44406 
300.02344 C 375.12228 300.02344 378.10406 303.00522 378.10406 306.68344 L 
378.10406 317.55094 C 378.10406 321.22916 375.12228 324.21094 371.44406 
324.21094 L 360.57656 324.21094 C 356.89834 324.21094 353.91656 321.22916 
353.91656 317.55094 C 353.91656 317.55094 353.91656 317.55094 353.91656 
317.55094 Z" fill="url(#Obj_Gradient_b)"/><path d="M 353.91656 317.55094 L 
353.91656 306.68344 C 353.91656 303.00522 356.89834 300.02344 360.57656 
300.02344 L 371.44406 300.02344 C 375.12228 300.02344 378.10406 303.00522 
378.10406 306.68344 L 378.10406 317.55094 C 378.10406 321.22916 375.12228 
324.21094 371.44406 324.21094 L 360.57656 324.21094 C 356.89834 324.21094 
353.91656 321.22916 353.91656 317.55094 C 353.91656 317.55094 353.91656 
317.55094 353.91656 317.55094 Z" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003" stroke-dasharray="1,5"/></g><g 
id="id16_Graphic"><path d="M 384.15094 317.55094 L 384.15094 306.68344 C 
384.15094 303.00522 387.13272 300.02344 390.81094 300.02344 L 401.67844 
300.02344 C 405.35666 300.02344 408.33844 303.00522 408.33844 306.68344 L 
408.33844 317.55094 C 408.33844 321.22916 405.35666 324.21094 401.67844 
324.21094 L 390.81094 324.21094 C 387.13272 324.21094 384.15094 321.22916 
384.15094 317.55094 C 384.15094 317.55094 384.15094 317.55094 384.15094 
317.55094 Z" fill="url(#Obj_Gradient_c)"/><path d="M 384.15094 317.55094 L 
384.15094 306.68344 C 384.15094 303.00522 387.13272 300.02344 390.81094 
300.02344 L 401.67844 300.02344 C 405.35666 300.02344 408.33844 303.00522 
408.33844 306.68344 L 408.33844 317.55094 C 408.33844 321.22916 405.35666 
324.21094 401.67844 324.21094 L 390.81094 324.21094 C 387.13272 324.21094 
384.15094 321.22916 384.15094 317.55094 C 384.15094 317.55094 384.15094 
317.55094 384.15094 317.55094 Z" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003" stroke-dasharray="1,5"/></g><g 
id="id17_Graphic"><path d="M 414.3853 317.55094 L 414.3853 306.68344 C 414.3853 
303.00522 417.3671 300.02344 421.0453 300.02344 L 431.9128 300.02344 C 
435.59103 300.02344 438.5728 303.00522 438.5728 306.68344 L 438.5728 317.55094 
C 438.5728 321.22916 435.59103 324.21094 431.9128 324.21094 L 421.0453 
324.21094 C 417.3671 324.21094 414.3853 321.22916 414.3853 317.55094 C 414.3853 
317.55094 414.3853 317.55094 414.3853 317.55094 Z" 
fill="url(#Obj_Gradient_d)"/><path d="M 414.3853 317.55094 L 414.3853 306.68344 
C 414.3853 303.00522 417.3671 300.02344 421.0453 300.02344 L 431.9128 300.02344 
C 435.59103 300.02344 438.5728 303.00522 438.5728 306.68344 L 438.5728 
317.55094 C 438.5728 321.22916 435.59103 324.21094 431.9128 324.21094 L 
421.0453 324.21094 C 417.3671 324.21094 414.3853 321.22916 414.3853 317.55094 C 
414.3853 317.55094 414.3853 317.55094 414.3853 317.55094 Z" stroke="#252525" 
stroke-linecap="round" stroke-linejoin="round" stroke-width=".72000003" 
stroke-dasharray="1,5"/></g><rect x="348.28875" y="297" width="99" 
height="30.234384" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><g id="id19_Graphic"><path 
d="M 353.91656 356.43375 L 353.91656 345.56625 C 353.91656 341.88803 356.89834 
338.90625 360.57656 338.90625 L 371.44406 338.90625 C 375.12228 338.90625 
378.10406 341.88803 378.10406 345.56625 L 378.10406 356.43375 C 378.10406 
360.11197 375.12228 363.09375 371.44406 363.09375 L 360.57656 363.09375 C 
356.89834 363.09375 353.91656 360.11197 353.91656 356.43375 C 353.91656 
356.43375 353.91656 356.43375 353.91656 356.43375 Z" 
fill="url(#Obj_Gradient_e)"/><path d="M 353.91656 356.43375 L 353.91656 
345.56625 C 353.91656 341.88803 356.89834 338.90625 360.57656 338.90625 L 
371.44406 338.90625 C 375.12228 338.90625 378.10406 341.88803 378.10406 
345.56625 L 378.10406 356.43375 C 378.10406 360.11197 375.12228 363.09375 
371.44406 363.09375 L 360.57656 363.09375 C 356.89834 363.09375 353.91656 
360.11197 353.91656 356.43375 C 353.91656 356.43375 353.91656 356.43375 
353.91656 356.43375 Z" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003" stroke-dasharray="1,5"/></g><g 
id="id20_Graphic"><path d="M 384.15094 356.43375 L 384.15094 345.56625 C 
384.15094 341.88803 387.13272 338.90625 390.81094 338.90625 L 401.67844 
338.90625 C 405.35666 338.90625 408.33844 341.88803 408.33844 345.56625 L 
408.33844 356.43375 C 408.33844 360.11197 405.35666 363.09375 401.67844 
363.09375 L 390.81094 363.09375 C 387.13272 363.09375 384.15094 360.11197 
384.15094 356.43375 C 384.15094 356.43375 384.15094 356.43375 384.15094 
356.43375 Z" fill="url(#Obj_Gradient_f)"/><path d="M 384.15094 356.43375 L 
384.15094 345.56625 C 384.15094 341.88803 387.13272 338.90625 390.81094 
338.90625 L 401.67844 338.90625 C 405.35666 338.90625 408.33844 341.88803 
408.33844 345.56625 L 408.33844 356.43375 C 408.33844 360.11197 405.35666 
363.09375 401.67844 363.09375 L 390.81094 363.09375 C 387.13272 363.09375 
384.15094 360.11197 384.15094 356.43375 C 384.15094 356.43375 384.15094 
356.43375 384.15094 356.43375 Z" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003" stroke-dasharray="1,5"/></g><g 
id="id21_Graphic"><path d="M 414.3853 356.43375 L 414.3853 345.56625 C 414.3853 
341.88803 417.3671 338.90625 421.0453 338.90625 L 431.9128 338.90625 C 
435.59103 338.90625 438.5728 341.88803 438.5728 345.56625 L 438.5728 356.43375 
C 438.5728 360.11197 435.59103 363.09375 431.9128 363.09375 L 421.0453 
363.09375 C 417.3671 363.09375 414.3853 360.11197 414.3853 356.43375 C 414.3853 
356.43375 414.3853 356.43375 414.3853 356.43375 Z" 
fill="url(#Obj_Gradient_10)"/><path d="M 414.3853 356.43375 L 414.3853 
345.56625 C 414.3853 341.88803 417.3671 338.90625 421.0453 338.90625 L 431.9128 
338.90625 C 435.59103 338.90625 438.5728 341.88803 438.5728 345.56625 L 
438.5728 356.43375 C 438.5728 360.11197 435.59103 363.09375 431.9128 363.09375 
L 421.0453 363.09375 C 417.3671 363.09375 414.3853 360.11197 414.3853 356.43375 
C 414.3853 356.43375 414.3853 356.43375 414.3853 356.43375 Z" stroke="#252525" 
stroke-linecap="round" stroke-linejoin="round" stroke-width=".72000003" 
stroke-dasharray="1,5"/></g><rect x="348.28875" y="335.8828" width="99" 
height="30.234384" stroke="#252525" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><g id="id23_Graphic"><path 
d="M 149.4675 303.42696 L 227.34 303.42696 C 231.01822 303.42696 234 306.40874 
234 310.08696 L 234 317.34 C 234 321.01822 231.01822 324 227.34 324 L 149.4675 
324 C 145.78928 324 142.8075 321.01822 142.8075 317.34 L 142.8075 310.08696 C 
142.8075 306.40874 145.78928 303.42696 149.4675 303.42696 Z" 
fill="url(#Obj_Gradient_11)"/><path d="M 149.4675 303.42696 L 227.34 303.42696 
C 231.01822 303.42696 234 306.40874 234 310.08696 L 234 317.34 C 234 321.01822 
231.01822 324 227.34 324 L 149.4675 324 C 145.78928 324 142.8075 321.01822 
142.8075 317.34 L 142.8075 310.08696 C 142.8075 306.40874 145.78928 303.42696 
149.4675 303.42696 Z" stroke="white" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><text 
transform="translate(144.8075 305.42696)" fill="black"><tspan 
font-family="Helvetica" font-size="10" font-weight="bold" fill="black" 
x="5.6948828" y="10" textLength="77.802734">customer X 
data</tspan></text></g><g id="id24_Graphic"><path d="M 150.06375 342 L 
227.93625 342 C 231.61447 342 234.59625 344.98178 234.59625 348.66 L 234.59625 
355.91304 C 234.59625 359.59126 231.61447 362.57304 227.93625 362.57304 L 
150.06375 362.57304 C 146.38553 362.57304 143.40375 359.59126 143.40375 
355.91304 L 143.40375 348.66 C 143.40375 344.98178 146.38553 342 150.06375 342 
Z" fill="url(#Obj_Gradient_12)"/><path d="M 150.06375 342 L 227.93625 342 C 
231.61447 342 234.59625 344.98178 234.59625 348.66 L 234.59625 355.91304 C 
234.59625 359.59126 231.61447 362.57304 227.93625 362.57304 L 150.06375 
362.57304 C 146.38553 362.57304 143.40375 359.59126 143.40375 355.91304 L 
143.40375 348.66 C 143.40375 344.98178 146.38553 342 150.06375 342 Z" 
stroke="white" stroke-linecap="round" stroke-linejoin="round" 
stroke-width=".72000003"/><text transform="translate(145.40375 344)" 
fill="black"><tspan font-family="Helvetica" font-size="10" font-weight="bold" 
fill="black" x="5.870664" y="10" textLength="47.79297">customer </tspan><tspan 
font-family="Helvetica" font-size="10" font-weight="bold" fill="black" 
x="53.48785" y="10" textLength="6.669922">Y</tspan><tspan 
font-family="Helvetica" font-size="10" font-weight="bold" fill="black" 
x="59.981992" y="10" textLength="23.339844"> data</tspan></text></g><g 
id="id25_Graphic"><path d="M 357.66 303.42696 L 435.5325 303.42696 C 439.21072 
303.42696 442.1925 306.40874 442.1925 310.08696 L 442.1925 317.34 C 442.1925 
321.01822 439.21072 324 435.5325 324 L 357.66 324 C 353.98178 324 351 321.01822 
351 317.34 L 351 310.08696 C 351 306.40874 353.98178 303.42696 357.66 303.42696 
Z" fill="url(#Obj_Gradient_13)"/><path d="M 357.66 303.42696 L 435.5325 
303.42696 C 439.21072 303.42696 442.1925 306.40874 442.1925 310.08696 L 
442.1925 317.34 C 442.1925 321.01822 439.21072 324 435.5325 324 L 357.66 324 C 
353.98178 324 351 321.01822 351 317.34 L 351 310.08696 C 351 306.40874 
353.98178 303.42696 357.66 303.42696 Z" stroke="white" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><text 
transform="translate(353 305.42696)" fill="black"><tspan 
font-family="Helvetica" font-size="10" font-weight="bold" fill="black" 
x="5.7827734" y="10" textLength="54.46289">customer P</tspan><tspan 
font-family="Helvetica" font-size="10" font-weight="bold" fill="black" 
x="60.069883" y="10" textLength="23.339844"> data</tspan></text></g><g 
id="id26_Graphic"><path d="M 357.66 340.71348 L 435.5325 340.71348 C 439.21072 
340.71348 442.1925 343.69526 442.1925 347.37348 L 442.1925 354.62652 C 442.1925 
358.30474 439.21072 361.28652 435.5325 361.28652 L 357.66 361.28652 C 353.98178 
361.28652 351 358.30474 351 354.62652 L 351 347.37348 C 351 343.69526 353.98178 
340.71348 357.66 340.71348 Z" fill="url(#Obj_Gradient_14)"/><path d="M 357.66 
340.71348 L 435.5325 340.71348 C 439.21072 340.71348 442.1925 343.69526 
442.1925 347.37348 L 442.1925 354.62652 C 442.1925 358.30474 439.21072 
361.28652 435.5325 361.28652 L 357.66 361.28652 C 353.98178 361.28652 351 
358.30474 351 354.62652 L 351 347.37348 C 351 343.69526 353.98178 340.71348 
357.66 340.71348 Z" stroke="white" stroke-linecap="round" 
stroke-linejoin="round" stroke-width=".72000003"/><text 
transform="translate(353 342.71348)" fill="black"><tspan 
font-family="Helvetica" font-size="10" font-weight="bold" fill="black" 
x="5.1406836" y="10" textLength="78.911133">customer Q 
data</tspan></text></g></g></g></svg>
diff --git a/geode-docs/tools_modules/gfsh/command-pages/create.html.md.erb 
b/geode-docs/tools_modules/gfsh/command-pages/create.html.md.erb
index 5d972eebae..2988c2255c 100644
--- a/geode-docs/tools_modules/gfsh/command-pages/create.html.md.erb
+++ b/geode-docs/tools_modules/gfsh/command-pages/create.html.md.erb
@@ -959,7 +959,7 @@ See [Region Data Storage and 
Distribution](../../../developing/region_options/ch
 </tr>
 <tr class="even">
 <td><span class="keyword parmname">\-\-partition-resolver</span></td>
-<td>Specifies the full path to a custom partition resolver. To use the 
provided default partition resolver, specify <code class="ph 
codeph">org.apache.geode.cache.util.StringPrefixPartitionResolver</code>.</td>
+<td>Specifies the full path to a custom partition resolver. Specify <code 
class="ph 
codeph">org.apache.geode.cache.util.StringPrefixPartitionResolver</code> to use 
the included string prefix partition resolver.</td>
 <td></td>
 </tbody>
 </table>


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Improve docs on default string-based partition resolver
> -------------------------------------------------------
>
>                 Key: GEODE-3063
>                 URL: https://issues.apache.org/jira/browse/GEODE-3063
>             Project: Geode
>          Issue Type: Bug
>          Components: docs
>            Reporter: Karen Smoler Miller
>            Assignee: Karen Smoler Miller
>
> The new default partition resolver at
> org.apache.geode.cache.util.StringPrefixPartitionResolver
> needs more detailed documentation.
> - An example of a string specifying a key in a region operation when this 
> partition resolver is used.
> - What happens if the string specifying a key doesn't have a '|' delimiter.
> - An example of using this partition resolver to colocate two regions.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to