CROSS-REFERENCE TO RELATED APPLICATIONSThe present application is a continuation application under 35 U.S.C. §120 of U.S. application Ser. No. 13/511,134 filed on May 21, 2012, which is a U.S. National Stage filing under 35 U.S.C. §371 of International Application No. PCT/US11/52402, filed on Sep. 20, 2011, entitled “PEER-TO-PEER DATA MIGRATION”. International Application No. PCT/US11/52402 and U.S. application Ser. No. 13/511,134, including any appendices or attachments thereof, are hereby incorporated by reference in their entirety.
BACKGROUNDUnless otherwise indicated herein, the approaches described in this section are not prior art to the claims in this application and are not admitted to be prior art by inclusion in this section.
A communication network may include one or more nodes. These nodes may include, but are not limited to, various types of devices that may be configured to couple to the communication network via wired and/or wireless network communication links. Also, the nodes may be interconnected to other nodes in the communication network via wired and/or wireless peer-to-peer communication links. In some examples, the nodes may be further interconnected to nodes that are part of other communication networks via additional peer-to-peer communication links. As a result, nodes may be connected to both their respective communication network and to a broader peer-to-peer network.
SUMMARYIn various embodiments, the present disclosure describes example methods for peer-to-peer data migration. The example methods may include receiving data at a first node communicatively coupled to a second node via a first peer-to-peer communication link. The data may have been received via a network communication link from a data source located remote to both the first node and the second node. The data may then be stored in a public cache associated with the first node. The public cache may be maintained in a portion of memory configured to be accessible to the second node via the first peer-to-peer communication link. In some examples, a time-to-live timer for the data may be set based, at least in part, on a life span value associated with the data. The data may then be deleted from the public cache associated with the first node in response to expiration of the time-to-live timer. Also, the methods may include receiving a copy request from the second node to copy the data from the public cache associated with the first node. A determination may then be made of a location of the second node relative to a location of the first node and the time-to-live timer may be adjusted based, at least in part, on the location of the second node.
In various embodiments, the present disclosure also describes other example methods for peer-to-peer data migration. The other example methods may include maintaining a first public cache associated with a first node. The first public cache may be accessible by other nodes via one or more peer-to-peer communication links. In some examples, a directory file may be stored in the first public cache. The directory file may be configured to include information associated with data stored in a second public cache associated with a second node. The directory file may also include a location of the second node. A time-to-live timer for the directory file may be set based, at least in part, on a life span value associated with the directory file. The directory file may then be deleted from the first public cache in response to the expiration of the time-to-live timer. Also, the additional methods may include receiving a directory request from a third node for the information associated with the data included in the directory file. A determination may then be made of a location of the third node relative to a location of the first node and the time-to-live timer may be adjusted based, at least in part, on the location of the second node and the location of the third node.
In various embodiments, the present disclosure also describes example devices for peer-to-peer data migration. The example devices may include a file manager having logic. The logic may be configured to receive data at a first node coupled to a second node via a first peer-to-peer communication link. The data may be received from a data source located remote to both the first node and the second node. The logic may also be configured to store the data in a public cache associated with the first node. The public cache may be maintained in a portion of memory configured to be accessible to the second node via the first peer-to-peer communication link. The logic may also be configured to set a time-to-live timer for the data based, at least in part, on a life span value associated with the data. In some examples, the data may later be deleted from the public cache associated with the first node in response to the expiration of the time-to-live timer. The logic may also be configured to receive a copy request from the second node to copy the data from the public cache associated with the first node and determine a location of the second node relative to a location of the first node. The logic may be further configured to adjust the time-to-live timer based, at least in part, on the location of the second node.
In various embodiments the present disclosure also describes example systems that may include a memory associated with a first node. The memory may be configured to include a first public cache accessible to other nodes coupled to the first node via one or more peer-to-peer communication links. The example systems may also include a directory manager having logic. The logic may be configured to store a directory file in the first public cache, the directory file to include information associated with data stored in a second public cache associated with a second node, the directory file to also include a location of the second node. The logic may also be configured to set a time-to-live timer for the directory file based, at least in part, on a life span value associated with the directory file, wherein the directory file is to be deleted from the first public cache in response to the expiration of the time-to-live timer. The logic may also be configured to receive a directory request from a third node. The directory request may include a request for the information associated with the data stored in the second public cache included in the directory file. In some examples, the logic may be further configured to determine a location of the third node relative to a location of the first node and adjust the time-to-live timer based, at least in part, on both the location of the second node and the location of the third node.
In various embodiments, the present disclosure also describes example computer program products. In some examples, the computer program products may include a signal bearing medium having instructions for peer-to-peer data migration. The instructions, which, when executed by logic may cause the logic to receive data at a first node coupled to a second node via a first peer-to-peer communication link. The data may be received from a data source located remote to both the first node and the second node. The instructions may also cause the logic to store the data in a public cache associated with the first node. The public cache may be maintained in a portion of memory configured to be accessible to the second node via the first peer-to-peer communication link. The instructions may also cause the logic to set a time-to-live timer for the data based, at least in part, on a life span value associated with the data. In some examples, the data may later be deleted from the public cache associated with the first node in response to the expiration of the time-to-live timer. The instructions may also cause the logic to receive a copy request from the second node to copy the data from the public cache associated with the first node and determine a location of the second node relative to a location of the first node. The instructions may further cause the logic to adjust the time-to-live timer based, at least in part, on the location of the second node.
The foregoing summary is illustrative only and is not intended to be in any way limiting. In addition to the illustrative aspects, embodiments, and features described above, further aspects, embodiments, and features will become apparent by reference to the drawings and the following detailed description.
BRIEF DESCRIPTION OF THE DRAWINGSThe foregoing and other features of this disclosure will become more fully apparent from the following description and appended claims, taken in conjunction with the accompanying drawings. Understanding that these drawings depict only several embodiments in accordance with the disclosure and are, therefore, not to be considered limiting of its scope, the disclosure will be described with additional specificity and detail through use of the accompanying drawings.
FIG. 1 illustrates an example system with nodes interconnected via one or more peer-to-peer communication links and separately coupled to one or more remote data sources via a network communication link;
FIG. 2 illustrates a block diagram of an example architecture for a file manager;
FIG. 3 illustrates a block diagram of an example architecture for a director manager;
FIGS. 4A-B illustrate graphical depictions of a node's relative position to other nodes;
FIG. 5 illustrates an example directory file;
FIG. 6 illustrates an example calling card for a node maintaining a directory file;
FIG. 7 illustrates a flow chart of example methods for peer-to-peer data migration;
FIG. 8 illustrates a flow chart of other example methods for peer-to-peer data migration;
FIG. 9 illustrates a block diagram of an example computer program product; and
FIG. 10 illustrates an example computing device;
all arranged in accordance with at least some embodiment of the present disclosure.
DETAILED DESCRIPTIONIn the following detailed description, reference is made to the accompanying drawings, which form a part hereof. In the drawings, similar symbols typically identify similar components, unless context dictates otherwise. The illustrative examples or embodiments described in the detailed description, drawings, and claims are not meant to be limiting. Other examples or embodiments may be utilized, and other changes may be made, without departing from the spirit or scope of the subject matter presented here. It will be readily understood that aspects of this disclosure, as generally described herein, and illustrated in the Figures, can be arranged, substituted, combined, and designed in a wide variety of different configurations, all of which are explicitly contemplated and make part of this disclosure.
This disclosure is drawn, inter alia, to methods, apparatus, systems and computer program products related to peer-to-peer data migration between nodes coupled via one or more peer-to-peer communication links.
As contemplated in the present disclosure, nodes may be connected to both their respective communication network and to a broader peer-to-peer network made up of other nodes. In some examples, each node in its respective communication network may obtain data from a data source that may be located remotely relative to each node. For example, a node's communication network may enable the node to couple to the data source via the Internet. The data source may be a remotely located server that provides video and/or audio data to the node. Several other nodes may also seek the same video and/or audio data from the remotely located server. The server and/or the network communication links coupling the nodes to the server may have limited capacity to handle multiple requests for the same video and/or audio data. The limited capacity may be problematic to at least some nodes receiving the video and/or audio data in a timely and error free manner.
In some examples, methods are implemented for peer-to-peer data migration. The methods may include receiving data at a first node communicatively coupled to a second node via a first peer-to-peer communication link. The data (e.g., video/audio files) may have been received via a network communication link from a data source located remote to both the first node and the second node. The data may then be stored in a public cache associated with the first node. The public cache may be maintained in a portion of memory configured to be accessible to the second node via the first peer-to-peer communication link. In some examples, a time-to-live timer for the data may be set based, at least in part, on a life span value associated with the data. The data may then be deleted from the public cache associated with the first node in response to expiration of the time-to-live timer. Also, the methods may include receiving a copy request from the second node to copy the data from the public cache associated with the first node. A determination may then be made of a location of the second node relative to a location of the first node and the time-to-live timer may be adjusted based, at least in part, on the location of the second node.
In some other examples, additional methods are implemented for peer-to-peer data migration. The additional methods may include maintaining a first public cache associated with a first node. The first public cache may be accessible by other nodes via one or more peer-to-peer communication links. In some examples, a directory file may be stored in the first public cache. The directory file may be configured to include information associated with data stored in a second public cache associated with a second node. The directory file may also include a location of the second node. A time-to-live timer for the directory file may be set based, at least in part, on a life span value associated with the directory file. The directory file may then be deleted from the first public cache in response to the expiration of the time-to-live timer. Also, the additional methods may include receiving a directory request from a third node for the information associated with the data included in the directory file. A determination may then be made of a location of the third node relative to a location of the first node and the time-to-live timer may be adjusted based, at least in part, on the location of the second node and the location of the third node.
FIG. 1 illustrates anexample system100 with nodes interconnected via one or more peer-to-peer communication links and separately coupled to one or more remote data sources via a network communication link in accordance with at least some embodiments of the present disclosure. As shown inFIG. 1, peer-to-peer system100 includesaccess points122,132 and142 via which nodes ofnetworks120,130 and140, respectively, may couple to anetwork110. Also,network110 may couple to data source(s)112 and nodes ofnetworks120,130 and140 may access data and/or content maintained at or with data source(s)112. In some examples, nodes in a respective network may separately couple to network110 through an access point via a network communication link. For example, as shown inFIG. 1,nodes121,123,125,127 and129 ofnetwork120 may couple throughaccess point122 via network communications links120A-120E. Nodes may also communicatively couple to other nodes to form a kind of peer-to-peer network that may be separate from and in addition tonetworks110,120,130 and140. For example, as shown inFIG. 1, the nodes ofsystem100 may be interconnected via peer-to-peer communication links150A-150M.
In some examples, as shown inFIG. 1, each node may include amemory160, a file manager (FM)170 and a directory manager (DM)180.Memory160 is further shown inFIG. 1 to include apublic cache162 and aprivate cache164.Pubic cache162 may be configured or arranged to maintain data and/or content and may be accessible to other nodes via one or more peer-to-peer communication links.Private cache164 may be configured or arranged to maintain data and/or content that may be only accessible to logic or features resident on or co-located with a given node (e.g., an operating system).Memory160 may include, but is not limited to various types of memory such as volatile memory, non-volatile memory, flash memory, programmable variables or states, random access memory (RAM), read-only memory (ROM), or other static or dynamic storage media.
According to some examples,node121 may receive or obtain data from data source(s)112 vianetwork communication link120A. For these examples, as shown inFIG. 1, data source(s)112 may be coupled tonetwork110 which couples tonode121'snetwork120 throughaccess point122. Sincenetwork110 is part of a separate network tonode121'snetwork120, data source(s)112 may be considered as remotely located tonode121. The data received from the data source may then be stored in thenode121'spublic cache162. The data, for example, may include a video file, an audio file, a multimedia file or a data file, although this disclosure is not limited to these example types of files.
According to some examples, downloading of the data from data source(s)112 may place a burden on or utilize a large amount of network resources. In order to lessen this burden, the data may be at least temporarily stored innode121'spublic cache162 and then made accessible to other nodes to copy. The other nodes may use peer-to-peer communication links that may be less network resource intensive and/or may enable the other nodes to more quickly obtain or copy the data compared to going to data source(s)112 to obtain the data.
In some examples,file manager170 atnode121 may include logic and/or features configured to assign and/or set a time-to-live timer for the data received from the remotely located data source. The time-to-live timer may be assigned and/or set based on a life span value associated with the data. The life span value, for example, may include a time period (e.g., in seconds, minutes, hours, etc.) for which data may remain stored innode121'spublic cache162. Upon expiration of the time-to-live timer (e.g., end of the time period) the data may be deleted fromnode121's public cache. Maintaining the data for the assigned or set time period may ensure thatnode121'spublic cache162 has additional or freed up storage capacity at a predetermined time in the future.
According to some examples,node125 may desire to copy the data at least temporarily stored innode121'spublic cache162. For these examples,node125 may send a copy request (e.g., via peer-to-peer communication link150F) tonode121.Node121 may receive the copy request andfile manager170 may include logic and/or features configured to determine a location (either logical or physical) ofnode125 relative to the location ofnode121. For example, the copy request may include location information to indicatenode125's location (e.g., global positioning system (GPS) information).File manager170 may then adjust or reset the time-to-live timer previously assigned to the data stored innode121's public cache based on the determined location ofnode125.
In some examples, the time-to-live timer may also be adjusted to a shorter time period or to longer time period based not only on the location ofnode125 but on location(s) associated with other nodes that may also place copy requests tonode121. The location ofnode125 as well as the location of the other nodes relative tonode121 may indicate tofile manager170 atnode121 that other nodes may be at a more or less centralized distribution point for sharing the data. For example,node125 is more centralized tonodes123,127 and129 thannode121 is to these nodes. As a result of being more centralized, more nodes may request the data thatnode125 has copied and stored in itspublic cache162 compared to the data currently stored innode121'spublic cache162.
In some examples, adirector manager180 atnode121 may include logic and/or features configured to store a directory file innode121'spublic cache162. As described in more detail below, the directory file may include information associated with data stored in other public caches for other nodes. For example, information associated with data that may be stored innode123'spublic cache162 and/or information associated with data that may be stored innode143'spublic cache162. The information associated with data stored in the aforementioned public caches may include an indication of a location of the respective nodes and may include other indications such as the types and sizes of data files maintained in the public caches of each of the respective nodes.
According to some examples, similar to what was described above for assigning and/or setting a time-to-live timer for data received from a remote data source,director manager180 may also include logic and/or features configured to assign and/or set a time-to-live timer for the directory file stored innode123'spublic cache162. The time-to-live timer may be assigned and/or set based on a life span value associated with the directory file. The life span value, for example, may include a time period (e.g., in seconds, minutes, hours, etc.) for which the directory file may remain stored innode123'spublic cache162. Upon expiration of the time-to-live timer (e.g., end of the time period) the data may be deleted fromnode121'spublic cache162.
In some examples, other nodes may have knowledge ofnode123's having the directory file stored in itspublic cache162. These other nodes (e.g., node125) may place a directory request to obtain information associated with data stored innode121'spublic cache162.Node123 may receive the directory request anddirectory manager180 may include logic and/or features configured to determine a location (either logical or physical) ofnode125 relative to the location ofnode123. For example, the directory request may include location information to indicatenode125's location (e.g., GPS information).Directory manager180 may then adjust or reset the time-to-live timer previously assigned to the directory file stored innode123'spublic cache162 based on the determined location ofnode125.
In some examples, the time-to-live timer may be adjusted to a shorter time period or to longer time period based not only on the location ofnode125 but on location(s) associated with other nodes that may also place directory requests tonode123. The location ofnode125 as well as the location of the other nodes relative tonode123 may indicate todirectory manager180 atnode123 that other nodes may be at a more or less centralized distribution point for sharing information included in its stored directory file. For example,node121 may be more centralized tonodes143,121 and125 thannode123 is to these nodes. As a result of being more centralized, more nodes may request a directory file stored innode121'spublic cache162 than the currently stored directory file innode123'spublic cache162.
According to some examples,networks120,130 and140 may be part of wired and/or wireless local access networks or wide area networks that may enable nodes to couple tonetwork110. For these examples,network110 may be the Internet and although not shown inFIG. 1, data source(s)112 may be part of other networks coupled tonetwork110 and thus may be considered as remotely located to the nodes ofsystem100 included innetworks120,130 and140. The network communication links depicted insystem100 may operate in accordance with one or more wired and/or wireless standards. These wired and/or wireless standards may be described in one or one or more industry standards such as those associated with IEEE, 802.1, IEEE 802.11, IEEE 802.16, GSM, GPRS, EDGE, W-CDMA, HSPA, CDMA-2000, EV-DO, LTE or TD-LTE. Although this disclosure is not limited to only the above-mentioned wired and/or wireless standards.
In some examples, the peer-to-peer communication links shown inFIG. 1 may also operate in accordance with one or more wired and/or wireless standards as mentioned above. However, the nodes ofsystem100 may be able to share resources (e.g., public caches) through the peer-to-peer communication links without the need for centralized coordination. These peer-to-peer communication links may be established via wired and/or wireless local access networks or wide area networks that may operate in accordance with the industry standards mentioned above. The peer-to-peer communication links may also be established via direct node to node links using wireless technologies such as Bluetooth™.
FIG. 2 illustrates a block diagram of an example architecture for a file manager in accordance with at least some embodiments of the present disclosure. As described above forsystem100 inFIG. 1, each node may include a file manager, such asfile manager170. In some examples,file manager170 includes features and/or logic configured or arranged to receive data via a network communication link and facilitate peer-to-peer data migration between nodes coupled via one or more peer-to-peer communication links.
Theexample file manager170 ofFIG. 2 includesfile logic210,control logic220, amemory230, input/output (I/O) interfaces240 and optionally one ormore applications250. As illustrated inFIG. 2, filelogic210 is coupled to controllogic220,memory230 and I/O interfaces240. Also illustrated inFIG. 2, theoptional applications250 are arranged in cooperation withcontrol logic220.File logic210 may further include one or more of acache feature211, a receivefeature213, atimer feature215, arequest feature217, or an adjustfeature219, or any reasonable combination thereof.
In some examples, the elements portrayed inFIG. 2's block diagram are configured to support or enablefile manager170 as described in this disclosure. A givenfile manager170 may include some, all or more elements than those depicted inFIG. 2. For example, filelogic210 andcontrol logic220 may separately or collectively represent a wide variety of logic device(s) to implement the features offile manager170. An example logic device may include one or more of a computer, a microprocessor, a microcontroller, a field programmable gate array (FPGA), an application specific integrated circuit (ASIC), a sequestered thread or a core of a multi-core/multi-threaded microprocessor or a combination thereof.
In some examples, as shown inFIG. 2, filelogic210 includes one or more of acache feature211, a receivefeature213, atimer feature215, arequest feature217, or an adjustfeature219.File logic210 may be configured to use one or more of these features to perform operations. As described in more detail below, example operations may include facilitating peer-to-peer data migration between nodes.
In some examples,control logic220 may be configured to control the overall operation offile manager170. As mentioned above,control logic220 may represent any of a wide variety of logic device(s) configured to operate in conjunction with executable content or instructions to implement the control offile manager170. In some alternate examples, the features and functionality ofcontrol logic220 may be implemented withinfile logic210.
According to some examples,memory230 is arranged to store executable content or instructions. The executable content or instructions may be used bycontrol logic220 and/orfile logic210 to implement or activate features or elements offile manager170. As described more below,memory230 may also be arranged to temporarily maintain information associated with assigning and/or setting a time-to-live timer for data received from a remote data source.Memory230 may also at least temporarily maintain information associated with adjusting the time-to-live time for the data based on other node location information obtained from, for example, copy requests for the data received from the other nodes.
Memory230 may include a wide variety of memory media including, but not limited to, one or more of volatile memory, non-volatile memory, flash memory, programmable variables or states, RAM, ROM, or other static or dynamic storage media.
In some examples, I/O interfaces240 may provide an interface via an internal communication medium or link between afile manager170 and elements resident on or located with a node that includes thefile manager170. I/O interfaces240 may include interfaces that operate according to various communication protocols to communicate over the internal communication link (e.g., Inter-Integrated Circuit (I2C), System Management Bus (SMBus) or Serial Peripheral Interface Bus (SPI), etc.). I/O interfaces240 may also provide an interface betweenfile manager170 and elements located remote to a node. For example, as mentioned above forFIG. 1, nodes having afile manager170 may couple to a network access point via network communication links or may couple to other nodes via one or more peer-to-peer communication links. The I/O interfaces240, for example, include an interface configured to operate according to various wired or wireless communication protocols to allowfile manager170 to communicate over these communication links (e.g., IEEE, 802.1, IEEE 802.11, IEEE 802.16, GSM, GPRS, EDGE, W-CDMA, HSPA, CDMA-2000, EV-DO, LTE, TD-LTE, Bluetooth, etc.).
In some examples,file manager170 includes one ormore applications250 to provide instructions to controllogic220 and/orfile logic210. These instructions, for example, may include instructions forfile manager170 to implement or use one or more of acache feature211, a receivefeature213, atimer feature215, arequest feature217, or an adjustfeature219.
FIG. 3 illustrates a block diagram of an example architecture for a directory manager in accordance with at least some embodiments of the present disclosure. As described above forsystem100 inFIG. 1, each node may include a directory manager, such asdirectory manager180. In some examples,directory manager180 includes features and/or logic configured or arranged to maintain a directory file in a node's public cache to facilitate peer-to-peer data migration between nodes coupled via one or more peer-to-peer communication links.
Theexample directory manager180 ofFIG. 3 includesdirectory logic310,control logic320, amemory330, input/output (I/O) interfaces340 and optionally one ormore applications350. As illustrated inFIG. 3,directory logic310 is coupled to controllogic320,memory330 and I/O interfaces340. Also illustrated inFIG. 3, theoptional applications350 are arranged in cooperation withcontrol logic320.Directory logic310 may further include one or more of acache feature311, aninformation feature313, atimer feature315, arequest feature317, or an adjustfeature319, or any reasonable combination thereof.
In some examples, the elements portrayed inFIG. 3's block diagram are configured to support or enabledirectory manager122 as described in this disclosure. A givendirectory manager180 may include some, all or more elements than those depicted inFIG. 3. For example,directory logic310 andcontrol logic320 may separately or collectively represent a wide variety of logic device(s) to implement the features ofdirectory manager180. An example logic device may include one or more of a computer, a microprocessor, a microcontroller, a field programmable gate array (FPGA), an application specific integrated circuit (ASIC), a sequestered thread or a core of a multi-core/multi-threaded microprocessor or a combination thereof.
In some examples, as shown inFIG. 3,directory logic310 includes one or more of acache feature311, aninformation feature313, atimer feature315, arequest feature317, or an adjustfeature319.Directory logic310 may be configured to use one or more of these features to perform operations. As described in more detail below, example operations may include storing a directory file at a node's public cache that has information associated with data stored in the public cache of other nodes and accessible via one or more peer-to-peer communication links.
In some examples,control logic320 may be configured to control the overall operation ofdirectory manager180. Similar to controllogic220 mentioned above,control logic320 may represent any of a wide variety of logic device(s) configured to operate in conjunction with executable content or instructions to implement the control ofdirectory manager180. In some alternate examples, the features and functionality ofcontrol logic320 may be implemented withindirectory logic310.
According to some examples,memory330 is arranged to store executable content or instructions. The executable content or instructions may be used bycontrol logic320 and/ordirectory logic310 to implement or activate features or elements ofdirectory manager180. As described more below,memory330 may also be arranged to temporarily maintain information associated with assigning and/or setting a time-to-live timer for a directory file maintained in a node's public cache.Memory330 may also at least temporarily maintain information associated with adjusting the time-to-live time for the directory file based on other node location information obtained from, for example, directory requests received from the other nodes.
Memory330 may include a wide variety of memory media including, but not limited to, one or more of volatile memory, non-volatile memory, flash memory, programmable variables or states, RAM, ROM, or other static or dynamic storage media.
In some examples, similar to I/O interfaces240 described above, I/O interfaces340 may provide an interface via an internal communication medium or link betweendirectory manager180 and elements resident on or located with a node that includes thedirectory manager180. Also similar to I/O interface240, I/O interfaces340 may also provide an interface betweendirectory manager180 and elements remote to a node. For example, as mentioned above forFIG. 1, nodes having adirectory manager180 may couple to a network access point via network communication links or may couple to other nodes via one or more peer-to-peer communication links. The I/O interfaces340, for example, include an interface configured to operate according to various wired or wireless communication protocols to allowdirectory manager180 to communicate over these communication links (e.g., IEEE, 802.1, IEEE 802.11, IEEE 802.16, GSM, GPRS, EDGE, W-CDMA, HSPA, CDMA-2000, EV-DO, LTE, TD-LTE, Bluetooth, etc.).
In some examples,directory manager180 includes one ormore applications350 to provide instructions to controllogic320 and/ordirectory logic310. These instructions, for example, may include instructions fordirectory manager180 to implement or use one or more of acache feature311, aninformation feature313, atimer feature315, arequest feature317, or an adjustfeature319.
FIGS. 4A-B illustrate graphical depictions of a node's relative position to other nodes in accordance with at least some embodiments of the present disclosure. As shown inFIGS. 4A-B,node121's relative position to various other nodes ofsystem100 is depicted utilizing a square grid graph labeled as graph400. Each distance unit marked on the x-axis or the y-axis of graph400 may represent a measure of relative distance betweennode121 and other nodes ofsystem100. For example, a distance unit may be a given number of meters or other units of distance. As shown inFIG. 4A, in some examples,node121's relative location on graph400 may indicate thatnode121 may be aware of the locations ofnodes143,123 and125. For this example,node121 may have become aware of each of these nodes' relative locations based on copy or directory requests received from these nodes or through other means. For example, as individual requests are received atnode121,file manager170 ordirectory manager180 atnode121 may include logic or features configured to first determine the location of the node making the request. The logic or features offile manager170 ordirectory manager180 may also be configured to then determinenode121's relative location to not only the node that sent the request but also to other nodes to which the logic or features may know of their locations. As graph400 depicts inFIG. 4A,node121 is in a relatively centralized location (e.g., closest to center of x/y axis) as compared tonodes143,123 and125.
FIG. 4B shows an example wherenode121's relative position is no longer in a centralized location relative to other nodes insystem100. In some examples,node121 may become aware of the location ofnode129. As shown inFIG. 4B,node125 is now in a centralized location relative to the other nodes andnode121's relative position tonodes143,123,125 and129 has shifted away from a centralized location on graph400.
According to some examples,file manager170 ordirectory manager180 may include logic and/or features configured to adjust a time-to-live timer set for data or a directory file stored innode121's public cache based on changes innode121's relative position to other nodes. For example, ifnode121 became aware of another node's location such thatnode121 shifted away from a centralized location relative to other nodes insystem100, then the time-to-live timer may be adjusted to expire sooner. For this example, the expedited expiration of the time-to-live timer may be a result of thefile manager170 or thedirectory manager180 atnode121 determining that other nodes may be in a more favorable location for data migration insystem100. Alternatively, ifnode121 shifted towards a more centralized relative location, then the time-to-live timer may be adjusted to expire later because ofnode121's more favorable location for data migration insystem100.
FIG. 5 illustrates anexample directory file500 in accordance with at least some embodiments of the present disclosure. As shown inFIG. 5,directory file500 includes information associated with data stored in the public caches of various nodes ofsystem100. In some examples,directory file500 may be stored innode121'spublic cache162. For these examples, as shown inFIG. 5, the information associated with data stored in each node's respectivepublic cache162 includes acolumn510 for node identifications (IDs), acolumn520 for node locations, acolumn530 for addresses of data sources, acolumn540 for sizes of data (e.g., indicated in bytes), acolumn550 for times a respective node took to download the data from a given data source, acolumn560 for dates/times of downloads and acolumn570 for an estimate of time-to-live values associated with data stored in respective public caches for each node listed indirectory file500.
In some examples, a node's location indicated incolumn520 may be a GPS coordinate or other location means (physical or logical) via which nodes ofsystem100 may be able to determine their relative locations. The data source address indicated incolumn530 may be an Internet address that indicates where the data was obtained. The data size incolumn540 may indicate how large in memory units (e.g., bytes) the data may be. The time to download incolumn550 may indicate how responsive the data source was at the time the data was downloaded by the node. The data/time the data was downloaded indicated incolumn550 may be utilized in some examples to estimate the time-to-live value and approximately indicate how long the node may keep the data stored in its public cache before it will be deleted.
According to some examples, adirectory manager180 atnode121 may include logic and/or features configured to storedirectory file500 innode121'spublic cache162. Nodes ofsystem100 may place directory requests tonode121 seeking information on data stored in the public caches of other nodes insystem100. Thedirectory manager180 atnode121 may assign or set a time-to-live timer fordirectory file500 based on a life span value. Thedirectory manager180 may also adjust the time-to-live timer based on the location of nodes that may place directory requests tonode121. Similar to what was described above forFIG. 1, once the time-to-live timer expires,directory manager180 may delete directory file500 fromnode121'spublic cache162.
In some examples, nodes indicated indirectory file500 may indicate tonode121 that data maintained in their respective public caches has either been deleted or the time-to-live timer has been adjusted. For these examples,node121'sdirectory manager180 may include logic and/or features configured to update directory file500 to reflect either the deletion of the data or a change in the estimated time-to-live value.
According to some examples, the size ofdirectory file500 may become larger than the available memory innode121'spublic cache162. For these examples,node121'sdirectory manager180 may include logic and/or features configured to decline to add additional information to directory file500 and to indicate to the node providing the information that information associated with data stored in that node's public cache will not be included indirectory file500. Alternatively,directory manager180 may remove information associated with other data stored in the public cache of another node. For this alternative,directory manager180 may include logic and/or features to implement one or more schemes (e.g., first-in-first-out, weighted round-robin, etc.) to determine what information to remove fromdirectory file500 to make room for the new information. The node having information removed fromdirectory file500 may then be notified of the removal of the information.
FIG. 6 illustrates anexample calling card600 for a node maintaining a directory file in accordance with at least some embodiments of the present disclosure. As shown inFIG. 6, callingcard600 includes abbreviated information from the information included indirectory file500. That abbreviated information is shown inFIG. 6 as Node IDs incolumn610, node locations incolumn620 and data source addresses incolumn630. In some examples,node121 may providecalling card600 to a node after the node has provided information tonode121 about data maintained in the node's public cache. For example, ifnode127 ofsystem100 sent or forwarded information regarding data stored in itspublic cache162, thennode121'sdirectory manager180 may include logic and/or features configured to updatedirectory file500. Callingcard600 may then be sent tonode127 and to other nodes to indicate at least a portion of the information included indirectory file500.Directory manager180 may also send an updated calling600 to other nodes insystem100. The updatedcalling card600 may indicate thatnode121 now maintains information about data stored innode127'spublic cache162.
FIG. 7 illustrates a flow chart of example methods for peer-to-peer data migration in accordance with at least some embodiments of the present disclosure. In some examples,system100 as shown inFIG. 1 is used to illustrate example methods related to the flow chart depicted inFIG. 7. Afile manager170 as shown inFIG. 2 may also be used to illustrate the example methods. But the described methods are not limited to implementations onsystem100 as shown inFIG. 1 or to thefile manager170 shown inFIG. 2. The example methods may be implemented on other systems having one or more of the elements depicted inFIG. 1 orFIG. 2.
Beginning at the start and moving to block710 (Receive Data),file manager170 ofnode121 may include logic and/or features configured to receive data (e.g., via receive feature213) from data source(s)112 vianetwork communication link120A. In some examples, the data may include one or more of a video file, an audio file, a multimedia file or a data file. In some other examples, the data may include a first portion of a video file, an audio file, a multimedia file or a data file. For example, a second portion of the video file, the audio file, the multimedia file or the data file may be stored in a separate public cache associated with another node (e.g., node123). Separately storing portions of these files may allow for very large files to be received from a data source via one or more network communication links and then stored in more than one node to be distributed to other nodes via peer-to-peer communication links.
Continuing fromblock710 to block720 (Store Data),file manager170 may include logic and/or features configured to store the received data (e.g., via cache feature211) in apublic cache162 maintained in a portion ofmemory160 ofnode121. In some examples, a given node'spublic cache162 such as that ofnode121'spublic cache162 may be configured based on an incentive program that may including receiving a billing credit, a cash subsidy, or an equipment subsidy. For these examples, the incentive program may be offered to a user of node121 (e.g., a smart phone, tablet, laptop computer, desktop computer, etc) by an operator that maintains network communication links innetwork120. The incentive may be offered to the user ofnode121 in exchange for providing public access to and allowing a portion ofmemory160 to be configured to includepublic cache162. Such incentives may be beneficial to the operator ofnetwork120 because the incentives encourage users to utilize peer-to-peer communication links and their own private caches rather than network communication links to obtain data.
Continuing fromblock720 to block730 (Set Time-to-Live Timer),file manager170 may include logic and/or features configured to set a time-to-live timer based, at least in part, on a life span value associated with the data (e.g., via timer feature215). In some examples, the life span value associated with the data may be based on several more criteria. For example, a small life span value may be associated with the data due to low or limited available storage capacity innode121's public cache or due to limited available bandwidth fornode121 to couple to one or more other nodes via peer-to-peer communication links. Also, a small life span value may be the result of a small time window fornode121 to maintain peer-to-peer communication links with other nodes (e.g.,node121 may be moving or trying to conserve power). As a result of at least some of the limitations mentioned above, the time-to-live timer may be set to expire in a relatively short period of time (e.g., in a few minutes).
Continuing fromblock730 to decision block740 (Receive Copy Request?),file manager170 may include logic and/or features configured to determine whether a copy request has been received (e.g., via request feature217) from another node insystem100. In some examples, the copy request may be received fromnode125 via peer-to-peer communication link150F and may include an indication of whatdata node125 is seeking. If a copy request has been received,request feature217 may then allownode125 to accessnode121'spublic cache162 to copy the data requested and then the process moves to block750. Otherwise processing moves fromdecision block740 todecision block780.
Continuing fromdecision block740 to block750 (Determine Location),file manager170 may include logic and/or features configured to determine a location of a node125 (e.g., via request feature217). In some examples, the copy request may include an indication ofnode125's location. For example,node125 may have GPS capabilities and may include GPS information in the copy request to indicatenode125's physical position at the time of placing the request. In other examples, the copy request may include a type of network address via whichfile manager180 ofnode121 may be able to determine a logical and/or physical location ofnode125.
Continuing fromblock750 to decision block760 (Adjust Time-to-Live Timer?),file manager170 may include logic and/or features configured to determine whether the time-to-live timer needs to be adjusted (e.g., via adjust feature219). In some examples, the determination may be based on whethernode121's relative position tonode125 and other nodes ofsystem100 has changed. Ifnode121's relative position has changed, processing may move fromdecision block760 to block770. Otherwise, processing continues fromdecision block760 todecision block780.
Continuing fromdecision block760 to block770 (Adjust Time-to-Live Timer),file manager170 may include logic and/or features configured to adjust the time-to-live timer associated with the requested data (e.g., via adjust feature219) based on changes innode121's relative location. For example, as mentioned above forFIGS. 4A and 4B,node121's relative position may change from a centralized position to a less centralized position. In a less centralized position, adjustfeature219 may adjust the time-to-live timer to expire sooner. Conversely, in a more centralized position, adjustfeature219 may adjust the time-to-live timer to expire later.
Continuing from block770 to decision block780 (Timer Expired?),file manager170 may include logic and/or features configured to determine whether the time-to-live timer has expired (e.g., via timer feature215). If the time-to-live timer has expired the data is deleted fromnode121'spublic cache162 and the process comes to an end. Otherwise, the process moves back todecision block740.
FIG. 8 illustrates a flow chart of other example methods for peer-to-peer data migration in accordance with at least some embodiments of the present disclosure. In some examples,system100 as shown inFIG. 1 is used to illustrate example methods related to the flow chart depicted inFIG. 8. Adirectory manager180 as shown inFIG. 3 may also be used to illustrate the example methods. But the described methods are not limited to implementations onsystem100 as shown inFIG. 1 or to thedirectory manager180 shown inFIG. 3. The example methods may be implemented on other systems having one or more of the elements depicted inFIG. 1 orFIG. 3.
Beginning at the start and moving to block810 (Maintain Public Cache),directory manager180 ofnode123 may include logic and/or features configured to maintain apublic cache162 in a portion of memory160 (e.g., via cache feature311). In some examples, as mentioned above, a given node'spublic cache162 may be configured based on an incentive program that may include receiving a billing credit, a cash subsidy, or an equipment subsidy. For these examples, incentives may be offered to the user ofnode123 in exchange for providing public access to and allowing a portion ofmemory160 to be configured to includepublic cache162 for use as a place to store one or more directory files. Such incentives may be beneficial to the operator ofnetwork120. For example, the incentives may encourage users to utilize peer-to-peer communication links and find or locate other nodes that may locally store data in a public cache rather than use network communication links and network resources to obtain data from a remote source (e.g., data source(s)112).
Continuing fromblock810 to block820 (Store Directory File),directory manager180 may include logic and/or features configured to store a directory file inpublic cache162 of node123 (e.g., via information feature313). In some examples, the directory file may include information associated with data stored in public cache(s)162 of one or more other nodes. The data, for example, may have been originally received by the one or more other nodes via a network communication link from a remotely located data source such as data source(s)112. Also, the same data may have been copied from the node that originally received the data from the remote data source, but now a copy of the data may be maintained in a separatepublic cache162 of another node. The directory file may include information identifying both these nodes as having the data or may only indicate the copying node as having the data.
Continuing fromblock820 to block830 (Set Time-to-Live Timer),directory manager180 may include logic and/or features configured to set a time-to-live timer based, at least in part, on a life span value associated with the data (e.g., via timer feature315). In some examples, the life span value associated with the directory may be based on several more criteria. For example, a small life span value may be associated with the directory file due to low or limited available bandwidth fornode123 to couple to one or more other nodes via peer-to-peer communication links. Also, a small life span value may be the result of a small time window fornode123 to maintain peer-to-peer communication links with other nodes (e.g.,node123 may be moving or trying to conserve power). As a result of at least some of the limitations mentioned above, the time-to-live timer may be set to expire in a relatively short period of time (e.g., in a few minutes).
Continuing fromblock830 to decision block840 (Receive Directory Request?),directory manager180 may include logic and/or features configured to determine whether a directory request has been received (e.g., via request feature317) from another node insystem100. In some examples, the directory request may be received fromnode125 via peer-to-peer communication link150E and may include a search or query for data and its possible location in a given node'spublic cache162. If a directory request has been received,request feature317 may then allownode125 to accessnode121'spublic cache162 to obtain directory information maintained in a directory file (e.g., directory file500) and then the process moves to block850. Otherwise processing moves fromdecision block840 todecision block880.
Continuing fromdecision block840 to block850 (Determine Location),directory manager180 may include logic and/or features configured to determine a location of a node125 (e.g., via request feature317). In some examples, the directory request may include an indication ofnode125's location. For example,node125 may have GPS capabilities and may include information in the directory request to indicatenode125's physical position at the time of placing the request. In other examples, the directory request may include a type of network address via whichdirectory manager180 ofnode123 may be able to determine a logical and/or physical location ofnode125.
Continuing fromblock850 to decision block860 (Adjust Time-to-Live Timer?),directory manager180 may include logic and/or features configured to determine whether the time-to-live timer needs to be adjusted (e.g., via adjust feature319). In some examples, the determination may be based on whethernode123's relative position tonode125 and other nodes ofsystem100 has changed. Ifnode123's relative position has changed, processing may move from decision block860 to block870. Otherwise, processing continues from decision block860 todecision block880.
Continuing from decision block860 to block870 (Adjust Time-to-Live Timer),directory manager180 may include logic and/or features configured to adjust the time-to-live timer associated with the directory file (e.g., via adjust feature319) based on changes innode123's relative location. For example, similar to what was mentioned above forFIGS. 4A and 4B fornode121,node123's relative position may change from a centralized position to a less centralized position. In a less centralized position, adjustfeature319 may adjust the time-to-live timer to expire sooner. Conversely, in a more centralized position, adjustfeature219 may adjust the time-to-live timer to expire later.
Continuing from block870 to decision block880 (Timer Expired?),directory manager180 may include logic and/or features configured to determine whether the time-to-live timer has expired (e.g., via timer feature315). If the time-to-live timer has expired the directory file is deleted fromnode123'spublic cache162 and the process comes to an end. Otherwise, the process moves back todecision block840.
FIG. 9 illustrates a block diagram of an examplecomputer program product900 in accordance with at least some embodiments of the present disclosure. In some examples, as shown inFIG. 9,computer program product900 includes a signal bearing medium902 that may also include instructions904 for peer-to-peer data migration. Instructions904, which, when executed by logic (e.g., file logic210), may cause the logic to receive data at a first node coupled to a second node via a first peer-to-peer communication link. The data may be received from a data source located remote to both the first node and the second node. The instructions may also cause the logic to store the data in a public cache associated with the first node. The public cache may be maintained in a portion of memory configured to be accessible to the second node via the first peer-to-peer communication link. Instructions904 may also cause the logic to set a time-to-live timer for the data based, at least in part, on a life span value associated with the data. In some examples, the data may later be deleted from the public cache associated with the first node in response to the expiration of the time-to-live timer. Instructions904 may also cause the logic to receive a copy request from the second node to copy the data from the public cache associated with the first node and determine a location of the second node relative to a location of the first node. Instructions904 may further cause the logic to adjust the time-to-live timer based, at least in part, on the location of the second node.
Also depicted inFIG. 9, in some examples,computer program product900 may include one or more of a computerreadable medium906, arecordable medium908 and acommunications medium910. The dotted boxes around these elements depict different types of mediums included within, but not limited to, signal bearing medium902. These types of mediums may distribute instructions904 to be executed by logic (e.g., file logic210). Computerreadable medium906 andrecordable medium908 may include, but are not limited to, a flexible disk, a hard disk drive (HDD), a Compact Disc (CD), a Digital Versatile Disk (DVD), a digital tape, a computer memory, etc. Communications medium910 may include, but is not limited to, a digital and/or an analog communication medium (e.g., a fiber optic cable, a waveguide, a wired communication link, a wireless communication link, etc.).
FIG. 10 illustrates anexample computing device1000 in accordance with at least some embodiments of the present disclosure. In some examples,file manager170 ordirectory manager180 depicted inFIG. 1,FIG. 2 orFIG. 3 may be implemented oncomputing device1000. In these examples, elements ofcomputing device1000 may be arranged or configured for peer-to-peer data migration between nodes coupled via one or more peer-to-peer communication links. In a very basic configuration1001,computing device1000 typically includes one ormore processors1010 andsystem memory1020. A memory bus1030 can be used for communicating between theprocessor1010 and thesystem memory1020.
Depending on the desired configuration,processor1010 can be of any type including but not limited to a microprocessor (μP), a microcontroller (μC), a digital signal processor (DSP), or any combination thereof.Processor1010 can include one or more levels of caching, such as a level one cache1011 and a level twocache1012, a processor core1013, and registers1014. The processor core1013 can include an arithmetic logic unit (ALU), a floating point unit (FPU), a digital signal processing core (DSP Core), or any combination thereof. Amemory controller1015 can also be used with theprocessor1010, or in some implementations thememory controller1015 can be an internal part of theprocessor1010.
Depending on the desired configuration, thesystem memory1020 can be of any type including but not limited to volatile memory (such as RAM), non-volatile memory (such as ROM, flash memory, etc.) or any combination thereof.System memory1020 typically includes anoperating system1021, one ormore applications1022, andprogram data1024.Application1022 includesinstructions1023 that are arranged to perform the functions as described herein including the actions described with respect tofile manager170 architecture shown inFIG. 2,directory manager180 architecture shown inFIG. 3 or including the actions described with respect to the flow charts shown inFIGS. 7 and 8.Program Data1024 includesmigration data1025 that is useful for implementing instructions1023 (e.g., copying data, determining locations, providing directory information, providing calling cards, setting/adjusting time-to-live timers, etc.). In some examples,application1022 can be arranged to operate withprogram data1024 on anoperating system1021 such that implementations for peer-to-peer data migration between nodes coupled via one or more peer-to-peer communication links may be provided as described herein. This described basic configuration is illustrated inFIG. 10 by those components within dashed line1001.
Computing device1000 can have additional features or functionality, and additional interfaces to facilitate communications between the basic configuration1001 and any required devices and interfaces. For example, a bus/interface controller1040 can be used to facilitate communications between the basic configuration1001 and one or moredata storage devices1050 via a storage interface bus1041. Thedata storage devices1050 can beremovable storage devices1051,non-removable storage devices1052, or a combination thereof. Examples of removable storage and non-removable storage devices include magnetic disk devices such as flexible disk drives and hard-disk drives (HDD), optical disk drives such as compact disk (CD) drives or digital versatile disk (DVD) drives, solid state drives (SSD), and tape drives to name a few. Example computer storage media can include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information, such as computer readable instructions, data structures, program modules, or other data.
System memory1020,removable storage1051 andnon-removable storage1052 are all examples of computer storage media. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed bycomputing device1000. Any such computer storage media can be part ofcomputing device1000.
Computing device1000 can also include an interface bus1042 for facilitating communication from various interface devices (e.g., output interfaces, peripheral interfaces, and communication interfaces) to the basic configuration1001 via the bus/interface controller1040.Example output interfaces1070 include agraphics processing unit1061 and an audio processing unit1062, which can be configured to communicate to various external devices such as a display or speakers via one or more A/V ports1063. Exampleperipheral interfaces1060 include aserial interface controller1071 or a parallel interface controller1072, which can be configured to communicate with external devices such as input devices (e.g., keyboard, mouse, pen, voice input device, touch input device, etc.) or other peripheral devices (e.g., printer, scanner, etc.) via one or more I/O ports1073. Anexample communication interface1080 includes anetwork controller1081, which can be arranged to facilitate communications with one or moreother computing devices1090 over a network communication via one ormore communication ports1082. A network communication connection is one example of a communication media. Communication media may typically be embodied by computer readable instructions, data structures, program modules, or other data in a modulated data signal, such as a carrier wave or other transport mechanism, and includes any information delivery media. A “modulated data signal” can be a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media can include wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, radio frequency (RF), infrared (IR) and other wireless media. The term computer readable media as used herein can include both storage media and communication media.
Computing device1000 can be implemented as a portion of a small-form factor portable (or mobile) electronic device such as a cell phone, smart phone, a personal data assistant (PDA), a personal media player device, a wireless web-watch device, a personal headset device, an application specific device, or a hybrid device that include any of the above functions.Computing device1000 can also be implemented as a personal computer including both laptop computer and non-laptop computer configurations or implemented in a workstation or a server configuration.
References made in this disclosure to the term “responsive to” or “in response to” are not limited to responsiveness to a particular feature and/or structure. A feature may also be responsive to another feature and/or structure and also be located within that feature and/or structure. Moreover, when terms or phrases such as “coupled” or “responsive” or “in response to” or “in communication with”, etc. are used herein or in the claims that follow, these terms should be interpreted broadly. For example, the phrase “coupled to” may refer to being communicatively, electrically and/or operatively coupled as appropriate for the context in which the phrase is used.
Those skilled in the art will recognize that it is common within the art to describe devices and/or processes in the fashion set forth herein, and thereafter use engineering practices to integrate such described devices (e.g., transmitters, receivers, wireless devices, computing platforms, computing devices, tablets, handsets, etc.) and/or methods into data processing systems. That is, at least a portion of the devices and/or methods described herein can be integrated into a data processing system via a reasonable amount of experimentation. Those having skill in the art will recognize that a typical data processing system generally includes one or more of a system unit housing, a video display device, a memory such as volatile and non-volatile memory, processors such as microprocessors and digital signal processors, computational entities such as operating systems, drivers, graphical user interfaces, and applications programs, one or more interaction devices, such as a touch pad or screen, and/or control systems including feedback loops and control motors (e.g., feedback for sensing position and/or velocity; control motors for moving and/or adjusting components and/or quantities). A typical data processing system may be implemented utilizing any suitable commercially available component, such as those typically found in data computing/communication and/or network computing/communication systems.
The herein described subject matter sometimes illustrates different components or elements contained within, or connected with, different other components or elements. It is to be understood that such depicted architectures are merely examples, and that in fact many other architectures can be implemented which achieve the same functionality. In a conceptual sense, any arrangement of components to achieve the same functionality is effectively “associated” such that the desired functionality is achieved. Hence, any two components herein combined to achieve a particular functionality can be seen as “associated with” each other such that the desired functionality is achieved, irrespective of architectures or intermedial components. Likewise, any two components so associated can also be viewed as being “operably connected”, or “operably coupled”, to each other to achieve the desired functionality, and any two components capable of being so associated can also be viewed as being “operably couplable”, to each other to achieve the desired functionality. Specific examples of operably couplable include but are not limited to physically mateable and/or physically interacting components and/or wirelessly interactable and/or wirelessly interacting components and/or logically interacting and/or logically interactable components.
With respect to the use of substantially any plural and/or singular terms herein, those having skill in the art can translate from the plural to the singular and/or from the singular to the plural as is appropriate to the context and/or application. The various singular/plural permutations may be expressly set forth herein for sake of clarity.
It will be understood by those within the art that, in general, terms used herein, and especially in the appended claims (e.g., bodies of the appended claims) are generally intended as “open” terms (e.g., the term “including” should be interpreted as “including but not limited to,” the term “having” should be interpreted as “having at least,” the term “includes” should be interpreted as “includes but is not limited to,” etc.). It will be further understood by those within the art that if a specific number of an introduced claim recitation is intended, such an intent will be explicitly recited in the claim, and in the absence of such recitation no such intent is present. For example, as an aid to understanding, the following appended claims may contain usage of the introductory phrases “at least one” and “one or more” to introduce claim recitations. However, the use of such phrases should not be construed to imply that the introduction of a claim recitation by the indefinite articles “a” or “an” limits any particular claim containing such introduced claim recitation to inventions containing only one such recitation, even when the same claim includes the introductory phrases “one or more” or “at least one” and indefinite articles such as “a” or “an” (e.g., “a” and/or “an” should typically be interpreted to mean “at least one” or “one or more”); the same holds true for the use of definite articles used to introduce claim recitations. In addition, even if a specific number of an introduced claim recitation is explicitly recited, those skilled in the art will recognize that such recitation should typically be interpreted to mean at least the recited number (e.g., the bare recitation of “two recitations,” without other modifiers, typically means at least two recitations, or two or more recitations). Furthermore, in those instances where a convention analogous to “at least one of A, B, and C, etc.” is used, in general, such a construction is intended in the sense one having skill in the art would understand the convention (e.g., “a system having at least one of A, B, and C” would include but not be limited to systems that have A alone, B alone, C alone, A and B together, A and C together, B and C together, and/or A, B, and C together, etc.). In those instances where a convention analogous to “at least one of A, B, or C, etc.” is used, in general such a construction is intended in the sense one having skill in the art would understand the convention (e.g., “a system having at least one of A, B, or C” would include but not be limited to systems that have A alone, B alone, C alone, A and B together, A and C together, B and C together, and/or A, B, and C together, etc.). It will be further understood by those within the art that virtually any disjunctive word and/or phrase presenting two or more alternative terms, whether in the description, claims, or drawings, should be understood to contemplate the possibilities of including one of the terms, either of the terms, or both terms. For example, the phrase “A or B” will be understood to include the possibilities of “A” or “B” or “A and B.”
While various aspects and embodiments have been disclosed herein, other aspects and embodiments will be apparent to those skilled in the art. The various aspects and embodiments disclosed herein are for purposes of illustration and are not intended to be limiting, with the true scope and spirit being indicated by the following claims.