org.jgroups.protocols

## Class S3_PING

- java.lang.Object
- - org.jgroups.stack.Protocol
  - - org.jgroups.protocols.Discovery
    - - org.jgroups.protocols.FILE_PING
      - - org.jgroups.protocols.S3_PING

    public class S3_PING
    extends FILE_PING

Discovery protocol using Amazon's S3 storage. The S3 access code reuses the example shipped by Amazon. This protocol is unsupported and experimental !

Author:
  Bela Ban

### Nested Class Summary

### Nested classes/interfaces inherited from class org.jgroups.protocols.FILE_PING

`FILE_PING.WriterTask`

### Nested classes/interfaces inherited from class org.jgroups.protocols.Discovery

`Discovery.Responses`

### Field Summary

Fields
`protected java.lang.String` `access_key`
`protected org.jgroups.protocols.S3_PING.AWSAuthConnection` `conn`
`protected java.lang.String` `pre_signed_delete_url`
`protected java.lang.String` `pre_signed_put_url`
`protected java.lang.String` `prefix`
`protected java.lang.String` `secret_access_key`

### Fields inherited from class org.jgroups.protocols.FILE_PING

`filter, interval, location, root_dir, SUFFIX`

### Fields inherited from class org.jgroups.protocols.Discovery

`group_addr, local_addr, members, ping_responses, rank, timer, view`

### Fields inherited from class org.jgroups.stack.Protocol

`down_prot, ergonomics, id, log, name, stack, stats, up_prot`

### Constructor Summary

Constructors
Constructor and Description
`S3_PING()`

### Method Summary

Methods
`protected void` `createRootDir()`
`static java.lang.String` `generatePreSignedUrl(java.lang.String awsAccessKey, java.lang.String awsSecretAccessKey, java.lang.String method, java.lang.String bucket, java.lang.String key, long expirationDate)` Use this helper method to generate pre-signed S3 urls for use with S3_PING.
`void` `init()` Called after instance has been created (null constructor) and before protocol is started.
`protected java.util.List<PingData>` `readAll(java.lang.String clustername)` Reads all information from the given directory under clustername
`protected void` `remove(java.lang.String clustername, Address addr)`
`protected boolean` `usingPreSignedUrls()`
`protected void` `validateProperties()`
`protected void` `writeToFile(PingData data, java.lang.String clustername)`

### Methods inherited from class org.jgroups.protocols.FILE_PING

`addressAsString, down, handleView, readFile, sendGetMembersRequest, start, stop`

### Methods inherited from class org.jgroups.protocols.Discovery

`discoveryRequestReceived, findAllMembers, findAllViews, findAllViewsAsString, findInitialMembers, findInitialMembers, findInitialMembersAsString, getNumberOfDiscoveryRequestsSent, getNumInitialMembers, getNumPingRequests, getTimeout, getView, handleConnect, handleDisconnect, makeView, providedUpServices, resetStats, setNumInitialMembers, setNumPingRequests, setTimeout, up`

### Methods inherited from class org.jgroups.stack.Protocol

`destroy, downThreadEnabled, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getId, getLevel, getName, getProperties, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getValue, isErgonomics, printStats, providedDownServices, requiredDownServices, requiredUpServices, setDownProtocol, setErgonomics, setId, setLevel, setProperties, setPropertiesInternal, setProperty, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, statsEnabled, upThreadEnabled`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### access_key

    protected java.lang.String access_key

#### secret_access_key

    protected java.lang.String secret_access_key

#### prefix

    protected java.lang.String prefix

#### pre_signed_put_url

    protected java.lang.String pre_signed_put_url

#### pre_signed_delete_url

    protected java.lang.String pre_signed_delete_url

#### conn

    protected org.jgroups.protocols.S3_PING.AWSAuthConnection conn

### Constructor Detail

#### S3_PING

    public S3_PING()

### Method Detail

#### init

    public void init()
              throws java.lang.Exception

Description copied from class: `Protocol`
Called after instance has been created (null constructor) and before protocol is started. Properties are already set. Other protocols are not yet connected and events cannot yet be sent.

Overrides:
  `init` in class `FILE_PING`
Throws:
  `java.lang.Exception` - Thrown if protocol cannot be initialized successfully. This will cause the ProtocolStack to fail, so the channel constructor will throw an exception

#### createRootDir

    protected void createRootDir()

Overrides:
  `createRootDir` in class `FILE_PING`

#### readAll

    protected java.util.List<PingData> readAll(java.lang.String clustername)

Description copied from class: `FILE_PING`
Reads all information from the given directory under clustername

Overrides:
  `readAll` in class `FILE_PING`
Returns:

#### writeToFile

    protected void writeToFile(PingData data,
                   java.lang.String clustername)

Overrides:
  `writeToFile` in class `FILE_PING`

#### remove

    protected void remove(java.lang.String clustername,
              Address addr)

Overrides:
  `remove` in class `FILE_PING`

#### validateProperties

    protected void validateProperties()

#### usingPreSignedUrls

    protected boolean usingPreSignedUrls()

#### generatePreSignedUrl

    public static java.lang.String generatePreSignedUrl(java.lang.String awsAccessKey,
                                        java.lang.String awsSecretAccessKey,
                                        java.lang.String method,
                                        java.lang.String bucket,
                                        java.lang.String key,
                                        long expirationDate)

Use this helper method to generate pre-signed S3 urls for use with S3_PING. You'll need to generate urls for both the put and delete http methods. Example: Your AWS Access Key is "abcd". Your AWS Secret Access Key is "efgh". You want this node to write its information to "/S3_PING/DemoCluster/node1". So, your bucket is "S3_PING" and your key is "DemoCluster/node1". You want this to expire one year from now, or (System.currentTimeMillis / 1000) + (60 * 60 * 24 * 365) Let's assume that this equals 1316286684 Here's how to generate the value for the pre_signed_put_url property: String putUrl = S3_PING.generatePreSignedUrl("abcd", "efgh", "put", "S3_Ping", "DemoCluster/node1", 1316286684); Here's how to generate the value for the pre_signed_delete_url property: String deleteUrl = S3_PING.generatePreSignedUrl("abcd", "efgh", "delete", "S3_Ping", "DemoCluster/node1", 1316286684);

Parameters:
  `awsAccessKey` - Your AWS Access Key
  `awsSecretAccessKey` - Your AWS Secret Access Key
  `method` - The HTTP method - use "put" or "delete" for use with S3_PING
  `bucket` - The S3 bucket you want to write to
  `key` - The key within the bucket to write to
  `expirationDate` - The date this pre-signed url should expire, in seconds since epoch
Returns:
  The pre-signed url to be used in pre_signed_put_url or pre_signed_delete_url properties