text:
US8065672B2 - Simplifying rollback to prior versions of patches used to fix errors in pre-installed software - Google Patents
Simplifying rollback to prior versions of patches used to fix errors in pre-installed software Download PDF
Vijay Nichinbatl Sriram
PhiDien Nguyen
Shamik Ganguly
Oracle International Corp
2007-01-23 Application filed by Oracle International Corp filed Critical Oracle International Corp
2007-01-24 Assigned to ORACLE INTERNATIONAL CORPORATION reassignment ORACLE INTERNATIONAL CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: GANGULY, SHAMIK, MR., SRIRAM, VIJAY NICHINBATL, MR., NGUYEN, PHIDIEN, MR.
2011-02-16 Assigned to ORACLE INTERNATIONAL CORPORATION reassignment ORACLE INTERNATIONAL CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: NGUYEN, PHIDIEN
230000002688 persistence Effects 0 claims description 14
238000005096 rolling process Methods 0 abstract description 3
229920003258 poly(methylsilmethylene) Polymers 0 description 2
230000006399 behavior Effects 0 description 1
G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
G06F11/0793—Remedial or corrective actions
G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
G06F11/0736—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in functional embedded systems, i.e. in a data processing system designed as a combination of hardware and software dedicated to performing a certain function
G06F8/00—Arrangements for software engineering
G06F8/60—Software deployment
G06F8/65—Updates
G06F8/658—Incremental updates; Differential updates
G06F11/14—Error detection or correction of the data by redundancy in operation
G06F11/1402—Saving, restoring, recovering or retrying
G06F11/1415—Saving, restoring, recovering or retrying at system level
G06F11/1433—Saving, restoring, recovering or retrying at system level during software upgrading
A patch tool receives multiple patches, with each patch designed to fix a corresponding subset of a set of errors in a system. Some of the patches may require that the files from older patches be removed from the system. In an embodiment of the present invention, a developer of a patch is provided the flexibility to specify that a desired file from an older patch fixing a specific error, not be removed during deployment of a new patch designed to fix the same specific error. Rolling back later to the older version of the patch may be simplified by not removing the desired file.
RELATED APPLICATION
The present application is related to US Patent Application entitled, "Deploying Patches in Batch Mode to Fix Errors in Pre-installed Software", Ser. No. 11/626,351, now U.S. Pat. No. 7,975,264, Filed on even date herewith, naming the same inventors as in the subject patent application.
The present application is also related to the co-pending US Patent Application entitled, "Enhanced Flexibility in Deployment of Patches to Fix Errors in Pre-installed Software", Ser. No. 11/626,365, Filed on even date herewith, naming the same inventors as in the subject patent application.
The present disclosure relates to software maintenance, and more specifically to a method and apparatus for simplifying rollback to prior versions of patches used to fix errors in pre-installed software.
Pre-installed software represents software code/instructions that have been installed in a system. It is often observed that during the execution of software pre-installed in a system, various errors may be discovered. An error generally represents a deviation from a desired behavior of the system.
A patch generally represents a portion of a software that is used for fixing various errors. A patch may also be used to replace data/instructions in the pre-installed software to improve the performance of the pre-installed software, and such improvements are also treated as errors in the description herein.
Various aspects of the present invention assist in fixing of errors in pre-installed software using patches, as described below in further detail.
Example embodiments of the present invention will be described with reference to the accompanying drawings briefly described below.
FIG. 1 is a block diagram illustrating an example environment in which several aspects of the present invention can be implemented.
FIG. 2A is a block diagram illustrating the relationship of patches to various files in a runtime system in an embodiment.
FIG. 2B depicts the content of the metadata of a patch that needs to be deployed in a runtime system in an embodiment.
FIG. 2C depicts the content of sample patch info indicating the patches deployed in a runtime system in an embodiment.
FIG. 2D depicts the content of the metadata of a patch having a conflict with a existing patch deployed in a runtime system in an embodiment.
FIG. 2E depicts the content of the metadata of a patch, which is a subset of an existing patch deployed in a runtime system in an embodiment.
FIG. 3 is a flowchart illustrating the manner in which multiple patches are deployed in a runtime system according to an aspect of the present invention.
FIG. 4 is a block diagram illustrating deployment of multiple patches in an embodiment.
FIGS. 5A and 5B (henceforth conveniently referred to as FIG. 5) together represent a flowchart illustrating the manner in which a subset of patches to be deployed in a runtime system is determined in an embodiment.
FIG. 6 is a flowchart illustrating the manner in which files deployed from older patches are persisted even after deployment of new patches fixing the same errors (as the old patch) and also the manner in which such persistence simplifies rolling back to patches of prior versions in an embodiment of the present invention.
FIG. 7A is a block diagram illustrating persistence of pre-deployed files in a runtime system during the deployment of a new patch in an embodiment.
FIG. 7B depicts the content of a metadata of patch indicating the set of patches that are to be persisted during the deployment of the patch in a runtime system in an embodiment.
FIG. 8 is a flowchart illustrating the manner in which a designer of patches may cause custom actions to be performed during deployment of a patch in a runtime system according to an aspect of the present invention.
FIG. 9A is a block diagram illustrating a patch containing custom actions that are to be performed during the deployment of the patch in an embodiment.
FIG. 9B depicts the content of the metadata of a patch that contains custom actions that are to be performed during the deployment of the patch in a runtime system in an embodiment.
FIG. 9C depicts the content of a file containing software instructions (coded in Java™ programming language) specifying a program logic to be executed for performing a custom action in an embodiment.
FIG. 10 is a block diagram illustrating the details of digital processing system in which various aspects of the present invention are operative by execution of appropriate software instructions
In the drawings, like reference numbers generally indicate identical, functionally similar, and/or structurally similar elements. The drawing in which an element first appears is indicated by the leftmost digit(s) in the corresponding reference number.
DESCRIPTION OF THE EXAMPLE EMBODIMENTS I. Overview
A patch tool provided according to an aspect of the present invention receives multiple patches, with each patch designed to fix a corresponding subset of a set of errors in a system. The patch tool determines a subset of patches, which together fix all of the set of errors, and deploys only the subset of patches in the system. As a result, the aggregate time during which the system is unavailable may be reduced.
Another aspect of the present invention enables determination of the subset. In an embodiment, a patch tool considers the existing patches deployed in the system along with the received new patches (that have been received for deployment) to determine the subset of patches. The patch tool may remove some of the existing patches as a result of the selected patches in the subset.
The patch tool may also determine a conflict set indicating the patches that have conflicts (i.e., having overlap of changes as well as each having at least one unique change not in the other patch). The patches in the conflicts set may be sent to a developer for generating a merge patch, which effects all the changes of the patches in the conflicts set. The merge patch may then be received and deployed in the system.
Some of the patches may require that the files from older patches be removed from the system. Another aspect of the present invention provides a developer of a patch the flexibility to specify that a desired file from an older patch fixing a specific error, not be removed during deployment of a new patch designed to the fix the same specific error.
One more aspect of the present invention enables a developer to include a set of instructions (in a patch), which together cause a custom action to be performed, when executed during the deployment of the patch.
Several aspects of the invention are described below with reference to examples for illustration. It should be understood that numerous specific details, relationships, and methods are set forth to provide a full understanding of the invention. One skilled in the relevant art, however, will readily recognize that the invention can be practiced without one or more of the specific details, or with other methods, etc. In other instances, well-known structures or operations are not shown in detail to avoid obscuring the features of the invention.
II. Example Environment
II.A. Block Diagram
FIG. 1 is a block diagram illustrating an example environment in which several aspects of the present invention can be implemented. The block diagram is shown containing client systems 110A-110C, network 120, runtime system 130, developer system 140 and patch tool 150. Merely for illustration, only representative number/type of systems are shown in the Figure. Many environments often contain more/less systems, both in number and type. Each system of FIG. 1 is described below in further detail.
Network 120 provides necessary communication between various client systems 110A-110C and runtime system 130. Network 120 may be implemented using protocols such as TCP/IP well known in the relevant arts.
Each of client systems 110A-110C represents a system such as a personal computer, workstation, mobile station, etc., and is used by a user to generate requests to runtime system 130. The requests may be generated according to a suitable interface. In general, a client system requests the runtime system for performing operations and receives corresponding responses containing the results of performance of the requested operations.
Runtime system 130 represents a system, such as a server, which contains pre-installed software capable of performing operations requested by client systems 110A-110C. The results of the operations are sent as corresponding responses to the requesting client systems.
It may be appreciated that during the performance of operations by the software pre-installed in the runtime system, various errors may be discovered. These errors may include logical errors (due to wrong logic), functional errors (due to the software not performing/functioning as expected) or runtime errors (due to problems with the environment in which the software is executed). Such errors (as well as any others detected) require changes to be made to the software instructions constituting the pre-installed software.
Developer system 140 enables users to generate patches to fix various errors in the pre-installed software in runtime system 130. The patches typically contain data elements, which replace corresponding data elements in the pre-installed software in runtime system 130. The data elements may represent software instructions or database schema type definitions, which fix different errors of the pre-installed software.
Patch tool 150 represents a system, which deploys the patches received from developer system 140 in runtime system 130. In general, patch tool 150 is implemented consistent with the format and conventions used in forming patches by developer system 140. Though patch tool 150 is shown external to runtime system 130, patch tool 150 may be integrated with runtime system 130 (or with developer system 140) as will be apparent to one skilled in the relevant arts by reading the disclosure provided herein.
Various features of the present invention facilitate deployment of patches for pre-installed software. Merely for illustration, the features are described with respect to an example approach to deploying patches, which is described in detail below.
II. B. Deploying a Patch
FIGS. 2A, 2B and 2C together illustrate the manner in which a patch is deployed in an embodiment. Each of the figures is described in detail below.
In particular, FIG. 2A is a block diagram illustrating the relationship of patches to various files in a runtime system in an embodiment. The block diagram is shown with runtime system 130, patch tool 150, patch 200 and patch info (information) 210. Runtime system 130 is shown containing unit file 212 and archive file 214 (having unit files 216 and 218), described in further detail below.
As is well known in the relevant arts, a file represents a collection of data typically stored on a non-volatile memory identifiable by a name (file name). A file representing a single file is termed as a unit file to differentiate from an archive file, which contains one or more of such files (having corresponding file names) according to some convention/representation. Typically, the data representing an archive file needs to be processed (e.g., decompressed) to generate the corresponding unit files.
Unit file 212 and archive file 214 represent different types of files that may be present in runtime system 130. In an embodiment, archive file 214 represents a JAR (Java™ Archive file), and each of unit files 216 and 218 represents a class file containing software instructions coded according to Java™ programming language.
Thus, each of unit files 212, 216, 218 may contain software instructions (data elements consistent with a language suitable for execution) that are executed in runtime system 130 to provide the various operations requested by client systems 110A-110C. During execution, errors may be discovered in the software instructions thereby requiring the corresponding files to be replaced and/or software instructions to be changed.
In the embodiment described below, the files that contain software instructions causing the errors (such as unit files 212, 216 and 218) are replaced with corresponding files (such as unit files 206 and 208) contained in patch 200. It may be appreciated that in alternative embodiments, individual or groups of software instructions contained in specific files are replaced with corresponding software instructions contained in a patch.
Patch 200 is shown containing metadata 202 and payload 204 (having unit files 206 and 208). Merely for illustration, only representative number/type of files is shown in FIG. 2A. Many environments often contain many more (potentially less, as well) patches and/or files, both in number and type. Each of the blocks is described in detail below.
Patch info 210 contains data indicating the patches deployed in runtime system 130 and may be used to rollback the patches (that is remove the patches) from runtime system 130. The detail of a portion of patch info 210 in an embodiment is described in sections below.
Patch 200 contains various data elements and instructions for fixing errors in runtime system 130. In an embodiment, patch 200 is received from developer system 140 and contains files to be deployed and data indicating the actions to be performed with the files during deployment. Payload 204 represents files (such as unit files 206 and 208) that need to be deployed. The files in payload 204 are used to replace corresponding files in runtime system 130 according to the action specified in metadata 202.
Metadata 202 indicates the actions to be performed with the files in payload 204 during deployment. In an embodiment, the actions specify replacement of files in runtime system 130 with corresponding files in payload 204. Metadata 202 also indicates the errors fixed by the deployment of patch 200. The errors are used to identify the set of changes effected by a patch. As such the errors (or the corresponding identifiers) may be used by patch tool 150 to rollback the patch from runtime system 130. Though shown along with payload 204, it should be appreciated that metadata 202 can be received from separately (for example, in separate packets, but with some convention, such as with the same patch identifier, to correlate to the payload). The description is continued with respect to the details of a sample metadata of a patch in an embodiment.
II.C. Metadata in a Patch
FIG. 2B depicts the content of the metadata of a patch (200) that needs to be deployed in a runtime system (130) in an embodiment. Though the content is shown encoded in extensible markup language (XML), other encoding/formats may be used for representing the metadata. Lines 231-237 (between tags "<oneoff_actions>" and "</oneoff_actions>") depict the actions to be performed with the files specified in payload 204. Lines 232-236 (between tags "<acme.rdbms>" and "</acme.rdbms>") specify that the patching is being performed for the pre-installed software "acme.rdbms" with version "1.1" in runtime system 130.
In line 233, the action is specified as "copy" indicating that the file (with file name "lib/libocr10.so") in payload 204 is to be copied to runtime system 130 in the directory "% HOME %/lib" to replace the file "libocr10.so". In line 234, the action is specified as "jar" indicating that the class file "rdbms/jlib/aqxml.jar/oracle/AQ/xml/AQxmlError.class" contained in the archive file ("aqxml.jar" located in the directory "% HOME %/rdbms/jlib") in runtime system 130 is to be replaced with a corresponding class file (having the same name "AQxmlError.class") contained in payload 204. Similarly, in line 235, the action is specified as "archive" indicating that the object file "lib/libserver10.a/vsnf.o" contained in the archive file ("libserver10.a" located in the directory "% HOME %/lib") in runtime system 130 is to be replaced with a corresponding object file (having the same name "vsnf.o") contained in payload 204.
Lines 238-247 (between tags "<oneoff_inventory>" and "</oneoff_inventory>") depict the details of the various errors fixed by patch 200. In line 239, patch 200 is associated with a unique reference number "1010111" identifying the patch. In line 240, the date (year "2006", month "Feb" and day "18") and time ("16:16:25" and zone "US/Pacific") represent a time stamp at which the patch was created in developer system 140.
Lines 241-246 (between tags "<base_bugs>" and "</base_bugs>") depict the details of the errors that are fixed (or to which the patch is directed) on deployment of the patch. Line 242 specifies the details of a single error (such as error number "1010222" and error description "Robust patchB see README.txt") fixed by deployment of patch 200 in runtime system 130.
The error number uniquely identifies the specific error sought to be fixed by the patch on the pre-installed software in the runtime system. A development team operating developer system 140 may assign unique identifiers for the patches and errors. Similarly, lines 243, 244 and 245 specify different errors with corresponding error numbers "1010223", "1010224", "1010225" and respective descriptions "Bug description 1", "Bug description 2" and "Bug description 3".
It may be appreciated that patch tool 150 may store the information about the patch deployed in patch info 210 for deployment of multiple patches. As such, the description is continued with respect to the detail of sample patch info in an embodiment.
II. D. Patch Information
FIG. 2C depicts the content of sample patch info indicating the patches deployed in a runtime system (130) in an embodiment. Though the content is shown encoded in extensible markup language (XML), other encoding/formats may be used for representing the patch info. Lines 251-272 (in between tags "<oneoff_list>" and "</oneoff_list>") depict different patches deployed in runtime system 130.
Lines 252-262 (in between tags "<oneoff>" and "</oneoff>") depict the details of a single patch (200) deployed in runtime system 130. Line 252 specifies various details of the patch such as the reference number "1010111" associated with the patch, the location "oneoffs/1010111/" of the metadata of the patch and the time "2006.apr.20 1:00:25 PST" when the patch was deployed.
It may be observed that the reference number "1010111" corresponds to the reference number of patch 200 specified in line 239. In line 253, the description (" ") of the patch is specified (between tags "<desc>" and "</desc>"). In line 254, the name of pre-installed software "acme.rdbms" and version "1.1" for which the patch is deployed (between tags "<ref_list>" and "</ref_list>") in runtime system 130 is specified and corresponds to similar information specified in line 232.
Lines 255-260 (between tags "<bug_list>" and "</bug_list>") depict the details of the errors that are fixed on deployment of the patch ("1010111"). Lines 256-259 specifies the different errors (in each of the line between tags "<bug>" and "</bug>") such as "1010222", "1010223", "1010224" and "1010225" indicating the error numbers that have been fixed by the deployment of the patch. It may be observed that the error numbers in lines 256-259 correspond to the error numbers specified in lines 242-245. Line 261 indicates the files (no files are shown for simplicity) modified during the deployment of the patch. Similarly lines 263-271 depict the details of another patch with reference numbers "1020222" deployed in the runtime system.
Thus, patch tool 150 deploys patch 200 in runtime system 130 and stores corresponding information in patch info 210. The description is continued with an aspect of the present invention whereby multiple patches are deployed in a runtime system.
III. Deployment of Multiple Patches
III. A. Introduction
It is often desirable to deploy multiple patches in a batch mode, even if the patches are received interspersed over long time duration. For example, one patch may be received starting Monday 7 AM while another patch may be received starting Tuesday 9 PM. The patches thus received in an entire week may be deployed as a single batch over a weekend. The batch mode is in contrast to situations in which each patch is attempted to be deployed upon receipt.
Such batch deployment in runtime system 130 may facilitate deployment of patches during non-critical times (e.g., weekends when there may be fewer requests from client systems), in addition to reducing the effective aggregate unavailable time of runtime system 130.
An embodiment of the present invention facilitates efficient deployment of multiple patches, as described below in further detail.
III. B. Deploying Multiple Patches
FIG. 3 is a flowchart illustrating the manner in which multiple patches are deployed in a runtime system according to an aspect of the present invention. The flowchart is described with respect to FIG. 1 merely for illustration. However, various features can be implemented in other environments also without departing from the scope and spirit of various aspects of the present invention, as will be apparent to one skilled in the relevant arts by reading the disclosure provided herein. In addition, some of the steps may be performed in a different sequence than that depicted below, as suited in the specific environment, as will be apparent to one skilled in the relevant arts. Many of such implementations are contemplated to be covered by several aspects of the present invention. The flow chart begins in step 301, in which control immediately passes to step 320.
In step 320, patch tool 150 receives a set of patches, with each patch effecting a corresponding set of changes for software pre-installed in a runtime system. The patches may be received from developer system 140. The set of changes for pre-installed software may be effected by the replacement of software instructions or data elements (or files containing them) in runtime system 130 with corresponding data from a patch. In an embodiment, the changes may be identified by error numbers corresponding to the errors that are fixed by a patch. Alternatively, the metadata in a patch may indicate the changes effected by a patch in runtime system 130.
In step 340, patch tool 150 determines a subset of the set of patches that effects all the changes in the sets of changes. Thus, if the changes designed by a given patch are effected by other patches intended to be included in the subset, the given patch may be ignored. In a simple case, when a patch is designed to effect a set of changes which contains all the changes designed to be effected by another patch, the another patch need not be deployed. In an embodiment, information on changes already effected by pre-deployed patches may be retrieved from patch information 210, and also used in determining the subset of the set of patches. An approach for determining the subset of patches is described in detail in sections below.
In step 360, patch tool 150 deploys the subset of the set of patches in the runtime system. The deployment of the subset of patches may be performed together (in a batch). It may be appreciated that the duration a runtime system is unavailable to client systems, is reduced due to the fewer patches deployed.
In step 380, patch tool 150 stores patching data indicating the subset of patches deployed and the corresponding set of changes affected in the runtime system. As described above, the stored data may be retrieved in step 320 to identify the existing patches that are already deployed in runtime system 130. The flow chart ends in step 399.
While the subset determined in step 340 potentially reduces the number of patches to be deployed, it may be desirable to avoid conflicts (described below) in selecting the members of the subset of patches, as described below with examples.
III. C. Conflicts
Another challenge in batch deployment is addressing conflicts presented by multiple patches. A conflict occurs when two different patches address overlapping changes, while each also effects at least one unique change not effected by the other.
Such conflicts are often of concern since the same change/error may be fixed in different manner, i.e., using different unit files or different instructions with the same file name. The other unit files in a payload may be designed to work in combination with the other changes effected by the rest of the payload (i.e., other unit files), but a portion of a payload fixing an error may not be able to operate with another portion in a conflicting patch, as illustrated with an example below.
FIG. 2D depicts the content of the metadata of a patch having a conflict with a existing patch deployed in a runtime system (130) in an embodiment. Lines 275-283 (similar to lines 238-247 of FIG. 2B and not explained for conciseness) depicts a patch with reference number "1040444" and fixing the error numbers "1010223", "1010224" and "1010227".
During deployment of the patch "1040444" (patch 44), the metadata of patch 44 is compared to the metadata of the existing patches in runtime system 130. The description is continued assuming that the existing patches in runtime system 130 are represented by the patches depicted in patch info 210 (shown in FIG. 2C).
It may observed that patch 44 fixes two errors "1010223" and "1010224 (as shown in lines 279 and 280) in common with patch "1010111" (patch 11) (as shown in lines 257 and 258). Also patch 11 fixes an error "1010222" (as shown in line 256) that is not fixed by patch 44 and patch 44 fixes an error "1010227" (as shown in line 281) not fixed by patch 11.
Given that the instructions for fixing error "1010223" in patch 44 need not be identical to the instructions in patch 11, the instructions for error "1010223" in patch 44 may not be compatible with the instructions in patch 11 fixing other errors such as "1010222". To avoid introducing additional errors, it is desirable that the code for error "1010223" in patch 44 not be installed with the instructions for fixing the other errors in patch 11. As such, there exists a conflict between patch "1010111" and patch "1040444".
In an embodiment, a conflict is resolved by informing a developer system about the conflicting patches. The developer system generates a new patch containing the changes of all the conflicting patches (that is a merge of the conflicting patches) and sends the new merged patch to the patch tool for deployment. Accordingly, it may be desirable to at least identify the conflicting patches while determining the subset of patches in step 340.
An aspect of the present invention enables such conflicts to be identified to the extent the errors cannot be fixed in a non-conflicting way.
One non-conflicting way is not including a first patch if the errors fixed by first patch are included in the set of errors fixed by the second patch, and if the second patch is included in the subset of patches determined in step 340. As such, the first patch is said to be a subset of the second patch (and conversely the second patch is said to be a superset of the first patch).
FIG. 2E depicts the content of the metadata of a patch, which is a subset of an existing patch deployed in a runtime system (130) in an embodiment. Lines 285-292 (similar to lines 238-247 of FIG. 2B and not explained for conciseness) depicts a patch with reference number "1050555" and fixing the error numbers "1010222", and "1010225".
Assuming the patch info shown in FIG. 2C represents the existing patches in runtime system 130, it may be observed that the errors fixed by patch "1050555" (as shown in lines 289 and 290) are also fixed by patch "1010111" (as shown in lines 256 and 259). As such, patch "1050555" is said to be a subset of patch "1010111" and conversely patch "1010111" is said to be a superset of patch "1050555".
Thus, during deployment of multiple patches, the patch tool 150 may need to verify whether the new patches (such as patch 200) to be deployed in runtime system 130 have a conflict with and/or are a superset/subset of existing patches in runtime system 130 by inspecting patch info 210.
In addition, it may be appreciated that in an embodiment implementing step 340, some of the existing patches already deployed in runtime system 130 may be determined to be not required for effecting the set of changes. As such, existing patches that are not required are rolled back before deployment of the subset of patches in step 360. The manner in which the subset of patches is determined based on such considerations and deployed is illustrated with an example below.
III.D. Example Illustrating Deployment of Multiple Patches
FIG. 4 is a block diagram illustrating deployment of multiple patches in an embodiment. The block diagram is shown containing runtime system 130 (containing existing patches 410 and 420), patch tool 150 and patches 440, 450, 460 and 470 that need to be deployed in the runtime system. Each of the blocks is described in detail below.
Patch 410 represents an existing (i.e., already deployed) patch in runtime system 130 and is shown containing a reference number "93" and the set of changes ("C1", "C3") effected by the patch in the runtime system. The reference number is used to uniquely identify each patch. As noted above, each of the changes (such as "C1" or "C3") corresponds to an error number (as specified in line 242) or may specify modifications made to software instructions constituting pre-installed software executing in the runtime system. Similarly, patch 420 is another patch that exists in runtime system 130 and has a reference number "97" and effects changes "C4" in runtime system 130. Patches 410 and 420 may be identified as existing patches in runtime system 130 from data specified in patch info (not shown in FIG. 4) associated with patch tool 150.
Patches 440 (reference number "101" and effecting changes "C1"), 450 (reference number "102" and effecting changes "C1" and "C2"), 460 (reference number "103" and effecting changes "C1", "C3" and "C5") and 470 (reference number "108" and effecting changes "C6") are the new patches that are to be deployed by patch tool 150 in runtime system 130.
It may be observed that patch 410 is a superset of patch 440, has a conflict with patch 450 and is a subset of patch 460. Patches 420 and 470 do not have a relation with any of the other patches. Also, patch 450 is a superset of patch 440 and has a conflict with patch 460. The above relations may be taken into consideration for determining the subset of patches to be deployed. The manner in which the subset of patches is determined is described in detail below.
III. E. Determining a Subset of Patches
FIG. 5 (combination of FIGS. 5A and 5B) is a flowchart illustrating the manner in which a subset of patches to be deployed in a runtime system is determined in an embodiment. The flowchart is described with respect to FIG. 2 merely for illustration. However, various features can be implemented in other environments also without departing from the scope and spirit of various aspects of the present invention, as will be apparent to one skilled in the relevant arts by reading the disclosure provided herein. Some of the steps may be implemented in a different order than that depicted in FIG. 5. Many of such implementations are contemplated to be covered by several aspects of the present invention. The flow chart begins in step 501, in which control immediately passes to step 505.
In step 505, patch tool 150 initializes a first set to the set of patches that are available (or have been received) for deployment in a runtime system and a second set to the set of patches already deployed in the runtime system. The set of patches already deployed may be determined from the information in the patch info 210.
In step 510, patch tool 150 creates an empty conflict set and a empty removal set. As will be appreciated from the description below, the conflict set is updated to indicate the patches that conflict with each other, and the removal set indicates the patches that need to be rolled back in the runtime system.
In step 515, patch tool 150 retrieves a patch P1 from the first set. The patch P1 is then compared to each of the patches in the second set. In step 520, patch tool 150 retrieves a patch P2 from the second set. Patch P2 is compared to patch P1 in steps 530, 535 and 540 and actions are performed based on the relation between patches P1 and P2, as described below.
In step 530, patch tool 150 checks whether P1 is a subset of P2. Patch P1 is determined to be a subset of patch P2 if the set of changes effected by patch P1 in runtime system 130 is contained in the set of changes effected by patch P2. In the scenario where P1 is a subset of P2, no action needs to be performed. As such, control passes to step 575 if P1 is a subset of P2 and to step 535 otherwise.
In step 535, patch tool 150 checks whether P1 is a superset of P2. Patch P1 is determined to be a superset of patch P2 if the set of changes effected by patch P1 in runtime system 130 contains all the set of changes effected by patch P2. Control passes to step 550 if P1 is a superset of P2 and to step 540 otherwise.
In step 550, patch tool 150 removes P2 from the second set. Patch tool 150 verifies whether P2 is already deployed in runtime system 130. In the scenario where patch P2 is already deployed, patch tool 150 adds patch P2 to the removal set. In step 555, patch tool 150 verifies whether P2 is in the conflict set. In the scenario where patch P2 is in the conflict set, patch tool 150 adds patch P1 to the conflict set and removes patch P2 from the conflict set. Control passes to step 570.
In step 540, patch tool 150 checks whether P1 has a conflict with P2. Patch P1 is determined have a conflict with patch P2 if the set of changes effected by each of the patches overlap (that is have a common change effected), while each set effects unique changes not found in the other set. Control passes to step 560 if P1 is determined to have a conflict with P2 and to step 570 otherwise. In step 560, patch tool 150 adds P1 and P2 to the conflict set and verifies whether P2 is already deployed in runtime system 130. In the scenario where P2 is already deployed, patch P2 is added to the removal set. Control passes to step 570.
In step 570, patch tool 150 adds P1 to the second set. Patch tool 150 then determines whether there are more patches (that have not been retrieved as P2) in the second set excluding patch P1. Control passes to step 520 if there are more patches and to step 575 otherwise. Thus, in the steps between 520 and 570, each of the patches in the second set is identified as P2 and then compared to patch P1 and corresponding actions are performed based on the relation between patch P2 and patch P1.
In step 575, patch tool 150 removes patch P1 from the first set. Patch tool 150 then determines whether there are more patches in the first set. Control passes to step 515 if there are more patches in the first set and to step 580 otherwise. Thus, the steps between 515 and 575 are repeated for each patch in the first set (that is the set of new patches) and the subset of patches for effecting all the changes is determined.
In step 585, patch tool 150 rolls back each of the patches in the removal set from runtime system 130. In step 590, patch tool 150 deploys each patch in the second set that is neither in the conflict set nor already deployed in runtime system 130. In step 595, patch tool 150 deploys a merge of the patches in the conflict set. Patch tool 150 may request developer system 140 for the merge of the patches in the conflict set and may deploy the merged patch received as the response. The flow chart ends in step 599.
Thus, in steps 585, 590 and 595, the subset of patches for effecting all the changes as determined in the previous steps is deployed in runtime system 130. The description is continued illustrating the execution of steps in FIG. 5 in relation to the set of patches described in FIG. 4.
III. F. Illustrating Operation
In step 505, the first set is initialized to contain patches 440, 450, 460 and 470 (hereafter shown in the format "{440, 450, 460, 470}" to indicate that a set contains the patches specified in the braces}. The second set is initialized to {410, 420}. In step 510, a empty conflict set (that is { }) and a empty removal set (that is { }) is created.
During the first iteration, patch P1 is assigned 440 in step 515 and patch P2 is assigned 410 in step 520. In step 530, since patch P1(440) is a subset of patch P2 (410), control passes to step 575. In step 575, P1 is removed from the first set and since P1 contains more patches control passes to step 515. At the end of the first iteration, first set is {450, 460, 470}, second set is {410, 420}, conflict set is { } (that is empty) and removal set is { }.
During the second iteration, patch P1 is assigned 450 in step 515 and patch P2 is assigned 410 in step 520. In step 530, control passes to step 535 since P1 is not a subset of P2 and in step 535 control passes to step 540 since P1 is not a superset of P2. In step 540, P1(450) is determined to have a conflict with P2 (410) since the patches have change "C1" in common and also have unique patches ("C2" in patch 450 and "C3" in patch 410) that are not found in the other patch. As such, control passes to step 560.
In step 560, P1(450) and P2(410) are added to the conflict set. Patch P2(410) is also added to the removal set since the patch is already deployed in runtime system 130. Control then passes to step 570. In step 570, P1(450) is added to the second set. Control then passes to step 515 as there is a patch (420) that is not the same as P1. Thus, at the end of the second iteration, first set is {450, 460, 470}, second set is {410, 420, 450}, conflict set is {410, 450} and removal set is {410}.
During the third iteration, patch P1 is still 450 and patch P2 is assigned 420 in step 515. Since patch P1(450) and patch P2(420) have no relation to each other (that is there is no change commonly effected by both the patches), control passes through steps 530, 535, and 540 to step 570. In step 570, P1(450) is added to the second set. Since the second set already contains the patch, the patch is not duplicated. Control then passes to step 575 since there is no other patch in P2 to compare P1 with. In step 575, patch P1(450) is removed from the first set and control passes to step 515 since there are more patches in the first set. Thus, at the end of the third iteration, first set is {460, 470}, second set is {410, 420, 450}, conflict set is {410, 450} and removal set is {410}.
During the fourth iteration, patch P1 is assigned 460 in step 515 and patch P2 is assigned 410 in step 520. In step 530, control passes to step 535 since P1 is not a subset of P2. In step 535, control passes to step 550, since P1(460) is a superset of P2(410) as the changes ("C1", "C3" and "C5") effected by patch 440 contains all the changes ("C1" and "C3") effected by patch 410. In step 550, P2(410) is removed from the second set and is added to the removal set since P2(410) is already deployed in runtime system 130. In step 555, P2(410) is removed from the conflict set and P1(460) is added to the conflict set. Control passes to step 570, where P1(460) is added to the second set. Control passes to step 520, since there is a patch (420) that has not been retrieved as P2. Thus, at the end of the fourth iteration, first set is {460, 470}, second set is {420, 450, 460}, conflict set is {450, 460} and removal set is {410}.
During the fifth iteration, patch P1 is still 460 and patch P2 is assigned 420 in step 515. Since patch P1(460) and patch P2(420) have no relation to each other (that is there is no change commonly effected by both the patches), control passes through steps 530, 535, and 540 to step 570. In step 570, P1(460) is added to the second set. Control then passes to step 520 since there is a patch (450) in the second set that has not been retrieved as P2 (and is not the same as P1). Thus, at the end of the fifth iteration, first set is {460, 470}, second set is {420, 450, 460}, conflict set is {450, 460} and removal set is {410}.
During the sixth iteration, patch P1 is still 460 and patch P2 is assigned 450 in step 515. Control passed through steps 530, 535, 540 to step 560 since patch P1 has a conflict with patch P2 as the patches 460 and 450 have a change "C1" in common and also have unique changes ("C3" in patch 460 and "C2" in patch 450) not effected by the other patch. In step 560, P1(460) and P2(450) are added to the conflict set. Patch P2(450) is not added to the removal set since the patch is a new patch (and is not already deployed). Control then passes to step 570. In step 570, P1(460) is added to the second set. Control then passes to step 575 since there is no other patch in P2 to compare P1 with. In step 575, patch P1(460) is removed from the first set and control passes to step 515 since there are more patches in the first set. Thus, at the end of the sixth iteration, first set is {470}, second set is {420, 450, 460}, conflict set is {450, 460} and removal set is {410}.
During the seventh iteration, patch P1 is assigned 470 in step 515 and patch P2 is assigned 420 in step 520. Since patch P1(470) and patch P2(420) have no relation to each other (that is there is no change commonly effected by both the patches), control passes through steps 530, 535, and 540 to step 570. In step 570, P1(470) is added to the second set. Control then passes to step 520 since there is a patch (450) in the second set that has not been retrieved as P2 (and is not the same as P1). Thus, at the end of the seventh iteration, first set is {470}, second set is {420, 450, 460, 470}, conflict set is {450, 460} and removal set is {410}.
Similarly, during the eighth iteration, patch P2 is assigned to 450 and control reaches step 570 from where control is passed to step 520 since there is a patch (460) which has not been retrieved as P2. At the end of the eighth iteration, first set is {470}, second set is {420, 450, 460, 470}, conflict set is {450, 460} and removal set is {410}. During the ninth iteration, patch P2 is assigned to 460 and control reaches step 570. In step 570, control passes to step 575, as there are no more patches in the second set that have not been retrieved as P2 and is not the same as P1. In step 575, patch P1(470) is removed from the first set. Control passes to step 580, since there are no more patches in the first set. Thus, at the end of the seventh iteration, first set is { } (that is empty), second set is {420, 450, 460, 470}, conflict set is {450, 460} and removal set is {410}.
In step 580, no action is performed since the conflict set contains more than one patch. In step 585, each of the patches in the removal set that is patch 410 is rolled back in runtime system 130. In step 590, the patches in the second set that are neither present in the conflict set nor already deployed are identified as {470}. As such, only patch 470 is deployed by patch tool 150 in step 590. In step 595, patch tool 150 deploys a merge of the patches 450 and 460 in runtime system 130.
It may be observed that all the changes are effected on deployment of patch 470 and a merged patch of patches 450 and 460 and the roll back of patch 410.
IV. Persistence of Files During Deployment of Patches
IV. A. Introduction
It is sometimes desirable to not remove ("persist") the files deployed from a old patch when a new patch fixing the same error as the old patch, is deployed in a runtime system. For example, during the deployment of new patches with a higher/newer version numbers, it may be desirable that the patch tool persist files deployed from older patches, which fixed the same errors in a lower/older version numbers. Such persistence of the previous changes may enable benefits such as easier reversion to patches of any one of the desired older versions.
Some other times it is desirable that files from older patches be removed when new patches are deployed. For example, as described above with respect to step 585 of FIG. 5, it is desirable that the changes corresponding to the patches in the removal set be rolled back prior to deploying the subset of patches noted there (leading to removal of corresponding files).
An aspect of the present invention facilitates such a combination of capabilities as described below.
IV.B. Simplifying Roll Back to Desired Prior Version
FIG. 6 is a flowchart illustrating the manner in which files deployed from older patches are persisted even after deployment of new patches fixing the same errors (as the old patch) and also the manner in which such persistence simplifies rolling back to patches of prior versions in an embodiment of the present invention. The flowchart is described with respect to FIG. 1 merely for illustration. However, various features can be implemented in other environments also without departing from the scope and spirit of various aspects of the present invention, as will be apparent to one skilled in the relevant arts by reading the disclosure provided herein. Many of such implementations are contemplated to be covered by several aspects of the present invention. The flow chart begins in step 601, in which control immediately passes to step 620.
In step 620, patch tool 150 receives data indicating a new patch that needs to be deployed for a software pre-installed in a runtime system, with the data also indicating a set of patches (or specifically the corresponding files) that are to be persisted after deployment of the new patch. The set of patches may be indicated in the meta data of the new patch, as described in sections below.
In step 640, patch tool 150 deploys the new patch in the runtime system ensuring that the files deployed from any of the set of patches indicated are not removed during the deployment. In the embodiments described above, the files are determined by examining the information in patch information 210.
In step 660, patch tool 150 receives a request to rollback the new patch in the runtime system. The request can be received according to any pre-specified convention consistent with the implementation of patch tool 150.
In step 680, patch tool 150 rolls back the new patch in the runtime system thereby restoring the state of the runtime system to the state before deployment of the new patch. Such a rollback may merely entail removing the files corresponding to the new patch. The persistent files may become operative (executed) by appropriate changes in the rest of pre-installed software. The flow chart ends in step 699.
From the above, it may be appreciated that the ability to persist files when deploying patches may provide the benefit of reverting to a desired one of any prior versions of the preinstalled software. The description is continued with respect to an example approach to specifying the desired persistence.
IV.C. Specifying Desired Persistence
FIGS. 7A and 7B together illustrate the manner in which desired persistence can be specified during the deployment of a new patch in an embodiment. Each of the figures is described in detail below. In the description below, for simplicity, it is assumed that each change (e.g., C1, C2) represents one file (e.g., unit file or archive file, described above), though each change may be effected by multiple files.
FIG. 7A is a block diagram illustrating persistence of pre-deployed files in a runtime system (130) during the deployment of a new patch in an embodiment. The block diagram is shown containing runtime system 130 (containing pre-deployed patches 710 and 720), patch tool 150 and new patches 730 and 740. Merely for illustration, only representative number/type of patches is shown in the Figure. Many environments often contain many more patches and/or types, both in number and type. Each of the blocks is described in detail below.
Pre-deployed patches 710 and 720 represent patches with unique reference numbers "200" and "210". Patch 710 is shown as effecting changes "C1" and "C3", and patch 720 is shown effecting change "C5". Patch 730 represents a new patch that is to be deployed by patch tool 150 in runtime system 130 and is shown containing reference number "215" and effecting changes "C1", "C3" and "C4" (thereby fixing the errors fixed by patch 710 as well). Similarly, patch 740 also represents a new patch and is shown containing a reference number "220" and effecting changes "C5" and "C6" (thereby fixing the errors fixed by patch 720). Patch 740 also contains a set of patches (identified by reference numbers "210") that are to be persisted after the deployment of patch 740.
Assuming patch 730 is eventually deployed, patch 710 (and files corresponding to C1 and C3) is removed. On the other hand, since patch 740 indicates that patch 720 (identified by patch identifier 210) is to be persisted, the files corresponding to change C5 in run time system 130 are not removed assuming patch 740 is deployed.
It may be appreciated that during deployment of multiple patches, persistence information of the new patches to be deployed may be used to resolve conflicts between patches. Conflicting patches may be determined to be the patches included in the conflict set during the execution of the steps in the flowchart depicted in FIG. 5.
In an embodiment implementing the flowchart depicted in FIG. 5, an intermediate step between step 575 and 585 may be performed for checking the persistence information. In the scenario a new patch P1 has a conflict with an existing patch P2 and P1 indicates that P2 is to be persisted (during deployment of P1), P2 is not rolled back in step 585 and P1 is deployed in step 590. No merge of the patches P1 and P2 needs to be deployed in step 595.
The set of patches indicating the patches that are not to be rolled back during the deployment of a patch may be specified in the metadata of the patch as described in detail below with an example.
IV.D. Metadata for Persistence Information
FIG. 7B depicts the content of a metadata of patch (740) indicating the set of patches that are to be persisted during the deployment of the patch in a runtime system (130) in an embodiment. Though the content is shown encoded in extensible markup language (XML), other encoding/formats may be used for representing the metadata. Lines 771-779 and 784 are similar to corresponding lines 238-246 and line 247 of FIG. 2B (and are not explained in detail for conciseness) except in indicating a patch with reference number "1040444" which fixes the errors identified by the error numbers "1010222", "1030222", "1040222" and "1040224".
Lines 780-783 (in between tags "<overlay_oneoffs>" and "</overlay_oneoffs>") indicate the set of patches that are not to be rolled back during the deployment of patch "1040444". In lines 781 and 782, the reference numbers "1010222" and "1030333" of the set of patches is specified and correspond to the patches shown in lines 263-271 and 272-281 respectively. Thus during the deployment of patch "1040444", in the scenario where patches "1010222" and "1030333" are pre-deployed in runtime system 130, the patches are not rolled back.
Additional features may be provided to further aid developers of patches in designing patches to fix errors, as described below.
V. Performing Custom Action While Deploying Patches
V. A. Introduction
As may be readily observed from the description with respect to FIG. 2, keywords such as 'COPY', 'ARCHIVE', 'JAR' indicate the corresponding actions pre-determined according to a convention. However, a developer of patches (in developer system 140) may desire a sequence/set of actions not foreseen by the convention to deploy a patch. Such unforeseen (and not pre-determined) actions required to deploy a patch are referred to as custom actions.
V.B. Performing Custom Actions
FIG. 8 is a flowchart illustrating the manner in which a designer of patches may cause custom actions to be performed during deployment of a patch in a runtime system according to an aspect of the present invention. The flowchart is described with respect to FIG. 1 merely for illustration. However, various features can be implemented in other environments also without departing from the scope and spirit of various aspects of the present invention, as will be apparent to one skilled in the relevant arts by reading the disclosure provided herein. Many of such implementations are contemplated to be covered by several aspects of the present invention. The flow chart begins in step 801, in which control immediately passes to step 820.
In step 820, patch tool 150 receives data indicating a patch that needs to be deployed for a software pre-installed in a runtime system, with the patch including a file and a program logic containing a sequence of instructions specifying the manner in which the file is to be processed to deploy the patch. The sequence of instructions is designed to perform a custom action when executed during deployment of the patch in runtime system 130.
In step 850, patch tool 150 executes the program logic included in the patch during the deployment of the patch. Any convention can be used to specify the specific instant at which the program logic is to be executed. The flowchart ends in step 899.
Thus, a custom action is caused to be performed by the patch tool by including a program logic in a patch and executing the program logic during the deployment of the patch. The manner in which the program logic is specified and executed is illustrated with an example below.
V.C. Illustrating Custom Actions
FIGS. 9A, 9B and 9C together illustrate the manner in which a custom action is performed during the deployment of a patch in a runtime system in an embodiment. Each of the figures is described in detail below.
FIG. 9A is a block diagram illustrating a patch containing custom actions that are to be performed during the deployment of the patch in an embodiment. The block diagram is shown with patch 900 containing metadata 902 and payload 904. Payload 904 is shown containing unit files 906 and 908 (which are operate similar to 206 and 208 described above) and action files 910 and 920. Each of the blocks is described below.
Each of action files 910 and 920 contain software instructions (forming a corresponding program logic) designed to cause a corresponding custom action during deployment of patch 900.
Metadata 902 may contain keywords, which specify the pre-determined actions to be performed with unit files 906 and 908, in addition to indicating that the instructions in action files 910 and 920 are to be executed. The description is continued with respect to the details of the metadata of a patch containing custom actions in an embodiment.
V. D. Metadata of a Patch Containing Custom Actions
FIG. 9B depicts the content of the metadata of a patch (900) that contains custom actions that are to be performed during the deployment of the patch in a runtime system (130) in an embodiment. Though the content is shown encoded in extensible markup language (XML), other encoding/formats may be used for representing the metadata. Lines 931, 932, 937 and 938 are similar to lines 231, 232, 236 and 237 of FIG. 2B and are not described for conciseness.
Lines 933-936 depict various actions to be performed with the file in payload 904. Each of the lines 933-936 contains a keyword that indicates the action to be performed. For example, in line 933, the "copy" keyword indicates that a copy action (that is copying of files from payload 904 to runtime system 130) is to be performed.
On the other hand, to determine whether a keyword is designed to represent a custom action, patch tool 150 first determines whether the keyword belongs to a set of pre-defined keywords (corresponding to pre-defined actions). In the scenario where the keyword does not belong to the pre-defined set, patch tool 150 searches for files in payload 904 having a name formed by a string with the text "Action" suffixed to the keyword. Then, within such identified files, patch tool 150 determines a function having the same number of parameter as those specified in the tag being processed, as described below.
In line 934, keyword "configfile" indicates a custom action that is to be performed with parameters "file_name", "component_type", "service_name" and "document_type" with respective values "/pcs.xml", "OHSComponent", "PCS Service" and "xml" during deployment. Similarly, lines 935 and 936 depict keywords "configfile" and "configparam" indicating custom actions to be performed with respective parameters and values.
As the program logic (according to a programming language having syntax/semantics which are different from that used to represent the metadata) is specified in the form of instructions in Java™ programming language, patch tool 150 on identifying a custom action (such as "configfile") searches for a ".class" file having the text "Action" appended to the name of the custom action (that is, "configfileAction.class"). In the scenario such a file is found, the software instructions in the file are processed and the instructions specified for a function with the name similar to the filename (that is "configfileAction" function) is executed.
The description is continued with respect to example sequence of software instructions constituting a custom action.
V. E. Example Custom Action
FIG. 9C depicts the content of a file containing software instructions (coded in Java™ programming language) specifying a program logic to be executed for performing a custom action in an embodiment. Lines 941-953 depict software instructions coded in Java™ programming language contained in a file named "configfileAction.class".
Lines 943-948 depict a function "configfileAction" containing a program logic, which is executed to perform the custom action "configfile" specified in line 934. Some of the parameters (such as "fileName", "compType", "serviceName" and "documentType") of the function "configfileAction" are passed the corresponding values (such as "/pcs.xml", "OHSComponent", "PCS Service" and "xml") as specified in line 934.
Lines 949-952 specify another function with the same name "configfileAction" and accepting three values as parameters from the metadata. As such, patch tool 150 matches the "configAction" specified in line 935 with the function specified in lines 949-952 based on the number of values that are required for executing the function.
While the patches are described below as being deployed on runtime system 130 operating as a server, it should be appreciated that the patches can be deployed on various other systems such as personal computer, workstation, and mobile station, as well.
It should be appreciated that the features described above can be implemented in various embodiments as a desired combination of one or more of hardware, software and firmware. The description is continued with respect to an embodiment in which various features are operative when software instructions are executed.
VI. Digital Processing System
FIG. 10 is a block diagram illustrating the details of digital processing system 1000 in which various aspects of the present invention are operative by execution of appropriate software instructions. System 1000 may correspond to patch tool 150 or developer system 140. System 1000 may contain one or more processors (such as a central processing unit (CPU) 1010), random access memory (RAM) 1020, secondary memory 1030, graphics controller 1060, display unit 1070, network interface 1080, and input interface 1090. All the components except display unit 1070 may communicate with each other over communication path 1050, which may contain several buses as is well known in the relevant arts. The components of FIG. 10 are described below in further detail.
CPU 1010 may execute instructions stored in RAM 1020 to provide several features of the present invention. CPU 1010 may contain multiple processing units, with each processing unit potentially being designed for a specific task. Alternatively, CPU 1010 may contain only a single general purpose processing unit. RAM 1020 may receive instructions from secondary memory 1030 using communication path 1050.
Graphics controller 1060 generates display signals (e.g., in RGB format) to display unit 1070 based on data/instructions received from CPU 1010. Display unit 1070 contains a display screen to display the images defined by the display signals. Input interface 1090 may correspond to a keyboard and a pointing device (e.g., touch-pad, mouse). Network interface 1080 provides connectivity to a network (e.g., using Internet Protocol), and may be used to communicate with others connected systems of FIG. 1.
Secondary memory 1030 may contain hard drive 1035, flash memory 1036 and removable storage drive 1037. Secondary memory 1030 may store the data (e.g., patch information 210) and software instructions (e.g., implementing the flowchart of FIG. 5A/5B), which enable system 1000 to provide several features in accordance with the present invention. Some or all of the data and instructions may be provided on removable storage unit 1040, and the data and instructions may be read and provided by removable storage drive 1037 to CPU 1010. Floppy drive, magnetic tape drive, CD-ROM drive, DVD Drive, Flash memory, removable memory chip (PCMCIA Card, EPROM) are examples of such removable storage drive 1037.
Removable storage unit 1040 may be implemented using medium and storage format compatible with removable storage drive 1037 such that removable storage drive 1037 can read the data and instructions. Thus, removable storage unit 1040 includes a computer readable storage medium having stored therein computer software and/or data. However, the computer readable storage medium can be in other forms (e.g., non-removable, random access, etc.).
In this document, the term "computer program product" is used to generally refer to removable storage unit 1040 or hard disk installed in hard drive 1035. These computer program products are means for providing software to system 1000. CPU 1010 may retrieve the software instructions, and execute the instructions to provide various features of the present invention described above.
VII. Conclusion
While various embodiments of the present invention have been described above, it should be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents. Also, the various aspects, features, components and/or embodiments of the present invention described above may be embodied singly or in any combination in a data storage system such as a database system.
1. A non-transitory computer readable medium carrying one or more sequences of instructions constituting a patch tool for fixing a plurality of errors in a software pre-installed in a system using a plurality of patches, wherein each of said plurality of patches contains a corresponding set of files which are designed to fix corresponding errors when copied to said system, wherein said system has a second file, a fifth file, a sixth file and a seventh file stored thereon, wherein said second file and said fifth file are deployed from a second patch for fixing a second error and a fifth error respectively, wherein said sixth file and said seventh file are deployed from a sixth patch for fixing a sixth error and a seventh error respectively, wherein execution of said one or more sequences of instructions by one or more processors causes said patch tool to perform the actions of:
receiving from a developer system in a first time duration, a fourth patch and a fifth patch,
said fourth patch containing a fourth file to fix said second error and a eighth file to fix a eighth error, said fourth patch received in said first time duration has a conflict with said second patch by virtue of having said fourth file to fix said second error, said fourth patch further contains an indication to persist said second patch,
said fifth patch containing a ninth file to fix said sixth error and a tenth file to fix a tenth error, wherein said fifth patch has a conflict with said sixth patch by virtue of having said ninth file to fix said sixth error, wherein said fifth patch does not contain an indication to persist said sixth patch;
deploying said fourth patch by copying said fourth file and said eighth file to said system in spite of conflict with said second patch due to said persist indication in said fourth patch, but not removing said second file and said fifth file from said system in response to said indication to persist said second patch received from said developer system;
not deploying said fifth patch to said system in view of said conflict with said sixth patch and absence of persistence indication in said fifth patch,
wherein said fourth patch is deployed in said system after said first time duration,
wherein said developer system is implemented external to said patch tool.
2. The non-transitory computer readable medium of claim 1, wherein said indication is received in the form of metadata from said developer system.
3. The non-transitory computer readable medium of claim 1, wherein a first file is stored on said system prior to said first duration, wherein said first file is deployed from a first patch for fixing a first error,
wherein a third patch containing a third file to fix said first error is received in said first duration,
deploying said third patch by copying said third file to said system after said first time duration, wherein said first file is removed from said pre-installed software by said deploying of said third patch.
4. The non-transitory computer readable medium of claim 3, further comprising:
upon determining that said fifth patch is in conflict with said sixth patch, sending said fifth patch and said sixth patch to said developer system for merging of the two patches into a single patch; and
after sending of said fifth patch and said sixth patch to said developer system, receiving said merged patch containing all of the changes sought to be effected using said fifth patch and said sixth patch,
wherein said merged patch is deployed after receiving said merged patch from said developer system.
5. The non-transitory computer readable medium of claim 3, further comprising one or more instructions for:
receiving a request to roll back said fourth patch in said system; and
removing said fourth file and said eighth file from said system to effect roll back of said fourth patch,
wherein said removing ensures that said system is restored to a state corresponding to operation of said second file.
receiving a request to roll back said third patch in said system;
removing said third file from said system to effect roll back of said third patch;
receiving another request to deploy said first patch in said system; and
redeploying said first patch in said system to ensure that said system is restored to a state corresponding to operation of said first file.
7. A method of fixing a plurality of errors in a software pre-installed in a system using a plurality of patches, wherein each of said plurality of patches contains a corresponding set of files which are designed to fix corresponding errors when copied to said system, wherein said system has a second file, a fifth file, a sixth file and a seventh file stored thereon, wherein said second file and said fifth file are deployed from a second patch for fixing a second error and a fifth error respectively, wherein said sixth file and said seventh file are deployed from a sixth patch for fixing a sixth error and a seventh error respectively, said method comprising:
receiving from a developer system in a first time duration a fourth patch containing a fourth file and a eighth file to fix said second error and an eighth error respectively, said fourth patch received in said first time duration has a conflict with said second patch by virtue of having said fourth file to fix said second error, said fourth patch further contains an indication to persist said second patch and a fifth patch containing a ninth file and a tenth file to fix said sixth error and a tenth error respectively, wherein said fifth patch has a conflict with said sixth patch by virtue of having said ninth file to fix said sixth error, wherein said fifth patch does not contain an indication to persist said sixth patch;
deploying said fourth patch by copying said fourth file and said eighth file to said system in spite of conflict with said second patch due to said persist indication in said fourth patch, but not removing said second file and said fifth file from said system in response to said indication to persist said second patch;
wherein said fourth patch is deployed in said system after said first time duration.
8. The method of claim 7, wherein said indication is received in the form of metadata from said developer system.
9. The method of claim 7, wherein a first file is stored on said system prior to said first duration, wherein said first file is deployed from a first patch for fixing a first error,
11. The set of systems of claim 10, wherein said indication of said metadata is contained in said fourth patch.
12. The set of systems of 11, wherein said patch tool is further operable to:
receive a request to roll back said fourth patch in said run time system; and
said patch tool to remove said fourth file and said eighth file from said run time system to effect roll back of said fourth patch,
wherein said remove ensures that said run time system is restored to a state corresponding to operation of said second file.
13. The set of systems of claim 12, wherein said patch tool is further operable to:
receive a request to roll back said third patch in said run time system;
remove said third file from said run time system to effect roll back of said third patch;
receive another request to deploy said first patch in said run time system; and
redeploy said first patch in said system to ensure that said system is restored to a state corresponding to operation of said software at said first time instance.
16. A set of systems comprising:
a run time system having a software pre-installed at a first time instance, said software pre-installed having a plurality patches pre-deployed at said first time instance, wherein each of said plurality of patches contains a corresponding set of files which are designed to fix corresponding errors when copied to said system,
wherein said pre-installed software on said system is pre-deployed with a second patch for fixing a second error and a fifth error,
said pre-installed software further containing a sixth patch for fixing a sixth error and a seventh error,
said second patch containing a second file and a fifth file and said sixth patch containing a sixth file and a seventh file stored on said run-time system;
a developer system to provide a fourth patch, a fifth patch and a meta data, said fourth patch containing a fourth file to further fix said second error by replacing said second file on said system, said fourth patch further containing a eighth file to fix a eighth error,
said meta data provided by said developer system containing an indication to persist said second patch pre-installed at said first time instance,
said fifth patch containing a ninth file to further fix said sixth error for replacing said sixth file on said system and a tenth file to fix a tenth error, said meta data provided by said developer system not containing an indication to persist said sixth patch pre-installed at said first time instance; and
a patch tool to receive said fourth patch, said fifth patch and said meta data in a first duration after said first time instance, said patch tool to deploy said fourth patch by copying said fourth file to said system, but not removing said second file in said system in response to said indication to persist received in said meta data, said patch tool not to deploy said fifth patch in response to no indication to persist said sixth patch received in said meta data,
wherein said fourth patch is deployed in said system after said first duration,
said patch tool being implemented external to said developer system.
17. The set of systems of claim 16, wherein a first file is stored on said run-time system prior to said first duration, wherein said first file is deployed from a first patch for fixing a first error,
wherein a third patch containing a third file to fix said first error is received in said first duration by said patch tool,
wherein said patch tool deploys said third patch by copying said third file to said system after said first time duration, wherein said first file is removed from said pre-installed software by said deploying of said third patch.
18. The system of claim 17, wherein said patch tool is further operable to:
US11/626,357 2007-01-23 2007-01-23 Simplifying rollback to prior versions of patches used to fix errors in pre-installed software Active 2030-05-01 US8065672B2 (en)
US11/626,357 US8065672B2 (en) 2007-01-23 2007-01-23 Simplifying rollback to prior versions of patches used to fix errors in pre-installed software
US11/626,357 Active 2030-05-01 US8065672B2 (en) 2007-01-23 2007-01-23 Simplifying rollback to prior versions of patches used to fix errors in pre-installed software
US20080307407A1 (en) * 2007-06-08 2008-12-11 Andre Wagner Method and system for automatically classifying and installing patches on systems
US20090187900A1 (en) * 2008-01-22 2009-07-23 Canon Kabushiki Kaisha Information processing apparatus, system, method, and storage medium
US20110107070A1 (en) * 2008-06-23 2011-05-05 Grig Barbulescu Patching of a read-only memory
US20110161947A1 (en) * 2009-12-28 2011-06-30 International Business Machines Corporation Virtual machine maintenance with mapped snapshots
US20130311613A1 (en) * 2012-05-17 2013-11-21 International Business Machines Corporation Updating Web Resources
US8762980B1 (en) * 2010-09-09 2014-06-24 Symantec Corporation Rolling incremental updates
US8997082B1 (en) * 2013-07-16 2015-03-31 Amazon Technologies, Inc. Differential patch of content
US20170039051A1 (en) * 2015-08-05 2017-02-09 Spectra Logic Corporation Co-existing dedicated system software and read/writeable data storage space on removable media
US9594549B2 (en) 2013-03-15 2017-03-14 International Business Machines Corporation Automated patch generation
US9613405B2 (en) * 2014-07-24 2017-04-04 Adobe Systems Incorporated Scalable massive parallelization of overlapping patch aggregation
US10261771B1 (en) 2017-11-30 2019-04-16 Bank Of America Corporation Environment mapping and patching synthesis
US20070167362A1 (en) * 2006-01-18 2007-07-19 Staidson (Beijing) Pharmaceutical Co., Ltd. Medicines containing nerve growth factor for assisting losing weight and methods for assisting losing weight using same
EP2160899B1 (en) * 2007-07-02 2019-05-08 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Apparatus and method for storing and reading a file having a media data container and a metadata container
US8423993B2 (en) * 2008-02-29 2013-04-16 Red Hat, Inc. Systems and methods for managing software patches
US20100153942A1 (en) * 2008-12-12 2010-06-17 Lazar Borissov Method and a system for delivering latest hotfixes with a support package stack
US8893106B2 (en) * 2010-03-15 2014-11-18 Oracle International Corporation Change analysis on enterprise systems prior to deployment
US9063819B2 (en) * 2011-01-02 2015-06-23 Cisco Technology, Inc. Extensible patch management
US8887149B2 (en) 2012-02-21 2014-11-11 Microsoft Corporation Time shift configuration management for software product installation
US9720688B1 (en) * 2016-01-25 2017-08-01 International Business Machines Corporation Extensible change set conflict and merge gap detection
US10333965B2 (en) * 2016-09-12 2019-06-25 Qualcomm Incorporated Methods and systems for on-device real-time adaptive security based on external threat intelligence inputs
US5768566A (en) * 1996-03-01 1998-06-16 Microsoft Corporation Method and facility for uninstalling a computer program package
US6161218A (en) * 1996-01-16 2000-12-12 Sun Microsystems Inc. Software patch architecture
US6347397B1 (en) * 1999-03-29 2002-02-12 International Business Machines Corporation System, method, and program for providing an object-oriented install architecture
US6363524B1 (en) * 1999-09-10 2002-03-26 Hewlett-Packard Company System and method for assessing the need for installing software patches in a computer system
US6378127B1 (en) * 1998-09-21 2002-04-23 Microsoft Corporation Software installation and validation using custom actions
US6438749B1 (en) * 1999-03-03 2002-08-20 Microsoft Corporation Method and system for restoring a computer to its original state after an unsuccessful patch installation attempt
US6477703B1 (en) * 1999-06-29 2002-11-05 Hewlett-Packard Company Software patch selection tool
US6490723B1 (en) * 1999-11-30 2002-12-03 Dell Products L.P. Method and system for installing files in a computing system
US20040250247A1 (en) * 2003-06-09 2004-12-09 Sun Microsystems, Inc. Extensible software installation and configuration framework
US6954928B2 (en) * 2001-08-08 2005-10-11 Hewlett-Packard Development Company, L.P. Method for selecting a set of patches to update a system of programs
US20060048129A1 (en) * 2004-08-31 2006-03-02 Microsoft Corporation Patch un-installation
US20060048134A1 (en) * 2004-08-31 2006-03-02 Microsoft Corporation Multiple patching
US20060085685A1 (en) * 2004-10-13 2006-04-20 International Business Machines Corporation System and method for computer system rejuvenation
US20060136895A1 (en) * 2004-12-20 2006-06-22 Microsoft Corporation Customizing an application through a patch
US20060206757A1 (en) * 2005-03-09 2006-09-14 Russell Michael D System and method for managing software patches
US20070006209A1 (en) * 2005-06-30 2007-01-04 Oracle International Corporation Multi-level patching operation
US20070006208A1 (en) * 2005-06-30 2007-01-04 Oracle International Corporation Fault-tolerant patching system
US20070113225A1 (en) * 2005-10-11 2007-05-17 Bea Systems, Inc. Patch management system
US20080178173A1 (en) * 2007-01-23 2008-07-24 Oracle International Corporation Enhanced Flexibility in Deployment of Patches to Fix Errors in Pre-installed Software
US20080178167A1 (en) * 2007-01-23 2008-07-24 Oracle International Corporation Deploying Patches in Batch Mode to Fix Errors in Pre-installed Software
US7458074B2 (en) * 2001-03-30 2008-11-25 International Business Machiens Corporation Method and apparatus for installing and upgrading an application in a computer system
US7552430B2 (en) * 2004-08-31 2009-06-23 Microsoft Corporation Patch sequencing
US7562356B2 (en) * 2004-09-22 2009-07-14 Hewlett-Packard Development Company, L.P. Automatically resolving patch dependencies for a path bundle
US7603668B2 (en) * 2004-01-09 2009-10-13 Hewlett-Packard Development Company, L.P. Determining the applicability of patches for installation on a computer system
US7765538B2 (en) * 2004-10-29 2010-07-27 Hewlett-Packard Development Company, L.P. Method and apparatus for determining which program patches to recommend for installation
US7975264B2 (en) * 2007-01-23 2011-07-05 Oracle International Corporation Deploying patches in batch mode to fix errors in pre-installed software
Seshadri, S., et al., Oracle Universal Installer and OPatch User's Guide, 10g Release 2 (10.2) for Windows and UNIX, Oracle, Jun. 2005, pp. i-Index -4. *
Seshadri, S., et al., Oracle Universal Installer and OPatch User's Guide, 10g Release 2 (10.2) for Windows and UNIX, Oracle, Jun. 2005, pp. i—Index -4. *
US8205195B2 (en) * 2007-06-08 2012-06-19 Sap Ag Method and system for automatically classifying and installing patches on systems
US8966469B2 (en) * 2008-01-22 2015-02-24 Canon Kabushiki Kaisha Apparatus, method and storage medium for determining versions and updating software
US8458688B2 (en) * 2009-12-28 2013-06-04 International Business Machines Corporation Virtual machine maintenance with mapped snapshots
US9921821B2 (en) 2012-05-17 2018-03-20 International Business Machines Corporation Updating web resources
US10282191B2 (en) 2012-05-17 2019-05-07 International Business Machines Corporation Updating web resources
US9525587B2 (en) * 2012-05-17 2016-12-20 International Business Machines Corporation Updating web resources
US9529586B1 (en) 2013-07-16 2016-12-27 Amazon Technologies, Inc. Differential patching of content
US9817647B2 (en) * 2015-08-05 2017-11-14 Spectra Logic Corporation Co-existing dedicated system software and read/writeable data storage space on removable media
US8549513B2 (en) 2013-10-01 Model-based virtual system provisioning
CN100365569C (en) 2008-01-30 System and method for setup of software applied program according to influence-free ways
US6353926B1 (en) 2002-03-05 Software update notification
US8347263B1 (en) 2013-01-01 Repository including installation metadata for executable applications
EP1497721B1 (en) 2015-04-01 A software distribution method and system
US8448160B2 (en) 2013-05-21 Application programming interface for identifying, downloading and installing applicable software updates
US8856724B2 (en) 2014-10-07 Systems and methods for incremental software development
CN101288070B (en) 2010-09-29 Extensible meta-data
US6711557B1 (en) 2004-03-23 Client-based background update monitoring
RU2429529C2 (en) 2011-09-20 Dynamic configuration, allocation and deployment of computer systems
US20060282479A1 (en) 2006-12-14 Methods, systems, and computer program products for provisioning software using local changesets that represent differences between software on a repository and a local system
US6117187A (en) 2000-09-12 Automatic generation of a software installation package
US8495615B2 (en) 2013-07-23 Method, system and computer program for distributing software patches
US6920631B2 (en) 2005-07-19 Software installation and validation using custom actions
US8037471B2 (en) 2011-10-11 Systems and methods for constructing relationship specifications from component interactions
US20050028143A1 (en) 2005-02-03 Automated semantic-based updates to modified code base
US7484223B2 (en) 2009-01-27 System and method for building a run-time image from components of a software program
JP2009525522A (en) 2009-07-09 Context-based code analysis
CN101821711B (en) 2013-05-01 Binary library
JP2004303252A (en) 2004-10-28 Peripheral device driver maintenance and management scheme for peripheral device client connected by network
KR100952251B1 (en) 2010-04-09 Servicing a component base software product
US20030195951A1 (en) 2003-10-16 Method and system to dynamically detect, download and install drivers from an online service
US7458074B2 (en) 2008-11-25 Method and apparatus for installing and upgrading an application in a computer system
US7934210B1 (en) 2011-04-26 System and method for updating one or more programs and their environment
AU2002325054B2 (en) 2008-05-08 Method and apparatus for smart directories for application deployment
Owner name: ORACLE INTERNATIONAL CORPORATION, CALIFORNIA
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:SRIRAM, VIJAY NICHINBATL, MR.;NGUYEN, PHIDIEN, MR.;GANGULY, SHAMIK, MR.;REEL/FRAME:018794/0150;SIGNING DATES FROM 20070118 TO 20070122
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:SRIRAM, VIJAY NICHINBATL, MR.;NGUYEN, PHIDIEN, MR.;GANGULY, SHAMIK, MR.;SIGNING DATES FROM 20070118 TO 20070122;REEL/FRAME:018794/0150
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:NGUYEN, PHIDIEN;REEL/FRAME:025820/0453


text:
Ports of Auckland orders world's first full-size electric tug
By Baird Maritime - August 5, 2019
Written by Baird Maritime on August 5, 2019 . Posted in Ausmarine - Shipping and Offshore, Harbour Tugs and Operation.
Image: Damen – The Ports of Auckland's future electric tug will be based on Damen's 25- by 13-metre RSD tug series.
Ports of Auckland has signed a contract with Damen Shipyards Group for the world's first full-size, fully electric port tug.
The reverse stern drive (RSD) vessel will have a length of 25 metres, a beam of 13 metres, and a bollard pull of 70 tonnes.
Delivery is scheduled for 2021.
Ports of Auckland CEO Tony Gibson said that up to NZ$12 million (US$7.82 million) in operating cost savings would be realised over the electric tug's expected service life of 25 years.
Baird Maritime
The best maritime site on the web. The sea's our scene!
Ports of Auckland announces first half results
Portugal to get "world's first full electric river vessel"
Kenya Ports Authority acquires new tug
Ports Authority Tonga inaugurates new tug
First Damen tug for Ocean
Tags: Damen Damen Shipyards Group New Zealand Ports of Auckland WBW order
Jianglong delivers high-speed ferry to Philippine operator
Bollinger Shipyards delivers 35th FRC to US Coast Guard
Launched in 1978, Ausmarine is the leading source of information and inspiration for the Australian and New Zealand commercial, government and military marine sector.
This online magazine, updated daily, is the clear leader in its field.
Contact us: ausmarine@baird.com.au

redpajama_set_name: RedPajamaCommonCrawl


text:
KBLL oder KBLL-FM (Branding: " Hot Country 99,5 "; Slogan: " Helena's number one station ") ist ein US-amerikanischer Hörfunksender in Helena im US-Bundesstaat Montana. KBLL-FM sendet auf der UKW-Frequenz 99,5 MHz. Das Musiksendeformat ist auf Countrymusik ausgerichtet. Eigentümer und Betreiber ist die Ccr-Helena IV, LLC.

Siehe auch
 KBLL (Mittelwellensender)

Einzelnachweise

Hörfunksender (Vereinigte Staaten)
Country-Sender (Hörfunk)
Helena (Montana)
KBLL
Medienunternehmen (Montana)
Unternehmen (Lewis and Clark County)

redpajama_set_name: RedPajamaWikipedia


BV B steel supplier-BBN STEEL produced and exported ASTM A131, AH32, DH32, EH32, AH36, EH36, ABS, LR, GL, CCS, RINA, DNV, BV Shipbuilding Steel Plate.
AnYang FuRui Steel - of BV Grade B Ship Steel Plate in Jinshui East Road, Zhengzhou, Henan, China. Get deals on BV Grade B Ship Steel Plate at Tradeindia.
bv steel ship rules part b supplier in China specification can be offered by KATALOR ,we are professional bv steel ship rules part b supplier in China suppliers and manufacturer in China, if you need bv steel ship rules part b supplier in China price and application ,please contact us.
Buy high quality Bv A, Bv B, Bv D, Bv E, Steel Plate by Henan HZZ Iron And Steel Co., Ltd.. Supplier from China. Product Id 682128.
Quality Steel Plate BV Grade AH32,steel BV Grade AH36, BV Grade AH40 spec,BV Grade A ship plate, BV Grade B for sale - buy cheap Steel Plate BV Grade AH32,steel BV Grade AH36, BV Grade AH40 spec,BV Grade A ship plate, BV Grade B from Stainless Steel manufacturers & Stainless Steel supplier of China (92123935).
We are a full service steel trading firm supplying fabricators and end users. We supply a wide range of products from rods, angles, rebar, wire mesh, plate, beams and square and round tubes.


Q: Should costs of developing a web site and other software costs be capitalized in a small NPO? Four answers.
This post is cross-posted from my other blog, Nonprofit Update. It might be helpful to give your clients an introduction to the issue of whether to capitalize software costs. Anything more than a survey will need your input. You can apply the rules to your client's specific situation.
Sure-you-want-to-bother answer: Think carefully in terms of materiality. If you have no external reporting obligation, think really seriously whether it makes any difference for your internal reporting. If you issue compiled, reviewed, or audited financial statements to outsiders, evaluate carefully whether the amounts involved are actually material.
What passes for a brief answer from a CPA: A few comments focused on small NPOs which won't be complete or detailed. Please understand this is a high-level summary.
Here's the overall answer: the costs of developing software that will be used internally by an organization should be capitalized, assuming the software isn't going to be sold to others.
The accounting rules can be found in section 350-40 of the Accounting Standards Codification. The costs of purchasing the software or hiring a consultant to develop it should be included. Also included would be the time of your staff; however see answer #2 above. Include only costs incurred after developing the implementation plan and selecting the software or consultant. Capitalized costs include those to develop or install the software. Include cost of conversion of old data to the new system.
Training costs and on-going maintenance costs are expensed as you go. Don't capitalize those items.
A detailed, technical answer: Call your CPA for more qualifications, exceptions, and hair-splitting details of previous answers.


text:
College Football Pick Florida State at North Carolina State 10-28-10
#16 Florida State Seminoles (6-1) v. North Carolina State Wolfpack (5-2)
Thursday, October 28th, 2010 7:30PM EST
Line: Florida State -4
The Seminoles have been riding a five-game winning streak that has landed him at the sixteen spot for this week. North Carolina State is coming off their second loss in three weeks, losing a tough one in overtime to East Carolina, 33-27. Both teams carry potent offenses with a variable amount of playmakers, making this meeting a close one.
Keys to the Game:
– North Carolina State had a total of 476 yards on offense in their loss last week, but the defense gave up 496 yards, earning them their loss. NC State's quarterback, Russell Wilson threw for 322 yards but had three interceptions along with his one touchdown pass. The Wolfpack will need to limit mistakes and play some defense to stand a chance against the Seminoles.
– The Seminoles didn't need a stellar performance from their junior running back, Jermaine Thomas. The running back only had five carries this time around, gaining a span of 44 yards. Christian Ponder helped the Seminoles by throwing for two touchdowns, but had a season-high of three picks.
– The Seminoles have rebounded well since their 47-17 loss to Oklahoma on their second week. The team is ranked 19th in the nation in rushing yards, averaging 211.7 rushing yards per game this season. The defense has also been a force to be reckoned; allowing only 16.1 points per game, their 13th in the nation.
Free College Football Pick
This will be a heated matchup, the Wolfpack will be glad to be home after their tough loss. Their passing game is seventh in the nation, averaging 312.6 passing yards behind Wilson. It will be interesting to see how the Florida State secondary will matchup against NC State's passing game.
Free College Football Picks: Florida State -4
Written by Daniel Ramos · Filed Under Free College Football Picks


text:
Uploaded: Wed, Nov 9, 2016, 2:52 pm
Stanford golf program signs two women to letter of intent
The top-ranked Stanford women's golf team is excited to announce the signing of Mika Liu and Kelsey Zeng to National Letters of Intent. They will join the program next fall.
Liu, one of the most accomplished junior players in the country, competed for the United States in the 2016 Curtis Cup Match in Dublin, Ireland, and qualified for the U.S. Women's Open Championship.
A native of Beverly Hills, her resume includes victories at the 2016 Women's South Atlantic Amateur, 2015 USGA Women's Amateur Fourball and AJGA Thunderbird Junior Invitational, and 2014 Southern Women's Amateur and World Junior Girls' Championship.
Liu attends the IMG Academy in Bradenton, Florida, and has participated in 12 USGA championships, including six girls' junior and three women's amateurs.
A three-time AJGA Rolex All-American and three-time winner on the circuit, she reached the quarterfinals of the 2015 U.S. Women's Amateur and 2015 U.S. Girls' Junior. Liu has played in six LPGA and three Symetra Tour events.
Liu is veteran of international competition. In addition to the Curtis Cup, she competed in the 2014 and 2016 World Girls Championship in Ontario, Canada, the 2015 Ping Junior Solheim Cup in St. Leon-Rot Germany and USGA Trans-Pacific Youth Match in Beijing, China, and the 2012-13 LPGA Evian Junior Masters in Evian, France.
Liu is a member of the National Honor Society. She was a 2015 finalist for the USGA Presidents' Leadership Award, and won the Nicklaus Children's Healthcare Foundation Leadership Award.
"Mika is the epitome of a scholar-athlete," said Anne Walker, the Margot and Mitch Milias Director of Women's Golf. "She is ranked No. 24 in the world and also at the top of her academic class. Although she travels extensively to represent the U.S. on the world stage, she is 100 percent committed to her studies. We have great respect for Mika's accomplishments and can't wait to have her on campus where she can take her game to even higher levels."
Zeng, who lives in Orlando, Florida, was the 2015 Florida state high school girls class 1A individual champion and 2016 runner-up.
A senior at The First Academy, she was a 2016 AJGA Transamerica Scholastic All-American, was the 2015 Orlando Sentinel Girls and Bright House Network Girls Golfer of the Year, and team MVP, posting a low score of 64.
Liu and Zeng coming from golfing families. Liu's older brother, played for Harvard, and other brother Seiya, currently plays for the Crimson. Her older sister, Marika, was Yale's team captain and 2015 Ivy League Player of the Year.
Zeng's older sister Courtney, plays for Vanderbilt, and younger sisters Taylor and Ava are junior players.
"She will thrive in our team environment and bring a strong team spirit because she understands how to be part of a competitive family," Walker said. "She has significant experience at the state level and I believe she can transition her game easily to the collegiate level. She will be a consistent contributor to our program."
Stanford resumes competition Feb. 11-12 when it plays host to the Peg Barnard Invitational.
— Stanford Athletics