]> Cypherpunks.ru repositories - nncp.git/commitdiff
Merge branch 'develop' v7.2.1
authorSergey Matveev <stargrave@stargrave.org>
Fri, 9 Jul 2021 12:43:00 +0000 (15:43 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 9 Jul 2021 12:43:00 +0000 (15:43 +0300)
doc/download.texi
doc/news.ru.texi
doc/news.texi
src/nncp.go
src/progress.go
src/sp.go
src/toss.go

index 28fbda84e773ea20ba224a3abd8eecf9f0b77081..c2b364f631bf9e0bd3f41a6e99530a8cd6cf455d 100644 (file)
@@ -28,6 +28,10 @@ Tarballs include all necessary required libraries:
 @multitable {XXXXX} {XXXX-XX-XX} {XXXX KiB} {link sign} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
 @headitem Version @tab Date @tab Size @tab Tarball @tab SHA256 checksum
 
+@item @ref{Release 7_2_0, 7.2.0} @tab 2021-07-08 @tab 1136 KiB
+@tab @url{download/nncp-7.2.0.tar.xz, link} @url{download/nncp-7.2.0.tar.xz.sig, sign}
+@tab @code{70DBB97B 86C9B4B6 E35CFF02 B8C9FAE2 4323EEA5 C56403A2 66CBA268 D82F5077}
+
 @item @ref{Release 7_1_1, 7.1.1} @tab 2021-07-06 @tab 1132 KiB
 @tab @url{download/nncp-7.1.1.tar.xz, link} @url{download/nncp-7.1.1.tar.xz.sig, sign}
 @tab @code{B741C9E3 EC3DB342 893FE081 888C40E4 B94E4298 E5C1A8E0 BA4D179C C239CCCA}
index eeaca1ec4101f1603f1f7f527d6fde044753e93b..56710405360d63fc41962f3575aa7c87fe11493b 100644 (file)
@@ -1,6 +1,66 @@
 @node Новости
 @section Новости
 
+@menu
+* Релиз 7.2.1::
+* Релиз 7.2.0::
+* Релиз 7.1.1::
+* Релиз 7.1.0::
+* Релиз 7.0.0::
+* Релиз 6.6.0::
+* Релиз 6.5.0::
+* Релиз 6.4.0::
+* Релиз 6.3.0::
+* Релиз 6.2.1::
+* Релиз 6.2.0::
+* Релиз 6.1.0::
+* Релиз 6.0.0::
+* Релиз 5.6.0::
+* Релиз 5.5.1::
+* Релиз 5.5.0::
+* Релиз 5.4.1::
+* Релиз 5.4.0::
+* Релиз 5.3.3::
+* Релиз 5.3.2::
+* Релиз 5.3.1::
+* Релиз 5.3.0::
+* Релиз 5.2.1::
+* Релиз 5.2.0::
+* Релиз 5.1.2::
+* Релиз 5.1.1::
+* Релиз 5.1.0::
+* Релиз 5.0.0::
+* Релиз 4.1::
+* Релиз 4.0::
+* Релиз 3.4::
+* Релиз 3.3::
+* Релиз 3.2::
+* Релиз 3.1::
+* Релиз 3.0::
+* Релиз 2.0::
+* Релиз 1.0::
+* Релиз 0.12::
+* Релиз 0.11::
+* Релиз 0.10::
+* Релиз 0.9::
+* Релиз 0.8::
+* Релиз 0.7::
+* Релиз 0.6::
+* Релиз 0.5::
+* Релиз 0.4::
+* Релиз 0.3::
+* Релиз 0.2::
+@end menu
+
+@node Релиз 7.2.1
+@subsection Релиз 7.2.1
+@itemize
+
+@item
+Небольшие оптимизации в online командах.
+
+@end itemize
+
 @node Релиз 7.2.0
 @subsection Релиз 7.2.0
 @itemize
index adf538b1d8c4079d29dd6f000901a21f8249e289..dcb808715a27dab0821dff5a939bae7f78216ba2 100644 (file)
@@ -3,6 +3,66 @@
 
 See also this page @ref{Новости, on russian}.
 
+@menu
+* Release 7.2.1: Release 7_2_1.
+* Release 7.2.0: Release 7_2_0.
+* Release 7.1.1: Release 7_1_1.
+* Release 7.1.0: Release 7_1_0.
+* Release 7.0.0: Release 7_0_0.
+* Release 6.6.0: Release 6_6_0.
+* Release 6.5.0: Release 6_5_0.
+* Release 6.4.0: Release 6_4_0.
+* Release 6.3.0: Release 6_3_0.
+* Release 6.2.1: Release 6_2_1.
+* Release 6.2.0: Release 6_2_0.
+* Release 6.1.0: Release 6_1_0.
+* Release 6.0.0: Release 6_0_0.
+* Release 5.6.0: Release 5_6_0.
+* Release 5.5.1: Release 5_5_1.
+* Release 5.5.0: Release 5_5_0.
+* Release 5.4.1: Release 5_4_1.
+* Release 5.4.0: Release 5_4_0.
+* Release 5.3.3: Release 5_3_3.
+* Release 5.3.2: Release 5_3_2.
+* Release 5.3.1: Release 5_3_1.
+* Release 5.3.0: Release 5_3_0.
+* Release 5.2.1: Release 5_2_1.
+* Release 5.2.0: Release 5_2_0.
+* Release 5.1.2: Release 5_1_2.
+* Release 5.1.1: Release 5_1_1.
+* Release 5.1.0: Release 5_1_0.
+* Release 5.0.0: Release 5_0_0.
+* Release 4.1: Release 4_1.
+* Release 4.0: Release 4_0.
+* Release 3.4: Release 3_4.
+* Release 3.3: Release 3_3.
+* Release 3.2: Release 3_2.
+* Release 3.1: Release 3_1.
+* Release 3.0: Release 3_0.
+* Release 2.0: Release 2_0.
+* Release 1.0: Release 1_0.
+* Release 0.12: Release 0_12.
+* Release 0.11: Release 0_11.
+* Release 0.10: Release 0_10.
+* Release 0.9: Release 0_9.
+* Release 0.8: Release 0_8.
+* Release 0.7: Release 0_7.
+* Release 0.6: Release 0_6.
+* Release 0.5: Release 0_5.
+* Release 0.4: Release 0_4.
+* Release 0.3: Release 0_3.
+* Release 0.2: Release 0_2.
+@end menu
+
+@node Release 7_2_1
+@section Release 7.2.1
+@itemize
+
+@item
+Small optimizations in online commands.
+
+@end itemize
+
 @node Release 7_2_0
 @section Release 7.2.0
 @itemize
index 4e0eb667aa72b7cbb34286d046c25b06c676a0b7..2c087b3511cb45d594046228828ceaf23d3ad9cd 100644 (file)
@@ -40,7 +40,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.`
 const Base32Encoded32Len = 52
 
 var (
-       Version string = "7.2.0"
+       Version string = "7.2.1"
 
        Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding)
 )
index 0c2f0ee2c99f7cd874edd56fbded6e815bbdf8d2..5ebc72bdb20b2e16df5ba53ed33bf0669f5a13b5 100644 (file)
@@ -132,9 +132,9 @@ func Progress(prefix string, les LEs) {
                }
        }
        progressBarsLock.RLock()
-       pb, exists := progressBars[pkt]
+       pb := progressBars[pkt]
        progressBarsLock.RUnlock()
-       if !exists {
+       if pb == nil {
                progressBarsLock.Lock()
                pb = ProgressBarNew(size, fullsize)
                progressBars[pkt] = pb
@@ -156,8 +156,8 @@ func Progress(prefix string, les LEs) {
 
 func ProgressKill(pkt string) {
        progressBarsLock.Lock()
-       pb, exists := progressBars[pkt]
-       if exists {
+       pb := progressBars[pkt]
+       if pb != nil {
                pb.Kill()
                delete(progressBars, pkt)
        }
index 1bb8f75d6e628b4b294f0b931dbdaf6d7af6b33c..5937d35e30084d5480adedf273afd2e209aa1ddf 100644 (file)
--- a/src/sp.go
+++ b/src/sp.go
@@ -806,6 +806,7 @@ func (state *SPState) StartWorkers(
                defer conn.Close()
                defer state.SetDead()
                defer state.wg.Done()
+               buf := make([]byte, MaxSPSize-SPHeadOverhead-SPFileOverhead)
                for {
                        if state.NotAlive() {
                                return
@@ -874,6 +875,9 @@ func (state *SPState) StartWorkers(
                                fdAndFullSize, exists := state.fds[pth]
                                state.fdsLock.RUnlock()
                                if !exists {
+                                       state.Ctx.LogD("sp-queue-open", lesp, func(les LEs) string {
+                                               return logMsg(les) + ": opening"
+                                       })
                                        fd, err := os.Open(pth)
                                        if err != nil {
                                                state.Ctx.LogE("sp-queue-open", lesp, err, func(les LEs) string {
@@ -895,7 +899,8 @@ func (state *SPState) StartWorkers(
                                }
                                fd := fdAndFullSize.fd
                                fullSize := fdAndFullSize.fullSize
-                               var buf []byte
+                               lesp = append(lesp, LE{"FullSize", fullSize})
+                               var bufRead []byte
                                if freq.Offset < uint64(fullSize) {
                                        state.Ctx.LogD("sp-file-seek", lesp, func(les LEs) string {
                                                return logMsg(les) + ": seeking"
@@ -906,7 +911,6 @@ func (state *SPState) StartWorkers(
                                                })
                                                return
                                        }
-                                       buf = make([]byte, MaxSPSize-SPHeadOverhead-SPFileOverhead)
                                        n, err := fd.Read(buf)
                                        if err != nil {
                                                state.Ctx.LogE("sp-file-read", lesp, err, func(les LEs) string {
@@ -914,12 +918,13 @@ func (state *SPState) StartWorkers(
                                                })
                                                return
                                        }
-                                       buf = buf[:n]
+                                       bufRead = buf[:n]
                                        lesp = append(
                                                les,
                                                LE{"XX", string(TTx)},
                                                LE{"Pkt", pktName},
                                                LE{"Size", int64(n)},
+                                               LE{"FullSize", fullSize},
                                        )
                                        state.Ctx.LogD("sp-file-read", lesp, func(les LEs) string {
                                                return fmt.Sprintf(
@@ -927,14 +932,15 @@ func (state *SPState) StartWorkers(
                                                        logMsg(les), humanize.IBytes(uint64(n)),
                                                )
                                        })
+                               } else {
+                                       state.closeFd(pth)
                                }
-                               state.closeFd(pth)
                                payload = MarshalSP(SPTypeFile, SPFile{
                                        Hash:    freq.Hash,
                                        Offset:  freq.Offset,
-                                       Payload: buf,
+                                       Payload: bufRead,
                                })
-                               ourSize := freq.Offset + uint64(len(buf))
+                               ourSize := freq.Offset + uint64(len(bufRead))
                                lesp = append(
                                        les,
                                        LE{"XX", string(TTx)},
@@ -947,26 +953,25 @@ func (state *SPState) StartWorkers(
                                        Progress("Tx", lesp)
                                }
                                state.Lock()
-                               if len(state.queueTheir) > 0 && *state.queueTheir[0].freq.Hash == *freq.Hash {
+                               for i, q := range state.queueTheir {
+                                       if *q.freq.Hash != *freq.Hash {
+                                               continue
+                                       }
                                        if ourSize == uint64(fullSize) {
                                                state.Ctx.LogD("sp-file-finished", lesp, func(les LEs) string {
                                                        return logMsg(les) + ": finished"
                                                })
-                                               if len(state.queueTheir) > 1 {
-                                                       state.queueTheir = state.queueTheir[1:]
-                                               } else {
-                                                       state.queueTheir = state.queueTheir[:0]
-                                               }
+                                               state.queueTheir = append(
+                                                       state.queueTheir[:i],
+                                                       state.queueTheir[i+1:]...,
+                                               )
                                                if state.Ctx.ShowPrgrs {
                                                        delete(state.progressBars, pktName)
                                                }
                                        } else {
-                                               state.queueTheir[0].freq.Offset += uint64(len(buf))
+                                               q.freq.Offset = ourSize
                                        }
-                               } else {
-                                       state.Ctx.LogD("sp-file-disappeared", lesp, func(les LEs) string {
-                                               return logMsg(les) + ": queue disappeared"
-                                       })
+                                       break
                                }
                                state.Unlock()
                        }
@@ -1319,9 +1324,9 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) {
                        }
                        fullsize := int64(0)
                        state.RLock()
-                       infoTheir, ok := state.infosTheir[*file.Hash]
+                       infoTheir := state.infosTheir[*file.Hash]
                        state.RUnlock()
-                       if !ok {
+                       if infoTheir == nil {
                                state.Ctx.LogE("sp-file-open", lesp, err, func(les LEs) string {
                                        return logMsg(les) + ": unknown file"
                                })
@@ -1515,16 +1520,17 @@ func (state *SPState) ProcessSP(payload []byte) ([][]byte, error) {
                        state.Lock()
                        delete(state.infosTheir, *file.Hash)
                        state.Unlock()
-                       if hasherAndOffset != nil {
-                               go func() {
-                                       spCheckerTasks <- SPCheckerTask{
-                                               nodeId: state.Node.Id,
-                                               hsh:    file.Hash,
-                                               mth:    hasherAndOffset.mth,
-                                               done:   state.payloads,
-                                       }
-                               }()
-                       }
+                       go func() {
+                               t := SPCheckerTask{
+                                       nodeId: state.Node.Id,
+                                       hsh:    file.Hash,
+                                       done:   state.payloads,
+                               }
+                               if hasherAndOffset != nil {
+                                       t.mth = hasherAndOffset.mth
+                               }
+                               spCheckerTasks <- t
+                       }()
 
                case SPTypeDone:
                        lesp := append(les, LE{"Type", "done"})
index dc5573bd675527fb63084b5b2be2972dfbee130c..21d3007e74ecd263c86030dbc1bdf1f9e06998a4 100644 (file)
@@ -120,8 +120,8 @@ func jobProcess(
                }
                argsStr := strings.Join(append([]string{handle}, args...), " ")
                les = append(les, LE{"Type", "exec"}, LE{"Dst", argsStr})
-               cmdline, exists := sender.Exec[handle]
-               if !exists || len(cmdline) == 0 {
+               cmdline := sender.Exec[handle]
+               if len(cmdline) == 0 {
                        err = errors.New("No handle found")
                        ctx.LogE(
                                "rx-no-handle", les, err,
@@ -165,11 +165,11 @@ func jobProcess(
                                return err
                        }
                        if len(sendmail) > 0 && ctx.NotifyExec != nil {
-                               notify, exists := ctx.NotifyExec[sender.Name+"."+handle]
-                               if !exists {
-                                       notify, exists = ctx.NotifyExec["*."+handle]
+                               notify := ctx.NotifyExec[sender.Name+"."+handle]
+                               if notify == nil {
+                                       notify = ctx.NotifyExec["*."+handle]
                                }
-                               if exists {
+                               if notify != nil {
                                        cmd := exec.Command(
                                                sendmail[0],
                                                append(sendmail[1:], notify.To)...,