## 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
`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
`S3_PING()`

Method Summary
`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

Copyright © 1998-2009 Bela Ban / Red Hat. All Rights Reserved.