Application programs frequently generate content in a format that is understandable to the application program. For example, word processing application programs generate content units (e.g., documents) that have a specific data format, such that the word processing application program may read the content unit and properly display the document to a user. Thus, for example, Microsoft Word™ may store content units in one data format, while Corel WordPerfect may store content units in another data format. Sometimes, a user may wish to read, using an application program, content units stored on a storage system that were created by a different application program or an earlier version of the application program that stored the content unit in a different format. The user's application program may not be capable of reading these content units when they are stored in a format that is foreign to the application program.
In addition, it may be desirable for any of numerous reasons that a content unit stored on a storage system be returned to a host computer requesting the content unit in a data format different from that in which it was stored (e.g., a format desired by the requesting host computer). Examples of reasons for performing such a conversion before the data is returned to the host may include reducing the amount of content that is transferred from the storage box to the host computer and/or to conserve processing resources on the host computer (i.e., so that the host computer need not perform the data conversion). For example, a content unit may include an image stored in TIFF format, which is a lossless format (i.e., there is no image quality loss due to compression). A host computer accessing the content unit may desire that the content unit be returned in JPEG format, a lossy data format, so that the amount of content transferred from the storage system is reduced and/or so that the host computer need not convert the TIFF image to a JPEG image using its own processing resources. As another example, the “host computer” requesting the content unit may be a cellular phone with limited resources to process and display the content of the content unit. Thus, the storage system may return the content unit in a “stripped down” format so that the content unit is more easily processed by the cellular phone.
Some embodiments of the invention address the issues discussed above. However, it should be appreciated that not every embodiment of the invention addresses all of the above-discussed issues and some embodiments are not specifically directed to addressing any of them.
In one embodiment, a storage system may be populated with content units that are stored in a particular data format (e.g., by a legacy version of an application program). A user may desire to read these content units using an application program (e.g., a more recent version of the legacy application program) that is incapable of processing the content units in the data format in which they are stored. Thus, the content units may be converted to a data format in which the user's application program is capable of reading them. Such conversion may take place on any suitable computer in the computer system, such as, for example, the storage system on which the content units are stored, on a utility computer in the computer system, or one the host computer on which the application program executes.
In one embodiment, a utility that executes on the storage system or a utility computer may convert content units stored in a particular data format to a different data format. The utility may be installed by a system administrator and may be configured to locate content units in a first data format, convert the content units to a second data format, and store the content units in the second data format.
In another embodiment, a utility may convert content units stored on the storage system in a first data format to a second data format “on the fly,” i.e., in response to a read request for a content unit stored in the second data format. Thus, for example, an application program executing on a host computer may send an access request for a content unit stored on the storage system in a data format that is foreign to the application program. In response to the host computer issuing the access request, the utility may convert the content unit to a data format in which the application program is capable of reading the content unit and the converted content unit may be returned in response to the request.
The decision of which version of a content unit to return in response to a read request for the content unit (i.e., in embodiments in which there are multiple versions of a content unit stored on the storage system in different data formats) and/or the decision of whether to convert a content unit to a different data format in response to a read request for the content unit (i.e., in embodiments in which content units are converted on the fly) may be made in any suitable way. In one embodiment, the information may be provided in an access request for a content unit that enables a utility to select a format in which to provide the content unit in response to the request. The content unit may be returned from the storage system in the selected format.
In one embodiment, mapping information may be created that maps the information provided in the access request to a particular data format. This mapping information may be used to select a data format in which to return a stored content unit when an access request for the content unit is received. The metadata may be stored on any suitable computer in the computer system, such as, for example, the storage system on which the requested content unit is stored, a utility computer, and/or the host computer on which the application program that originated the request executes.
The conversion of a content unit from one format to another format may be performed in any suitable way, and at any suitable time, as the invention is not limited in these respects.
In one embodiment, a content unit may be converted from the format in which it is stored to a different format in response to a request to access the stored content unit. For example, in
Host computer 103 may send a request to access a content unit stored on storage system 101. In response, storage system 101 may access the content unit from one or more of storage devices 105, use content unit converter 107 to convert the content unit to a data format different from the format in which it is stored, and return the converted content unit to host computer 103.
In the example above, the storage system itself converts a requested content unit to a data format different from its stored format prior to returning the content unit in response to the request. However, the invention is not limited in this respect, as the conversion of the content unit may be performed by a computer outside the storage system. This may be done in any suitable way, as the invention is not limited in this respect. For example, as shown in
In the example of
The storage system may return the content unit, in the format in which it is stored (or any other format), to utility computer 201. Utility computer 201 may receive the requested content unit from the storage system, convert the content unit to a different data format (e.g., using content unit converter 105), and may return the converted content unit to host computer 103.
In the example of
Utility computer 201 may be any suitable type of computer, as the invention is not limited in this respect. For example, utility computer 201 may be a server, a personal computer, an appliance, a network switch, or any other suitable type of computer. In one embodiment, utility computer 201 may be a computer that implements a CAS layer. Computers that implement a CAS layer are described in greater detail in application Ser. Nos. 10/836,415, 10/837,311, and 10/836,502, listed below in Table 1, each of which is incorporated herein by reference in its entirety.
When it is determined that a requested content unit is to be converted to a different data format, the conversion may be performed in any suitable way, as the invention is not limited in this respect. For example, in one embodiment, metadata 109 that specifies rules for converting a content unit from one data format to a different data format may be used. These metadata rules may be stored on any suitable computer in the computer system, such as for example a storage system, a utility computer, and/or a host computer, as indicated by the dashed lines in
An example of a format conversion is shown in
The metadata that provides rules for converting a content unit from a first data format to a second data format may be stored in any suitable format, as the invention is not limited in this respect. In one embodiment, the metadata may be stored as an extensible stylesheet language (XSL) stylesheet, although other formats are possible.
Content unit converter 105 may be implemented in any suitable way, as the invention is not limited in this respect. For example, content unit converter 105 may be a hardware or software utility. In one embodiment, the utility may be implemented as a layered software driver on the storage system, utility computer, and/or host computer, although other implementations are possible.
When a content unit is converted from a first data format to a second data format, the content unit in the second data format may be returned to the requesting entity (e.g., an application program executing on host computer 103). In one embodiment, the content unit having the second data format may, in addition, be saved on storage system 101, so that storage system 101 stores the content unit in both the first data format and the second data format. In another embodiment, the content unit having the second data format may not be saved to the storage system, so that only the content unit having the first data format is stored on the storage system. In yet another embodiment, the content unit having the second data format may be stored on the storage system and the content unit having the first data format may be deleted from the storage system, so that only the content unit having the second data format is stored on the storage system.
When a request to access a content unit is received, the determination whether to convert a content unit to a different format and to what format to convert a content unit may be made in any suitable way, as the invention is not limited in this respect.
For example, in one embodiment, when an application program (e.g., executing on a host computer or other computer) logs in to the storage system, the application program may specify a profile. Metadata that indicates the format in which a content unit is to be returned may be associated with the profile. For example, the metadata may indicate that, for a particular profile, content units having a certain data format are to be converted to another data format.
Thus, an application program that is logged into the storage system under a certain profile may send an access request to the storage system that includes information identifying the application program that originated the request. The storage system may determine (e.g., based on the information in the access request provided by the host computer), the identity of the application program that originated the request, determine the profile under which the application is logged in, locate the metadata associated with that profile, and determine, based on the metadata associated with the profile, the format in which to return the requested content unit.
In another embodiment, information provided in the access request for the content unit may be used to determine whether to convert a content unit and to what format to convert the content unit in response to a read request for the content unit. The information may directly specify the format in which the content unit is to be returned. Alternatively, Metadata may be stored that maps the information in the access request to a particular data format. The metadata may be stored on any suitable computer in the computer system, as the invention is not limited in this respect. For example, this metadata may be stored on storage system 101, utility computer 201, and/or host computer 103.
The metadata may map any suitable information in the access request to a data format in which the content unit is to be returned in response to the access request, as the invention is not limited in this respect. For example, in one embodiment, the access request may include format-related metadata keywords. The metadata may map these format-related keywords to particular data formats of the content unit. For example, the access request may specify “word processing version 5.” The metadata may map these keywords to the data format of version 5 of a particular word processing application program. Thus, in response to the request, the content unit may be returned to the host computer in the version 5 data format in response to the request.
The process then continues to act 603, where the host computer sends an access request for a content unit to the storage system. The access request may include any suitable information, such as, for example, the identity of an application program and/or the host that originated the request, and/or format-related metadata keywords.
The process next continues to act 605, where the storage system receives the request. After the storage system receives the request, the process continues to act 607 where the utility determines whether to convert the content unit to a different format. As discussed above, this determination may be made in any suitable way, as the invention is not limited in this respect. For example, the utility may use information in the metadata map and/or information in the access request to make the determination. If the utility determines that the content unit should be converted, the process continues to act 609 where the utility converts the content unit to the different data format and the converted content unit is returned in response to the request.
When, at act 607, the utility determines that the content unit is not to be converted to a different format, the process continues to act 611 where the original content unit is returned in the format in which it is stored in response to the request.
In another embodiment of the invention, rather than convert a content unit stored on the storage system to a different format when a read request for the content unit is received, a content unit may be converted from a first data format to a second data in place. That is, for example, a content unit having a first data format may be stored on the storage system. The content unit may be converted to the second data format and the content unit having the second data format may be stored on the storage system, either in addition to or as a replacement for the content unit stored in original format. Thus, when a request for the content unit in the second data format is received, the storage system may provide the version of the content unit in the second data format and need not convert the content unit on the fly. This may be done in any suitable way, as the invention is not limited in this respect.
In one embodiment, a utility that converts content units from a first data format to a second data format may iterate over the content units stored on a storage system, locate content units in the first data format, and convert the content units to a second data format. The content unit in the second data format may be in stored in addition to or instead of the content unit in the first data format. The utility may be located on any suitable computer and may be implemented in any suitable way, as the invention is not limited in this respect. In one embodiment, the utility is located on a computer (e.g., the storage system or utility computer) other than the host computer that executes the application program that stored the content units on the storage system.
In one embodiment, the utility may be a software utility that is installed by a system administrator on storage system 101. In another embodiment, the utility may be software utility that is installed by an administrator on utility computer 201. The software utility may request content units from storage system 101, determine if the content units are stored in the first data format, convert content units in the first data format to the second data format, and store the content units converted to the second data format on storage system 101.
In one embodiment, when the version of a content unit having the second data format is stored on the storage system, the original version of the content unit (i.e., the version having the first data format) may be deleted.
In another embodiment, the original version of the content unit may be kept, so that the storage system stores both versions of the content unit.
In one embodiment, storage system 101 may store at least two types of content units: blobs and content descriptor files (CDFs). Content units that store metadata are referred to herein as CDFs, and may include a reference to one or more separate content units that store the data to which the metadata pertains. Content units that store original (or independent) data are referred to herein as blobs. CDFs may reference and store metadata for any suitable number of blobs, as the embodiments of the invention that employ blobs and CDFS are not limited in this respect. To access a blob, a host computer may access a CDF that references the blob, determine an address (e.g., an object identifier or content address) for the blob from the reference to the blob included in the CDF, and use the address to access the blob. As shown in
Thus, when a host computer attempts to access blob 403 via CDF 401, it may determine that a newer version of CDF 401 exists (i.e., CDF 407). The host computer may then request access to CDF 407 and determine, based on the information in CDF 407, that two versions of the desired blob exist (i.e., blob 403 and blob 405). The host computer may then request access to the version of the blob that is desired.
The host computer may perform these operations in any suitable way. In one embodiment, these operations may be performed by an application programming interface (API) on the host computer, such that selection of a version of the content unit is transparent to the application program. For example as shown in
Thus, for example, application program 501 may call a routine of API 503 that causes API 503 to send an access request to the storage system for CDF 401. In one embodiment, API 503 may send the request for CDF 401 to the storage system and receive the CDF in response. API 503 may recognize, based on the reference to CDF 407 included in CDF 401, that a newer version of CDF 401 exists (i.e., CDF 407). API 503 may then request access to CDF 407 and determine, based on the information in CDF 407, that two versions of the desired blob exist (i.e., blob 403 and blob 405). API 503 may determine whether to return blob 403 or blob 405 to application program 501, send an access request to storage system 101 for the desired blob, and return this blob to application program 501.
It should be appreciated that blob/CDF arrangement is but one example of a way that content units may be stored and the invention is not limited to this or any other arrangement.
In embodiments in which there are multiple versions of a content unit stored on the storage system, the determination of which version of the content unit to provide in response to a read request for the content unit may be made in any suitable way, as the invention is not limited in this respect.
In one embodiment, information provided in the access request for the content unit may be used to determine which version to provide. Metadata may be stored that maps the information in the access request to a particular version of the content unit. The metadata may be stored on any suitable computer in the computer system, as the invention is not limited in this respect. For example, this metadata may be stored on the storage system, utility computer 201, and/or host computer 103, as discussed above.
The metadata may map any suitable information in the access request to a data format of the content unit, as the invention is not limited in this respect. For example, in one embodiment, the access request may identify the host computer and/or application program that sent the request. The metadata may map the identity of the host computer and/or application program to a particular data format and the version of the content unit in that data format may be returned.
In another embodiment, the access request may include timestamp information. The metadata may map the timestamp information to a particular version of the content unit. For example, the metadata may map a time range to each version of the content unit, where the beginning of the time range for a particular content unit corresponds to the date of creation of the content unit and the end of the time range corresponds to the date of creation of the subsequent version of the content unit. Thus, the version of the content unit to be returned may be selected based on in which time range in the metadata map the timestamp falls.
In another embodiment, the access request may include format-related metadata keywords which indicate a particular data format of the requested content unit, as discussed above. The metadata may map these keywords to particular data formats of the content unit. For example, the access request may specify “word processing version 5.” The metadata may map these keywords to the version of the content unit that has the data format of version 5 of a particular word processing application program.
The determination as to which version of a content unit should be provided to the application program may be made on any suitable computer in the computer system, such as for example, storage system 101, utility computer 201, and/or host computer 103.
Storage system 101 may any suitable type of storage system, as the invention is not limited in this respect. For example, in one embodiment, the storage system may be a block I/O storage system. In another embodiment, storage system 101 may be an OAS system.
In some embodiments in which storage system 101 is an OAS system, storage system 101 may be a CAS system in which the object identifier for a content unit is a content address that is computed, at least in part, from at least a portion of the content of the content unit. In embodiments in which storage system 101 is a CAS system, when a host computer receives, from the CAS system, a content unit requested using its content address, the host computer may verify that the content unit has not been modified or corrupted by recomputing the content address from the content of the received content unit and determining whether the recomputed content address matches the content address used to request the content unit from the storage system.
Applicants have appreciated that when the host computer receives a content unit that has been converted to a different format, the host computer may not be able to verify that the content unit has not been corrupted or modified using the content address because the content address was computed from the content of the original version of the content unit. However, when the storage system creates the new version of the content unit, the storage system may generate a new content address for the new version of the content unit. Thus, when the storage system provides the new version of the content unit to a host computer in response to an access request, the storage system may verify that the content unit has not been modified or corrupted using the content address computer for that version of the content unit.
The above-described embodiments of the present invention can be implemented on any suitable computer or storage system. Examples of suitable computers and/or storage systems are described in the patent applications listed below in Table 1 (collectively “the OAS applications”), each of which is incorporated herein by reference. It should be appreciated that the computers and storage systems described in these applications are only examples of computers and storage systems on which the embodiments of the present invention may be implemented, as the invention is not limited to implementation on any of these object addressable storage systems, or to object addressable storage systems at all.
The above-described embodiments of the present invention can be implemented in any of numerous ways. For example, the embodiments may be implemented using hardware, software or a combination thereof. When implemented in software, the software code can be executed on any suitable processor or collection of processors, whether provided in a single computer or distributed among multiple computers. It should be appreciated that any component or collection of components that perform the functions described above can be generically considered as one or more controllers that control the above-discussed functions. The one or more controllers can be implemented in numerous ways, such as with dedicated hardware, or with general purpose hardware (e.g., one or more processors) that is programmed using microcode or software to perform the functions recited above.
In this respect, it should be appreciated that one implementation of the embodiments of the present invention comprises at least one computer-readable medium (e.g., a computer memory, a floppy disk, a compact disk, a tape, etc.) encoded with a computer program (i.e., a plurality of instructions), which, when executed on a processor, performs the above-discussed functions of the embodiments of the present invention.
The computer-readable medium can be transportable such that the program stored thereon can be loaded onto any computer environment resource to implement the aspects of the present invention discussed herein. In addition, it should be appreciated that the reference to a computer program which, when executed, performs the above-discussed functions, is not limited to an application program running on a host computer. Rather, the term computer program is used herein in a generic sense to reference any type of computer code (e.g., software or microcode) that can be employed to program a processor to implement the above-discussed aspects of the present invention.
It should be appreciated that in accordance with several embodiments of the present invention wherein processes are implemented in a computer readable medium, the computer implemented processes may, during the course of their execution, receive input manually (e.g., from a user).
The phraseology and terminology used herein is for the purpose of description and should not be regarded as limiting. The use of “including,” “comprising,” “having,” “containing”, “involving”, and variations thereof, is meant to encompass the items listed thereafter and additional items.
Having described several embodiments of the invention in detail, various modifications and improvements will readily occur to those skilled in the art. Such modifications and improvements are intended to be within the spirit and scope of the invention. Accordingly, the foregoing description is by way of example only, and is not intended as limiting. The invention is limited only as defined by the following claims and the equivalents thereto.