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
    Modifier and Type | Field and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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.