Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

First header

First div with some text

Second header

Second div with another bit of text

Table of Contents

Region Management

Create Region 

...

Endpoint: http://locator:7070/management/experimental/regions

Method: POST

Headers: Authorization

Permission Required: DATA:MANAGE

Code Block
languageyml
titleSample Request
{
	"name": "regionA",
	"type": "REPLICATE"
}

Types supported by this Rest API is defined in RegionType:

Code Block
languagejava
titleRequest Body
public enum RegionType {
  PARTITION,
  PARTITION_REDUNDANT,
  PARTITION_PERSISTENT,
  PARTITION_REDUNDANT_PERSISTENT,
  PARTITION_OVERFLOW,
  PARTITION_REDUNDANT_OVERFLOW,
  PARTITION_PERSISTENT_OVERFLOW,
  PARTITION_REDUNDANT_PERSISTENT_OVERFLOW,
  PARTITION_HEAP_LRU,
  PARTITION_REDUNDANT_HEAP_LRU,

  PARTITION_PROXY,
  PARTITION_PROXY_REDUNDANT,

  REPLICATE,
  REPLICATE_PERSISTENT,
  REPLICATE_OVERFLOW,
  REPLICATE_PERSISTENT_OVERFLOW,
  REPLICATE_HEAP_LRU,

  REPLICATE_PROXY
}

...

Code Block
languageyml
titleSuccess Response
{
	"memberStatuses": [{
		"memberName": "server-2",
		"success": true,
		"message": "Region successfully created."
	}, {
		"memberName": "server-3",
		"success": true,
		"message": "Region successfully created."
	}],
	"statusCode": "OK",
	"statusMessage": "Successfully updated configuration for cluster.",
	"uri": "/management/experimental/regions/regionA"
}

...

Code Block
languageyml
titleName conflict
{
   "statusMessage" : "Region 'regionA' already exists on member(s) server-2.",
   "statusCode" : "ENTITY_EXISTS"
}

...

Code Block
languageyml
titleError Response - empty required parameter
{
  "statusCode" : "ILLEGAL_ARGUMENT",
  "statusMessage" : "Region identifier is required.",
}
Code Block
languageyml
titleError Response - invalid parameter
{
  "statusCode" : "ILLEGAL_ARGUMENT",
  "statusMessage" : "Region names may not begin with a double-underscore: __Foo.",
}

Given an unknown input attribute, for example: foobar in: 

curl -d '{"name":"replicate2","type":"REPLICATE","foobar":"value"}' -H 'Content-Type: application/json' http://localhost:7070/management/experimental/regions

the output is:

{

   "statusCode" : "ILLEGAL_ARGUMENT",

   "statusMessage" : "JSON parse error: Unrecognized field \"foobar\" (class org.apache.geode.cache.configuration.Region), not marked as ignorable; nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field \"foobar\" (class org.apache.geode.cache.configuration.Region), not marked as ignorable (9 known properties: \"indexes\", \"groups\", \"type\", \"regionAttributes\", \"customRegionElements\", \"regions\", \"entries\", \"name\", \"group\"])\n at [Source: (PushbackInputStream); line: 1, column: 59] (through reference chain: org.apache.geode.cache.configuration.Region[\"foobar\"])"

}

...

Code Block
languageyml
titleError Response - unauthenticated
{
  "statusCode" : "UNAUTHENTICATED",
  "statusMessage" : "Authentication error. Please check your credentials.",
}

...

Code Block
languageyml
titleError Response - not authorized
{
  "statusCode" : "UNAUTHORIZED",
  "statusMessage" : "User not authorized for DATA:MANAGE.",
}

...

Code Block
languageyml
titleError Response
{
  "statusCode" : "ERROR",
  "statusMessage" : "Cluster configuration service is not running.",
}

Notes:

  • the CREATE[POST] endpoint is not idempotent, you will receive a 409 when creating the a region with the same name the 2nd time.
  • if group name is "cluster" or omitted, the region will be created on all the data members in this cluster.

401 and 403 responses are omitted for the rest of the end points.

List Regions

...

Endpoint: http://locator:7070/management/experimental/regions

Method: GET

Headers: Authorization

...

200

Code Block
languageyml
titleSuccess Response
{
	"statusCode": "OK",
	"result": [{
		"config": {
			"groups": ["group2"],
			"regionAttributes": {
				"dataPolicy": "PARTITION",
				"concurrencyChecksEnabled": true
			},
			"name": "customers2",
			"type": "PARTITION",
			"uri": "/management/experimental/regions/customers2"
		},
		"runtimeInfo": [{
			"entryCount": 0
		}]
	}, {
		"config": {
			"groups": ["group2", "group1"],
			"regionAttributes": {
				"dataPolicy": "PARTITION",
				"concurrencyChecksEnabled": true
			},
			"name": "customers3",
			"type": "PARTITION",
			"uri": "/management/experimental/regions/customers3"
		},
		"runtimeInfo": [{
			"entryCount": 0
		}]
	}]
}

...

Code Block
languageyml
titleError Response
{
  "statusCode" : "UNAUTHENTICATED",
  "statusMessage" : "Authentication error. Please check your credentials.",
}

...

Code Block
languageyml
titleError Response
{
  "statusCode" : "UNAUTHORIZED",
  "statusMessage" : "User not authorized for DATA:MANAGE.",
}

Get Region

...

Endpoint: http://locator:7070/management/experimental/regions/Foo

Method: GET

Headers: Authorization

...

200

Code Block
languagejs
themeEclipse
titleSuccess Response
{
	"statusCode": "OK",
	"result": {
		"config": {
			"groups": ["group2"],
			"regionAttributes": {
				"dataPolicy": "PARTITION",
				"concurrencyChecksEnabled": true
			},
			"name": "Foo",
			"type": "PARTITION",
			"uri": "/management/experimental/regions/Foo"
		},
		"runtimeInfo": [{
			"entryCount": 0
		}]
	}
}

...

Code Block
languageyml
titleError Response
{
  "statusCode" : "UNAUTHENTICATED",
  "statusMessage" : "Authentication error. Please check your credentials.",
}

...

Code Block
languageyml
titleError Response
{
  "statusCode" : "UNAUTHORIZED",
  "statusMessage" : "User not authorized for DATA:MANAGE.",
}

...

Code Block
languagejs
titleNot Found Response
{
     "statusCode": "ENTITY_NOT_FOUND",
     "statusMessage": "Region 'Foo' does not exist."
}

Delete Region

...

Endpoint: http://locator:7070/management/experimental/regions/Foo

Method: DELETE

Headers: Authorization

...

200

Code Block
languageyml
titleSuccess Response
{
	"memberStatuses": [{
		"memberName": "server-1",
		"success": true,
		"message": "Region successfully deleted."
	}, {
		"memberName": "server-3",
		"success": true,
		"message": "Region successfully deleted."
	}],
	"statusCode": "OK",
	"statusMessage": "Successfully removed configuration for [cluster]."
}

...

Code Block
languageyml
titleNot Found Response
{
     "statusCode":"ENTITY_NOT_FOUND",
     "statusMessage":"Region 'Foo' does not exist."
}

...

Code Block
languageyml
titleError Response
{
  "statusCode" : "UNAUTHENTICATED",
  "statusMessage" : "Authentication error. Please check your credentials.",
}

...

Code Block
languageyml
titleError Response
{
  "statusCode" : "UNAUTHORIZED",
  "statusMessage" : "User not authorized for DATA:MANAGE.",
}

...

Code Block
languageyml
titleError Response
{
    "statusCode" : "ERROR",
    "statusMessage": "Failed to delete on all members."
}

Note that the DELETE endpoint is idempotent – i.e. it should be a NOOP if the region does not exist.

Member Management

List Members

...

Endpoint: http://locator:7070/management/experimental/members

Method: GET

Headers: Authorization

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleSuccess Response
{
	"statusCode": "OK",
	"result": [{
		"runtimeInfo": [{
			"memberName": "locator-0",
			"id": "10.10.10.10(locator-0:4317:locator)<ec><v0>:41001",
			"workingDirPath": "/Users/user/projects/geode/vm0",
			"logFilePath": "/Users/user/projects/geode/vm0",
			"statArchiveFilePath": "/Users/user/projects/geode/vm0",
			"locators": "10.10.10.10[64759]",
			"heapUsage": 209,
			"maxHeapSize": 480,
			"initHeapSize": 512,
			"cacheXmlFilePath": "/Users/user/projects/geode/vm0",
			"host": "10.10.10.10",
			"processId": 4317,
			"locatorPort": 64759,
			"httpServicePort": 22500,
			"httpServiceBindAddress": "localhost",
			"clientCount": 0,
			"cpuUsage": 0.0,
			"webSSL": false,
			"coordinator": true,
			"secured": false,
			"server": false,
            "status": "online"
		}, {
			"memberName": "server-1",
			"id": "10.10.10.10(server-1:4318)<v1>:41002",
			"workingDirPath": "/Users/user/projects/geode/vm1",
			"logFilePath": "/Users/user/projects/geode/vm1",
			"statArchiveFilePath": "/Users/user/projects/geode/vm1",
			"locators": "localhost[64759]",
			"heapUsage": 107,
			"maxHeapSize": 491,
			"initHeapSize": 512,
			"cacheXmlFilePath": "/Users/user/projects/geode/vm1/cache.xml",
			"host": "10.10.10.10",
			"processId": 4318,
			"locatorPort": 0,
			"httpServicePort": 0,
			"clientCount": 0,
			"cpuUsage": 0.0,
			"webSSL": false,
			"coordinator": false,
			"secured": false,
			"server": true,
            "status": "online",
			"cacheServerInfo": [{
				"port": 64772,
				"maxConnections": 800,
				"maxThreads": 0,
				"running": true
			}]
		}]
	}]
}

...

Endpoint: http://locator:7070/management/experimental/members?id=server-1

Method: GET

Headers: Authorization

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleSuccess Response
{
	"statusCode": "OK",
	"result": [{
        "config" : {
            "id" : "locator-0",
            "uri" : "/management/experimental/members/locator-0",
        },
		"runtimeInfo": [{
			"memberName": "locator-0",
			"id": "10.10.10.10(locator-0:4317:locator)<ec><v0>:41001",
			"workingDirPath": "/Users/user/projects/geode/vm0",
			"logFilePath": "/Users/user/projects/geode/vm0",
			"statArchiveFilePath": "/Users/user/projects/geode/vm0",
			"locators": "10.10.10.10[64759]",
			"heapUsage": 209,
			"maxHeapSize": 480,
			"initHeapSize": 512,
			"cacheXmlFilePath": "/Users/juser/projects/geode/vm0",
			"host": "10.10.10.10",
			"processId": 4317,
			"locatorPort": 64759,
			"httpServicePort": 22500,
			"httpServiceBindAddress": "localhost",
			"clientCount": 0,
			"cpuUsage": 0.0,
			"webSSL": false,
			"coordinator": true,
			"secured": false,
			"server": false,
            "status": "online"
		}]
	}]
}

...

Endpoint: http://locator:7070/management/experimental/members?id=Non-Existent

Method: GET

Headers: Authorization

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleSuccess Response
{
   "statusCode" : "OK",
   "result" : [
      {
         "config" : {
            "uri" : "/management/experimental/members/Non-Existent",
            "id" : "Non-Existent"
         }
      }
   ]
}

Get Member

...

Endpoint: http://locator:7070/management/experimental/members/server-1

Method: GET

Headers: Authorization

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleSuccess Response
{
	"statusCode": "OK",
	"result": {
        "config" : {
            "id" : "server-1",
            "uri" : "/management/experimental/members/server-1",
        },
		"runtimeInfo": [{
			"memberName": "server-1",
			"id": "10.10.10.10(locator-0:4317:locator)<ec><v0>:41001",
			"workingDirPath": "/Users/user/projects/geode/vm0",
			"logFilePath": "/Users/user/projects/geode/vm0",
			"statArchiveFilePath": "/Users/user/projects/geode/vm0",
			"locators": "10.10.10.10[64759]",
			"heapUsage": 209,
			"maxHeapSize": 480,
			"initHeapSize": 512,
			"cacheXmlFilePath": "/Users/user/projects/geode/vm0",
			"host": "10.10.10.10",
			"processId": 4317,
			"locatorPort": 64759,
			"httpServicePort": 22500,
			"httpServiceBindAddress": "localhost",
			"clientCount": 0,
			"cpuUsage": 0.0,
			"webSSL": false,
			"coordinator": true,
			"secured": false,
			"server": false,
            "status": "online"
		}]
	}
}

...

Endpoint: http://locator:7070/management/experimental/members/Non-Existent

Method: GET

Headers: Authorization

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleNot Found Response
{
   "statusCode" : "ENTITY_NOT_FOUND",
   "statusMessage" : "Member 'Non-Existent' does not exist."
}

Index Management

List Indexes

...

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleSuccess Response
{
	"statusCode": "OK",
	"result": [{
		"config": {
			"name": "index1",
			"expression": "id",
			"fromClause": "/region1",
			"keyIndex": true,
			"type": "key",
			"regionName": "region1",
			"uri": "/management/experimental/regions/region1/indexes/index1"
		}
	}, {
		"config": {
			"name": "index2",
			"expression": "key",
			"fromClause": "/region1",
			"keyIndex": true,
			"type": "key",
			"regionName": "region1",
			"uri": "/management/experimental/regions/region1/indexes/index2"
		}
	}]
}

Get Index

...

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleSuccess Response
{
	"statusCode": "OK",
	"result": {
		"config": {
			"name": "index1",
			"expression": "id",
			"fromClause": "/region1",
			"keyIndex": true,
			"type": "key",
			"regionName": "region1",
			"uri": "/management/experimental/regions/region1/indexes/index1"
		}
	}
}

...

Permission Required: CLUSTER:READ

...

Code Block
languagejs
titleNot found response
{
  "statusCode": "ENTITY_NOT_FOUND",
  "statusMessage": "Index 'foo' does not exist in region 'replicate'."
}

PDX Management

Configure PDX

...

Endpoint:http://locator:7070/management/experimental/configurations/pdx

Method: POST

Headers: Authorization

Permission Required: CLUSTER:MANAGE

Code Block
languageyml
titleSample Request
{"readSerialized":true}

...

Code Block
languageyml
titleSuccess Response
{
  "statusCode": "OK",
  "statusMessage": "Successfully updated configuration for cluster.",
  "uri": "/management/experimental/configurations/pdx",
  "memberStatuses": [
    {
      "memberName": "server-1",
      "success": true,
      "message": "Server 'server-1' needs to be restarted for this configuration change to be realized."
    }
  ]
}

Gateway Management

Create Gateway Receiver

...

Endpoint: http://locator:7070/management/experimental/gateways/receivers

Method: POST

Headers: Authorization

Permission Required: CLUSTER:MANAGE

Code Block
languageyml
titleSample Request
{
 "startPort":"5000",
 "group":"group1"
}

...

Code Block
languageyml
titleSuccess Response
{
  "statusCode": "OK",
  "statusMessage": "Successfully updated configuration for group1.",
  "uri": "/management/experimental/gateways/receivers/group1"
}

List Gateway Receivers

...

Endpoint: http://locator:7070/management/experimental/gateways/receivers

Method: GET

Headers: Authorization

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleSuccess Response
{
	"statusCode": "OK",
	"result": [{
		"config": {
			"groups": ["group2"],
			"startPort": "5002",
			"endPort": "5500",
			"uri": "/management/experimental/gateways/receivers/group2"
		}
	}, {
		"config": {
			"groups": ["group1"],
			"startPort": "5000",
			"endPort": "5500",
			"uri": "/management/experimental/gateways/receivers/group1"
		},
		"runtimeInfo": [{
			"memberName": "server-1",
			"running": true,
			"port": 5134
		}]
	}]
}

Get Gateway Receiver

...

Permission Required: CLUSTER:READ

...

Code Block
languageyml
titleSuccess Response
{
	"statusCode": "OK",
	"result": {
		"config": {
			"groups": ["group1"],
			"startPort": "5000",
			"endPort": "5500",
			"uri": "/management/experimental/gateways/receivers/group1"
		},
		"runtimeInfo": [{
			"memberName": "server-1",
			"running": true,
			"port": 5134
		}]
	}
}

Rebalance Operation

Start Rebalance

...

Endpoint: http://locator:7070/management/experimental/operations/rebalances

Method: POST

Headers: Authorization

Permission Required: DATA:MANAGE

Code Block
languageyml
titleSample Request
{
"excludeRegions": [],
"includeRegions": [],
"simulate": false
}

...

Code Block
languageyml
titleSuccess Response
{
  "statusCode": "ACCEPTED",
  "statusMessage": "Operation started.  Use the URI to check its status.",
  "uri": "/management/experimental/operations/rebalances/8a70d6c4",
  "operationStart": "2019-07-25T10:17:42.004Z"
}

List Rebalance History

...

Endpoint: http://locator:7070/management/experimental/operations/rebalances

Method: GET

Headers: Authorization

Permission Required: DATA:MANAGE

...

Code Block
languageyml
titleSuccess Response
{
  "statusCode": "OK",
  "result": [
    {
      "statusCode": "OK",
      "statusMessage": "Operation finished successfully.",
      "uri": "/management/experimental/operations/rebalances/8a70d6c4",
      "operationStart": "2019-07-25T10:17:42.004Z",
      "operationEnded": "2019-07-25T10:17:42.060Z"
    },
    {
      "statusCode": "IN_PROGRESS",
      "statusMessage": "Operation in progress.",
      "uri": "/management/experimental/operations/rebalances/a7d6204c",
      "operationStart": "2019-07-26T04:57:22.534Z",
    }
  ]
}

Get Rebalance Status

...

Permission Required: DATA:MANAGE

...

Code Block
languageyml
titleSuccess Response
{
  "statusCode": "IN_PROGRESS",
  "statusMessage": "Operation in progress.",
  "operationStart": "2019-07-25T10:17:42.004Z",
}

...

Code Block
languageyml
titleSuccess Response
{
  "statusCode": "OK",
  "statusMessage": "Operation finished successfully.",
  "operationStart": "2019-07-25T10:17:42.004Z",
  "operationEnded": "2019-07-25T10:17:42.060Z",
  "result": {
    "rebalanceRegionResults": [
      {
        "regionName": "testRegion2",
        "bucketCreateBytes": 0,
        "bucketCreateTimeInMilliseconds": 0,
        "bucketCreatesCompleted": 0,
        "bucketTransferBytes": 0,
        "bucketTransferTimeInMilliseconds": 0,
        "bucketTransfersCompleted": 0,
        "primaryTransferTimeInMilliseconds": 0,
        "primaryTransfersCompleted": 0,
        "timeInMilliseconds": 17
      },
      {
        "regionName": "testRegion1",
        "bucketCreateBytes": 0,
        "bucketCreateTimeInMilliseconds": 0,
        "bucketCreatesCompleted": 0,
        "bucketTransferBytes": 0,
        "bucketTransferTimeInMilliseconds": 0,
        "bucketTransfersCompleted": 0,
        "primaryTransferTimeInMilliseconds": 0,
        "primaryTransfersCompleted": 0,
        "timeInMilliseconds": 5
      }
    ]
  }
}

...

Code Block
languageyml
titleInformation Response
{
  "statusCode": "OK",
  "statusMessage": "Operation finished successfully.",
  "operationStart": "2019-07-25T10:17:42.004Z",
  "operationEnded": "2019-07-25T10:17:42.060Z",
  "result": {
    "statusMessage": "Distributed system has no regions that can be rebalanced."
  }
}

...

languageyml
titleNot Found Response

...