Browse Source

Added runner components. Restructured to file-per-component. Removed components.md.

Frederic G. MARAND 6 years ago
parent
commit
ea1ca35b3c
5 changed files with 137 additions and 73 deletions
  1. 81 36
      .idea/workspace.xml
  2. 33 0
      docs/README.md
  3. 6 36
      docs/event_handling.md
  4. 6 0
      docs/readline.md
  5. 11 1
      docs/storage_memory.md

+ 81 - 36
.idea/workspace.xml

@@ -2,9 +2,10 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="36eaad7a-0726-4217-b7e5-1b2c680697a1" name="Default" comment="">
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/docs/memory.md" />
-      <change type="MOVED" beforePath="$PROJECT_DIR$/doc/components.md" afterPath="$PROJECT_DIR$/docs/components.md" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/libraries/GOPATH__gache_.xml" afterPath="$PROJECT_DIR$/.idea/libraries/GOPATH__gache_.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/docs/event_handling.md" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/docs/readline.md" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/docs/components.md" afterPath="" />
+      <change type="MOVED" beforePath="$PROJECT_DIR$/docs/memory.md" afterPath="$PROJECT_DIR$/docs/storage_memory.md" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/docs/README.md" afterPath="$PROJECT_DIR$/docs/README.md" />
     </list>
     <ignored path="gache.iws" />
@@ -46,16 +47,18 @@
       <list>
         <option value="$PROJECT_DIR$/hello.go" />
         <option value="$PROJECT_DIR$/doc/components.md" />
+        <option value="$PROJECT_DIR$/docs/event_handling.md" />
+        <option value="$PROJECT_DIR$/docs/memory.md" />
         <option value="$PROJECT_DIR$/docs/components.md" />
+        <option value="$PROJECT_DIR$/docs/readline.md" />
         <option value="$PROJECT_DIR$/docs/README.md" />
-        <option value="$PROJECT_DIR$/docs/memory.md" />
       </list>
     </option>
   </component>
   <component name="ProjectFrameBounds">
     <option name="y" value="23" />
-    <option name="width" value="1436" />
-    <option name="height" value="877" />
+    <option name="width" value="1676" />
+    <option name="height" value="1027" />
   </component>
   <component name="ProjectInspectionProfilesVisibleTreeState">
     <entry key="Project Default">
@@ -110,6 +113,10 @@
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="AndroidView">
+        <subPane />
+      </pane>
+      <pane id="PackagesPane" />
       <pane id="Scope">
         <subPane subId="Project Files">
           <PATH>
@@ -158,11 +165,7 @@
           </PATH>
         </subPane>
       </pane>
-      <pane id="PackagesPane" />
       <pane id="Scratches" />
-      <pane id="AndroidView">
-        <subPane />
-      </pane>
     </panes>
   </component>
   <component name="PropertiesComponent">
@@ -542,22 +545,22 @@
     <servers />
   </component>
   <component name="ToolWindowManager">
-    <frame x="0" y="23" width="1436" height="877" extended-state="6" />
+    <frame x="0" y="23" width="1676" height="1027" extended-state="6" />
     <editor active="false" />
     <layout>
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
       <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32939914" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32938075" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Project" active="true" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.26327115" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.13988522" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="true" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2631265" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.13961814" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
@@ -640,7 +643,6 @@
         <state split_layout="SPLIT">
           <first_editor relative-caret-position="30">
             <caret line="2" column="22" selection-start-line="2" selection-start-column="22" selection-end-line="2" selection-end-column="22" />
-            <folding />
           </first_editor>
           <second_editor />
         </state>
@@ -649,7 +651,6 @@
         <state split_layout="SPLIT">
           <first_editor relative-caret-position="0">
             <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-            <folding />
           </first_editor>
           <second_editor>
             <js_state />
@@ -657,20 +658,20 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/docs/README.md">
-      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+    <entry file="file://$PROJECT_DIR$/docs/event_handling.md">
+      <provider editor-type-id="split-provider[text-editor;markdown-preview-editor]">
         <state split_layout="FIRST">
-          <first_editor relative-caret-position="285">
-            <caret line="19" column="0" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
+          <first_editor relative-caret-position="120">
+            <caret line="8" column="0" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
             <folding />
           </first_editor>
           <second_editor />
         </state>
       </provider>
-      <provider editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
+      <provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
         <state split_layout="SPLIT">
-          <first_editor relative-caret-position="0">
-            <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <first_editor relative-caret-position="345">
+            <caret line="23" column="0" selection-start-line="23" selection-start-column="0" selection-end-line="23" selection-end-column="0" />
             <folding />
           </first_editor>
           <second_editor>
@@ -679,20 +680,20 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/docs/components.md">
-      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
-        <state split_layout="FIRST">
-          <first_editor relative-caret-position="0">
-            <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+    <entry file="file://$PROJECT_DIR$/docs/storage_memory.md">
+      <provider editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+        <state split_layout="SPLIT">
+          <first_editor relative-caret-position="165">
+            <caret line="11" column="12" selection-start-line="11" selection-start-column="12" selection-end-line="11" selection-end-column="12" />
             <folding />
           </first_editor>
           <second_editor />
         </state>
       </provider>
-      <provider editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
+      <provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
         <state split_layout="SPLIT">
-          <first_editor relative-caret-position="452">
-            <caret line="45" column="0" selection-start-line="45" selection-start-column="0" selection-end-line="45" selection-end-column="0" />
+          <first_editor relative-caret-position="105">
+            <caret line="7" column="0" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
             <folding />
           </first_editor>
           <second_editor>
@@ -700,17 +701,39 @@
           </second_editor>
         </state>
       </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/docs/components.md">
       <provider editor-type-id="text-editor">
         <state relative-caret-position="180">
           <caret line="12" column="77" selection-start-line="12" selection-start-column="77" selection-end-line="12" selection-end-column="77" />
         </state>
       </provider>
+      <provider editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+        <state split_layout="FIRST">
+          <first_editor relative-caret-position="0">
+            <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+            <folding />
+          </first_editor>
+          <second_editor />
+        </state>
+      </provider>
+      <provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
+        <state split_layout="SPLIT">
+          <first_editor relative-caret-position="0">
+            <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+            <folding />
+          </first_editor>
+          <second_editor>
+            <js_state />
+          </second_editor>
+        </state>
+      </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/docs/memory.md">
+    <entry file="file://$PROJECT_DIR$/docs/readline.md">
       <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
-        <state split_layout="FIRST">
-          <first_editor relative-caret-position="150">
-            <caret line="10" column="0" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
+        <state split_layout="SPLIT">
+          <first_editor relative-caret-position="30">
+            <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
             <folding />
           </first_editor>
           <second_editor />
@@ -728,6 +751,28 @@
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/docs/README.md">
+      <provider editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+        <state split_layout="FIRST">
+          <first_editor relative-caret-position="750">
+            <caret line="50" column="2" selection-start-line="50" selection-start-column="2" selection-end-line="50" selection-end-column="2" />
+            <folding />
+          </first_editor>
+          <second_editor />
+        </state>
+      </provider>
+      <provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
+        <state split_layout="SPLIT">
+          <first_editor relative-caret-position="714">
+            <caret line="49" column="0" selection-start-line="49" selection-start-column="0" selection-end-line="49" selection-end-column="0" />
+            <folding />
+          </first_editor>
+          <second_editor>
+            <js_state />
+          </second_editor>
+        </state>
+      </provider>
+    </entry>
   </component>
   <component name="masterDetails">
     <states>

+ 33 - 0
docs/README.md

@@ -17,3 +17,36 @@ Like Memcached, plus...
   * Chained storage (fast → slow)
 
 But probably slower overall, but more convenient.
+
+## Components
+
+### Server
+
+* Runner
+  * POSIX-style options, not native in Go
+  * Configuration loading for systemd (and others) integration
+* Protocol handling (FSMs)
+  * Application: Memcache protocol proper
+  * Presentation: ASCII / Binary
+  * Transport "connection":
+    * TCP with persistent connections
+    * TCP without persistent connections
+    * UDP
+    * raw socketpair (stdin/stdout)
+  * [Event handling](event_handling.md)
+* [Readline equivalence](readline.md) for ASCII presentation interactions
+* Storage
+  * Pluggable storage
+    * Journaling
+  * Storage engines
+    * [Memory](storage_memory.md)
+    * Memcached, for use as a debugging proxy in front of a standard instance
+    * Others ?
+  * Memory
+      * Main memory allocation
+      * Slab allocator
+  * Reporting
+  * Background expiration lurker
+
+### Client library
+

+ 6 - 36
docs/components.md → docs/event_handling.md

@@ -1,30 +1,11 @@
-# Gache components
-## Server
+# Event handling
 
-* Protocol handling (FSMs)
-  * Application: Memcache protocol proper
-  * Presentation: ASCII / Binary
-  * Transport "connection":
-    * TCP with persistent connections
-    * TCP without persistent connections
-    * UDP
-    * raw socketpair (stdin/stdout)
-  * Event handling
-* Readline equivalence for ASCII presentation interactions
-* Storage
-  * Pluggable storage
-    * Journaling
-  * Storage engines
-    * Memory
-    * Memcached, for use as a debugging proxy in front of a standard instance
-    * Others ?
-  * Memory
-      * Main memory allocation
-      * Slab allocator
-  * Reporting
-  * Background expiration lurker
+* Golang runtime uses `epoll`/`kqueue`/IOCP so no need for `libevent` or similar.
+* See https://golang.org/search?q=netpoll#Global
+
+## Existing techniques
 
-### Event handling: builtin
+For reference only, since using Go means we gain automatic integration.
 
 From http://nginx.org/en/docs/events.html
 
@@ -39,15 +20,4 @@ From http://nginx.org/en/docs/events.html
 | IOCP      |       |       | X, Go   |     |                 | Recommended for Windows          |
 
 * UNIX: Solaris, HP-UX, IRIX, Tru64
-* Golang runtime uses `epoll`/`kqueue`/IOCP so no need for `libevent` or similar.
-* See https://golang.org/search?q=netpoll#Global
-
-### Readline
-
-* Emulated by https://github.com/chzyer/readline
-* "Video" on: https://asciinema.org/a/32oseof9mkilg7t7d4780qt4m
-* Demo source: https://github.com/chzyer/readline/blob/master/example/readline-demo/readline-demo.go
-
-
-## Client library
 

+ 6 - 0
docs/readline.md

@@ -0,0 +1,6 @@
+# Readline behavior
+
+* Emulated by https://github.com/chzyer/readline
+* "Video" on: https://asciinema.org/a/32oseof9mkilg7t7d4780qt4m
+* Demo source: https://github.com/chzyer/readline/blob/master/example/readline-demo/readline-demo.go
+

+ 11 - 1
docs/memory.md → docs/storage_memory.md

@@ -1,6 +1,16 @@
 # Memory allocation
 
-## Memcache slabs model
+## Level zero: Go native
+
+* In this early model, storage uses Go native objects and storage instead of building its own.
+* This is only to build an operational app structure.
+
+## Level one: in-app
+
+Very likely to be needed once the app structure is operational.
+
+## Reference
+### Memcache slabs allocator
 
 * http://www.mikeperham.com/2009/06/22/slabs-pages-chunks-and-memcached/ (2009)
   * Older versions of memcached used slabs sized based on powers of two, so you'd have a 1KB slab, 2KB slab, 4KB slab, ..., all the way to 1MB.