Themetadata associated with an object is immutable. There is no operation to modify the
metadataassociated with an object after the object has been stored. Instead, the storeMetadata
operationcan be used to create a completely new object by associating new user metadata with
theunderlying data and system-metadata of an existing object. The storeMetadata operation
doesnot merge the new metadata in with the metadata from the original OID; instead, the
storeMetadataoperation creates a new metadata record pointing to the same data object. To
accomplisha merge of new eld values into existing metadata, the customer application must
manuallyretrieve the existing metadata from the original object, perform the merge into a
singleNameValueRecord on the client side, and then call storeMetadata to create a new object
withthe merged metadata.
Whencreating a new object using storeMetadata, a new system.object_id and new
system.object_ctimeare generated, to indicate that a new object has been created. The
metadatacomputed from the object data itself (system.object_length,
system.object_hash_alg,and system.object_hash) does not change. Both the storeObject
andthe storeMetadata operations return a SystemRecord value that includes all of the
system-assignedelds.
Whileretrieving the OID is the most common use of the SystemRecord, the other system elds
canalso be helpful. For example, the customer application might use the
system.object_length,the system.object_hash_alg and the system.object_hash elds to
verifythat the data as stored matches the data as present in the customer application. If a hash
independentlycomputed on the client matches the hash stored on the 5800 system, then the
datastore has been validated.
Themetadata values associated with an object can be retrieved using the retrieveMetadata
operation.The retrieveMetadata operation takes an OID as input, and returns the entire set
ofuser, system, and system-computed metadata. The retrieved metadata is in the form of a
NameValueRecordthat contains the value of each eld as originally stored. The system elds
occurusing their eld names, for example. the eld system.object_ctime contains the object
creationtime. There is no operation to retrieve just a single eld or a subset of elds by
supplyinga list of eld names. The retrieveMetadata operation retrieves the values of both
queryableand non-queryable elds.
The5800 System Query Model
Oneof the primary methods for retrieving data is to specify the characteristics of the desired
dataand then let the system nd it for you. In the 5800 system, a query expression species a set
ofconditions on metadata eld values. The system then returns a list of all the objects whose
metadatavalues match the query conditions. Each object is considered individually without
referenceto any other objects. There are no queries that compare elds in one object with elds
ina dierent object.
5800SystemOver view
SunStorageTek5800 System Client API Reference Manual • June 200820