Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.apache.cassandra.thrift
Interface Cassandra.Iface

All Known Implementing Classes:
  Cassandra.Client, CassandraServer

Enclosing class:
  Cassandra

    public static interface Cassandra.Iface

Method Summary
`void` | `add(java.nio.ByteBuffer key, ColumnParent column_parent, CounterColumn column, ConsistencyLevel consistency_level)` Increment or decrement a counter.
`void` | `batch_mutate(java.util.Map<java.nio.ByteBuffer,java.util.Map<java.lang.String,java.util.List<Mutation>>> mutation_map, ConsistencyLevel consistency_level)` Mutate many columns or super columns for many row keys.
`java.lang.String` | `describe_cluster_name()` get the cluster name
`KsDef` | `describe_keyspace(java.lang.String keyspace)` describe specified keyspace
`java.util.List<KsDef>` | `describe_keyspaces()` list the defined keyspaces in this cluster
`java.lang.String` | `describe_partitioner()` returns the partitioner used by this cluster
`java.util.List<TokenRange>` | `describe_ring(java.lang.String keyspace)` get the token ring: a map of ranges to host addresses, represented as a set of TokenRange instead of a map from range to list of endpoints, because you can't use Thrift structs as map keys: https://issues.apache.org/jira/browse/THRIFT-162 for the same reason, we can't return a set here, even though order is neither important nor predictable.
`java.util.Map<java.lang.String,java.util.List<java.lang.String>>` | `describe_schema_versions()` for each schema version present in the cluster, returns a list of nodes at that version.
`java.lang.String` | `describe_snitch()` returns the snitch used by this cluster
`java.util.List<CfSplit>` | `describe_splits_ex(java.lang.String cfName, java.lang.String start_token, java.lang.String end_token, int keys_per_split)`
`java.util.List<java.lang.String>` | `describe_splits(java.lang.String cfName, java.lang.String start_token, java.lang.String end_token, int keys_per_split)` experimental API for hadoop/parallel query support.
`java.util.Map<java.lang.String,java.lang.String>` | `describe_token_map()` get the mapping between token->node ip without taking replication into consideration https://issues.apache.org/jira/browse/CASSANDRA-4092
`java.lang.String` | `describe_version()` get the thrift api version
`CqlResult` | `execute_cql_query(java.nio.ByteBuffer query, Compression compression)` Executes a CQL (Cassandra Query Language) statement and returns a CqlResult containing the results.
`CqlResult` | `execute_prepared_cql_query(int itemId, java.util.List<java.nio.ByteBuffer> values)` Executes a prepared CQL (Cassandra Query Language) statement by passing an id token and a list of variables to bind and returns a CqlResult containing the results.
`int` | `get_count(java.nio.ByteBuffer key, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)` returns the number of columns matching `predicate` for a particular `key`, `ColumnFamily` and optionally `SuperColumn`.
`java.util.List<KeySlice>` | `get_indexed_slices(ColumnParent column_parent, IndexClause index_clause, SlicePredicate column_predicate, ConsistencyLevel consistency_level)` Returns the subset of columns specified in SlicePredicate for the rows matching the IndexClause
`java.util.List<KeySlice>` | `get_paged_slice(java.lang.String column_family, KeyRange range, java.nio.ByteBuffer start_column, ConsistencyLevel consistency_level)` returns a range of columns, wrapping to the next rows if necessary to collect max_results.
`java.util.List<KeySlice>` | `get_range_slices(ColumnParent column_parent, SlicePredicate predicate, KeyRange range, ConsistencyLevel consistency_level)` returns a subset of columns for a contiguous range of keys.
`java.util.List<ColumnOrSuperColumn>` | `get_slice(java.nio.ByteBuffer key, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)` Get the group of columns contained by column_parent (either a ColumnFamily name or a ColumnFamily/SuperColumn name pair) specified by the given SlicePredicate.
`ColumnOrSuperColumn` | `get(java.nio.ByteBuffer key, ColumnPath column_path, ConsistencyLevel consistency_level)` Get the Column or SuperColumn at the given column_path.
`void` | `insert(java.nio.ByteBuffer key, ColumnParent column_parent, Column column, ConsistencyLevel consistency_level)` Insert a Column at the given column_parent.column_family and optional column_parent.super_column.
`void` | `login(AuthenticationRequest auth_request)`
`java.util.Map<java.nio.ByteBuffer,java.lang.Integer>` | `multiget_count(java.util.List<java.nio.ByteBuffer> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)` Perform a get_count in parallel on the given list keys.
`java.util.Map<java.nio.ByteBuffer,java.util.List<ColumnOrSuperColumn>>` | `multiget_slice(java.util.List<java.nio.ByteBuffer> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)` Performs a get_slice for column_parent and predicate for the given keys in parallel.
`CqlPreparedResult` | `prepare_cql_query(java.nio.ByteBuffer query, Compression compression)` Prepare a CQL (Cassandra Query Language) statement by compiling and returning - the type of CQL statement - an id token of the compiled CQL stored on the server side.
`void` | `remove_counter(java.nio.ByteBuffer key, ColumnPath path, ConsistencyLevel consistency_level)` Remove a counter at the specified location.
`void` | `remove(java.nio.ByteBuffer key, ColumnPath column_path, long timestamp, ConsistencyLevel consistency_level)` Remove data from the row specified by key at the granularity specified by column_path, and the given timestamp.
`void` | `set_cql_version(java.lang.String version)`
`void` | `set_keyspace(java.lang.String keyspace)`
`java.lang.String` | `system_add_column_family(CfDef cf_def)` adds a column family.
`java.lang.String` | `system_add_keyspace(KsDef ks_def)` adds a keyspace and any column families that are part of it.
`java.lang.String` | `system_drop_column_family(java.lang.String column_family)` drops a column family.
`java.lang.String` | `system_drop_keyspace(java.lang.String keyspace)` drops a keyspace and any column families that are part of it.
`java.lang.String` | `system_update_column_family(CfDef cf_def)` updates properties of a column family.
`java.lang.String` | `system_update_keyspace(KsDef ks_def)` updates properties of a keyspace.
`void` | `truncate(java.lang.String cfname)` Truncate will mark and entire column family as deleted.

Method Detail

### login

    void login(AuthenticationRequest auth_request)
               throws AuthenticationException,
                      AuthorizationException,
                      org.apache.thrift.TException

  Throws:
    `AuthenticationException`
    `AuthorizationException`
    `org.apache.thrift.TException`

### set_keyspace

    void set_keyspace(java.lang.String keyspace)
                      throws InvalidRequestException,
                             org.apache.thrift.TException

  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

### get

    ColumnOrSuperColumn get(java.nio.ByteBuffer key,
                            ColumnPath column_path,
                            ConsistencyLevel consistency_level)
                            throws InvalidRequestException,
                                   NotFoundException,
                                   UnavailableException,
                                   TimedOutException,
                                   org.apache.thrift.TException

  Get the Column or SuperColumn at the given column_path. If no value is present, NotFoundException is thrown. (This is the only method that can throw an exception under non-failure conditions.)

  Parameters:
    `key` -
    `column_path` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `NotFoundException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### get_slice

    java.util.List<ColumnOrSuperColumn> get_slice(java.nio.ByteBuffer key,
                                                  ColumnParent column_parent,
                                                  SlicePredicate predicate,
                                                  ConsistencyLevel consistency_level)
                                                  throws InvalidRequestException,
                                                         UnavailableException,
                                                         TimedOutException,
                                                         org.apache.thrift.TException

  Get the group of columns contained by column_parent (either a ColumnFamily name or a ColumnFamily/SuperColumn name pair) specified by the given SlicePredicate. If no matching values are found, an empty list is returned.

  Parameters:
    `key` -
    `column_parent` -
    `predicate` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### get_count

    int get_count(java.nio.ByteBuffer key,
                  ColumnParent column_parent,
                  SlicePredicate predicate,
                  ConsistencyLevel consistency_level)
                  throws InvalidRequestException,
                         UnavailableException,
                         TimedOutException,
                         org.apache.thrift.TException

  returns the number of columns matching `predicate` for a particular `key`, `ColumnFamily` and optionally `SuperColumn`.

  Parameters:
    `key` -
    `column_parent` -
    `predicate` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### multiget_slice

    java.util.Map<java.nio.ByteBuffer,java.util.List<ColumnOrSuperColumn>> multiget_slice(java.util.List<java.nio.ByteBuffer> keys,
                                                                                          ColumnParent column_parent,
                                                                                          SlicePredicate predicate,
                                                                                          ConsistencyLevel consistency_level)
                                                                                          throws InvalidRequestException,
                                                                                                 UnavailableException,
                                                                                                 TimedOutException,
                                                                                                 org.apache.thrift.TException

  Performs a get_slice for column_parent and predicate for the given keys in parallel.

  Parameters:
    `keys` -
    `column_parent` -
    `predicate` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### multiget_count

    java.util.Map<java.nio.ByteBuffer,java.lang.Integer> multiget_count(java.util.List<java.nio.ByteBuffer> keys,
                                                                        ColumnParent column_parent,
                                                                        SlicePredicate predicate,
                                                                        ConsistencyLevel consistency_level)
                                                                        throws InvalidRequestException,
                                                                               UnavailableException,
                                                                               TimedOutException,
                                                                               org.apache.thrift.TException

  Perform a get_count in parallel on the given list keys. The return value maps keys to the count found.

  Parameters:
    `keys` -
    `column_parent` -
    `predicate` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### get_range_slices

    java.util.List<KeySlice> get_range_slices(ColumnParent column_parent,
                                              SlicePredicate predicate,
                                              KeyRange range,
                                              ConsistencyLevel consistency_level)
                                              throws InvalidRequestException,
                                                     UnavailableException,
                                                     TimedOutException,
                                                     org.apache.thrift.TException

  returns a subset of columns for a contiguous range of keys.

  Parameters:
    `column_parent` -
    `predicate` -
    `range` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### get_paged_slice

    java.util.List<KeySlice> get_paged_slice(java.lang.String column_family,
                                             KeyRange range,
                                             java.nio.ByteBuffer start_column,
                                             ConsistencyLevel consistency_level)
                                             throws InvalidRequestException,
                                                    UnavailableException,
                                                    TimedOutException,
                                                    org.apache.thrift.TException

  returns a range of columns, wrapping to the next rows if necessary to collect max_results.

  Parameters:
    `column_family` -
    `range` -
    `start_column` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### get_indexed_slices

    java.util.List<KeySlice> get_indexed_slices(ColumnParent column_parent,
                                                IndexClause index_clause,
                                                SlicePredicate column_predicate,
                                                ConsistencyLevel consistency_level)
                                                throws InvalidRequestException,
                                                       UnavailableException,
                                                       TimedOutException,
                                                       org.apache.thrift.TException

  Returns the subset of columns specified in SlicePredicate for the rows matching the IndexClause

  Parameters:
    `column_parent` -
    `index_clause` -
    `column_predicate` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### insert

    void insert(java.nio.ByteBuffer key,
                ColumnParent column_parent,
                Column column,
                ConsistencyLevel consistency_level)
                throws InvalidRequestException,
                       UnavailableException,
                       TimedOutException,
                       org.apache.thrift.TException

  Insert a Column at the given column_parent.column_family and optional column_parent.super_column.

  Parameters:
    `key` -
    `column_parent` -
    `column` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### add

    void add(java.nio.ByteBuffer key,
             ColumnParent column_parent,
             CounterColumn column,
             ConsistencyLevel consistency_level)
             throws InvalidRequestException,
                    UnavailableException,
                    TimedOutException,
                    org.apache.thrift.TException

  Increment or decrement a counter.

  Parameters:
    `key` -
    `column_parent` -
    `column` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### remove

    void remove(java.nio.ByteBuffer key,
                ColumnPath column_path,
                long timestamp,
                ConsistencyLevel consistency_level)
                throws InvalidRequestException,
                       UnavailableException,
                       TimedOutException,
                       org.apache.thrift.TException

  Remove data from the row specified by key at the granularity specified by column_path, and the given timestamp. Note that all the values in column_path besides column_path.column_family are truly optional: you can remove the entire row by just specifying the ColumnFamily, or you can remove a SuperColumn or a single Column by specifying those levels too.

  Parameters:
    `key` -
    `column_path` -
    `timestamp` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### remove_counter

    void remove_counter(java.nio.ByteBuffer key,
                        ColumnPath path,
                        ConsistencyLevel consistency_level)
                        throws InvalidRequestException,
                               UnavailableException,
                               TimedOutException,
                               org.apache.thrift.TException

  Remove a counter at the specified location. Note that counters have limited support for deletes: if you remove a counter, you must wait to issue any following update until the delete has reached all the nodes and all of them have been fully compacted.

  Parameters:
    `key` -
    `path` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### batch_mutate

    void batch_mutate(java.util.Map<java.nio.ByteBuffer,java.util.Map<java.lang.String,java.util.List<Mutation>>> mutation_map,
                      ConsistencyLevel consistency_level)
                      throws InvalidRequestException,
                             UnavailableException,
                             TimedOutException,
                             org.apache.thrift.TException

  Mutate many columns or super columns for many row keys. See also: Mutation. mutation_map maps key to column family to a list of Mutation objects to take place at that scope. *

  Parameters:
    `mutation_map` -
    `consistency_level` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### truncate

    void truncate(java.lang.String cfname)
                  throws InvalidRequestException,
                         UnavailableException,
                         TimedOutException,
                         org.apache.thrift.TException

  Truncate will mark and entire column family as deleted. From the user's perspective a successful call to truncate will result complete data deletion from cfname. Internally, however, disk space will not be immediatily released, as with all deletes in cassandra, this one only marks the data as deleted. The operation succeeds only if all hosts in the cluster at available and will throw an UnavailableException if some hosts are down.

  Parameters:
    `cfname` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `org.apache.thrift.TException`

### describe_schema_versions

    java.util.Map<java.lang.String,java.util.List<java.lang.String>> describe_schema_versions()
                                                                                              throws InvalidRequestException,
                                                                                                     org.apache.thrift.TException

  for each schema version present in the cluster, returns a list of nodes at that version. hosts that do not respond will be under the key DatabaseDescriptor.INITIAL_VERSION. the cluster is all on the same version if the size of the map is 1.

  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

### describe_keyspaces

    java.util.List<KsDef> describe_keyspaces()
                                             throws InvalidRequestException,
                                                    org.apache.thrift.TException

  list the defined keyspaces in this cluster

  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

### describe_cluster_name

    java.lang.String describe_cluster_name()
                                           throws org.apache.thrift.TException

  get the cluster name

  Throws:
    `org.apache.thrift.TException`

### describe_version

    java.lang.String describe_version()
                                      throws org.apache.thrift.TException

  get the thrift api version

  Throws:
    `org.apache.thrift.TException`

### describe_ring

    java.util.List<TokenRange> describe_ring(java.lang.String keyspace)
                                             throws InvalidRequestException,
                                                    org.apache.thrift.TException

  get the token ring: a map of ranges to host addresses, represented as a set of TokenRange instead of a map from range to list of endpoints, because you can't use Thrift structs as map keys: https://issues.apache.org/jira/browse/THRIFT-162 for the same reason, we can't return a set here, even though order is neither important nor predictable.

  Parameters:
    `keyspace` -
  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

### describe_token_map

    java.util.Map<java.lang.String,java.lang.String> describe_token_map()
                                                                        throws InvalidRequestException,
                                                                               org.apache.thrift.TException

  get the mapping between token->node ip without taking replication into consideration https://issues.apache.org/jira/browse/CASSANDRA-4092

  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

### describe_partitioner

    java.lang.String describe_partitioner()
                                          throws org.apache.thrift.TException

  returns the partitioner used by this cluster

  Throws:
    `org.apache.thrift.TException`

### describe_snitch

    java.lang.String describe_snitch()
                                     throws org.apache.thrift.TException

  returns the snitch used by this cluster

  Throws:
    `org.apache.thrift.TException`

### describe_keyspace

    KsDef describe_keyspace(java.lang.String keyspace)
                            throws NotFoundException,
                                   InvalidRequestException,
                                   org.apache.thrift.TException

  describe specified keyspace

  Parameters:
    `keyspace` -
  Throws:
    `NotFoundException`
    `InvalidRequestException`
    `org.apache.thrift.TException`

### describe_splits

    java.util.List<java.lang.String> describe_splits(java.lang.String cfName,
                                                     java.lang.String start_token,
                                                     java.lang.String end_token,
                                                     int keys_per_split)
                                                     throws InvalidRequestException,
                                                            org.apache.thrift.TException

  experimental API for hadoop/parallel query support. may change violently and without warning. returns list of token strings such that first subrange is (list[0], list[1]], next is (list[1], list[2]], etc.

  Parameters:
    `cfName` -
    `start_token` -
    `end_token` -
    `keys_per_split` -
  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

### describe_splits_ex

    java.util.List<CfSplit> describe_splits_ex(java.lang.String cfName,
                                               java.lang.String start_token,
                                               java.lang.String end_token,
                                               int keys_per_split)
                                               throws InvalidRequestException,
                                                      org.apache.thrift.TException

  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

### system_add_column_family

    java.lang.String system_add_column_family(CfDef cf_def)
                                              throws InvalidRequestException,
                                                     SchemaDisagreementException,
                                                     org.apache.thrift.TException

  adds a column family. returns the new schema id.

  Parameters:
    `cf_def` -
  Throws:
    `InvalidRequestException`
    `SchemaDisagreementException`
    `org.apache.thrift.TException`

### system_drop_column_family

    java.lang.String system_drop_column_family(java.lang.String column_family)
                                               throws InvalidRequestException,
                                                      SchemaDisagreementException,
                                                      org.apache.thrift.TException

  drops a column family. returns the new schema id.

  Parameters:
    `column_family` -
  Throws:
    `InvalidRequestException`
    `SchemaDisagreementException`
    `org.apache.thrift.TException`

### system_add_keyspace

    java.lang.String system_add_keyspace(KsDef ks_def)
                                         throws InvalidRequestException,
                                                SchemaDisagreementException,
                                                org.apache.thrift.TException

  adds a keyspace and any column families that are part of it. returns the new schema id.

  Parameters:
    `ks_def` -
  Throws:
    `InvalidRequestException`
    `SchemaDisagreementException`
    `org.apache.thrift.TException`

### system_drop_keyspace

    java.lang.String system_drop_keyspace(java.lang.String keyspace)
                                          throws InvalidRequestException,
                                                 SchemaDisagreementException,
                                                 org.apache.thrift.TException

  drops a keyspace and any column families that are part of it. returns the new schema id.

  Parameters:
    `keyspace` -
  Throws:
    `InvalidRequestException`
    `SchemaDisagreementException`
    `org.apache.thrift.TException`

### system_update_keyspace

    java.lang.String system_update_keyspace(KsDef ks_def)
                                            throws InvalidRequestException,
                                                   SchemaDisagreementException,
                                                   org.apache.thrift.TException

  updates properties of a keyspace. returns the new schema id.

  Parameters:
    `ks_def` -
  Throws:
    `InvalidRequestException`
    `SchemaDisagreementException`
    `org.apache.thrift.TException`

### system_update_column_family

    java.lang.String system_update_column_family(CfDef cf_def)
                                                 throws InvalidRequestException,
                                                        SchemaDisagreementException,
                                                        org.apache.thrift.TException

  updates properties of a column family. returns the new schema id.

  Parameters:
    `cf_def` -
  Throws:
    `InvalidRequestException`
    `SchemaDisagreementException`
    `org.apache.thrift.TException`

### execute_cql_query

    CqlResult execute_cql_query(java.nio.ByteBuffer query,
                                Compression compression)
                                throws InvalidRequestException,
                                       UnavailableException,
                                       TimedOutException,
                                       SchemaDisagreementException,
                                       org.apache.thrift.TException

  Executes a CQL (Cassandra Query Language) statement and returns a CqlResult containing the results.

  Parameters:
    `query` -
    `compression` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `SchemaDisagreementException`
    `org.apache.thrift.TException`

### prepare_cql_query

    CqlPreparedResult prepare_cql_query(java.nio.ByteBuffer query,
                                        Compression compression)
                                        throws InvalidRequestException,
                                               org.apache.thrift.TException

  Prepare a CQL (Cassandra Query Language) statement by compiling and returning - the type of CQL statement - an id token of the compiled CQL stored on the server side. - a count of the discovered bound markers in the statement

  Parameters:
    `query` -
    `compression` -
  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

### execute_prepared_cql_query

    CqlResult execute_prepared_cql_query(int itemId,
                                         java.util.List<java.nio.ByteBuffer> values)
                                         throws InvalidRequestException,
                                                UnavailableException,
                                                TimedOutException,
                                                SchemaDisagreementException,
                                                org.apache.thrift.TException

  Executes a prepared CQL (Cassandra Query Language) statement by passing an id token and a list of variables to bind and returns a CqlResult containing the results.

  Parameters:
    `itemId` -
    `values` -
  Throws:
    `InvalidRequestException`
    `UnavailableException`
    `TimedOutException`
    `SchemaDisagreementException`
    `org.apache.thrift.TException`

### set_cql_version

    void set_cql_version(java.lang.String version)
                         throws InvalidRequestException,
                                org.apache.thrift.TException

  Throws:
    `InvalidRequestException`
    `org.apache.thrift.TException`

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2013 The Apache Software Foundation