| … | … | @@ -81,6 +81,9 @@ The network connection is provided by a |
| 81 | 81 | +-------------+ |
| 82 | 82 | ``` |
| 83 | 83 | |
| 84 | Complex storage network fabrics can be created with the |
| 85 | [ProxyNode](https://wiki.opencog.org/w/ProxyNode). Basic proxies |
| 86 | exist for mirroring, read load-balancing, write buffering, etc. |
| 84 | 87 | |
| 85 | 88 | Example Usage |
| 86 | 89 | ------------- |
| … | … | @@ -115,8 +118,39 @@ granular load and store is possible; see the |
| 115 | 118 | |
| 116 | 119 | Status |
| 117 | 120 | ------ |
| 118 | | This is **Version 1.1.0**. All 26 (13+13) unit tests consistently |
| 119 | | pass. |
| 121 | This is **Version 1.2.0**. All 27 (13+13+1) unit tests consistently |
| 122 | pass. For a general overview, see the wiki documentation for the |
| 123 | [StorageNode](https://wiki.opencog.org/w/StorageNode) and |
| 124 | [CogStorageNode](https://wiki.opencog.org/w/CogStorageNode). |
| 125 | |
| 126 | Changes since January 2025: |
| 127 | * Barriers are now implemented correctly and work reliably. Barriers |
| 128 | are fences that ensure all operations that come before are completed, |
| 129 | before any operations that come after are started. |
| 130 | * Operations that don't need a reply (e.g. `*-store-atom-*`) no longer |
| 131 | wait for a confirmation reply to be received. This increases |
| 132 | throughput significantly. |
| 133 | * Busy-wait spinloops have been replaced by c++-20 `std::atomic::wait()` |
| 134 | which means idle time on congested queues is significantly reduced. |
| 135 | * Cogserver shutdown in unit tests has been fixed. For testing, the |
| 136 | unit tests start a cogserver, do TCP/IP I/O to it, and then shut down |
| 137 | the cogserver. These tests had been plagued by shutdown issues, where |
| 138 | the tests pass but then the cogserver would hang or crash on shutdown. |
| 139 | These issues have all been fixed. You can now start and stop |
| 140 | cogservers very rapidly, on demand, in a reliable fashion. |
| 141 | * A random assortment of bug fixes and changes, driving by changes in |
| 142 | the core AtomSpace. |
| 143 | |
| 144 | There is one missing feature, but no one uses it (yet): support for |
| 145 | multiple atomspaces (aka frames) is missing. Work on adding this was |
| 146 | started but is low priority. One unit test works. See the `cog-simple` |
| 147 | directory. |
| 148 | |
| 149 | Build |
| 150 | ----- |
| 151 | Prerequistes: of course the AtomSpace is needed: |
| 152 | https://github.com/opencog/atomspace but so is the base `StorageNode` |
| 153 | API, at https://github.com/opencog/atomspace-storage |
| 120 | 154 | |
| 121 | 155 | Build as below. Note parallel testing works! |
| 122 | 156 | ``` |
| … | … | @@ -126,19 +160,6 @@ make -j |
| 126 | 160 | make -j check ARGS=-j |
| 127 | 161 | ``` |
| 128 | 162 | |
| 129 | | Performance looks good. Two of the unit tests take about 20 seconds |
| 130 | | each to run; two more take a few minutes. This is intentional, |
| 131 | | they are pounding the server with large datasets. |
| 132 | | |
| 133 | | This is a "stable" version. There are no known bugs at this time. |
| 134 | | It is being used in "production" environments, successfully transferring |
| 135 | | gigabytes of data around. |
| 136 | | |
| 137 | | There is one missing feature, but no one uses it (yet): support for |
| 138 | | multiple atomspaces (aka frames) is missing. Work on adding this was |
| 139 | | started but is low priority. One unit test works. See the `cog-simple` |
| 140 | | directory. |
| 141 | | |
| 142 | 163 | Design |
| 143 | 164 | ------ |
| 144 | 165 | There are actually two implementations in this repo. One that is |
| … | … | @@ -180,14 +201,8 @@ scheme> (define csn (CogStorageNode "cog://example.com/")) |
| 180 | 201 | scheme> (cog-open csn) |
| 181 | 202 | ``` |
| 182 | 203 | |
| 183 | | URL's |
| 184 | | ----- |
| 204 | ### URL's |
| 185 | 205 | Supported URL's include: |
| 186 | 206 | * `cog://example.com/` -- standard internet hostname |
| 187 | 207 | * `cog://1.2.3.4/` -- standard dotted IPv4 address |
| 188 | 208 | * `cog://example.com:17001` -- specify the port of the cogserver. |
| 189 | | |
| 190 | | See |
| 191 | | [proxying](https://github.com/opencog/atomspace/tree/master/opencog/persist/proxy) |
| 192 | | for details about how the cogserver can pass on I/O requests to other |
| 193 | | storage nodes. |