1. A method comprising:
identifying, using a processor, an executable content file used by an application;
storing the executable content file in a composite file, the composite file including a plurality of files used by the application;
creating, using the processor, a virtual file system in the composite file, the virtual file system including the identified executable content file;
generating, using the processor, component data that includes location information identifying a location of the executable content file in the virtual file system;
creating, using the processor, at least one entry point in the composite file, the creating comprising:
generating code for a wrapper function based on an executable type of the application, wherein:
the generating produces an interface between the executable content file and the executable type of the application, and
the wrapper function redirects an execution of the composite file to the executable content file using the location information of the component data; and
storing, using the processor, the code for the wrapper function in the composite file, wherein:
the code for the wrapper function is called when the composite file is executed, and
the code for the wrapper function redirecting the execution from the composite file to the location of the executable content file in the virtual file system.
2. The method of claim 1, further comprising:
compressing the executable content file.
3. The method of claim 1, further comprising:
compressing the composite file.
4. The method of claim 1, further comprising:
creating a virtual file in the virtual file system that includes at least one of the group comprising:
a version of the composite file,
an encrypted hash of the composite file,
information of a user license under which the composite file was compiled, and
a date of compilation of the composite file.
5. The method of claim 1, further comprising encrypting the executable content file using an encryption key.
6. The method of claim 5, further comprising encrypting the encryption key.
7. The method of claim 1, wherein storing the executable content file in the virtual file system includes storing executable content in an executable virtual file that is stored at a storage location, and wherein the method further comprises:
creating a virtual file that includes the storage location of the executable virtual file.
8. A non-transitory computer-readable medium storing instructions, the instructions comprising:
instructions that, when executed by a processor, cause the processor to:
identify an executable content file used by an application;
store the executable content file in a composite file, the composite file including a plurality of files used by the application;
create a virtual file system in the composite file, the virtual file system including the identified executable content file;
generate component data that includes location information identifying a location of the executable content file in the virtual file system;
create at least one entry point in the composite file, the creating comprising:
generating code for a wrapper function based on an executable type of the application, wherein:
the wrapper function redirects an execution of the composite file to the executable content file using the location information of the component data; and
store the code for the wrapper function in the composite file, wherein the code for the wrapper function is called when the composite file is executed, the code for the wrapper function redirecting the execution from the composite file to the location of the executable content file in the virtual file system.
9. A non-transitory computer-readable medium storing a composite file, the composite file comprising:
content used by an application, the application having an executable type and the content comprising at least one executable content file used by the application; and
instructions including a representation of at least one entry point redirecting execution to the executable content file, the at least one entry point associated with:
one or more wrapper functions that are generated, at least in part, based on the executable type of the application and include an interface between the executable content file and the executable type of the application, and
component data that includes location information for the executable content file used by the application.
10. The medium according to claim 9, wherein the virtual file system further stores at least one of the group comprising:
content that is executable on a single platform,
content that is executable on a plurality of platforms, and
content that is not executable.
11. The medium according to claim 9, wherein the composite file further includes information describing at least one of the group comprising:
a version of the composite file,
an encrypted hash of the composite file,
information related to a user license under which the composite file was compiled, and
a date of compilation of the composite file.
12. The medium according to claim 9, wherein the executable content file is encrypted.
13. The medium according to claim 12, wherein the composite file further comprises an encrypted encryption key.
14. The medium according to claim 9, wherein the executable content file is compressed.
15. The medium according to claim 14, wherein the composite file is compressed.
16. An apparatus comprising:
a non-transitory storage medium for storing a composite file; and
a processor programmed with instructions that, when executed, cause the processor to:
identify an executable content file used by an application;
store the executable content file in the composite file, the composite file containing a plurality of files used by the application;
create a virtual file system in the composite file, the virtual file system including:
the identified executable content file;
generate component data that includes location information identifying a location of the executable content file in the virtual file system;
create at least one entry point in the composite file, the creating comprising:
generating code for a wrapper function based on an executable type of the application, wherein:
the generating produces an interface between the executable content file and the executable type of the application, and
the wrapper function redirects an execution of the composite file to the executable content file using the location information of the component data; and
store the code for the wrapper function in the composite file, wherein the code for the wrapper function is called upon the execution of the composite file to redirect the execution from the composite file to the location of the executable content file in the virtual file system.
17. The apparatus of claim 16 wherein the instructions are executable on a single platform and the virtual file system includes a virtual file executable on a plurality of platforms.
18. A method comprising-:
receiving, using a processor, an instruction to run an application that uses an executable content file, wherein:
the application has an executable type,
the executable content file is stored in a composite file at a location, and
the composite file comprises a plurality of files used by the application and a virtual file system for organizing the plurality of files used by the application;
inspecting, using the processor, a header in the composite file, the header comprising one or more entry points that redirect an execution of the composite file to the location of the executable content file, wherein the one or more functional entry points comprise:
at least one wrapper function generated based on the executable type of the application; and
executing, using the processor, the executable content file by redirecting the execution based on the one or more functional entry points of the header.
The claims below are in addition to those above.
All refrences to claim(s) which appear below refer to the numbering after this setence.
1. A method for use in a distributed storage system, the method comprising:
maintaining a plurality of versions of a data item including a latest version and an older version;
entering a degraded state on the distributed storage system; and
if the latest version of the data item is unavailable in the degraded state, then using the older version of the data item during processing in the degraded state.
2. The method of claim 1, wherein entering the degraded state occurs when a number of failures exceeds a threshold.
3. The method of claim 2, further comprising using a fault tolerance mechanism associated with the distributed system to determine when the number of failures exceeds the threshold.
4. The method of claim 1, further comprising storing the versions of the data item prior to entering the degraded state.
5. The method of claim 1, further comprising providing an indication that the processing of the data item in the degraded state is based on the older version of the data item.
6. The method of claim 1, further comprising leaving the degraded state and returning to a normal operating state after the distributed storage system recovers.
7. The method of claim 1, wherein the plurality of versions of the data item include a plurality of older versions of the data item, each older version being associated with a different time based on storage of that older version of the data item.
8. The method of claim 7, wherein if the latest version of the data item is unavailable in the degraded state, then using the latest available older version of the data item during processing in the degraded state.
9. The method of claim 7, wherein the degraded state has a degree of degradation based on the version of the data item that is used during processing in the degraded state.
10. The method of claim 1, wherein a plurality of consistent degraded views of the distributed storage system is maintained during processing in the degraded state.
11. The method of claim 10, wherein the consistent degraded views are maintained using at least one of a timestamp-based design, a dependency-based design, or a weak-dependency-based design.
12. The method of claim 1, further comprising receiving additional versions of the data item while in the degraded state, branching the additional versions while in the degraded state using a plurality of branches, and merging the branches while in a normal operating state after the distributed storage system recovers.
13. The method of claim 1, wherein maintaining the plurality of versions of the data item comprises storing a timestamp for each version of the data item as metadata.
14. A distributed storage system comprising:
a versioned data store comprising a plurality of data storage devices across which a plurality of versions of a data item are stored, including a latest version and older versions; and
a processor that determines whether to enter a degraded state, and during processing in the degraded state, determines whether to use the latest version of the data item or one of the older versions of the data item.
15. The system of claim 14, further comprising a fault tolerance mechanism, wherein the degraded state is entered when a number of failures in the system exceeds the capability of the fault tolerance mechanism.
16. The system of claim 14, further comprising an index server that maintains an index that tracks the versions of the data item.
17. The system of claim 14, further comprising an output device for providing an indication to a user or a client that the processing of the data item in the degraded state is based on one of the older versions of the data item.
18. A method for use in a distributed storage system, the method comprising:
receiving an update to a version of a data item that is stored on a storage server;
creating a new version of the data item; and
storing the new version of the data item with metadata on a different storage server, the metadata for use to maintain consistent degraded views of the distributed storage system during processing in the degraded state.
19. The method of claim 18, wherein the metadata corresponds to at least one of a timestamp-based design, a dependency-based design, or a weak-dependency-based design.
20. The method of claim 18, further comprising determining whether the version of the data item that is stored on the storage server and the new version are coherent.